@prefecthq/graphs 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/assets/nodeLayout.worker-eac186e1.js.map +1 -0
  2. package/dist/graphs.mjs +4 -2
  3. package/dist/graphs.umd.js +119 -115
  4. package/dist/graphs.umd.js.map +1 -1
  5. package/dist/index-fc45ccf7.mjs +16259 -0
  6. package/dist/index-fc45ccf7.mjs.map +1 -0
  7. package/dist/style.css +1 -1
  8. package/dist/types/demo/utilities/timescaleData.d.ts +2 -1
  9. package/dist/types/src/FlowRunTimeline.vue.d.ts +34 -18
  10. package/dist/types/src/models/FlowRunTimeline.d.ts +122 -4
  11. package/dist/types/src/pixiFunctions/bitmapFonts.d.ts +4 -5
  12. package/dist/types/src/pixiFunctions/deselectLayer.d.ts +12 -0
  13. package/dist/types/src/pixiFunctions/index.d.ts +4 -1
  14. package/dist/types/src/pixiFunctions/timelineEdge.d.ts +32 -0
  15. package/dist/types/src/pixiFunctions/timelineGuide.d.ts +12 -3
  16. package/dist/types/src/pixiFunctions/timelineGuides.d.ts +8 -12
  17. package/dist/types/src/pixiFunctions/timelineNode.d.ts +25 -7
  18. package/dist/types/src/pixiFunctions/timelineNodes.d.ts +45 -0
  19. package/dist/types/src/pixiFunctions/timelinePlayhead.d.ts +7 -3
  20. package/dist/types/src/pixiFunctions/timelineScale.d.ts +7 -0
  21. package/dist/types/src/utilities/index.d.ts +2 -0
  22. package/dist/types/src/utilities/map.d.ts +1 -0
  23. package/dist/types/src/utilities/math.d.ts +1 -1
  24. package/dist/types/src/utilities/style.d.ts +4 -0
  25. package/dist/types/src/utilities/time.d.ts +3 -0
  26. package/dist/types/src/workers/nodeLayout.worker.d.ts +1 -0
  27. package/dist/{viewport.es-975b1df9.mjs → viewport.es-bb25550c.mjs} +2 -2
  28. package/dist/{viewport.es-975b1df9.mjs.map → viewport.es-bb25550c.mjs.map} +1 -1
  29. package/package.json +3 -2
  30. package/dist/index-6ad35b53.mjs +0 -13750
  31. package/dist/index-6ad35b53.mjs.map +0 -1
  32. package/dist/types/demo/components/PContextAccordionItem.vue.d.ts +0 -75
@@ -1,74 +1,78 @@
1
- (function(At,dt){typeof exports=="object"&&typeof module<"u"?dt(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],dt):(At=typeof globalThis<"u"?globalThis:At||self,dt(At["prefect-graphs"]={},At.Vue))})(this,function(At,dt){"use strict";var zv=Object.defineProperty;var Yv=(At,dt,Wt)=>dt in At?zv(At,dt,{enumerable:!0,configurable:!0,writable:!0,value:Wt}):At[dt]=Wt;var K=(At,dt,Wt)=>(Yv(At,typeof dt!="symbol"?dt+"":dt,Wt),Wt);var Wt=Math.PI*2,po=180/Math.PI,vo=Math.PI/180,bt;(function(r){r[r.POLY=0]="POLY",r[r.RECT=1]="RECT",r[r.CIRC=2]="CIRC",r[r.ELIP=3]="ELIP",r[r.RREC=4]="RREC"})(bt||(bt={}));var X=function(){function r(e,t){e===void 0&&(e=0),t===void 0&&(t=0),this.x=0,this.y=0,this.x=e,this.y=t}return r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.copyFrom=function(e){return this.set(e.x,e.y),this},r.prototype.copyTo=function(e){return e.set(this.x,this.y),e},r.prototype.equals=function(e){return e.x===this.x&&e.y===this.y},r.prototype.set=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),this.x=e,this.y=t,this},r.prototype.toString=function(){return"[@pixi/math:Point x="+this.x+" y="+this.y+"]"},r}(),gi=[new X,new X,new X,new X],j=function(){function r(e,t,i,n){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),this.x=Number(e),this.y=Number(t),this.width=Number(i),this.height=Number(n),this.type=bt.RECT}return Object.defineProperty(r.prototype,"left",{get:function(){return this.x},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"right",{get:function(){return this.x+this.width},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"top",{get:function(){return this.y},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!1,configurable:!0}),Object.defineProperty(r,"EMPTY",{get:function(){return new r(0,0,0,0)},enumerable:!1,configurable:!0}),r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.copyFrom=function(e){return this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height,this},r.prototype.copyTo=function(e){return e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e},r.prototype.contains=function(e,t){return this.width<=0||this.height<=0?!1:e>=this.x&&e<this.x+this.width&&t>=this.y&&t<this.y+this.height},r.prototype.intersects=function(e,t){if(!t){var i=this.x<e.x?e.x:this.x,n=this.right>e.right?e.right:this.right;if(n<=i)return!1;var s=this.y<e.y?e.y:this.y,a=this.bottom>e.bottom?e.bottom:this.bottom;return a>s}var o=this.left,h=this.right,u=this.top,l=this.bottom;if(h<=o||l<=u)return!1;var f=gi[0].set(e.left,e.top),c=gi[1].set(e.left,e.bottom),d=gi[2].set(e.right,e.top),p=gi[3].set(e.right,e.bottom);if(d.x<=f.x||c.y<=f.y)return!1;var v=Math.sign(t.a*t.d-t.b*t.c);if(v===0||(t.apply(f,f),t.apply(c,c),t.apply(d,d),t.apply(p,p),Math.max(f.x,c.x,d.x,p.x)<=o||Math.min(f.x,c.x,d.x,p.x)>=h||Math.max(f.y,c.y,d.y,p.y)<=u||Math.min(f.y,c.y,d.y,p.y)>=l))return!1;var _=v*(c.y-f.y),m=v*(f.x-c.x),g=_*o+m*u,y=_*h+m*u,b=_*o+m*l,x=_*h+m*l;if(Math.max(g,y,b,x)<=_*f.x+m*f.y||Math.min(g,y,b,x)>=_*p.x+m*p.y)return!1;var T=v*(f.y-d.y),w=v*(d.x-f.x),A=T*o+w*u,S=T*h+w*u,E=T*o+w*l,D=T*h+w*l;return!(Math.max(A,S,E,D)<=T*f.x+w*f.y||Math.min(A,S,E,D)>=T*p.x+w*p.y)},r.prototype.pad=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),this.x-=e,this.y-=t,this.width+=e*2,this.height+=t*2,this},r.prototype.fit=function(e){var t=Math.max(this.x,e.x),i=Math.min(this.x+this.width,e.x+e.width),n=Math.max(this.y,e.y),s=Math.min(this.y+this.height,e.y+e.height);return this.x=t,this.width=Math.max(i-t,0),this.y=n,this.height=Math.max(s-n,0),this},r.prototype.ceil=function(e,t){e===void 0&&(e=1),t===void 0&&(t=.001);var i=Math.ceil((this.x+this.width-t)*e)/e,n=Math.ceil((this.y+this.height-t)*e)/e;return this.x=Math.floor((this.x+t)*e)/e,this.y=Math.floor((this.y+t)*e)/e,this.width=i-this.x,this.height=n-this.y,this},r.prototype.enlarge=function(e){var t=Math.min(this.x,e.x),i=Math.max(this.x+this.width,e.x+e.width),n=Math.min(this.y,e.y),s=Math.max(this.y+this.height,e.y+e.height);return this.x=t,this.width=i-t,this.y=n,this.height=s-n,this},r.prototype.toString=function(){return"[@pixi/math:Rectangle x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},r}(),_o=function(){function r(e,t,i){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),this.x=e,this.y=t,this.radius=i,this.type=bt.CIRC}return r.prototype.clone=function(){return new r(this.x,this.y,this.radius)},r.prototype.contains=function(e,t){if(this.radius<=0)return!1;var i=this.radius*this.radius,n=this.x-e,s=this.y-t;return n*=n,s*=s,n+s<=i},r.prototype.getBounds=function(){return new j(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)},r.prototype.toString=function(){return"[@pixi/math:Circle x="+this.x+" y="+this.y+" radius="+this.radius+"]"},r}(),mo=function(){function r(e,t,i,n){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),this.x=e,this.y=t,this.width=i,this.height=n,this.type=bt.ELIP}return r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.contains=function(e,t){if(this.width<=0||this.height<=0)return!1;var i=(e-this.x)/this.width,n=(t-this.y)/this.height;return i*=i,n*=n,i+n<=1},r.prototype.getBounds=function(){return new j(this.x-this.width,this.y-this.height,this.width,this.height)},r.prototype.toString=function(){return"[@pixi/math:Ellipse x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},r}(),yi=function(){function r(){for(var e=arguments,t=[],i=0;i<arguments.length;i++)t[i]=e[i];var n=Array.isArray(t[0])?t[0]:t;if(typeof n[0]!="number"){for(var s=[],a=0,o=n.length;a<o;a++)s.push(n[a].x,n[a].y);n=s}this.points=n,this.type=bt.POLY,this.closeStroke=!0}return r.prototype.clone=function(){var e=this.points.slice(),t=new r(e);return t.closeStroke=this.closeStroke,t},r.prototype.contains=function(e,t){for(var i=!1,n=this.points.length/2,s=0,a=n-1;s<n;a=s++){var o=this.points[s*2],h=this.points[s*2+1],u=this.points[a*2],l=this.points[a*2+1],f=h>t!=l>t&&e<(u-o)*((t-h)/(l-h))+o;f&&(i=!i)}return i},r.prototype.toString=function(){return"[@pixi/math:Polygon"+("closeStroke="+this.closeStroke)+("points="+this.points.reduce(function(e,t){return e+", "+t},"")+"]")},r}(),go=function(){function r(e,t,i,n,s){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),s===void 0&&(s=20),this.x=e,this.y=t,this.width=i,this.height=n,this.radius=s,this.type=bt.RREC}return r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height,this.radius)},r.prototype.contains=function(e,t){if(this.width<=0||this.height<=0)return!1;if(e>=this.x&&e<=this.x+this.width&&t>=this.y&&t<=this.y+this.height){var i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(t>=this.y+i&&t<=this.y+this.height-i||e>=this.x+i&&e<=this.x+this.width-i)return!0;var n=e-(this.x+i),s=t-(this.y+i),a=i*i;if(n*n+s*s<=a||(n=e-(this.x+this.width-i),n*n+s*s<=a)||(s=t-(this.y+this.height-i),n*n+s*s<=a)||(n=e-(this.x+i),n*n+s*s<=a))return!0}return!1},r.prototype.toString=function(){return"[@pixi/math:RoundedRectangle x="+this.x+" y="+this.y+("width="+this.width+" height="+this.height+" radius="+this.radius+"]")},r}(),Oe=function(){function r(e,t,i,n){i===void 0&&(i=0),n===void 0&&(n=0),this._x=i,this._y=n,this.cb=e,this.scope=t}return r.prototype.clone=function(e,t){return e===void 0&&(e=this.cb),t===void 0&&(t=this.scope),new r(e,t,this._x,this._y)},r.prototype.set=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),(this._x!==e||this._y!==t)&&(this._x=e,this._y=t,this.cb.call(this.scope)),this},r.prototype.copyFrom=function(e){return(this._x!==e.x||this._y!==e.y)&&(this._x=e.x,this._y=e.y,this.cb.call(this.scope)),this},r.prototype.copyTo=function(e){return e.set(this._x,this._y),e},r.prototype.equals=function(e){return e.x===this._x&&e.y===this._y},r.prototype.toString=function(){return"[@pixi/math:ObservablePoint x="+0+" y="+0+" scope="+this.scope+"]"},Object.defineProperty(r.prototype,"x",{get:function(){return this._x},set:function(e){this._x!==e&&(this._x=e,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"y",{get:function(){return this._y},set:function(e){this._y!==e&&(this._y=e,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),r}(),gt=function(){function r(e,t,i,n,s,a){e===void 0&&(e=1),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=1),s===void 0&&(s=0),a===void 0&&(a=0),this.array=null,this.a=e,this.b=t,this.c=i,this.d=n,this.tx=s,this.ty=a}return r.prototype.fromArray=function(e){this.a=e[0],this.b=e[1],this.c=e[3],this.d=e[4],this.tx=e[2],this.ty=e[5]},r.prototype.set=function(e,t,i,n,s,a){return this.a=e,this.b=t,this.c=i,this.d=n,this.tx=s,this.ty=a,this},r.prototype.toArray=function(e,t){this.array||(this.array=new Float32Array(9));var i=t||this.array;return e?(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},r.prototype.apply=function(e,t){t=t||new X;var i=e.x,n=e.y;return t.x=this.a*i+this.c*n+this.tx,t.y=this.b*i+this.d*n+this.ty,t},r.prototype.applyInverse=function(e,t){t=t||new X;var i=1/(this.a*this.d+this.c*-this.b),n=e.x,s=e.y;return t.x=this.d*i*n+-this.c*i*s+(this.ty*this.c-this.tx*this.d)*i,t.y=this.a*i*s+-this.b*i*n+(-this.ty*this.a+this.tx*this.b)*i,t},r.prototype.translate=function(e,t){return this.tx+=e,this.ty+=t,this},r.prototype.scale=function(e,t){return this.a*=e,this.d*=t,this.c*=e,this.b*=t,this.tx*=e,this.ty*=t,this},r.prototype.rotate=function(e){var t=Math.cos(e),i=Math.sin(e),n=this.a,s=this.c,a=this.tx;return this.a=n*t-this.b*i,this.b=n*i+this.b*t,this.c=s*t-this.d*i,this.d=s*i+this.d*t,this.tx=a*t-this.ty*i,this.ty=a*i+this.ty*t,this},r.prototype.append=function(e){var t=this.a,i=this.b,n=this.c,s=this.d;return this.a=e.a*t+e.b*n,this.b=e.a*i+e.b*s,this.c=e.c*t+e.d*n,this.d=e.c*i+e.d*s,this.tx=e.tx*t+e.ty*n+this.tx,this.ty=e.tx*i+e.ty*s+this.ty,this},r.prototype.setTransform=function(e,t,i,n,s,a,o,h,u){return this.a=Math.cos(o+u)*s,this.b=Math.sin(o+u)*s,this.c=-Math.sin(o-h)*a,this.d=Math.cos(o-h)*a,this.tx=e-(i*this.a+n*this.c),this.ty=t-(i*this.b+n*this.d),this},r.prototype.prepend=function(e){var t=this.tx;if(e.a!==1||e.b!==0||e.c!==0||e.d!==1){var i=this.a,n=this.c;this.a=i*e.a+this.b*e.c,this.b=i*e.b+this.b*e.d,this.c=n*e.a+this.d*e.c,this.d=n*e.b+this.d*e.d}return this.tx=t*e.a+this.ty*e.c+e.tx,this.ty=t*e.b+this.ty*e.d+e.ty,this},r.prototype.decompose=function(e){var t=this.a,i=this.b,n=this.c,s=this.d,a=e.pivot,o=-Math.atan2(-n,s),h=Math.atan2(i,t),u=Math.abs(o+h);return u<1e-5||Math.abs(Wt-u)<1e-5?(e.rotation=h,e.skew.x=e.skew.y=0):(e.rotation=0,e.skew.x=o,e.skew.y=h),e.scale.x=Math.sqrt(t*t+i*i),e.scale.y=Math.sqrt(n*n+s*s),e.position.x=this.tx+(a.x*t+a.y*n),e.position.y=this.ty+(a.x*i+a.y*s),e},r.prototype.invert=function(){var e=this.a,t=this.b,i=this.c,n=this.d,s=this.tx,a=e*n-t*i;return this.a=n/a,this.b=-t/a,this.c=-i/a,this.d=e/a,this.tx=(i*this.ty-n*s)/a,this.ty=-(e*this.ty-t*s)/a,this},r.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},r.prototype.clone=function(){var e=new r;return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e},r.prototype.copyTo=function(e){return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e},r.prototype.copyFrom=function(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this},r.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(r,"IDENTITY",{get:function(){return new r},enumerable:!1,configurable:!0}),Object.defineProperty(r,"TEMP_MATRIX",{get:function(){return new r},enumerable:!1,configurable:!0}),r}(),de=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],pe=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],ve=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],_e=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],cr=[],Xn=[],xi=Math.sign;function yo(){for(var r=0;r<16;r++){var e=[];cr.push(e);for(var t=0;t<16;t++)for(var i=xi(de[r]*de[t]+ve[r]*pe[t]),n=xi(pe[r]*de[t]+_e[r]*pe[t]),s=xi(de[r]*ve[t]+ve[r]*_e[t]),a=xi(pe[r]*ve[t]+_e[r]*_e[t]),o=0;o<16;o++)if(de[o]===i&&pe[o]===n&&ve[o]===s&&_e[o]===a){e.push(o);break}}for(var r=0;r<16;r++){var h=new gt;h.set(de[r],pe[r],ve[r],_e[r],0,0),Xn.push(h)}}yo();var ht={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(r){return de[r]},uY:function(r){return pe[r]},vX:function(r){return ve[r]},vY:function(r){return _e[r]},inv:function(r){return r&8?r&15:-r&7},add:function(r,e){return cr[r][e]},sub:function(r,e){return cr[r][ht.inv(e)]},rotate180:function(r){return r^4},isVertical:function(r){return(r&3)===2},byDirection:function(r,e){return Math.abs(r)*2<=Math.abs(e)?e>=0?ht.S:ht.N:Math.abs(e)*2<=Math.abs(r)?r>0?ht.E:ht.W:e>0?r>0?ht.SE:ht.SW:r>0?ht.NE:ht.NW},matrixAppendRotationInv:function(r,e,t,i){t===void 0&&(t=0),i===void 0&&(i=0);var n=Xn[ht.inv(e)];n.tx=t,n.ty=i,r.append(n)}},Wn=function(){function r(){this.worldTransform=new gt,this.localTransform=new gt,this.position=new Oe(this.onChange,this,0,0),this.scale=new Oe(this.onChange,this,1,1),this.pivot=new Oe(this.onChange,this,0,0),this.skew=new Oe(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 r.prototype.onChange=function(){this._localID++},r.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++},r.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+") ")+"]"},r.prototype.updateLocalTransform=function(){var e=this.localTransform;this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1)},r.prototype.updateTransform=function(e){var t=this.localTransform;if(this._localID!==this._currentLocalID&&(t.a=this._cx*this.scale.x,t.b=this._sx*this.scale.x,t.c=this._cy*this.scale.y,t.d=this._sy*this.scale.y,t.tx=this.position.x-(this.pivot.x*t.a+this.pivot.y*t.c),t.ty=this.position.y-(this.pivot.x*t.b+this.pivot.y*t.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==e._worldID){var i=e.worldTransform,n=this.worldTransform;n.a=t.a*i.a+t.b*i.c,n.b=t.a*i.b+t.b*i.d,n.c=t.c*i.a+t.d*i.c,n.d=t.c*i.b+t.d*i.d,n.tx=t.tx*i.a+t.ty*i.c+i.tx,n.ty=t.tx*i.b+t.ty*i.d+i.ty,this._parentID=e._worldID,this._worldID++}},r.prototype.setFromMatrix=function(e){e.decompose(this),this._localID++},Object.defineProperty(r.prototype,"rotation",{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,this.updateSkew())},enumerable:!1,configurable:!0}),r.IDENTITY=new r,r}();const me=new j;class xo{constructor(e={}){this._recursive=typeof e.recursive=="boolean"?e.recursive:!0,this._toggle=e.toggle||"visible",this._targetList=new Set}add(e){return this._targetList.add(e),this}addAll(e){for(let t=0,i=e.length;t<i;t++)this._targetList.add(e[t]);return this}remove(e){return this._targetList.delete(e),this}removeAll(e){for(let t=0,i=e.length;t<i;t++)this._targetList.delete(e[t]);return this}clear(){return this._targetList.clear(),this}cull(e,t=!1){return t||this.uncull(),this._targetList.forEach(i=>{t||i.getBounds(!1,me),this._recursive?this.cullRecursive(e,i,t):(t&&i._bounds.getRectangle(e),i[this._toggle]=me.right>e.left&&me.left<e.right&&me.bottom>e.top&&me.top<e.bottom)}),this}uncull(){return this._targetList.forEach(e=>{this._recursive?this.uncullRecursive(e):e[this._toggle]=!1}),this}cullRecursive(e,t,i){const n=i?t._bounds.getRectangle(me):t.getBounds(!0,me);if(t[this._toggle]=n.right>e.left&&n.left<e.right&&n.bottom>e.top&&n.top<e.bottom,!(n.left>=e.left&&n.top>=e.top&&n.right<=e.right&&n.bottom<=e.bottom)&&t[this._toggle]&&t.children&&t.children.length){const a=t.children;for(let o=0,h=a.length;o<h;o++)this.cullRecursive(e,a[o])}}uncullRecursive(e){if(e[this._toggle]=!0,e.children&&e.children.length){const t=e.children;for(let i=0,n=t.length;i<n;i++)this.uncullRecursive(t[i])}}}function bo(r){var e=this.constructor;return this.then(function(t){return e.resolve(r()).then(function(){return t})},function(t){return e.resolve(r()).then(function(){return e.reject(t)})})}function To(r){var e=this;return new e(function(t,i){if(!(r&&typeof r.length<"u"))return i(new TypeError(typeof r+" "+r+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var n=Array.prototype.slice.call(r);if(n.length===0)return t([]);var s=n.length;function a(h,u){if(u&&(typeof u=="object"||typeof u=="function")){var l=u.then;if(typeof l=="function"){l.call(u,function(f){a(h,f)},function(f){n[h]={status:"rejected",reason:f},--s===0&&t(n)});return}}n[h]={status:"fulfilled",value:u},--s===0&&t(n)}for(var o=0;o<n.length;o++)a(o,n[o])})}var wo=setTimeout;function jn(r){return Boolean(r&&typeof r.length<"u")}function Eo(){}function So(r,e){return function(){r.apply(e,arguments)}}function lt(r){if(!(this instanceof lt))throw new TypeError("Promises must be constructed via new");if(typeof r!="function")throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],Yn(r,this)}function zn(r,e){for(;r._state===3;)r=r._value;if(r._state===0){r._deferreds.push(e);return}r._handled=!0,lt._immediateFn(function(){var t=r._state===1?e.onFulfilled:e.onRejected;if(t===null){(r._state===1?dr:ze)(e.promise,r._value);return}var i;try{i=t(r._value)}catch(n){ze(e.promise,n);return}dr(e.promise,i)})}function dr(r,e){try{if(e===r)throw new TypeError("A promise cannot be resolved with itself.");if(e&&(typeof e=="object"||typeof e=="function")){var t=e.then;if(e instanceof lt){r._state=3,r._value=e,pr(r);return}else if(typeof t=="function"){Yn(So(t,e),r);return}}r._state=1,r._value=e,pr(r)}catch(i){ze(r,i)}}function ze(r,e){r._state=2,r._value=e,pr(r)}function pr(r){r._state===2&&r._deferreds.length===0&&lt._immediateFn(function(){r._handled||lt._unhandledRejectionFn(r._value)});for(var e=0,t=r._deferreds.length;e<t;e++)zn(r,r._deferreds[e]);r._deferreds=null}function Po(r,e,t){this.onFulfilled=typeof r=="function"?r:null,this.onRejected=typeof e=="function"?e:null,this.promise=t}function Yn(r,e){var t=!1;try{r(function(i){t||(t=!0,dr(e,i))},function(i){t||(t=!0,ze(e,i))})}catch(i){if(t)return;t=!0,ze(e,i)}}lt.prototype.catch=function(r){return this.then(null,r)},lt.prototype.then=function(r,e){var t=new this.constructor(Eo);return zn(this,new Po(r,e,t)),t},lt.prototype.finally=bo,lt.all=function(r){return new lt(function(e,t){if(!jn(r))return t(new TypeError("Promise.all accepts an array"));var i=Array.prototype.slice.call(r);if(i.length===0)return e([]);var n=i.length;function s(o,h){try{if(h&&(typeof h=="object"||typeof h=="function")){var u=h.then;if(typeof u=="function"){u.call(h,function(l){s(o,l)},t);return}}i[o]=h,--n===0&&e(i)}catch(l){t(l)}}for(var a=0;a<i.length;a++)s(a,i[a])})},lt.allSettled=To,lt.resolve=function(r){return r&&typeof r=="object"&&r.constructor===lt?r:new lt(function(e){e(r)})},lt.reject=function(r){return new lt(function(e,t){t(r)})},lt.race=function(r){return new lt(function(e,t){if(!jn(r))return t(new TypeError("Promise.race accepts an array"));for(var i=0,n=r.length;i<n;i++)lt.resolve(r[i]).then(e,t)})},lt._immediateFn=typeof setImmediate=="function"&&function(r){setImmediate(r)}||function(r){wo(r,0)},lt._unhandledRejectionFn=function(e){typeof console<"u"&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var vr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};var Vn=Object.getOwnPropertySymbols,Ro=Object.prototype.hasOwnProperty,Co=Object.prototype.propertyIsEnumerable;function Ao(r){if(r==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(r)}function Io(){try{if(!Object.assign)return!1;var r=new String("abc");if(r[5]="de",Object.getOwnPropertyNames(r)[0]==="5")return!1;for(var e={},t=0;t<10;t++)e["_"+String.fromCharCode(t)]=t;var i=Object.getOwnPropertyNames(e).map(function(s){return e[s]});if(i.join("")!=="0123456789")return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(s){n[s]=s}),Object.keys(Object.assign({},n)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var Oo=Io()?Object.assign:function(r,e){for(var t,i=Ao(r),n,s=1;s<arguments.length;s++){t=Object(arguments[s]);for(var a in t)Ro.call(t,a)&&(i[a]=t[a]);if(Vn){n=Vn(t);for(var o=0;o<n.length;o++)Co.call(t,n[o])&&(i[n[o]]=t[n[o]])}}return i};typeof globalThis>"u"&&(typeof self<"u"?self.globalThis=self:typeof global<"u"&&(global.globalThis=global)),globalThis.Promise||(globalThis.Promise=lt),Object.assign||(Object.assign=Oo);var Mo=16;if(Date.now&&Date.prototype.getTime||(Date.now=function(){return new Date().getTime()}),!(globalThis.performance&&globalThis.performance.now)){var Do=Date.now();globalThis.performance||(globalThis.performance={}),globalThis.performance.now=function(){return Date.now()-Do}}for(var _r=Date.now(),qn=["ms","moz","webkit","o"],mr=0;mr<qn.length&&!globalThis.requestAnimationFrame;++mr){var gr=qn[mr];globalThis.requestAnimationFrame=globalThis[gr+"RequestAnimationFrame"],globalThis.cancelAnimationFrame=globalThis[gr+"CancelAnimationFrame"]||globalThis[gr+"CancelRequestAnimationFrame"]}globalThis.requestAnimationFrame||(globalThis.requestAnimationFrame=function(r){if(typeof r!="function")throw new TypeError(r+"is not a function");var e=Date.now(),t=Mo+_r-e;return t<0&&(t=0),_r=e,globalThis.self.setTimeout(function(){_r=Date.now(),r(performance.now())},t)}),globalThis.cancelAnimationFrame||(globalThis.cancelAnimationFrame=function(r){return clearTimeout(r)}),Math.sign||(Math.sign=function(e){return e=Number(e),e===0||isNaN(e)?e:e>0?1:-1}),Number.isInteger||(Number.isInteger=function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e}),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);var Qt;(function(r){r[r.WEBGL_LEGACY=0]="WEBGL_LEGACY",r[r.WEBGL=1]="WEBGL",r[r.WEBGL2=2]="WEBGL2"})(Qt||(Qt={}));var Ye;(function(r){r[r.UNKNOWN=0]="UNKNOWN",r[r.WEBGL=1]="WEBGL",r[r.CANVAS=2]="CANVAS"})(Ye||(Ye={}));var bi;(function(r){r[r.COLOR=16384]="COLOR",r[r.DEPTH=256]="DEPTH",r[r.STENCIL=1024]="STENCIL"})(bi||(bi={}));var G;(function(r){r[r.NORMAL=0]="NORMAL",r[r.ADD=1]="ADD",r[r.MULTIPLY=2]="MULTIPLY",r[r.SCREEN=3]="SCREEN",r[r.OVERLAY=4]="OVERLAY",r[r.DARKEN=5]="DARKEN",r[r.LIGHTEN=6]="LIGHTEN",r[r.COLOR_DODGE=7]="COLOR_DODGE",r[r.COLOR_BURN=8]="COLOR_BURN",r[r.HARD_LIGHT=9]="HARD_LIGHT",r[r.SOFT_LIGHT=10]="SOFT_LIGHT",r[r.DIFFERENCE=11]="DIFFERENCE",r[r.EXCLUSION=12]="EXCLUSION",r[r.HUE=13]="HUE",r[r.SATURATION=14]="SATURATION",r[r.COLOR=15]="COLOR",r[r.LUMINOSITY=16]="LUMINOSITY",r[r.NORMAL_NPM=17]="NORMAL_NPM",r[r.ADD_NPM=18]="ADD_NPM",r[r.SCREEN_NPM=19]="SCREEN_NPM",r[r.NONE=20]="NONE",r[r.SRC_OVER=0]="SRC_OVER",r[r.SRC_IN=21]="SRC_IN",r[r.SRC_OUT=22]="SRC_OUT",r[r.SRC_ATOP=23]="SRC_ATOP",r[r.DST_OVER=24]="DST_OVER",r[r.DST_IN=25]="DST_IN",r[r.DST_OUT=26]="DST_OUT",r[r.DST_ATOP=27]="DST_ATOP",r[r.ERASE=26]="ERASE",r[r.SUBTRACT=28]="SUBTRACT",r[r.XOR=29]="XOR"})(G||(G={}));var Dt;(function(r){r[r.POINTS=0]="POINTS",r[r.LINES=1]="LINES",r[r.LINE_LOOP=2]="LINE_LOOP",r[r.LINE_STRIP=3]="LINE_STRIP",r[r.TRIANGLES=4]="TRIANGLES",r[r.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",r[r.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(Dt||(Dt={}));var R;(function(r){r[r.RGBA=6408]="RGBA",r[r.RGB=6407]="RGB",r[r.RG=33319]="RG",r[r.RED=6403]="RED",r[r.RGBA_INTEGER=36249]="RGBA_INTEGER",r[r.RGB_INTEGER=36248]="RGB_INTEGER",r[r.RG_INTEGER=33320]="RG_INTEGER",r[r.RED_INTEGER=36244]="RED_INTEGER",r[r.ALPHA=6406]="ALPHA",r[r.LUMINANCE=6409]="LUMINANCE",r[r.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",r[r.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",r[r.DEPTH_STENCIL=34041]="DEPTH_STENCIL"})(R||(R={}));var ge;(function(r){r[r.TEXTURE_2D=3553]="TEXTURE_2D",r[r.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",r[r.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",r[r.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",r[r.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",r[r.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",r[r.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",r[r.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",r[r.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z"})(ge||(ge={}));var L;(function(r){r[r.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",r[r.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",r[r.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",r[r.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",r[r.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",r[r.UNSIGNED_INT=5125]="UNSIGNED_INT",r[r.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",r[r.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",r[r.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",r[r.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",r[r.BYTE=5120]="BYTE",r[r.SHORT=5122]="SHORT",r[r.INT=5124]="INT",r[r.FLOAT=5126]="FLOAT",r[r.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",r[r.HALF_FLOAT=36193]="HALF_FLOAT"})(L||(L={}));var Ti;(function(r){r[r.FLOAT=0]="FLOAT",r[r.INT=1]="INT",r[r.UINT=2]="UINT"})(Ti||(Ti={}));var jt;(function(r){r[r.NEAREST=0]="NEAREST",r[r.LINEAR=1]="LINEAR"})(jt||(jt={}));var zt;(function(r){r[r.CLAMP=33071]="CLAMP",r[r.REPEAT=10497]="REPEAT",r[r.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT"})(zt||(zt={}));var Ft;(function(r){r[r.OFF=0]="OFF",r[r.POW2=1]="POW2",r[r.ON=2]="ON",r[r.ON_MANUAL=3]="ON_MANUAL"})(Ft||(Ft={}));var Nt;(function(r){r[r.NPM=0]="NPM",r[r.UNPACK=1]="UNPACK",r[r.PMA=2]="PMA",r[r.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",r[r.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",r[r.PREMULTIPLY_ALPHA=2]="PREMULTIPLY_ALPHA",r[r.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA"})(Nt||(Nt={}));var Bt;(function(r){r[r.NO=0]="NO",r[r.YES=1]="YES",r[r.AUTO=2]="AUTO",r[r.BLEND=0]="BLEND",r[r.CLEAR=1]="CLEAR",r[r.BLIT=2]="BLIT"})(Bt||(Bt={}));var wi;(function(r){r[r.AUTO=0]="AUTO",r[r.MANUAL=1]="MANUAL"})(wi||(wi={}));var It;(function(r){r.LOW="lowp",r.MEDIUM="mediump",r.HIGH="highp"})(It||(It={}));var mt;(function(r){r[r.NONE=0]="NONE",r[r.SCISSOR=1]="SCISSOR",r[r.STENCIL=2]="STENCIL",r[r.SPRITE=3]="SPRITE",r[r.COLOR=4]="COLOR"})(mt||(mt={}));var $n;(function(r){r[r.RED=1]="RED",r[r.GREEN=2]="GREEN",r[r.BLUE=4]="BLUE",r[r.ALPHA=8]="ALPHA"})($n||($n={}));var ft;(function(r){r[r.NONE=0]="NONE",r[r.LOW=2]="LOW",r[r.MEDIUM=4]="MEDIUM",r[r.HIGH=8]="HIGH"})(ft||(ft={}));var Yt;(function(r){r[r.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",r[r.ARRAY_BUFFER=34962]="ARRAY_BUFFER",r[r.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER"})(Yt||(Yt={}));var Fo={createCanvas:function(r,e){var t=document.createElement("canvas");return t.width=r,t.height=e,t},getWebGLRenderingContext:function(){return WebGLRenderingContext},getNavigator:function(){return navigator},getBaseUrl:function(){var r;return(r=document.baseURI)!==null&&r!==void 0?r:window.location.href},fetch:function(r,e){return fetch(r,e)}},yr=/iPhone/i,Zn=/iPod/i,Kn=/iPad/i,Qn=/\biOS-universal(?:.+)Mac\b/i,xr=/\bAndroid(?:.+)Mobile\b/i,Jn=/Android/i,Me=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,Ei=/Silk/i,Jt=/Windows Phone/i,ts=/\bWindows(?:.+)ARM\b/i,es=/BlackBerry/i,is=/BB10/i,rs=/Opera Mini/i,ns=/\b(CriOS|Chrome)(?:.+)Mobile/i,ss=/Mobile(?:.+)Firefox\b/i,as=function(r){return typeof r<"u"&&r.platform==="MacIntel"&&typeof r.maxTouchPoints=="number"&&r.maxTouchPoints>1&&typeof MSStream>"u"};function No(r){return function(e){return e.test(r)}}function Bo(r){var e={userAgent:"",platform:"",maxTouchPoints:0};!r&&typeof navigator<"u"?e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof r=="string"?e.userAgent=r:r&&r.userAgent&&(e={userAgent:r.userAgent,platform:r.platform,maxTouchPoints:r.maxTouchPoints||0});var t=e.userAgent,i=t.split("[FBAN");typeof i[1]<"u"&&(t=i[0]),i=t.split("Twitter"),typeof i[1]<"u"&&(t=i[0]);var n=No(t),s={apple:{phone:n(yr)&&!n(Jt),ipod:n(Zn),tablet:!n(yr)&&(n(Kn)||as(e))&&!n(Jt),universal:n(Qn),device:(n(yr)||n(Zn)||n(Kn)||n(Qn)||as(e))&&!n(Jt)},amazon:{phone:n(Me),tablet:!n(Me)&&n(Ei),device:n(Me)||n(Ei)},android:{phone:!n(Jt)&&n(Me)||!n(Jt)&&n(xr),tablet:!n(Jt)&&!n(Me)&&!n(xr)&&(n(Ei)||n(Jn)),device:!n(Jt)&&(n(Me)||n(Ei)||n(xr)||n(Jn))||n(/\bokhttp\b/i)},windows:{phone:n(Jt),tablet:n(ts),device:n(Jt)||n(ts)},other:{blackberry:n(es),blackberry10:n(is),opera:n(rs),firefox:n(ss),chrome:n(ns),device:n(es)||n(is)||n(rs)||n(ss)||n(ns)},any:!1,phone:!1,tablet:!1};return s.any=s.apple.device||s.android.device||s.windows.device||s.other.device,s.phone=s.apple.phone||s.android.phone||s.windows.phone,s.tablet=s.apple.tablet||s.android.tablet||s.windows.tablet,s}var Vt=Bo(globalThis.navigator);function Lo(){return!Vt.apple.device}function Uo(r){var e=!0;if(Vt.tablet||Vt.phone){if(Vt.apple.device){var t=navigator.userAgent.match(/OS (\d+)_(\d+)?/);if(t){var i=parseInt(t[1],10);i<11&&(e=!1)}}if(Vt.android.device){var t=navigator.userAgent.match(/Android\s([0-9.]*)/);if(t){var i=parseInt(t[1],10);i<7&&(e=!1)}}}return e?r:4}var F={ADAPTER:Fo,MIPMAP_TEXTURES:Ft.POW2,ANISOTROPIC_LEVEL:0,RESOLUTION:1,FILTER_RESOLUTION:1,FILTER_MULTISAMPLE:ft.NONE,SPRITE_MAX_TEXTURES:Uo(32),SPRITE_BATCH_SIZE:4096,RENDER_OPTIONS:{view:null,antialias:!1,autoDensity:!1,backgroundColor:0,backgroundAlpha:1,useContextAlpha:!0,clearBeforeRender:!0,preserveDrawingBuffer:!1,width:800,height:600,legacy:!1},GC_MODE:wi.AUTO,GC_MAX_IDLE:60*60,GC_MAX_CHECK_COUNT:60*10,WRAP_MODE:zt.CLAMP,SCALE_MODE:jt.LINEAR,PRECISION_VERTEX:It.HIGH,PRECISION_FRAGMENT:Vt.apple.device?It.HIGH:It.MEDIUM,CAN_UPLOAD_SAME_BUFFER:Lo(),CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1},os={exports:{}};(function(r){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function n(h,u,l){this.fn=h,this.context=u,this.once=l||!1}function s(h,u,l,f,c){if(typeof l!="function")throw new TypeError("The listener must be a function");var d=new n(l,f||h,c),p=t?t+u:u;return h._events[p]?h._events[p].fn?h._events[p]=[h._events[p],d]:h._events[p].push(d):(h._events[p]=d,h._eventsCount++),h}function a(h,u){--h._eventsCount===0?h._events=new i:delete h._events[u]}function o(){this._events=new i,this._eventsCount=0}o.prototype.eventNames=function(){var u=[],l,f;if(this._eventsCount===0)return u;for(f in l=this._events)e.call(l,f)&&u.push(t?f.slice(1):f);return Object.getOwnPropertySymbols?u.concat(Object.getOwnPropertySymbols(l)):u},o.prototype.listeners=function(u){var l=t?t+u:u,f=this._events[l];if(!f)return[];if(f.fn)return[f.fn];for(var c=0,d=f.length,p=new Array(d);c<d;c++)p[c]=f[c].fn;return p},o.prototype.listenerCount=function(u){var l=t?t+u:u,f=this._events[l];return f?f.fn?1:f.length:0},o.prototype.emit=function(u,l,f,c,d,p){var v=t?t+u:u;if(!this._events[v])return!1;var _=this._events[v],m=arguments.length,g,y;if(_.fn){switch(_.once&&this.removeListener(u,_.fn,void 0,!0),m){case 1:return _.fn.call(_.context),!0;case 2:return _.fn.call(_.context,l),!0;case 3:return _.fn.call(_.context,l,f),!0;case 4:return _.fn.call(_.context,l,f,c),!0;case 5:return _.fn.call(_.context,l,f,c,d),!0;case 6:return _.fn.call(_.context,l,f,c,d,p),!0}for(y=1,g=new Array(m-1);y<m;y++)g[y-1]=arguments[y];_.fn.apply(_.context,g)}else{var b=_.length,x;for(y=0;y<b;y++)switch(_[y].once&&this.removeListener(u,_[y].fn,void 0,!0),m){case 1:_[y].fn.call(_[y].context);break;case 2:_[y].fn.call(_[y].context,l);break;case 3:_[y].fn.call(_[y].context,l,f);break;case 4:_[y].fn.call(_[y].context,l,f,c);break;default:if(!g)for(x=1,g=new Array(m-1);x<m;x++)g[x-1]=arguments[x];_[y].fn.apply(_[y].context,g)}}return!0},o.prototype.on=function(u,l,f){return s(this,u,l,f,!1)},o.prototype.once=function(u,l,f){return s(this,u,l,f,!0)},o.prototype.removeListener=function(u,l,f,c){var d=t?t+u:u;if(!this._events[d])return this;if(!l)return a(this,d),this;var p=this._events[d];if(p.fn)p.fn===l&&(!c||p.once)&&(!f||p.context===f)&&a(this,d);else{for(var v=0,_=[],m=p.length;v<m;v++)(p[v].fn!==l||c&&!p[v].once||f&&p[v].context!==f)&&_.push(p[v]);_.length?this._events[d]=_.length===1?_[0]:_:a(this,d)}return this},o.prototype.removeAllListeners=function(u){var l;return u?(l=t?t+u:u,this._events[l]&&a(this,l)):(this._events=new i,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=t,o.EventEmitter=o,r.exports=o})(os);const Ve=os.exports;var Si={exports:{}};Si.exports=Pi,Si.exports.default=Pi;function Pi(r,e,t){t=t||2;var i=e&&e.length,n=i?e[0]*t:r.length,s=hs(r,0,n,t,!0),a=[];if(!s||s.next===s.prev)return a;var o,h,u,l,f,c,d;if(i&&(s=Wo(r,e,s,t)),r.length>80*t){o=u=r[0],h=l=r[1];for(var p=t;p<n;p+=t)f=r[p],c=r[p+1],f<o&&(o=f),c<h&&(h=c),f>u&&(u=f),c>l&&(l=c);d=Math.max(u-o,l-h),d=d!==0?32767/d:0}return qe(s,a,t,o,h,d,0),a}function hs(r,e,t,i,n){var s,a;if(n===wr(r,e,t,i)>0)for(s=e;s<t;s+=i)a=fs(s,r[s],r[s+1],a);else for(s=t-i;s>=e;s-=i)a=fs(s,r[s],r[s+1],a);return a&&Ri(a,a.next)&&(Ze(a),a=a.next),a}function ye(r,e){if(!r)return r;e||(e=r);var t=r,i;do if(i=!1,!t.steiner&&(Ri(t,t.next)||ut(t.prev,t,t.next)===0)){if(Ze(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function qe(r,e,t,i,n,s,a){if(r){!a&&s&&qo(r,i,n,s);for(var o=r,h,u;r.prev!==r.next;){if(h=r.prev,u=r.next,s?ko(r,i,n,s):Go(r)){e.push(h.i/t|0),e.push(r.i/t|0),e.push(u.i/t|0),Ze(r),r=u.next,o=u.next;continue}if(r=u,r===o){a?a===1?(r=Ho(ye(r),e,t),qe(r,e,t,i,n,s,2)):a===2&&Xo(r,e,t,i,n,s):qe(ye(r),e,t,i,n,s,1);break}}}}function Go(r){var e=r.prev,t=r,i=r.next;if(ut(e,t,i)>=0)return!1;for(var n=e.x,s=t.x,a=i.x,o=e.y,h=t.y,u=i.y,l=n<s?n<a?n:a:s<a?s:a,f=o<h?o<u?o:u:h<u?h:u,c=n>s?n>a?n:a:s>a?s:a,d=o>h?o>u?o:u:h>u?h:u,p=i.next;p!==e;){if(p.x>=l&&p.x<=c&&p.y>=f&&p.y<=d&&De(n,o,s,h,a,u,p.x,p.y)&&ut(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function ko(r,e,t,i){var n=r.prev,s=r,a=r.next;if(ut(n,s,a)>=0)return!1;for(var o=n.x,h=s.x,u=a.x,l=n.y,f=s.y,c=a.y,d=o<h?o<u?o:u:h<u?h:u,p=l<f?l<c?l:c:f<c?f:c,v=o>h?o>u?o:u:h>u?h:u,_=l>f?l>c?l:c:f>c?f:c,m=br(d,p,e,t,i),g=br(v,_,e,t,i),y=r.prevZ,b=r.nextZ;y&&y.z>=m&&b&&b.z<=g;){if(y.x>=d&&y.x<=v&&y.y>=p&&y.y<=_&&y!==n&&y!==a&&De(o,l,h,f,u,c,y.x,y.y)&&ut(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=d&&b.x<=v&&b.y>=p&&b.y<=_&&b!==n&&b!==a&&De(o,l,h,f,u,c,b.x,b.y)&&ut(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=m;){if(y.x>=d&&y.x<=v&&y.y>=p&&y.y<=_&&y!==n&&y!==a&&De(o,l,h,f,u,c,y.x,y.y)&&ut(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=g;){if(b.x>=d&&b.x<=v&&b.y>=p&&b.y<=_&&b!==n&&b!==a&&De(o,l,h,f,u,c,b.x,b.y)&&ut(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function Ho(r,e,t){var i=r;do{var n=i.prev,s=i.next.next;!Ri(n,s)&&us(n,i,i.next,s)&&$e(n,s)&&$e(s,n)&&(e.push(n.i/t|0),e.push(i.i/t|0),e.push(s.i/t|0),Ze(i),Ze(i.next),i=r=s),i=i.next}while(i!==r);return ye(i)}function Xo(r,e,t,i,n,s){var a=r;do{for(var o=a.next.next;o!==a.prev;){if(a.i!==o.i&&Ko(a,o)){var h=ls(a,o);a=ye(a,a.next),h=ye(h,h.next),qe(a,e,t,i,n,s,0),qe(h,e,t,i,n,s,0);return}o=o.next}a=a.next}while(a!==r)}function Wo(r,e,t,i){var n=[],s,a,o,h,u;for(s=0,a=e.length;s<a;s++)o=e[s]*i,h=s<a-1?e[s+1]*i:r.length,u=hs(r,o,h,i,!1),u===u.next&&(u.steiner=!0),n.push(Zo(u));for(n.sort(jo),s=0;s<n.length;s++)t=zo(n[s],t);return t}function jo(r,e){return r.x-e.x}function zo(r,e){var t=Yo(r,e);if(!t)return e;var i=ls(t,r);return ye(i,i.next),ye(t,t.next)}function Yo(r,e){var t=e,i=r.x,n=r.y,s=-1/0,a;do{if(n<=t.y&&n>=t.next.y&&t.next.y!==t.y){var o=t.x+(n-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(o<=i&&o>s&&(s=o,a=t.x<t.next.x?t:t.next,o===i))return a}t=t.next}while(t!==e);if(!a)return null;var h=a,u=a.x,l=a.y,f=1/0,c;t=a;do i>=t.x&&t.x>=u&&i!==t.x&&De(n<l?i:s,n,u,l,n<l?s:i,n,t.x,t.y)&&(c=Math.abs(n-t.y)/(i-t.x),$e(t,r)&&(c<f||c===f&&(t.x>a.x||t.x===a.x&&Vo(a,t)))&&(a=t,f=c)),t=t.next;while(t!==h);return a}function Vo(r,e){return ut(r.prev,r,e.prev)<0&&ut(e.next,r,r.next)<0}function qo(r,e,t,i){var n=r;do n.z===0&&(n.z=br(n.x,n.y,e,t,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==r);n.prevZ.nextZ=null,n.prevZ=null,$o(n)}function $o(r){var e,t,i,n,s,a,o,h,u=1;do{for(t=r,r=null,s=null,a=0;t;){for(a++,i=t,o=0,e=0;e<u&&(o++,i=i.nextZ,!!i);e++);for(h=u;o>0||h>0&&i;)o!==0&&(h===0||!i||t.z<=i.z)?(n=t,t=t.nextZ,o--):(n=i,i=i.nextZ,h--),s?s.nextZ=n:r=n,n.prevZ=s,s=n;t=i}s.nextZ=null,u*=2}while(a>1);return r}function br(r,e,t,i,n){return r=(r-t)*n|0,e=(e-i)*n|0,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,r|e<<1}function Zo(r){var e=r,t=r;do(e.x<t.x||e.x===t.x&&e.y<t.y)&&(t=e),e=e.next;while(e!==r);return t}function De(r,e,t,i,n,s,a,o){return(n-a)*(e-o)>=(r-a)*(s-o)&&(r-a)*(i-o)>=(t-a)*(e-o)&&(t-a)*(s-o)>=(n-a)*(i-o)}function Ko(r,e){return r.next.i!==e.i&&r.prev.i!==e.i&&!Qo(r,e)&&($e(r,e)&&$e(e,r)&&Jo(r,e)&&(ut(r.prev,r,e.prev)||ut(r,e.prev,e))||Ri(r,e)&&ut(r.prev,r,r.next)>0&&ut(e.prev,e,e.next)>0)}function ut(r,e,t){return(e.y-r.y)*(t.x-e.x)-(e.x-r.x)*(t.y-e.y)}function Ri(r,e){return r.x===e.x&&r.y===e.y}function us(r,e,t,i){var n=Ai(ut(r,e,t)),s=Ai(ut(r,e,i)),a=Ai(ut(t,i,r)),o=Ai(ut(t,i,e));return!!(n!==s&&a!==o||n===0&&Ci(r,t,e)||s===0&&Ci(r,i,e)||a===0&&Ci(t,r,i)||o===0&&Ci(t,e,i))}function Ci(r,e,t){return e.x<=Math.max(r.x,t.x)&&e.x>=Math.min(r.x,t.x)&&e.y<=Math.max(r.y,t.y)&&e.y>=Math.min(r.y,t.y)}function Ai(r){return r>0?1:r<0?-1:0}function Qo(r,e){var t=r;do{if(t.i!==r.i&&t.next.i!==r.i&&t.i!==e.i&&t.next.i!==e.i&&us(t,t.next,r,e))return!0;t=t.next}while(t!==r);return!1}function $e(r,e){return ut(r.prev,r,r.next)<0?ut(r,e,r.next)>=0&&ut(r,r.prev,e)>=0:ut(r,e,r.prev)<0||ut(r,r.next,e)<0}function Jo(r,e){var t=r,i=!1,n=(r.x+e.x)/2,s=(r.y+e.y)/2;do t.y>s!=t.next.y>s&&t.next.y!==t.y&&n<(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==r);return i}function ls(r,e){var t=new Tr(r.i,r.x,r.y),i=new Tr(e.i,e.x,e.y),n=r.next,s=e.prev;return r.next=e,e.prev=r,t.next=n,n.prev=t,i.next=t,t.prev=i,s.next=i,i.prev=s,i}function fs(r,e,t,i){var n=new Tr(r,e,t);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function Ze(r){r.next.prev=r.prev,r.prev.next=r.next,r.prevZ&&(r.prevZ.nextZ=r.nextZ),r.nextZ&&(r.nextZ.prevZ=r.prevZ)}function Tr(r,e,t){this.i=r,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}Pi.deviation=function(r,e,t,i){var n=e&&e.length,s=n?e[0]*t:r.length,a=Math.abs(wr(r,0,s,t));if(n)for(var o=0,h=e.length;o<h;o++){var u=e[o]*t,l=o<h-1?e[o+1]*t:r.length;a-=Math.abs(wr(r,u,l,t))}var f=0;for(o=0;o<i.length;o+=3){var c=i[o]*t,d=i[o+1]*t,p=i[o+2]*t;f+=Math.abs((r[c]-r[p])*(r[d+1]-r[c+1])-(r[c]-r[d])*(r[p+1]-r[c+1]))}return a===0&&f===0?0:Math.abs((f-a)/a)};function wr(r,e,t,i){for(var n=0,s=e,a=t-i;s<t;s+=i)n+=(r[a]-r[s])*(r[s+1]+r[a+1]),a=s;return n}Pi.flatten=function(r){for(var e=r[0][0].length,t={vertices:[],holes:[],dimensions:e},i=0,n=0;n<r.length;n++){for(var s=0;s<r[n].length;s++)for(var a=0;a<e;a++)t.vertices.push(r[n][s][a]);n>0&&(i+=r[n-1].length,t.holes.push(i))}return t};var Er={exports:{}};(function(r,e){(function(t){var i=e&&!e.nodeType&&e,n=r&&!r.nodeType&&r,s=typeof vr=="object"&&vr;(s.global===s||s.window===s||s.self===s)&&(t=s);var a,o=2147483647,h=36,u=1,l=26,f=38,c=700,d=72,p=128,v="-",_=/^xn--/,m=/[^\x20-\x7E]/,g=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},b=h-u,x=Math.floor,T=String.fromCharCode,w;function A(I){throw RangeError(y[I])}function S(I,P){for(var B=I.length,$=[];B--;)$[B]=P(I[B]);return $}function E(I,P){var B=I.split("@"),$="";B.length>1&&($=B[0]+"@",I=B[1]),I=I.replace(g,".");var Z=I.split("."),vt=S(Z,P).join(".");return $+vt}function D(I){for(var P=[],B=0,$=I.length,Z,vt;B<$;)Z=I.charCodeAt(B++),Z>=55296&&Z<=56319&&B<$?(vt=I.charCodeAt(B++),(vt&64512)==56320?P.push(((Z&1023)<<10)+(vt&1023)+65536):(P.push(Z),B--)):P.push(Z);return P}function C(I){return S(I,function(P){var B="";return P>65535&&(P-=65536,B+=T(P>>>10&1023|55296),P=56320|P&1023),B+=T(P),B}).join("")}function N(I){return I-48<10?I-22:I-65<26?I-65:I-97<26?I-97:h}function W(I,P){return I+22+75*(I<26)-((P!=0)<<5)}function M(I,P,B){var $=0;for(I=B?x(I/c):I>>1,I+=x(I/P);I>b*l>>1;$+=h)I=x(I/b);return x($+(b+1)*I/(I+f))}function O(I){var P=[],B=I.length,$,Z=0,vt=p,st=d,at,wt,St,_t,et,nt,ot,q,Rt;for(at=I.lastIndexOf(v),at<0&&(at=0),wt=0;wt<at;++wt)I.charCodeAt(wt)>=128&&A("not-basic"),P.push(I.charCodeAt(wt));for(St=at>0?at+1:0;St<B;){for(_t=Z,et=1,nt=h;St>=B&&A("invalid-input"),ot=N(I.charCodeAt(St++)),(ot>=h||ot>x((o-Z)/et))&&A("overflow"),Z+=ot*et,q=nt<=st?u:nt>=st+l?l:nt-st,!(ot<q);nt+=h)Rt=h-q,et>x(o/Rt)&&A("overflow"),et*=Rt;$=P.length+1,st=M(Z-_t,$,_t==0),x(Z/$)>o-vt&&A("overflow"),vt+=x(Z/$),Z%=$,P.splice(Z++,0,vt)}return C(P)}function U(I){var P,B,$,Z,vt,st,at,wt,St,_t,et,nt=[],ot,q,Rt,Ct;for(I=D(I),ot=I.length,P=p,B=0,vt=d,st=0;st<ot;++st)et=I[st],et<128&&nt.push(T(et));for($=Z=nt.length,Z&&nt.push(v);$<ot;){for(at=o,st=0;st<ot;++st)et=I[st],et>=P&&et<at&&(at=et);for(q=$+1,at-P>x((o-B)/q)&&A("overflow"),B+=(at-P)*q,P=at,st=0;st<ot;++st)if(et=I[st],et<P&&++B>o&&A("overflow"),et==P){for(wt=B,St=h;_t=St<=vt?u:St>=vt+l?l:St-vt,!(wt<_t);St+=h)Ct=wt-_t,Rt=h-_t,nt.push(T(W(_t+Ct%Rt,0))),wt=x(Ct/Rt);nt.push(T(W(wt,0))),vt=M(B,q,$==Z),B=0,++$}++B,++P}return nt.join("")}function rt(I){return E(I,function(P){return _.test(P)?O(P.slice(4).toLowerCase()):P})}function z(I){return E(I,function(P){return m.test(P)?"xn--"+U(P):P})}if(a={version:"1.3.2",ucs2:{decode:D,encode:C},decode:O,encode:U,toASCII:z,toUnicode:rt},i&&n)if(r.exports==i)n.exports=a;else for(w in a)a.hasOwnProperty(w)&&(i[w]=a[w]);else t.punycode=a})(vr)})(Er,Er.exports);var th={isString:function(r){return typeof r=="string"},isObject:function(r){return typeof r=="object"&&r!==null},isNull:function(r){return r===null},isNullOrUndefined:function(r){return r==null}},Ke={};function eh(r,e){return Object.prototype.hasOwnProperty.call(r,e)}var ih=function(r,e,t,i){e=e||"&",t=t||"=";var n={};if(typeof r!="string"||r.length===0)return n;var s=/\+/g;r=r.split(e);var a=1e3;i&&typeof i.maxKeys=="number"&&(a=i.maxKeys);var o=r.length;a>0&&o>a&&(o=a);for(var h=0;h<o;++h){var u=r[h].replace(s,"%20"),l=u.indexOf(t),f,c,d,p;l>=0?(f=u.substr(0,l),c=u.substr(l+1)):(f=u,c=""),d=decodeURIComponent(f),p=decodeURIComponent(c),eh(n,d)?Array.isArray(n[d])?n[d].push(p):n[d]=[n[d],p]:n[d]=p}return n},Qe=function(r){switch(typeof r){case"string":return r;case"boolean":return r?"true":"false";case"number":return isFinite(r)?r:"";default:return""}},rh=function(r,e,t,i){return e=e||"&",t=t||"=",r===null&&(r=void 0),typeof r=="object"?Object.keys(r).map(function(n){var s=encodeURIComponent(Qe(n))+t;return Array.isArray(r[n])?r[n].map(function(a){return s+encodeURIComponent(Qe(a))}).join(e):s+encodeURIComponent(Qe(r[n]))}).join(e):i?encodeURIComponent(Qe(i))+t+encodeURIComponent(Qe(r)):""};Ke.decode=Ke.parse=ih,Ke.encode=Ke.stringify=rh;var nh=Er.exports,qt=th,sh=Ii,ah=mh,oh=_h;function Lt(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var hh=/^([a-z0-9.+-]+:)/i,uh=/:[0-9]*$/,lh=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,fh=["<",">",'"',"`"," ","\r",`
2
- `," "],ch=["{","}","|","\\","^","`"].concat(fh),Sr=["'"].concat(ch),cs=["%","/","?",";","#"].concat(Sr),ds=["/","?","#"],dh=255,ps=/^[+a-z0-9A-Z_-]{0,63}$/,ph=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,vh={javascript:!0,"javascript:":!0},Pr={javascript:!0,"javascript:":!0},Fe={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},Rr=Ke;function Ii(r,e,t){if(r&&qt.isObject(r)&&r instanceof Lt)return r;var i=new Lt;return i.parse(r,e,t),i}Lt.prototype.parse=function(r,e,t){if(!qt.isString(r))throw new TypeError("Parameter 'url' must be a string, not "+typeof r);var i=r.indexOf("?"),n=i!==-1&&i<r.indexOf("#")?"?":"#",s=r.split(n),a=/\\/g;s[0]=s[0].replace(a,"/"),r=s.join(n);var o=r;if(o=o.trim(),!t&&r.split("#").length===1){var h=lh.exec(o);if(h)return this.path=o,this.href=o,this.pathname=h[1],h[2]?(this.search=h[2],e?this.query=Rr.parse(this.search.substr(1)):this.query=this.search.substr(1)):e&&(this.search="",this.query={}),this}var u=hh.exec(o);if(u){u=u[0];var l=u.toLowerCase();this.protocol=l,o=o.substr(u.length)}if(t||u||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var f=o.substr(0,2)==="//";f&&!(u&&Pr[u])&&(o=o.substr(2),this.slashes=!0)}if(!Pr[u]&&(f||u&&!Fe[u])){for(var c=-1,d=0;d<ds.length;d++){var p=o.indexOf(ds[d]);p!==-1&&(c===-1||p<c)&&(c=p)}var v,_;c===-1?_=o.lastIndexOf("@"):_=o.lastIndexOf("@",c),_!==-1&&(v=o.slice(0,_),o=o.slice(_+1),this.auth=decodeURIComponent(v)),c=-1;for(var d=0;d<cs.length;d++){var p=o.indexOf(cs[d]);p!==-1&&(c===-1||p<c)&&(c=p)}c===-1&&(c=o.length),this.host=o.slice(0,c),o=o.slice(c),this.parseHost(),this.hostname=this.hostname||"";var m=this.hostname[0]==="["&&this.hostname[this.hostname.length-1]==="]";if(!m)for(var g=this.hostname.split(/\./),d=0,y=g.length;d<y;d++){var b=g[d];if(b&&!b.match(ps)){for(var x="",T=0,w=b.length;T<w;T++)b.charCodeAt(T)>127?x+="x":x+=b[T];if(!x.match(ps)){var A=g.slice(0,d),S=g.slice(d+1),E=b.match(ph);E&&(A.push(E[1]),S.unshift(E[2])),S.length&&(o="/"+S.join(".")+o),this.hostname=A.join(".");break}}}this.hostname.length>dh?this.hostname="":this.hostname=this.hostname.toLowerCase(),m||(this.hostname=nh.toASCII(this.hostname));var D=this.port?":"+this.port:"",C=this.hostname||"";this.host=C+D,this.href+=this.host,m&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),o[0]!=="/"&&(o="/"+o))}if(!vh[l])for(var d=0,y=Sr.length;d<y;d++){var N=Sr[d];if(o.indexOf(N)!==-1){var W=encodeURIComponent(N);W===N&&(W=escape(N)),o=o.split(N).join(W)}}var M=o.indexOf("#");M!==-1&&(this.hash=o.substr(M),o=o.slice(0,M));var O=o.indexOf("?");if(O!==-1?(this.search=o.substr(O),this.query=o.substr(O+1),e&&(this.query=Rr.parse(this.query)),o=o.slice(0,O)):e&&(this.search="",this.query={}),o&&(this.pathname=o),Fe[l]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var D=this.pathname||"",U=this.search||"";this.path=D+U}return this.href=this.format(),this};function _h(r){return qt.isString(r)&&(r=Ii(r)),r instanceof Lt?r.format():Lt.prototype.format.call(r)}Lt.prototype.format=function(){var r=this.auth||"";r&&(r=encodeURIComponent(r),r=r.replace(/%3A/i,":"),r+="@");var e=this.protocol||"",t=this.pathname||"",i=this.hash||"",n=!1,s="";this.host?n=r+this.host:this.hostname&&(n=r+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&qt.isObject(this.query)&&Object.keys(this.query).length&&(s=Rr.stringify(this.query));var a=this.search||s&&"?"+s||"";return e&&e.substr(-1)!==":"&&(e+=":"),this.slashes||(!e||Fe[e])&&n!==!1?(n="//"+(n||""),t&&t.charAt(0)!=="/"&&(t="/"+t)):n||(n=""),i&&i.charAt(0)!=="#"&&(i="#"+i),a&&a.charAt(0)!=="?"&&(a="?"+a),t=t.replace(/[?#]/g,function(o){return encodeURIComponent(o)}),a=a.replace("#","%23"),e+n+t+a+i};function mh(r,e){return Ii(r,!1,!0).resolve(e)}Lt.prototype.resolve=function(r){return this.resolveObject(Ii(r,!1,!0)).format()},Lt.prototype.resolveObject=function(r){if(qt.isString(r)){var e=new Lt;e.parse(r,!1,!0),r=e}for(var t=new Lt,i=Object.keys(this),n=0;n<i.length;n++){var s=i[n];t[s]=this[s]}if(t.hash=r.hash,r.href==="")return t.href=t.format(),t;if(r.slashes&&!r.protocol){for(var a=Object.keys(r),o=0;o<a.length;o++){var h=a[o];h!=="protocol"&&(t[h]=r[h])}return Fe[t.protocol]&&t.hostname&&!t.pathname&&(t.path=t.pathname="/"),t.href=t.format(),t}if(r.protocol&&r.protocol!==t.protocol){if(!Fe[r.protocol]){for(var u=Object.keys(r),l=0;l<u.length;l++){var f=u[l];t[f]=r[f]}return t.href=t.format(),t}if(t.protocol=r.protocol,!r.host&&!Pr[r.protocol]){for(var y=(r.pathname||"").split("/");y.length&&!(r.host=y.shift()););r.host||(r.host=""),r.hostname||(r.hostname=""),y[0]!==""&&y.unshift(""),y.length<2&&y.unshift(""),t.pathname=y.join("/")}else t.pathname=r.pathname;if(t.search=r.search,t.query=r.query,t.host=r.host||"",t.auth=r.auth,t.hostname=r.hostname||r.host,t.port=r.port,t.pathname||t.search){var c=t.pathname||"",d=t.search||"";t.path=c+d}return t.slashes=t.slashes||r.slashes,t.href=t.format(),t}var p=t.pathname&&t.pathname.charAt(0)==="/",v=r.host||r.pathname&&r.pathname.charAt(0)==="/",_=v||p||t.host&&r.pathname,m=_,g=t.pathname&&t.pathname.split("/")||[],y=r.pathname&&r.pathname.split("/")||[],b=t.protocol&&!Fe[t.protocol];if(b&&(t.hostname="",t.port=null,t.host&&(g[0]===""?g[0]=t.host:g.unshift(t.host)),t.host="",r.protocol&&(r.hostname=null,r.port=null,r.host&&(y[0]===""?y[0]=r.host:y.unshift(r.host)),r.host=null),_=_&&(y[0]===""||g[0]==="")),v)t.host=r.host||r.host===""?r.host:t.host,t.hostname=r.hostname||r.hostname===""?r.hostname:t.hostname,t.search=r.search,t.query=r.query,g=y;else if(y.length)g||(g=[]),g.pop(),g=g.concat(y),t.search=r.search,t.query=r.query;else if(!qt.isNullOrUndefined(r.search)){if(b){t.hostname=t.host=g.shift();var x=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;x&&(t.auth=x.shift(),t.host=t.hostname=x.shift())}return t.search=r.search,t.query=r.query,(!qt.isNull(t.pathname)||!qt.isNull(t.search))&&(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.href=t.format(),t}if(!g.length)return t.pathname=null,t.search?t.path="/"+t.search:t.path=null,t.href=t.format(),t;for(var T=g.slice(-1)[0],w=(t.host||r.host||g.length>1)&&(T==="."||T==="..")||T==="",A=0,S=g.length;S>=0;S--)T=g[S],T==="."?g.splice(S,1):T===".."?(g.splice(S,1),A++):A&&(g.splice(S,1),A--);if(!_&&!m)for(;A--;A)g.unshift("..");_&&g[0]!==""&&(!g[0]||g[0].charAt(0)!=="/")&&g.unshift(""),w&&g.join("/").substr(-1)!=="/"&&g.push("");var E=g[0]===""||g[0]&&g[0].charAt(0)==="/";if(b){t.hostname=t.host=E?"":g.length?g.shift():"";var x=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;x&&(t.auth=x.shift(),t.host=t.hostname=x.shift())}return _=_||t.host&&g.length,_&&!E&&g.unshift(""),g.length?t.pathname=g.join("/"):(t.pathname=null,t.path=null),(!qt.isNull(t.pathname)||!qt.isNull(t.search))&&(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.auth=r.auth||t.auth,t.slashes=t.slashes||r.slashes,t.href=t.format(),t},Lt.prototype.parseHost=function(){var r=this.host,e=uh.exec(r);e&&(e=e[0],e!==":"&&(this.port=e.substr(1)),r=r.substr(0,r.length-e.length)),r&&(this.hostname=r)};var Ne={parse:sh,format:oh,resolve:ah};F.RETINA_PREFIX=/@([0-9\.]+)x/,F.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var Cr=!1,vs="6.5.8";function gh(){Cr=!0}function yh(r){var e;if(!Cr){if(F.ADAPTER.getNavigator().userAgent.toLowerCase().indexOf("chrome")>-1){var t=[`
3
- %c %c %c PixiJS `+vs+" - "+r+` ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥
4
-
5
- `,"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;"];(e=globalThis.console).log.apply(e,t)}else globalThis.console&&globalThis.console.log("PixiJS "+vs+" - "+r+" - http://www.pixijs.com/");Cr=!0}}var Ar;function xh(){return typeof Ar>"u"&&(Ar=function(){var e={stencil:!0,failIfMajorPerformanceCaveat:F.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!F.ADAPTER.getWebGLRenderingContext())return!1;var t=F.ADAPTER.createCanvas(),i=t.getContext("webgl",e)||t.getContext("experimental-webgl",e),n=!!(i&&i.getContextAttributes().stencil);if(i){var s=i.getExtension("WEBGL_lose_context");s&&s.loseContext()}return i=null,n}catch{return!1}}()),Ar}var bh="#f0f8ff",Th="#faebd7",wh="#00ffff",Eh="#7fffd4",Sh="#f0ffff",Ph="#f5f5dc",Rh="#ffe4c4",Ch="#000000",Ah="#ffebcd",Ih="#0000ff",Oh="#8a2be2",Mh="#a52a2a",Dh="#deb887",Fh="#5f9ea0",Nh="#7fff00",Bh="#d2691e",Lh="#ff7f50",Uh="#6495ed",Gh="#fff8dc",kh="#dc143c",Hh="#00ffff",Xh="#00008b",Wh="#008b8b",jh="#b8860b",zh="#a9a9a9",Yh="#006400",Vh="#a9a9a9",qh="#bdb76b",$h="#8b008b",Zh="#556b2f",Kh="#ff8c00",Qh="#9932cc",Jh="#8b0000",tu="#e9967a",eu="#8fbc8f",iu="#483d8b",ru="#2f4f4f",nu="#2f4f4f",su="#00ced1",au="#9400d3",ou="#ff1493",hu="#00bfff",uu="#696969",lu="#696969",fu="#1e90ff",cu="#b22222",du="#fffaf0",pu="#228b22",vu="#ff00ff",_u="#dcdcdc",mu="#f8f8ff",gu="#daa520",yu="#ffd700",xu="#808080",bu="#008000",Tu="#adff2f",wu="#808080",Eu="#f0fff0",Su="#ff69b4",Pu="#cd5c5c",Ru="#4b0082",Cu="#fffff0",Au="#f0e68c",Iu="#fff0f5",Ou="#e6e6fa",Mu="#7cfc00",Du="#fffacd",Fu="#add8e6",Nu="#f08080",Bu="#e0ffff",Lu="#fafad2",Uu="#d3d3d3",Gu="#90ee90",ku="#d3d3d3",Hu="#ffb6c1",Xu="#ffa07a",Wu="#20b2aa",ju="#87cefa",zu="#778899",Yu="#778899",Vu="#b0c4de",qu="#ffffe0",$u="#00ff00",Zu="#32cd32",Ku="#faf0e6",Qu="#ff00ff",Ju="#800000",tl="#66cdaa",el="#0000cd",il="#ba55d3",rl="#9370db",nl="#3cb371",sl="#7b68ee",al="#00fa9a",ol="#48d1cc",hl="#c71585",ul="#191970",ll="#f5fffa",fl="#ffe4e1",cl="#ffe4b5",dl="#ffdead",pl="#000080",vl="#fdf5e6",_l="#808000",ml="#6b8e23",gl="#ffa500",yl="#ff4500",xl="#da70d6",bl="#eee8aa",Tl="#98fb98",wl="#afeeee",El="#db7093",Sl="#ffefd5",Pl="#ffdab9",Rl="#cd853f",Cl="#ffc0cb",Al="#dda0dd",Il="#b0e0e6",Ol="#800080",Ml="#663399",Dl="#ff0000",Fl="#bc8f8f",Nl="#4169e1",Bl="#8b4513",Ll="#fa8072",Ul="#f4a460",Gl="#2e8b57",kl="#fff5ee",Hl="#a0522d",Xl="#c0c0c0",Wl="#87ceeb",jl="#6a5acd",zl="#708090",Yl="#708090",Vl="#fffafa",ql="#00ff7f",$l="#4682b4",Zl="#d2b48c",Kl="#008080",Ql="#d8bfd8",Jl="#ff6347",tf="#40e0d0",ef="#ee82ee",rf="#f5deb3",nf="#ffffff",sf="#f5f5f5",af="#ffff00",of="#9acd32",hf={aliceblue:bh,antiquewhite:Th,aqua:wh,aquamarine:Eh,azure:Sh,beige:Ph,bisque:Rh,black:Ch,blanchedalmond:Ah,blue:Ih,blueviolet:Oh,brown:Mh,burlywood:Dh,cadetblue:Fh,chartreuse:Nh,chocolate:Bh,coral:Lh,cornflowerblue:Uh,cornsilk:Gh,crimson:kh,cyan:Hh,darkblue:Xh,darkcyan:Wh,darkgoldenrod:jh,darkgray:zh,darkgreen:Yh,darkgrey:Vh,darkkhaki:qh,darkmagenta:$h,darkolivegreen:Zh,darkorange:Kh,darkorchid:Qh,darkred:Jh,darksalmon:tu,darkseagreen:eu,darkslateblue:iu,darkslategray:ru,darkslategrey:nu,darkturquoise:su,darkviolet:au,deeppink:ou,deepskyblue:hu,dimgray:uu,dimgrey:lu,dodgerblue:fu,firebrick:cu,floralwhite:du,forestgreen:pu,fuchsia:vu,gainsboro:_u,ghostwhite:mu,goldenrod:gu,gold:yu,gray:xu,green:bu,greenyellow:Tu,grey:wu,honeydew:Eu,hotpink:Su,indianred:Pu,indigo:Ru,ivory:Cu,khaki:Au,lavenderblush:Iu,lavender:Ou,lawngreen:Mu,lemonchiffon:Du,lightblue:Fu,lightcoral:Nu,lightcyan:Bu,lightgoldenrodyellow:Lu,lightgray:Uu,lightgreen:Gu,lightgrey:ku,lightpink:Hu,lightsalmon:Xu,lightseagreen:Wu,lightskyblue:ju,lightslategray:zu,lightslategrey:Yu,lightsteelblue:Vu,lightyellow:qu,lime:$u,limegreen:Zu,linen:Ku,magenta:Qu,maroon:Ju,mediumaquamarine:tl,mediumblue:el,mediumorchid:il,mediumpurple:rl,mediumseagreen:nl,mediumslateblue:sl,mediumspringgreen:al,mediumturquoise:ol,mediumvioletred:hl,midnightblue:ul,mintcream:ll,mistyrose:fl,moccasin:cl,navajowhite:dl,navy:pl,oldlace:vl,olive:_l,olivedrab:ml,orange:gl,orangered:yl,orchid:xl,palegoldenrod:bl,palegreen:Tl,paleturquoise:wl,palevioletred:El,papayawhip:Sl,peachpuff:Pl,peru:Rl,pink:Cl,plum:Al,powderblue:Il,purple:Ol,rebeccapurple:Ml,red:Dl,rosybrown:Fl,royalblue:Nl,saddlebrown:Bl,salmon:Ll,sandybrown:Ul,seagreen:Gl,seashell:kl,sienna:Hl,silver:Xl,skyblue:Wl,slateblue:jl,slategray:zl,slategrey:Yl,snow:Vl,springgreen:ql,steelblue:$l,tan:Zl,teal:Kl,thistle:Ql,tomato:Jl,turquoise:tf,violet:ef,wheat:rf,white:nf,whitesmoke:sf,yellow:af,yellowgreen:of};function Be(r,e){return e===void 0&&(e=[]),e[0]=(r>>16&255)/255,e[1]=(r>>8&255)/255,e[2]=(r&255)/255,e}function _s(r){var e=r.toString(16);return e="000000".substring(0,6-e.length)+e,"#"+e}function ms(r){return typeof r=="string"&&(r=hf[r.toLowerCase()]||r,r[0]==="#"&&(r=r.slice(1))),parseInt(r,16)}function uf(){for(var r=[],e=[],t=0;t<32;t++)r[t]=t,e[t]=t;r[G.NORMAL_NPM]=G.NORMAL,r[G.ADD_NPM]=G.ADD,r[G.SCREEN_NPM]=G.SCREEN,e[G.NORMAL]=G.NORMAL_NPM,e[G.ADD]=G.ADD_NPM,e[G.SCREEN]=G.SCREEN_NPM;var i=[];return i.push(e),i.push(r),i}var gs=uf();function ys(r,e){return gs[e?1:0][r]}function lf(r,e,t,i){return t=t||new Float32Array(4),i||i===void 0?(t[0]=r[0]*e,t[1]=r[1]*e,t[2]=r[2]*e):(t[0]=r[0],t[1]=r[1],t[2]=r[2]),t[3]=e,t}function Ir(r,e){if(e===1)return(e*255<<24)+r;if(e===0)return 0;var t=r>>16&255,i=r>>8&255,n=r&255;return t=t*e+.5|0,i=i*e+.5|0,n=n*e+.5|0,(e*255<<24)+(t<<16)+(i<<8)+n}function xs(r,e,t,i){return t=t||new Float32Array(4),t[0]=(r>>16&255)/255,t[1]=(r>>8&255)/255,t[2]=(r&255)/255,(i||i===void 0)&&(t[0]*=e,t[1]*=e,t[2]*=e),t[3]=e,t}function ff(r,e){e===void 0&&(e=null);var t=r*6;if(e=e||new Uint16Array(t),e.length!==t)throw new Error("Out buffer length is incorrect, got "+e.length+" and expected "+t);for(var i=0,n=0;i<t;i+=6,n+=4)e[i+0]=n+0,e[i+1]=n+1,e[i+2]=n+2,e[i+3]=n+0,e[i+4]=n+2,e[i+5]=n+3;return e}function bs(r){if(r.BYTES_PER_ELEMENT===4)return r instanceof Float32Array?"Float32Array":r instanceof Uint32Array?"Uint32Array":"Int32Array";if(r.BYTES_PER_ELEMENT===2){if(r instanceof Uint16Array)return"Uint16Array"}else if(r.BYTES_PER_ELEMENT===1&&r instanceof Uint8Array)return"Uint8Array";return null}function Oi(r){return r+=r===0?1:0,--r,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r+1}function Ts(r){return!(r&r-1)&&!!r}function ws(r){var e=(r>65535?1:0)<<4;r>>>=e;var t=(r>255?1:0)<<3;return r>>>=t,e|=t,t=(r>15?1:0)<<2,r>>>=t,e|=t,t=(r>3?1:0)<<1,r>>>=t,e|=t,e|r>>1}function Le(r,e,t){var i=r.length,n;if(!(e>=i||t===0)){t=e+t>i?i-e:t;var s=i-t;for(n=e;n<s;++n)r[n]=r[n+t];r.length=s}}function Ue(r){return r===0?0:r<0?-1:1}var cf=0;function xe(){return++cf}var Es={};function Ut(r,e,t){if(t===void 0&&(t=3),!Es[e]){var i=new Error().stack;typeof i>"u"?console.warn("PixiJS Deprecation Warning: ",e+`
6
- Deprecated since v`+r):(i=i.split(`
1
+ (function(zt,tt){typeof exports=="object"&&typeof module<"u"?tt(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],tt):(zt=typeof globalThis<"u"?globalThis:zt||self,tt(zt["prefect-graphs"]={},zt.Vue))})(this,function(zt,tt){"use strict";var LV=Object.defineProperty;var xV=(zt,tt,fe)=>tt in zt?LV(zt,tt,{enumerable:!0,configurable:!0,writable:!0,value:fe}):zt[tt]=fe;var N=(zt,tt,fe)=>(xV(zt,typeof tt!="symbol"?tt+"":tt,fe),fe);var fe=Math.PI*2,pc=180/Math.PI,Gc=Math.PI/180,Tt;(function(l){l[l.POLY=0]="POLY",l[l.RECT=1]="RECT",l[l.CIRC=2]="CIRC",l[l.ELIP=3]="ELIP",l[l.RREC=4]="RREC"})(Tt||(Tt={}));var _=function(){function l(e,t){e===void 0&&(e=0),t===void 0&&(t=0),this.x=0,this.y=0,this.x=e,this.y=t}return l.prototype.clone=function(){return new l(this.x,this.y)},l.prototype.copyFrom=function(e){return this.set(e.x,e.y),this},l.prototype.copyTo=function(e){return e.set(this.x,this.y),e},l.prototype.equals=function(e){return e.x===this.x&&e.y===this.y},l.prototype.set=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),this.x=e,this.y=t,this},l.prototype.toString=function(){return"[@pixi/math:Point x="+this.x+" y="+this.y+"]"},l}(),Dl=[new _,new _,new _,new _],j=function(){function l(e,t,i,n){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),this.x=Number(e),this.y=Number(t),this.width=Number(i),this.height=Number(n),this.type=Tt.RECT}return Object.defineProperty(l.prototype,"left",{get:function(){return this.x},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"right",{get:function(){return this.x+this.width},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"top",{get:function(){return this.y},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!1,configurable:!0}),Object.defineProperty(l,"EMPTY",{get:function(){return new l(0,0,0,0)},enumerable:!1,configurable:!0}),l.prototype.clone=function(){return new l(this.x,this.y,this.width,this.height)},l.prototype.copyFrom=function(e){return this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height,this},l.prototype.copyTo=function(e){return e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e},l.prototype.contains=function(e,t){return this.width<=0||this.height<=0?!1:e>=this.x&&e<this.x+this.width&&t>=this.y&&t<this.y+this.height},l.prototype.intersects=function(e,t){if(!t){var i=this.x<e.x?e.x:this.x,n=this.right>e.right?e.right:this.right;if(n<=i)return!1;var a=this.y<e.y?e.y:this.y,s=this.bottom>e.bottom?e.bottom:this.bottom;return s>a}var d=this.left,h=this.right,r=this.top,o=this.bottom;if(h<=d||o<=r)return!1;var c=Dl[0].set(e.left,e.top),u=Dl[1].set(e.left,e.bottom),m=Dl[2].set(e.right,e.top),b=Dl[3].set(e.right,e.bottom);if(m.x<=c.x||u.y<=c.y)return!1;var Z=Math.sign(t.a*t.d-t.b*t.c);if(Z===0||(t.apply(c,c),t.apply(u,u),t.apply(m,m),t.apply(b,b),Math.max(c.x,u.x,m.x,b.x)<=d||Math.min(c.x,u.x,m.x,b.x)>=h||Math.max(c.y,u.y,m.y,b.y)<=r||Math.min(c.y,u.y,m.y,b.y)>=o))return!1;var p=Z*(u.y-c.y),G=Z*(c.x-u.x),X=p*d+G*r,y=p*h+G*r,R=p*d+G*o,V=p*h+G*o;if(Math.max(X,y,R,V)<=p*c.x+G*c.y||Math.min(X,y,R,V)>=p*b.x+G*b.y)return!1;var W=Z*(c.y-m.y),f=Z*(m.x-c.x),x=W*d+f*r,L=W*h+f*r,S=W*d+f*o,Y=W*h+f*o;return!(Math.max(x,L,S,Y)<=W*c.x+f*c.y||Math.min(x,L,S,Y)>=W*b.x+f*b.y)},l.prototype.pad=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),this.x-=e,this.y-=t,this.width+=e*2,this.height+=t*2,this},l.prototype.fit=function(e){var t=Math.max(this.x,e.x),i=Math.min(this.x+this.width,e.x+e.width),n=Math.max(this.y,e.y),a=Math.min(this.y+this.height,e.y+e.height);return this.x=t,this.width=Math.max(i-t,0),this.y=n,this.height=Math.max(a-n,0),this},l.prototype.ceil=function(e,t){e===void 0&&(e=1),t===void 0&&(t=.001);var i=Math.ceil((this.x+this.width-t)*e)/e,n=Math.ceil((this.y+this.height-t)*e)/e;return this.x=Math.floor((this.x+t)*e)/e,this.y=Math.floor((this.y+t)*e)/e,this.width=i-this.x,this.height=n-this.y,this},l.prototype.enlarge=function(e){var t=Math.min(this.x,e.x),i=Math.max(this.x+this.width,e.x+e.width),n=Math.min(this.y,e.y),a=Math.max(this.y+this.height,e.y+e.height);return this.x=t,this.width=i-t,this.y=n,this.height=a-n,this},l.prototype.toString=function(){return"[@pixi/math:Rectangle x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},l}(),Xc=function(){function l(e,t,i){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),this.x=e,this.y=t,this.radius=i,this.type=Tt.CIRC}return l.prototype.clone=function(){return new l(this.x,this.y,this.radius)},l.prototype.contains=function(e,t){if(this.radius<=0)return!1;var i=this.radius*this.radius,n=this.x-e,a=this.y-t;return n*=n,a*=a,n+a<=i},l.prototype.getBounds=function(){return new j(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)},l.prototype.toString=function(){return"[@pixi/math:Circle x="+this.x+" y="+this.y+" radius="+this.radius+"]"},l}(),yc=function(){function l(e,t,i,n){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),this.x=e,this.y=t,this.width=i,this.height=n,this.type=Tt.ELIP}return l.prototype.clone=function(){return new l(this.x,this.y,this.width,this.height)},l.prototype.contains=function(e,t){if(this.width<=0||this.height<=0)return!1;var i=(e-this.x)/this.width,n=(t-this.y)/this.height;return i*=i,n*=n,i+n<=1},l.prototype.getBounds=function(){return new j(this.x-this.width,this.y-this.height,this.width,this.height)},l.prototype.toString=function(){return"[@pixi/math:Ellipse x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+"]"},l}(),Ol=function(){function l(){for(var e=arguments,t=[],i=0;i<arguments.length;i++)t[i]=e[i];var n=Array.isArray(t[0])?t[0]:t;if(typeof n[0]!="number"){for(var a=[],s=0,d=n.length;s<d;s++)a.push(n[s].x,n[s].y);n=a}this.points=n,this.type=Tt.POLY,this.closeStroke=!0}return l.prototype.clone=function(){var e=this.points.slice(),t=new l(e);return t.closeStroke=this.closeStroke,t},l.prototype.contains=function(e,t){for(var i=!1,n=this.points.length/2,a=0,s=n-1;a<n;s=a++){var d=this.points[a*2],h=this.points[a*2+1],r=this.points[s*2],o=this.points[s*2+1],c=h>t!=o>t&&e<(r-d)*((t-h)/(o-h))+d;c&&(i=!i)}return i},l.prototype.toString=function(){return"[@pixi/math:Polygon"+("closeStroke="+this.closeStroke)+("points="+this.points.reduce(function(e,t){return e+", "+t},"")+"]")},l}(),Vc=function(){function l(e,t,i,n,a){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=0),a===void 0&&(a=20),this.x=e,this.y=t,this.width=i,this.height=n,this.radius=a,this.type=Tt.RREC}return l.prototype.clone=function(){return new l(this.x,this.y,this.width,this.height,this.radius)},l.prototype.contains=function(e,t){if(this.width<=0||this.height<=0)return!1;if(e>=this.x&&e<=this.x+this.width&&t>=this.y&&t<=this.y+this.height){var i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(t>=this.y+i&&t<=this.y+this.height-i||e>=this.x+i&&e<=this.x+this.width-i)return!0;var n=e-(this.x+i),a=t-(this.y+i),s=i*i;if(n*n+a*a<=s||(n=e-(this.x+this.width-i),n*n+a*a<=s)||(a=t-(this.y+this.height-i),n*n+a*a<=s)||(n=e-(this.x+i),n*n+a*a<=s))return!0}return!1},l.prototype.toString=function(){return"[@pixi/math:RoundedRectangle x="+this.x+" y="+this.y+("width="+this.width+" height="+this.height+" radius="+this.radius+"]")},l}(),Ci=function(){function l(e,t,i,n){i===void 0&&(i=0),n===void 0&&(n=0),this._x=i,this._y=n,this.cb=e,this.scope=t}return l.prototype.clone=function(e,t){return e===void 0&&(e=this.cb),t===void 0&&(t=this.scope),new l(e,t,this._x,this._y)},l.prototype.set=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=e),(this._x!==e||this._y!==t)&&(this._x=e,this._y=t,this.cb.call(this.scope)),this},l.prototype.copyFrom=function(e){return(this._x!==e.x||this._y!==e.y)&&(this._x=e.x,this._y=e.y,this.cb.call(this.scope)),this},l.prototype.copyTo=function(e){return e.set(this._x,this._y),e},l.prototype.equals=function(e){return e.x===this._x&&e.y===this._y},l.prototype.toString=function(){return"[@pixi/math:ObservablePoint x="+0+" y="+0+" scope="+this.scope+"]"},Object.defineProperty(l.prototype,"x",{get:function(){return this._x},set:function(e){this._x!==e&&(this._x=e,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"y",{get:function(){return this._y},set:function(e){this._y!==e&&(this._y=e,this.cb.call(this.scope))},enumerable:!1,configurable:!0}),l}(),vt=function(){function l(e,t,i,n,a,s){e===void 0&&(e=1),t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=1),a===void 0&&(a=0),s===void 0&&(s=0),this.array=null,this.a=e,this.b=t,this.c=i,this.d=n,this.tx=a,this.ty=s}return l.prototype.fromArray=function(e){this.a=e[0],this.b=e[1],this.c=e[3],this.d=e[4],this.tx=e[2],this.ty=e[5]},l.prototype.set=function(e,t,i,n,a,s){return this.a=e,this.b=t,this.c=i,this.d=n,this.tx=a,this.ty=s,this},l.prototype.toArray=function(e,t){this.array||(this.array=new Float32Array(9));var i=t||this.array;return e?(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},l.prototype.apply=function(e,t){t=t||new _;var i=e.x,n=e.y;return t.x=this.a*i+this.c*n+this.tx,t.y=this.b*i+this.d*n+this.ty,t},l.prototype.applyInverse=function(e,t){t=t||new _;var i=1/(this.a*this.d+this.c*-this.b),n=e.x,a=e.y;return t.x=this.d*i*n+-this.c*i*a+(this.ty*this.c-this.tx*this.d)*i,t.y=this.a*i*a+-this.b*i*n+(-this.ty*this.a+this.tx*this.b)*i,t},l.prototype.translate=function(e,t){return this.tx+=e,this.ty+=t,this},l.prototype.scale=function(e,t){return this.a*=e,this.d*=t,this.c*=e,this.b*=t,this.tx*=e,this.ty*=t,this},l.prototype.rotate=function(e){var t=Math.cos(e),i=Math.sin(e),n=this.a,a=this.c,s=this.tx;return this.a=n*t-this.b*i,this.b=n*i+this.b*t,this.c=a*t-this.d*i,this.d=a*i+this.d*t,this.tx=s*t-this.ty*i,this.ty=s*i+this.ty*t,this},l.prototype.append=function(e){var t=this.a,i=this.b,n=this.c,a=this.d;return this.a=e.a*t+e.b*n,this.b=e.a*i+e.b*a,this.c=e.c*t+e.d*n,this.d=e.c*i+e.d*a,this.tx=e.tx*t+e.ty*n+this.tx,this.ty=e.tx*i+e.ty*a+this.ty,this},l.prototype.setTransform=function(e,t,i,n,a,s,d,h,r){return this.a=Math.cos(d+r)*a,this.b=Math.sin(d+r)*a,this.c=-Math.sin(d-h)*s,this.d=Math.cos(d-h)*s,this.tx=e-(i*this.a+n*this.c),this.ty=t-(i*this.b+n*this.d),this},l.prototype.prepend=function(e){var t=this.tx;if(e.a!==1||e.b!==0||e.c!==0||e.d!==1){var i=this.a,n=this.c;this.a=i*e.a+this.b*e.c,this.b=i*e.b+this.b*e.d,this.c=n*e.a+this.d*e.c,this.d=n*e.b+this.d*e.d}return this.tx=t*e.a+this.ty*e.c+e.tx,this.ty=t*e.b+this.ty*e.d+e.ty,this},l.prototype.decompose=function(e){var t=this.a,i=this.b,n=this.c,a=this.d,s=e.pivot,d=-Math.atan2(-n,a),h=Math.atan2(i,t),r=Math.abs(d+h);return r<1e-5||Math.abs(fe-r)<1e-5?(e.rotation=h,e.skew.x=e.skew.y=0):(e.rotation=0,e.skew.x=d,e.skew.y=h),e.scale.x=Math.sqrt(t*t+i*i),e.scale.y=Math.sqrt(n*n+a*a),e.position.x=this.tx+(s.x*t+s.y*n),e.position.y=this.ty+(s.x*i+s.y*a),e},l.prototype.invert=function(){var e=this.a,t=this.b,i=this.c,n=this.d,a=this.tx,s=e*n-t*i;return this.a=n/s,this.b=-t/s,this.c=-i/s,this.d=e/s,this.tx=(i*this.ty-n*a)/s,this.ty=-(e*this.ty-t*a)/s,this},l.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},l.prototype.clone=function(){var e=new l;return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e},l.prototype.copyTo=function(e){return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e},l.prototype.copyFrom=function(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this},l.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(l,"IDENTITY",{get:function(){return new l},enumerable:!1,configurable:!0}),Object.defineProperty(l,"TEMP_MATRIX",{get:function(){return new l},enumerable:!1,configurable:!0}),l}(),ri=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],oi=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],ci=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],ui=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],da=[],Wd=[],Al=Math.sign;function Rc(){for(var l=0;l<16;l++){var e=[];da.push(e);for(var t=0;t<16;t++)for(var i=Al(ri[l]*ri[t]+ci[l]*oi[t]),n=Al(oi[l]*ri[t]+ui[l]*oi[t]),a=Al(ri[l]*ci[t]+ci[l]*ui[t]),s=Al(oi[l]*ci[t]+ui[l]*ui[t]),d=0;d<16;d++)if(ri[d]===i&&oi[d]===n&&ci[d]===a&&ui[d]===s){e.push(d);break}}for(var l=0;l<16;l++){var h=new vt;h.set(ri[l],oi[l],ci[l],ui[l],0,0),Wd.push(h)}}Rc();var mt={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(l){return ri[l]},uY:function(l){return oi[l]},vX:function(l){return ci[l]},vY:function(l){return ui[l]},inv:function(l){return l&8?l&15:-l&7},add:function(l,e){return da[l][e]},sub:function(l,e){return da[l][mt.inv(e)]},rotate180:function(l){return l^4},isVertical:function(l){return(l&3)===2},byDirection:function(l,e){return Math.abs(l)*2<=Math.abs(e)?e>=0?mt.S:mt.N:Math.abs(e)*2<=Math.abs(l)?l>0?mt.E:mt.W:e>0?l>0?mt.SE:mt.SW:l>0?mt.NE:mt.NW},matrixAppendRotationInv:function(l,e,t,i){t===void 0&&(t=0),i===void 0&&(i=0);var n=Wd[mt.inv(e)];n.tx=t,n.ty=i,l.append(n)}},fd=function(){function l(){this.worldTransform=new vt,this.localTransform=new vt,this.position=new Ci(this.onChange,this,0,0),this.scale=new Ci(this.onChange,this,1,1),this.pivot=new Ci(this.onChange,this,0,0),this.skew=new Ci(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 l.prototype.onChange=function(){this._localID++},l.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++},l.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+") ")+"]"},l.prototype.updateLocalTransform=function(){var e=this.localTransform;this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1)},l.prototype.updateTransform=function(e){var t=this.localTransform;if(this._localID!==this._currentLocalID&&(t.a=this._cx*this.scale.x,t.b=this._sx*this.scale.x,t.c=this._cy*this.scale.y,t.d=this._sy*this.scale.y,t.tx=this.position.x-(this.pivot.x*t.a+this.pivot.y*t.c),t.ty=this.position.y-(this.pivot.x*t.b+this.pivot.y*t.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==e._worldID){var i=e.worldTransform,n=this.worldTransform;n.a=t.a*i.a+t.b*i.c,n.b=t.a*i.b+t.b*i.d,n.c=t.c*i.a+t.d*i.c,n.d=t.c*i.b+t.d*i.d,n.tx=t.tx*i.a+t.ty*i.c+i.tx,n.ty=t.tx*i.b+t.ty*i.d+i.ty,this._parentID=e._worldID,this._worldID++}},l.prototype.setFromMatrix=function(e){e.decompose(this),this._localID++},Object.defineProperty(l.prototype,"rotation",{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,this.updateSkew())},enumerable:!1,configurable:!0}),l.IDENTITY=new l,l}();const mi=new j;class Wc{constructor(e={}){this._recursive=typeof e.recursive=="boolean"?e.recursive:!0,this._toggle=e.toggle||"visible",this._targetList=new Set}add(e){return this._targetList.add(e),this}addAll(e){for(let t=0,i=e.length;t<i;t++)this._targetList.add(e[t]);return this}remove(e){return this._targetList.delete(e),this}removeAll(e){for(let t=0,i=e.length;t<i;t++)this._targetList.delete(e[t]);return this}clear(){return this._targetList.clear(),this}cull(e,t=!1){return t||this.uncull(),this._targetList.forEach(i=>{t||i.getBounds(!1,mi),this._recursive?this.cullRecursive(e,i,t):(t&&i._bounds.getRectangle(e),i[this._toggle]=mi.right>e.left&&mi.left<e.right&&mi.bottom>e.top&&mi.top<e.bottom)}),this}uncull(){return this._targetList.forEach(e=>{this._recursive?this.uncullRecursive(e):e[this._toggle]=!1}),this}cullRecursive(e,t,i){const n=i?t._bounds.getRectangle(mi):t.getBounds(!0,mi);if(t[this._toggle]=n.right>e.left&&n.left<e.right&&n.bottom>e.top&&n.top<e.bottom,!(n.left>=e.left&&n.top>=e.top&&n.right<=e.right&&n.bottom<=e.bottom)&&t[this._toggle]&&t.children&&t.children.length){const s=t.children;for(let d=0,h=s.length;d<h;d++)this.cullRecursive(e,s[d])}}uncullRecursive(e){if(e[this._toggle]=!0,e.children&&e.children.length){const t=e.children;for(let i=0,n=t.length;i<n;i++)this.uncullRecursive(t[i])}}}const{abs:SV,atan2:vV,cos:IV,max:fc,min:Ld,sin:YV,tan:gV,sqrt:TV,pow:HV,floor:JV,ceil:CV,random:FV,round:Lc}=Math;function xc(l){return l.toLocaleTimeString()}function Sc(l){const e=navigator.language;return new Intl.DateTimeFormat(e,{timeStyle:"short"}).format(l)}function vc(l){const e=navigator.language;return new Intl.DateTimeFormat(e,{dateStyle:"short"}).format(l)}function Ic(l,e){let t,i;l.forEach(a=>{(t===void 0||t>a.start||isNaN(a.start.getDate()))&&(t=a.start),a.end!==null&&(i===void 0||i<a.end||isNaN(a.end.getDate()))&&(i=a.end)}),t=t??new Date,i=i??new Date(t.getTime()+(e??0));const n=i.getTime()-t.getTime();return{min:t,max:i,span:e&&n<e?e:n}}function Yc(l){return new Date(l.getFullYear(),l.getMonth(),l.getDate())}function gc(l){return new Date(l.getFullYear(),l.getMonth(),l.getDate(),Math.floor(l.getHours()/2)*2)}const D={second:1e3,minute:1e3*60,hour:1e3*60*60,day:1e3*60*60*24,week:1e3*60*60*24*7},It={seconds:"seconds",minutes:"minutes",date:"date"},xd=[{ceiling:D.second*4,span:D.second,labelFormat:It.seconds},{ceiling:D.second*8,span:D.second*5,labelFormat:It.seconds},{ceiling:D.second*13,span:D.second*10,labelFormat:It.seconds},{ceiling:D.second*20,span:D.second*15,labelFormat:It.seconds},{ceiling:D.second*45,span:D.second*30,labelFormat:It.seconds},{ceiling:D.minute*4,span:D.minute,labelFormat:It.minutes},{ceiling:D.minute*8,span:D.minute*5,labelFormat:It.minutes},{ceiling:D.minute*13,span:D.minute*10,labelFormat:It.minutes},{ceiling:D.minute*28,span:D.minute*15,labelFormat:It.minutes},{ceiling:D.hour*1.24,span:D.minute*30,labelFormat:It.minutes},{ceiling:D.hour*3,span:D.hour,labelFormat:It.minutes},{ceiling:D.hour*8,span:D.hour*2,labelFormat:It.minutes},{ceiling:D.hour*13,span:D.hour*6,labelFormat:It.minutes},{ceiling:D.hour*22,span:D.hour*12,labelFormat:It.minutes},{ceiling:D.day*4,span:D.day,labelFormat:It.date},{ceiling:D.week*2,span:D.week,labelFormat:It.date},{ceiling:1/0,span:D.week*4,labelFormat:It.date}];function Tc(l){return{colorTextDefault:Qe((l==null?void 0:l.colorTextDefault)??"#374151"),colorTextInverse:Qe((l==null?void 0:l.colorTextInverse)??"#f8fafc"),colorTextSubdued:Qe((l==null?void 0:l.colorTextSubdued)??"#6b7280"),colorEdge:Qe((l==null?void 0:l.colorEdge)??"#374151"),colorNodeSelection:Qe((l==null?void 0:l.colorNodeSelection)??"#024DFD"),colorGuideLine:Qe((l==null?void 0:l.colorGuideLine)??"#cbd5e1"),colorPlayheadBg:Qe((l==null?void 0:l.colorPlayheadBg)??"#4e82fe"),textFontFamilyDefault:(l==null?void 0:l.textFontFamilyDefault)??"InterVariable",textSizeDefault:Ht((l==null?void 0:l.textSizeDefault)??"14px"),textSizeSmall:Ht((l==null?void 0:l.textSizeSmall)??"12px"),textLineHeightDefault:Ht((l==null?void 0:l.textLineHeightDefault)??"20px"),textLineHeightSmall:Ht((l==null?void 0:l.textLineHeightSmall)??"16px"),spacingViewportPaddingDefault:Ht((l==null?void 0:l.spacingViewportPaddingDefault)??"40px"),spacingNodeXPadding:Ht((l==null?void 0:l.spacingNodeXPadding)??"8px"),spacingNodeYPadding:Ht((l==null?void 0:l.spacingNodeYPadding)??"8px"),spacingNodeMargin:Ht((l==null?void 0:l.spacingNodeMargin)??"16px"),spacingNodeLabelMargin:Ht((l==null?void 0:l.spacingNodeLabelMargin)??"4px"),spacingMinimumNodeEdgeGap:Ht((l==null?void 0:l.spacingMinimumNodeEdgeGap)??"16px"),spacingNodeEdgeLength:Ht((l==null?void 0:l.spacingNodeEdgeLength)??"8px"),spacingNodeSelectionMargin:Ht((l==null?void 0:l.spacingNodeSelectionMargin)??"2px"),spacingNodeSelectionWidth:Ht((l==null?void 0:l.spacingNodeSelectionWidth)??"4px"),spacingEdgeWidth:Ht((l==null?void 0:l.spacingEdgeWidth)??"2px"),spacingGuideLabelPadding:Ht((l==null?void 0:l.spacingGuideLabelPadding)??"4px"),spacingPlayheadGlowPadding:Ht((l==null?void 0:l.spacingPlayheadGlowPadding)??"8px"),spacingPlayheadWidth:Ht((l==null?void 0:l.spacingPlayheadWidth)??"2px"),borderRadiusNode:Ht((l==null?void 0:l.borderRadiusNode)??"8px"),alphaNodeDimmed:(l==null?void 0:l.alphaNodeDimmed)??.2}}function Qe(l){const e=l.trim();if(e.startsWith("rgb")){const[t,i,n]=e.replace(/[^\d,]/g,"").split(",").map(a=>parseInt(a,10));return Hc([t,i,n])}if(e.startsWith("hsl")){const[t,i,n]=e.replace(/[^\d,.%]/g,"").split(",").map(s=>parseInt(s,10));return Sd(Jc(t,i,n))}return Sd(e)}function Hc(l){return parseInt((1<<24|l[0]<<16|l[1]<<8|l[2]).toString(16).slice(1),16)}function Jc(l,e,t){t/=100;const i=e*Ld(t,1-t)/100,n=a=>{const s=(a+l/30)%12,d=t-i*fc(Ld(s-3,9-s,1),-1);return Lc(255*d).toString(16).padStart(2,"0")};return`#${n(0)}${n(8)}${n(4)}`}function Sd(l){if(typeof l=="string"&&(l.startsWith("#")&&(l=l.slice(1)),l.length===3)){const[e,t,i]=l;l=e+e+t+t+i+i}return parseInt(l,16)}function Ht(l){return typeof l!="string"?(vd(l),0):l.endsWith("em")||l.endsWith("rem")?Cc(l):l.endsWith("px")?parseFloat(l):(vd(l),0)}function vd(l){console.error(`
2
+ FlowRunTimeline failed to parse spacing style: ${l}.
3
+ Make sure to use 'rem', 'em', or 'px' values.
4
+ Defaulting to zero.
5
+ `)}function Cc(l){const e=getComputedStyle(document.documentElement).fontSize;return parseFloat(l)*parseFloat(e)}const Id={timeBySeconds:xc,timeByMinutes:Sc,date:vc},Yd=()=>({fill:"black",inverseTextOnFill:!0});var ha=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},gd={exports:{}};(function(l){(function(){function e(Z,p){document.addEventListener?Z.addEventListener("scroll",p,!1):Z.attachEvent("scroll",p)}function t(Z){document.body?Z():document.addEventListener?document.addEventListener("DOMContentLoaded",function p(){document.removeEventListener("DOMContentLoaded",p),Z()}):document.attachEvent("onreadystatechange",function p(){(document.readyState=="interactive"||document.readyState=="complete")&&(document.detachEvent("onreadystatechange",p),Z())})}function i(Z){this.g=document.createElement("div"),this.g.setAttribute("aria-hidden","true"),this.g.appendChild(document.createTextNode(Z)),this.h=document.createElement("span"),this.i=document.createElement("span"),this.m=document.createElement("span"),this.j=document.createElement("span"),this.l=-1,this.h.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.i.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.j.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.m.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;",this.h.appendChild(this.m),this.i.appendChild(this.j),this.g.appendChild(this.h),this.g.appendChild(this.i)}function n(Z,p){Z.g.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+p+";"}function a(Z){var p=Z.g.offsetWidth,G=p+100;return Z.j.style.width=G+"px",Z.i.scrollLeft=G,Z.h.scrollLeft=Z.h.scrollWidth+100,Z.l!==p?(Z.l=p,!0):!1}function s(Z,p){function G(){var y=X;a(y)&&y.g.parentNode!==null&&p(y.l)}var X=Z;e(Z.h,G),e(Z.i,G),a(Z)}function d(Z,p,G){p=p||{},G=G||window,this.family=Z,this.style=p.style||"normal",this.weight=p.weight||"normal",this.stretch=p.stretch||"normal",this.context=G}var h=null,r=null,o=null,c=null;function u(Z){return r===null&&(m(Z)&&/Apple/.test(window.navigator.vendor)?(Z=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent),r=!!Z&&603>parseInt(Z[1],10)):r=!1),r}function m(Z){return c===null&&(c=!!Z.document.fonts),c}function b(Z,p){var G=Z.style,X=Z.weight;if(o===null){var y=document.createElement("div");try{y.style.font="condensed 100px sans-serif"}catch{}o=y.style.font!==""}return[G,X,o?Z.stretch:"","100px",p].join(" ")}d.prototype.load=function(Z,p){var G=this,X=Z||"BESbswy",y=0,R=p||3e3,V=new Date().getTime();return new Promise(function(W,f){if(m(G.context)&&!u(G.context)){var x=new Promise(function(S,Y){function J(){new Date().getTime()-V>=R?Y(Error(""+R+"ms timeout exceeded")):G.context.document.fonts.load(b(G,'"'+G.family+'"'),X).then(function(F){1<=F.length?S():setTimeout(J,25)},Y)}J()}),L=new Promise(function(S,Y){y=setTimeout(function(){Y(Error(""+R+"ms timeout exceeded"))},R)});Promise.race([L,x]).then(function(){clearTimeout(y),W(G)},f)}else t(function(){function S(){var k;(k=g!=-1&&v!=-1||g!=-1&&C!=-1||v!=-1&&C!=-1)&&((k=g!=v&&g!=C&&v!=C)||(h===null&&(k=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),h=!!k&&(536>parseInt(k[1],10)||parseInt(k[1],10)===536&&11>=parseInt(k[2],10))),k=h&&(g==B&&v==B&&C==B||g==P&&v==P&&C==P||g==T&&v==T&&C==T)),k=!k),k&&(I.parentNode!==null&&I.parentNode.removeChild(I),clearTimeout(y),W(G))}function Y(){if(new Date().getTime()-V>=R)I.parentNode!==null&&I.parentNode.removeChild(I),f(Error(""+R+"ms timeout exceeded"));else{var k=G.context.document.hidden;(k===!0||k===void 0)&&(g=J.g.offsetWidth,v=F.g.offsetWidth,C=M.g.offsetWidth,S()),y=setTimeout(Y,50)}}var J=new i(X),F=new i(X),M=new i(X),g=-1,v=-1,C=-1,B=-1,P=-1,T=-1,I=document.createElement("div");I.dir="ltr",n(J,b(G,"sans-serif")),n(F,b(G,"serif")),n(M,b(G,"monospace")),I.appendChild(J.g),I.appendChild(F.g),I.appendChild(M.g),G.context.document.body.appendChild(I),B=J.g.offsetWidth,P=F.g.offsetWidth,T=M.g.offsetWidth,Y(),s(J,function(k){g=k,S()}),n(J,b(G,'"'+G.family+'",sans-serif')),s(F,function(k){v=k,S()}),n(F,b(G,'"'+G.family+'",serif')),s(M,function(k){C=k,S()}),n(M,b(G,'"'+G.family+'",monospace'))})})},l.exports=d})()})(gd);const Fc=gd.exports;function Uc(l){var e=this.constructor;return this.then(function(t){return e.resolve(l()).then(function(){return t})},function(t){return e.resolve(l()).then(function(){return e.reject(t)})})}function kc(l){var e=this;return new e(function(t,i){if(!(l&&typeof l.length<"u"))return i(new TypeError(typeof l+" "+l+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var n=Array.prototype.slice.call(l);if(n.length===0)return t([]);var a=n.length;function s(h,r){if(r&&(typeof r=="object"||typeof r=="function")){var o=r.then;if(typeof o=="function"){o.call(r,function(c){s(h,c)},function(c){n[h]={status:"rejected",reason:c},--a===0&&t(n)});return}}n[h]={status:"fulfilled",value:r},--a===0&&t(n)}for(var d=0;d<n.length;d++)s(d,n[d])})}var Nc=setTimeout;function Td(l){return Boolean(l&&typeof l.length<"u")}function Mc(){}function Kc(l,e){return function(){l.apply(e,arguments)}}function Gt(l){if(!(this instanceof Gt))throw new TypeError("Promises must be constructed via new");if(typeof l!="function")throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],Jd(l,this)}function Hd(l,e){for(;l._state===3;)l=l._value;if(l._state===0){l._deferreds.push(e);return}l._handled=!0,Gt._immediateFn(function(){var t=l._state===1?e.onFulfilled:e.onRejected;if(t===null){(l._state===1?ra:hl)(e.promise,l._value);return}var i;try{i=t(l._value)}catch(n){hl(e.promise,n);return}ra(e.promise,i)})}function ra(l,e){try{if(e===l)throw new TypeError("A promise cannot be resolved with itself.");if(e&&(typeof e=="object"||typeof e=="function")){var t=e.then;if(e instanceof Gt){l._state=3,l._value=e,oa(l);return}else if(typeof t=="function"){Jd(Kc(t,e),l);return}}l._state=1,l._value=e,oa(l)}catch(i){hl(l,i)}}function hl(l,e){l._state=2,l._value=e,oa(l)}function oa(l){l._state===2&&l._deferreds.length===0&&Gt._immediateFn(function(){l._handled||Gt._unhandledRejectionFn(l._value)});for(var e=0,t=l._deferreds.length;e<t;e++)Hd(l,l._deferreds[e]);l._deferreds=null}function wc(l,e,t){this.onFulfilled=typeof l=="function"?l:null,this.onRejected=typeof e=="function"?e:null,this.promise=t}function Jd(l,e){var t=!1;try{l(function(i){t||(t=!0,ra(e,i))},function(i){t||(t=!0,hl(e,i))})}catch(i){if(t)return;t=!0,hl(e,i)}}Gt.prototype.catch=function(l){return this.then(null,l)},Gt.prototype.then=function(l,e){var t=new this.constructor(Mc);return Hd(this,new wc(l,e,t)),t},Gt.prototype.finally=Uc,Gt.all=function(l){return new Gt(function(e,t){if(!Td(l))return t(new TypeError("Promise.all accepts an array"));var i=Array.prototype.slice.call(l);if(i.length===0)return e([]);var n=i.length;function a(d,h){try{if(h&&(typeof h=="object"||typeof h=="function")){var r=h.then;if(typeof r=="function"){r.call(h,function(o){a(d,o)},t);return}}i[d]=h,--n===0&&e(i)}catch(o){t(o)}}for(var s=0;s<i.length;s++)a(s,i[s])})},Gt.allSettled=kc,Gt.resolve=function(l){return l&&typeof l=="object"&&l.constructor===Gt?l:new Gt(function(e){e(l)})},Gt.reject=function(l){return new Gt(function(e,t){t(l)})},Gt.race=function(l){return new Gt(function(e,t){if(!Td(l))return t(new TypeError("Promise.race accepts an array"));for(var i=0,n=l.length;i<n;i++)Gt.resolve(l[i]).then(e,t)})},Gt._immediateFn=typeof setImmediate=="function"&&function(l){setImmediate(l)}||function(l){Nc(l,0)},Gt._unhandledRejectionFn=function(e){typeof console<"u"&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var Cd=Object.getOwnPropertySymbols,Pc=Object.prototype.hasOwnProperty,zc=Object.prototype.propertyIsEnumerable;function Ec(l){if(l==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(l)}function Bc(){try{if(!Object.assign)return!1;var l=new String("abc");if(l[5]="de",Object.getOwnPropertyNames(l)[0]==="5")return!1;for(var e={},t=0;t<10;t++)e["_"+String.fromCharCode(t)]=t;var i=Object.getOwnPropertyNames(e).map(function(a){return e[a]});if(i.join("")!=="0123456789")return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(a){n[a]=a}),Object.keys(Object.assign({},n)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var Qc=Bc()?Object.assign:function(l,e){for(var t,i=Ec(l),n,a=1;a<arguments.length;a++){t=Object(arguments[a]);for(var s in t)Pc.call(t,s)&&(i[s]=t[s]);if(Cd){n=Cd(t);for(var d=0;d<n.length;d++)zc.call(t,n[d])&&(i[n[d]]=t[n[d]])}}return i};typeof globalThis>"u"&&(typeof self<"u"?self.globalThis=self:typeof global<"u"&&(global.globalThis=global)),globalThis.Promise||(globalThis.Promise=Gt),Object.assign||(Object.assign=Qc);var _c=16;if(Date.now&&Date.prototype.getTime||(Date.now=function(){return new Date().getTime()}),!(globalThis.performance&&globalThis.performance.now)){var jc=Date.now();globalThis.performance||(globalThis.performance={}),globalThis.performance.now=function(){return Date.now()-jc}}for(var ca=Date.now(),Fd=["ms","moz","webkit","o"],ua=0;ua<Fd.length&&!globalThis.requestAnimationFrame;++ua){var ma=Fd[ua];globalThis.requestAnimationFrame=globalThis[ma+"RequestAnimationFrame"],globalThis.cancelAnimationFrame=globalThis[ma+"CancelAnimationFrame"]||globalThis[ma+"CancelRequestAnimationFrame"]}globalThis.requestAnimationFrame||(globalThis.requestAnimationFrame=function(l){if(typeof l!="function")throw new TypeError(l+"is not a function");var e=Date.now(),t=_c+ca-e;return t<0&&(t=0),ca=e,globalThis.self.setTimeout(function(){ca=Date.now(),l(performance.now())},t)}),globalThis.cancelAnimationFrame||(globalThis.cancelAnimationFrame=function(l){return clearTimeout(l)}),Math.sign||(Math.sign=function(e){return e=Number(e),e===0||isNaN(e)?e:e>0?1:-1}),Number.isInteger||(Number.isInteger=function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e}),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);var Ce;(function(l){l[l.WEBGL_LEGACY=0]="WEBGL_LEGACY",l[l.WEBGL=1]="WEBGL",l[l.WEBGL2=2]="WEBGL2"})(Ce||(Ce={}));var rl;(function(l){l[l.UNKNOWN=0]="UNKNOWN",l[l.WEBGL=1]="WEBGL",l[l.CANVAS=2]="CANVAS"})(rl||(rl={}));var ql;(function(l){l[l.COLOR=16384]="COLOR",l[l.DEPTH=256]="DEPTH",l[l.STENCIL=1024]="STENCIL"})(ql||(ql={}));var w;(function(l){l[l.NORMAL=0]="NORMAL",l[l.ADD=1]="ADD",l[l.MULTIPLY=2]="MULTIPLY",l[l.SCREEN=3]="SCREEN",l[l.OVERLAY=4]="OVERLAY",l[l.DARKEN=5]="DARKEN",l[l.LIGHTEN=6]="LIGHTEN",l[l.COLOR_DODGE=7]="COLOR_DODGE",l[l.COLOR_BURN=8]="COLOR_BURN",l[l.HARD_LIGHT=9]="HARD_LIGHT",l[l.SOFT_LIGHT=10]="SOFT_LIGHT",l[l.DIFFERENCE=11]="DIFFERENCE",l[l.EXCLUSION=12]="EXCLUSION",l[l.HUE=13]="HUE",l[l.SATURATION=14]="SATURATION",l[l.COLOR=15]="COLOR",l[l.LUMINOSITY=16]="LUMINOSITY",l[l.NORMAL_NPM=17]="NORMAL_NPM",l[l.ADD_NPM=18]="ADD_NPM",l[l.SCREEN_NPM=19]="SCREEN_NPM",l[l.NONE=20]="NONE",l[l.SRC_OVER=0]="SRC_OVER",l[l.SRC_IN=21]="SRC_IN",l[l.SRC_OUT=22]="SRC_OUT",l[l.SRC_ATOP=23]="SRC_ATOP",l[l.DST_OVER=24]="DST_OVER",l[l.DST_IN=25]="DST_IN",l[l.DST_OUT=26]="DST_OUT",l[l.DST_ATOP=27]="DST_ATOP",l[l.ERASE=26]="ERASE",l[l.SUBTRACT=28]="SUBTRACT",l[l.XOR=29]="XOR"})(w||(w={}));var ce;(function(l){l[l.POINTS=0]="POINTS",l[l.LINES=1]="LINES",l[l.LINE_LOOP=2]="LINE_LOOP",l[l.LINE_STRIP=3]="LINE_STRIP",l[l.TRIANGLES=4]="TRIANGLES",l[l.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",l[l.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(ce||(ce={}));var H;(function(l){l[l.RGBA=6408]="RGBA",l[l.RGB=6407]="RGB",l[l.RG=33319]="RG",l[l.RED=6403]="RED",l[l.RGBA_INTEGER=36249]="RGBA_INTEGER",l[l.RGB_INTEGER=36248]="RGB_INTEGER",l[l.RG_INTEGER=33320]="RG_INTEGER",l[l.RED_INTEGER=36244]="RED_INTEGER",l[l.ALPHA=6406]="ALPHA",l[l.LUMINANCE=6409]="LUMINANCE",l[l.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",l[l.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",l[l.DEPTH_STENCIL=34041]="DEPTH_STENCIL"})(H||(H={}));var Zi;(function(l){l[l.TEXTURE_2D=3553]="TEXTURE_2D",l[l.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",l[l.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",l[l.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",l[l.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",l[l.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",l[l.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",l[l.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",l[l.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z"})(Zi||(Zi={}));var K;(function(l){l[l.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",l[l.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",l[l.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",l[l.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",l[l.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",l[l.UNSIGNED_INT=5125]="UNSIGNED_INT",l[l.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",l[l.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",l[l.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",l[l.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",l[l.BYTE=5120]="BYTE",l[l.SHORT=5122]="SHORT",l[l.INT=5124]="INT",l[l.FLOAT=5126]="FLOAT",l[l.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",l[l.HALF_FLOAT=36193]="HALF_FLOAT"})(K||(K={}));var $l;(function(l){l[l.FLOAT=0]="FLOAT",l[l.INT=1]="INT",l[l.UINT=2]="UINT"})($l||($l={}));var Le;(function(l){l[l.NEAREST=0]="NEAREST",l[l.LINEAR=1]="LINEAR"})(Le||(Le={}));var xe;(function(l){l[l.CLAMP=33071]="CLAMP",l[l.REPEAT=10497]="REPEAT",l[l.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT"})(xe||(xe={}));var ue;(function(l){l[l.OFF=0]="OFF",l[l.POW2=1]="POW2",l[l.ON=2]="ON",l[l.ON_MANUAL=3]="ON_MANUAL"})(ue||(ue={}));var me;(function(l){l[l.NPM=0]="NPM",l[l.UNPACK=1]="UNPACK",l[l.PMA=2]="PMA",l[l.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",l[l.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",l[l.PREMULTIPLY_ALPHA=2]="PREMULTIPLY_ALPHA",l[l.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA"})(me||(me={}));var Ze;(function(l){l[l.NO=0]="NO",l[l.YES=1]="YES",l[l.AUTO=2]="AUTO",l[l.BLEND=0]="BLEND",l[l.CLEAR=1]="CLEAR",l[l.BLIT=2]="BLIT"})(Ze||(Ze={}));var tn;(function(l){l[l.AUTO=0]="AUTO",l[l.MANUAL=1]="MANUAL"})(tn||(tn={}));var Ot;(function(l){l.LOW="lowp",l.MEDIUM="mediump",l.HIGH="highp"})(Ot||(Ot={}));var Lt;(function(l){l[l.NONE=0]="NONE",l[l.SCISSOR=1]="SCISSOR",l[l.STENCIL=2]="STENCIL",l[l.SPRITE=3]="SPRITE",l[l.COLOR=4]="COLOR"})(Lt||(Lt={}));var Ud;(function(l){l[l.RED=1]="RED",l[l.GREEN=2]="GREEN",l[l.BLUE=4]="BLUE",l[l.ALPHA=8]="ALPHA"})(Ud||(Ud={}));var Xt;(function(l){l[l.NONE=0]="NONE",l[l.LOW=2]="LOW",l[l.MEDIUM=4]="MEDIUM",l[l.HIGH=8]="HIGH"})(Xt||(Xt={}));var Se;(function(l){l[l.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",l[l.ARRAY_BUFFER=34962]="ARRAY_BUFFER",l[l.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER"})(Se||(Se={}));var Dc={createCanvas:function(l,e){var t=document.createElement("canvas");return t.width=l,t.height=e,t},getWebGLRenderingContext:function(){return WebGLRenderingContext},getNavigator:function(){return navigator},getBaseUrl:function(){var l;return(l=document.baseURI)!==null&&l!==void 0?l:window.location.href},fetch:function(l,e){return fetch(l,e)}},Za=/iPhone/i,kd=/iPod/i,Nd=/iPad/i,Md=/\biOS-universal(?:.+)Mac\b/i,ba=/\bAndroid(?:.+)Mobile\b/i,Kd=/Android/i,Fi=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,en=/Silk/i,Fe=/Windows Phone/i,wd=/\bWindows(?:.+)ARM\b/i,Pd=/BlackBerry/i,zd=/BB10/i,Ed=/Opera Mini/i,Bd=/\b(CriOS|Chrome)(?:.+)Mobile/i,Qd=/Mobile(?:.+)Firefox\b/i,_d=function(l){return typeof l<"u"&&l.platform==="MacIntel"&&typeof l.maxTouchPoints=="number"&&l.maxTouchPoints>1&&typeof MSStream>"u"};function Oc(l){return function(e){return e.test(l)}}function Ac(l){var e={userAgent:"",platform:"",maxTouchPoints:0};!l&&typeof navigator<"u"?e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof l=="string"?e.userAgent=l:l&&l.userAgent&&(e={userAgent:l.userAgent,platform:l.platform,maxTouchPoints:l.maxTouchPoints||0});var t=e.userAgent,i=t.split("[FBAN");typeof i[1]<"u"&&(t=i[0]),i=t.split("Twitter"),typeof i[1]<"u"&&(t=i[0]);var n=Oc(t),a={apple:{phone:n(Za)&&!n(Fe),ipod:n(kd),tablet:!n(Za)&&(n(Nd)||_d(e))&&!n(Fe),universal:n(Md),device:(n(Za)||n(kd)||n(Nd)||n(Md)||_d(e))&&!n(Fe)},amazon:{phone:n(Fi),tablet:!n(Fi)&&n(en),device:n(Fi)||n(en)},android:{phone:!n(Fe)&&n(Fi)||!n(Fe)&&n(ba),tablet:!n(Fe)&&!n(Fi)&&!n(ba)&&(n(en)||n(Kd)),device:!n(Fe)&&(n(Fi)||n(en)||n(ba)||n(Kd))||n(/\bokhttp\b/i)},windows:{phone:n(Fe),tablet:n(wd),device:n(Fe)||n(wd)},other:{blackberry:n(Pd),blackberry10:n(zd),opera:n(Ed),firefox:n(Qd),chrome:n(Bd),device:n(Pd)||n(zd)||n(Ed)||n(Qd)||n(Bd)},any:!1,phone:!1,tablet:!1};return a.any=a.apple.device||a.android.device||a.windows.device||a.other.device,a.phone=a.apple.phone||a.android.phone||a.windows.phone,a.tablet=a.apple.tablet||a.android.tablet||a.windows.tablet,a}var ve=Ac(globalThis.navigator);function qc(){return!ve.apple.device}function $c(l){var e=!0;if(ve.tablet||ve.phone){if(ve.apple.device){var t=navigator.userAgent.match(/OS (\d+)_(\d+)?/);if(t){var i=parseInt(t[1],10);i<11&&(e=!1)}}if(ve.android.device){var t=navigator.userAgent.match(/Android\s([0-9.]*)/);if(t){var i=parseInt(t[1],10);i<7&&(e=!1)}}}return e?l:4}var U={ADAPTER:Dc,MIPMAP_TEXTURES:ue.POW2,ANISOTROPIC_LEVEL:0,RESOLUTION:1,FILTER_RESOLUTION:1,FILTER_MULTISAMPLE:Xt.NONE,SPRITE_MAX_TEXTURES:$c(32),SPRITE_BATCH_SIZE:4096,RENDER_OPTIONS:{view:null,antialias:!1,autoDensity:!1,backgroundColor:0,backgroundAlpha:1,useContextAlpha:!0,clearBeforeRender:!0,preserveDrawingBuffer:!1,width:800,height:600,legacy:!1},GC_MODE:tn.AUTO,GC_MAX_IDLE:60*60,GC_MAX_CHECK_COUNT:60*10,WRAP_MODE:xe.CLAMP,SCALE_MODE:Le.LINEAR,PRECISION_VERTEX:Ot.HIGH,PRECISION_FRAGMENT:ve.apple.device?Ot.HIGH:Ot.MEDIUM,CAN_UPLOAD_SAME_BUFFER:qc(),CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1},jd={exports:{}};(function(l){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function n(h,r,o){this.fn=h,this.context=r,this.once=o||!1}function a(h,r,o,c,u){if(typeof o!="function")throw new TypeError("The listener must be a function");var m=new n(o,c||h,u),b=t?t+r:r;return h._events[b]?h._events[b].fn?h._events[b]=[h._events[b],m]:h._events[b].push(m):(h._events[b]=m,h._eventsCount++),h}function s(h,r){--h._eventsCount===0?h._events=new i:delete h._events[r]}function d(){this._events=new i,this._eventsCount=0}d.prototype.eventNames=function(){var r=[],o,c;if(this._eventsCount===0)return r;for(c in o=this._events)e.call(o,c)&&r.push(t?c.slice(1):c);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(o)):r},d.prototype.listeners=function(r){var o=t?t+r:r,c=this._events[o];if(!c)return[];if(c.fn)return[c.fn];for(var u=0,m=c.length,b=new Array(m);u<m;u++)b[u]=c[u].fn;return b},d.prototype.listenerCount=function(r){var o=t?t+r:r,c=this._events[o];return c?c.fn?1:c.length:0},d.prototype.emit=function(r,o,c,u,m,b){var Z=t?t+r:r;if(!this._events[Z])return!1;var p=this._events[Z],G=arguments.length,X,y;if(p.fn){switch(p.once&&this.removeListener(r,p.fn,void 0,!0),G){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,o),!0;case 3:return p.fn.call(p.context,o,c),!0;case 4:return p.fn.call(p.context,o,c,u),!0;case 5:return p.fn.call(p.context,o,c,u,m),!0;case 6:return p.fn.call(p.context,o,c,u,m,b),!0}for(y=1,X=new Array(G-1);y<G;y++)X[y-1]=arguments[y];p.fn.apply(p.context,X)}else{var R=p.length,V;for(y=0;y<R;y++)switch(p[y].once&&this.removeListener(r,p[y].fn,void 0,!0),G){case 1:p[y].fn.call(p[y].context);break;case 2:p[y].fn.call(p[y].context,o);break;case 3:p[y].fn.call(p[y].context,o,c);break;case 4:p[y].fn.call(p[y].context,o,c,u);break;default:if(!X)for(V=1,X=new Array(G-1);V<G;V++)X[V-1]=arguments[V];p[y].fn.apply(p[y].context,X)}}return!0},d.prototype.on=function(r,o,c){return a(this,r,o,c,!1)},d.prototype.once=function(r,o,c){return a(this,r,o,c,!0)},d.prototype.removeListener=function(r,o,c,u){var m=t?t+r:r;if(!this._events[m])return this;if(!o)return s(this,m),this;var b=this._events[m];if(b.fn)b.fn===o&&(!u||b.once)&&(!c||b.context===c)&&s(this,m);else{for(var Z=0,p=[],G=b.length;Z<G;Z++)(b[Z].fn!==o||u&&!b[Z].once||c&&b[Z].context!==c)&&p.push(b[Z]);p.length?this._events[m]=p.length===1?p[0]:p:s(this,m)}return this},d.prototype.removeAllListeners=function(r){var o;return r?(o=t?t+r:r,this._events[o]&&s(this,o)):(this._events=new i,this._eventsCount=0),this},d.prototype.off=d.prototype.removeListener,d.prototype.addListener=d.prototype.on,d.prefixed=t,d.EventEmitter=d,l.exports=d})(jd);const ol=jd.exports;var ln={exports:{}};ln.exports=nn,ln.exports.default=nn;function nn(l,e,t){t=t||2;var i=e&&e.length,n=i?e[0]*t:l.length,a=Dd(l,0,n,t,!0),s=[];if(!a||a.next===a.prev)return s;var d,h,r,o,c,u,m;if(i&&(a=nu(l,e,a,t)),l.length>80*t){d=r=l[0],h=o=l[1];for(var b=t;b<n;b+=t)c=l[b],u=l[b+1],c<d&&(d=c),u<h&&(h=u),c>r&&(r=c),u>o&&(o=u);m=Math.max(r-d,o-h),m=m!==0?32767/m:0}return cl(a,s,t,d,h,m,0),s}function Dd(l,e,t,i,n){var a,s;if(n===Xa(l,e,t,i)>0)for(a=e;a<t;a+=i)s=qd(a,l[a],l[a+1],s);else for(a=t-i;a>=e;a-=i)s=qd(a,l[a],l[a+1],s);return s&&an(s,s.next)&&(ml(s),s=s.next),s}function bi(l,e){if(!l)return l;e||(e=l);var t=l,i;do if(i=!1,!t.steiner&&(an(t,t.next)||Zt(t.prev,t,t.next)===0)){if(ml(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function cl(l,e,t,i,n,a,s){if(l){!s&&a&&ru(l,i,n,a);for(var d=l,h,r;l.prev!==l.next;){if(h=l.prev,r=l.next,a?eu(l,i,n,a):tu(l)){e.push(h.i/t|0),e.push(l.i/t|0),e.push(r.i/t|0),ml(l),l=r.next,d=r.next;continue}if(l=r,l===d){s?s===1?(l=iu(bi(l),e,t),cl(l,e,t,i,n,a,2)):s===2&&lu(l,e,t,i,n,a):cl(bi(l),e,t,i,n,a,1);break}}}}function tu(l){var e=l.prev,t=l,i=l.next;if(Zt(e,t,i)>=0)return!1;for(var n=e.x,a=t.x,s=i.x,d=e.y,h=t.y,r=i.y,o=n<a?n<s?n:s:a<s?a:s,c=d<h?d<r?d:r:h<r?h:r,u=n>a?n>s?n:s:a>s?a:s,m=d>h?d>r?d:r:h>r?h:r,b=i.next;b!==e;){if(b.x>=o&&b.x<=u&&b.y>=c&&b.y<=m&&Ui(n,d,a,h,s,r,b.x,b.y)&&Zt(b.prev,b,b.next)>=0)return!1;b=b.next}return!0}function eu(l,e,t,i){var n=l.prev,a=l,s=l.next;if(Zt(n,a,s)>=0)return!1;for(var d=n.x,h=a.x,r=s.x,o=n.y,c=a.y,u=s.y,m=d<h?d<r?d:r:h<r?h:r,b=o<c?o<u?o:u:c<u?c:u,Z=d>h?d>r?d:r:h>r?h:r,p=o>c?o>u?o:u:c>u?c:u,G=pa(m,b,e,t,i),X=pa(Z,p,e,t,i),y=l.prevZ,R=l.nextZ;y&&y.z>=G&&R&&R.z<=X;){if(y.x>=m&&y.x<=Z&&y.y>=b&&y.y<=p&&y!==n&&y!==s&&Ui(d,o,h,c,r,u,y.x,y.y)&&Zt(y.prev,y,y.next)>=0||(y=y.prevZ,R.x>=m&&R.x<=Z&&R.y>=b&&R.y<=p&&R!==n&&R!==s&&Ui(d,o,h,c,r,u,R.x,R.y)&&Zt(R.prev,R,R.next)>=0))return!1;R=R.nextZ}for(;y&&y.z>=G;){if(y.x>=m&&y.x<=Z&&y.y>=b&&y.y<=p&&y!==n&&y!==s&&Ui(d,o,h,c,r,u,y.x,y.y)&&Zt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;R&&R.z<=X;){if(R.x>=m&&R.x<=Z&&R.y>=b&&R.y<=p&&R!==n&&R!==s&&Ui(d,o,h,c,r,u,R.x,R.y)&&Zt(R.prev,R,R.next)>=0)return!1;R=R.nextZ}return!0}function iu(l,e,t){var i=l;do{var n=i.prev,a=i.next.next;!an(n,a)&&Od(n,i,i.next,a)&&ul(n,a)&&ul(a,n)&&(e.push(n.i/t|0),e.push(i.i/t|0),e.push(a.i/t|0),ml(i),ml(i.next),i=l=a),i=i.next}while(i!==l);return bi(i)}function lu(l,e,t,i,n,a){var s=l;do{for(var d=s.next.next;d!==s.prev;){if(s.i!==d.i&&uu(s,d)){var h=Ad(s,d);s=bi(s,s.next),h=bi(h,h.next),cl(s,e,t,i,n,a,0),cl(h,e,t,i,n,a,0);return}d=d.next}s=s.next}while(s!==l)}function nu(l,e,t,i){var n=[],a,s,d,h,r;for(a=0,s=e.length;a<s;a++)d=e[a]*i,h=a<s-1?e[a+1]*i:l.length,r=Dd(l,d,h,i,!1),r===r.next&&(r.steiner=!0),n.push(cu(r));for(n.sort(au),a=0;a<n.length;a++)t=su(n[a],t);return t}function au(l,e){return l.x-e.x}function su(l,e){var t=du(l,e);if(!t)return e;var i=Ad(t,l);return bi(i,i.next),bi(t,t.next)}function du(l,e){var t=e,i=l.x,n=l.y,a=-1/0,s;do{if(n<=t.y&&n>=t.next.y&&t.next.y!==t.y){var d=t.x+(n-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>a&&(a=d,s=t.x<t.next.x?t:t.next,d===i))return s}t=t.next}while(t!==e);if(!s)return null;var h=s,r=s.x,o=s.y,c=1/0,u;t=s;do i>=t.x&&t.x>=r&&i!==t.x&&Ui(n<o?i:a,n,r,o,n<o?a:i,n,t.x,t.y)&&(u=Math.abs(n-t.y)/(i-t.x),ul(t,l)&&(u<c||u===c&&(t.x>s.x||t.x===s.x&&hu(s,t)))&&(s=t,c=u)),t=t.next;while(t!==h);return s}function hu(l,e){return Zt(l.prev,l,e.prev)<0&&Zt(e.next,l,l.next)<0}function ru(l,e,t,i){var n=l;do n.z===0&&(n.z=pa(n.x,n.y,e,t,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==l);n.prevZ.nextZ=null,n.prevZ=null,ou(n)}function ou(l){var e,t,i,n,a,s,d,h,r=1;do{for(t=l,l=null,a=null,s=0;t;){for(s++,i=t,d=0,e=0;e<r&&(d++,i=i.nextZ,!!i);e++);for(h=r;d>0||h>0&&i;)d!==0&&(h===0||!i||t.z<=i.z)?(n=t,t=t.nextZ,d--):(n=i,i=i.nextZ,h--),a?a.nextZ=n:l=n,n.prevZ=a,a=n;t=i}a.nextZ=null,r*=2}while(s>1);return l}function pa(l,e,t,i,n){return l=(l-t)*n|0,e=(e-i)*n|0,l=(l|l<<8)&16711935,l=(l|l<<4)&252645135,l=(l|l<<2)&858993459,l=(l|l<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,l|e<<1}function cu(l){var e=l,t=l;do(e.x<t.x||e.x===t.x&&e.y<t.y)&&(t=e),e=e.next;while(e!==l);return t}function Ui(l,e,t,i,n,a,s,d){return(n-s)*(e-d)>=(l-s)*(a-d)&&(l-s)*(i-d)>=(t-s)*(e-d)&&(t-s)*(a-d)>=(n-s)*(i-d)}function uu(l,e){return l.next.i!==e.i&&l.prev.i!==e.i&&!mu(l,e)&&(ul(l,e)&&ul(e,l)&&Zu(l,e)&&(Zt(l.prev,l,e.prev)||Zt(l,e.prev,e))||an(l,e)&&Zt(l.prev,l,l.next)>0&&Zt(e.prev,e,e.next)>0)}function Zt(l,e,t){return(e.y-l.y)*(t.x-e.x)-(e.x-l.x)*(t.y-e.y)}function an(l,e){return l.x===e.x&&l.y===e.y}function Od(l,e,t,i){var n=dn(Zt(l,e,t)),a=dn(Zt(l,e,i)),s=dn(Zt(t,i,l)),d=dn(Zt(t,i,e));return!!(n!==a&&s!==d||n===0&&sn(l,t,e)||a===0&&sn(l,i,e)||s===0&&sn(t,l,i)||d===0&&sn(t,e,i))}function sn(l,e,t){return e.x<=Math.max(l.x,t.x)&&e.x>=Math.min(l.x,t.x)&&e.y<=Math.max(l.y,t.y)&&e.y>=Math.min(l.y,t.y)}function dn(l){return l>0?1:l<0?-1:0}function mu(l,e){var t=l;do{if(t.i!==l.i&&t.next.i!==l.i&&t.i!==e.i&&t.next.i!==e.i&&Od(t,t.next,l,e))return!0;t=t.next}while(t!==l);return!1}function ul(l,e){return Zt(l.prev,l,l.next)<0?Zt(l,e,l.next)>=0&&Zt(l,l.prev,e)>=0:Zt(l,e,l.prev)<0||Zt(l,l.next,e)<0}function Zu(l,e){var t=l,i=!1,n=(l.x+e.x)/2,a=(l.y+e.y)/2;do t.y>a!=t.next.y>a&&t.next.y!==t.y&&n<(t.next.x-t.x)*(a-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==l);return i}function Ad(l,e){var t=new Ga(l.i,l.x,l.y),i=new Ga(e.i,e.x,e.y),n=l.next,a=e.prev;return l.next=e,e.prev=l,t.next=n,n.prev=t,i.next=t,t.prev=i,a.next=i,i.prev=a,i}function qd(l,e,t,i){var n=new Ga(l,e,t);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function ml(l){l.next.prev=l.prev,l.prev.next=l.next,l.prevZ&&(l.prevZ.nextZ=l.nextZ),l.nextZ&&(l.nextZ.prevZ=l.prevZ)}function Ga(l,e,t){this.i=l,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}nn.deviation=function(l,e,t,i){var n=e&&e.length,a=n?e[0]*t:l.length,s=Math.abs(Xa(l,0,a,t));if(n)for(var d=0,h=e.length;d<h;d++){var r=e[d]*t,o=d<h-1?e[d+1]*t:l.length;s-=Math.abs(Xa(l,r,o,t))}var c=0;for(d=0;d<i.length;d+=3){var u=i[d]*t,m=i[d+1]*t,b=i[d+2]*t;c+=Math.abs((l[u]-l[b])*(l[m+1]-l[u+1])-(l[u]-l[m])*(l[b+1]-l[u+1]))}return s===0&&c===0?0:Math.abs((c-s)/s)};function Xa(l,e,t,i){for(var n=0,a=e,s=t-i;a<t;a+=i)n+=(l[s]-l[a])*(l[a+1]+l[s+1]),s=a;return n}nn.flatten=function(l){for(var e=l[0][0].length,t={vertices:[],holes:[],dimensions:e},i=0,n=0;n<l.length;n++){for(var a=0;a<l[n].length;a++)for(var s=0;s<e;s++)t.vertices.push(l[n][a][s]);n>0&&(i+=l[n-1].length,t.holes.push(i))}return t};var ya={exports:{}};(function(l,e){(function(t){var i=e&&!e.nodeType&&e,n=l&&!l.nodeType&&l,a=typeof ha=="object"&&ha;(a.global===a||a.window===a||a.self===a)&&(t=a);var s,d=2147483647,h=36,r=1,o=26,c=38,u=700,m=72,b=128,Z="-",p=/^xn--/,G=/[^\x20-\x7E]/,X=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},R=h-r,V=Math.floor,W=String.fromCharCode,f;function x(T){throw RangeError(y[T])}function L(T,I){for(var k=T.length,A=[];k--;)A[k]=I(T[k]);return A}function S(T,I){var k=T.split("@"),A="";k.length>1&&(A=k[0]+"@",T=k[1]),T=T.replace(X,".");var Q=T.split("."),lt=L(Q,I).join(".");return A+lt}function Y(T){for(var I=[],k=0,A=T.length,Q,lt;k<A;)Q=T.charCodeAt(k++),Q>=55296&&Q<=56319&&k<A?(lt=T.charCodeAt(k++),(lt&64512)==56320?I.push(((Q&1023)<<10)+(lt&1023)+65536):(I.push(Q),k--)):I.push(Q);return I}function J(T){return L(T,function(I){var k="";return I>65535&&(I-=65536,k+=W(I>>>10&1023|55296),I=56320|I&1023),k+=W(I),k}).join("")}function F(T){return T-48<10?T-22:T-65<26?T-65:T-97<26?T-97:h}function M(T,I){return T+22+75*(T<26)-((I!=0)<<5)}function g(T,I,k){var A=0;for(T=k?V(T/u):T>>1,T+=V(T/I);T>R*o>>1;A+=h)T=V(T/R);return V(A+(R+1)*T/(T+c))}function v(T){var I=[],k=T.length,A,Q=0,lt=b,ot=m,ct,Ut,Mt,ft,at,rt,ut,$,Et;for(ct=T.lastIndexOf(Z),ct<0&&(ct=0),Ut=0;Ut<ct;++Ut)T.charCodeAt(Ut)>=128&&x("not-basic"),I.push(T.charCodeAt(Ut));for(Mt=ct>0?ct+1:0;Mt<k;){for(ft=Q,at=1,rt=h;Mt>=k&&x("invalid-input"),ut=F(T.charCodeAt(Mt++)),(ut>=h||ut>V((d-Q)/at))&&x("overflow"),Q+=ut*at,$=rt<=ot?r:rt>=ot+o?o:rt-ot,!(ut<$);rt+=h)Et=h-$,at>V(d/Et)&&x("overflow"),at*=Et;A=I.length+1,ot=g(Q-ft,A,ft==0),V(Q/A)>d-lt&&x("overflow"),lt+=V(Q/A),Q%=A,I.splice(Q++,0,lt)}return J(I)}function C(T){var I,k,A,Q,lt,ot,ct,Ut,Mt,ft,at,rt=[],ut,$,Et,Dt;for(T=Y(T),ut=T.length,I=b,k=0,lt=m,ot=0;ot<ut;++ot)at=T[ot],at<128&&rt.push(W(at));for(A=Q=rt.length,Q&&rt.push(Z);A<ut;){for(ct=d,ot=0;ot<ut;++ot)at=T[ot],at>=I&&at<ct&&(ct=at);for($=A+1,ct-I>V((d-k)/$)&&x("overflow"),k+=(ct-I)*$,I=ct,ot=0;ot<ut;++ot)if(at=T[ot],at<I&&++k>d&&x("overflow"),at==I){for(Ut=k,Mt=h;ft=Mt<=lt?r:Mt>=lt+o?o:Mt-lt,!(Ut<ft);Mt+=h)Dt=Ut-ft,Et=h-ft,rt.push(W(M(ft+Dt%Et,0))),Ut=V(Dt/Et);rt.push(W(M(Ut,0))),lt=g(k,$,A==Q),k=0,++A}++k,++I}return rt.join("")}function B(T){return S(T,function(I){return p.test(I)?v(I.slice(4).toLowerCase()):I})}function P(T){return S(T,function(I){return G.test(I)?"xn--"+C(I):I})}if(s={version:"1.3.2",ucs2:{decode:Y,encode:J},decode:v,encode:C,toASCII:P,toUnicode:B},i&&n)if(l.exports==i)n.exports=s;else for(f in s)s.hasOwnProperty(f)&&(i[f]=s[f]);else t.punycode=s})(ha)})(ya,ya.exports);var bu={isString:function(l){return typeof l=="string"},isObject:function(l){return typeof l=="object"&&l!==null},isNull:function(l){return l===null},isNullOrUndefined:function(l){return l==null}},Zl={};function pu(l,e){return Object.prototype.hasOwnProperty.call(l,e)}var Gu=function(l,e,t,i){e=e||"&",t=t||"=";var n={};if(typeof l!="string"||l.length===0)return n;var a=/\+/g;l=l.split(e);var s=1e3;i&&typeof i.maxKeys=="number"&&(s=i.maxKeys);var d=l.length;s>0&&d>s&&(d=s);for(var h=0;h<d;++h){var r=l[h].replace(a,"%20"),o=r.indexOf(t),c,u,m,b;o>=0?(c=r.substr(0,o),u=r.substr(o+1)):(c=r,u=""),m=decodeURIComponent(c),b=decodeURIComponent(u),pu(n,m)?Array.isArray(n[m])?n[m].push(b):n[m]=[n[m],b]:n[m]=b}return n},bl=function(l){switch(typeof l){case"string":return l;case"boolean":return l?"true":"false";case"number":return isFinite(l)?l:"";default:return""}},Xu=function(l,e,t,i){return e=e||"&",t=t||"=",l===null&&(l=void 0),typeof l=="object"?Object.keys(l).map(function(n){var a=encodeURIComponent(bl(n))+t;return Array.isArray(l[n])?l[n].map(function(s){return a+encodeURIComponent(bl(s))}).join(e):a+encodeURIComponent(bl(l[n]))}).join(e):i?encodeURIComponent(bl(i))+t+encodeURIComponent(bl(l)):""};Zl.decode=Zl.parse=Gu,Zl.encode=Zl.stringify=Xu;var yu=ya.exports,Ie=bu,Vu=hn,Ru=Hu,Wu=Tu;function be(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var fu=/^([a-z0-9.+-]+:)/i,Lu=/:[0-9]*$/,xu=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Su=["<",">",'"',"`"," ","\r",`
6
+ `," "],vu=["{","}","|","\\","^","`"].concat(Su),Va=["'"].concat(vu),$d=["%","/","?",";","#"].concat(Va),th=["/","?","#"],Iu=255,eh=/^[+a-z0-9A-Z_-]{0,63}$/,Yu=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,gu={javascript:!0,"javascript:":!0},Ra={javascript:!0,"javascript:":!0},ki={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},Wa=Zl;function hn(l,e,t){if(l&&Ie.isObject(l)&&l instanceof be)return l;var i=new be;return i.parse(l,e,t),i}be.prototype.parse=function(l,e,t){if(!Ie.isString(l))throw new TypeError("Parameter 'url' must be a string, not "+typeof l);var i=l.indexOf("?"),n=i!==-1&&i<l.indexOf("#")?"?":"#",a=l.split(n),s=/\\/g;a[0]=a[0].replace(s,"/"),l=a.join(n);var d=l;if(d=d.trim(),!t&&l.split("#").length===1){var h=xu.exec(d);if(h)return this.path=d,this.href=d,this.pathname=h[1],h[2]?(this.search=h[2],e?this.query=Wa.parse(this.search.substr(1)):this.query=this.search.substr(1)):e&&(this.search="",this.query={}),this}var r=fu.exec(d);if(r){r=r[0];var o=r.toLowerCase();this.protocol=o,d=d.substr(r.length)}if(t||r||d.match(/^\/\/[^@\/]+@[^@\/]+/)){var c=d.substr(0,2)==="//";c&&!(r&&Ra[r])&&(d=d.substr(2),this.slashes=!0)}if(!Ra[r]&&(c||r&&!ki[r])){for(var u=-1,m=0;m<th.length;m++){var b=d.indexOf(th[m]);b!==-1&&(u===-1||b<u)&&(u=b)}var Z,p;u===-1?p=d.lastIndexOf("@"):p=d.lastIndexOf("@",u),p!==-1&&(Z=d.slice(0,p),d=d.slice(p+1),this.auth=decodeURIComponent(Z)),u=-1;for(var m=0;m<$d.length;m++){var b=d.indexOf($d[m]);b!==-1&&(u===-1||b<u)&&(u=b)}u===-1&&(u=d.length),this.host=d.slice(0,u),d=d.slice(u),this.parseHost(),this.hostname=this.hostname||"";var G=this.hostname[0]==="["&&this.hostname[this.hostname.length-1]==="]";if(!G)for(var X=this.hostname.split(/\./),m=0,y=X.length;m<y;m++){var R=X[m];if(R&&!R.match(eh)){for(var V="",W=0,f=R.length;W<f;W++)R.charCodeAt(W)>127?V+="x":V+=R[W];if(!V.match(eh)){var x=X.slice(0,m),L=X.slice(m+1),S=R.match(Yu);S&&(x.push(S[1]),L.unshift(S[2])),L.length&&(d="/"+L.join(".")+d),this.hostname=x.join(".");break}}}this.hostname.length>Iu?this.hostname="":this.hostname=this.hostname.toLowerCase(),G||(this.hostname=yu.toASCII(this.hostname));var Y=this.port?":"+this.port:"",J=this.hostname||"";this.host=J+Y,this.href+=this.host,G&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),d[0]!=="/"&&(d="/"+d))}if(!gu[o])for(var m=0,y=Va.length;m<y;m++){var F=Va[m];if(d.indexOf(F)!==-1){var M=encodeURIComponent(F);M===F&&(M=escape(F)),d=d.split(F).join(M)}}var g=d.indexOf("#");g!==-1&&(this.hash=d.substr(g),d=d.slice(0,g));var v=d.indexOf("?");if(v!==-1?(this.search=d.substr(v),this.query=d.substr(v+1),e&&(this.query=Wa.parse(this.query)),d=d.slice(0,v)):e&&(this.search="",this.query={}),d&&(this.pathname=d),ki[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var Y=this.pathname||"",C=this.search||"";this.path=Y+C}return this.href=this.format(),this};function Tu(l){return Ie.isString(l)&&(l=hn(l)),l instanceof be?l.format():be.prototype.format.call(l)}be.prototype.format=function(){var l=this.auth||"";l&&(l=encodeURIComponent(l),l=l.replace(/%3A/i,":"),l+="@");var e=this.protocol||"",t=this.pathname||"",i=this.hash||"",n=!1,a="";this.host?n=l+this.host:this.hostname&&(n=l+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&Ie.isObject(this.query)&&Object.keys(this.query).length&&(a=Wa.stringify(this.query));var s=this.search||a&&"?"+a||"";return e&&e.substr(-1)!==":"&&(e+=":"),this.slashes||(!e||ki[e])&&n!==!1?(n="//"+(n||""),t&&t.charAt(0)!=="/"&&(t="/"+t)):n||(n=""),i&&i.charAt(0)!=="#"&&(i="#"+i),s&&s.charAt(0)!=="?"&&(s="?"+s),t=t.replace(/[?#]/g,function(d){return encodeURIComponent(d)}),s=s.replace("#","%23"),e+n+t+s+i};function Hu(l,e){return hn(l,!1,!0).resolve(e)}be.prototype.resolve=function(l){return this.resolveObject(hn(l,!1,!0)).format()},be.prototype.resolveObject=function(l){if(Ie.isString(l)){var e=new be;e.parse(l,!1,!0),l=e}for(var t=new be,i=Object.keys(this),n=0;n<i.length;n++){var a=i[n];t[a]=this[a]}if(t.hash=l.hash,l.href==="")return t.href=t.format(),t;if(l.slashes&&!l.protocol){for(var s=Object.keys(l),d=0;d<s.length;d++){var h=s[d];h!=="protocol"&&(t[h]=l[h])}return ki[t.protocol]&&t.hostname&&!t.pathname&&(t.path=t.pathname="/"),t.href=t.format(),t}if(l.protocol&&l.protocol!==t.protocol){if(!ki[l.protocol]){for(var r=Object.keys(l),o=0;o<r.length;o++){var c=r[o];t[c]=l[c]}return t.href=t.format(),t}if(t.protocol=l.protocol,!l.host&&!Ra[l.protocol]){for(var y=(l.pathname||"").split("/");y.length&&!(l.host=y.shift()););l.host||(l.host=""),l.hostname||(l.hostname=""),y[0]!==""&&y.unshift(""),y.length<2&&y.unshift(""),t.pathname=y.join("/")}else t.pathname=l.pathname;if(t.search=l.search,t.query=l.query,t.host=l.host||"",t.auth=l.auth,t.hostname=l.hostname||l.host,t.port=l.port,t.pathname||t.search){var u=t.pathname||"",m=t.search||"";t.path=u+m}return t.slashes=t.slashes||l.slashes,t.href=t.format(),t}var b=t.pathname&&t.pathname.charAt(0)==="/",Z=l.host||l.pathname&&l.pathname.charAt(0)==="/",p=Z||b||t.host&&l.pathname,G=p,X=t.pathname&&t.pathname.split("/")||[],y=l.pathname&&l.pathname.split("/")||[],R=t.protocol&&!ki[t.protocol];if(R&&(t.hostname="",t.port=null,t.host&&(X[0]===""?X[0]=t.host:X.unshift(t.host)),t.host="",l.protocol&&(l.hostname=null,l.port=null,l.host&&(y[0]===""?y[0]=l.host:y.unshift(l.host)),l.host=null),p=p&&(y[0]===""||X[0]==="")),Z)t.host=l.host||l.host===""?l.host:t.host,t.hostname=l.hostname||l.hostname===""?l.hostname:t.hostname,t.search=l.search,t.query=l.query,X=y;else if(y.length)X||(X=[]),X.pop(),X=X.concat(y),t.search=l.search,t.query=l.query;else if(!Ie.isNullOrUndefined(l.search)){if(R){t.hostname=t.host=X.shift();var V=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;V&&(t.auth=V.shift(),t.host=t.hostname=V.shift())}return t.search=l.search,t.query=l.query,(!Ie.isNull(t.pathname)||!Ie.isNull(t.search))&&(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.href=t.format(),t}if(!X.length)return t.pathname=null,t.search?t.path="/"+t.search:t.path=null,t.href=t.format(),t;for(var W=X.slice(-1)[0],f=(t.host||l.host||X.length>1)&&(W==="."||W==="..")||W==="",x=0,L=X.length;L>=0;L--)W=X[L],W==="."?X.splice(L,1):W===".."?(X.splice(L,1),x++):x&&(X.splice(L,1),x--);if(!p&&!G)for(;x--;x)X.unshift("..");p&&X[0]!==""&&(!X[0]||X[0].charAt(0)!=="/")&&X.unshift(""),f&&X.join("/").substr(-1)!=="/"&&X.push("");var S=X[0]===""||X[0]&&X[0].charAt(0)==="/";if(R){t.hostname=t.host=S?"":X.length?X.shift():"";var V=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;V&&(t.auth=V.shift(),t.host=t.hostname=V.shift())}return p=p||t.host&&X.length,p&&!S&&X.unshift(""),X.length?t.pathname=X.join("/"):(t.pathname=null,t.path=null),(!Ie.isNull(t.pathname)||!Ie.isNull(t.search))&&(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.auth=l.auth||t.auth,t.slashes=t.slashes||l.slashes,t.href=t.format(),t},be.prototype.parseHost=function(){var l=this.host,e=Lu.exec(l);e&&(e=e[0],e!==":"&&(this.port=e.substr(1)),l=l.substr(0,l.length-e.length)),l&&(this.hostname=l)};var Ni={parse:Vu,format:Wu,resolve:Ru};U.RETINA_PREFIX=/@([0-9\.]+)x/,U.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var fa=!1,ih="6.5.8";function Ju(){fa=!0}function Cu(l){var e;if(!fa){if(U.ADAPTER.getNavigator().userAgent.toLowerCase().indexOf("chrome")>-1){var t=[`
7
+ %c %c %c PixiJS `+ih+" - ✰ "+l+` ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥
8
+
9
+ `,"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;"];(e=globalThis.console).log.apply(e,t)}else globalThis.console&&globalThis.console.log("PixiJS "+ih+" - "+l+" - http://www.pixijs.com/");fa=!0}}var La;function Fu(){return typeof La>"u"&&(La=function(){var e={stencil:!0,failIfMajorPerformanceCaveat:U.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!U.ADAPTER.getWebGLRenderingContext())return!1;var t=U.ADAPTER.createCanvas(),i=t.getContext("webgl",e)||t.getContext("experimental-webgl",e),n=!!(i&&i.getContextAttributes().stencil);if(i){var a=i.getExtension("WEBGL_lose_context");a&&a.loseContext()}return i=null,n}catch{return!1}}()),La}var Uu="#f0f8ff",ku="#faebd7",Nu="#00ffff",Mu="#7fffd4",Ku="#f0ffff",wu="#f5f5dc",Pu="#ffe4c4",zu="#000000",Eu="#ffebcd",Bu="#0000ff",Qu="#8a2be2",_u="#a52a2a",ju="#deb887",Du="#5f9ea0",Ou="#7fff00",Au="#d2691e",qu="#ff7f50",$u="#6495ed",tm="#fff8dc",em="#dc143c",im="#00ffff",lm="#00008b",nm="#008b8b",am="#b8860b",sm="#a9a9a9",dm="#006400",hm="#a9a9a9",rm="#bdb76b",om="#8b008b",cm="#556b2f",um="#ff8c00",mm="#9932cc",Zm="#8b0000",bm="#e9967a",pm="#8fbc8f",Gm="#483d8b",Xm="#2f4f4f",ym="#2f4f4f",Vm="#00ced1",Rm="#9400d3",Wm="#ff1493",fm="#00bfff",Lm="#696969",xm="#696969",Sm="#1e90ff",vm="#b22222",Im="#fffaf0",Ym="#228b22",gm="#ff00ff",Tm="#dcdcdc",Hm="#f8f8ff",Jm="#daa520",Cm="#ffd700",Fm="#808080",Um="#008000",km="#adff2f",Nm="#808080",Mm="#f0fff0",Km="#ff69b4",wm="#cd5c5c",Pm="#4b0082",zm="#fffff0",Em="#f0e68c",Bm="#fff0f5",Qm="#e6e6fa",_m="#7cfc00",jm="#fffacd",Dm="#add8e6",Om="#f08080",Am="#e0ffff",qm="#fafad2",$m="#d3d3d3",t0="#90ee90",e0="#d3d3d3",i0="#ffb6c1",l0="#ffa07a",n0="#20b2aa",a0="#87cefa",s0="#778899",d0="#778899",h0="#b0c4de",r0="#ffffe0",o0="#00ff00",c0="#32cd32",u0="#faf0e6",m0="#ff00ff",Z0="#800000",b0="#66cdaa",p0="#0000cd",G0="#ba55d3",X0="#9370db",y0="#3cb371",V0="#7b68ee",R0="#00fa9a",W0="#48d1cc",f0="#c71585",L0="#191970",x0="#f5fffa",S0="#ffe4e1",v0="#ffe4b5",I0="#ffdead",Y0="#000080",g0="#fdf5e6",T0="#808000",H0="#6b8e23",J0="#ffa500",C0="#ff4500",F0="#da70d6",U0="#eee8aa",k0="#98fb98",N0="#afeeee",M0="#db7093",K0="#ffefd5",w0="#ffdab9",P0="#cd853f",z0="#ffc0cb",E0="#dda0dd",B0="#b0e0e6",Q0="#800080",_0="#663399",j0="#ff0000",D0="#bc8f8f",O0="#4169e1",A0="#8b4513",q0="#fa8072",$0="#f4a460",tZ="#2e8b57",eZ="#fff5ee",iZ="#a0522d",lZ="#c0c0c0",nZ="#87ceeb",aZ="#6a5acd",sZ="#708090",dZ="#708090",hZ="#fffafa",rZ="#00ff7f",oZ="#4682b4",cZ="#d2b48c",uZ="#008080",mZ="#d8bfd8",ZZ="#ff6347",bZ="#40e0d0",pZ="#ee82ee",GZ="#f5deb3",XZ="#ffffff",yZ="#f5f5f5",VZ="#ffff00",RZ="#9acd32",WZ={aliceblue:Uu,antiquewhite:ku,aqua:Nu,aquamarine:Mu,azure:Ku,beige:wu,bisque:Pu,black:zu,blanchedalmond:Eu,blue:Bu,blueviolet:Qu,brown:_u,burlywood:ju,cadetblue:Du,chartreuse:Ou,chocolate:Au,coral:qu,cornflowerblue:$u,cornsilk:tm,crimson:em,cyan:im,darkblue:lm,darkcyan:nm,darkgoldenrod:am,darkgray:sm,darkgreen:dm,darkgrey:hm,darkkhaki:rm,darkmagenta:om,darkolivegreen:cm,darkorange:um,darkorchid:mm,darkred:Zm,darksalmon:bm,darkseagreen:pm,darkslateblue:Gm,darkslategray:Xm,darkslategrey:ym,darkturquoise:Vm,darkviolet:Rm,deeppink:Wm,deepskyblue:fm,dimgray:Lm,dimgrey:xm,dodgerblue:Sm,firebrick:vm,floralwhite:Im,forestgreen:Ym,fuchsia:gm,gainsboro:Tm,ghostwhite:Hm,goldenrod:Jm,gold:Cm,gray:Fm,green:Um,greenyellow:km,grey:Nm,honeydew:Mm,hotpink:Km,indianred:wm,indigo:Pm,ivory:zm,khaki:Em,lavenderblush:Bm,lavender:Qm,lawngreen:_m,lemonchiffon:jm,lightblue:Dm,lightcoral:Om,lightcyan:Am,lightgoldenrodyellow:qm,lightgray:$m,lightgreen:t0,lightgrey:e0,lightpink:i0,lightsalmon:l0,lightseagreen:n0,lightskyblue:a0,lightslategray:s0,lightslategrey:d0,lightsteelblue:h0,lightyellow:r0,lime:o0,limegreen:c0,linen:u0,magenta:m0,maroon:Z0,mediumaquamarine:b0,mediumblue:p0,mediumorchid:G0,mediumpurple:X0,mediumseagreen:y0,mediumslateblue:V0,mediumspringgreen:R0,mediumturquoise:W0,mediumvioletred:f0,midnightblue:L0,mintcream:x0,mistyrose:S0,moccasin:v0,navajowhite:I0,navy:Y0,oldlace:g0,olive:T0,olivedrab:H0,orange:J0,orangered:C0,orchid:F0,palegoldenrod:U0,palegreen:k0,paleturquoise:N0,palevioletred:M0,papayawhip:K0,peachpuff:w0,peru:P0,pink:z0,plum:E0,powderblue:B0,purple:Q0,rebeccapurple:_0,red:j0,rosybrown:D0,royalblue:O0,saddlebrown:A0,salmon:q0,sandybrown:$0,seagreen:tZ,seashell:eZ,sienna:iZ,silver:lZ,skyblue:nZ,slateblue:aZ,slategray:sZ,slategrey:dZ,snow:hZ,springgreen:rZ,steelblue:oZ,tan:cZ,teal:uZ,thistle:mZ,tomato:ZZ,turquoise:bZ,violet:pZ,wheat:GZ,white:XZ,whitesmoke:yZ,yellow:VZ,yellowgreen:RZ};function Mi(l,e){return e===void 0&&(e=[]),e[0]=(l>>16&255)/255,e[1]=(l>>8&255)/255,e[2]=(l&255)/255,e}function lh(l){var e=l.toString(16);return e="000000".substring(0,6-e.length)+e,"#"+e}function nh(l){return typeof l=="string"&&(l=WZ[l.toLowerCase()]||l,l[0]==="#"&&(l=l.slice(1))),parseInt(l,16)}function fZ(){for(var l=[],e=[],t=0;t<32;t++)l[t]=t,e[t]=t;l[w.NORMAL_NPM]=w.NORMAL,l[w.ADD_NPM]=w.ADD,l[w.SCREEN_NPM]=w.SCREEN,e[w.NORMAL]=w.NORMAL_NPM,e[w.ADD]=w.ADD_NPM,e[w.SCREEN]=w.SCREEN_NPM;var i=[];return i.push(e),i.push(l),i}var ah=fZ();function sh(l,e){return ah[e?1:0][l]}function LZ(l,e,t,i){return t=t||new Float32Array(4),i||i===void 0?(t[0]=l[0]*e,t[1]=l[1]*e,t[2]=l[2]*e):(t[0]=l[0],t[1]=l[1],t[2]=l[2]),t[3]=e,t}function xa(l,e){if(e===1)return(e*255<<24)+l;if(e===0)return 0;var t=l>>16&255,i=l>>8&255,n=l&255;return t=t*e+.5|0,i=i*e+.5|0,n=n*e+.5|0,(e*255<<24)+(t<<16)+(i<<8)+n}function dh(l,e,t,i){return t=t||new Float32Array(4),t[0]=(l>>16&255)/255,t[1]=(l>>8&255)/255,t[2]=(l&255)/255,(i||i===void 0)&&(t[0]*=e,t[1]*=e,t[2]*=e),t[3]=e,t}function xZ(l,e){e===void 0&&(e=null);var t=l*6;if(e=e||new Uint16Array(t),e.length!==t)throw new Error("Out buffer length is incorrect, got "+e.length+" and expected "+t);for(var i=0,n=0;i<t;i+=6,n+=4)e[i+0]=n+0,e[i+1]=n+1,e[i+2]=n+2,e[i+3]=n+0,e[i+4]=n+2,e[i+5]=n+3;return e}function hh(l){if(l.BYTES_PER_ELEMENT===4)return l instanceof Float32Array?"Float32Array":l instanceof Uint32Array?"Uint32Array":"Int32Array";if(l.BYTES_PER_ELEMENT===2){if(l instanceof Uint16Array)return"Uint16Array"}else if(l.BYTES_PER_ELEMENT===1&&l instanceof Uint8Array)return"Uint8Array";return null}function rn(l){return l+=l===0?1:0,--l,l|=l>>>1,l|=l>>>2,l|=l>>>4,l|=l>>>8,l|=l>>>16,l+1}function rh(l){return!(l&l-1)&&!!l}function oh(l){var e=(l>65535?1:0)<<4;l>>>=e;var t=(l>255?1:0)<<3;return l>>>=t,e|=t,t=(l>15?1:0)<<2,l>>>=t,e|=t,t=(l>3?1:0)<<1,l>>>=t,e|=t,e|l>>1}function Ki(l,e,t){var i=l.length,n;if(!(e>=i||t===0)){t=e+t>i?i-e:t;var a=i-t;for(n=e;n<a;++n)l[n]=l[n+t];l.length=a}}function wi(l){return l===0?0:l<0?-1:1}var SZ=0;function pi(){return++SZ}var ch={};function pe(l,e,t){if(t===void 0&&(t=3),!ch[e]){var i=new Error().stack;typeof i>"u"?console.warn("PixiJS Deprecation Warning: ",e+`
10
+ Deprecated since v`+l):(i=i.split(`
7
11
  `).splice(t).join(`
8
12
  `),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",e+`
9
- Deprecated since v`+r),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",e+`
10
- Deprecated since v`+r),console.warn(i))),Es[e]=!0}}var Ss={},te=Object.create(null),be=Object.create(null),Ps=function(){function r(e,t,i){this.canvas=F.ADAPTER.createCanvas(),this.context=this.canvas.getContext("2d"),this.resolution=i||F.RESOLUTION,this.resize(e,t)}return r.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},r.prototype.resize=function(e,t){this.canvas.width=Math.round(e*this.resolution),this.canvas.height=Math.round(t*this.resolution)},r.prototype.destroy=function(){this.context=null,this.canvas=null},Object.defineProperty(r.prototype,"width",{get:function(){return this.canvas.width},set:function(e){this.canvas.width=Math.round(e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"height",{get:function(){return this.canvas.height},set:function(e){this.canvas.height=Math.round(e)},enumerable:!1,configurable:!0}),r}();function df(r){var e=r.width,t=r.height,i=r.getContext("2d",{willReadFrequently:!0}),n=i.getImageData(0,0,e,t),s=n.data,a=s.length,o={top:null,left:null,right:null,bottom:null},h=null,u,l,f;for(u=0;u<a;u+=4)s[u+3]!==0&&(l=u/4%e,f=~~(u/4/e),o.top===null&&(o.top=f),(o.left===null||l<o.left)&&(o.left=l),(o.right===null||o.right<l)&&(o.right=l+1),(o.bottom===null||o.bottom<f)&&(o.bottom=f));return o.top!==null&&(e=o.right-o.left,t=o.bottom-o.top+1,h=i.getImageData(o.left,o.top,e,t)),{height:t,width:e,data:h}}var Mi;function pf(r,e){if(e===void 0&&(e=globalThis.location),r.indexOf("data:")===0)return"";e=e||globalThis.location,Mi||(Mi=document.createElement("a")),Mi.href=r;var t=Ne.parse(Mi.href),i=!t.port&&e.port===""||t.port===e.port;return t.hostname!==e.hostname||!i||t.protocol!==e.protocol?"anonymous":""}function Di(r,e){var t=F.RETINA_PREFIX.exec(r);return t?parseFloat(t[1]):e!==void 0?e:1}F.SORTABLE_CHILDREN=!1;var Fi=function(){function r(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}return r.prototype.isEmpty=function(){return this.minX>this.maxX||this.minY>this.maxY},r.prototype.clear=function(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0},r.prototype.getRectangle=function(e){return this.minX>this.maxX||this.minY>this.maxY?j.EMPTY:(e=e||new j(0,0,1,1),e.x=this.minX,e.y=this.minY,e.width=this.maxX-this.minX,e.height=this.maxY-this.minY,e)},r.prototype.addPoint=function(e){this.minX=Math.min(this.minX,e.x),this.maxX=Math.max(this.maxX,e.x),this.minY=Math.min(this.minY,e.y),this.maxY=Math.max(this.maxY,e.y)},r.prototype.addPointMatrix=function(e,t){var i=e.a,n=e.b,s=e.c,a=e.d,o=e.tx,h=e.ty,u=i*t.x+s*t.y+o,l=n*t.x+a*t.y+h;this.minX=Math.min(this.minX,u),this.maxX=Math.max(this.maxX,u),this.minY=Math.min(this.minY,l),this.maxY=Math.max(this.maxY,l)},r.prototype.addQuad=function(e){var t=this.minX,i=this.minY,n=this.maxX,s=this.maxY,a=e[0],o=e[1];t=a<t?a:t,i=o<i?o:i,n=a>n?a:n,s=o>s?o:s,a=e[2],o=e[3],t=a<t?a:t,i=o<i?o:i,n=a>n?a:n,s=o>s?o:s,a=e[4],o=e[5],t=a<t?a:t,i=o<i?o:i,n=a>n?a:n,s=o>s?o:s,a=e[6],o=e[7],t=a<t?a:t,i=o<i?o:i,n=a>n?a:n,s=o>s?o:s,this.minX=t,this.minY=i,this.maxX=n,this.maxY=s},r.prototype.addFrame=function(e,t,i,n,s){this.addFrameMatrix(e.worldTransform,t,i,n,s)},r.prototype.addFrameMatrix=function(e,t,i,n,s){var a=e.a,o=e.b,h=e.c,u=e.d,l=e.tx,f=e.ty,c=this.minX,d=this.minY,p=this.maxX,v=this.maxY,_=a*t+h*i+l,m=o*t+u*i+f;c=_<c?_:c,d=m<d?m:d,p=_>p?_:p,v=m>v?m:v,_=a*n+h*i+l,m=o*n+u*i+f,c=_<c?_:c,d=m<d?m:d,p=_>p?_:p,v=m>v?m:v,_=a*t+h*s+l,m=o*t+u*s+f,c=_<c?_:c,d=m<d?m:d,p=_>p?_:p,v=m>v?m:v,_=a*n+h*s+l,m=o*n+u*s+f,c=_<c?_:c,d=m<d?m:d,p=_>p?_:p,v=m>v?m:v,this.minX=c,this.minY=d,this.maxX=p,this.maxY=v},r.prototype.addVertexData=function(e,t,i){for(var n=this.minX,s=this.minY,a=this.maxX,o=this.maxY,h=t;h<i;h+=2){var u=e[h],l=e[h+1];n=u<n?u:n,s=l<s?l:s,a=u>a?u:a,o=l>o?l:o}this.minX=n,this.minY=s,this.maxX=a,this.maxY=o},r.prototype.addVertices=function(e,t,i,n){this.addVerticesMatrix(e.worldTransform,t,i,n)},r.prototype.addVerticesMatrix=function(e,t,i,n,s,a){s===void 0&&(s=0),a===void 0&&(a=s);for(var o=e.a,h=e.b,u=e.c,l=e.d,f=e.tx,c=e.ty,d=this.minX,p=this.minY,v=this.maxX,_=this.maxY,m=i;m<n;m+=2){var g=t[m],y=t[m+1],b=o*g+u*y+f,x=l*y+h*g+c;d=Math.min(d,b-s),v=Math.max(v,b+s),p=Math.min(p,x-a),_=Math.max(_,x+a)}this.minX=d,this.minY=p,this.maxX=v,this.maxY=_},r.prototype.addBounds=function(e){var t=this.minX,i=this.minY,n=this.maxX,s=this.maxY;this.minX=e.minX<t?e.minX:t,this.minY=e.minY<i?e.minY:i,this.maxX=e.maxX>n?e.maxX:n,this.maxY=e.maxY>s?e.maxY:s},r.prototype.addBoundsMask=function(e,t){var i=e.minX>t.minX?e.minX:t.minX,n=e.minY>t.minY?e.minY:t.minY,s=e.maxX<t.maxX?e.maxX:t.maxX,a=e.maxY<t.maxY?e.maxY:t.maxY;if(i<=s&&n<=a){var o=this.minX,h=this.minY,u=this.maxX,l=this.maxY;this.minX=i<o?i:o,this.minY=n<h?n:h,this.maxX=s>u?s:u,this.maxY=a>l?a:l}},r.prototype.addBoundsMatrix=function(e,t){this.addFrameMatrix(t,e.minX,e.minY,e.maxX,e.maxY)},r.prototype.addBoundsArea=function(e,t){var i=e.minX>t.x?e.minX:t.x,n=e.minY>t.y?e.minY:t.y,s=e.maxX<t.x+t.width?e.maxX:t.x+t.width,a=e.maxY<t.y+t.height?e.maxY:t.y+t.height;if(i<=s&&n<=a){var o=this.minX,h=this.minY,u=this.maxX,l=this.maxY;this.minX=i<o?i:o,this.minY=n<h?n:h,this.maxX=s>u?s:u,this.maxY=a>l?a:l}},r.prototype.pad=function(e,t){e===void 0&&(e=0),t===void 0&&(t=e),this.isEmpty()||(this.minX-=e,this.maxX+=e,this.minY-=t,this.maxY+=t)},r.prototype.addFramePad=function(e,t,i,n,s,a){e-=s,t-=a,i+=s,n+=a,this.minX=this.minX<e?this.minX:e,this.maxX=this.maxX>i?this.maxX:i,this.minY=this.minY<t?this.minY:t,this.maxY=this.maxY>n?this.maxY:n},r}();var Or=function(r,e){return Or=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Or(r,e)};function Mr(r,e){Or(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var pt=function(r){Mr(e,r);function e(){var t=r.call(this)||this;return t.tempDisplayObjectParent=null,t.transform=new Wn,t.alpha=1,t.visible=!0,t.renderable=!0,t.cullable=!1,t.cullArea=null,t.parent=null,t.worldAlpha=1,t._lastSortedIndex=0,t._zIndex=0,t.filterArea=null,t.filters=null,t._enabledFilters=null,t._bounds=new Fi,t._localBounds=null,t._boundsID=0,t._boundsRect=null,t._localBoundsRect=null,t._mask=null,t._maskRefCount=0,t._destroyed=!1,t.isSprite=!1,t.isMask=!1,t}return e.mixin=function(t){for(var i=Object.keys(t),n=0;n<i.length;++n){var s=i[n];Object.defineProperty(e.prototype,s,Object.getOwnPropertyDescriptor(t,s))}},Object.defineProperty(e.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),e.prototype._recursivePostUpdateTransform=function(){this.parent?(this.parent._recursivePostUpdateTransform(),this.transform.updateTransform(this.parent.transform)):this.transform.updateTransform(this._tempDisplayObjectParent.transform)},e.prototype.updateTransform=function(){this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},e.prototype.getBounds=function(t,i){return t||(this.parent?(this._recursivePostUpdateTransform(),this.updateTransform()):(this.parent=this._tempDisplayObjectParent,this.updateTransform(),this.parent=null)),this._bounds.updateID!==this._boundsID&&(this.calculateBounds(),this._bounds.updateID=this._boundsID),i||(this._boundsRect||(this._boundsRect=new j),i=this._boundsRect),this._bounds.getRectangle(i)},e.prototype.getLocalBounds=function(t){t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._localBounds||(this._localBounds=new Fi);var i=this.transform,n=this.parent;this.parent=null,this.transform=this._tempDisplayObjectParent.transform;var s=this._bounds,a=this._boundsID;this._bounds=this._localBounds;var o=this.getBounds(!1,t);return this.parent=n,this.transform=i,this._bounds=s,this._bounds.updateID+=this._boundsID-a,o},e.prototype.toGlobal=function(t,i,n){return n===void 0&&(n=!1),n||(this._recursivePostUpdateTransform(),this.parent?this.displayObjectUpdateTransform():(this.parent=this._tempDisplayObjectParent,this.displayObjectUpdateTransform(),this.parent=null)),this.worldTransform.apply(t,i)},e.prototype.toLocal=function(t,i,n,s){return i&&(t=i.toGlobal(t,n,s)),s||(this._recursivePostUpdateTransform(),this.parent?this.displayObjectUpdateTransform():(this.parent=this._tempDisplayObjectParent,this.displayObjectUpdateTransform(),this.parent=null)),this.worldTransform.applyInverse(t,n)},e.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},e.prototype.setTransform=function(t,i,n,s,a,o,h,u,l){return t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=1),s===void 0&&(s=1),a===void 0&&(a=0),o===void 0&&(o=0),h===void 0&&(h=0),u===void 0&&(u=0),l===void 0&&(l=0),this.position.x=t,this.position.y=i,this.scale.x=n||1,this.scale.y=s||1,this.rotation=a,this.skew.x=o,this.skew.y=h,this.pivot.x=u,this.pivot.y=l,this},e.prototype.destroy=function(t){this.parent&&this.parent.removeChild(this),this._destroyed=!0,this.transform=null,this.parent=null,this._bounds=null,this.mask=null,this.cullArea=null,this.filters=null,this.filterArea=null,this.hitArea=null,this.interactive=!1,this.interactiveChildren=!1,this.emit("destroyed"),this.removeAllListeners()},Object.defineProperty(e.prototype,"_tempDisplayObjectParent",{get:function(){return this.tempDisplayObjectParent===null&&(this.tempDisplayObjectParent=new Rs),this.tempDisplayObjectParent},enumerable:!1,configurable:!0}),e.prototype.enableTempParent=function(){var t=this.parent;return this.parent=this._tempDisplayObjectParent,t},e.prototype.disableTempParent=function(t){this.parent=t},Object.defineProperty(e.prototype,"x",{get:function(){return this.position.x},set:function(t){this.transform.position.x=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"y",{get:function(){return this.position.y},set:function(t){this.transform.position.y=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"worldTransform",{get:function(){return this.transform.worldTransform},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"localTransform",{get:function(){return this.transform.localTransform},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"position",{get:function(){return this.transform.position},set:function(t){this.transform.position.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scale",{get:function(){return this.transform.scale},set:function(t){this.transform.scale.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pivot",{get:function(){return this.transform.pivot},set:function(t){this.transform.pivot.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"skew",{get:function(){return this.transform.skew},set:function(t){this.transform.skew.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rotation",{get:function(){return this.transform.rotation},set:function(t){this.transform.rotation=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"angle",{get:function(){return this.transform.rotation*po},set:function(t){this.transform.rotation=t*vo},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(t){this._zIndex=t,this.parent&&(this.parent.sortDirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"worldVisible",{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mask",{get:function(){return this._mask},set:function(t){if(this._mask!==t){if(this._mask){var i=this._mask.isMaskData?this._mask.maskObject:this._mask;i&&(i._maskRefCount--,i._maskRefCount===0&&(i.renderable=!0,i.isMask=!1))}if(this._mask=t,this._mask){var i=this._mask.isMaskData?this._mask.maskObject:this._mask;i&&(i._maskRefCount===0&&(i.renderable=!1,i.isMask=!0),i._maskRefCount++)}}},enumerable:!1,configurable:!0}),e}(Ve),Rs=function(r){Mr(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.sortDirty=null,t}return e}(pt);pt.prototype.displayObjectUpdateTransform=pt.prototype.updateTransform;function vf(r,e){return r.zIndex===e.zIndex?r._lastSortedIndex-e._lastSortedIndex:r.zIndex-e.zIndex}var Pt=function(r){Mr(e,r);function e(){var t=r.call(this)||this;return t.children=[],t.sortableChildren=F.SORTABLE_CHILDREN,t.sortDirty=!1,t}return e.prototype.onChildrenChange=function(t){},e.prototype.addChild=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(i.length>1)for(var s=0;s<i.length;s++)this.addChild(i[s]);else{var a=i[0];a.parent&&a.parent.removeChild(a),a.parent=this,this.sortDirty=!0,a.transform._parentID=-1,this.children.push(a),this._boundsID++,this.onChildrenChange(this.children.length-1),this.emit("childAdded",a,this,this.children.length-1),a.emit("added",this)}return i[0]},e.prototype.addChildAt=function(t,i){if(i<0||i>this.children.length)throw new Error(t+"addChildAt: The index "+i+" supplied is out of bounds "+this.children.length);return t.parent&&t.parent.removeChild(t),t.parent=this,this.sortDirty=!0,t.transform._parentID=-1,this.children.splice(i,0,t),this._boundsID++,this.onChildrenChange(i),t.emit("added",this),this.emit("childAdded",t,this,i),t},e.prototype.swapChildren=function(t,i){if(t!==i){var n=this.getChildIndex(t),s=this.getChildIndex(i);this.children[n]=i,this.children[s]=t,this.onChildrenChange(n<s?n:s)}},e.prototype.getChildIndex=function(t){var i=this.children.indexOf(t);if(i===-1)throw new Error("The supplied DisplayObject must be a child of the caller");return i},e.prototype.setChildIndex=function(t,i){if(i<0||i>=this.children.length)throw new Error("The index "+i+" supplied is out of bounds "+this.children.length);var n=this.getChildIndex(t);Le(this.children,n,1),this.children.splice(i,0,t),this.onChildrenChange(i)},e.prototype.getChildAt=function(t){if(t<0||t>=this.children.length)throw new Error("getChildAt: Index ("+t+") does not exist.");return this.children[t]},e.prototype.removeChild=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(i.length>1)for(var s=0;s<i.length;s++)this.removeChild(i[s]);else{var a=i[0],o=this.children.indexOf(a);if(o===-1)return null;a.parent=null,a.transform._parentID=-1,Le(this.children,o,1),this._boundsID++,this.onChildrenChange(o),a.emit("removed",this),this.emit("childRemoved",a,this,o)}return i[0]},e.prototype.removeChildAt=function(t){var i=this.getChildAt(t);return i.parent=null,i.transform._parentID=-1,Le(this.children,t,1),this._boundsID++,this.onChildrenChange(t),i.emit("removed",this),this.emit("childRemoved",i,this,t),i},e.prototype.removeChildren=function(t,i){t===void 0&&(t=0),i===void 0&&(i=this.children.length);var n=t,s=i,a=s-n,o;if(a>0&&a<=s){o=this.children.splice(n,a);for(var h=0;h<o.length;++h)o[h].parent=null,o[h].transform&&(o[h].transform._parentID=-1);this._boundsID++,this.onChildrenChange(t);for(var h=0;h<o.length;++h)o[h].emit("removed",this),this.emit("childRemoved",o[h],this,h);return o}else if(a===0&&this.children.length===0)return[];throw new RangeError("removeChildren: numeric values are outside the acceptable range.")},e.prototype.sortChildren=function(){for(var t=!1,i=0,n=this.children.length;i<n;++i){var s=this.children[i];s._lastSortedIndex=i,!t&&s.zIndex!==0&&(t=!0)}t&&this.children.length>1&&this.children.sort(vf),this.sortDirty=!1},e.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 t=0,i=this.children.length;t<i;++t){var n=this.children[t];n.visible&&n.updateTransform()}},e.prototype.calculateBounds=function(){this._bounds.clear(),this._calculateBounds();for(var t=0;t<this.children.length;t++){var i=this.children[t];if(!(!i.visible||!i.renderable))if(i.calculateBounds(),i._mask){var n=i._mask.isMaskData?i._mask.maskObject:i._mask;n?(n.calculateBounds(),this._bounds.addBoundsMask(i._bounds,n._bounds)):this._bounds.addBounds(i._bounds)}else i.filterArea?this._bounds.addBoundsArea(i._bounds,i.filterArea):this._bounds.addBounds(i._bounds)}this._bounds.updateID=this._boundsID},e.prototype.getLocalBounds=function(t,i){i===void 0&&(i=!1);var n=r.prototype.getLocalBounds.call(this,t);if(!i)for(var s=0,a=this.children.length;s<a;++s){var o=this.children[s];o.visible&&o.updateTransform()}return n},e.prototype._calculateBounds=function(){},e.prototype._renderWithCulling=function(t){var i=t.renderTexture.sourceFrame;if(i.width>0&&i.height>0){var n,s;if(this.cullArea?(n=this.cullArea,s=this.worldTransform):this._render!==e.prototype._render&&(n=this.getBounds(!0)),n&&i.intersects(n,s))this._render(t);else if(this.cullArea)return;for(var a=0,o=this.children.length;a<o;++a){var h=this.children[a],u=h.cullable;h.cullable=u||!this.cullArea,h.render(t),h.cullable=u}}},e.prototype.render=function(t){if(!(!this.visible||this.worldAlpha<=0||!this.renderable))if(this._mask||this.filters&&this.filters.length)this.renderAdvanced(t);else if(this.cullable)this._renderWithCulling(t);else{this._render(t);for(var i=0,n=this.children.length;i<n;++i)this.children[i].render(t)}},e.prototype.renderAdvanced=function(t){var i=this.filters,n=this._mask;if(i){this._enabledFilters||(this._enabledFilters=[]),this._enabledFilters.length=0;for(var s=0;s<i.length;s++)i[s].enabled&&this._enabledFilters.push(i[s])}var a=i&&this._enabledFilters&&this._enabledFilters.length||n&&(!n.isMaskData||n.enabled&&(n.autoDetect||n.type!==mt.NONE));if(a&&t.batch.flush(),i&&this._enabledFilters&&this._enabledFilters.length&&t.filter.push(this,this._enabledFilters),n&&t.mask.push(this,this._mask),this.cullable)this._renderWithCulling(t);else{this._render(t);for(var s=0,o=this.children.length;s<o;++s)this.children[s].render(t)}a&&t.batch.flush(),n&&t.mask.pop(this),i&&this._enabledFilters&&this._enabledFilters.length&&t.filter.pop()},e.prototype._render=function(t){},e.prototype.destroy=function(t){r.prototype.destroy.call(this),this.sortDirty=!1;var i=typeof t=="boolean"?t:t&&t.children,n=this.removeChildren(0,this.children.length);if(i)for(var s=0;s<n.length;++s)n[s].destroy(t)},Object.defineProperty(e.prototype,"width",{get:function(){return this.scale.x*this.getLocalBounds().width},set:function(t){var i=this.getLocalBounds().width;i!==0?this.scale.x=t/i:this.scale.x=1,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.scale.y*this.getLocalBounds().height},set:function(t){var i=this.getLocalBounds().height;i!==0?this.scale.y=t/i:this.scale.y=1,this._height=t},enumerable:!1,configurable:!0}),e}(pt);Pt.prototype.containerUpdateTransform=Pt.prototype.updateTransform;var Je=function(){return Je=Object.assign||function(e){for(var t=arguments,i,n=1,s=arguments.length;n<s;n++){i=t[n];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a])}return e},Je.apply(this,arguments)},tt;(function(r){r.Application="application",r.RendererPlugin="renderer-webgl-plugin",r.CanvasRendererPlugin="renderer-canvas-plugin",r.Loader="loader",r.LoadParser="load-parser",r.ResolveParser="resolve-parser",r.CacheParser="cache-parser",r.DetectionParser="detection-parser"})(tt||(tt={}));var Cs=function(r){if(typeof r=="function"||typeof r=="object"&&r.extension){if(!r.extension)throw new Error("Extension class must have an extension object");var e=typeof r.extension!="object"?{type:r.extension}:r.extension;r=Je(Je({},e),{ref:r})}if(typeof r=="object")r=Je({},r);else throw new Error("Invalid extension type");return typeof r.type=="string"&&(r.type=[r.type]),r},ee={_addHandlers:null,_removeHandlers:null,_queue:{},remove:function(){for(var r=arguments,e=this,t=[],i=0;i<arguments.length;i++)t[i]=r[i];return t.map(Cs).forEach(function(n){n.type.forEach(function(s){var a,o;return(o=(a=e._removeHandlers)[s])===null||o===void 0?void 0:o.call(a,n)})}),this},add:function(){for(var r=arguments,e=this,t=[],i=0;i<arguments.length;i++)t[i]=r[i];return t.map(Cs).forEach(function(n){n.type.forEach(function(s){var a=e._addHandlers,o=e._queue;a[s]?a[s](n):(o[s]=o[s]||[],o[s].push(n))})}),this},handle:function(r,e,t){var i=this._addHandlers=this._addHandlers||{},n=this._removeHandlers=this._removeHandlers||{};if(i[r]||n[r])throw new Error("Extension type "+r+" already has a handler");i[r]=e,n[r]=t;var s=this._queue;return s[r]&&(s[r].forEach(function(a){return e(a)}),delete s[r]),this},handleByMap:function(r,e){return this.handle(r,function(t){e[t.name]=t.ref},function(t){delete e[t.name]})},handleByList:function(r,e){return this.handle(r,function(t){var i,n;e.push(t.ref),r===tt.Loader&&((n=(i=t.ref).add)===null||n===void 0||n.call(i))},function(t){var i=e.indexOf(t.ref);i!==-1&&e.splice(i,1)})}};var Et=function(){function r(e){this.items=[],this._name=e,this._aliasCount=0}return r.prototype.emit=function(e,t,i,n,s,a,o,h){if(arguments.length>8)throw new Error("max arguments reached");var u=this,l=u.name,f=u.items;this._aliasCount++;for(var c=0,d=f.length;c<d;c++)f[c][l](e,t,i,n,s,a,o,h);return f===this.items&&this._aliasCount--,this},r.prototype.ensureNonAliasedItems=function(){this._aliasCount>0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))},r.prototype.add=function(e){return e[this._name]&&(this.ensureNonAliasedItems(),this.remove(e),this.items.push(e)),this},r.prototype.remove=function(e){var t=this.items.indexOf(e);return t!==-1&&(this.ensureNonAliasedItems(),this.items.splice(t,1)),this},r.prototype.contains=function(e){return this.items.indexOf(e)!==-1},r.prototype.removeAll=function(){return this.ensureNonAliasedItems(),this.items.length=0,this},r.prototype.destroy=function(){this.removeAll(),this.items=null,this._name=null},Object.defineProperty(r.prototype,"empty",{get:function(){return this.items.length===0},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),r}();Object.defineProperties(Et.prototype,{dispatch:{value:Et.prototype.emit},run:{value:Et.prototype.emit}});F.TARGET_FPMS=.06;var $t;(function(r){r[r.INTERACTION=50]="INTERACTION",r[r.HIGH=25]="HIGH",r[r.NORMAL=0]="NORMAL",r[r.LOW=-25]="LOW",r[r.UTILITY=-50]="UTILITY"})($t||($t={}));var Dr=function(){function r(e,t,i,n){t===void 0&&(t=null),i===void 0&&(i=0),n===void 0&&(n=!1),this.next=null,this.previous=null,this._destroyed=!1,this.fn=e,this.context=t,this.priority=i,this.once=n}return r.prototype.match=function(e,t){return t===void 0&&(t=null),this.fn===e&&this.context===t},r.prototype.emit=function(e){this.fn&&(this.context?this.fn.call(this.context,e):this.fn(e));var t=this.next;return this.once&&this.destroy(!0),this._destroyed&&(this.next=null),t},r.prototype.connect=function(e){this.previous=e,e.next&&(e.next.previous=this),this.next=e.next,e.next=this},r.prototype.destroy=function(e){e===void 0&&(e=!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 t=this.next;return this.next=e?null:t,this.previous=null,t},r}(),Tt=function(){function r(){var e=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 Dr(null,null,1/0),this.deltaMS=1/F.TARGET_FPMS,this.elapsedMS=1/F.TARGET_FPMS,this._tick=function(t){e._requestId=null,e.started&&(e.update(t),e.started&&e._requestId===null&&e._head.next&&(e._requestId=requestAnimationFrame(e._tick)))}}return r.prototype._requestIfNeeded=function(){this._requestId===null&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))},r.prototype._cancelIfNeeded=function(){this._requestId!==null&&(cancelAnimationFrame(this._requestId),this._requestId=null)},r.prototype._startIfPossible=function(){this.started?this._requestIfNeeded():this.autoStart&&this.start()},r.prototype.add=function(e,t,i){return i===void 0&&(i=$t.NORMAL),this._addListener(new Dr(e,t,i))},r.prototype.addOnce=function(e,t,i){return i===void 0&&(i=$t.NORMAL),this._addListener(new Dr(e,t,i,!0))},r.prototype._addListener=function(e){var t=this._head.next,i=this._head;if(!t)e.connect(i);else{for(;t;){if(e.priority>t.priority){e.connect(i);break}i=t,t=t.next}e.previous||e.connect(i)}return this._startIfPossible(),this},r.prototype.remove=function(e,t){for(var i=this._head.next;i;)i.match(e,t)?i=i.destroy():i=i.next;return this._head.next||this._cancelIfNeeded(),this},Object.defineProperty(r.prototype,"count",{get:function(){if(!this._head)return 0;for(var e=0,t=this._head;t=t.next;)e++;return e},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.started||(this.started=!0,this._requestIfNeeded())},r.prototype.stop=function(){this.started&&(this.started=!1,this._cancelIfNeeded())},r.prototype.destroy=function(){if(!this._protected){this.stop();for(var e=this._head.next;e;)e=e.destroy(!0);this._head.destroy(),this._head=null}},r.prototype.update=function(e){e===void 0&&(e=performance.now());var t;if(e>this.lastTime){if(t=this.elapsedMS=e-this.lastTime,t>this._maxElapsedMS&&(t=this._maxElapsedMS),t*=this.speed,this._minElapsedMS){var i=e-this._lastFrame|0;if(i<this._minElapsedMS)return;this._lastFrame=e-i%this._minElapsedMS}this.deltaMS=t,this.deltaTime=this.deltaMS*F.TARGET_FPMS;for(var n=this._head,s=n.next;s;)s=s.emit(this.deltaTime);n.next||this._cancelIfNeeded()}else this.deltaTime=this.deltaMS=this.elapsedMS=0;this.lastTime=e},Object.defineProperty(r.prototype,"FPS",{get:function(){return 1e3/this.elapsedMS},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"minFPS",{get:function(){return 1e3/this._maxElapsedMS},set:function(e){var t=Math.min(this.maxFPS,e),i=Math.min(Math.max(0,t)/1e3,F.TARGET_FPMS);this._maxElapsedMS=1/i},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"maxFPS",{get:function(){return this._minElapsedMS?Math.round(1e3/this._minElapsedMS):0},set:function(e){if(e===0)this._minElapsedMS=0;else{var t=Math.max(this.minFPS,e);this._minElapsedMS=1/(t/1e3)}},enumerable:!1,configurable:!0}),Object.defineProperty(r,"shared",{get:function(){if(!r._shared){var e=r._shared=new r;e.autoStart=!0,e._protected=!0}return r._shared},enumerable:!1,configurable:!0}),Object.defineProperty(r,"system",{get:function(){if(!r._system){var e=r._system=new r;e.autoStart=!0,e._protected=!0}return r._system},enumerable:!1,configurable:!0}),r}(),_f=function(){function r(){}return r.init=function(e){var t=this;e=Object.assign({autoStart:!0,sharedTicker:!1},e),Object.defineProperty(this,"ticker",{set:function(i){this._ticker&&this._ticker.remove(this.render,this),this._ticker=i,i&&i.add(this.render,this,$t.LOW)},get:function(){return this._ticker}}),this.stop=function(){t._ticker.stop()},this.start=function(){t._ticker.start()},this._ticker=null,this.ticker=e.sharedTicker?Tt.shared:new Tt,e.autoStart&&this.start()},r.destroy=function(){if(this._ticker){var e=this._ticker;this.ticker=null,e.destroy()}},r.extension=tt.Application,r}();F.PREFER_ENV=Vt.any?Qt.WEBGL:Qt.WEBGL2,F.STRICT_TEXTURE_CACHE=!1;var Fr=[];function As(r,e){if(!r)return null;var t="";if(typeof r=="string"){var i=/\.(\w{3,4})(?:$|\?|#)/i.exec(r);i&&(t=i[1].toLowerCase())}for(var n=Fr.length-1;n>=0;--n){var s=Fr[n];if(s.test&&s.test(r,t))return new s(r,e)}throw new Error("Unrecognized source type to auto-detect Resource")}var Nr=function(r,e){return Nr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Nr(r,e)};function it(r,e){Nr(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Br=function(){return Br=Object.assign||function(e){for(var t=arguments,i,n=1,s=arguments.length;n<s;n++){i=t[n];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a])}return e},Br.apply(this,arguments)};function mf(r,e){var t={};for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&e.indexOf(i)<0&&(t[i]=r[i]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,i=Object.getOwnPropertySymbols(r);n<i.length;n++)e.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(r,i[n])&&(t[i[n]]=r[i[n]]);return t}var ti=function(){function r(e,t){e===void 0&&(e=0),t===void 0&&(t=0),this._width=e,this._height=t,this.destroyed=!1,this.internal=!1,this.onResize=new Et("setRealSize"),this.onUpdate=new Et("update"),this.onError=new Et("onError")}return r.prototype.bind=function(e){this.onResize.add(e),this.onUpdate.add(e),this.onError.add(e),(this._width||this._height)&&this.onResize.emit(this._width,this._height)},r.prototype.unbind=function(e){this.onResize.remove(e),this.onUpdate.remove(e),this.onError.remove(e)},r.prototype.resize=function(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.onResize.emit(e,t))},Object.defineProperty(r.prototype,"valid",{get:function(){return!!this._width&&!!this._height},enumerable:!1,configurable:!0}),r.prototype.update=function(){this.destroyed||this.onUpdate.emit()},r.prototype.load=function(){return Promise.resolve(this)},Object.defineProperty(r.prototype,"width",{get:function(){return this._width},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"height",{get:function(){return this._height},enumerable:!1,configurable:!0}),r.prototype.style=function(e,t,i){return!1},r.prototype.dispose=function(){},r.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)},r.test=function(e,t){return!1},r}(),ei=function(r){it(e,r);function e(t,i){var n=this,s=i||{},a=s.width,o=s.height;if(!a||!o)throw new Error("BufferResource width or height invalid");return n=r.call(this,a,o)||this,n.data=t,n}return e.prototype.upload=function(t,i,n){var s=t.gl;s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Nt.UNPACK);var a=i.realWidth,o=i.realHeight;return n.width===a&&n.height===o?s.texSubImage2D(i.target,0,0,0,a,o,i.format,n.type,this.data):(n.width=a,n.height=o,s.texImage2D(i.target,0,n.internalFormat,a,o,0,i.format,n.type,this.data)),!0},e.prototype.dispose=function(){this.data=null},e.test=function(t){return t instanceof Float32Array||t instanceof Uint8Array||t instanceof Uint32Array},e}(ti),gf={scaleMode:jt.NEAREST,format:R.RGBA,alphaMode:Nt.NPM},V=function(r){it(e,r);function e(t,i){t===void 0&&(t=null),i===void 0&&(i=null);var n=r.call(this)||this;i=i||{};var s=i.alphaMode,a=i.mipmap,o=i.anisotropicLevel,h=i.scaleMode,u=i.width,l=i.height,f=i.wrapMode,c=i.format,d=i.type,p=i.target,v=i.resolution,_=i.resourceOptions;return t&&!(t instanceof ti)&&(t=As(t,_),t.internal=!0),n.resolution=v||F.RESOLUTION,n.width=Math.round((u||0)*n.resolution)/n.resolution,n.height=Math.round((l||0)*n.resolution)/n.resolution,n._mipmap=a!==void 0?a:F.MIPMAP_TEXTURES,n.anisotropicLevel=o!==void 0?o:F.ANISOTROPIC_LEVEL,n._wrapMode=f||F.WRAP_MODE,n._scaleMode=h!==void 0?h:F.SCALE_MODE,n.format=c||R.RGBA,n.type=d||L.UNSIGNED_BYTE,n.target=p||ge.TEXTURE_2D,n.alphaMode=s!==void 0?s:Nt.UNPACK,n.uid=xe(),n.touched=0,n.isPowerOfTwo=!1,n._refreshPOT(),n._glTextures={},n.dirtyId=0,n.dirtyStyleId=0,n.cacheId=null,n.valid=u>0&&l>0,n.textureCacheIds=[],n.destroyed=!1,n.resource=null,n._batchEnabled=0,n._batchLocation=0,n.parentTextureArray=null,n.setResource(t),n}return Object.defineProperty(e.prototype,"realWidth",{get:function(){return Math.round(this.width*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"realHeight",{get:function(){return Math.round(this.height*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mipmap",{get:function(){return this._mipmap},set:function(t){this._mipmap!==t&&(this._mipmap=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scaleMode",{get:function(){return this._scaleMode},set:function(t){this._scaleMode!==t&&(this._scaleMode=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wrapMode",{get:function(){return this._wrapMode},set:function(t){this._wrapMode!==t&&(this._wrapMode=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),e.prototype.setStyle=function(t,i){var n;return t!==void 0&&t!==this.scaleMode&&(this.scaleMode=t,n=!0),i!==void 0&&i!==this.mipmap&&(this.mipmap=i,n=!0),n&&this.dirtyStyleId++,this},e.prototype.setSize=function(t,i,n){return n=n||this.resolution,this.setRealSize(t*n,i*n,n)},e.prototype.setRealSize=function(t,i,n){return this.resolution=n||this.resolution,this.width=Math.round(t)/this.resolution,this.height=Math.round(i)/this.resolution,this._refreshPOT(),this.update(),this},e.prototype._refreshPOT=function(){this.isPowerOfTwo=Ts(this.realWidth)&&Ts(this.realHeight)},e.prototype.setResolution=function(t){var i=this.resolution;return i===t?this:(this.resolution=t,this.valid&&(this.width=Math.round(this.width*i)/t,this.height=Math.round(this.height*i)/t,this.emit("update",this)),this._refreshPOT(),this)},e.prototype.setResource=function(t){if(this.resource===t)return this;if(this.resource)throw new Error("Resource can be set only once");return t.bind(this),this.resource=t,this},e.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))},e.prototype.onError=function(t){this.emit("error",this,t)},e.prototype.destroy=function(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete be[this.cacheId],delete te[this.cacheId],this.cacheId=null),this.dispose(),e.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0},e.prototype.dispose=function(){this.emit("dispose",this)},e.prototype.castToBaseTexture=function(){return this},e.from=function(t,i,n){n===void 0&&(n=F.STRICT_TEXTURE_CACHE);var s=typeof t=="string",a=null;if(s)a=t;else{if(!t._pixiId){var o=i&&i.pixiIdPrefix||"pixiid";t._pixiId=o+"_"+xe()}a=t._pixiId}var h=be[a];if(s&&n&&!h)throw new Error('The cacheId "'+a+'" does not exist in BaseTextureCache.');return h||(h=new e(t,i),h.cacheId=a,e.addToCache(h,a)),h},e.fromBuffer=function(t,i,n,s){t=t||new Float32Array(i*n*4);var a=new ei(t,{width:i,height:n}),o=t instanceof Float32Array?L.FLOAT:L.UNSIGNED_BYTE;return new e(a,Object.assign({},gf,s||{width:i,height:n,type:o}))},e.addToCache=function(t,i){i&&(t.textureCacheIds.indexOf(i)===-1&&t.textureCacheIds.push(i),be[i]&&console.warn("BaseTexture added to the cache with an id ["+i+"] that already had an entry"),be[i]=t)},e.removeFromCache=function(t){if(typeof t=="string"){var i=be[t];if(i){var n=i.textureCacheIds.indexOf(t);return n>-1&&i.textureCacheIds.splice(n,1),delete be[t],i}}else if(t&&t.textureCacheIds){for(var s=0;s<t.textureCacheIds.length;++s)delete be[t.textureCacheIds[s]];return t.textureCacheIds.length=0,t}return null},e._globalBatch=0,e}(Ve),Is=function(r){it(e,r);function e(t,i){var n=this,s=i||{},a=s.width,o=s.height;n=r.call(this,a,o)||this,n.items=[],n.itemDirtyIds=[];for(var h=0;h<t;h++){var u=new V;n.items.push(u),n.itemDirtyIds.push(-2)}return n.length=t,n._load=null,n.baseTexture=null,n}return e.prototype.initFromArray=function(t,i){for(var n=0;n<this.length;n++)t[n]&&(t[n].castToBaseTexture?this.addBaseTextureAt(t[n].castToBaseTexture(),n):t[n]instanceof ti?this.addResourceAt(t[n],n):this.addResourceAt(As(t[n],i),n))},e.prototype.dispose=function(){for(var t=0,i=this.length;t<i;t++)this.items[t].destroy();this.items=null,this.itemDirtyIds=null,this._load=null},e.prototype.addResourceAt=function(t,i){if(!this.items[i])throw new Error("Index "+i+" is out of bounds");return t.valid&&!this.valid&&this.resize(t.width,t.height),this.items[i].setResource(t),this},e.prototype.bind=function(t){if(this.baseTexture!==null)throw new Error("Only one base texture per TextureArray is allowed");r.prototype.bind.call(this,t);for(var i=0;i<this.length;i++)this.items[i].parentTextureArray=t,this.items[i].on("update",t.update,t)},e.prototype.unbind=function(t){r.prototype.unbind.call(this,t);for(var i=0;i<this.length;i++)this.items[i].parentTextureArray=null,this.items[i].off("update",t.update,t)},e.prototype.load=function(){var t=this;if(this._load)return this._load;var i=this.items.map(function(s){return s.resource}).filter(function(s){return s}),n=i.map(function(s){return s.load()});return this._load=Promise.all(n).then(function(){var s=t.items[0],a=s.realWidth,o=s.realHeight;return t.resize(a,o),Promise.resolve(t)}),this._load},e}(ti),yf=function(r){it(e,r);function e(t,i){var n=this,s=i||{},a=s.width,o=s.height,h,u;return Array.isArray(t)?(h=t,u=t.length):u=t,n=r.call(this,u,{width:a,height:o})||this,h&&n.initFromArray(h,i),n}return e.prototype.addBaseTextureAt=function(t,i){if(t.resource)this.addResourceAt(t.resource,i);else throw new Error("ArrayResource does not support RenderTexture");return this},e.prototype.bind=function(t){r.prototype.bind.call(this,t),t.target=ge.TEXTURE_2D_ARRAY},e.prototype.upload=function(t,i,n){var s=this,a=s.length,o=s.itemDirtyIds,h=s.items,u=t.gl;n.dirtyId<0&&u.texImage3D(u.TEXTURE_2D_ARRAY,0,n.internalFormat,this._width,this._height,a,0,i.format,n.type,null);for(var l=0;l<a;l++){var f=h[l];o[l]<f.dirtyId&&(o[l]=f.dirtyId,f.valid&&u.texSubImage3D(u.TEXTURE_2D_ARRAY,0,0,0,l,f.resource.width,f.resource.height,1,i.format,n.type,f.resource.source))}return!0},e}(Is),se=function(r){it(e,r);function e(t){var i=this,n=t,s=n.naturalWidth||n.videoWidth||n.width,a=n.naturalHeight||n.videoHeight||n.height;return i=r.call(this,s,a)||this,i.source=t,i.noSubImage=!1,i}return e.crossOrigin=function(t,i,n){n===void 0&&i.indexOf("data:")!==0?t.crossOrigin=pf(i):n!==!1&&(t.crossOrigin=typeof n=="string"?n:"anonymous")},e.prototype.upload=function(t,i,n,s){var a=t.gl,o=i.realWidth,h=i.realHeight;if(s=s||this.source,s instanceof HTMLImageElement){if(!s.complete||s.naturalWidth===0)return!1}else if(s instanceof HTMLVideoElement&&s.readyState<=1)return!1;return a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Nt.UNPACK),!this.noSubImage&&i.target===a.TEXTURE_2D&&n.width===o&&n.height===h?a.texSubImage2D(a.TEXTURE_2D,0,0,0,i.format,n.type,s):(n.width=o,n.height=h,a.texImage2D(i.target,0,n.internalFormat,i.format,n.type,s)),!0},e.prototype.update=function(){if(!this.destroyed){var t=this.source,i=t.naturalWidth||t.videoWidth||t.width,n=t.naturalHeight||t.videoHeight||t.height;this.resize(i,n),r.prototype.update.call(this)}},e.prototype.dispose=function(){this.source=null},e}(ti),xf=function(r){it(e,r);function e(t){return r.call(this,t)||this}return e.test=function(t){var i=globalThis.OffscreenCanvas;return i&&t instanceof i?!0:globalThis.HTMLCanvasElement&&t instanceof HTMLCanvasElement},e}(se),bf=function(r){it(e,r);function e(t,i){var n=this,s=i||{},a=s.width,o=s.height,h=s.autoLoad,u=s.linkBaseTexture;if(t&&t.length!==e.SIDES)throw new Error("Invalid length. Got "+t.length+", expected 6");n=r.call(this,6,{width:a,height:o})||this;for(var l=0;l<e.SIDES;l++)n.items[l].target=ge.TEXTURE_CUBE_MAP_POSITIVE_X+l;return n.linkBaseTexture=u!==!1,t&&n.initFromArray(t,i),h!==!1&&n.load(),n}return e.prototype.bind=function(t){r.prototype.bind.call(this,t),t.target=ge.TEXTURE_CUBE_MAP},e.prototype.addBaseTextureAt=function(t,i,n){if(!this.items[i])throw new Error("Index "+i+" is out of bounds");if(!this.linkBaseTexture||t.parentTextureArray||Object.keys(t._glTextures).length>0)if(t.resource)this.addResourceAt(t.resource,i);else throw new Error("CubeResource does not support copying of renderTexture.");else t.target=ge.TEXTURE_CUBE_MAP_POSITIVE_X+i,t.parentTextureArray=this.baseTexture,this.items[i]=t;return t.valid&&!this.valid&&this.resize(t.realWidth,t.realHeight),this.items[i]=t,this},e.prototype.upload=function(t,i,n){for(var s=this.itemDirtyIds,a=0;a<e.SIDES;a++){var o=this.items[a];(s[a]<o.dirtyId||n.dirtyId<i.dirtyId)&&(o.valid&&o.resource?(o.resource.upload(t,o,n),s[a]=o.dirtyId):s[a]<-1&&(t.gl.texImage2D(o.target,0,n.internalFormat,i.realWidth,i.realHeight,0,i.format,n.type,null),s[a]=-1))}return!0},e.test=function(t){return Array.isArray(t)&&t.length===e.SIDES},e.SIDES=6,e}(Is),Os=function(r){it(e,r);function e(t,i){var n=this;if(i=i||{},!(t instanceof HTMLImageElement)){var s=new Image;se.crossOrigin(s,t,i.crossorigin),s.src=t,t=s}return n=r.call(this,t)||this,!t.complete&&n._width&&n._height&&(n._width=0,n._height=0),n.url=t.src,n._process=null,n.preserveBitmap=!1,n.createBitmap=(i.createBitmap!==void 0?i.createBitmap:F.CREATE_IMAGE_BITMAP)&&!!globalThis.createImageBitmap,n.alphaMode=typeof i.alphaMode=="number"?i.alphaMode:null,n.bitmap=null,n._load=null,i.autoLoad!==!1&&n.load(),n}return e.prototype.load=function(t){var i=this;return this._load?this._load:(t!==void 0&&(this.createBitmap=t),this._load=new Promise(function(n,s){var a=i.source;i.url=a.src;var o=function(){i.destroyed||(a.onload=null,a.onerror=null,i.resize(a.width,a.height),i._load=null,i.createBitmap?n(i.process()):n(i))};a.complete&&a.src?o():(a.onload=o,a.onerror=function(h){s(h),i.onError.emit(h)})}),this._load)},e.prototype.process=function(){var t=this,i=this.source;if(this._process!==null)return this._process;if(this.bitmap!==null||!globalThis.createImageBitmap)return Promise.resolve(this);var n=globalThis.createImageBitmap,s=!i.crossOrigin||i.crossOrigin==="anonymous";return this._process=fetch(i.src,{mode:s?"cors":"no-cors"}).then(function(a){return a.blob()}).then(function(a){return n(a,0,0,i.width,i.height,{premultiplyAlpha:t.alphaMode===null||t.alphaMode===Nt.UNPACK?"premultiply":"none"})}).then(function(a){return t.destroyed?Promise.reject():(t.bitmap=a,t.update(),t._process=null,Promise.resolve(t))}),this._process},e.prototype.upload=function(t,i,n){if(typeof this.alphaMode=="number"&&(i.alphaMode=this.alphaMode),!this.createBitmap)return r.prototype.upload.call(this,t,i,n);if(!this.bitmap&&(this.process(),!this.bitmap))return!1;if(r.prototype.upload.call(this,t,i,n,this.bitmap),!this.preserveBitmap){var s=!0,a=i._glTextures;for(var o in a){var h=a[o];if(h!==n&&h.dirtyId!==i.dirtyId){s=!1;break}}s&&(this.bitmap.close&&this.bitmap.close(),this.bitmap=null)}return!0},e.prototype.dispose=function(){this.source.onload=null,this.source.onerror=null,r.prototype.dispose.call(this),this.bitmap&&(this.bitmap.close(),this.bitmap=null),this._process=null,this._load=null},e.test=function(t){return typeof t=="string"||t instanceof HTMLImageElement},e}(se),Tf=function(r){it(e,r);function e(t,i){var n=this;return i=i||{},n=r.call(this,F.ADAPTER.createCanvas())||this,n._width=0,n._height=0,n.svg=t,n.scale=i.scale||1,n._overrideWidth=i.width,n._overrideHeight=i.height,n._resolve=null,n._crossorigin=i.crossorigin,n._load=null,i.autoLoad!==!1&&n.load(),n}return e.prototype.load=function(){var t=this;return this._load?this._load:(this._load=new Promise(function(i){if(t._resolve=function(){t.resize(t.source.width,t.source.height),i(t)},e.SVG_XML.test(t.svg.trim())){if(!btoa)throw new Error("Your browser doesn't support base64 conversions.");t.svg="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t.svg)))}t._loadSvg()}),this._load)},e.prototype._loadSvg=function(){var t=this,i=new Image;se.crossOrigin(i,this.svg,this._crossorigin),i.src=this.svg,i.onerror=function(n){t._resolve&&(i.onerror=null,t.onError.emit(n))},i.onload=function(){if(t._resolve){var n=i.width,s=i.height;if(!n||!s)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");var a=n*t.scale,o=s*t.scale;(t._overrideWidth||t._overrideHeight)&&(a=t._overrideWidth||t._overrideHeight/s*n,o=t._overrideHeight||t._overrideWidth/n*s),a=Math.round(a),o=Math.round(o);var h=t.source;h.width=a,h.height=o,h._pixiId="canvas_"+xe(),h.getContext("2d").drawImage(i,0,0,n,s,0,0,a,o),t._resolve(),t._resolve=null}}},e.getSize=function(t){var i=e.SVG_SIZE.exec(t),n={};return i&&(n[i[1]]=Math.round(parseFloat(i[3])),n[i[5]]=Math.round(parseFloat(i[7]))),n},e.prototype.dispose=function(){r.prototype.dispose.call(this),this._resolve=null,this._crossorigin=null},e.test=function(t,i){return i==="svg"||typeof t=="string"&&t.startsWith("data:image/svg+xml")||typeof t=="string"&&e.SVG_XML.test(t)},e.SVG_XML=/^(<\?xml[^?]+\?>)?\s*(<!--[^(-->)]*-->)?\s*\<svg/m,e.SVG_SIZE=/<svg[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i,e}(se),wf=function(r){it(e,r);function e(t,i){var n=this;if(i=i||{},!(t instanceof HTMLVideoElement)){var s=document.createElement("video");s.setAttribute("preload","auto"),s.setAttribute("webkit-playsinline",""),s.setAttribute("playsinline",""),typeof t=="string"&&(t=[t]);var a=t[0].src||t[0];se.crossOrigin(s,a,i.crossorigin);for(var o=0;o<t.length;++o){var h=document.createElement("source"),u=t[o],l=u.src,f=u.mime;l=l||t[o];var c=l.split("?").shift().toLowerCase(),d=c.slice(c.lastIndexOf(".")+1);f=f||e.MIME_TYPES[d]||"video/"+d,h.src=l,h.type=f,s.appendChild(h)}t=s}return n=r.call(this,t)||this,n.noSubImage=!0,n._autoUpdate=!0,n._isConnectedToTicker=!1,n._updateFPS=i.updateFPS||0,n._msToNextUpdate=0,n.autoPlay=i.autoPlay!==!1,n._load=null,n._resolve=null,n._onCanPlay=n._onCanPlay.bind(n),n._onError=n._onError.bind(n),i.autoLoad!==!1&&n.load(),n}return e.prototype.update=function(t){if(!this.destroyed){var i=Tt.shared.elapsedMS*this.source.playbackRate;this._msToNextUpdate=Math.floor(this._msToNextUpdate-i),(!this._updateFPS||this._msToNextUpdate<=0)&&(r.prototype.update.call(this),this._msToNextUpdate=this._updateFPS?Math.floor(1e3/this._updateFPS):0)}},e.prototype.load=function(){var t=this;if(this._load)return this._load;var i=this.source;return(i.readyState===i.HAVE_ENOUGH_DATA||i.readyState===i.HAVE_FUTURE_DATA)&&i.width&&i.height&&(i.complete=!0),i.addEventListener("play",this._onPlayStart.bind(this)),i.addEventListener("pause",this._onPlayStop.bind(this)),this._isSourceReady()?this._onCanPlay():(i.addEventListener("canplay",this._onCanPlay),i.addEventListener("canplaythrough",this._onCanPlay),i.addEventListener("error",this._onError,!0)),this._load=new Promise(function(n){t.valid?n(t):(t._resolve=n,i.load())}),this._load},e.prototype._onError=function(t){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(t)},e.prototype._isSourcePlaying=function(){var t=this.source;return!t.paused&&!t.ended&&this._isSourceReady()},e.prototype._isSourceReady=function(){var t=this.source;return t.readyState>2},e.prototype._onPlayStart=function(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&(Tt.shared.add(this.update,this),this._isConnectedToTicker=!0)},e.prototype._onPlayStop=function(){this._isConnectedToTicker&&(Tt.shared.remove(this.update,this),this._isConnectedToTicker=!1)},e.prototype._onCanPlay=function(){var t=this.source;t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay);var i=this.valid;this.resize(t.videoWidth,t.videoHeight),!i&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&t.play()},e.prototype.dispose=function(){this._isConnectedToTicker&&(Tt.shared.remove(this.update,this),this._isConnectedToTicker=!1);var t=this.source;t&&(t.removeEventListener("error",this._onError,!0),t.pause(),t.src="",t.load()),r.prototype.dispose.call(this)},Object.defineProperty(e.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?(Tt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&(Tt.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"updateFPS",{get:function(){return this._updateFPS},set:function(t){t!==this._updateFPS&&(this._updateFPS=t)},enumerable:!1,configurable:!0}),e.test=function(t,i){return globalThis.HTMLVideoElement&&t instanceof HTMLVideoElement||e.TYPES.indexOf(i)>-1},e.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],e.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},e}(se),Ef=function(r){it(e,r);function e(t){return r.call(this,t)||this}return e.test=function(t){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&t instanceof ImageBitmap},e}(se);Fr.push(Os,Ef,xf,wf,Tf,ei,bf,yf);var Sf=function(r){it(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.upload=function(t,i,n){var s=t.gl;s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===Nt.UNPACK);var a=i.realWidth,o=i.realHeight;return n.width===a&&n.height===o?s.texSubImage2D(i.target,0,0,0,a,o,i.format,n.type,this.data):(n.width=a,n.height=o,s.texImage2D(i.target,0,n.internalFormat,a,o,0,i.format,n.type,this.data)),!0},e}(ei),Lr=function(){function r(e,t){this.width=Math.round(e||100),this.height=Math.round(t||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 Et("disposeFramebuffer"),this.multisample=ft.NONE}return Object.defineProperty(r.prototype,"colorTexture",{get:function(){return this.colorTextures[0]},enumerable:!1,configurable:!0}),r.prototype.addColorTexture=function(e,t){return e===void 0&&(e=0),this.colorTextures[e]=t||new V(null,{scaleMode:jt.NEAREST,resolution:1,mipmap:Ft.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this},r.prototype.addDepthTexture=function(e){return this.depthTexture=e||new V(new Sf(null,{width:this.width,height:this.height}),{scaleMode:jt.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:Ft.OFF,format:R.DEPTH_COMPONENT,type:L.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this},r.prototype.enableDepth=function(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this},r.prototype.enableStencil=function(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this},r.prototype.resize=function(e,t){if(e=Math.round(e),t=Math.round(t),!(e===this.width&&t===this.height)){this.width=e,this.height=t,this.dirtyId++,this.dirtySize++;for(var i=0;i<this.colorTextures.length;i++){var n=this.colorTextures[i],s=n.resolution;n.setSize(e/s,t/s)}if(this.depthTexture){var s=this.depthTexture.resolution;this.depthTexture.setSize(e/s,t/s)}}},r.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},r.prototype.destroyDepthTexture=function(){this.depthTexture&&(this.depthTexture.destroy(),this.depthTexture=null,++this.dirtyId,++this.dirtyFormat)},r}(),Ms=function(r){it(e,r);function e(t){t===void 0&&(t={});var i=this;if(typeof t=="number"){var n=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3];t={width:n,height:s,scaleMode:a,resolution:o}}return t.width=t.width||100,t.height=t.height||100,t.multisample=t.multisample!==void 0?t.multisample:ft.NONE,i=r.call(this,null,t)||this,i.mipmap=Ft.OFF,i.valid=!0,i.clearColor=[0,0,0,0],i.framebuffer=new Lr(i.realWidth,i.realHeight).addColorTexture(0,i),i.framebuffer.multisample=t.multisample,i.maskStack=[],i.filterStack=[{}],i}return e.prototype.resize=function(t,i){this.framebuffer.resize(t*this.resolution,i*this.resolution),this.setRealSize(this.framebuffer.width,this.framebuffer.height)},e.prototype.dispose=function(){this.framebuffer.dispose(),r.prototype.dispose.call(this)},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.framebuffer.destroyDepthTexture(),this.framebuffer=null},e}(V),Ds=function(){function r(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.uvsFloat32=new Float32Array(8)}return r.prototype.set=function(e,t,i){var n=t.width,s=t.height;if(i){var a=e.width/2/n,o=e.height/2/s,h=e.x/n+a,u=e.y/s+o;i=ht.add(i,ht.NW),this.x0=h+a*ht.uX(i),this.y0=u+o*ht.uY(i),i=ht.add(i,2),this.x1=h+a*ht.uX(i),this.y1=u+o*ht.uY(i),i=ht.add(i,2),this.x2=h+a*ht.uX(i),this.y2=u+o*ht.uY(i),i=ht.add(i,2),this.x3=h+a*ht.uX(i),this.y3=u+o*ht.uY(i)}else this.x0=e.x/n,this.y0=e.y/s,this.x1=(e.x+e.width)/n,this.y1=e.y/s,this.x2=(e.x+e.width)/n,this.y2=(e.y+e.height)/s,this.x3=e.x/n,this.y3=(e.y+e.height)/s;this.uvsFloat32[0]=this.x0,this.uvsFloat32[1]=this.y0,this.uvsFloat32[2]=this.x1,this.uvsFloat32[3]=this.y1,this.uvsFloat32[4]=this.x2,this.uvsFloat32[5]=this.y2,this.uvsFloat32[6]=this.x3,this.uvsFloat32[7]=this.y3},r.prototype.toString=function(){return"[@pixi/core:TextureUvs "+("x0="+this.x0+" y0="+this.y0+" ")+("x1="+this.x1+" y1="+this.y1+" x2="+this.x2+" ")+("y2="+this.y2+" x3="+this.x3+" y3="+this.y3)+"]"},r}(),Fs=new Ds;function Ni(r){r.destroy=function(){},r.on=function(){},r.once=function(){},r.emit=function(){}}var k=function(r){it(e,r);function e(t,i,n,s,a,o){var h=r.call(this)||this;if(h.noFrame=!1,i||(h.noFrame=!0,i=new j(0,0,1,1)),t instanceof e&&(t=t.baseTexture),h.baseTexture=t,h._frame=i,h.trim=s,h.valid=!1,h._uvs=Fs,h.uvMatrix=null,h.orig=n||i,h._rotate=Number(a||0),a===!0)h._rotate=2;else if(h._rotate%2!==0)throw new Error("attempt to use diamond-shaped UVs. If you are sure, set rotation manually");return h.defaultAnchor=o?new X(o.x,o.y):new X(0,0),h._updateID=0,h.textureCacheIds=[],t.valid?h.noFrame?t.valid&&h.onBaseTextureUpdated(t):h.frame=i:t.once("loaded",h.onBaseTextureUpdated,h),h.noFrame&&t.on("update",h.onBaseTextureUpdated,h),h}return e.prototype.update=function(){this.baseTexture.resource&&this.baseTexture.resource.update()},e.prototype.onBaseTextureUpdated=function(t){if(this.noFrame){if(!this.baseTexture.valid)return;this._frame.width=t.width,this._frame.height=t.height,this.valid=!0,this.updateUvs()}else this.frame=this._frame;this.emit("update",this)},e.prototype.destroy=function(t){if(this.baseTexture){if(t){var i=this.baseTexture.resource;i&&i.url&&te[i.url]&&e.removeFromCache(i.url),this.baseTexture.destroy()}this.baseTexture.off("loaded",this.onBaseTextureUpdated,this),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture=null}this._frame=null,this._uvs=null,this.trim=null,this.orig=null,this.valid=!1,e.removeFromCache(this),this.textureCacheIds=null},e.prototype.clone=function(){var t=this._frame.clone(),i=this._frame===this.orig?t:this.orig.clone(),n=new e(this.baseTexture,!this.noFrame&&t,i,this.trim&&this.trim.clone(),this.rotate,this.defaultAnchor);return this.noFrame&&(n._frame=t),n},e.prototype.updateUvs=function(){this._uvs===Fs&&(this._uvs=new Ds),this._uvs.set(this._frame,this.baseTexture,this.rotate),this._updateID++},e.from=function(t,i,n){i===void 0&&(i={}),n===void 0&&(n=F.STRICT_TEXTURE_CACHE);var s=typeof t=="string",a=null;if(s)a=t;else if(t instanceof V){if(!t.cacheId){var o=i&&i.pixiIdPrefix||"pixiid";t.cacheId=o+"-"+xe(),V.addToCache(t,t.cacheId)}a=t.cacheId}else{if(!t._pixiId){var o=i&&i.pixiIdPrefix||"pixiid";t._pixiId=o+"_"+xe()}a=t._pixiId}var h=te[a];if(s&&n&&!h)throw new Error('The cacheId "'+a+'" does not exist in TextureCache.');return!h&&!(t instanceof V)?(i.resolution||(i.resolution=Di(t)),h=new e(new V(t,i)),h.baseTexture.cacheId=a,V.addToCache(h.baseTexture,a),e.addToCache(h,a)):!h&&t instanceof V&&(h=new e(t),e.addToCache(h,a)),h},e.fromURL=function(t,i){var n=Object.assign({autoLoad:!1},i==null?void 0:i.resourceOptions),s=e.from(t,Object.assign({resourceOptions:n},i),!1),a=s.baseTexture.resource;return s.baseTexture.valid?Promise.resolve(s):a.load().then(function(){return Promise.resolve(s)})},e.fromBuffer=function(t,i,n,s){return new e(V.fromBuffer(t,i,n,s))},e.fromLoader=function(t,i,n,s){var a=new V(t,Object.assign({scaleMode:F.SCALE_MODE,resolution:Di(i)},s)),o=a.resource;o instanceof Os&&(o.url=i);var h=new e(a);return n||(n=i),V.addToCache(h.baseTexture,n),e.addToCache(h,n),n!==i&&(V.addToCache(h.baseTexture,i),e.addToCache(h,i)),h.baseTexture.valid?Promise.resolve(h):new Promise(function(u){h.baseTexture.once("loaded",function(){return u(h)})})},e.addToCache=function(t,i){i&&(t.textureCacheIds.indexOf(i)===-1&&t.textureCacheIds.push(i),te[i]&&console.warn("Texture added to the cache with an id ["+i+"] that already had an entry"),te[i]=t)},e.removeFromCache=function(t){if(typeof t=="string"){var i=te[t];if(i){var n=i.textureCacheIds.indexOf(t);return n>-1&&i.textureCacheIds.splice(n,1),delete te[t],i}}else if(t&&t.textureCacheIds){for(var s=0;s<t.textureCacheIds.length;++s)te[t.textureCacheIds[s]]===t&&delete te[t.textureCacheIds[s]];return t.textureCacheIds.length=0,t}return null},Object.defineProperty(e.prototype,"resolution",{get:function(){return this.baseTexture.resolution},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"frame",{get:function(){return this._frame},set:function(t){this._frame=t,this.noFrame=!1;var i=t.x,n=t.y,s=t.width,a=t.height,o=i+s>this.baseTexture.width,h=n+a>this.baseTexture.height;if(o||h){var u=o&&h?"and":"or",l="X: "+i+" + "+s+" = "+(i+s)+" > "+this.baseTexture.width,f="Y: "+n+" + "+a+" = "+(n+a)+" > "+this.baseTexture.height;throw new Error("Texture Error: frame does not fit inside the base Texture dimensions: "+(l+" "+u+" "+f))}this.valid=s&&a&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=t),this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rotate",{get:function(){return this._rotate},set:function(t){this._rotate=t,this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"width",{get:function(){return this.orig.width},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.orig.height},enumerable:!1,configurable:!0}),e.prototype.castToBaseTexture=function(){return this.baseTexture},Object.defineProperty(e,"EMPTY",{get:function(){return e._EMPTY||(e._EMPTY=new e(new V),Ni(e._EMPTY),Ni(e._EMPTY.baseTexture)),e._EMPTY},enumerable:!1,configurable:!0}),Object.defineProperty(e,"WHITE",{get:function(){if(!e._WHITE){var t=F.ADAPTER.createCanvas(16,16),i=t.getContext("2d");t.width=16,t.height=16,i.fillStyle="white",i.fillRect(0,0,16,16),e._WHITE=new e(V.from(t)),Ni(e._WHITE),Ni(e._WHITE.baseTexture)}return e._WHITE},enumerable:!1,configurable:!0}),e}(Ve),Te=function(r){it(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.valid=!0,n.filterFrame=null,n.filterPoolKey=null,n.updateUvs(),n}return Object.defineProperty(e.prototype,"framebuffer",{get:function(){return this.baseTexture.framebuffer},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"multisample",{get:function(){return this.framebuffer.multisample},set:function(t){this.framebuffer.multisample=t},enumerable:!1,configurable:!0}),e.prototype.resize=function(t,i,n){n===void 0&&(n=!0);var s=this.baseTexture.resolution,a=Math.round(t*s)/s,o=Math.round(i*s)/s;this.valid=a>0&&o>0,this._frame.width=this.orig.width=a,this._frame.height=this.orig.height=o,n&&this.baseTexture.resize(a,o),this.updateUvs()},e.prototype.setResolution=function(t){var i=this.baseTexture;i.resolution!==t&&(i.setResolution(t),this.resize(i.width,i.height,!1))},e.create=function(t){for(var i=arguments,n=[],s=1;s<arguments.length;s++)n[s-1]=i[s];return typeof t=="number"&&(Ut("6.0.0","Arguments (width, height, scaleMode, resolution) have been deprecated."),t={width:t,height:n[0],scaleMode:n[1],resolution:n[2]}),new e(new Ms(t))},e}(k),Pf=function(){function r(e){this.texturePool={},this.textureOptions=e||{},this.enableFullScreen=!1,this._pixelsWidth=0,this._pixelsHeight=0}return r.prototype.createTexture=function(e,t,i){i===void 0&&(i=ft.NONE);var n=new Ms(Object.assign({width:e,height:t,resolution:1,multisample:i},this.textureOptions));return new Te(n)},r.prototype.getOptimalTexture=function(e,t,i,n){i===void 0&&(i=1),n===void 0&&(n=ft.NONE);var s;e=Math.ceil(e*i-1e-6),t=Math.ceil(t*i-1e-6),!this.enableFullScreen||e!==this._pixelsWidth||t!==this._pixelsHeight?(e=Oi(e),t=Oi(t),s=((e&65535)<<16|t&65535)>>>0,n>1&&(s+=n*4294967296)):s=n>1?-n:-1,this.texturePool[s]||(this.texturePool[s]=[]);var a=this.texturePool[s].pop();return a||(a=this.createTexture(e,t,n)),a.filterPoolKey=s,a.setResolution(i),a},r.prototype.getFilterTexture=function(e,t,i){var n=this.getOptimalTexture(e.width,e.height,t||e.resolution,i||ft.NONE);return n.filterFrame=e.filterFrame,n},r.prototype.returnTexture=function(e){var t=e.filterPoolKey;e.filterFrame=null,this.texturePool[t].push(e)},r.prototype.returnFilterTexture=function(e){this.returnTexture(e)},r.prototype.clear=function(e){if(e=e!==!1,e)for(var t in this.texturePool){var i=this.texturePool[t];if(i)for(var n=0;n<i.length;n++)i[n].destroy(!0)}this.texturePool={}},r.prototype.setScreenSize=function(e){if(!(e.width===this._pixelsWidth&&e.height===this._pixelsHeight)){this.enableFullScreen=e.width>0&&e.height>0;for(var t in this.texturePool)if(Number(t)<0){var i=this.texturePool[t];if(i)for(var n=0;n<i.length;n++)i[n].destroy(!0);this.texturePool[t]=[]}this._pixelsWidth=e.width,this._pixelsHeight=e.height}},r.SCREEN_KEY=-1,r}(),Ns=function(){function r(e,t,i,n,s,a,o){t===void 0&&(t=0),i===void 0&&(i=!1),n===void 0&&(n=L.FLOAT),this.buffer=e,this.size=t,this.normalized=i,this.type=n,this.stride=s,this.start=a,this.instance=o}return r.prototype.destroy=function(){this.buffer=null},r.from=function(e,t,i,n,s){return new r(e,t,i,n,s)},r}(),Rf=0,yt=function(){function r(e,t,i){t===void 0&&(t=!0),i===void 0&&(i=!1),this.data=e||new Float32Array(1),this._glBuffers={},this._updateID=0,this.index=i,this.static=t,this.id=Rf++,this.disposeRunner=new Et("disposeBuffer")}return r.prototype.update=function(e){e instanceof Array&&(e=new Float32Array(e)),this.data=e||this.data,this._updateID++},r.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},r.prototype.destroy=function(){this.dispose(),this.data=null},Object.defineProperty(r.prototype,"index",{get:function(){return this.type===Yt.ELEMENT_ARRAY_BUFFER},set:function(e){this.type=e?Yt.ELEMENT_ARRAY_BUFFER:Yt.ARRAY_BUFFER},enumerable:!1,configurable:!0}),r.from=function(e){return e instanceof Array&&(e=new Float32Array(e)),new r(e)},r}(),Cf={Float32Array,Uint32Array,Int32Array,Uint8Array};function Af(r,e){for(var t=0,i=0,n={},s=0;s<r.length;s++)i+=e[s],t+=r[s].length;for(var a=new ArrayBuffer(t*4),o=null,h=0,s=0;s<r.length;s++){var u=e[s],l=r[s],f=bs(l);n[f]||(n[f]=new Cf[f](a)),o=n[f];for(var c=0;c<l.length;c++){var d=(c/u|0)*i+h,p=c%u;o[d+p]=l[c]}h+=u}return new Float32Array(a)}var Bs={5126:4,5123:2,5121:1},If=0,Of={Float32Array,Uint32Array,Int32Array,Uint8Array,Uint16Array},ii=function(){function r(e,t){e===void 0&&(e=[]),t===void 0&&(t={}),this.buffers=e,this.indexBuffer=null,this.attributes=t,this.glVertexArrayObjects={},this.id=If++,this.instanced=!1,this.instanceCount=1,this.disposeRunner=new Et("disposeGeometry"),this.refCount=0}return r.prototype.addAttribute=function(e,t,i,n,s,a,o,h){if(i===void 0&&(i=0),n===void 0&&(n=!1),h===void 0&&(h=!1),!t)throw new Error("You must pass a buffer when creating an attribute");t instanceof yt||(t instanceof Array&&(t=new Float32Array(t)),t=new yt(t));var u=e.split("|");if(u.length>1){for(var l=0;l<u.length;l++)this.addAttribute(u[l],t,i,n,s);return this}var f=this.buffers.indexOf(t);return f===-1&&(this.buffers.push(t),f=this.buffers.length-1),this.attributes[e]=new Ns(f,i,n,s,a,o,h),this.instanced=this.instanced||h,this},r.prototype.getAttribute=function(e){return this.attributes[e]},r.prototype.getBuffer=function(e){return this.buffers[this.getAttribute(e).buffer]},r.prototype.addIndex=function(e){return e instanceof yt||(e instanceof Array&&(e=new Uint16Array(e)),e=new yt(e)),e.type=Yt.ELEMENT_ARRAY_BUFFER,this.indexBuffer=e,this.buffers.indexOf(e)===-1&&this.buffers.push(e),this},r.prototype.getIndex=function(){return this.indexBuffer},r.prototype.interleave=function(){if(this.buffers.length===1||this.buffers.length===2&&this.indexBuffer)return this;var e=[],t=[],i=new yt,n;for(n in this.attributes){var s=this.attributes[n],a=this.buffers[s.buffer];e.push(a.data),t.push(s.size*Bs[s.type]/4),s.buffer=0}for(i.data=Af(e,t),n=0;n<this.buffers.length;n++)this.buffers[n]!==this.indexBuffer&&this.buffers[n].destroy();return this.buffers=[i],this.indexBuffer&&this.buffers.push(this.indexBuffer),this},r.prototype.getSize=function(){for(var e in this.attributes){var t=this.attributes[e],i=this.buffers[t.buffer];return i.data.length/(t.stride/4||t.size)}return 0},r.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},r.prototype.destroy=function(){this.dispose(),this.buffers=null,this.indexBuffer=null,this.attributes=null},r.prototype.clone=function(){for(var e=new r,t=0;t<this.buffers.length;t++)e.buffers[t]=new yt(this.buffers[t].data.slice(0));for(var t in this.attributes){var i=this.attributes[t];e.attributes[t]=new Ns(i.buffer,i.size,i.normalized,i.type,i.stride,i.start,i.instance)}return this.indexBuffer&&(e.indexBuffer=e.buffers[this.buffers.indexOf(this.indexBuffer)],e.indexBuffer.type=Yt.ELEMENT_ARRAY_BUFFER),e},r.merge=function(e){for(var t=new r,i=[],n=[],s=[],a,o=0;o<e.length;o++){a=e[o];for(var h=0;h<a.buffers.length;h++)n[h]=n[h]||0,n[h]+=a.buffers[h].data.length,s[h]=0}for(var o=0;o<a.buffers.length;o++)i[o]=new Of[bs(a.buffers[o].data)](n[o]),t.buffers[o]=new yt(i[o]);for(var o=0;o<e.length;o++){a=e[o];for(var h=0;h<a.buffers.length;h++)i[h].set(a.buffers[h].data,s[h]),s[h]+=a.buffers[h].data.length}if(t.attributes=a.attributes,a.indexBuffer){t.indexBuffer=t.buffers[a.buffers.indexOf(a.indexBuffer)],t.indexBuffer.type=Yt.ELEMENT_ARRAY_BUFFER;for(var u=0,l=0,f=0,c=0,o=0;o<a.buffers.length;o++)if(a.buffers[o]!==a.indexBuffer){c=o;break}for(var o in a.attributes){var d=a.attributes[o];(d.buffer|0)===c&&(l+=d.size*Bs[d.type]/4)}for(var o=0;o<e.length;o++){for(var p=e[o].indexBuffer.data,h=0;h<p.length;h++)t.indexBuffer.data[h+f]+=u;u+=e[o].buffers[c].data.length/l,f+=p.length}}return t},r}(),Mf=function(r){it(e,r);function e(){var t=r.call(this)||this;return t.addAttribute("aVertexPosition",new Float32Array([0,0,1,0,1,1,0,1])).addIndex([0,1,3,2]),t}return e}(ii),Ls=function(r){it(e,r);function e(){var t=r.call(this)||this;return t.vertices=new Float32Array([-1,-1,1,-1,1,1,-1,1]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.vertexBuffer=new yt(t.vertices),t.uvBuffer=new yt(t.uvs),t.addAttribute("aVertexPosition",t.vertexBuffer).addAttribute("aTextureCoord",t.uvBuffer).addIndex([0,1,2,0,2,3]),t}return e.prototype.map=function(t,i){var n=0,s=0;return this.uvs[0]=n,this.uvs[1]=s,this.uvs[2]=n+i.width/t.width,this.uvs[3]=s,this.uvs[4]=n+i.width/t.width,this.uvs[5]=s+i.height/t.height,this.uvs[6]=n,this.uvs[7]=s+i.height/t.height,n=i.x,s=i.y,this.vertices[0]=n,this.vertices[1]=s,this.vertices[2]=n+i.width,this.vertices[3]=s,this.vertices[4]=n+i.width,this.vertices[5]=s+i.height,this.vertices[6]=n,this.vertices[7]=s+i.height,this.invalidate(),this},e.prototype.invalidate=function(){return this.vertexBuffer._updateID++,this.uvBuffer._updateID++,this},e}(ii),Df=0,we=function(){function r(e,t,i){this.group=!0,this.syncUniforms={},this.dirtyId=0,this.id=Df++,this.static=!!t,this.ubo=!!i,e instanceof yt?(this.buffer=e,this.buffer.type=Yt.UNIFORM_BUFFER,this.autoManage=!1,this.ubo=!0):(this.uniforms=e,this.ubo&&(this.buffer=new yt(new Float32Array(1)),this.buffer.type=Yt.UNIFORM_BUFFER,this.autoManage=!0))}return r.prototype.update=function(){this.dirtyId++,!this.autoManage&&this.buffer&&this.buffer.update()},r.prototype.add=function(e,t,i){if(!this.ubo)this.uniforms[e]=new r(t,i);else throw new Error("[UniformGroup] uniform groups in ubo mode cannot be modified, or have uniform groups nested in them")},r.from=function(e,t,i){return new r(e,t,i)},r.uboFrom=function(e,t){return new r(e,t??!0,!0)},r}(),Ff=function(){function r(){this.renderTexture=null,this.target=null,this.legacy=!1,this.resolution=1,this.multisample=ft.NONE,this.sourceFrame=new j,this.destinationFrame=new j,this.bindingSourceFrame=new j,this.bindingDestinationFrame=new j,this.filters=[],this.transform=null}return r.prototype.clear=function(){this.target=null,this.filters=null,this.renderTexture=null},r}(),Bi=[new X,new X,new X,new X],Ur=new gt,Nf=function(){function r(e){this.renderer=e,this.defaultFilterStack=[{}],this.texturePool=new Pf,this.texturePool.setScreenSize(e.view),this.statePool=[],this.quad=new Mf,this.quadUv=new Ls,this.tempRect=new j,this.activeState={},this.globalUniforms=new we({outputFrame:new j,inputSize:new Float32Array(4),inputPixel:new Float32Array(4),inputClamp:new Float32Array(4),resolution:1,filterArea:new Float32Array(4),filterClamp:new Float32Array(4)},!0),this.forceClear=!1,this.useMaxPadding=!1}return r.prototype.push=function(e,t){for(var i,n,s=this.renderer,a=this.defaultFilterStack,o=this.statePool.pop()||new Ff,h=this.renderer.renderTexture,u=t[0].resolution,l=t[0].multisample,f=t[0].padding,c=t[0].autoFit,d=(i=t[0].legacy)!==null&&i!==void 0?i:!0,p=1;p<t.length;p++){var v=t[p];u=Math.min(u,v.resolution),l=Math.min(l,v.multisample),f=this.useMaxPadding?Math.max(f,v.padding):f+v.padding,c=c&&v.autoFit,d=d||((n=v.legacy)!==null&&n!==void 0?n:!0)}a.length===1&&(this.defaultFilterStack[0].renderTexture=h.current),a.push(o),o.resolution=u,o.multisample=l,o.legacy=d,o.target=e,o.sourceFrame.copyFrom(e.filterArea||e.getBounds(!0)),o.sourceFrame.pad(f);var _=this.tempRect.copyFrom(h.sourceFrame);s.projection.transform&&this.transformAABB(Ur.copyFrom(s.projection.transform).invert(),_),c?(o.sourceFrame.fit(_),(o.sourceFrame.width<=0||o.sourceFrame.height<=0)&&(o.sourceFrame.width=0,o.sourceFrame.height=0)):o.sourceFrame.intersects(_)||(o.sourceFrame.width=0,o.sourceFrame.height=0),this.roundFrame(o.sourceFrame,h.current?h.current.resolution:s.resolution,h.sourceFrame,h.destinationFrame,s.projection.transform),o.renderTexture=this.getOptimalFilterTexture(o.sourceFrame.width,o.sourceFrame.height,u,l),o.filters=t,o.destinationFrame.width=o.renderTexture.width,o.destinationFrame.height=o.renderTexture.height;var m=this.tempRect;m.x=0,m.y=0,m.width=o.sourceFrame.width,m.height=o.sourceFrame.height,o.renderTexture.filterFrame=o.sourceFrame,o.bindingSourceFrame.copyFrom(h.sourceFrame),o.bindingDestinationFrame.copyFrom(h.destinationFrame),o.transform=s.projection.transform,s.projection.transform=null,h.bind(o.renderTexture,o.sourceFrame,m),s.framebuffer.clear(0,0,0,0)},r.prototype.pop=function(){var e=this.defaultFilterStack,t=e.pop(),i=t.filters;this.activeState=t;var n=this.globalUniforms.uniforms;n.outputFrame=t.sourceFrame,n.resolution=t.resolution;var s=n.inputSize,a=n.inputPixel,o=n.inputClamp;if(s[0]=t.destinationFrame.width,s[1]=t.destinationFrame.height,s[2]=1/s[0],s[3]=1/s[1],a[0]=Math.round(s[0]*t.resolution),a[1]=Math.round(s[1]*t.resolution),a[2]=1/a[0],a[3]=1/a[1],o[0]=.5*a[2],o[1]=.5*a[3],o[2]=t.sourceFrame.width*s[2]-.5*a[2],o[3]=t.sourceFrame.height*s[3]-.5*a[3],t.legacy){var h=n.filterArea;h[0]=t.destinationFrame.width,h[1]=t.destinationFrame.height,h[2]=t.sourceFrame.x,h[3]=t.sourceFrame.y,n.filterClamp=n.inputClamp}this.globalUniforms.update();var u=e[e.length-1];if(this.renderer.framebuffer.blit(),i.length===1)i[0].apply(this,t.renderTexture,u.renderTexture,Bt.BLEND,t),this.returnFilterTexture(t.renderTexture);else{var l=t.renderTexture,f=this.getOptimalFilterTexture(l.width,l.height,t.resolution);f.filterFrame=l.filterFrame;var c=0;for(c=0;c<i.length-1;++c){c===1&&t.multisample>1&&(f=this.getOptimalFilterTexture(l.width,l.height,t.resolution),f.filterFrame=l.filterFrame),i[c].apply(this,l,f,Bt.CLEAR,t);var d=l;l=f,f=d}i[c].apply(this,l,u.renderTexture,Bt.BLEND,t),c>1&&t.multisample>1&&this.returnFilterTexture(t.renderTexture),this.returnFilterTexture(l),this.returnFilterTexture(f)}t.clear(),this.statePool.push(t)},r.prototype.bindAndClear=function(e,t){t===void 0&&(t=Bt.CLEAR);var i=this.renderer,n=i.renderTexture,s=i.state;if(e===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,e&&e.filterFrame){var a=this.tempRect;a.x=0,a.y=0,a.width=e.filterFrame.width,a.height=e.filterFrame.height,n.bind(e,e.filterFrame,a)}else e!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?n.bind(e):this.renderer.renderTexture.bind(e,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);var o=s.stateId&1||this.forceClear;(t===Bt.CLEAR||t===Bt.BLIT&&o)&&this.renderer.framebuffer.clear(0,0,0,0)},r.prototype.applyFilter=function(e,t,i,n){var s=this.renderer;s.state.set(e.state),this.bindAndClear(i,n),e.uniforms.uSampler=t,e.uniforms.filterGlobals=this.globalUniforms,s.shader.bind(e),e.legacy=!!e.program.attributeData.aTextureCoord,e.legacy?(this.quadUv.map(t._frame,t.filterFrame),s.geometry.bind(this.quadUv),s.geometry.draw(Dt.TRIANGLES)):(s.geometry.bind(this.quad),s.geometry.draw(Dt.TRIANGLE_STRIP))},r.prototype.calculateSpriteMatrix=function(e,t){var i=this.activeState,n=i.sourceFrame,s=i.destinationFrame,a=t._texture.orig,o=e.set(s.width,0,0,s.height,n.x,n.y),h=t.worldTransform.copyTo(gt.TEMP_MATRIX);return h.invert(),o.prepend(h),o.scale(1/a.width,1/a.height),o.translate(t.anchor.x,t.anchor.y),o},r.prototype.destroy=function(){this.renderer=null,this.texturePool.clear(!1)},r.prototype.getOptimalFilterTexture=function(e,t,i,n){return i===void 0&&(i=1),n===void 0&&(n=ft.NONE),this.texturePool.getOptimalTexture(e,t,i,n)},r.prototype.getFilterTexture=function(e,t,i){if(typeof e=="number"){var n=e;e=t,t=n}e=e||this.activeState.renderTexture;var s=this.texturePool.getOptimalTexture(e.width,e.height,t||e.resolution,i||ft.NONE);return s.filterFrame=e.filterFrame,s},r.prototype.returnFilterTexture=function(e){this.texturePool.returnTexture(e)},r.prototype.emptyPool=function(){this.texturePool.clear(!0)},r.prototype.resize=function(){this.texturePool.setScreenSize(this.renderer.view)},r.prototype.transformAABB=function(e,t){var i=Bi[0],n=Bi[1],s=Bi[2],a=Bi[3];i.set(t.left,t.top),n.set(t.left,t.bottom),s.set(t.right,t.top),a.set(t.right,t.bottom),e.apply(i,i),e.apply(n,n),e.apply(s,s),e.apply(a,a);var o=Math.min(i.x,n.x,s.x,a.x),h=Math.min(i.y,n.y,s.y,a.y),u=Math.max(i.x,n.x,s.x,a.x),l=Math.max(i.y,n.y,s.y,a.y);t.x=o,t.y=h,t.width=u-o,t.height=l-h},r.prototype.roundFrame=function(e,t,i,n,s){if(!(e.width<=0||e.height<=0||i.width<=0||i.height<=0)){if(s){var a=s.a,o=s.b,h=s.c,u=s.d;if((Math.abs(o)>1e-4||Math.abs(h)>1e-4)&&(Math.abs(a)>1e-4||Math.abs(u)>1e-4))return}s=s?Ur.copyFrom(s):Ur.identity(),s.translate(-i.x,-i.y).scale(n.width/i.width,n.height/i.height).translate(n.x,n.y),this.transformAABB(s,e),e.ceil(t),this.transformAABB(s.invert(),e)}},r}(),Li=function(){function r(e){this.renderer=e}return r.prototype.flush=function(){},r.prototype.destroy=function(){this.renderer=null},r.prototype.start=function(){},r.prototype.stop=function(){this.flush()},r.prototype.render=function(e){},r}(),Bf=function(){function r(e){this.renderer=e,this.emptyRenderer=new Li(e),this.currentRenderer=this.emptyRenderer}return r.prototype.setObjectRenderer=function(e){this.currentRenderer!==e&&(this.currentRenderer.stop(),this.currentRenderer=e,this.currentRenderer.start())},r.prototype.flush=function(){this.setObjectRenderer(this.emptyRenderer)},r.prototype.reset=function(){this.setObjectRenderer(this.emptyRenderer)},r.prototype.copyBoundTextures=function(e,t){for(var i=this.renderer.texture.boundTextures,n=t-1;n>=0;--n)e[n]=i[n]||null,e[n]&&(e[n]._batchLocation=n)},r.prototype.boundArray=function(e,t,i,n){for(var s=e.elements,a=e.ids,o=e.count,h=0,u=0;u<o;u++){var l=s[u],f=l._batchLocation;if(f>=0&&f<n&&t[f]===l){a[u]=f;continue}for(;h<n;){var c=t[h];if(c&&c._batchEnabled===i&&c._batchLocation===h){h++;continue}a[u]=h,l._batchLocation=h,t[h]=l;break}}},r.prototype.destroy=function(){this.renderer=null},r}(),Us=0,Lf=function(){function r(e){this.renderer=e,this.webGLVersion=1,this.extensions={},this.supports={uint32Indices:!1},this.handleContextLost=this.handleContextLost.bind(this),this.handleContextRestored=this.handleContextRestored.bind(this),e.view.addEventListener("webglcontextlost",this.handleContextLost,!1),e.view.addEventListener("webglcontextrestored",this.handleContextRestored,!1)}return Object.defineProperty(r.prototype,"isLost",{get:function(){return!this.gl||this.gl.isContextLost()},enumerable:!1,configurable:!0}),r.prototype.contextChange=function(e){this.gl=e,this.renderer.gl=e,this.renderer.CONTEXT_UID=Us++,e.isContextLost()&&e.getExtension("WEBGL_lose_context")&&e.getExtension("WEBGL_lose_context").restoreContext()},r.prototype.initFromContext=function(e){this.gl=e,this.validateContext(e),this.renderer.gl=e,this.renderer.CONTEXT_UID=Us++,this.renderer.runners.contextChange.emit(e)},r.prototype.initFromOptions=function(e){var t=this.createContext(this.renderer.view,e);this.initFromContext(t)},r.prototype.createContext=function(e,t){var i;if(F.PREFER_ENV>=Qt.WEBGL2&&(i=e.getContext("webgl2",t)),i)this.webGLVersion=2;else if(this.webGLVersion=1,i=e.getContext("webgl",t)||e.getContext("experimental-webgl",t),!i)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=i,this.getExtensions(),this.gl},r.prototype.getExtensions=function(){var e=this.gl,t={anisotropicFiltering:e.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:e.getExtension("OES_texture_float_linear"),s3tc:e.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:e.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:e.getExtension("WEBGL_compressed_texture_etc"),etc1:e.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:e.getExtension("WEBGL_compressed_texture_atc"),astc:e.getExtension("WEBGL_compressed_texture_astc")};this.webGLVersion===1?Object.assign(this.extensions,t,{drawBuffers:e.getExtension("WEBGL_draw_buffers"),depthTexture:e.getExtension("WEBGL_depth_texture"),loseContext:e.getExtension("WEBGL_lose_context"),vertexArrayObject:e.getExtension("OES_vertex_array_object")||e.getExtension("MOZ_OES_vertex_array_object")||e.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:e.getExtension("OES_element_index_uint"),floatTexture:e.getExtension("OES_texture_float"),floatTextureLinear:e.getExtension("OES_texture_float_linear"),textureHalfFloat:e.getExtension("OES_texture_half_float"),textureHalfFloatLinear:e.getExtension("OES_texture_half_float_linear")}):this.webGLVersion===2&&Object.assign(this.extensions,t,{colorBufferFloat:e.getExtension("EXT_color_buffer_float")})},r.prototype.handleContextLost=function(e){e.preventDefault()},r.prototype.handleContextRestored=function(){this.renderer.runners.contextChange.emit(this.gl)},r.prototype.destroy=function(){var e=this.renderer.view;this.renderer=null,e.removeEventListener("webglcontextlost",this.handleContextLost),e.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()},r.prototype.postrender=function(){this.renderer.renderingToScreen&&this.gl.flush()},r.prototype.validateContext=function(e){var t=e.getContextAttributes(),i="WebGL2RenderingContext"in globalThis&&e instanceof globalThis.WebGL2RenderingContext;i&&(this.webGLVersion=2),t&&!t.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");var n=i||!!e.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")},r}(),Uf=function(){function r(e){this.framebuffer=e,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=ft.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}return r}(),Gf=new j,kf=function(){function r(e){this.renderer=e,this.managedFramebuffers=[],this.unknownFramebuffer=new Lr(10,10),this.msaaSamples=null}return r.prototype.contextChange=function(){var e=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new j,this.hasMRT=!0,this.writeDepthTexture=!0,this.disposeAll(!0),this.renderer.context.webGLVersion===1){var t=this.renderer.context.extensions.drawBuffers,i=this.renderer.context.extensions.depthTexture;F.PREFER_ENV===Qt.WEBGL_LEGACY&&(t=null,i=null),t?e.drawBuffers=function(n){return t.drawBuffersWEBGL(n)}:(this.hasMRT=!1,e.drawBuffers=function(){}),i||(this.writeDepthTexture=!1)}else this.msaaSamples=e.getInternalformatParameter(e.RENDERBUFFER,e.RGBA8,e.SAMPLES)},r.prototype.bind=function(e,t,i){i===void 0&&(i=0);var n=this.gl;if(e){var s=e.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(e);this.current!==e&&(this.current=e,n.bindFramebuffer(n.FRAMEBUFFER,s.framebuffer)),s.mipLevel!==i&&(e.dirtyId++,e.dirtyFormat++,s.mipLevel=i),s.dirtyId!==e.dirtyId&&(s.dirtyId=e.dirtyId,s.dirtyFormat!==e.dirtyFormat?(s.dirtyFormat=e.dirtyFormat,s.dirtySize=e.dirtySize,this.updateFramebuffer(e,i)):s.dirtySize!==e.dirtySize&&(s.dirtySize=e.dirtySize,this.resizeFramebuffer(e)));for(var a=0;a<e.colorTextures.length;a++){var o=e.colorTextures[a];this.renderer.texture.unbind(o.parentTextureArray||o)}if(e.depthTexture&&this.renderer.texture.unbind(e.depthTexture),t){var h=t.width>>i,u=t.height>>i,l=h/t.width;this.setViewport(t.x*l,t.y*l,h,u)}else{var h=e.width>>i,u=e.height>>i;this.setViewport(0,0,h,u)}}else this.current&&(this.current=null,n.bindFramebuffer(n.FRAMEBUFFER,null)),t?this.setViewport(t.x,t.y,t.width,t.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)},r.prototype.setViewport=function(e,t,i,n){var s=this.viewport;e=Math.round(e),t=Math.round(t),i=Math.round(i),n=Math.round(n),(s.width!==i||s.height!==n||s.x!==e||s.y!==t)&&(s.x=e,s.y=t,s.width=i,s.height=n,this.gl.viewport(e,t,i,n))},Object.defineProperty(r.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}),r.prototype.clear=function(e,t,i,n,s){s===void 0&&(s=bi.COLOR|bi.DEPTH);var a=this.gl;a.clearColor(e,t,i,n),a.clear(s)},r.prototype.initFramebuffer=function(e){var t=this.gl,i=new Uf(t.createFramebuffer());return i.multisample=this.detectSamples(e.multisample),e.glFramebuffers[this.CONTEXT_UID]=i,this.managedFramebuffers.push(e),e.disposeRunner.add(this),i},r.prototype.resizeFramebuffer=function(e){var t=this.gl,i=e.glFramebuffers[this.CONTEXT_UID];i.msaaBuffer&&(t.bindRenderbuffer(t.RENDERBUFFER,i.msaaBuffer),t.renderbufferStorageMultisample(t.RENDERBUFFER,i.multisample,t.RGBA8,e.width,e.height)),i.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,i.stencil),i.msaaBuffer?t.renderbufferStorageMultisample(t.RENDERBUFFER,i.multisample,t.DEPTH24_STENCIL8,e.width,e.height):t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.width,e.height));var n=e.colorTextures,s=n.length;t.drawBuffers||(s=Math.min(s,1));for(var a=0;a<s;a++){var o=n[a],h=o.parentTextureArray||o;this.renderer.texture.bind(h,0)}e.depthTexture&&this.writeDepthTexture&&this.renderer.texture.bind(e.depthTexture,0)},r.prototype.updateFramebuffer=function(e,t){var i=this.gl,n=e.glFramebuffers[this.CONTEXT_UID],s=e.colorTextures,a=s.length;i.drawBuffers||(a=Math.min(a,1)),n.multisample>1&&this.canMultisampleFramebuffer(e)?(n.msaaBuffer=n.msaaBuffer||i.createRenderbuffer(),i.bindRenderbuffer(i.RENDERBUFFER,n.msaaBuffer),i.renderbufferStorageMultisample(i.RENDERBUFFER,n.multisample,i.RGBA8,e.width,e.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=[],h=0;h<a;h++){var u=s[h],l=u.parentTextureArray||u;this.renderer.texture.bind(l,0),!(h===0&&n.msaaBuffer)&&(i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+h,u.target,l._glTextures[this.CONTEXT_UID].texture,t),o.push(i.COLOR_ATTACHMENT0+h))}if(o.length>1&&i.drawBuffers(o),e.depthTexture){var f=this.writeDepthTexture;if(f){var c=e.depthTexture;this.renderer.texture.bind(c,0),i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,c._glTextures[this.CONTEXT_UID].texture,t)}}(e.stencil||e.depth)&&!(e.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,e.width,e.height):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,e.width,e.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,n.stencil)):n.stencil&&(i.deleteRenderbuffer(n.stencil),n.stencil=null)},r.prototype.canMultisampleFramebuffer=function(e){return this.renderer.context.webGLVersion!==1&&e.colorTextures.length<=1&&!e.depthTexture},r.prototype.detectSamples=function(e){var t=this.msaaSamples,i=ft.NONE;if(e<=1||t===null)return i;for(var n=0;n<t.length;n++)if(t[n]<=e){i=t[n];break}return i===1&&(i=ft.NONE),i},r.prototype.blit=function(e,t,i){var n=this,s=n.current,a=n.renderer,o=n.gl,h=n.CONTEXT_UID;if(a.context.webGLVersion===2&&s){var u=s.glFramebuffers[h];if(u){if(!e){if(!u.msaaBuffer)return;var l=s.colorTextures[0];if(!l)return;u.blitFramebuffer||(u.blitFramebuffer=new Lr(s.width,s.height),u.blitFramebuffer.addColorTexture(0,l)),e=u.blitFramebuffer,e.colorTextures[0]!==l&&(e.colorTextures[0]=l,e.dirtyId++,e.dirtyFormat++),(e.width!==s.width||e.height!==s.height)&&(e.width=s.width,e.height=s.height,e.dirtyId++,e.dirtySize++)}t||(t=Gf,t.width=s.width,t.height=s.height),i||(i=t);var f=t.width===i.width&&t.height===i.height;this.bind(e),o.bindFramebuffer(o.READ_FRAMEBUFFER,u.framebuffer),o.blitFramebuffer(t.left,t.top,t.right,t.bottom,i.left,i.top,i.right,i.bottom,o.COLOR_BUFFER_BIT,f?o.NEAREST:o.LINEAR)}}},r.prototype.disposeFramebuffer=function(e,t){var i=e.glFramebuffers[this.CONTEXT_UID],n=this.gl;if(i){delete e.glFramebuffers[this.CONTEXT_UID];var s=this.managedFramebuffers.indexOf(e);s>=0&&this.managedFramebuffers.splice(s,1),e.disposeRunner.remove(this),t||(n.deleteFramebuffer(i.framebuffer),i.msaaBuffer&&n.deleteRenderbuffer(i.msaaBuffer),i.stencil&&n.deleteRenderbuffer(i.stencil)),i.blitFramebuffer&&i.blitFramebuffer.dispose()}},r.prototype.disposeAll=function(e){var t=this.managedFramebuffers;this.managedFramebuffers=[];for(var i=0;i<t.length;i++)this.disposeFramebuffer(t[i],e)},r.prototype.forceStencil=function(){var e=this.current;if(e){var t=e.glFramebuffers[this.CONTEXT_UID];if(!(!t||t.stencil)){e.stencil=!0;var i=e.width,n=e.height,s=this.gl,a=s.createRenderbuffer();s.bindRenderbuffer(s.RENDERBUFFER,a),t.msaaBuffer?s.renderbufferStorageMultisample(s.RENDERBUFFER,t.multisample,s.DEPTH24_STENCIL8,i,n):s.renderbufferStorage(s.RENDERBUFFER,s.DEPTH_STENCIL,i,n),t.stencil=a,s.framebufferRenderbuffer(s.FRAMEBUFFER,s.DEPTH_STENCIL_ATTACHMENT,s.RENDERBUFFER,a)}}},r.prototype.reset=function(){this.current=this.unknownFramebuffer,this.viewport=new j},r.prototype.destroy=function(){this.renderer=null},r}(),Gr={5126:4,5123:2,5121:1},Hf=function(){function r(e){this.renderer=e,this._activeGeometry=null,this._activeVao=null,this.hasVao=!0,this.hasInstance=!0,this.canUseUInt32ElementIndex=!1,this.managedGeometries={}}return r.prototype.contextChange=function(){this.disposeAll(!0);var e=this.gl=this.renderer.gl,t=this.renderer.context;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,t.webGLVersion!==2){var i=this.renderer.context.extensions.vertexArrayObject;F.PREFER_ENV===Qt.WEBGL_LEGACY&&(i=null),i?(e.createVertexArray=function(){return i.createVertexArrayOES()},e.bindVertexArray=function(s){return i.bindVertexArrayOES(s)},e.deleteVertexArray=function(s){return i.deleteVertexArrayOES(s)}):(this.hasVao=!1,e.createVertexArray=function(){return null},e.bindVertexArray=function(){return null},e.deleteVertexArray=function(){return null})}if(t.webGLVersion!==2){var n=e.getExtension("ANGLE_instanced_arrays");n?(e.vertexAttribDivisor=function(s,a){return n.vertexAttribDivisorANGLE(s,a)},e.drawElementsInstanced=function(s,a,o,h,u){return n.drawElementsInstancedANGLE(s,a,o,h,u)},e.drawArraysInstanced=function(s,a,o,h){return n.drawArraysInstancedANGLE(s,a,o,h)}):this.hasInstance=!1}this.canUseUInt32ElementIndex=t.webGLVersion===2||!!t.extensions.uint32ElementIndex},r.prototype.bind=function(e,t){t=t||this.renderer.shader.shader;var i=this.gl,n=e.glVertexArrayObjects[this.CONTEXT_UID],s=!1;n||(this.managedGeometries[e.id]=e,e.disposeRunner.add(this),e.glVertexArrayObjects[this.CONTEXT_UID]=n={},s=!0);var a=n[t.program.id]||this.initGeometryVao(e,t,s);this._activeGeometry=e,this._activeVao!==a&&(this._activeVao=a,this.hasVao?i.bindVertexArray(a):this.activateVao(e,t.program)),this.updateBuffers()},r.prototype.reset=function(){this.unbind()},r.prototype.updateBuffers=function(){for(var e=this._activeGeometry,t=this.renderer.buffer,i=0;i<e.buffers.length;i++){var n=e.buffers[i];t.update(n)}},r.prototype.checkCompatibility=function(e,t){var i=e.attributes,n=t.attributeData;for(var s in n)if(!i[s])throw new Error('shader and geometry incompatible, geometry missing the "'+s+'" attribute')},r.prototype.getSignature=function(e,t){var i=e.attributes,n=t.attributeData,s=["g",e.id];for(var a in i)n[a]&&s.push(a,n[a].location);return s.join("-")},r.prototype.initGeometryVao=function(e,t,i){i===void 0&&(i=!0);var n=this.gl,s=this.CONTEXT_UID,a=this.renderer.buffer,o=t.program;o.glPrograms[s]||this.renderer.shader.generateProgram(t),this.checkCompatibility(e,o);var h=this.getSignature(e,o),u=e.glVertexArrayObjects[this.CONTEXT_UID],l=u[h];if(l)return u[o.id]=l,l;var f=e.buffers,c=e.attributes,d={},p={};for(var v in f)d[v]=0,p[v]=0;for(var v in c)!c[v].size&&o.attributeData[v]?c[v].size=o.attributeData[v].size:c[v].size||console.warn("PIXI Geometry attribute '"+v+"' size cannot be determined (likely the bound shader does not have the attribute)"),d[c[v].buffer]+=c[v].size*Gr[c[v].type];for(var v in c){var _=c[v],m=_.size;_.stride===void 0&&(d[_.buffer]===m*Gr[_.type]?_.stride=0:_.stride=d[_.buffer]),_.start===void 0&&(_.start=p[_.buffer],p[_.buffer]+=m*Gr[_.type])}l=n.createVertexArray(),n.bindVertexArray(l);for(var g=0;g<f.length;g++){var y=f[g];a.bind(y),i&&y._glBuffers[s].refCount++}return this.activateVao(e,o),this._activeVao=l,u[o.id]=l,u[h]=l,l},r.prototype.disposeGeometry=function(e,t){var i;if(this.managedGeometries[e.id]){delete this.managedGeometries[e.id];var n=e.glVertexArrayObjects[this.CONTEXT_UID],s=this.gl,a=e.buffers,o=(i=this.renderer)===null||i===void 0?void 0:i.buffer;if(e.disposeRunner.remove(this),!!n){if(o)for(var h=0;h<a.length;h++){var u=a[h]._glBuffers[this.CONTEXT_UID];u&&(u.refCount--,u.refCount===0&&!t&&o.dispose(a[h],t))}if(!t){for(var l in n)if(l[0]==="g"){var f=n[l];this._activeVao===f&&this.unbind(),s.deleteVertexArray(f)}}delete e.glVertexArrayObjects[this.CONTEXT_UID]}}},r.prototype.disposeAll=function(e){for(var t=Object.keys(this.managedGeometries),i=0;i<t.length;i++)this.disposeGeometry(this.managedGeometries[t[i]],e)},r.prototype.activateVao=function(e,t){var i=this.gl,n=this.CONTEXT_UID,s=this.renderer.buffer,a=e.buffers,o=e.attributes;e.indexBuffer&&s.bind(e.indexBuffer);var h=null;for(var u in o){var l=o[u],f=a[l.buffer],c=f._glBuffers[n];if(t.attributeData[u]){h!==c&&(s.bind(f),h=c);var d=t.attributeData[u].location;if(i.enableVertexAttribArray(d),i.vertexAttribPointer(d,l.size,l.type||i.FLOAT,l.normalized,l.stride,l.start),l.instance)if(this.hasInstance)i.vertexAttribDivisor(d,1);else throw new Error("geometry error, GPU Instancing is not supported on this device")}}},r.prototype.draw=function(e,t,i,n){var s=this.gl,a=this._activeGeometry;if(a.indexBuffer){var o=a.indexBuffer.data.BYTES_PER_ELEMENT,h=o===2?s.UNSIGNED_SHORT:s.UNSIGNED_INT;o===2||o===4&&this.canUseUInt32ElementIndex?a.instanced?s.drawElementsInstanced(e,t||a.indexBuffer.data.length,h,(i||0)*o,n||1):s.drawElements(e,t||a.indexBuffer.data.length,h,(i||0)*o):console.warn("unsupported index buffer type: uint32")}else a.instanced?s.drawArraysInstanced(e,i,t||a.getSize(),n||1):s.drawArrays(e,i,t||a.getSize());return this},r.prototype.unbind=function(){this.gl.bindVertexArray(null),this._activeVao=null,this._activeGeometry=null},r.prototype.destroy=function(){this.renderer=null},r}(),Xf=function(){function r(e){e===void 0&&(e=null),this.type=mt.NONE,this.autoDetect=!0,this.maskObject=e||null,this.pooled=!1,this.isMaskData=!0,this.resolution=null,this.multisample=F.FILTER_MULTISAMPLE,this.enabled=!0,this.colorMask=15,this._filters=null,this._stencilCounter=0,this._scissorCounter=0,this._scissorRect=null,this._scissorRectLocal=null,this._colorMask=15,this._target=null}return Object.defineProperty(r.prototype,"filter",{get:function(){return this._filters?this._filters[0]:null},set:function(e){e?this._filters?this._filters[0]=e:this._filters=[e]:this._filters=null},enumerable:!1,configurable:!0}),r.prototype.reset=function(){this.pooled&&(this.maskObject=null,this.type=mt.NONE,this.autoDetect=!0),this._target=null,this._scissorRectLocal=null},r.prototype.copyCountersOrReset=function(e){e?(this._stencilCounter=e._stencilCounter,this._scissorCounter=e._scissorCounter,this._scissorRect=e._scissorRect):(this._stencilCounter=0,this._scissorCounter=0,this._scissorRect=null)},r}();function Gs(r,e,t){var i=r.createShader(e);return r.shaderSource(i,t),r.compileShader(i),i}function ks(r,e){var t=r.getShaderSource(e).split(`
11
- `).map(function(u,l){return l+": "+u}),i=r.getShaderInfoLog(e),n=i.split(`
12
- `),s={},a=n.map(function(u){return parseFloat(u.replace(/^ERROR\: 0\:([\d]+)\:.*$/,"$1"))}).filter(function(u){return u&&!s[u]?(s[u]=!0,!0):!1}),o=[""];a.forEach(function(u){t[u-1]="%c"+t[u-1]+"%c",o.push("background: #FF0000; color:#FFFFFF; font-size: 10px","font-size: 10px")});var h=t.join(`
13
- `);o[0]=h,console.error(i),console.groupCollapsed("click to view full shader code"),console.warn.apply(console,o),console.groupEnd()}function Wf(r,e,t,i){r.getProgramParameter(e,r.LINK_STATUS)||(r.getShaderParameter(t,r.COMPILE_STATUS)||ks(r,t),r.getShaderParameter(i,r.COMPILE_STATUS)||ks(r,i),console.error("PixiJS Error: Could not initialize shader."),r.getProgramInfoLog(e)!==""&&console.warn("PixiJS Warning: gl.getProgramInfoLog()",r.getProgramInfoLog(e)))}function kr(r){for(var e=new Array(r),t=0;t<e.length;t++)e[t]=!1;return e}function Hs(r,e){switch(r){case"float":return 0;case"vec2":return new Float32Array(2*e);case"vec3":return new Float32Array(3*e);case"vec4":return new Float32Array(4*e);case"int":case"uint":case"sampler2D":case"sampler2DArray":return 0;case"ivec2":return new Int32Array(2*e);case"ivec3":return new Int32Array(3*e);case"ivec4":return new Int32Array(4*e);case"uvec2":return new Uint32Array(2*e);case"uvec3":return new Uint32Array(3*e);case"uvec4":return new Uint32Array(4*e);case"bool":return!1;case"bvec2":return kr(2*e);case"bvec3":return kr(3*e);case"bvec4":return kr(4*e);case"mat2":return new Float32Array([1,0,0,1]);case"mat3":return new Float32Array([1,0,0,0,1,0,0,0,1]);case"mat4":return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}var Xs={},ri=Xs;function jf(){if(ri===Xs||ri&&ri.isContextLost()){var r=F.ADAPTER.createCanvas(),e=void 0;F.PREFER_ENV>=Qt.WEBGL2&&(e=r.getContext("webgl2",{})),e||(e=r.getContext("webgl",{})||r.getContext("experimental-webgl",{}),e?e.getExtension("WEBGL_draw_buffers"):e=null),ri=e}return ri}var Ui;function zf(){if(!Ui){Ui=It.MEDIUM;var r=jf();if(r&&r.getShaderPrecisionFormat){var e=r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT);Ui=e.precision?It.HIGH:It.MEDIUM}}return Ui}function Ws(r,e,t){if(r.substring(0,9)!=="precision"){var i=e;return e===It.HIGH&&t!==It.HIGH&&(i=It.MEDIUM),"precision "+i+` float;
14
- `+r}else if(t!==It.HIGH&&r.substring(0,15)==="precision highp")return r.replace("precision highp","precision mediump");return r}var Yf={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 js(r){return Yf[r]}var Gi=null,zs={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 Ys(r,e){if(!Gi){var t=Object.keys(zs);Gi={};for(var i=0;i<t.length;++i){var n=t[i];Gi[r[n]]=zs[n]}}return Gi[e]}var Ge=[{test:function(r){return r.type==="float"&&r.size===1&&!r.isArray},code:function(r){return`
15
- if(uv["`+r+'"] !== ud["'+r+`"].value)
13
+ Deprecated since v`+l),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",e+`
14
+ Deprecated since v`+l),console.warn(i))),ch[e]=!0}}var uh={},Ue=Object.create(null),Gi=Object.create(null),mh=function(){function l(e,t,i){this.canvas=U.ADAPTER.createCanvas(),this.context=this.canvas.getContext("2d"),this.resolution=i||U.RESOLUTION,this.resize(e,t)}return l.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},l.prototype.resize=function(e,t){this.canvas.width=Math.round(e*this.resolution),this.canvas.height=Math.round(t*this.resolution)},l.prototype.destroy=function(){this.context=null,this.canvas=null},Object.defineProperty(l.prototype,"width",{get:function(){return this.canvas.width},set:function(e){this.canvas.width=Math.round(e)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"height",{get:function(){return this.canvas.height},set:function(e){this.canvas.height=Math.round(e)},enumerable:!1,configurable:!0}),l}();function vZ(l){var e=l.width,t=l.height,i=l.getContext("2d",{willReadFrequently:!0}),n=i.getImageData(0,0,e,t),a=n.data,s=a.length,d={top:null,left:null,right:null,bottom:null},h=null,r,o,c;for(r=0;r<s;r+=4)a[r+3]!==0&&(o=r/4%e,c=~~(r/4/e),d.top===null&&(d.top=c),(d.left===null||o<d.left)&&(d.left=o),(d.right===null||d.right<o)&&(d.right=o+1),(d.bottom===null||d.bottom<c)&&(d.bottom=c));return d.top!==null&&(e=d.right-d.left,t=d.bottom-d.top+1,h=i.getImageData(d.left,d.top,e,t)),{height:t,width:e,data:h}}var on;function IZ(l,e){if(e===void 0&&(e=globalThis.location),l.indexOf("data:")===0)return"";e=e||globalThis.location,on||(on=document.createElement("a")),on.href=l;var t=Ni.parse(on.href),i=!t.port&&e.port===""||t.port===e.port;return t.hostname!==e.hostname||!i||t.protocol!==e.protocol?"anonymous":""}function cn(l,e){var t=U.RETINA_PREFIX.exec(l);return t?parseFloat(t[1]):e!==void 0?e:1}U.SORTABLE_CHILDREN=!1;var un=function(){function l(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}return l.prototype.isEmpty=function(){return this.minX>this.maxX||this.minY>this.maxY},l.prototype.clear=function(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0},l.prototype.getRectangle=function(e){return this.minX>this.maxX||this.minY>this.maxY?j.EMPTY:(e=e||new j(0,0,1,1),e.x=this.minX,e.y=this.minY,e.width=this.maxX-this.minX,e.height=this.maxY-this.minY,e)},l.prototype.addPoint=function(e){this.minX=Math.min(this.minX,e.x),this.maxX=Math.max(this.maxX,e.x),this.minY=Math.min(this.minY,e.y),this.maxY=Math.max(this.maxY,e.y)},l.prototype.addPointMatrix=function(e,t){var i=e.a,n=e.b,a=e.c,s=e.d,d=e.tx,h=e.ty,r=i*t.x+a*t.y+d,o=n*t.x+s*t.y+h;this.minX=Math.min(this.minX,r),this.maxX=Math.max(this.maxX,r),this.minY=Math.min(this.minY,o),this.maxY=Math.max(this.maxY,o)},l.prototype.addQuad=function(e){var t=this.minX,i=this.minY,n=this.maxX,a=this.maxY,s=e[0],d=e[1];t=s<t?s:t,i=d<i?d:i,n=s>n?s:n,a=d>a?d:a,s=e[2],d=e[3],t=s<t?s:t,i=d<i?d:i,n=s>n?s:n,a=d>a?d:a,s=e[4],d=e[5],t=s<t?s:t,i=d<i?d:i,n=s>n?s:n,a=d>a?d:a,s=e[6],d=e[7],t=s<t?s:t,i=d<i?d:i,n=s>n?s:n,a=d>a?d:a,this.minX=t,this.minY=i,this.maxX=n,this.maxY=a},l.prototype.addFrame=function(e,t,i,n,a){this.addFrameMatrix(e.worldTransform,t,i,n,a)},l.prototype.addFrameMatrix=function(e,t,i,n,a){var s=e.a,d=e.b,h=e.c,r=e.d,o=e.tx,c=e.ty,u=this.minX,m=this.minY,b=this.maxX,Z=this.maxY,p=s*t+h*i+o,G=d*t+r*i+c;u=p<u?p:u,m=G<m?G:m,b=p>b?p:b,Z=G>Z?G:Z,p=s*n+h*i+o,G=d*n+r*i+c,u=p<u?p:u,m=G<m?G:m,b=p>b?p:b,Z=G>Z?G:Z,p=s*t+h*a+o,G=d*t+r*a+c,u=p<u?p:u,m=G<m?G:m,b=p>b?p:b,Z=G>Z?G:Z,p=s*n+h*a+o,G=d*n+r*a+c,u=p<u?p:u,m=G<m?G:m,b=p>b?p:b,Z=G>Z?G:Z,this.minX=u,this.minY=m,this.maxX=b,this.maxY=Z},l.prototype.addVertexData=function(e,t,i){for(var n=this.minX,a=this.minY,s=this.maxX,d=this.maxY,h=t;h<i;h+=2){var r=e[h],o=e[h+1];n=r<n?r:n,a=o<a?o:a,s=r>s?r:s,d=o>d?o:d}this.minX=n,this.minY=a,this.maxX=s,this.maxY=d},l.prototype.addVertices=function(e,t,i,n){this.addVerticesMatrix(e.worldTransform,t,i,n)},l.prototype.addVerticesMatrix=function(e,t,i,n,a,s){a===void 0&&(a=0),s===void 0&&(s=a);for(var d=e.a,h=e.b,r=e.c,o=e.d,c=e.tx,u=e.ty,m=this.minX,b=this.minY,Z=this.maxX,p=this.maxY,G=i;G<n;G+=2){var X=t[G],y=t[G+1],R=d*X+r*y+c,V=o*y+h*X+u;m=Math.min(m,R-a),Z=Math.max(Z,R+a),b=Math.min(b,V-s),p=Math.max(p,V+s)}this.minX=m,this.minY=b,this.maxX=Z,this.maxY=p},l.prototype.addBounds=function(e){var t=this.minX,i=this.minY,n=this.maxX,a=this.maxY;this.minX=e.minX<t?e.minX:t,this.minY=e.minY<i?e.minY:i,this.maxX=e.maxX>n?e.maxX:n,this.maxY=e.maxY>a?e.maxY:a},l.prototype.addBoundsMask=function(e,t){var i=e.minX>t.minX?e.minX:t.minX,n=e.minY>t.minY?e.minY:t.minY,a=e.maxX<t.maxX?e.maxX:t.maxX,s=e.maxY<t.maxY?e.maxY:t.maxY;if(i<=a&&n<=s){var d=this.minX,h=this.minY,r=this.maxX,o=this.maxY;this.minX=i<d?i:d,this.minY=n<h?n:h,this.maxX=a>r?a:r,this.maxY=s>o?s:o}},l.prototype.addBoundsMatrix=function(e,t){this.addFrameMatrix(t,e.minX,e.minY,e.maxX,e.maxY)},l.prototype.addBoundsArea=function(e,t){var i=e.minX>t.x?e.minX:t.x,n=e.minY>t.y?e.minY:t.y,a=e.maxX<t.x+t.width?e.maxX:t.x+t.width,s=e.maxY<t.y+t.height?e.maxY:t.y+t.height;if(i<=a&&n<=s){var d=this.minX,h=this.minY,r=this.maxX,o=this.maxY;this.minX=i<d?i:d,this.minY=n<h?n:h,this.maxX=a>r?a:r,this.maxY=s>o?s:o}},l.prototype.pad=function(e,t){e===void 0&&(e=0),t===void 0&&(t=e),this.isEmpty()||(this.minX-=e,this.maxX+=e,this.minY-=t,this.maxY+=t)},l.prototype.addFramePad=function(e,t,i,n,a,s){e-=a,t-=s,i+=a,n+=s,this.minX=this.minX<e?this.minX:e,this.maxX=this.maxX>i?this.maxX:i,this.minY=this.minY<t?this.minY:t,this.maxY=this.maxY>n?this.maxY:n},l}();var Sa=function(l,e){return Sa=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Sa(l,e)};function va(l,e){Sa(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Rt=function(l){va(e,l);function e(){var t=l.call(this)||this;return t.tempDisplayObjectParent=null,t.transform=new fd,t.alpha=1,t.visible=!0,t.renderable=!0,t.cullable=!1,t.cullArea=null,t.parent=null,t.worldAlpha=1,t._lastSortedIndex=0,t._zIndex=0,t.filterArea=null,t.filters=null,t._enabledFilters=null,t._bounds=new un,t._localBounds=null,t._boundsID=0,t._boundsRect=null,t._localBoundsRect=null,t._mask=null,t._maskRefCount=0,t._destroyed=!1,t.isSprite=!1,t.isMask=!1,t}return e.mixin=function(t){for(var i=Object.keys(t),n=0;n<i.length;++n){var a=i[n];Object.defineProperty(e.prototype,a,Object.getOwnPropertyDescriptor(t,a))}},Object.defineProperty(e.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!1,configurable:!0}),e.prototype._recursivePostUpdateTransform=function(){this.parent?(this.parent._recursivePostUpdateTransform(),this.transform.updateTransform(this.parent.transform)):this.transform.updateTransform(this._tempDisplayObjectParent.transform)},e.prototype.updateTransform=function(){this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha},e.prototype.getBounds=function(t,i){return t||(this.parent?(this._recursivePostUpdateTransform(),this.updateTransform()):(this.parent=this._tempDisplayObjectParent,this.updateTransform(),this.parent=null)),this._bounds.updateID!==this._boundsID&&(this.calculateBounds(),this._bounds.updateID=this._boundsID),i||(this._boundsRect||(this._boundsRect=new j),i=this._boundsRect),this._bounds.getRectangle(i)},e.prototype.getLocalBounds=function(t){t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._localBounds||(this._localBounds=new un);var i=this.transform,n=this.parent;this.parent=null,this.transform=this._tempDisplayObjectParent.transform;var a=this._bounds,s=this._boundsID;this._bounds=this._localBounds;var d=this.getBounds(!1,t);return this.parent=n,this.transform=i,this._bounds=a,this._bounds.updateID+=this._boundsID-s,d},e.prototype.toGlobal=function(t,i,n){return n===void 0&&(n=!1),n||(this._recursivePostUpdateTransform(),this.parent?this.displayObjectUpdateTransform():(this.parent=this._tempDisplayObjectParent,this.displayObjectUpdateTransform(),this.parent=null)),this.worldTransform.apply(t,i)},e.prototype.toLocal=function(t,i,n,a){return i&&(t=i.toGlobal(t,n,a)),a||(this._recursivePostUpdateTransform(),this.parent?this.displayObjectUpdateTransform():(this.parent=this._tempDisplayObjectParent,this.displayObjectUpdateTransform(),this.parent=null)),this.worldTransform.applyInverse(t,n)},e.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},e.prototype.setTransform=function(t,i,n,a,s,d,h,r,o){return t===void 0&&(t=0),i===void 0&&(i=0),n===void 0&&(n=1),a===void 0&&(a=1),s===void 0&&(s=0),d===void 0&&(d=0),h===void 0&&(h=0),r===void 0&&(r=0),o===void 0&&(o=0),this.position.x=t,this.position.y=i,this.scale.x=n||1,this.scale.y=a||1,this.rotation=s,this.skew.x=d,this.skew.y=h,this.pivot.x=r,this.pivot.y=o,this},e.prototype.destroy=function(t){this.parent&&this.parent.removeChild(this),this._destroyed=!0,this.transform=null,this.parent=null,this._bounds=null,this.mask=null,this.cullArea=null,this.filters=null,this.filterArea=null,this.hitArea=null,this.interactive=!1,this.interactiveChildren=!1,this.emit("destroyed"),this.removeAllListeners()},Object.defineProperty(e.prototype,"_tempDisplayObjectParent",{get:function(){return this.tempDisplayObjectParent===null&&(this.tempDisplayObjectParent=new Zh),this.tempDisplayObjectParent},enumerable:!1,configurable:!0}),e.prototype.enableTempParent=function(){var t=this.parent;return this.parent=this._tempDisplayObjectParent,t},e.prototype.disableTempParent=function(t){this.parent=t},Object.defineProperty(e.prototype,"x",{get:function(){return this.position.x},set:function(t){this.transform.position.x=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"y",{get:function(){return this.position.y},set:function(t){this.transform.position.y=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"worldTransform",{get:function(){return this.transform.worldTransform},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"localTransform",{get:function(){return this.transform.localTransform},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"position",{get:function(){return this.transform.position},set:function(t){this.transform.position.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scale",{get:function(){return this.transform.scale},set:function(t){this.transform.scale.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pivot",{get:function(){return this.transform.pivot},set:function(t){this.transform.pivot.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"skew",{get:function(){return this.transform.skew},set:function(t){this.transform.skew.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rotation",{get:function(){return this.transform.rotation},set:function(t){this.transform.rotation=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"angle",{get:function(){return this.transform.rotation*pc},set:function(t){this.transform.rotation=t*Gc},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"zIndex",{get:function(){return this._zIndex},set:function(t){this._zIndex=t,this.parent&&(this.parent.sortDirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"worldVisible",{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mask",{get:function(){return this._mask},set:function(t){if(this._mask!==t){if(this._mask){var i=this._mask.isMaskData?this._mask.maskObject:this._mask;i&&(i._maskRefCount--,i._maskRefCount===0&&(i.renderable=!0,i.isMask=!1))}if(this._mask=t,this._mask){var i=this._mask.isMaskData?this._mask.maskObject:this._mask;i&&(i._maskRefCount===0&&(i.renderable=!1,i.isMask=!0),i._maskRefCount++)}}},enumerable:!1,configurable:!0}),e}(ol),Zh=function(l){va(e,l);function e(){var t=l!==null&&l.apply(this,arguments)||this;return t.sortDirty=null,t}return e}(Rt);Rt.prototype.displayObjectUpdateTransform=Rt.prototype.updateTransform;function YZ(l,e){return l.zIndex===e.zIndex?l._lastSortedIndex-e._lastSortedIndex:l.zIndex-e.zIndex}var xt=function(l){va(e,l);function e(){var t=l.call(this)||this;return t.children=[],t.sortableChildren=U.SORTABLE_CHILDREN,t.sortDirty=!1,t}return e.prototype.onChildrenChange=function(t){},e.prototype.addChild=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(i.length>1)for(var a=0;a<i.length;a++)this.addChild(i[a]);else{var s=i[0];s.parent&&s.parent.removeChild(s),s.parent=this,this.sortDirty=!0,s.transform._parentID=-1,this.children.push(s),this._boundsID++,this.onChildrenChange(this.children.length-1),this.emit("childAdded",s,this,this.children.length-1),s.emit("added",this)}return i[0]},e.prototype.addChildAt=function(t,i){if(i<0||i>this.children.length)throw new Error(t+"addChildAt: The index "+i+" supplied is out of bounds "+this.children.length);return t.parent&&t.parent.removeChild(t),t.parent=this,this.sortDirty=!0,t.transform._parentID=-1,this.children.splice(i,0,t),this._boundsID++,this.onChildrenChange(i),t.emit("added",this),this.emit("childAdded",t,this,i),t},e.prototype.swapChildren=function(t,i){if(t!==i){var n=this.getChildIndex(t),a=this.getChildIndex(i);this.children[n]=i,this.children[a]=t,this.onChildrenChange(n<a?n:a)}},e.prototype.getChildIndex=function(t){var i=this.children.indexOf(t);if(i===-1)throw new Error("The supplied DisplayObject must be a child of the caller");return i},e.prototype.setChildIndex=function(t,i){if(i<0||i>=this.children.length)throw new Error("The index "+i+" supplied is out of bounds "+this.children.length);var n=this.getChildIndex(t);Ki(this.children,n,1),this.children.splice(i,0,t),this.onChildrenChange(i)},e.prototype.getChildAt=function(t){if(t<0||t>=this.children.length)throw new Error("getChildAt: Index ("+t+") does not exist.");return this.children[t]},e.prototype.removeChild=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(i.length>1)for(var a=0;a<i.length;a++)this.removeChild(i[a]);else{var s=i[0],d=this.children.indexOf(s);if(d===-1)return null;s.parent=null,s.transform._parentID=-1,Ki(this.children,d,1),this._boundsID++,this.onChildrenChange(d),s.emit("removed",this),this.emit("childRemoved",s,this,d)}return i[0]},e.prototype.removeChildAt=function(t){var i=this.getChildAt(t);return i.parent=null,i.transform._parentID=-1,Ki(this.children,t,1),this._boundsID++,this.onChildrenChange(t),i.emit("removed",this),this.emit("childRemoved",i,this,t),i},e.prototype.removeChildren=function(t,i){t===void 0&&(t=0),i===void 0&&(i=this.children.length);var n=t,a=i,s=a-n,d;if(s>0&&s<=a){d=this.children.splice(n,s);for(var h=0;h<d.length;++h)d[h].parent=null,d[h].transform&&(d[h].transform._parentID=-1);this._boundsID++,this.onChildrenChange(t);for(var h=0;h<d.length;++h)d[h].emit("removed",this),this.emit("childRemoved",d[h],this,h);return d}else if(s===0&&this.children.length===0)return[];throw new RangeError("removeChildren: numeric values are outside the acceptable range.")},e.prototype.sortChildren=function(){for(var t=!1,i=0,n=this.children.length;i<n;++i){var a=this.children[i];a._lastSortedIndex=i,!t&&a.zIndex!==0&&(t=!0)}t&&this.children.length>1&&this.children.sort(YZ),this.sortDirty=!1},e.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 t=0,i=this.children.length;t<i;++t){var n=this.children[t];n.visible&&n.updateTransform()}},e.prototype.calculateBounds=function(){this._bounds.clear(),this._calculateBounds();for(var t=0;t<this.children.length;t++){var i=this.children[t];if(!(!i.visible||!i.renderable))if(i.calculateBounds(),i._mask){var n=i._mask.isMaskData?i._mask.maskObject:i._mask;n?(n.calculateBounds(),this._bounds.addBoundsMask(i._bounds,n._bounds)):this._bounds.addBounds(i._bounds)}else i.filterArea?this._bounds.addBoundsArea(i._bounds,i.filterArea):this._bounds.addBounds(i._bounds)}this._bounds.updateID=this._boundsID},e.prototype.getLocalBounds=function(t,i){i===void 0&&(i=!1);var n=l.prototype.getLocalBounds.call(this,t);if(!i)for(var a=0,s=this.children.length;a<s;++a){var d=this.children[a];d.visible&&d.updateTransform()}return n},e.prototype._calculateBounds=function(){},e.prototype._renderWithCulling=function(t){var i=t.renderTexture.sourceFrame;if(i.width>0&&i.height>0){var n,a;if(this.cullArea?(n=this.cullArea,a=this.worldTransform):this._render!==e.prototype._render&&(n=this.getBounds(!0)),n&&i.intersects(n,a))this._render(t);else if(this.cullArea)return;for(var s=0,d=this.children.length;s<d;++s){var h=this.children[s],r=h.cullable;h.cullable=r||!this.cullArea,h.render(t),h.cullable=r}}},e.prototype.render=function(t){if(!(!this.visible||this.worldAlpha<=0||!this.renderable))if(this._mask||this.filters&&this.filters.length)this.renderAdvanced(t);else if(this.cullable)this._renderWithCulling(t);else{this._render(t);for(var i=0,n=this.children.length;i<n;++i)this.children[i].render(t)}},e.prototype.renderAdvanced=function(t){var i=this.filters,n=this._mask;if(i){this._enabledFilters||(this._enabledFilters=[]),this._enabledFilters.length=0;for(var a=0;a<i.length;a++)i[a].enabled&&this._enabledFilters.push(i[a])}var s=i&&this._enabledFilters&&this._enabledFilters.length||n&&(!n.isMaskData||n.enabled&&(n.autoDetect||n.type!==Lt.NONE));if(s&&t.batch.flush(),i&&this._enabledFilters&&this._enabledFilters.length&&t.filter.push(this,this._enabledFilters),n&&t.mask.push(this,this._mask),this.cullable)this._renderWithCulling(t);else{this._render(t);for(var a=0,d=this.children.length;a<d;++a)this.children[a].render(t)}s&&t.batch.flush(),n&&t.mask.pop(this),i&&this._enabledFilters&&this._enabledFilters.length&&t.filter.pop()},e.prototype._render=function(t){},e.prototype.destroy=function(t){l.prototype.destroy.call(this),this.sortDirty=!1;var i=typeof t=="boolean"?t:t&&t.children,n=this.removeChildren(0,this.children.length);if(i)for(var a=0;a<n.length;++a)n[a].destroy(t)},Object.defineProperty(e.prototype,"width",{get:function(){return this.scale.x*this.getLocalBounds().width},set:function(t){var i=this.getLocalBounds().width;i!==0?this.scale.x=t/i:this.scale.x=1,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.scale.y*this.getLocalBounds().height},set:function(t){var i=this.getLocalBounds().height;i!==0?this.scale.y=t/i:this.scale.y=1,this._height=t},enumerable:!1,configurable:!0}),e}(Rt);xt.prototype.containerUpdateTransform=xt.prototype.updateTransform;var pl=function(){return pl=Object.assign||function(e){for(var t=arguments,i,n=1,a=arguments.length;n<a;n++){i=t[n];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(e[s]=i[s])}return e},pl.apply(this,arguments)},nt;(function(l){l.Application="application",l.RendererPlugin="renderer-webgl-plugin",l.CanvasRendererPlugin="renderer-canvas-plugin",l.Loader="loader",l.LoadParser="load-parser",l.ResolveParser="resolve-parser",l.CacheParser="cache-parser",l.DetectionParser="detection-parser"})(nt||(nt={}));var bh=function(l){if(typeof l=="function"||typeof l=="object"&&l.extension){if(!l.extension)throw new Error("Extension class must have an extension object");var e=typeof l.extension!="object"?{type:l.extension}:l.extension;l=pl(pl({},e),{ref:l})}if(typeof l=="object")l=pl({},l);else throw new Error("Invalid extension type");return typeof l.type=="string"&&(l.type=[l.type]),l},ke={_addHandlers:null,_removeHandlers:null,_queue:{},remove:function(){for(var l=arguments,e=this,t=[],i=0;i<arguments.length;i++)t[i]=l[i];return t.map(bh).forEach(function(n){n.type.forEach(function(a){var s,d;return(d=(s=e._removeHandlers)[a])===null||d===void 0?void 0:d.call(s,n)})}),this},add:function(){for(var l=arguments,e=this,t=[],i=0;i<arguments.length;i++)t[i]=l[i];return t.map(bh).forEach(function(n){n.type.forEach(function(a){var s=e._addHandlers,d=e._queue;s[a]?s[a](n):(d[a]=d[a]||[],d[a].push(n))})}),this},handle:function(l,e,t){var i=this._addHandlers=this._addHandlers||{},n=this._removeHandlers=this._removeHandlers||{};if(i[l]||n[l])throw new Error("Extension type "+l+" already has a handler");i[l]=e,n[l]=t;var a=this._queue;return a[l]&&(a[l].forEach(function(s){return e(s)}),delete a[l]),this},handleByMap:function(l,e){return this.handle(l,function(t){e[t.name]=t.ref},function(t){delete e[t.name]})},handleByList:function(l,e){return this.handle(l,function(t){var i,n;e.push(t.ref),l===nt.Loader&&((n=(i=t.ref).add)===null||n===void 0||n.call(i))},function(t){var i=e.indexOf(t.ref);i!==-1&&e.splice(i,1)})}};var kt=function(){function l(e){this.items=[],this._name=e,this._aliasCount=0}return l.prototype.emit=function(e,t,i,n,a,s,d,h){if(arguments.length>8)throw new Error("max arguments reached");var r=this,o=r.name,c=r.items;this._aliasCount++;for(var u=0,m=c.length;u<m;u++)c[u][o](e,t,i,n,a,s,d,h);return c===this.items&&this._aliasCount--,this},l.prototype.ensureNonAliasedItems=function(){this._aliasCount>0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))},l.prototype.add=function(e){return e[this._name]&&(this.ensureNonAliasedItems(),this.remove(e),this.items.push(e)),this},l.prototype.remove=function(e){var t=this.items.indexOf(e);return t!==-1&&(this.ensureNonAliasedItems(),this.items.splice(t,1)),this},l.prototype.contains=function(e){return this.items.indexOf(e)!==-1},l.prototype.removeAll=function(){return this.ensureNonAliasedItems(),this.items.length=0,this},l.prototype.destroy=function(){this.removeAll(),this.items=null,this._name=null},Object.defineProperty(l.prototype,"empty",{get:function(){return this.items.length===0},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),l}();Object.defineProperties(kt.prototype,{dispatch:{value:kt.prototype.emit},run:{value:kt.prototype.emit}});U.TARGET_FPMS=.06;var le;(function(l){l[l.INTERACTION=50]="INTERACTION",l[l.HIGH=25]="HIGH",l[l.NORMAL=0]="NORMAL",l[l.LOW=-25]="LOW",l[l.UTILITY=-50]="UTILITY"})(le||(le={}));var Ia=function(){function l(e,t,i,n){t===void 0&&(t=null),i===void 0&&(i=0),n===void 0&&(n=!1),this.next=null,this.previous=null,this._destroyed=!1,this.fn=e,this.context=t,this.priority=i,this.once=n}return l.prototype.match=function(e,t){return t===void 0&&(t=null),this.fn===e&&this.context===t},l.prototype.emit=function(e){this.fn&&(this.context?this.fn.call(this.context,e):this.fn(e));var t=this.next;return this.once&&this.destroy(!0),this._destroyed&&(this.next=null),t},l.prototype.connect=function(e){this.previous=e,e.next&&(e.next.previous=this),this.next=e.next,e.next=this},l.prototype.destroy=function(e){e===void 0&&(e=!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 t=this.next;return this.next=e?null:t,this.previous=null,t},l}(),Jt=function(){function l(){var e=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 Ia(null,null,1/0),this.deltaMS=1/U.TARGET_FPMS,this.elapsedMS=1/U.TARGET_FPMS,this._tick=function(t){e._requestId=null,e.started&&(e.update(t),e.started&&e._requestId===null&&e._head.next&&(e._requestId=requestAnimationFrame(e._tick)))}}return l.prototype._requestIfNeeded=function(){this._requestId===null&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))},l.prototype._cancelIfNeeded=function(){this._requestId!==null&&(cancelAnimationFrame(this._requestId),this._requestId=null)},l.prototype._startIfPossible=function(){this.started?this._requestIfNeeded():this.autoStart&&this.start()},l.prototype.add=function(e,t,i){return i===void 0&&(i=le.NORMAL),this._addListener(new Ia(e,t,i))},l.prototype.addOnce=function(e,t,i){return i===void 0&&(i=le.NORMAL),this._addListener(new Ia(e,t,i,!0))},l.prototype._addListener=function(e){var t=this._head.next,i=this._head;if(!t)e.connect(i);else{for(;t;){if(e.priority>t.priority){e.connect(i);break}i=t,t=t.next}e.previous||e.connect(i)}return this._startIfPossible(),this},l.prototype.remove=function(e,t){for(var i=this._head.next;i;)i.match(e,t)?i=i.destroy():i=i.next;return this._head.next||this._cancelIfNeeded(),this},Object.defineProperty(l.prototype,"count",{get:function(){if(!this._head)return 0;for(var e=0,t=this._head;t=t.next;)e++;return e},enumerable:!1,configurable:!0}),l.prototype.start=function(){this.started||(this.started=!0,this._requestIfNeeded())},l.prototype.stop=function(){this.started&&(this.started=!1,this._cancelIfNeeded())},l.prototype.destroy=function(){if(!this._protected){this.stop();for(var e=this._head.next;e;)e=e.destroy(!0);this._head.destroy(),this._head=null}},l.prototype.update=function(e){e===void 0&&(e=performance.now());var t;if(e>this.lastTime){if(t=this.elapsedMS=e-this.lastTime,t>this._maxElapsedMS&&(t=this._maxElapsedMS),t*=this.speed,this._minElapsedMS){var i=e-this._lastFrame|0;if(i<this._minElapsedMS)return;this._lastFrame=e-i%this._minElapsedMS}this.deltaMS=t,this.deltaTime=this.deltaMS*U.TARGET_FPMS;for(var n=this._head,a=n.next;a;)a=a.emit(this.deltaTime);n.next||this._cancelIfNeeded()}else this.deltaTime=this.deltaMS=this.elapsedMS=0;this.lastTime=e},Object.defineProperty(l.prototype,"FPS",{get:function(){return 1e3/this.elapsedMS},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"minFPS",{get:function(){return 1e3/this._maxElapsedMS},set:function(e){var t=Math.min(this.maxFPS,e),i=Math.min(Math.max(0,t)/1e3,U.TARGET_FPMS);this._maxElapsedMS=1/i},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"maxFPS",{get:function(){return this._minElapsedMS?Math.round(1e3/this._minElapsedMS):0},set:function(e){if(e===0)this._minElapsedMS=0;else{var t=Math.max(this.minFPS,e);this._minElapsedMS=1/(t/1e3)}},enumerable:!1,configurable:!0}),Object.defineProperty(l,"shared",{get:function(){if(!l._shared){var e=l._shared=new l;e.autoStart=!0,e._protected=!0}return l._shared},enumerable:!1,configurable:!0}),Object.defineProperty(l,"system",{get:function(){if(!l._system){var e=l._system=new l;e.autoStart=!0,e._protected=!0}return l._system},enumerable:!1,configurable:!0}),l}(),gZ=function(){function l(){}return l.init=function(e){var t=this;e=Object.assign({autoStart:!0,sharedTicker:!1},e),Object.defineProperty(this,"ticker",{set:function(i){this._ticker&&this._ticker.remove(this.render,this),this._ticker=i,i&&i.add(this.render,this,le.LOW)},get:function(){return this._ticker}}),this.stop=function(){t._ticker.stop()},this.start=function(){t._ticker.start()},this._ticker=null,this.ticker=e.sharedTicker?Jt.shared:new Jt,e.autoStart&&this.start()},l.destroy=function(){if(this._ticker){var e=this._ticker;this.ticker=null,e.destroy()}},l.extension=nt.Application,l}();U.PREFER_ENV=ve.any?Ce.WEBGL:Ce.WEBGL2,U.STRICT_TEXTURE_CACHE=!1;var Ya=[];function ph(l,e){if(!l)return null;var t="";if(typeof l=="string"){var i=/\.(\w{3,4})(?:$|\?|#)/i.exec(l);i&&(t=i[1].toLowerCase())}for(var n=Ya.length-1;n>=0;--n){var a=Ya[n];if(a.test&&a.test(l,t))return new a(l,e)}throw new Error("Unrecognized source type to auto-detect Resource")}var ga=function(l,e){return ga=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},ga(l,e)};function ht(l,e){ga(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Ta=function(){return Ta=Object.assign||function(e){for(var t=arguments,i,n=1,a=arguments.length;n<a;n++){i=t[n];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(e[s]=i[s])}return e},Ta.apply(this,arguments)};function TZ(l,e){var t={};for(var i in l)Object.prototype.hasOwnProperty.call(l,i)&&e.indexOf(i)<0&&(t[i]=l[i]);if(l!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,i=Object.getOwnPropertySymbols(l);n<i.length;n++)e.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(l,i[n])&&(t[i[n]]=l[i[n]]);return t}var Gl=function(){function l(e,t){e===void 0&&(e=0),t===void 0&&(t=0),this._width=e,this._height=t,this.destroyed=!1,this.internal=!1,this.onResize=new kt("setRealSize"),this.onUpdate=new kt("update"),this.onError=new kt("onError")}return l.prototype.bind=function(e){this.onResize.add(e),this.onUpdate.add(e),this.onError.add(e),(this._width||this._height)&&this.onResize.emit(this._width,this._height)},l.prototype.unbind=function(e){this.onResize.remove(e),this.onUpdate.remove(e),this.onError.remove(e)},l.prototype.resize=function(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.onResize.emit(e,t))},Object.defineProperty(l.prototype,"valid",{get:function(){return!!this._width&&!!this._height},enumerable:!1,configurable:!0}),l.prototype.update=function(){this.destroyed||this.onUpdate.emit()},l.prototype.load=function(){return Promise.resolve(this)},Object.defineProperty(l.prototype,"width",{get:function(){return this._width},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"height",{get:function(){return this._height},enumerable:!1,configurable:!0}),l.prototype.style=function(e,t,i){return!1},l.prototype.dispose=function(){},l.prototype.destroy=function(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)},l.test=function(e,t){return!1},l}(),Xl=function(l){ht(e,l);function e(t,i){var n=this,a=i||{},s=a.width,d=a.height;if(!s||!d)throw new Error("BufferResource width or height invalid");return n=l.call(this,s,d)||this,n.data=t,n}return e.prototype.upload=function(t,i,n){var a=t.gl;a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===me.UNPACK);var s=i.realWidth,d=i.realHeight;return n.width===s&&n.height===d?a.texSubImage2D(i.target,0,0,0,s,d,i.format,n.type,this.data):(n.width=s,n.height=d,a.texImage2D(i.target,0,n.internalFormat,s,d,0,i.format,n.type,this.data)),!0},e.prototype.dispose=function(){this.data=null},e.test=function(t){return t instanceof Float32Array||t instanceof Uint8Array||t instanceof Uint32Array},e}(Gl),HZ={scaleMode:Le.NEAREST,format:H.RGBA,alphaMode:me.NPM},q=function(l){ht(e,l);function e(t,i){t===void 0&&(t=null),i===void 0&&(i=null);var n=l.call(this)||this;i=i||{};var a=i.alphaMode,s=i.mipmap,d=i.anisotropicLevel,h=i.scaleMode,r=i.width,o=i.height,c=i.wrapMode,u=i.format,m=i.type,b=i.target,Z=i.resolution,p=i.resourceOptions;return t&&!(t instanceof Gl)&&(t=ph(t,p),t.internal=!0),n.resolution=Z||U.RESOLUTION,n.width=Math.round((r||0)*n.resolution)/n.resolution,n.height=Math.round((o||0)*n.resolution)/n.resolution,n._mipmap=s!==void 0?s:U.MIPMAP_TEXTURES,n.anisotropicLevel=d!==void 0?d:U.ANISOTROPIC_LEVEL,n._wrapMode=c||U.WRAP_MODE,n._scaleMode=h!==void 0?h:U.SCALE_MODE,n.format=u||H.RGBA,n.type=m||K.UNSIGNED_BYTE,n.target=b||Zi.TEXTURE_2D,n.alphaMode=a!==void 0?a:me.UNPACK,n.uid=pi(),n.touched=0,n.isPowerOfTwo=!1,n._refreshPOT(),n._glTextures={},n.dirtyId=0,n.dirtyStyleId=0,n.cacheId=null,n.valid=r>0&&o>0,n.textureCacheIds=[],n.destroyed=!1,n.resource=null,n._batchEnabled=0,n._batchLocation=0,n.parentTextureArray=null,n.setResource(t),n}return Object.defineProperty(e.prototype,"realWidth",{get:function(){return Math.round(this.width*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"realHeight",{get:function(){return Math.round(this.height*this.resolution)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mipmap",{get:function(){return this._mipmap},set:function(t){this._mipmap!==t&&(this._mipmap=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scaleMode",{get:function(){return this._scaleMode},set:function(t){this._scaleMode!==t&&(this._scaleMode=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wrapMode",{get:function(){return this._wrapMode},set:function(t){this._wrapMode!==t&&(this._wrapMode=t,this.dirtyStyleId++)},enumerable:!1,configurable:!0}),e.prototype.setStyle=function(t,i){var n;return t!==void 0&&t!==this.scaleMode&&(this.scaleMode=t,n=!0),i!==void 0&&i!==this.mipmap&&(this.mipmap=i,n=!0),n&&this.dirtyStyleId++,this},e.prototype.setSize=function(t,i,n){return n=n||this.resolution,this.setRealSize(t*n,i*n,n)},e.prototype.setRealSize=function(t,i,n){return this.resolution=n||this.resolution,this.width=Math.round(t)/this.resolution,this.height=Math.round(i)/this.resolution,this._refreshPOT(),this.update(),this},e.prototype._refreshPOT=function(){this.isPowerOfTwo=rh(this.realWidth)&&rh(this.realHeight)},e.prototype.setResolution=function(t){var i=this.resolution;return i===t?this:(this.resolution=t,this.valid&&(this.width=Math.round(this.width*i)/t,this.height=Math.round(this.height*i)/t,this.emit("update",this)),this._refreshPOT(),this)},e.prototype.setResource=function(t){if(this.resource===t)return this;if(this.resource)throw new Error("Resource can be set only once");return t.bind(this),this.resource=t,this},e.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))},e.prototype.onError=function(t){this.emit("error",this,t)},e.prototype.destroy=function(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete Gi[this.cacheId],delete Ue[this.cacheId],this.cacheId=null),this.dispose(),e.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0},e.prototype.dispose=function(){this.emit("dispose",this)},e.prototype.castToBaseTexture=function(){return this},e.from=function(t,i,n){n===void 0&&(n=U.STRICT_TEXTURE_CACHE);var a=typeof t=="string",s=null;if(a)s=t;else{if(!t._pixiId){var d=i&&i.pixiIdPrefix||"pixiid";t._pixiId=d+"_"+pi()}s=t._pixiId}var h=Gi[s];if(a&&n&&!h)throw new Error('The cacheId "'+s+'" does not exist in BaseTextureCache.');return h||(h=new e(t,i),h.cacheId=s,e.addToCache(h,s)),h},e.fromBuffer=function(t,i,n,a){t=t||new Float32Array(i*n*4);var s=new Xl(t,{width:i,height:n}),d=t instanceof Float32Array?K.FLOAT:K.UNSIGNED_BYTE;return new e(s,Object.assign({},HZ,a||{width:i,height:n,type:d}))},e.addToCache=function(t,i){i&&(t.textureCacheIds.indexOf(i)===-1&&t.textureCacheIds.push(i),Gi[i]&&console.warn("BaseTexture added to the cache with an id ["+i+"] that already had an entry"),Gi[i]=t)},e.removeFromCache=function(t){if(typeof t=="string"){var i=Gi[t];if(i){var n=i.textureCacheIds.indexOf(t);return n>-1&&i.textureCacheIds.splice(n,1),delete Gi[t],i}}else if(t&&t.textureCacheIds){for(var a=0;a<t.textureCacheIds.length;++a)delete Gi[t.textureCacheIds[a]];return t.textureCacheIds.length=0,t}return null},e._globalBatch=0,e}(ol),Gh=function(l){ht(e,l);function e(t,i){var n=this,a=i||{},s=a.width,d=a.height;n=l.call(this,s,d)||this,n.items=[],n.itemDirtyIds=[];for(var h=0;h<t;h++){var r=new q;n.items.push(r),n.itemDirtyIds.push(-2)}return n.length=t,n._load=null,n.baseTexture=null,n}return e.prototype.initFromArray=function(t,i){for(var n=0;n<this.length;n++)t[n]&&(t[n].castToBaseTexture?this.addBaseTextureAt(t[n].castToBaseTexture(),n):t[n]instanceof Gl?this.addResourceAt(t[n],n):this.addResourceAt(ph(t[n],i),n))},e.prototype.dispose=function(){for(var t=0,i=this.length;t<i;t++)this.items[t].destroy();this.items=null,this.itemDirtyIds=null,this._load=null},e.prototype.addResourceAt=function(t,i){if(!this.items[i])throw new Error("Index "+i+" is out of bounds");return t.valid&&!this.valid&&this.resize(t.width,t.height),this.items[i].setResource(t),this},e.prototype.bind=function(t){if(this.baseTexture!==null)throw new Error("Only one base texture per TextureArray is allowed");l.prototype.bind.call(this,t);for(var i=0;i<this.length;i++)this.items[i].parentTextureArray=t,this.items[i].on("update",t.update,t)},e.prototype.unbind=function(t){l.prototype.unbind.call(this,t);for(var i=0;i<this.length;i++)this.items[i].parentTextureArray=null,this.items[i].off("update",t.update,t)},e.prototype.load=function(){var t=this;if(this._load)return this._load;var i=this.items.map(function(a){return a.resource}).filter(function(a){return a}),n=i.map(function(a){return a.load()});return this._load=Promise.all(n).then(function(){var a=t.items[0],s=a.realWidth,d=a.realHeight;return t.resize(s,d),Promise.resolve(t)}),this._load},e}(Gl),JZ=function(l){ht(e,l);function e(t,i){var n=this,a=i||{},s=a.width,d=a.height,h,r;return Array.isArray(t)?(h=t,r=t.length):r=t,n=l.call(this,r,{width:s,height:d})||this,h&&n.initFromArray(h,i),n}return e.prototype.addBaseTextureAt=function(t,i){if(t.resource)this.addResourceAt(t.resource,i);else throw new Error("ArrayResource does not support RenderTexture");return this},e.prototype.bind=function(t){l.prototype.bind.call(this,t),t.target=Zi.TEXTURE_2D_ARRAY},e.prototype.upload=function(t,i,n){var a=this,s=a.length,d=a.itemDirtyIds,h=a.items,r=t.gl;n.dirtyId<0&&r.texImage3D(r.TEXTURE_2D_ARRAY,0,n.internalFormat,this._width,this._height,s,0,i.format,n.type,null);for(var o=0;o<s;o++){var c=h[o];d[o]<c.dirtyId&&(d[o]=c.dirtyId,c.valid&&r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,o,c.resource.width,c.resource.height,1,i.format,n.type,c.resource.source))}return!0},e}(Gh),_e=function(l){ht(e,l);function e(t){var i=this,n=t,a=n.naturalWidth||n.videoWidth||n.width,s=n.naturalHeight||n.videoHeight||n.height;return i=l.call(this,a,s)||this,i.source=t,i.noSubImage=!1,i}return e.crossOrigin=function(t,i,n){n===void 0&&i.indexOf("data:")!==0?t.crossOrigin=IZ(i):n!==!1&&(t.crossOrigin=typeof n=="string"?n:"anonymous")},e.prototype.upload=function(t,i,n,a){var s=t.gl,d=i.realWidth,h=i.realHeight;if(a=a||this.source,a instanceof HTMLImageElement){if(!a.complete||a.naturalWidth===0)return!1}else if(a instanceof HTMLVideoElement&&a.readyState<=1)return!1;return s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===me.UNPACK),!this.noSubImage&&i.target===s.TEXTURE_2D&&n.width===d&&n.height===h?s.texSubImage2D(s.TEXTURE_2D,0,0,0,i.format,n.type,a):(n.width=d,n.height=h,s.texImage2D(i.target,0,n.internalFormat,i.format,n.type,a)),!0},e.prototype.update=function(){if(!this.destroyed){var t=this.source,i=t.naturalWidth||t.videoWidth||t.width,n=t.naturalHeight||t.videoHeight||t.height;this.resize(i,n),l.prototype.update.call(this)}},e.prototype.dispose=function(){this.source=null},e}(Gl),CZ=function(l){ht(e,l);function e(t){return l.call(this,t)||this}return e.test=function(t){var i=globalThis.OffscreenCanvas;return i&&t instanceof i?!0:globalThis.HTMLCanvasElement&&t instanceof HTMLCanvasElement},e}(_e),FZ=function(l){ht(e,l);function e(t,i){var n=this,a=i||{},s=a.width,d=a.height,h=a.autoLoad,r=a.linkBaseTexture;if(t&&t.length!==e.SIDES)throw new Error("Invalid length. Got "+t.length+", expected 6");n=l.call(this,6,{width:s,height:d})||this;for(var o=0;o<e.SIDES;o++)n.items[o].target=Zi.TEXTURE_CUBE_MAP_POSITIVE_X+o;return n.linkBaseTexture=r!==!1,t&&n.initFromArray(t,i),h!==!1&&n.load(),n}return e.prototype.bind=function(t){l.prototype.bind.call(this,t),t.target=Zi.TEXTURE_CUBE_MAP},e.prototype.addBaseTextureAt=function(t,i,n){if(!this.items[i])throw new Error("Index "+i+" is out of bounds");if(!this.linkBaseTexture||t.parentTextureArray||Object.keys(t._glTextures).length>0)if(t.resource)this.addResourceAt(t.resource,i);else throw new Error("CubeResource does not support copying of renderTexture.");else t.target=Zi.TEXTURE_CUBE_MAP_POSITIVE_X+i,t.parentTextureArray=this.baseTexture,this.items[i]=t;return t.valid&&!this.valid&&this.resize(t.realWidth,t.realHeight),this.items[i]=t,this},e.prototype.upload=function(t,i,n){for(var a=this.itemDirtyIds,s=0;s<e.SIDES;s++){var d=this.items[s];(a[s]<d.dirtyId||n.dirtyId<i.dirtyId)&&(d.valid&&d.resource?(d.resource.upload(t,d,n),a[s]=d.dirtyId):a[s]<-1&&(t.gl.texImage2D(d.target,0,n.internalFormat,i.realWidth,i.realHeight,0,i.format,n.type,null),a[s]=-1))}return!0},e.test=function(t){return Array.isArray(t)&&t.length===e.SIDES},e.SIDES=6,e}(Gh),Xh=function(l){ht(e,l);function e(t,i){var n=this;if(i=i||{},!(t instanceof HTMLImageElement)){var a=new Image;_e.crossOrigin(a,t,i.crossorigin),a.src=t,t=a}return n=l.call(this,t)||this,!t.complete&&n._width&&n._height&&(n._width=0,n._height=0),n.url=t.src,n._process=null,n.preserveBitmap=!1,n.createBitmap=(i.createBitmap!==void 0?i.createBitmap:U.CREATE_IMAGE_BITMAP)&&!!globalThis.createImageBitmap,n.alphaMode=typeof i.alphaMode=="number"?i.alphaMode:null,n.bitmap=null,n._load=null,i.autoLoad!==!1&&n.load(),n}return e.prototype.load=function(t){var i=this;return this._load?this._load:(t!==void 0&&(this.createBitmap=t),this._load=new Promise(function(n,a){var s=i.source;i.url=s.src;var d=function(){i.destroyed||(s.onload=null,s.onerror=null,i.resize(s.width,s.height),i._load=null,i.createBitmap?n(i.process()):n(i))};s.complete&&s.src?d():(s.onload=d,s.onerror=function(h){a(h),i.onError.emit(h)})}),this._load)},e.prototype.process=function(){var t=this,i=this.source;if(this._process!==null)return this._process;if(this.bitmap!==null||!globalThis.createImageBitmap)return Promise.resolve(this);var n=globalThis.createImageBitmap,a=!i.crossOrigin||i.crossOrigin==="anonymous";return this._process=fetch(i.src,{mode:a?"cors":"no-cors"}).then(function(s){return s.blob()}).then(function(s){return n(s,0,0,i.width,i.height,{premultiplyAlpha:t.alphaMode===null||t.alphaMode===me.UNPACK?"premultiply":"none"})}).then(function(s){return t.destroyed?Promise.reject():(t.bitmap=s,t.update(),t._process=null,Promise.resolve(t))}),this._process},e.prototype.upload=function(t,i,n){if(typeof this.alphaMode=="number"&&(i.alphaMode=this.alphaMode),!this.createBitmap)return l.prototype.upload.call(this,t,i,n);if(!this.bitmap&&(this.process(),!this.bitmap))return!1;if(l.prototype.upload.call(this,t,i,n,this.bitmap),!this.preserveBitmap){var a=!0,s=i._glTextures;for(var d in s){var h=s[d];if(h!==n&&h.dirtyId!==i.dirtyId){a=!1;break}}a&&(this.bitmap.close&&this.bitmap.close(),this.bitmap=null)}return!0},e.prototype.dispose=function(){this.source.onload=null,this.source.onerror=null,l.prototype.dispose.call(this),this.bitmap&&(this.bitmap.close(),this.bitmap=null),this._process=null,this._load=null},e.test=function(t){return typeof t=="string"||t instanceof HTMLImageElement},e}(_e),UZ=function(l){ht(e,l);function e(t,i){var n=this;return i=i||{},n=l.call(this,U.ADAPTER.createCanvas())||this,n._width=0,n._height=0,n.svg=t,n.scale=i.scale||1,n._overrideWidth=i.width,n._overrideHeight=i.height,n._resolve=null,n._crossorigin=i.crossorigin,n._load=null,i.autoLoad!==!1&&n.load(),n}return e.prototype.load=function(){var t=this;return this._load?this._load:(this._load=new Promise(function(i){if(t._resolve=function(){t.resize(t.source.width,t.source.height),i(t)},e.SVG_XML.test(t.svg.trim())){if(!btoa)throw new Error("Your browser doesn't support base64 conversions.");t.svg="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t.svg)))}t._loadSvg()}),this._load)},e.prototype._loadSvg=function(){var t=this,i=new Image;_e.crossOrigin(i,this.svg,this._crossorigin),i.src=this.svg,i.onerror=function(n){t._resolve&&(i.onerror=null,t.onError.emit(n))},i.onload=function(){if(t._resolve){var n=i.width,a=i.height;if(!n||!a)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");var s=n*t.scale,d=a*t.scale;(t._overrideWidth||t._overrideHeight)&&(s=t._overrideWidth||t._overrideHeight/a*n,d=t._overrideHeight||t._overrideWidth/n*a),s=Math.round(s),d=Math.round(d);var h=t.source;h.width=s,h.height=d,h._pixiId="canvas_"+pi(),h.getContext("2d").drawImage(i,0,0,n,a,0,0,s,d),t._resolve(),t._resolve=null}}},e.getSize=function(t){var i=e.SVG_SIZE.exec(t),n={};return i&&(n[i[1]]=Math.round(parseFloat(i[3])),n[i[5]]=Math.round(parseFloat(i[7]))),n},e.prototype.dispose=function(){l.prototype.dispose.call(this),this._resolve=null,this._crossorigin=null},e.test=function(t,i){return i==="svg"||typeof t=="string"&&t.startsWith("data:image/svg+xml")||typeof t=="string"&&e.SVG_XML.test(t)},e.SVG_XML=/^(<\?xml[^?]+\?>)?\s*(<!--[^(-->)]*-->)?\s*\<svg/m,e.SVG_SIZE=/<svg[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i,e}(_e),kZ=function(l){ht(e,l);function e(t,i){var n=this;if(i=i||{},!(t instanceof HTMLVideoElement)){var a=document.createElement("video");a.setAttribute("preload","auto"),a.setAttribute("webkit-playsinline",""),a.setAttribute("playsinline",""),typeof t=="string"&&(t=[t]);var s=t[0].src||t[0];_e.crossOrigin(a,s,i.crossorigin);for(var d=0;d<t.length;++d){var h=document.createElement("source"),r=t[d],o=r.src,c=r.mime;o=o||t[d];var u=o.split("?").shift().toLowerCase(),m=u.slice(u.lastIndexOf(".")+1);c=c||e.MIME_TYPES[m]||"video/"+m,h.src=o,h.type=c,a.appendChild(h)}t=a}return n=l.call(this,t)||this,n.noSubImage=!0,n._autoUpdate=!0,n._isConnectedToTicker=!1,n._updateFPS=i.updateFPS||0,n._msToNextUpdate=0,n.autoPlay=i.autoPlay!==!1,n._load=null,n._resolve=null,n._onCanPlay=n._onCanPlay.bind(n),n._onError=n._onError.bind(n),i.autoLoad!==!1&&n.load(),n}return e.prototype.update=function(t){if(!this.destroyed){var i=Jt.shared.elapsedMS*this.source.playbackRate;this._msToNextUpdate=Math.floor(this._msToNextUpdate-i),(!this._updateFPS||this._msToNextUpdate<=0)&&(l.prototype.update.call(this),this._msToNextUpdate=this._updateFPS?Math.floor(1e3/this._updateFPS):0)}},e.prototype.load=function(){var t=this;if(this._load)return this._load;var i=this.source;return(i.readyState===i.HAVE_ENOUGH_DATA||i.readyState===i.HAVE_FUTURE_DATA)&&i.width&&i.height&&(i.complete=!0),i.addEventListener("play",this._onPlayStart.bind(this)),i.addEventListener("pause",this._onPlayStop.bind(this)),this._isSourceReady()?this._onCanPlay():(i.addEventListener("canplay",this._onCanPlay),i.addEventListener("canplaythrough",this._onCanPlay),i.addEventListener("error",this._onError,!0)),this._load=new Promise(function(n){t.valid?n(t):(t._resolve=n,i.load())}),this._load},e.prototype._onError=function(t){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(t)},e.prototype._isSourcePlaying=function(){var t=this.source;return!t.paused&&!t.ended&&this._isSourceReady()},e.prototype._isSourceReady=function(){var t=this.source;return t.readyState>2},e.prototype._onPlayStart=function(){this.valid||this._onCanPlay(),this.autoUpdate&&!this._isConnectedToTicker&&(Jt.shared.add(this.update,this),this._isConnectedToTicker=!0)},e.prototype._onPlayStop=function(){this._isConnectedToTicker&&(Jt.shared.remove(this.update,this),this._isConnectedToTicker=!1)},e.prototype._onCanPlay=function(){var t=this.source;t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay);var i=this.valid;this.resize(t.videoWidth,t.videoHeight),!i&&this._resolve&&(this._resolve(this),this._resolve=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&t.play()},e.prototype.dispose=function(){this._isConnectedToTicker&&(Jt.shared.remove(this.update,this),this._isConnectedToTicker=!1);var t=this.source;t&&(t.removeEventListener("error",this._onError,!0),t.pause(),t.src="",t.load()),l.prototype.dispose.call(this)},Object.defineProperty(e.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?(Jt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._isSourcePlaying()&&(Jt.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"updateFPS",{get:function(){return this._updateFPS},set:function(t){t!==this._updateFPS&&(this._updateFPS=t)},enumerable:!1,configurable:!0}),e.test=function(t,i){return globalThis.HTMLVideoElement&&t instanceof HTMLVideoElement||e.TYPES.indexOf(i)>-1},e.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],e.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"},e}(_e),NZ=function(l){ht(e,l);function e(t){return l.call(this,t)||this}return e.test=function(t){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&t instanceof ImageBitmap},e}(_e);Ya.push(Xh,NZ,CZ,kZ,UZ,Xl,FZ,JZ);var MZ=function(l){ht(e,l);function e(){return l!==null&&l.apply(this,arguments)||this}return e.prototype.upload=function(t,i,n){var a=t.gl;a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.alphaMode===me.UNPACK);var s=i.realWidth,d=i.realHeight;return n.width===s&&n.height===d?a.texSubImage2D(i.target,0,0,0,s,d,i.format,n.type,this.data):(n.width=s,n.height=d,a.texImage2D(i.target,0,n.internalFormat,s,d,0,i.format,n.type,this.data)),!0},e}(Xl),Ha=function(){function l(e,t){this.width=Math.round(e||100),this.height=Math.round(t||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 kt("disposeFramebuffer"),this.multisample=Xt.NONE}return Object.defineProperty(l.prototype,"colorTexture",{get:function(){return this.colorTextures[0]},enumerable:!1,configurable:!0}),l.prototype.addColorTexture=function(e,t){return e===void 0&&(e=0),this.colorTextures[e]=t||new q(null,{scaleMode:Le.NEAREST,resolution:1,mipmap:ue.OFF,width:this.width,height:this.height}),this.dirtyId++,this.dirtyFormat++,this},l.prototype.addDepthTexture=function(e){return this.depthTexture=e||new q(new MZ(null,{width:this.width,height:this.height}),{scaleMode:Le.NEAREST,resolution:1,width:this.width,height:this.height,mipmap:ue.OFF,format:H.DEPTH_COMPONENT,type:K.UNSIGNED_SHORT}),this.dirtyId++,this.dirtyFormat++,this},l.prototype.enableDepth=function(){return this.depth=!0,this.dirtyId++,this.dirtyFormat++,this},l.prototype.enableStencil=function(){return this.stencil=!0,this.dirtyId++,this.dirtyFormat++,this},l.prototype.resize=function(e,t){if(e=Math.round(e),t=Math.round(t),!(e===this.width&&t===this.height)){this.width=e,this.height=t,this.dirtyId++,this.dirtySize++;for(var i=0;i<this.colorTextures.length;i++){var n=this.colorTextures[i],a=n.resolution;n.setSize(e/a,t/a)}if(this.depthTexture){var a=this.depthTexture.resolution;this.depthTexture.setSize(e/a,t/a)}}},l.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},l.prototype.destroyDepthTexture=function(){this.depthTexture&&(this.depthTexture.destroy(),this.depthTexture=null,++this.dirtyId,++this.dirtyFormat)},l}(),yh=function(l){ht(e,l);function e(t){t===void 0&&(t={});var i=this;if(typeof t=="number"){var n=arguments[0],a=arguments[1],s=arguments[2],d=arguments[3];t={width:n,height:a,scaleMode:s,resolution:d}}return t.width=t.width||100,t.height=t.height||100,t.multisample=t.multisample!==void 0?t.multisample:Xt.NONE,i=l.call(this,null,t)||this,i.mipmap=ue.OFF,i.valid=!0,i.clearColor=[0,0,0,0],i.framebuffer=new Ha(i.realWidth,i.realHeight).addColorTexture(0,i),i.framebuffer.multisample=t.multisample,i.maskStack=[],i.filterStack=[{}],i}return e.prototype.resize=function(t,i){this.framebuffer.resize(t*this.resolution,i*this.resolution),this.setRealSize(this.framebuffer.width,this.framebuffer.height)},e.prototype.dispose=function(){this.framebuffer.dispose(),l.prototype.dispose.call(this)},e.prototype.destroy=function(){l.prototype.destroy.call(this),this.framebuffer.destroyDepthTexture(),this.framebuffer=null},e}(q),Vh=function(){function l(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.uvsFloat32=new Float32Array(8)}return l.prototype.set=function(e,t,i){var n=t.width,a=t.height;if(i){var s=e.width/2/n,d=e.height/2/a,h=e.x/n+s,r=e.y/a+d;i=mt.add(i,mt.NW),this.x0=h+s*mt.uX(i),this.y0=r+d*mt.uY(i),i=mt.add(i,2),this.x1=h+s*mt.uX(i),this.y1=r+d*mt.uY(i),i=mt.add(i,2),this.x2=h+s*mt.uX(i),this.y2=r+d*mt.uY(i),i=mt.add(i,2),this.x3=h+s*mt.uX(i),this.y3=r+d*mt.uY(i)}else this.x0=e.x/n,this.y0=e.y/a,this.x1=(e.x+e.width)/n,this.y1=e.y/a,this.x2=(e.x+e.width)/n,this.y2=(e.y+e.height)/a,this.x3=e.x/n,this.y3=(e.y+e.height)/a;this.uvsFloat32[0]=this.x0,this.uvsFloat32[1]=this.y0,this.uvsFloat32[2]=this.x1,this.uvsFloat32[3]=this.y1,this.uvsFloat32[4]=this.x2,this.uvsFloat32[5]=this.y2,this.uvsFloat32[6]=this.x3,this.uvsFloat32[7]=this.y3},l.prototype.toString=function(){return"[@pixi/core:TextureUvs "+("x0="+this.x0+" y0="+this.y0+" ")+("x1="+this.x1+" y1="+this.y1+" x2="+this.x2+" ")+("y2="+this.y2+" x3="+this.x3+" y3="+this.y3)+"]"},l}(),Rh=new Vh;function mn(l){l.destroy=function(){},l.on=function(){},l.once=function(){},l.emit=function(){}}var z=function(l){ht(e,l);function e(t,i,n,a,s,d){var h=l.call(this)||this;if(h.noFrame=!1,i||(h.noFrame=!0,i=new j(0,0,1,1)),t instanceof e&&(t=t.baseTexture),h.baseTexture=t,h._frame=i,h.trim=a,h.valid=!1,h._uvs=Rh,h.uvMatrix=null,h.orig=n||i,h._rotate=Number(s||0),s===!0)h._rotate=2;else if(h._rotate%2!==0)throw new Error("attempt to use diamond-shaped UVs. If you are sure, set rotation manually");return h.defaultAnchor=d?new _(d.x,d.y):new _(0,0),h._updateID=0,h.textureCacheIds=[],t.valid?h.noFrame?t.valid&&h.onBaseTextureUpdated(t):h.frame=i:t.once("loaded",h.onBaseTextureUpdated,h),h.noFrame&&t.on("update",h.onBaseTextureUpdated,h),h}return e.prototype.update=function(){this.baseTexture.resource&&this.baseTexture.resource.update()},e.prototype.onBaseTextureUpdated=function(t){if(this.noFrame){if(!this.baseTexture.valid)return;this._frame.width=t.width,this._frame.height=t.height,this.valid=!0,this.updateUvs()}else this.frame=this._frame;this.emit("update",this)},e.prototype.destroy=function(t){if(this.baseTexture){if(t){var i=this.baseTexture.resource;i&&i.url&&Ue[i.url]&&e.removeFromCache(i.url),this.baseTexture.destroy()}this.baseTexture.off("loaded",this.onBaseTextureUpdated,this),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture=null}this._frame=null,this._uvs=null,this.trim=null,this.orig=null,this.valid=!1,e.removeFromCache(this),this.textureCacheIds=null},e.prototype.clone=function(){var t=this._frame.clone(),i=this._frame===this.orig?t:this.orig.clone(),n=new e(this.baseTexture,!this.noFrame&&t,i,this.trim&&this.trim.clone(),this.rotate,this.defaultAnchor);return this.noFrame&&(n._frame=t),n},e.prototype.updateUvs=function(){this._uvs===Rh&&(this._uvs=new Vh),this._uvs.set(this._frame,this.baseTexture,this.rotate),this._updateID++},e.from=function(t,i,n){i===void 0&&(i={}),n===void 0&&(n=U.STRICT_TEXTURE_CACHE);var a=typeof t=="string",s=null;if(a)s=t;else if(t instanceof q){if(!t.cacheId){var d=i&&i.pixiIdPrefix||"pixiid";t.cacheId=d+"-"+pi(),q.addToCache(t,t.cacheId)}s=t.cacheId}else{if(!t._pixiId){var d=i&&i.pixiIdPrefix||"pixiid";t._pixiId=d+"_"+pi()}s=t._pixiId}var h=Ue[s];if(a&&n&&!h)throw new Error('The cacheId "'+s+'" does not exist in TextureCache.');return!h&&!(t instanceof q)?(i.resolution||(i.resolution=cn(t)),h=new e(new q(t,i)),h.baseTexture.cacheId=s,q.addToCache(h.baseTexture,s),e.addToCache(h,s)):!h&&t instanceof q&&(h=new e(t),e.addToCache(h,s)),h},e.fromURL=function(t,i){var n=Object.assign({autoLoad:!1},i==null?void 0:i.resourceOptions),a=e.from(t,Object.assign({resourceOptions:n},i),!1),s=a.baseTexture.resource;return a.baseTexture.valid?Promise.resolve(a):s.load().then(function(){return Promise.resolve(a)})},e.fromBuffer=function(t,i,n,a){return new e(q.fromBuffer(t,i,n,a))},e.fromLoader=function(t,i,n,a){var s=new q(t,Object.assign({scaleMode:U.SCALE_MODE,resolution:cn(i)},a)),d=s.resource;d instanceof Xh&&(d.url=i);var h=new e(s);return n||(n=i),q.addToCache(h.baseTexture,n),e.addToCache(h,n),n!==i&&(q.addToCache(h.baseTexture,i),e.addToCache(h,i)),h.baseTexture.valid?Promise.resolve(h):new Promise(function(r){h.baseTexture.once("loaded",function(){return r(h)})})},e.addToCache=function(t,i){i&&(t.textureCacheIds.indexOf(i)===-1&&t.textureCacheIds.push(i),Ue[i]&&console.warn("Texture added to the cache with an id ["+i+"] that already had an entry"),Ue[i]=t)},e.removeFromCache=function(t){if(typeof t=="string"){var i=Ue[t];if(i){var n=i.textureCacheIds.indexOf(t);return n>-1&&i.textureCacheIds.splice(n,1),delete Ue[t],i}}else if(t&&t.textureCacheIds){for(var a=0;a<t.textureCacheIds.length;++a)Ue[t.textureCacheIds[a]]===t&&delete Ue[t.textureCacheIds[a]];return t.textureCacheIds.length=0,t}return null},Object.defineProperty(e.prototype,"resolution",{get:function(){return this.baseTexture.resolution},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"frame",{get:function(){return this._frame},set:function(t){this._frame=t,this.noFrame=!1;var i=t.x,n=t.y,a=t.width,s=t.height,d=i+a>this.baseTexture.width,h=n+s>this.baseTexture.height;if(d||h){var r=d&&h?"and":"or",o="X: "+i+" + "+a+" = "+(i+a)+" > "+this.baseTexture.width,c="Y: "+n+" + "+s+" = "+(n+s)+" > "+this.baseTexture.height;throw new Error("Texture Error: frame does not fit inside the base Texture dimensions: "+(o+" "+r+" "+c))}this.valid=a&&s&&this.baseTexture.valid,!this.trim&&!this.rotate&&(this.orig=t),this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rotate",{get:function(){return this._rotate},set:function(t){this._rotate=t,this.valid&&this.updateUvs()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"width",{get:function(){return this.orig.width},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.orig.height},enumerable:!1,configurable:!0}),e.prototype.castToBaseTexture=function(){return this.baseTexture},Object.defineProperty(e,"EMPTY",{get:function(){return e._EMPTY||(e._EMPTY=new e(new q),mn(e._EMPTY),mn(e._EMPTY.baseTexture)),e._EMPTY},enumerable:!1,configurable:!0}),Object.defineProperty(e,"WHITE",{get:function(){if(!e._WHITE){var t=U.ADAPTER.createCanvas(16,16),i=t.getContext("2d");t.width=16,t.height=16,i.fillStyle="white",i.fillRect(0,0,16,16),e._WHITE=new e(q.from(t)),mn(e._WHITE),mn(e._WHITE.baseTexture)}return e._WHITE},enumerable:!1,configurable:!0}),e}(ol),Xi=function(l){ht(e,l);function e(t,i){var n=l.call(this,t,i)||this;return n.valid=!0,n.filterFrame=null,n.filterPoolKey=null,n.updateUvs(),n}return Object.defineProperty(e.prototype,"framebuffer",{get:function(){return this.baseTexture.framebuffer},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"multisample",{get:function(){return this.framebuffer.multisample},set:function(t){this.framebuffer.multisample=t},enumerable:!1,configurable:!0}),e.prototype.resize=function(t,i,n){n===void 0&&(n=!0);var a=this.baseTexture.resolution,s=Math.round(t*a)/a,d=Math.round(i*a)/a;this.valid=s>0&&d>0,this._frame.width=this.orig.width=s,this._frame.height=this.orig.height=d,n&&this.baseTexture.resize(s,d),this.updateUvs()},e.prototype.setResolution=function(t){var i=this.baseTexture;i.resolution!==t&&(i.setResolution(t),this.resize(i.width,i.height,!1))},e.create=function(t){for(var i=arguments,n=[],a=1;a<arguments.length;a++)n[a-1]=i[a];return typeof t=="number"&&(pe("6.0.0","Arguments (width, height, scaleMode, resolution) have been deprecated."),t={width:t,height:n[0],scaleMode:n[1],resolution:n[2]}),new e(new yh(t))},e}(z),KZ=function(){function l(e){this.texturePool={},this.textureOptions=e||{},this.enableFullScreen=!1,this._pixelsWidth=0,this._pixelsHeight=0}return l.prototype.createTexture=function(e,t,i){i===void 0&&(i=Xt.NONE);var n=new yh(Object.assign({width:e,height:t,resolution:1,multisample:i},this.textureOptions));return new Xi(n)},l.prototype.getOptimalTexture=function(e,t,i,n){i===void 0&&(i=1),n===void 0&&(n=Xt.NONE);var a;e=Math.ceil(e*i-1e-6),t=Math.ceil(t*i-1e-6),!this.enableFullScreen||e!==this._pixelsWidth||t!==this._pixelsHeight?(e=rn(e),t=rn(t),a=((e&65535)<<16|t&65535)>>>0,n>1&&(a+=n*4294967296)):a=n>1?-n:-1,this.texturePool[a]||(this.texturePool[a]=[]);var s=this.texturePool[a].pop();return s||(s=this.createTexture(e,t,n)),s.filterPoolKey=a,s.setResolution(i),s},l.prototype.getFilterTexture=function(e,t,i){var n=this.getOptimalTexture(e.width,e.height,t||e.resolution,i||Xt.NONE);return n.filterFrame=e.filterFrame,n},l.prototype.returnTexture=function(e){var t=e.filterPoolKey;e.filterFrame=null,this.texturePool[t].push(e)},l.prototype.returnFilterTexture=function(e){this.returnTexture(e)},l.prototype.clear=function(e){if(e=e!==!1,e)for(var t in this.texturePool){var i=this.texturePool[t];if(i)for(var n=0;n<i.length;n++)i[n].destroy(!0)}this.texturePool={}},l.prototype.setScreenSize=function(e){if(!(e.width===this._pixelsWidth&&e.height===this._pixelsHeight)){this.enableFullScreen=e.width>0&&e.height>0;for(var t in this.texturePool)if(Number(t)<0){var i=this.texturePool[t];if(i)for(var n=0;n<i.length;n++)i[n].destroy(!0);this.texturePool[t]=[]}this._pixelsWidth=e.width,this._pixelsHeight=e.height}},l.SCREEN_KEY=-1,l}(),Wh=function(){function l(e,t,i,n,a,s,d){t===void 0&&(t=0),i===void 0&&(i=!1),n===void 0&&(n=K.FLOAT),this.buffer=e,this.size=t,this.normalized=i,this.type=n,this.stride=a,this.start=s,this.instance=d}return l.prototype.destroy=function(){this.buffer=null},l.from=function(e,t,i,n,a){return new l(e,t,i,n,a)},l}(),wZ=0,Yt=function(){function l(e,t,i){t===void 0&&(t=!0),i===void 0&&(i=!1),this.data=e||new Float32Array(1),this._glBuffers={},this._updateID=0,this.index=i,this.static=t,this.id=wZ++,this.disposeRunner=new kt("disposeBuffer")}return l.prototype.update=function(e){e instanceof Array&&(e=new Float32Array(e)),this.data=e||this.data,this._updateID++},l.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},l.prototype.destroy=function(){this.dispose(),this.data=null},Object.defineProperty(l.prototype,"index",{get:function(){return this.type===Se.ELEMENT_ARRAY_BUFFER},set:function(e){this.type=e?Se.ELEMENT_ARRAY_BUFFER:Se.ARRAY_BUFFER},enumerable:!1,configurable:!0}),l.from=function(e){return e instanceof Array&&(e=new Float32Array(e)),new l(e)},l}(),PZ={Float32Array,Uint32Array,Int32Array,Uint8Array};function zZ(l,e){for(var t=0,i=0,n={},a=0;a<l.length;a++)i+=e[a],t+=l[a].length;for(var s=new ArrayBuffer(t*4),d=null,h=0,a=0;a<l.length;a++){var r=e[a],o=l[a],c=hh(o);n[c]||(n[c]=new PZ[c](s)),d=n[c];for(var u=0;u<o.length;u++){var m=(u/r|0)*i+h,b=u%r;d[m+b]=o[u]}h+=r}return new Float32Array(s)}var fh={5126:4,5123:2,5121:1},EZ=0,BZ={Float32Array,Uint32Array,Int32Array,Uint8Array,Uint16Array},yl=function(){function l(e,t){e===void 0&&(e=[]),t===void 0&&(t={}),this.buffers=e,this.indexBuffer=null,this.attributes=t,this.glVertexArrayObjects={},this.id=EZ++,this.instanced=!1,this.instanceCount=1,this.disposeRunner=new kt("disposeGeometry"),this.refCount=0}return l.prototype.addAttribute=function(e,t,i,n,a,s,d,h){if(i===void 0&&(i=0),n===void 0&&(n=!1),h===void 0&&(h=!1),!t)throw new Error("You must pass a buffer when creating an attribute");t instanceof Yt||(t instanceof Array&&(t=new Float32Array(t)),t=new Yt(t));var r=e.split("|");if(r.length>1){for(var o=0;o<r.length;o++)this.addAttribute(r[o],t,i,n,a);return this}var c=this.buffers.indexOf(t);return c===-1&&(this.buffers.push(t),c=this.buffers.length-1),this.attributes[e]=new Wh(c,i,n,a,s,d,h),this.instanced=this.instanced||h,this},l.prototype.getAttribute=function(e){return this.attributes[e]},l.prototype.getBuffer=function(e){return this.buffers[this.getAttribute(e).buffer]},l.prototype.addIndex=function(e){return e instanceof Yt||(e instanceof Array&&(e=new Uint16Array(e)),e=new Yt(e)),e.type=Se.ELEMENT_ARRAY_BUFFER,this.indexBuffer=e,this.buffers.indexOf(e)===-1&&this.buffers.push(e),this},l.prototype.getIndex=function(){return this.indexBuffer},l.prototype.interleave=function(){if(this.buffers.length===1||this.buffers.length===2&&this.indexBuffer)return this;var e=[],t=[],i=new Yt,n;for(n in this.attributes){var a=this.attributes[n],s=this.buffers[a.buffer];e.push(s.data),t.push(a.size*fh[a.type]/4),a.buffer=0}for(i.data=zZ(e,t),n=0;n<this.buffers.length;n++)this.buffers[n]!==this.indexBuffer&&this.buffers[n].destroy();return this.buffers=[i],this.indexBuffer&&this.buffers.push(this.indexBuffer),this},l.prototype.getSize=function(){for(var e in this.attributes){var t=this.attributes[e],i=this.buffers[t.buffer];return i.data.length/(t.stride/4||t.size)}return 0},l.prototype.dispose=function(){this.disposeRunner.emit(this,!1)},l.prototype.destroy=function(){this.dispose(),this.buffers=null,this.indexBuffer=null,this.attributes=null},l.prototype.clone=function(){for(var e=new l,t=0;t<this.buffers.length;t++)e.buffers[t]=new Yt(this.buffers[t].data.slice(0));for(var t in this.attributes){var i=this.attributes[t];e.attributes[t]=new Wh(i.buffer,i.size,i.normalized,i.type,i.stride,i.start,i.instance)}return this.indexBuffer&&(e.indexBuffer=e.buffers[this.buffers.indexOf(this.indexBuffer)],e.indexBuffer.type=Se.ELEMENT_ARRAY_BUFFER),e},l.merge=function(e){for(var t=new l,i=[],n=[],a=[],s,d=0;d<e.length;d++){s=e[d];for(var h=0;h<s.buffers.length;h++)n[h]=n[h]||0,n[h]+=s.buffers[h].data.length,a[h]=0}for(var d=0;d<s.buffers.length;d++)i[d]=new BZ[hh(s.buffers[d].data)](n[d]),t.buffers[d]=new Yt(i[d]);for(var d=0;d<e.length;d++){s=e[d];for(var h=0;h<s.buffers.length;h++)i[h].set(s.buffers[h].data,a[h]),a[h]+=s.buffers[h].data.length}if(t.attributes=s.attributes,s.indexBuffer){t.indexBuffer=t.buffers[s.buffers.indexOf(s.indexBuffer)],t.indexBuffer.type=Se.ELEMENT_ARRAY_BUFFER;for(var r=0,o=0,c=0,u=0,d=0;d<s.buffers.length;d++)if(s.buffers[d]!==s.indexBuffer){u=d;break}for(var d in s.attributes){var m=s.attributes[d];(m.buffer|0)===u&&(o+=m.size*fh[m.type]/4)}for(var d=0;d<e.length;d++){for(var b=e[d].indexBuffer.data,h=0;h<b.length;h++)t.indexBuffer.data[h+c]+=r;r+=e[d].buffers[u].data.length/o,c+=b.length}}return t},l}(),QZ=function(l){ht(e,l);function e(){var t=l.call(this)||this;return t.addAttribute("aVertexPosition",new Float32Array([0,0,1,0,1,1,0,1])).addIndex([0,1,3,2]),t}return e}(yl),Lh=function(l){ht(e,l);function e(){var t=l.call(this)||this;return t.vertices=new Float32Array([-1,-1,1,-1,1,1,-1,1]),t.uvs=new Float32Array([0,0,1,0,1,1,0,1]),t.vertexBuffer=new Yt(t.vertices),t.uvBuffer=new Yt(t.uvs),t.addAttribute("aVertexPosition",t.vertexBuffer).addAttribute("aTextureCoord",t.uvBuffer).addIndex([0,1,2,0,2,3]),t}return e.prototype.map=function(t,i){var n=0,a=0;return this.uvs[0]=n,this.uvs[1]=a,this.uvs[2]=n+i.width/t.width,this.uvs[3]=a,this.uvs[4]=n+i.width/t.width,this.uvs[5]=a+i.height/t.height,this.uvs[6]=n,this.uvs[7]=a+i.height/t.height,n=i.x,a=i.y,this.vertices[0]=n,this.vertices[1]=a,this.vertices[2]=n+i.width,this.vertices[3]=a,this.vertices[4]=n+i.width,this.vertices[5]=a+i.height,this.vertices[6]=n,this.vertices[7]=a+i.height,this.invalidate(),this},e.prototype.invalidate=function(){return this.vertexBuffer._updateID++,this.uvBuffer._updateID++,this},e}(yl),_Z=0,yi=function(){function l(e,t,i){this.group=!0,this.syncUniforms={},this.dirtyId=0,this.id=_Z++,this.static=!!t,this.ubo=!!i,e instanceof Yt?(this.buffer=e,this.buffer.type=Se.UNIFORM_BUFFER,this.autoManage=!1,this.ubo=!0):(this.uniforms=e,this.ubo&&(this.buffer=new Yt(new Float32Array(1)),this.buffer.type=Se.UNIFORM_BUFFER,this.autoManage=!0))}return l.prototype.update=function(){this.dirtyId++,!this.autoManage&&this.buffer&&this.buffer.update()},l.prototype.add=function(e,t,i){if(!this.ubo)this.uniforms[e]=new l(t,i);else throw new Error("[UniformGroup] uniform groups in ubo mode cannot be modified, or have uniform groups nested in them")},l.from=function(e,t,i){return new l(e,t,i)},l.uboFrom=function(e,t){return new l(e,t??!0,!0)},l}(),jZ=function(){function l(){this.renderTexture=null,this.target=null,this.legacy=!1,this.resolution=1,this.multisample=Xt.NONE,this.sourceFrame=new j,this.destinationFrame=new j,this.bindingSourceFrame=new j,this.bindingDestinationFrame=new j,this.filters=[],this.transform=null}return l.prototype.clear=function(){this.target=null,this.filters=null,this.renderTexture=null},l}(),Zn=[new _,new _,new _,new _],Ja=new vt,DZ=function(){function l(e){this.renderer=e,this.defaultFilterStack=[{}],this.texturePool=new KZ,this.texturePool.setScreenSize(e.view),this.statePool=[],this.quad=new QZ,this.quadUv=new Lh,this.tempRect=new j,this.activeState={},this.globalUniforms=new yi({outputFrame:new j,inputSize:new Float32Array(4),inputPixel:new Float32Array(4),inputClamp:new Float32Array(4),resolution:1,filterArea:new Float32Array(4),filterClamp:new Float32Array(4)},!0),this.forceClear=!1,this.useMaxPadding=!1}return l.prototype.push=function(e,t){for(var i,n,a=this.renderer,s=this.defaultFilterStack,d=this.statePool.pop()||new jZ,h=this.renderer.renderTexture,r=t[0].resolution,o=t[0].multisample,c=t[0].padding,u=t[0].autoFit,m=(i=t[0].legacy)!==null&&i!==void 0?i:!0,b=1;b<t.length;b++){var Z=t[b];r=Math.min(r,Z.resolution),o=Math.min(o,Z.multisample),c=this.useMaxPadding?Math.max(c,Z.padding):c+Z.padding,u=u&&Z.autoFit,m=m||((n=Z.legacy)!==null&&n!==void 0?n:!0)}s.length===1&&(this.defaultFilterStack[0].renderTexture=h.current),s.push(d),d.resolution=r,d.multisample=o,d.legacy=m,d.target=e,d.sourceFrame.copyFrom(e.filterArea||e.getBounds(!0)),d.sourceFrame.pad(c);var p=this.tempRect.copyFrom(h.sourceFrame);a.projection.transform&&this.transformAABB(Ja.copyFrom(a.projection.transform).invert(),p),u?(d.sourceFrame.fit(p),(d.sourceFrame.width<=0||d.sourceFrame.height<=0)&&(d.sourceFrame.width=0,d.sourceFrame.height=0)):d.sourceFrame.intersects(p)||(d.sourceFrame.width=0,d.sourceFrame.height=0),this.roundFrame(d.sourceFrame,h.current?h.current.resolution:a.resolution,h.sourceFrame,h.destinationFrame,a.projection.transform),d.renderTexture=this.getOptimalFilterTexture(d.sourceFrame.width,d.sourceFrame.height,r,o),d.filters=t,d.destinationFrame.width=d.renderTexture.width,d.destinationFrame.height=d.renderTexture.height;var G=this.tempRect;G.x=0,G.y=0,G.width=d.sourceFrame.width,G.height=d.sourceFrame.height,d.renderTexture.filterFrame=d.sourceFrame,d.bindingSourceFrame.copyFrom(h.sourceFrame),d.bindingDestinationFrame.copyFrom(h.destinationFrame),d.transform=a.projection.transform,a.projection.transform=null,h.bind(d.renderTexture,d.sourceFrame,G),a.framebuffer.clear(0,0,0,0)},l.prototype.pop=function(){var e=this.defaultFilterStack,t=e.pop(),i=t.filters;this.activeState=t;var n=this.globalUniforms.uniforms;n.outputFrame=t.sourceFrame,n.resolution=t.resolution;var a=n.inputSize,s=n.inputPixel,d=n.inputClamp;if(a[0]=t.destinationFrame.width,a[1]=t.destinationFrame.height,a[2]=1/a[0],a[3]=1/a[1],s[0]=Math.round(a[0]*t.resolution),s[1]=Math.round(a[1]*t.resolution),s[2]=1/s[0],s[3]=1/s[1],d[0]=.5*s[2],d[1]=.5*s[3],d[2]=t.sourceFrame.width*a[2]-.5*s[2],d[3]=t.sourceFrame.height*a[3]-.5*s[3],t.legacy){var h=n.filterArea;h[0]=t.destinationFrame.width,h[1]=t.destinationFrame.height,h[2]=t.sourceFrame.x,h[3]=t.sourceFrame.y,n.filterClamp=n.inputClamp}this.globalUniforms.update();var r=e[e.length-1];if(this.renderer.framebuffer.blit(),i.length===1)i[0].apply(this,t.renderTexture,r.renderTexture,Ze.BLEND,t),this.returnFilterTexture(t.renderTexture);else{var o=t.renderTexture,c=this.getOptimalFilterTexture(o.width,o.height,t.resolution);c.filterFrame=o.filterFrame;var u=0;for(u=0;u<i.length-1;++u){u===1&&t.multisample>1&&(c=this.getOptimalFilterTexture(o.width,o.height,t.resolution),c.filterFrame=o.filterFrame),i[u].apply(this,o,c,Ze.CLEAR,t);var m=o;o=c,c=m}i[u].apply(this,o,r.renderTexture,Ze.BLEND,t),u>1&&t.multisample>1&&this.returnFilterTexture(t.renderTexture),this.returnFilterTexture(o),this.returnFilterTexture(c)}t.clear(),this.statePool.push(t)},l.prototype.bindAndClear=function(e,t){t===void 0&&(t=Ze.CLEAR);var i=this.renderer,n=i.renderTexture,a=i.state;if(e===this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?this.renderer.projection.transform=this.activeState.transform:this.renderer.projection.transform=null,e&&e.filterFrame){var s=this.tempRect;s.x=0,s.y=0,s.width=e.filterFrame.width,s.height=e.filterFrame.height,n.bind(e,e.filterFrame,s)}else e!==this.defaultFilterStack[this.defaultFilterStack.length-1].renderTexture?n.bind(e):this.renderer.renderTexture.bind(e,this.activeState.bindingSourceFrame,this.activeState.bindingDestinationFrame);var d=a.stateId&1||this.forceClear;(t===Ze.CLEAR||t===Ze.BLIT&&d)&&this.renderer.framebuffer.clear(0,0,0,0)},l.prototype.applyFilter=function(e,t,i,n){var a=this.renderer;a.state.set(e.state),this.bindAndClear(i,n),e.uniforms.uSampler=t,e.uniforms.filterGlobals=this.globalUniforms,a.shader.bind(e),e.legacy=!!e.program.attributeData.aTextureCoord,e.legacy?(this.quadUv.map(t._frame,t.filterFrame),a.geometry.bind(this.quadUv),a.geometry.draw(ce.TRIANGLES)):(a.geometry.bind(this.quad),a.geometry.draw(ce.TRIANGLE_STRIP))},l.prototype.calculateSpriteMatrix=function(e,t){var i=this.activeState,n=i.sourceFrame,a=i.destinationFrame,s=t._texture.orig,d=e.set(a.width,0,0,a.height,n.x,n.y),h=t.worldTransform.copyTo(vt.TEMP_MATRIX);return h.invert(),d.prepend(h),d.scale(1/s.width,1/s.height),d.translate(t.anchor.x,t.anchor.y),d},l.prototype.destroy=function(){this.renderer=null,this.texturePool.clear(!1)},l.prototype.getOptimalFilterTexture=function(e,t,i,n){return i===void 0&&(i=1),n===void 0&&(n=Xt.NONE),this.texturePool.getOptimalTexture(e,t,i,n)},l.prototype.getFilterTexture=function(e,t,i){if(typeof e=="number"){var n=e;e=t,t=n}e=e||this.activeState.renderTexture;var a=this.texturePool.getOptimalTexture(e.width,e.height,t||e.resolution,i||Xt.NONE);return a.filterFrame=e.filterFrame,a},l.prototype.returnFilterTexture=function(e){this.texturePool.returnTexture(e)},l.prototype.emptyPool=function(){this.texturePool.clear(!0)},l.prototype.resize=function(){this.texturePool.setScreenSize(this.renderer.view)},l.prototype.transformAABB=function(e,t){var i=Zn[0],n=Zn[1],a=Zn[2],s=Zn[3];i.set(t.left,t.top),n.set(t.left,t.bottom),a.set(t.right,t.top),s.set(t.right,t.bottom),e.apply(i,i),e.apply(n,n),e.apply(a,a),e.apply(s,s);var d=Math.min(i.x,n.x,a.x,s.x),h=Math.min(i.y,n.y,a.y,s.y),r=Math.max(i.x,n.x,a.x,s.x),o=Math.max(i.y,n.y,a.y,s.y);t.x=d,t.y=h,t.width=r-d,t.height=o-h},l.prototype.roundFrame=function(e,t,i,n,a){if(!(e.width<=0||e.height<=0||i.width<=0||i.height<=0)){if(a){var s=a.a,d=a.b,h=a.c,r=a.d;if((Math.abs(d)>1e-4||Math.abs(h)>1e-4)&&(Math.abs(s)>1e-4||Math.abs(r)>1e-4))return}a=a?Ja.copyFrom(a):Ja.identity(),a.translate(-i.x,-i.y).scale(n.width/i.width,n.height/i.height).translate(n.x,n.y),this.transformAABB(a,e),e.ceil(t),this.transformAABB(a.invert(),e)}},l}(),bn=function(){function l(e){this.renderer=e}return l.prototype.flush=function(){},l.prototype.destroy=function(){this.renderer=null},l.prototype.start=function(){},l.prototype.stop=function(){this.flush()},l.prototype.render=function(e){},l}(),OZ=function(){function l(e){this.renderer=e,this.emptyRenderer=new bn(e),this.currentRenderer=this.emptyRenderer}return l.prototype.setObjectRenderer=function(e){this.currentRenderer!==e&&(this.currentRenderer.stop(),this.currentRenderer=e,this.currentRenderer.start())},l.prototype.flush=function(){this.setObjectRenderer(this.emptyRenderer)},l.prototype.reset=function(){this.setObjectRenderer(this.emptyRenderer)},l.prototype.copyBoundTextures=function(e,t){for(var i=this.renderer.texture.boundTextures,n=t-1;n>=0;--n)e[n]=i[n]||null,e[n]&&(e[n]._batchLocation=n)},l.prototype.boundArray=function(e,t,i,n){for(var a=e.elements,s=e.ids,d=e.count,h=0,r=0;r<d;r++){var o=a[r],c=o._batchLocation;if(c>=0&&c<n&&t[c]===o){s[r]=c;continue}for(;h<n;){var u=t[h];if(u&&u._batchEnabled===i&&u._batchLocation===h){h++;continue}s[r]=h,o._batchLocation=h,t[h]=o;break}}},l.prototype.destroy=function(){this.renderer=null},l}(),xh=0,AZ=function(){function l(e){this.renderer=e,this.webGLVersion=1,this.extensions={},this.supports={uint32Indices:!1},this.handleContextLost=this.handleContextLost.bind(this),this.handleContextRestored=this.handleContextRestored.bind(this),e.view.addEventListener("webglcontextlost",this.handleContextLost,!1),e.view.addEventListener("webglcontextrestored",this.handleContextRestored,!1)}return Object.defineProperty(l.prototype,"isLost",{get:function(){return!this.gl||this.gl.isContextLost()},enumerable:!1,configurable:!0}),l.prototype.contextChange=function(e){this.gl=e,this.renderer.gl=e,this.renderer.CONTEXT_UID=xh++,e.isContextLost()&&e.getExtension("WEBGL_lose_context")&&e.getExtension("WEBGL_lose_context").restoreContext()},l.prototype.initFromContext=function(e){this.gl=e,this.validateContext(e),this.renderer.gl=e,this.renderer.CONTEXT_UID=xh++,this.renderer.runners.contextChange.emit(e)},l.prototype.initFromOptions=function(e){var t=this.createContext(this.renderer.view,e);this.initFromContext(t)},l.prototype.createContext=function(e,t){var i;if(U.PREFER_ENV>=Ce.WEBGL2&&(i=e.getContext("webgl2",t)),i)this.webGLVersion=2;else if(this.webGLVersion=1,i=e.getContext("webgl",t)||e.getContext("experimental-webgl",t),!i)throw new Error("This browser does not support WebGL. Try using the canvas renderer");return this.gl=i,this.getExtensions(),this.gl},l.prototype.getExtensions=function(){var e=this.gl,t={anisotropicFiltering:e.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:e.getExtension("OES_texture_float_linear"),s3tc:e.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:e.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:e.getExtension("WEBGL_compressed_texture_etc"),etc1:e.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:e.getExtension("WEBGL_compressed_texture_atc"),astc:e.getExtension("WEBGL_compressed_texture_astc")};this.webGLVersion===1?Object.assign(this.extensions,t,{drawBuffers:e.getExtension("WEBGL_draw_buffers"),depthTexture:e.getExtension("WEBGL_depth_texture"),loseContext:e.getExtension("WEBGL_lose_context"),vertexArrayObject:e.getExtension("OES_vertex_array_object")||e.getExtension("MOZ_OES_vertex_array_object")||e.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:e.getExtension("OES_element_index_uint"),floatTexture:e.getExtension("OES_texture_float"),floatTextureLinear:e.getExtension("OES_texture_float_linear"),textureHalfFloat:e.getExtension("OES_texture_half_float"),textureHalfFloatLinear:e.getExtension("OES_texture_half_float_linear")}):this.webGLVersion===2&&Object.assign(this.extensions,t,{colorBufferFloat:e.getExtension("EXT_color_buffer_float")})},l.prototype.handleContextLost=function(e){e.preventDefault()},l.prototype.handleContextRestored=function(){this.renderer.runners.contextChange.emit(this.gl)},l.prototype.destroy=function(){var e=this.renderer.view;this.renderer=null,e.removeEventListener("webglcontextlost",this.handleContextLost),e.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext&&this.extensions.loseContext.loseContext()},l.prototype.postrender=function(){this.renderer.renderingToScreen&&this.gl.flush()},l.prototype.validateContext=function(e){var t=e.getContextAttributes(),i="WebGL2RenderingContext"in globalThis&&e instanceof globalThis.WebGL2RenderingContext;i&&(this.webGLVersion=2),t&&!t.stencil&&console.warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");var n=i||!!e.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")},l}(),qZ=function(){function l(e){this.framebuffer=e,this.stencil=null,this.dirtyId=-1,this.dirtyFormat=-1,this.dirtySize=-1,this.multisample=Xt.NONE,this.msaaBuffer=null,this.blitFramebuffer=null,this.mipLevel=0}return l}(),$Z=new j,tb=function(){function l(e){this.renderer=e,this.managedFramebuffers=[],this.unknownFramebuffer=new Ha(10,10),this.msaaSamples=null}return l.prototype.contextChange=function(){var e=this.gl=this.renderer.gl;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.current=this.unknownFramebuffer,this.viewport=new j,this.hasMRT=!0,this.writeDepthTexture=!0,this.disposeAll(!0),this.renderer.context.webGLVersion===1){var t=this.renderer.context.extensions.drawBuffers,i=this.renderer.context.extensions.depthTexture;U.PREFER_ENV===Ce.WEBGL_LEGACY&&(t=null,i=null),t?e.drawBuffers=function(n){return t.drawBuffersWEBGL(n)}:(this.hasMRT=!1,e.drawBuffers=function(){}),i||(this.writeDepthTexture=!1)}else this.msaaSamples=e.getInternalformatParameter(e.RENDERBUFFER,e.RGBA8,e.SAMPLES)},l.prototype.bind=function(e,t,i){i===void 0&&(i=0);var n=this.gl;if(e){var a=e.glFramebuffers[this.CONTEXT_UID]||this.initFramebuffer(e);this.current!==e&&(this.current=e,n.bindFramebuffer(n.FRAMEBUFFER,a.framebuffer)),a.mipLevel!==i&&(e.dirtyId++,e.dirtyFormat++,a.mipLevel=i),a.dirtyId!==e.dirtyId&&(a.dirtyId=e.dirtyId,a.dirtyFormat!==e.dirtyFormat?(a.dirtyFormat=e.dirtyFormat,a.dirtySize=e.dirtySize,this.updateFramebuffer(e,i)):a.dirtySize!==e.dirtySize&&(a.dirtySize=e.dirtySize,this.resizeFramebuffer(e)));for(var s=0;s<e.colorTextures.length;s++){var d=e.colorTextures[s];this.renderer.texture.unbind(d.parentTextureArray||d)}if(e.depthTexture&&this.renderer.texture.unbind(e.depthTexture),t){var h=t.width>>i,r=t.height>>i,o=h/t.width;this.setViewport(t.x*o,t.y*o,h,r)}else{var h=e.width>>i,r=e.height>>i;this.setViewport(0,0,h,r)}}else this.current&&(this.current=null,n.bindFramebuffer(n.FRAMEBUFFER,null)),t?this.setViewport(t.x,t.y,t.width,t.height):this.setViewport(0,0,this.renderer.width,this.renderer.height)},l.prototype.setViewport=function(e,t,i,n){var a=this.viewport;e=Math.round(e),t=Math.round(t),i=Math.round(i),n=Math.round(n),(a.width!==i||a.height!==n||a.x!==e||a.y!==t)&&(a.x=e,a.y=t,a.width=i,a.height=n,this.gl.viewport(e,t,i,n))},Object.defineProperty(l.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}),l.prototype.clear=function(e,t,i,n,a){a===void 0&&(a=ql.COLOR|ql.DEPTH);var s=this.gl;s.clearColor(e,t,i,n),s.clear(a)},l.prototype.initFramebuffer=function(e){var t=this.gl,i=new qZ(t.createFramebuffer());return i.multisample=this.detectSamples(e.multisample),e.glFramebuffers[this.CONTEXT_UID]=i,this.managedFramebuffers.push(e),e.disposeRunner.add(this),i},l.prototype.resizeFramebuffer=function(e){var t=this.gl,i=e.glFramebuffers[this.CONTEXT_UID];i.msaaBuffer&&(t.bindRenderbuffer(t.RENDERBUFFER,i.msaaBuffer),t.renderbufferStorageMultisample(t.RENDERBUFFER,i.multisample,t.RGBA8,e.width,e.height)),i.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,i.stencil),i.msaaBuffer?t.renderbufferStorageMultisample(t.RENDERBUFFER,i.multisample,t.DEPTH24_STENCIL8,e.width,e.height):t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.width,e.height));var n=e.colorTextures,a=n.length;t.drawBuffers||(a=Math.min(a,1));for(var s=0;s<a;s++){var d=n[s],h=d.parentTextureArray||d;this.renderer.texture.bind(h,0)}e.depthTexture&&this.writeDepthTexture&&this.renderer.texture.bind(e.depthTexture,0)},l.prototype.updateFramebuffer=function(e,t){var i=this.gl,n=e.glFramebuffers[this.CONTEXT_UID],a=e.colorTextures,s=a.length;i.drawBuffers||(s=Math.min(s,1)),n.multisample>1&&this.canMultisampleFramebuffer(e)?(n.msaaBuffer=n.msaaBuffer||i.createRenderbuffer(),i.bindRenderbuffer(i.RENDERBUFFER,n.msaaBuffer),i.renderbufferStorageMultisample(i.RENDERBUFFER,n.multisample,i.RGBA8,e.width,e.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 d=[],h=0;h<s;h++){var r=a[h],o=r.parentTextureArray||r;this.renderer.texture.bind(o,0),!(h===0&&n.msaaBuffer)&&(i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+h,r.target,o._glTextures[this.CONTEXT_UID].texture,t),d.push(i.COLOR_ATTACHMENT0+h))}if(d.length>1&&i.drawBuffers(d),e.depthTexture){var c=this.writeDepthTexture;if(c){var u=e.depthTexture;this.renderer.texture.bind(u,0),i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,u._glTextures[this.CONTEXT_UID].texture,t)}}(e.stencil||e.depth)&&!(e.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,e.width,e.height):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,e.width,e.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,n.stencil)):n.stencil&&(i.deleteRenderbuffer(n.stencil),n.stencil=null)},l.prototype.canMultisampleFramebuffer=function(e){return this.renderer.context.webGLVersion!==1&&e.colorTextures.length<=1&&!e.depthTexture},l.prototype.detectSamples=function(e){var t=this.msaaSamples,i=Xt.NONE;if(e<=1||t===null)return i;for(var n=0;n<t.length;n++)if(t[n]<=e){i=t[n];break}return i===1&&(i=Xt.NONE),i},l.prototype.blit=function(e,t,i){var n=this,a=n.current,s=n.renderer,d=n.gl,h=n.CONTEXT_UID;if(s.context.webGLVersion===2&&a){var r=a.glFramebuffers[h];if(r){if(!e){if(!r.msaaBuffer)return;var o=a.colorTextures[0];if(!o)return;r.blitFramebuffer||(r.blitFramebuffer=new Ha(a.width,a.height),r.blitFramebuffer.addColorTexture(0,o)),e=r.blitFramebuffer,e.colorTextures[0]!==o&&(e.colorTextures[0]=o,e.dirtyId++,e.dirtyFormat++),(e.width!==a.width||e.height!==a.height)&&(e.width=a.width,e.height=a.height,e.dirtyId++,e.dirtySize++)}t||(t=$Z,t.width=a.width,t.height=a.height),i||(i=t);var c=t.width===i.width&&t.height===i.height;this.bind(e),d.bindFramebuffer(d.READ_FRAMEBUFFER,r.framebuffer),d.blitFramebuffer(t.left,t.top,t.right,t.bottom,i.left,i.top,i.right,i.bottom,d.COLOR_BUFFER_BIT,c?d.NEAREST:d.LINEAR)}}},l.prototype.disposeFramebuffer=function(e,t){var i=e.glFramebuffers[this.CONTEXT_UID],n=this.gl;if(i){delete e.glFramebuffers[this.CONTEXT_UID];var a=this.managedFramebuffers.indexOf(e);a>=0&&this.managedFramebuffers.splice(a,1),e.disposeRunner.remove(this),t||(n.deleteFramebuffer(i.framebuffer),i.msaaBuffer&&n.deleteRenderbuffer(i.msaaBuffer),i.stencil&&n.deleteRenderbuffer(i.stencil)),i.blitFramebuffer&&i.blitFramebuffer.dispose()}},l.prototype.disposeAll=function(e){var t=this.managedFramebuffers;this.managedFramebuffers=[];for(var i=0;i<t.length;i++)this.disposeFramebuffer(t[i],e)},l.prototype.forceStencil=function(){var e=this.current;if(e){var t=e.glFramebuffers[this.CONTEXT_UID];if(!(!t||t.stencil)){e.stencil=!0;var i=e.width,n=e.height,a=this.gl,s=a.createRenderbuffer();a.bindRenderbuffer(a.RENDERBUFFER,s),t.msaaBuffer?a.renderbufferStorageMultisample(a.RENDERBUFFER,t.multisample,a.DEPTH24_STENCIL8,i,n):a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,i,n),t.stencil=s,a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.RENDERBUFFER,s)}}},l.prototype.reset=function(){this.current=this.unknownFramebuffer,this.viewport=new j},l.prototype.destroy=function(){this.renderer=null},l}(),Ca={5126:4,5123:2,5121:1},eb=function(){function l(e){this.renderer=e,this._activeGeometry=null,this._activeVao=null,this.hasVao=!0,this.hasInstance=!0,this.canUseUInt32ElementIndex=!1,this.managedGeometries={}}return l.prototype.contextChange=function(){this.disposeAll(!0);var e=this.gl=this.renderer.gl,t=this.renderer.context;if(this.CONTEXT_UID=this.renderer.CONTEXT_UID,t.webGLVersion!==2){var i=this.renderer.context.extensions.vertexArrayObject;U.PREFER_ENV===Ce.WEBGL_LEGACY&&(i=null),i?(e.createVertexArray=function(){return i.createVertexArrayOES()},e.bindVertexArray=function(a){return i.bindVertexArrayOES(a)},e.deleteVertexArray=function(a){return i.deleteVertexArrayOES(a)}):(this.hasVao=!1,e.createVertexArray=function(){return null},e.bindVertexArray=function(){return null},e.deleteVertexArray=function(){return null})}if(t.webGLVersion!==2){var n=e.getExtension("ANGLE_instanced_arrays");n?(e.vertexAttribDivisor=function(a,s){return n.vertexAttribDivisorANGLE(a,s)},e.drawElementsInstanced=function(a,s,d,h,r){return n.drawElementsInstancedANGLE(a,s,d,h,r)},e.drawArraysInstanced=function(a,s,d,h){return n.drawArraysInstancedANGLE(a,s,d,h)}):this.hasInstance=!1}this.canUseUInt32ElementIndex=t.webGLVersion===2||!!t.extensions.uint32ElementIndex},l.prototype.bind=function(e,t){t=t||this.renderer.shader.shader;var i=this.gl,n=e.glVertexArrayObjects[this.CONTEXT_UID],a=!1;n||(this.managedGeometries[e.id]=e,e.disposeRunner.add(this),e.glVertexArrayObjects[this.CONTEXT_UID]=n={},a=!0);var s=n[t.program.id]||this.initGeometryVao(e,t,a);this._activeGeometry=e,this._activeVao!==s&&(this._activeVao=s,this.hasVao?i.bindVertexArray(s):this.activateVao(e,t.program)),this.updateBuffers()},l.prototype.reset=function(){this.unbind()},l.prototype.updateBuffers=function(){for(var e=this._activeGeometry,t=this.renderer.buffer,i=0;i<e.buffers.length;i++){var n=e.buffers[i];t.update(n)}},l.prototype.checkCompatibility=function(e,t){var i=e.attributes,n=t.attributeData;for(var a in n)if(!i[a])throw new Error('shader and geometry incompatible, geometry missing the "'+a+'" attribute')},l.prototype.getSignature=function(e,t){var i=e.attributes,n=t.attributeData,a=["g",e.id];for(var s in i)n[s]&&a.push(s,n[s].location);return a.join("-")},l.prototype.initGeometryVao=function(e,t,i){i===void 0&&(i=!0);var n=this.gl,a=this.CONTEXT_UID,s=this.renderer.buffer,d=t.program;d.glPrograms[a]||this.renderer.shader.generateProgram(t),this.checkCompatibility(e,d);var h=this.getSignature(e,d),r=e.glVertexArrayObjects[this.CONTEXT_UID],o=r[h];if(o)return r[d.id]=o,o;var c=e.buffers,u=e.attributes,m={},b={};for(var Z in c)m[Z]=0,b[Z]=0;for(var Z in u)!u[Z].size&&d.attributeData[Z]?u[Z].size=d.attributeData[Z].size:u[Z].size||console.warn("PIXI Geometry attribute '"+Z+"' size cannot be determined (likely the bound shader does not have the attribute)"),m[u[Z].buffer]+=u[Z].size*Ca[u[Z].type];for(var Z in u){var p=u[Z],G=p.size;p.stride===void 0&&(m[p.buffer]===G*Ca[p.type]?p.stride=0:p.stride=m[p.buffer]),p.start===void 0&&(p.start=b[p.buffer],b[p.buffer]+=G*Ca[p.type])}o=n.createVertexArray(),n.bindVertexArray(o);for(var X=0;X<c.length;X++){var y=c[X];s.bind(y),i&&y._glBuffers[a].refCount++}return this.activateVao(e,d),this._activeVao=o,r[d.id]=o,r[h]=o,o},l.prototype.disposeGeometry=function(e,t){var i;if(this.managedGeometries[e.id]){delete this.managedGeometries[e.id];var n=e.glVertexArrayObjects[this.CONTEXT_UID],a=this.gl,s=e.buffers,d=(i=this.renderer)===null||i===void 0?void 0:i.buffer;if(e.disposeRunner.remove(this),!!n){if(d)for(var h=0;h<s.length;h++){var r=s[h]._glBuffers[this.CONTEXT_UID];r&&(r.refCount--,r.refCount===0&&!t&&d.dispose(s[h],t))}if(!t){for(var o in n)if(o[0]==="g"){var c=n[o];this._activeVao===c&&this.unbind(),a.deleteVertexArray(c)}}delete e.glVertexArrayObjects[this.CONTEXT_UID]}}},l.prototype.disposeAll=function(e){for(var t=Object.keys(this.managedGeometries),i=0;i<t.length;i++)this.disposeGeometry(this.managedGeometries[t[i]],e)},l.prototype.activateVao=function(e,t){var i=this.gl,n=this.CONTEXT_UID,a=this.renderer.buffer,s=e.buffers,d=e.attributes;e.indexBuffer&&a.bind(e.indexBuffer);var h=null;for(var r in d){var o=d[r],c=s[o.buffer],u=c._glBuffers[n];if(t.attributeData[r]){h!==u&&(a.bind(c),h=u);var m=t.attributeData[r].location;if(i.enableVertexAttribArray(m),i.vertexAttribPointer(m,o.size,o.type||i.FLOAT,o.normalized,o.stride,o.start),o.instance)if(this.hasInstance)i.vertexAttribDivisor(m,1);else throw new Error("geometry error, GPU Instancing is not supported on this device")}}},l.prototype.draw=function(e,t,i,n){var a=this.gl,s=this._activeGeometry;if(s.indexBuffer){var d=s.indexBuffer.data.BYTES_PER_ELEMENT,h=d===2?a.UNSIGNED_SHORT:a.UNSIGNED_INT;d===2||d===4&&this.canUseUInt32ElementIndex?s.instanced?a.drawElementsInstanced(e,t||s.indexBuffer.data.length,h,(i||0)*d,n||1):a.drawElements(e,t||s.indexBuffer.data.length,h,(i||0)*d):console.warn("unsupported index buffer type: uint32")}else s.instanced?a.drawArraysInstanced(e,i,t||s.getSize(),n||1):a.drawArrays(e,i,t||s.getSize());return this},l.prototype.unbind=function(){this.gl.bindVertexArray(null),this._activeVao=null,this._activeGeometry=null},l.prototype.destroy=function(){this.renderer=null},l}(),ib=function(){function l(e){e===void 0&&(e=null),this.type=Lt.NONE,this.autoDetect=!0,this.maskObject=e||null,this.pooled=!1,this.isMaskData=!0,this.resolution=null,this.multisample=U.FILTER_MULTISAMPLE,this.enabled=!0,this.colorMask=15,this._filters=null,this._stencilCounter=0,this._scissorCounter=0,this._scissorRect=null,this._scissorRectLocal=null,this._colorMask=15,this._target=null}return Object.defineProperty(l.prototype,"filter",{get:function(){return this._filters?this._filters[0]:null},set:function(e){e?this._filters?this._filters[0]=e:this._filters=[e]:this._filters=null},enumerable:!1,configurable:!0}),l.prototype.reset=function(){this.pooled&&(this.maskObject=null,this.type=Lt.NONE,this.autoDetect=!0),this._target=null,this._scissorRectLocal=null},l.prototype.copyCountersOrReset=function(e){e?(this._stencilCounter=e._stencilCounter,this._scissorCounter=e._scissorCounter,this._scissorRect=e._scissorRect):(this._stencilCounter=0,this._scissorCounter=0,this._scissorRect=null)},l}();function Sh(l,e,t){var i=l.createShader(e);return l.shaderSource(i,t),l.compileShader(i),i}function vh(l,e){var t=l.getShaderSource(e).split(`
15
+ `).map(function(r,o){return o+": "+r}),i=l.getShaderInfoLog(e),n=i.split(`
16
+ `),a={},s=n.map(function(r){return parseFloat(r.replace(/^ERROR\: 0\:([\d]+)\:.*$/,"$1"))}).filter(function(r){return r&&!a[r]?(a[r]=!0,!0):!1}),d=[""];s.forEach(function(r){t[r-1]="%c"+t[r-1]+"%c",d.push("background: #FF0000; color:#FFFFFF; font-size: 10px","font-size: 10px")});var h=t.join(`
17
+ `);d[0]=h,console.error(i),console.groupCollapsed("click to view full shader code"),console.warn.apply(console,d),console.groupEnd()}function lb(l,e,t,i){l.getProgramParameter(e,l.LINK_STATUS)||(l.getShaderParameter(t,l.COMPILE_STATUS)||vh(l,t),l.getShaderParameter(i,l.COMPILE_STATUS)||vh(l,i),console.error("PixiJS Error: Could not initialize shader."),l.getProgramInfoLog(e)!==""&&console.warn("PixiJS Warning: gl.getProgramInfoLog()",l.getProgramInfoLog(e)))}function Fa(l){for(var e=new Array(l),t=0;t<e.length;t++)e[t]=!1;return e}function Ih(l,e){switch(l){case"float":return 0;case"vec2":return new Float32Array(2*e);case"vec3":return new Float32Array(3*e);case"vec4":return new Float32Array(4*e);case"int":case"uint":case"sampler2D":case"sampler2DArray":return 0;case"ivec2":return new Int32Array(2*e);case"ivec3":return new Int32Array(3*e);case"ivec4":return new Int32Array(4*e);case"uvec2":return new Uint32Array(2*e);case"uvec3":return new Uint32Array(3*e);case"uvec4":return new Uint32Array(4*e);case"bool":return!1;case"bvec2":return Fa(2*e);case"bvec3":return Fa(3*e);case"bvec4":return Fa(4*e);case"mat2":return new Float32Array([1,0,0,1]);case"mat3":return new Float32Array([1,0,0,0,1,0,0,0,1]);case"mat4":return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}var Yh={},Vl=Yh;function nb(){if(Vl===Yh||Vl&&Vl.isContextLost()){var l=U.ADAPTER.createCanvas(),e=void 0;U.PREFER_ENV>=Ce.WEBGL2&&(e=l.getContext("webgl2",{})),e||(e=l.getContext("webgl",{})||l.getContext("experimental-webgl",{}),e?e.getExtension("WEBGL_draw_buffers"):e=null),Vl=e}return Vl}var pn;function ab(){if(!pn){pn=Ot.MEDIUM;var l=nb();if(l&&l.getShaderPrecisionFormat){var e=l.getShaderPrecisionFormat(l.FRAGMENT_SHADER,l.HIGH_FLOAT);pn=e.precision?Ot.HIGH:Ot.MEDIUM}}return pn}function gh(l,e,t){if(l.substring(0,9)!=="precision"){var i=e;return e===Ot.HIGH&&t!==Ot.HIGH&&(i=Ot.MEDIUM),"precision "+i+` float;
18
+ `+l}else if(t!==Ot.HIGH&&l.substring(0,15)==="precision highp")return l.replace("precision highp","precision mediump");return l}var sb={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 Th(l){return sb[l]}var Gn=null,Hh={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 Jh(l,e){if(!Gn){var t=Object.keys(Hh);Gn={};for(var i=0;i<t.length;++i){var n=t[i];Gn[l[n]]=Hh[n]}}return Gn[e]}var Pi=[{test:function(l){return l.type==="float"&&l.size===1&&!l.isArray},code:function(l){return`
19
+ if(uv["`+l+'"] !== ud["'+l+`"].value)
16
20
  {
17
- ud["`+r+'"].value = uv["'+r+`"]
18
- gl.uniform1f(ud["`+r+'"].location, uv["'+r+`"])
21
+ ud["`+l+'"].value = uv["'+l+`"]
22
+ gl.uniform1f(ud["`+l+'"].location, uv["'+l+`"])
19
23
  }
20
- `}},{test:function(r,e){return(r.type==="sampler2D"||r.type==="samplerCube"||r.type==="sampler2DArray")&&r.size===1&&!r.isArray&&(e==null||e.castToBaseTexture!==void 0)},code:function(r){return`t = syncData.textureCount++;
24
+ `}},{test:function(l,e){return(l.type==="sampler2D"||l.type==="samplerCube"||l.type==="sampler2DArray")&&l.size===1&&!l.isArray&&(e==null||e.castToBaseTexture!==void 0)},code:function(l){return`t = syncData.textureCount++;
21
25
 
22
- renderer.texture.bind(uv["`+r+`"], t);
26
+ renderer.texture.bind(uv["`+l+`"], t);
23
27
 
24
- if(ud["`+r+`"].value !== t)
28
+ if(ud["`+l+`"].value !== t)
25
29
  {
26
- ud["`+r+`"].value = t;
27
- gl.uniform1i(ud["`+r+`"].location, t);
30
+ ud["`+l+`"].value = t;
31
+ gl.uniform1i(ud["`+l+`"].location, t);
28
32
  ; // eslint-disable-line max-len
29
- }`}},{test:function(r,e){return r.type==="mat3"&&r.size===1&&!r.isArray&&e.a!==void 0},code:function(r){return`
30
- gl.uniformMatrix3fv(ud["`+r+'"].location, false, uv["'+r+`"].toArray(true));
31
- `},codeUbo:function(r){return`
32
- var `+r+"_matrix = uv."+r+`.toArray(true);
33
-
34
- data[offset] = `+r+`_matrix[0];
35
- data[offset+1] = `+r+`_matrix[1];
36
- data[offset+2] = `+r+`_matrix[2];
33
+ }`}},{test:function(l,e){return l.type==="mat3"&&l.size===1&&!l.isArray&&e.a!==void 0},code:function(l){return`
34
+ gl.uniformMatrix3fv(ud["`+l+'"].location, false, uv["'+l+`"].toArray(true));
35
+ `},codeUbo:function(l){return`
36
+ var `+l+"_matrix = uv."+l+`.toArray(true);
37
+
38
+ data[offset] = `+l+`_matrix[0];
39
+ data[offset+1] = `+l+`_matrix[1];
40
+ data[offset+2] = `+l+`_matrix[2];
37
41
 
38
- data[offset + 4] = `+r+`_matrix[3];
39
- data[offset + 5] = `+r+`_matrix[4];
40
- data[offset + 6] = `+r+`_matrix[5];
42
+ data[offset + 4] = `+l+`_matrix[3];
43
+ data[offset + 5] = `+l+`_matrix[4];
44
+ data[offset + 6] = `+l+`_matrix[5];
41
45
 
42
- data[offset + 8] = `+r+`_matrix[6];
43
- data[offset + 9] = `+r+`_matrix[7];
44
- data[offset + 10] = `+r+`_matrix[8];
45
- `}},{test:function(r,e){return r.type==="vec2"&&r.size===1&&!r.isArray&&e.x!==void 0},code:function(r){return`
46
- cv = ud["`+r+`"].value;
47
- v = uv["`+r+`"];
46
+ data[offset + 8] = `+l+`_matrix[6];
47
+ data[offset + 9] = `+l+`_matrix[7];
48
+ data[offset + 10] = `+l+`_matrix[8];
49
+ `}},{test:function(l,e){return l.type==="vec2"&&l.size===1&&!l.isArray&&e.x!==void 0},code:function(l){return`
50
+ cv = ud["`+l+`"].value;
51
+ v = uv["`+l+`"];
48
52
 
49
53
  if(cv[0] !== v.x || cv[1] !== v.y)
50
54
  {
51
55
  cv[0] = v.x;
52
56
  cv[1] = v.y;
53
- gl.uniform2f(ud["`+r+`"].location, v.x, v.y);
54
- }`},codeUbo:function(r){return`
55
- v = uv.`+r+`;
57
+ gl.uniform2f(ud["`+l+`"].location, v.x, v.y);
58
+ }`},codeUbo:function(l){return`
59
+ v = uv.`+l+`;
56
60
 
57
61
  data[offset] = v.x;
58
62
  data[offset+1] = v.y;
59
- `}},{test:function(r){return r.type==="vec2"&&r.size===1&&!r.isArray},code:function(r){return`
60
- cv = ud["`+r+`"].value;
61
- v = uv["`+r+`"];
63
+ `}},{test:function(l){return l.type==="vec2"&&l.size===1&&!l.isArray},code:function(l){return`
64
+ cv = ud["`+l+`"].value;
65
+ v = uv["`+l+`"];
62
66
 
63
67
  if(cv[0] !== v[0] || cv[1] !== v[1])
64
68
  {
65
69
  cv[0] = v[0];
66
70
  cv[1] = v[1];
67
- gl.uniform2f(ud["`+r+`"].location, v[0], v[1]);
71
+ gl.uniform2f(ud["`+l+`"].location, v[0], v[1]);
68
72
  }
69
- `}},{test:function(r,e){return r.type==="vec4"&&r.size===1&&!r.isArray&&e.width!==void 0},code:function(r){return`
70
- cv = ud["`+r+`"].value;
71
- v = uv["`+r+`"];
73
+ `}},{test:function(l,e){return l.type==="vec4"&&l.size===1&&!l.isArray&&e.width!==void 0},code:function(l){return`
74
+ cv = ud["`+l+`"].value;
75
+ v = uv["`+l+`"];
72
76
 
73
77
  if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)
74
78
  {
@@ -76,17 +80,17 @@ Deprecated since v`+r),console.warn(i))),Es[e]=!0}}var Ss={},te=Object.create(nu
76
80
  cv[1] = v.y;
77
81
  cv[2] = v.width;
78
82
  cv[3] = v.height;
79
- gl.uniform4f(ud["`+r+`"].location, v.x, v.y, v.width, v.height)
80
- }`},codeUbo:function(r){return`
81
- v = uv.`+r+`;
83
+ gl.uniform4f(ud["`+l+`"].location, v.x, v.y, v.width, v.height)
84
+ }`},codeUbo:function(l){return`
85
+ v = uv.`+l+`;
82
86
 
83
87
  data[offset] = v.x;
84
88
  data[offset+1] = v.y;
85
89
  data[offset+2] = v.width;
86
90
  data[offset+3] = v.height;
87
- `}},{test:function(r){return r.type==="vec4"&&r.size===1&&!r.isArray},code:function(r){return`
88
- cv = ud["`+r+`"].value;
89
- v = uv["`+r+`"];
91
+ `}},{test:function(l){return l.type==="vec4"&&l.size===1&&!l.isArray},code:function(l){return`
92
+ cv = ud["`+l+`"].value;
93
+ v = uv["`+l+`"];
90
94
 
91
95
  if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])
92
96
  {
@@ -95,8 +99,8 @@ Deprecated since v`+r),console.warn(i))),Es[e]=!0}}var Ss={},te=Object.create(nu
95
99
  cv[2] = v[2];
96
100
  cv[3] = v[3];
97
101
 
98
- gl.uniform4f(ud["`+r+`"].location, v[0], v[1], v[2], v[3])
99
- }`}}],Vf={float:`
102
+ gl.uniform4f(ud["`+l+`"].location, v[0], v[1], v[2], v[3])
103
+ }`}}],db={float:`
100
104
  if (cv !== v)
101
105
  {
102
106
  cu.value = v;
@@ -232,30 +236,30 @@ Deprecated since v`+r),console.warn(i))),Es[e]=!0}}var Ss={},te=Object.create(nu
232
236
  cu.value = v;
233
237
 
234
238
  gl.uniform1i(location, v);
235
- }`},qf={float:"gl.uniform1fv(location, v)",vec2:"gl.uniform2fv(location, v)",vec3:"gl.uniform3fv(location, v)",vec4:"gl.uniform4fv(location, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat2:"gl.uniformMatrix2fv(location, false, v)",int:"gl.uniform1iv(location, v)",ivec2:"gl.uniform2iv(location, v)",ivec3:"gl.uniform3iv(location, v)",ivec4:"gl.uniform4iv(location, v)",uint:"gl.uniform1uiv(location, v)",uvec2:"gl.uniform2uiv(location, v)",uvec3:"gl.uniform3uiv(location, v)",uvec4:"gl.uniform4uiv(location, v)",bool:"gl.uniform1iv(location, v)",bvec2:"gl.uniform2iv(location, v)",bvec3:"gl.uniform3iv(location, v)",bvec4:"gl.uniform4iv(location, v)",sampler2D:"gl.uniform1iv(location, v)",samplerCube:"gl.uniform1iv(location, v)",sampler2DArray:"gl.uniform1iv(location, v)"};function $f(r,e){var t,i=[`
239
+ }`},hb={float:"gl.uniform1fv(location, v)",vec2:"gl.uniform2fv(location, v)",vec3:"gl.uniform3fv(location, v)",vec4:"gl.uniform4fv(location, v)",mat4:"gl.uniformMatrix4fv(location, false, v)",mat3:"gl.uniformMatrix3fv(location, false, v)",mat2:"gl.uniformMatrix2fv(location, false, v)",int:"gl.uniform1iv(location, v)",ivec2:"gl.uniform2iv(location, v)",ivec3:"gl.uniform3iv(location, v)",ivec4:"gl.uniform4iv(location, v)",uint:"gl.uniform1uiv(location, v)",uvec2:"gl.uniform2uiv(location, v)",uvec3:"gl.uniform3uiv(location, v)",uvec4:"gl.uniform4uiv(location, v)",bool:"gl.uniform1iv(location, v)",bvec2:"gl.uniform2iv(location, v)",bvec3:"gl.uniform3iv(location, v)",bvec4:"gl.uniform4iv(location, v)",sampler2D:"gl.uniform1iv(location, v)",samplerCube:"gl.uniform1iv(location, v)",sampler2DArray:"gl.uniform1iv(location, v)"};function rb(l,e){var t,i=[`
236
240
  var v = null;
237
241
  var cv = null;
238
242
  var cu = null;
239
243
  var t = 0;
240
244
  var gl = renderer.gl;
241
- `];for(var n in r.uniforms){var s=e[n];if(!s){!((t=r.uniforms[n])===null||t===void 0)&&t.group&&(r.uniforms[n].ubo?i.push(`
245
+ `];for(var n in l.uniforms){var a=e[n];if(!a){!((t=l.uniforms[n])===null||t===void 0)&&t.group&&(l.uniforms[n].ubo?i.push(`
242
246
  renderer.shader.syncUniformBufferGroup(uv.`+n+", '"+n+`');
243
247
  `):i.push(`
244
248
  renderer.shader.syncUniformGroup(uv.`+n+`, syncData);
245
- `));continue}for(var a=r.uniforms[n],o=!1,h=0;h<Ge.length;h++)if(Ge[h].test(s,a)){i.push(Ge[h].code(n,a)),o=!0;break}if(!o){var u=s.size===1&&!s.isArray?Vf:qf,l=u[s.type].replace("location",'ud["'+n+'"].location');i.push(`
249
+ `));continue}for(var s=l.uniforms[n],d=!1,h=0;h<Pi.length;h++)if(Pi[h].test(a,s)){i.push(Pi[h].code(n,s)),d=!0;break}if(!d){var r=a.size===1&&!a.isArray?db:hb,o=r[a.type].replace("location",'ud["'+n+'"].location');i.push(`
246
250
  cu = ud["`+n+`"];
247
251
  cv = cu.value;
248
252
  v = uv["`+n+`"];
249
- `+l+";")}}return new Function("ud","uv","renderer","syncData",i.join(`
250
- `))}var Zf=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join(`
251
- `);function Kf(r){for(var e="",t=0;t<r;++t)t>0&&(e+=`
252
- else `),t<r-1&&(e+="if(test == "+t+".0){}");return e}function Qf(r,e){if(r===0)throw new Error("Invalid value of `0` passed to `checkMaxIfStatementsInShader`");for(var t=e.createShader(e.FRAGMENT_SHADER);;){var i=Zf.replace(/%forloop%/gi,Kf(r));if(e.shaderSource(t,i),e.compileShader(t),!e.getShaderParameter(t,e.COMPILE_STATUS))r=r/2|0;else break}return r}var ni;function Jf(){if(typeof ni=="boolean")return ni;try{var r=new Function("param1","param2","param3","return param1[param2] === param3;");ni=r({a:"b"},"a","b")===!0}catch{ni=!1}return ni}var tc=`varying vec2 vTextureCoord;
253
+ `+o+";")}}return new Function("ud","uv","renderer","syncData",i.join(`
254
+ `))}var ob=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join(`
255
+ `);function cb(l){for(var e="",t=0;t<l;++t)t>0&&(e+=`
256
+ else `),t<l-1&&(e+="if(test == "+t+".0){}");return e}function ub(l,e){if(l===0)throw new Error("Invalid value of `0` passed to `checkMaxIfStatementsInShader`");for(var t=e.createShader(e.FRAGMENT_SHADER);;){var i=ob.replace(/%forloop%/gi,cb(l));if(e.shaderSource(t,i),e.compileShader(t),!e.getShaderParameter(t,e.COMPILE_STATUS))l=l/2|0;else break}return l}var Rl;function mb(){if(typeof Rl=="boolean")return Rl;try{var l=new Function("param1","param2","param3","return param1[param2] === param3;");Rl=l({a:"b"},"a","b")===!0}catch{Rl=!1}return Rl}var Zb=`varying vec2 vTextureCoord;
253
257
 
254
258
  uniform sampler2D uSampler;
255
259
 
256
260
  void main(void){
257
261
  gl_FragColor *= texture2D(uSampler, vTextureCoord);
258
- }`,ec=`attribute vec2 aVertexPosition;
262
+ }`,bb=`attribute vec2 aVertexPosition;
259
263
  attribute vec2 aTextureCoord;
260
264
 
261
265
  uniform mat3 projectionMatrix;
@@ -266,16 +270,16 @@ void main(void){
266
270
  gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
267
271
  vTextureCoord = aTextureCoord;
268
272
  }
269
- `,ic=0,ki={},si=function(){function r(e,t,i){i===void 0&&(i="pixi-shader"),this.id=ic++,this.vertexSrc=e||r.defaultVertexSrc,this.fragmentSrc=t||r.defaultFragmentSrc,this.vertexSrc=this.vertexSrc.trim(),this.fragmentSrc=this.fragmentSrc.trim(),this.vertexSrc.substring(0,8)!=="#version"&&(i=i.replace(/\s+/g,"-"),ki[i]?(ki[i]++,i+="-"+ki[i]):ki[i]=1,this.vertexSrc="#define SHADER_NAME "+i+`
273
+ `,pb=0,Xn={},Wl=function(){function l(e,t,i){i===void 0&&(i="pixi-shader"),this.id=pb++,this.vertexSrc=e||l.defaultVertexSrc,this.fragmentSrc=t||l.defaultFragmentSrc,this.vertexSrc=this.vertexSrc.trim(),this.fragmentSrc=this.fragmentSrc.trim(),this.vertexSrc.substring(0,8)!=="#version"&&(i=i.replace(/\s+/g,"-"),Xn[i]?(Xn[i]++,i+="-"+Xn[i]):Xn[i]=1,this.vertexSrc="#define SHADER_NAME "+i+`
270
274
  `+this.vertexSrc,this.fragmentSrc="#define SHADER_NAME "+i+`
271
- `+this.fragmentSrc,this.vertexSrc=Ws(this.vertexSrc,F.PRECISION_VERTEX,It.HIGH),this.fragmentSrc=Ws(this.fragmentSrc,F.PRECISION_FRAGMENT,zf())),this.glPrograms={},this.syncUniforms=null}return Object.defineProperty(r,"defaultVertexSrc",{get:function(){return ec},enumerable:!1,configurable:!0}),Object.defineProperty(r,"defaultFragmentSrc",{get:function(){return tc},enumerable:!1,configurable:!0}),r.from=function(e,t,i){var n=e+t,s=Ss[n];return s||(Ss[n]=s=new r(e,t,i)),s},r}(),ae=function(){function r(e,t){this.uniformBindCount=0,this.program=e,t?t instanceof we?this.uniformGroup=t:this.uniformGroup=new we(t):this.uniformGroup=new we({}),this.disposeRunner=new Et("disposeShader")}return r.prototype.checkUniformExists=function(e,t){if(t.uniforms[e])return!0;for(var i in t.uniforms){var n=t.uniforms[i];if(n.group&&this.checkUniformExists(e,n))return!0}return!1},r.prototype.destroy=function(){this.uniformGroup=null,this.disposeRunner.emit(this),this.disposeRunner.destroy()},Object.defineProperty(r.prototype,"uniforms",{get:function(){return this.uniformGroup.uniforms},enumerable:!1,configurable:!0}),r.from=function(e,t,i){var n=si.from(e,t);return new r(n,i)},r}(),Hr=0,Xr=1,Wr=2,jr=3,zr=4,Yr=5,Ee=function(){function r(){this.data=0,this.blendMode=G.NORMAL,this.polygonOffset=0,this.blend=!0,this.depthMask=!0}return Object.defineProperty(r.prototype,"blend",{get:function(){return!!(this.data&1<<Hr)},set:function(e){!!(this.data&1<<Hr)!==e&&(this.data^=1<<Hr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"offsets",{get:function(){return!!(this.data&1<<Xr)},set:function(e){!!(this.data&1<<Xr)!==e&&(this.data^=1<<Xr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"culling",{get:function(){return!!(this.data&1<<Wr)},set:function(e){!!(this.data&1<<Wr)!==e&&(this.data^=1<<Wr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"depthTest",{get:function(){return!!(this.data&1<<jr)},set:function(e){!!(this.data&1<<jr)!==e&&(this.data^=1<<jr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"depthMask",{get:function(){return!!(this.data&1<<Yr)},set:function(e){!!(this.data&1<<Yr)!==e&&(this.data^=1<<Yr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"clockwiseFrontFace",{get:function(){return!!(this.data&1<<zr)},set:function(e){!!(this.data&1<<zr)!==e&&(this.data^=1<<zr)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"blendMode",{get:function(){return this._blendMode},set:function(e){this.blend=e!==G.NONE,this._blendMode=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"polygonOffset",{get:function(){return this._polygonOffset},set:function(e){this.offsets=!!e,this._polygonOffset=e},enumerable:!1,configurable:!0}),r.prototype.toString=function(){return"[@pixi/core:State "+("blendMode="+this.blendMode+" ")+("clockwiseFrontFace="+this.clockwiseFrontFace+" ")+("culling="+this.culling+" ")+("depthMask="+this.depthMask+" ")+("polygonOffset="+this.polygonOffset)+"]"},r.for2d=function(){var e=new r;return e.depthTest=!1,e.blend=!0,e},r}(),rc=`varying vec2 vTextureCoord;
275
+ `+this.fragmentSrc,this.vertexSrc=gh(this.vertexSrc,U.PRECISION_VERTEX,Ot.HIGH),this.fragmentSrc=gh(this.fragmentSrc,U.PRECISION_FRAGMENT,ab())),this.glPrograms={},this.syncUniforms=null}return Object.defineProperty(l,"defaultVertexSrc",{get:function(){return bb},enumerable:!1,configurable:!0}),Object.defineProperty(l,"defaultFragmentSrc",{get:function(){return Zb},enumerable:!1,configurable:!0}),l.from=function(e,t,i){var n=e+t,a=uh[n];return a||(uh[n]=a=new l(e,t,i)),a},l}(),je=function(){function l(e,t){this.uniformBindCount=0,this.program=e,t?t instanceof yi?this.uniformGroup=t:this.uniformGroup=new yi(t):this.uniformGroup=new yi({}),this.disposeRunner=new kt("disposeShader")}return l.prototype.checkUniformExists=function(e,t){if(t.uniforms[e])return!0;for(var i in t.uniforms){var n=t.uniforms[i];if(n.group&&this.checkUniformExists(e,n))return!0}return!1},l.prototype.destroy=function(){this.uniformGroup=null,this.disposeRunner.emit(this),this.disposeRunner.destroy()},Object.defineProperty(l.prototype,"uniforms",{get:function(){return this.uniformGroup.uniforms},enumerable:!1,configurable:!0}),l.from=function(e,t,i){var n=Wl.from(e,t);return new l(n,i)},l}(),Ua=0,ka=1,Na=2,Ma=3,Ka=4,wa=5,Vi=function(){function l(){this.data=0,this.blendMode=w.NORMAL,this.polygonOffset=0,this.blend=!0,this.depthMask=!0}return Object.defineProperty(l.prototype,"blend",{get:function(){return!!(this.data&1<<Ua)},set:function(e){!!(this.data&1<<Ua)!==e&&(this.data^=1<<Ua)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"offsets",{get:function(){return!!(this.data&1<<ka)},set:function(e){!!(this.data&1<<ka)!==e&&(this.data^=1<<ka)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"culling",{get:function(){return!!(this.data&1<<Na)},set:function(e){!!(this.data&1<<Na)!==e&&(this.data^=1<<Na)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"depthTest",{get:function(){return!!(this.data&1<<Ma)},set:function(e){!!(this.data&1<<Ma)!==e&&(this.data^=1<<Ma)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"depthMask",{get:function(){return!!(this.data&1<<wa)},set:function(e){!!(this.data&1<<wa)!==e&&(this.data^=1<<wa)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"clockwiseFrontFace",{get:function(){return!!(this.data&1<<Ka)},set:function(e){!!(this.data&1<<Ka)!==e&&(this.data^=1<<Ka)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"blendMode",{get:function(){return this._blendMode},set:function(e){this.blend=e!==w.NONE,this._blendMode=e},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"polygonOffset",{get:function(){return this._polygonOffset},set:function(e){this.offsets=!!e,this._polygonOffset=e},enumerable:!1,configurable:!0}),l.prototype.toString=function(){return"[@pixi/core:State "+("blendMode="+this.blendMode+" ")+("clockwiseFrontFace="+this.clockwiseFrontFace+" ")+("culling="+this.culling+" ")+("depthMask="+this.depthMask+" ")+("polygonOffset="+this.polygonOffset)+"]"},l.for2d=function(){var e=new l;return e.depthTest=!1,e.blend=!0,e},l}(),Gb=`varying vec2 vTextureCoord;
272
276
 
273
277
  uniform sampler2D uSampler;
274
278
 
275
279
  void main(void){
276
280
  gl_FragColor = texture2D(uSampler, vTextureCoord);
277
281
  }
278
- `,nc=`attribute vec2 aVertexPosition;
282
+ `,Xb=`attribute vec2 aVertexPosition;
279
283
 
280
284
  uniform mat3 projectionMatrix;
281
285
 
@@ -301,7 +305,7 @@ void main(void)
301
305
  gl_Position = filterVertexPosition();
302
306
  vTextureCoord = filterTextureCoord();
303
307
  }
304
- `,oe=function(r){it(e,r);function e(t,i,n){var s=this,a=si.from(t||e.defaultVertexSrc,i||e.defaultFragmentSrc);return s=r.call(this,a,n)||this,s.padding=0,s.resolution=F.FILTER_RESOLUTION,s.multisample=F.FILTER_MULTISAMPLE,s.enabled=!0,s.autoFit=!0,s.state=new Ee,s}return e.prototype.apply=function(t,i,n,s,a){t.applyFilter(this,i,n,s)},Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._resolution=t},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultVertexSrc",{get:function(){return nc},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultFragmentSrc",{get:function(){return rc},enumerable:!1,configurable:!0}),e}(ae),sc=`attribute vec2 aVertexPosition;
308
+ `,De=function(l){ht(e,l);function e(t,i,n){var a=this,s=Wl.from(t||e.defaultVertexSrc,i||e.defaultFragmentSrc);return a=l.call(this,s,n)||this,a.padding=0,a.resolution=U.FILTER_RESOLUTION,a.multisample=U.FILTER_MULTISAMPLE,a.enabled=!0,a.autoFit=!0,a.state=new Vi,a}return e.prototype.apply=function(t,i,n,a,s){t.applyFilter(this,i,n,a)},Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._resolution=t},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultVertexSrc",{get:function(){return Xb},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultFragmentSrc",{get:function(){return Gb},enumerable:!1,configurable:!0}),e}(je),yb=`attribute vec2 aVertexPosition;
305
309
  attribute vec2 aTextureCoord;
306
310
 
307
311
  uniform mat3 projectionMatrix;
@@ -317,7 +321,7 @@ void main(void)
317
321
  vTextureCoord = aTextureCoord;
318
322
  vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;
319
323
  }
320
- `,ac=`varying vec2 vMaskCoord;
324
+ `,Vb=`varying vec2 vMaskCoord;
321
325
  varying vec2 vTextureCoord;
322
326
 
323
327
  uniform sampler2D uSampler;
@@ -342,7 +346,7 @@ void main(void)
342
346
 
343
347
  gl_FragColor = original;
344
348
  }
345
- `,Vs=new gt,Vr=function(){function r(e,t){this._texture=e,this.mapCoord=new gt,this.uClampFrame=new Float32Array(4),this.uClampOffset=new Float32Array(2),this._textureID=-1,this._updateID=0,this.clampOffset=0,this.clampMargin=typeof t>"u"?.5:t,this.isSimple=!1}return Object.defineProperty(r.prototype,"texture",{get:function(){return this._texture},set:function(e){this._texture=e,this._textureID=-1},enumerable:!1,configurable:!0}),r.prototype.multiplyUvs=function(e,t){t===void 0&&(t=e);for(var i=this.mapCoord,n=0;n<e.length;n+=2){var s=e[n],a=e[n+1];t[n]=s*i.a+a*i.c+i.tx,t[n+1]=s*i.b+a*i.d+i.ty}return t},r.prototype.update=function(e){var t=this._texture;if(!t||!t.valid||!e&&this._textureID===t._updateID)return!1;this._textureID=t._updateID,this._updateID++;var i=t._uvs;this.mapCoord.set(i.x1-i.x0,i.y1-i.y0,i.x3-i.x0,i.y3-i.y0,i.x0,i.y0);var n=t.orig,s=t.trim;s&&(Vs.set(n.width/s.width,0,0,n.height/s.height,-s.x/s.width,-s.y/s.height),this.mapCoord.append(Vs));var a=t.baseTexture,o=this.uClampFrame,h=this.clampMargin/a.resolution,u=this.clampOffset;return o[0]=(t._frame.x+h+u)/a.width,o[1]=(t._frame.y+h+u)/a.height,o[2]=(t._frame.x+t._frame.width-h+u)/a.width,o[3]=(t._frame.y+t._frame.height-h+u)/a.height,this.uClampOffset[0]=u/a.realWidth,this.uClampOffset[1]=u/a.realHeight,this.isSimple=t._frame.width===a.width&&t._frame.height===a.height&&t.rotate===0,!0},r}(),oc=function(r){it(e,r);function e(t,i,n){var s=this,a=null;return typeof t!="string"&&i===void 0&&n===void 0&&(a=t,t=void 0,i=void 0,n=void 0),s=r.call(this,t||sc,i||ac,n)||this,s.maskSprite=a,s.maskMatrix=new gt,s}return Object.defineProperty(e.prototype,"maskSprite",{get:function(){return this._maskSprite},set:function(t){this._maskSprite=t,this._maskSprite&&(this._maskSprite.renderable=!1)},enumerable:!1,configurable:!0}),e.prototype.apply=function(t,i,n,s){var a=this._maskSprite,o=a._texture;o.valid&&(o.uvMatrix||(o.uvMatrix=new Vr(o,0)),o.uvMatrix.update(),this.uniforms.npmAlpha=o.baseTexture.alphaMode?0:1,this.uniforms.mask=o,this.uniforms.otherMatrix=t.calculateSpriteMatrix(this.maskMatrix,a).prepend(o.uvMatrix.mapCoord),this.uniforms.alpha=a.worldAlpha,this.uniforms.maskClamp=o.uvMatrix.uClampFrame,t.applyFilter(this,i,n,s))},e}(oe),hc=function(){function r(e){this.renderer=e,this.enableScissor=!0,this.alphaMaskPool=[],this.maskDataPool=[],this.maskStack=[],this.alphaMaskIndex=0}return r.prototype.setMaskStack=function(e){this.maskStack=e,this.renderer.scissor.setMaskStack(e),this.renderer.stencil.setMaskStack(e)},r.prototype.push=function(e,t){var i=t;if(!i.isMaskData){var n=this.maskDataPool.pop()||new Xf;n.pooled=!0,n.maskObject=t,i=n}var s=this.maskStack.length!==0?this.maskStack[this.maskStack.length-1]:null;if(i.copyCountersOrReset(s),i._colorMask=s?s._colorMask:15,i.autoDetect&&this.detect(i),i._target=e,i.type!==mt.SPRITE&&this.maskStack.push(i),i.enabled)switch(i.type){case mt.SCISSOR:this.renderer.scissor.push(i);break;case mt.STENCIL:this.renderer.stencil.push(i);break;case mt.SPRITE:i.copyCountersOrReset(null),this.pushSpriteMask(i);break;case mt.COLOR:this.pushColorMask(i);break}i.type===mt.SPRITE&&this.maskStack.push(i)},r.prototype.pop=function(e){var t=this.maskStack.pop();if(!(!t||t._target!==e)){if(t.enabled)switch(t.type){case mt.SCISSOR:this.renderer.scissor.pop(t);break;case mt.STENCIL:this.renderer.stencil.pop(t.maskObject);break;case mt.SPRITE:this.popSpriteMask(t);break;case mt.COLOR:this.popColorMask(t);break}if(t.reset(),t.pooled&&this.maskDataPool.push(t),this.maskStack.length!==0){var i=this.maskStack[this.maskStack.length-1];i.type===mt.SPRITE&&i._filters&&(i._filters[0].maskSprite=i.maskObject)}}},r.prototype.detect=function(e){var t=e.maskObject;t?t.isSprite?e.type=mt.SPRITE:this.enableScissor&&this.renderer.scissor.testScissor(e)?e.type=mt.SCISSOR:e.type=mt.STENCIL:e.type=mt.COLOR},r.prototype.pushSpriteMask=function(e){var t,i,n=e.maskObject,s=e._target,a=e._filters;a||(a=this.alphaMaskPool[this.alphaMaskIndex],a||(a=this.alphaMaskPool[this.alphaMaskIndex]=[new oc]));var o=this.renderer,h=o.renderTexture,u,l;if(h.current){var f=h.current;u=e.resolution||f.resolution,l=(t=e.multisample)!==null&&t!==void 0?t:f.multisample}else u=e.resolution||o.resolution,l=(i=e.multisample)!==null&&i!==void 0?i:o.multisample;a[0].resolution=u,a[0].multisample=l,a[0].maskSprite=n;var c=s.filterArea;s.filterArea=n.getBounds(!0),o.filter.push(s,a),s.filterArea=c,e._filters||this.alphaMaskIndex++},r.prototype.popSpriteMask=function(e){this.renderer.filter.pop(),e._filters?e._filters[0].maskSprite=null:(this.alphaMaskIndex--,this.alphaMaskPool[this.alphaMaskIndex][0].maskSprite=null)},r.prototype.pushColorMask=function(e){var t=e._colorMask,i=e._colorMask=t&e.colorMask;i!==t&&this.renderer.gl.colorMask((i&1)!==0,(i&2)!==0,(i&4)!==0,(i&8)!==0)},r.prototype.popColorMask=function(e){var t=e._colorMask,i=this.maskStack.length>0?this.maskStack[this.maskStack.length-1]._colorMask:15;i!==t&&this.renderer.gl.colorMask((i&1)!==0,(i&2)!==0,(i&4)!==0,(i&8)!==0)},r.prototype.destroy=function(){this.renderer=null},r}(),qs=function(){function r(e){this.renderer=e,this.maskStack=[],this.glConst=0}return r.prototype.getStackLength=function(){return this.maskStack.length},r.prototype.setMaskStack=function(e){var t=this.renderer.gl,i=this.getStackLength();this.maskStack=e;var n=this.getStackLength();n!==i&&(n===0?t.disable(this.glConst):(t.enable(this.glConst),this._useCurrent()))},r.prototype._useCurrent=function(){},r.prototype.destroy=function(){this.renderer=null,this.maskStack=null},r}(),$s=new gt,Zs=[],uc=function(r){it(e,r);function e(t){var i=r.call(this,t)||this;return i.glConst=F.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST,i}return e.prototype.getStackLength=function(){var t=this.maskStack[this.maskStack.length-1];return t?t._scissorCounter:0},e.prototype.calcScissorRect=function(t){var i;if(!t._scissorRectLocal){var n=t._scissorRect,s=t.maskObject,a=this.renderer,o=a.renderTexture,h=s.getBounds(!0,(i=Zs.pop())!==null&&i!==void 0?i:new j);this.roundFrameToPixels(h,o.current?o.current.resolution:a.resolution,o.sourceFrame,o.destinationFrame,a.projection.transform),n&&h.fit(n),t._scissorRectLocal=h}},e.isMatrixRotated=function(t){if(!t)return!1;var i=t.a,n=t.b,s=t.c,a=t.d;return(Math.abs(n)>1e-4||Math.abs(s)>1e-4)&&(Math.abs(i)>1e-4||Math.abs(a)>1e-4)},e.prototype.testScissor=function(t){var i=t.maskObject;if(!i.isFastRect||!i.isFastRect()||e.isMatrixRotated(i.worldTransform)||e.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(t);var n=t._scissorRectLocal;return n.width>0&&n.height>0},e.prototype.roundFrameToPixels=function(t,i,n,s,a){e.isMatrixRotated(a)||(a=a?$s.copyFrom(a):$s.identity(),a.translate(-n.x,-n.y).scale(s.width/n.width,s.height/n.height).translate(s.x,s.y),this.renderer.filter.transformAABB(a,t),t.fit(s),t.x=Math.round(t.x*i),t.y=Math.round(t.y*i),t.width=Math.round(t.width*i),t.height=Math.round(t.height*i))},e.prototype.push=function(t){t._scissorRectLocal||this.calcScissorRect(t);var i=this.renderer.gl;t._scissorRect||i.enable(i.SCISSOR_TEST),t._scissorCounter++,t._scissorRect=t._scissorRectLocal,this._useCurrent()},e.prototype.pop=function(t){var i=this.renderer.gl;t&&Zs.push(t._scissorRectLocal),this.getStackLength()>0?this._useCurrent():i.disable(i.SCISSOR_TEST)},e.prototype._useCurrent=function(){var t=this.maskStack[this.maskStack.length-1]._scissorRect,i;this.renderer.renderTexture.current?i=t.y:i=this.renderer.height-t.height-t.y,this.renderer.gl.scissor(t.x,i,t.width,t.height)},e}(qs),lc=function(r){it(e,r);function e(t){var i=r.call(this,t)||this;return i.glConst=F.ADAPTER.getWebGLRenderingContext().STENCIL_TEST,i}return e.prototype.getStackLength=function(){var t=this.maskStack[this.maskStack.length-1];return t?t._stencilCounter:0},e.prototype.push=function(t){var i=t.maskObject,n=this.renderer.gl,s=t._stencilCounter;s===0&&(this.renderer.framebuffer.forceStencil(),n.clearStencil(0),n.clear(n.STENCIL_BUFFER_BIT),n.enable(n.STENCIL_TEST)),t._stencilCounter++;var a=t._colorMask;a!==0&&(t._colorMask=0,n.colorMask(!1,!1,!1,!1)),n.stencilFunc(n.EQUAL,s,4294967295),n.stencilOp(n.KEEP,n.KEEP,n.INCR),i.renderable=!0,i.render(this.renderer),this.renderer.batch.flush(),i.renderable=!1,a!==0&&(t._colorMask=a,n.colorMask((a&1)!==0,(a&2)!==0,(a&4)!==0,(a&8)!==0)),this._useCurrent()},e.prototype.pop=function(t){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,s=n?n._colorMask:15;s!==0&&(n._colorMask=0,i.colorMask(!1,!1,!1,!1)),i.stencilOp(i.KEEP,i.KEEP,i.DECR),t.renderable=!0,t.render(this.renderer),this.renderer.batch.flush(),t.renderable=!1,s!==0&&(n._colorMask=s,i.colorMask((s&1)!==0,(s&2)!==0,(s&4)!==0,(s&8)!==0)),this._useCurrent()}},e.prototype._useCurrent=function(){var t=this.renderer.gl;t.stencilFunc(t.EQUAL,this.getStackLength(),4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP)},e}(qs),fc=function(){function r(e){this.renderer=e,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new gt,this.transform=null}return r.prototype.update=function(e,t,i,n){this.destinationFrame=e||this.destinationFrame||this.defaultFrame,this.sourceFrame=t||this.sourceFrame||e,this.calculateProjection(this.destinationFrame,this.sourceFrame,i,n),this.transform&&this.projectionMatrix.append(this.transform);var s=this.renderer;s.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,s.globalUniforms.update(),s.shader.shader&&s.shader.syncUniformGroup(s.shader.shader.uniforms.globals)},r.prototype.calculateProjection=function(e,t,i,n){var s=this.projectionMatrix,a=n?-1:1;s.identity(),s.a=1/t.width*2,s.d=a*(1/t.height*2),s.tx=-1-t.x*s.a,s.ty=-a-t.y*s.d},r.prototype.setTransform=function(e){},r.prototype.destroy=function(){this.renderer=null},r}(),Se=new j,ai=new j,cc=function(){function r(e){this.renderer=e,this.clearColor=e._backgroundColorRgba,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new j,this.destinationFrame=new j,this.viewportFrame=new j}return r.prototype.bind=function(e,t,i){e===void 0&&(e=null);var n=this.renderer;this.current=e;var s,a,o;e?(s=e.baseTexture,o=s.resolution,t||(Se.width=e.frame.width,Se.height=e.frame.height,t=Se),i||(ai.x=e.frame.x,ai.y=e.frame.y,ai.width=t.width,ai.height=t.height,i=ai),a=s.framebuffer):(o=n.resolution,t||(Se.width=n.screen.width,Se.height=n.screen.height,t=Se),i||(i=Se,i.width=t.width,i.height=t.height));var h=this.viewportFrame;h.x=i.x*o,h.y=i.y*o,h.width=i.width*o,h.height=i.height*o,e||(h.y=n.view.height-(h.y+h.height)),h.ceil(),this.renderer.framebuffer.bind(a,h),this.renderer.projection.update(i,t,o,!a),e?this.renderer.mask.setMaskStack(s.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(t),this.destinationFrame.copyFrom(i)},r.prototype.clear=function(e,t){this.current?e=e||this.current.baseTexture.clearColor:e=e||this.clearColor;var i=this.destinationFrame,n=this.current?this.current.baseTexture:this.renderer.screen,s=i.width!==n.width||i.height!==n.height;if(s){var a=this.viewportFrame,o=a.x,h=a.y,u=a.width,l=a.height;o=Math.round(o),h=Math.round(h),u=Math.round(u),l=Math.round(l),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(o,h,u,l)}this.renderer.framebuffer.clear(e[0],e[1],e[2],e[3],t),s&&this.renderer.scissor.pop()},r.prototype.resize=function(){this.bind(null)},r.prototype.reset=function(){this.bind(null)},r.prototype.destroy=function(){this.renderer=null},r}();function dc(r,e,t,i,n){t.buffer.update(n)}var pc={float:`
349
+ `,Ch=new vt,Pa=function(){function l(e,t){this._texture=e,this.mapCoord=new vt,this.uClampFrame=new Float32Array(4),this.uClampOffset=new Float32Array(2),this._textureID=-1,this._updateID=0,this.clampOffset=0,this.clampMargin=typeof t>"u"?.5:t,this.isSimple=!1}return Object.defineProperty(l.prototype,"texture",{get:function(){return this._texture},set:function(e){this._texture=e,this._textureID=-1},enumerable:!1,configurable:!0}),l.prototype.multiplyUvs=function(e,t){t===void 0&&(t=e);for(var i=this.mapCoord,n=0;n<e.length;n+=2){var a=e[n],s=e[n+1];t[n]=a*i.a+s*i.c+i.tx,t[n+1]=a*i.b+s*i.d+i.ty}return t},l.prototype.update=function(e){var t=this._texture;if(!t||!t.valid||!e&&this._textureID===t._updateID)return!1;this._textureID=t._updateID,this._updateID++;var i=t._uvs;this.mapCoord.set(i.x1-i.x0,i.y1-i.y0,i.x3-i.x0,i.y3-i.y0,i.x0,i.y0);var n=t.orig,a=t.trim;a&&(Ch.set(n.width/a.width,0,0,n.height/a.height,-a.x/a.width,-a.y/a.height),this.mapCoord.append(Ch));var s=t.baseTexture,d=this.uClampFrame,h=this.clampMargin/s.resolution,r=this.clampOffset;return d[0]=(t._frame.x+h+r)/s.width,d[1]=(t._frame.y+h+r)/s.height,d[2]=(t._frame.x+t._frame.width-h+r)/s.width,d[3]=(t._frame.y+t._frame.height-h+r)/s.height,this.uClampOffset[0]=r/s.realWidth,this.uClampOffset[1]=r/s.realHeight,this.isSimple=t._frame.width===s.width&&t._frame.height===s.height&&t.rotate===0,!0},l}(),Rb=function(l){ht(e,l);function e(t,i,n){var a=this,s=null;return typeof t!="string"&&i===void 0&&n===void 0&&(s=t,t=void 0,i=void 0,n=void 0),a=l.call(this,t||yb,i||Vb,n)||this,a.maskSprite=s,a.maskMatrix=new vt,a}return Object.defineProperty(e.prototype,"maskSprite",{get:function(){return this._maskSprite},set:function(t){this._maskSprite=t,this._maskSprite&&(this._maskSprite.renderable=!1)},enumerable:!1,configurable:!0}),e.prototype.apply=function(t,i,n,a){var s=this._maskSprite,d=s._texture;d.valid&&(d.uvMatrix||(d.uvMatrix=new Pa(d,0)),d.uvMatrix.update(),this.uniforms.npmAlpha=d.baseTexture.alphaMode?0:1,this.uniforms.mask=d,this.uniforms.otherMatrix=t.calculateSpriteMatrix(this.maskMatrix,s).prepend(d.uvMatrix.mapCoord),this.uniforms.alpha=s.worldAlpha,this.uniforms.maskClamp=d.uvMatrix.uClampFrame,t.applyFilter(this,i,n,a))},e}(De),Wb=function(){function l(e){this.renderer=e,this.enableScissor=!0,this.alphaMaskPool=[],this.maskDataPool=[],this.maskStack=[],this.alphaMaskIndex=0}return l.prototype.setMaskStack=function(e){this.maskStack=e,this.renderer.scissor.setMaskStack(e),this.renderer.stencil.setMaskStack(e)},l.prototype.push=function(e,t){var i=t;if(!i.isMaskData){var n=this.maskDataPool.pop()||new ib;n.pooled=!0,n.maskObject=t,i=n}var a=this.maskStack.length!==0?this.maskStack[this.maskStack.length-1]:null;if(i.copyCountersOrReset(a),i._colorMask=a?a._colorMask:15,i.autoDetect&&this.detect(i),i._target=e,i.type!==Lt.SPRITE&&this.maskStack.push(i),i.enabled)switch(i.type){case Lt.SCISSOR:this.renderer.scissor.push(i);break;case Lt.STENCIL:this.renderer.stencil.push(i);break;case Lt.SPRITE:i.copyCountersOrReset(null),this.pushSpriteMask(i);break;case Lt.COLOR:this.pushColorMask(i);break}i.type===Lt.SPRITE&&this.maskStack.push(i)},l.prototype.pop=function(e){var t=this.maskStack.pop();if(!(!t||t._target!==e)){if(t.enabled)switch(t.type){case Lt.SCISSOR:this.renderer.scissor.pop(t);break;case Lt.STENCIL:this.renderer.stencil.pop(t.maskObject);break;case Lt.SPRITE:this.popSpriteMask(t);break;case Lt.COLOR:this.popColorMask(t);break}if(t.reset(),t.pooled&&this.maskDataPool.push(t),this.maskStack.length!==0){var i=this.maskStack[this.maskStack.length-1];i.type===Lt.SPRITE&&i._filters&&(i._filters[0].maskSprite=i.maskObject)}}},l.prototype.detect=function(e){var t=e.maskObject;t?t.isSprite?e.type=Lt.SPRITE:this.enableScissor&&this.renderer.scissor.testScissor(e)?e.type=Lt.SCISSOR:e.type=Lt.STENCIL:e.type=Lt.COLOR},l.prototype.pushSpriteMask=function(e){var t,i,n=e.maskObject,a=e._target,s=e._filters;s||(s=this.alphaMaskPool[this.alphaMaskIndex],s||(s=this.alphaMaskPool[this.alphaMaskIndex]=[new Rb]));var d=this.renderer,h=d.renderTexture,r,o;if(h.current){var c=h.current;r=e.resolution||c.resolution,o=(t=e.multisample)!==null&&t!==void 0?t:c.multisample}else r=e.resolution||d.resolution,o=(i=e.multisample)!==null&&i!==void 0?i:d.multisample;s[0].resolution=r,s[0].multisample=o,s[0].maskSprite=n;var u=a.filterArea;a.filterArea=n.getBounds(!0),d.filter.push(a,s),a.filterArea=u,e._filters||this.alphaMaskIndex++},l.prototype.popSpriteMask=function(e){this.renderer.filter.pop(),e._filters?e._filters[0].maskSprite=null:(this.alphaMaskIndex--,this.alphaMaskPool[this.alphaMaskIndex][0].maskSprite=null)},l.prototype.pushColorMask=function(e){var t=e._colorMask,i=e._colorMask=t&e.colorMask;i!==t&&this.renderer.gl.colorMask((i&1)!==0,(i&2)!==0,(i&4)!==0,(i&8)!==0)},l.prototype.popColorMask=function(e){var t=e._colorMask,i=this.maskStack.length>0?this.maskStack[this.maskStack.length-1]._colorMask:15;i!==t&&this.renderer.gl.colorMask((i&1)!==0,(i&2)!==0,(i&4)!==0,(i&8)!==0)},l.prototype.destroy=function(){this.renderer=null},l}(),Fh=function(){function l(e){this.renderer=e,this.maskStack=[],this.glConst=0}return l.prototype.getStackLength=function(){return this.maskStack.length},l.prototype.setMaskStack=function(e){var t=this.renderer.gl,i=this.getStackLength();this.maskStack=e;var n=this.getStackLength();n!==i&&(n===0?t.disable(this.glConst):(t.enable(this.glConst),this._useCurrent()))},l.prototype._useCurrent=function(){},l.prototype.destroy=function(){this.renderer=null,this.maskStack=null},l}(),Uh=new vt,kh=[],fb=function(l){ht(e,l);function e(t){var i=l.call(this,t)||this;return i.glConst=U.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST,i}return e.prototype.getStackLength=function(){var t=this.maskStack[this.maskStack.length-1];return t?t._scissorCounter:0},e.prototype.calcScissorRect=function(t){var i;if(!t._scissorRectLocal){var n=t._scissorRect,a=t.maskObject,s=this.renderer,d=s.renderTexture,h=a.getBounds(!0,(i=kh.pop())!==null&&i!==void 0?i:new j);this.roundFrameToPixels(h,d.current?d.current.resolution:s.resolution,d.sourceFrame,d.destinationFrame,s.projection.transform),n&&h.fit(n),t._scissorRectLocal=h}},e.isMatrixRotated=function(t){if(!t)return!1;var i=t.a,n=t.b,a=t.c,s=t.d;return(Math.abs(n)>1e-4||Math.abs(a)>1e-4)&&(Math.abs(i)>1e-4||Math.abs(s)>1e-4)},e.prototype.testScissor=function(t){var i=t.maskObject;if(!i.isFastRect||!i.isFastRect()||e.isMatrixRotated(i.worldTransform)||e.isMatrixRotated(this.renderer.projection.transform))return!1;this.calcScissorRect(t);var n=t._scissorRectLocal;return n.width>0&&n.height>0},e.prototype.roundFrameToPixels=function(t,i,n,a,s){e.isMatrixRotated(s)||(s=s?Uh.copyFrom(s):Uh.identity(),s.translate(-n.x,-n.y).scale(a.width/n.width,a.height/n.height).translate(a.x,a.y),this.renderer.filter.transformAABB(s,t),t.fit(a),t.x=Math.round(t.x*i),t.y=Math.round(t.y*i),t.width=Math.round(t.width*i),t.height=Math.round(t.height*i))},e.prototype.push=function(t){t._scissorRectLocal||this.calcScissorRect(t);var i=this.renderer.gl;t._scissorRect||i.enable(i.SCISSOR_TEST),t._scissorCounter++,t._scissorRect=t._scissorRectLocal,this._useCurrent()},e.prototype.pop=function(t){var i=this.renderer.gl;t&&kh.push(t._scissorRectLocal),this.getStackLength()>0?this._useCurrent():i.disable(i.SCISSOR_TEST)},e.prototype._useCurrent=function(){var t=this.maskStack[this.maskStack.length-1]._scissorRect,i;this.renderer.renderTexture.current?i=t.y:i=this.renderer.height-t.height-t.y,this.renderer.gl.scissor(t.x,i,t.width,t.height)},e}(Fh),Lb=function(l){ht(e,l);function e(t){var i=l.call(this,t)||this;return i.glConst=U.ADAPTER.getWebGLRenderingContext().STENCIL_TEST,i}return e.prototype.getStackLength=function(){var t=this.maskStack[this.maskStack.length-1];return t?t._stencilCounter:0},e.prototype.push=function(t){var i=t.maskObject,n=this.renderer.gl,a=t._stencilCounter;a===0&&(this.renderer.framebuffer.forceStencil(),n.clearStencil(0),n.clear(n.STENCIL_BUFFER_BIT),n.enable(n.STENCIL_TEST)),t._stencilCounter++;var s=t._colorMask;s!==0&&(t._colorMask=0,n.colorMask(!1,!1,!1,!1)),n.stencilFunc(n.EQUAL,a,4294967295),n.stencilOp(n.KEEP,n.KEEP,n.INCR),i.renderable=!0,i.render(this.renderer),this.renderer.batch.flush(),i.renderable=!1,s!==0&&(t._colorMask=s,n.colorMask((s&1)!==0,(s&2)!==0,(s&4)!==0,(s&8)!==0)),this._useCurrent()},e.prototype.pop=function(t){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,a=n?n._colorMask:15;a!==0&&(n._colorMask=0,i.colorMask(!1,!1,!1,!1)),i.stencilOp(i.KEEP,i.KEEP,i.DECR),t.renderable=!0,t.render(this.renderer),this.renderer.batch.flush(),t.renderable=!1,a!==0&&(n._colorMask=a,i.colorMask((a&1)!==0,(a&2)!==0,(a&4)!==0,(a&8)!==0)),this._useCurrent()}},e.prototype._useCurrent=function(){var t=this.renderer.gl;t.stencilFunc(t.EQUAL,this.getStackLength(),4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP)},e}(Fh),xb=function(){function l(e){this.renderer=e,this.destinationFrame=null,this.sourceFrame=null,this.defaultFrame=null,this.projectionMatrix=new vt,this.transform=null}return l.prototype.update=function(e,t,i,n){this.destinationFrame=e||this.destinationFrame||this.defaultFrame,this.sourceFrame=t||this.sourceFrame||e,this.calculateProjection(this.destinationFrame,this.sourceFrame,i,n),this.transform&&this.projectionMatrix.append(this.transform);var a=this.renderer;a.globalUniforms.uniforms.projectionMatrix=this.projectionMatrix,a.globalUniforms.update(),a.shader.shader&&a.shader.syncUniformGroup(a.shader.shader.uniforms.globals)},l.prototype.calculateProjection=function(e,t,i,n){var a=this.projectionMatrix,s=n?-1:1;a.identity(),a.a=1/t.width*2,a.d=s*(1/t.height*2),a.tx=-1-t.x*a.a,a.ty=-s-t.y*a.d},l.prototype.setTransform=function(e){},l.prototype.destroy=function(){this.renderer=null},l}(),Ri=new j,fl=new j,Sb=function(){function l(e){this.renderer=e,this.clearColor=e._backgroundColorRgba,this.defaultMaskStack=[],this.current=null,this.sourceFrame=new j,this.destinationFrame=new j,this.viewportFrame=new j}return l.prototype.bind=function(e,t,i){e===void 0&&(e=null);var n=this.renderer;this.current=e;var a,s,d;e?(a=e.baseTexture,d=a.resolution,t||(Ri.width=e.frame.width,Ri.height=e.frame.height,t=Ri),i||(fl.x=e.frame.x,fl.y=e.frame.y,fl.width=t.width,fl.height=t.height,i=fl),s=a.framebuffer):(d=n.resolution,t||(Ri.width=n.screen.width,Ri.height=n.screen.height,t=Ri),i||(i=Ri,i.width=t.width,i.height=t.height));var h=this.viewportFrame;h.x=i.x*d,h.y=i.y*d,h.width=i.width*d,h.height=i.height*d,e||(h.y=n.view.height-(h.y+h.height)),h.ceil(),this.renderer.framebuffer.bind(s,h),this.renderer.projection.update(i,t,d,!s),e?this.renderer.mask.setMaskStack(a.maskStack):this.renderer.mask.setMaskStack(this.defaultMaskStack),this.sourceFrame.copyFrom(t),this.destinationFrame.copyFrom(i)},l.prototype.clear=function(e,t){this.current?e=e||this.current.baseTexture.clearColor:e=e||this.clearColor;var i=this.destinationFrame,n=this.current?this.current.baseTexture:this.renderer.screen,a=i.width!==n.width||i.height!==n.height;if(a){var s=this.viewportFrame,d=s.x,h=s.y,r=s.width,o=s.height;d=Math.round(d),h=Math.round(h),r=Math.round(r),o=Math.round(o),this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST),this.renderer.gl.scissor(d,h,r,o)}this.renderer.framebuffer.clear(e[0],e[1],e[2],e[3],t),a&&this.renderer.scissor.pop()},l.prototype.resize=function(){this.bind(null)},l.prototype.reset=function(){this.bind(null)},l.prototype.destroy=function(){this.renderer=null},l}();function vb(l,e,t,i,n){t.buffer.update(n)}var Ib={float:`
346
350
  data[offset] = v;
347
351
  `,vec2:`
348
352
  data[offset] = v[0];
@@ -380,7 +384,7 @@ void main(void)
380
384
  {
381
385
  data[offset + i] = v[i];
382
386
  }
383
- `},Ks={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 vc(r){for(var e=r.map(function(h){return{data:h,offset:0,dataLen:0,dirty:0}}),t=0,i=0,n=0,s=0;s<e.length;s++){var a=e[s];if(t=Ks[a.data.type],a.data.size>1&&(t=Math.max(t,16)*a.data.size),a.dataLen=t,i%t!==0&&i<16){var o=i%t%16;i+=o,n+=o}i+t>16?(n=Math.ceil(n/16)*16,a.offset=n,n+=t,i=t):(a.offset=n,i+=t,n+=t)}return n=Math.ceil(n/16)*16,{uboElements:e,size:n}}function _c(r,e){var t=[];for(var i in r)e[i]&&t.push(e[i]);return t.sort(function(n,s){return n.index-s.index}),t}function mc(r,e){if(!r.autoManage)return{size:0,syncFunc:dc};for(var t=_c(r.uniforms,e),i=vc(t),n=i.uboElements,s=i.size,a=[`
387
+ `},Nh={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 Yb(l){for(var e=l.map(function(h){return{data:h,offset:0,dataLen:0,dirty:0}}),t=0,i=0,n=0,a=0;a<e.length;a++){var s=e[a];if(t=Nh[s.data.type],s.data.size>1&&(t=Math.max(t,16)*s.data.size),s.dataLen=t,i%t!==0&&i<16){var d=i%t%16;i+=d,n+=d}i+t>16?(n=Math.ceil(n/16)*16,s.offset=n,n+=t,i=t):(s.offset=n,i+=t,n+=t)}return n=Math.ceil(n/16)*16,{uboElements:e,size:n}}function gb(l,e){var t=[];for(var i in l)e[i]&&t.push(e[i]);return t.sort(function(n,a){return n.index-a.index}),t}function Tb(l,e){if(!l.autoManage)return{size:0,syncFunc:vb};for(var t=gb(l.uniforms,e),i=Yb(t),n=i.uboElements,a=i.size,s=[`
384
388
  var v = null;
385
389
  var v2 = null;
386
390
  var cv = null;
@@ -388,31 +392,31 @@ void main(void)
388
392
  var gl = renderer.gl
389
393
  var index = 0;
390
394
  var data = buffer.data;
391
- `],o=0;o<n.length;o++){for(var h=n[o],u=r.uniforms[h.data.name],l=h.data.name,f=!1,c=0;c<Ge.length;c++){var d=Ge[c];if(d.codeUbo&&d.test(h.data,u)){a.push("offset = "+h.offset/4+";",Ge[c].codeUbo(h.data.name,u)),f=!0;break}}if(!f)if(h.data.size>1){var p=js(h.data.type),v=Math.max(Ks[h.data.type]/16,1),_=p/v,m=(4-_%4)%4;a.push(`
392
- cv = ud.`+l+`.value;
393
- v = uv.`+l+`;
395
+ `],d=0;d<n.length;d++){for(var h=n[d],r=l.uniforms[h.data.name],o=h.data.name,c=!1,u=0;u<Pi.length;u++){var m=Pi[u];if(m.codeUbo&&m.test(h.data,r)){s.push("offset = "+h.offset/4+";",Pi[u].codeUbo(h.data.name,r)),c=!0;break}}if(!c)if(h.data.size>1){var b=Th(h.data.type),Z=Math.max(Nh[h.data.type]/16,1),p=b/Z,G=(4-p%4)%4;s.push(`
396
+ cv = ud.`+o+`.value;
397
+ v = uv.`+o+`;
394
398
  offset = `+h.offset/4+`;
395
399
 
396
400
  t = 0;
397
401
 
398
- for(var i=0; i < `+h.data.size*v+`; i++)
402
+ for(var i=0; i < `+h.data.size*Z+`; i++)
399
403
  {
400
- for(var j = 0; j < `+_+`; j++)
404
+ for(var j = 0; j < `+p+`; j++)
401
405
  {
402
406
  data[offset++] = v[t++];
403
407
  }
404
- offset += `+m+`;
408
+ offset += `+G+`;
405
409
  }
406
410
 
407
- `)}else{var g=pc[h.data.type];a.push(`
408
- cv = ud.`+l+`.value;
409
- v = uv.`+l+`;
411
+ `)}else{var X=Ib[h.data.type];s.push(`
412
+ cv = ud.`+o+`.value;
413
+ v = uv.`+o+`;
410
414
  offset = `+h.offset/4+`;
411
- `+g+`;
412
- `)}}return a.push(`
415
+ `+X+`;
416
+ `)}}return s.push(`
413
417
  renderer.buffer.update(buffer);
414
- `),{size:s,syncFunc:new Function("ud","uv","renderer","syncData","buffer",a.join(`
415
- `))}}var gc=function(){function r(e,t){this.program=e,this.uniformData=t,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}return r.prototype.destroy=function(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null},r}();function yc(r,e){for(var t={},i=e.getProgramParameter(r,e.ACTIVE_ATTRIBUTES),n=0;n<i;n++){var s=e.getActiveAttrib(r,n);if(s.name.indexOf("gl_")!==0){var a=Ys(e,s.type),o={type:a,name:s.name,size:js(a),location:e.getAttribLocation(r,s.name)};t[s.name]=o}}return t}function xc(r,e){for(var t={},i=e.getProgramParameter(r,e.ACTIVE_UNIFORMS),n=0;n<i;n++){var s=e.getActiveUniform(r,n),a=s.name.replace(/\[.*?\]$/,""),o=!!s.name.match(/\[.*?\]$/),h=Ys(e,s.type);t[a]={name:a,index:n,type:h,size:s.size,isArray:o,value:Hs(h,s.size)}}return t}function bc(r,e){var t=Gs(r,r.VERTEX_SHADER,e.vertexSrc),i=Gs(r,r.FRAGMENT_SHADER,e.fragmentSrc),n=r.createProgram();if(r.attachShader(n,t),r.attachShader(n,i),r.linkProgram(n),r.getProgramParameter(n,r.LINK_STATUS)||Wf(r,n,t,i),e.attributeData=yc(n,r),e.uniformData=xc(n,r),!/^[ \t]*#[ \t]*version[ \t]+300[ \t]+es[ \t]*$/m.test(e.vertexSrc)){var s=Object.keys(e.attributeData);s.sort(function(l,f){return l>f?1:-1});for(var a=0;a<s.length;a++)e.attributeData[s[a]].location=a,r.bindAttribLocation(n,a,s[a]);r.linkProgram(n)}r.deleteShader(t),r.deleteShader(i);var o={};for(var a in e.uniformData){var h=e.uniformData[a];o[a]={location:r.getUniformLocation(n,a),value:Hs(h.type,h.size)}}var u=new gc(n,o);return u}var Tc=0,Hi={textureCount:0,uboCount:0},wc=function(){function r(e){this.destroyed=!1,this.renderer=e,this.systemCheck(),this.gl=null,this.shader=null,this.program=null,this.cache={},this._uboCache={},this.id=Tc++}return r.prototype.systemCheck=function(){if(!Jf())throw new Error("Current environment does not allow unsafe-eval, please use @pixi/unsafe-eval module to enable support.")},r.prototype.contextChange=function(e){this.gl=e,this.reset()},r.prototype.bind=function(e,t){e.disposeRunner.add(this),e.uniforms.globals=this.renderer.globalUniforms;var i=e.program,n=i.glPrograms[this.renderer.CONTEXT_UID]||this.generateProgram(e);return this.shader=e,this.program!==i&&(this.program=i,this.gl.useProgram(n.program)),t||(Hi.textureCount=0,Hi.uboCount=0,this.syncUniformGroup(e.uniformGroup,Hi)),n},r.prototype.setUniforms=function(e){var t=this.shader.program,i=t.glPrograms[this.renderer.CONTEXT_UID];t.syncUniforms(i.uniformData,e,this.renderer)},r.prototype.syncUniformGroup=function(e,t){var i=this.getGlProgram();(!e.static||e.dirtyId!==i.uniformDirtyGroups[e.id])&&(i.uniformDirtyGroups[e.id]=e.dirtyId,this.syncUniforms(e,i,t))},r.prototype.syncUniforms=function(e,t,i){var n=e.syncUniforms[this.shader.program.id]||this.createSyncGroups(e);n(t.uniformData,e.uniforms,this.renderer,i)},r.prototype.createSyncGroups=function(e){var t=this.getSignature(e,this.shader.program.uniformData,"u");return this.cache[t]||(this.cache[t]=$f(e,this.shader.program.uniformData)),e.syncUniforms[this.shader.program.id]=this.cache[t],e.syncUniforms[this.shader.program.id]},r.prototype.syncUniformBufferGroup=function(e,t){var i=this.getGlProgram();if(!e.static||e.dirtyId!==0||!i.uniformGroups[e.id]){e.dirtyId=0;var n=i.uniformGroups[e.id]||this.createSyncBufferGroup(e,i,t);e.buffer.update(),n(i.uniformData,e.uniforms,this.renderer,Hi,e.buffer)}this.renderer.buffer.bindBufferBase(e.buffer,i.uniformBufferBindings[t])},r.prototype.createSyncBufferGroup=function(e,t,i){var n=this.renderer.gl;this.renderer.buffer.bind(e.buffer);var s=this.gl.getUniformBlockIndex(t.program,i);t.uniformBufferBindings[i]=this.shader.uniformBindCount,n.uniformBlockBinding(t.program,s,this.shader.uniformBindCount),this.shader.uniformBindCount++;var a=this.getSignature(e,this.shader.program.uniformData,"ubo"),o=this._uboCache[a];if(o||(o=this._uboCache[a]=mc(e,this.shader.program.uniformData)),e.autoManage){var h=new Float32Array(o.size/4);e.buffer.update(h)}return t.uniformGroups[e.id]=o.syncFunc,t.uniformGroups[e.id]},r.prototype.getSignature=function(e,t,i){var n=e.uniforms,s=[i+"-"];for(var a in n)s.push(a),t[a]&&s.push(t[a].type);return s.join("-")},r.prototype.getGlProgram=function(){return this.shader?this.shader.program.glPrograms[this.renderer.CONTEXT_UID]:null},r.prototype.generateProgram=function(e){var t=this.gl,i=e.program,n=bc(t,i);return i.glPrograms[this.renderer.CONTEXT_UID]=n,n},r.prototype.reset=function(){this.program=null,this.shader=null},r.prototype.disposeShader=function(e){this.shader===e&&(this.shader=null)},r.prototype.destroy=function(){this.renderer=null,this.destroyed=!0},r}();function Ec(r,e){return e===void 0&&(e=[]),e[G.NORMAL]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.ADD]=[r.ONE,r.ONE],e[G.MULTIPLY]=[r.DST_COLOR,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.SCREEN]=[r.ONE,r.ONE_MINUS_SRC_COLOR,r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.OVERLAY]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.DARKEN]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.LIGHTEN]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.COLOR_DODGE]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.COLOR_BURN]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.HARD_LIGHT]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.SOFT_LIGHT]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.DIFFERENCE]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.EXCLUSION]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.HUE]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.SATURATION]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.COLOR]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.LUMINOSITY]=[r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.NONE]=[0,0],e[G.NORMAL_NPM]=[r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.ADD_NPM]=[r.SRC_ALPHA,r.ONE,r.ONE,r.ONE],e[G.SCREEN_NPM]=[r.SRC_ALPHA,r.ONE_MINUS_SRC_COLOR,r.ONE,r.ONE_MINUS_SRC_ALPHA],e[G.SRC_IN]=[r.DST_ALPHA,r.ZERO],e[G.SRC_OUT]=[r.ONE_MINUS_DST_ALPHA,r.ZERO],e[G.SRC_ATOP]=[r.DST_ALPHA,r.ONE_MINUS_SRC_ALPHA],e[G.DST_OVER]=[r.ONE_MINUS_DST_ALPHA,r.ONE],e[G.DST_IN]=[r.ZERO,r.SRC_ALPHA],e[G.DST_OUT]=[r.ZERO,r.ONE_MINUS_SRC_ALPHA],e[G.DST_ATOP]=[r.ONE_MINUS_DST_ALPHA,r.SRC_ALPHA],e[G.XOR]=[r.ONE_MINUS_DST_ALPHA,r.ONE_MINUS_SRC_ALPHA],e[G.SUBTRACT]=[r.ONE,r.ONE,r.ONE,r.ONE,r.FUNC_REVERSE_SUBTRACT,r.FUNC_ADD],e}var Sc=0,Pc=1,Rc=2,Cc=3,Ac=4,Ic=5,Oc=function(){function r(){this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode=G.NONE,this._blendEq=!1,this.map=[],this.map[Sc]=this.setBlend,this.map[Pc]=this.setOffset,this.map[Rc]=this.setCullFace,this.map[Cc]=this.setDepthTest,this.map[Ac]=this.setFrontFace,this.map[Ic]=this.setDepthMask,this.checks=[],this.defaultState=new Ee,this.defaultState.blend=!0}return r.prototype.contextChange=function(e){this.gl=e,this.blendModes=Ec(e),this.set(this.defaultState),this.reset()},r.prototype.set=function(e){if(e=e||this.defaultState,this.stateId!==e.data){for(var t=this.stateId^e.data,i=0;t;)t&1&&this.map[i].call(this,!!(e.data&1<<i)),t=t>>1,i++;this.stateId=e.data}for(var i=0;i<this.checks.length;i++)this.checks[i](this,e)},r.prototype.forceState=function(e){e=e||this.defaultState;for(var t=0;t<this.map.length;t++)this.map[t].call(this,!!(e.data&1<<t));for(var t=0;t<this.checks.length;t++)this.checks[t](this,e);this.stateId=e.data},r.prototype.setBlend=function(e){this.updateCheck(r.checkBlendMode,e),this.gl[e?"enable":"disable"](this.gl.BLEND)},r.prototype.setOffset=function(e){this.updateCheck(r.checkPolygonOffset,e),this.gl[e?"enable":"disable"](this.gl.POLYGON_OFFSET_FILL)},r.prototype.setDepthTest=function(e){this.gl[e?"enable":"disable"](this.gl.DEPTH_TEST)},r.prototype.setDepthMask=function(e){this.gl.depthMask(e)},r.prototype.setCullFace=function(e){this.gl[e?"enable":"disable"](this.gl.CULL_FACE)},r.prototype.setFrontFace=function(e){this.gl.frontFace(this.gl[e?"CW":"CCW"])},r.prototype.setBlendMode=function(e){if(e!==this.blendMode){this.blendMode=e;var t=this.blendModes[e],i=this.gl;t.length===2?i.blendFunc(t[0],t[1]):i.blendFuncSeparate(t[0],t[1],t[2],t[3]),t.length===6?(this._blendEq=!0,i.blendEquationSeparate(t[4],t[5])):this._blendEq&&(this._blendEq=!1,i.blendEquationSeparate(i.FUNC_ADD,i.FUNC_ADD))}},r.prototype.setPolygonOffset=function(e,t){this.gl.polygonOffset(e,t)},r.prototype.reset=function(){this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!1),this.forceState(this.defaultState),this._blendEq=!0,this.blendMode=-1,this.setBlendMode(0)},r.prototype.updateCheck=function(e,t){var i=this.checks.indexOf(e);t&&i===-1?this.checks.push(e):!t&&i!==-1&&this.checks.splice(i,1)},r.checkBlendMode=function(e,t){e.setBlendMode(t.blendMode)},r.checkPolygonOffset=function(e,t){e.setPolygonOffset(1,t.polygonOffset)},r.prototype.destroy=function(){this.gl=null},r}(),Mc=function(){function r(e){this.renderer=e,this.count=0,this.checkCount=0,this.maxIdle=F.GC_MAX_IDLE,this.checkCountMax=F.GC_MAX_CHECK_COUNT,this.mode=F.GC_MODE}return r.prototype.postrender=function(){this.renderer.renderingToScreen&&(this.count++,this.mode!==wi.MANUAL&&(this.checkCount++,this.checkCount>this.checkCountMax&&(this.checkCount=0,this.run())))},r.prototype.run=function(){for(var e=this.renderer.texture,t=e.managedTextures,i=!1,n=0;n<t.length;n++){var s=t[n];!s.framebuffer&&this.count-s.touched>this.maxIdle&&(e.destroyTexture(s,!0),t[n]=null,i=!0)}if(i){for(var a=0,n=0;n<t.length;n++)t[n]!==null&&(t[a++]=t[n]);t.length=a}},r.prototype.unload=function(e){var t=this.renderer.texture,i=e._texture;i&&!i.framebuffer&&t.destroyTexture(i);for(var n=e.children.length-1;n>=0;n--)this.unload(e.children[n])},r.prototype.destroy=function(){this.renderer=null},r}();function Dc(r){var e,t,i,n,s,a,o,h,u,l,f,c,d,p,v,_,m,g,y,b,x,T,w;return"WebGL2RenderingContext"in globalThis&&r instanceof globalThis.WebGL2RenderingContext?w=(e={},e[L.UNSIGNED_BYTE]=(t={},t[R.RGBA]=r.RGBA8,t[R.RGB]=r.RGB8,t[R.RG]=r.RG8,t[R.RED]=r.R8,t[R.RGBA_INTEGER]=r.RGBA8UI,t[R.RGB_INTEGER]=r.RGB8UI,t[R.RG_INTEGER]=r.RG8UI,t[R.RED_INTEGER]=r.R8UI,t[R.ALPHA]=r.ALPHA,t[R.LUMINANCE]=r.LUMINANCE,t[R.LUMINANCE_ALPHA]=r.LUMINANCE_ALPHA,t),e[L.BYTE]=(i={},i[R.RGBA]=r.RGBA8_SNORM,i[R.RGB]=r.RGB8_SNORM,i[R.RG]=r.RG8_SNORM,i[R.RED]=r.R8_SNORM,i[R.RGBA_INTEGER]=r.RGBA8I,i[R.RGB_INTEGER]=r.RGB8I,i[R.RG_INTEGER]=r.RG8I,i[R.RED_INTEGER]=r.R8I,i),e[L.UNSIGNED_SHORT]=(n={},n[R.RGBA_INTEGER]=r.RGBA16UI,n[R.RGB_INTEGER]=r.RGB16UI,n[R.RG_INTEGER]=r.RG16UI,n[R.RED_INTEGER]=r.R16UI,n[R.DEPTH_COMPONENT]=r.DEPTH_COMPONENT16,n),e[L.SHORT]=(s={},s[R.RGBA_INTEGER]=r.RGBA16I,s[R.RGB_INTEGER]=r.RGB16I,s[R.RG_INTEGER]=r.RG16I,s[R.RED_INTEGER]=r.R16I,s),e[L.UNSIGNED_INT]=(a={},a[R.RGBA_INTEGER]=r.RGBA32UI,a[R.RGB_INTEGER]=r.RGB32UI,a[R.RG_INTEGER]=r.RG32UI,a[R.RED_INTEGER]=r.R32UI,a[R.DEPTH_COMPONENT]=r.DEPTH_COMPONENT24,a),e[L.INT]=(o={},o[R.RGBA_INTEGER]=r.RGBA32I,o[R.RGB_INTEGER]=r.RGB32I,o[R.RG_INTEGER]=r.RG32I,o[R.RED_INTEGER]=r.R32I,o),e[L.FLOAT]=(h={},h[R.RGBA]=r.RGBA32F,h[R.RGB]=r.RGB32F,h[R.RG]=r.RG32F,h[R.RED]=r.R32F,h[R.DEPTH_COMPONENT]=r.DEPTH_COMPONENT32F,h),e[L.HALF_FLOAT]=(u={},u[R.RGBA]=r.RGBA16F,u[R.RGB]=r.RGB16F,u[R.RG]=r.RG16F,u[R.RED]=r.R16F,u),e[L.UNSIGNED_SHORT_5_6_5]=(l={},l[R.RGB]=r.RGB565,l),e[L.UNSIGNED_SHORT_4_4_4_4]=(f={},f[R.RGBA]=r.RGBA4,f),e[L.UNSIGNED_SHORT_5_5_5_1]=(c={},c[R.RGBA]=r.RGB5_A1,c),e[L.UNSIGNED_INT_2_10_10_10_REV]=(d={},d[R.RGBA]=r.RGB10_A2,d[R.RGBA_INTEGER]=r.RGB10_A2UI,d),e[L.UNSIGNED_INT_10F_11F_11F_REV]=(p={},p[R.RGB]=r.R11F_G11F_B10F,p),e[L.UNSIGNED_INT_5_9_9_9_REV]=(v={},v[R.RGB]=r.RGB9_E5,v),e[L.UNSIGNED_INT_24_8]=(_={},_[R.DEPTH_STENCIL]=r.DEPTH24_STENCIL8,_),e[L.FLOAT_32_UNSIGNED_INT_24_8_REV]=(m={},m[R.DEPTH_STENCIL]=r.DEPTH32F_STENCIL8,m),e):w=(g={},g[L.UNSIGNED_BYTE]=(y={},y[R.RGBA]=r.RGBA,y[R.RGB]=r.RGB,y[R.ALPHA]=r.ALPHA,y[R.LUMINANCE]=r.LUMINANCE,y[R.LUMINANCE_ALPHA]=r.LUMINANCE_ALPHA,y),g[L.UNSIGNED_SHORT_5_6_5]=(b={},b[R.RGB]=r.RGB,b),g[L.UNSIGNED_SHORT_4_4_4_4]=(x={},x[R.RGBA]=r.RGBA,x),g[L.UNSIGNED_SHORT_5_5_5_1]=(T={},T[R.RGBA]=r.RGBA,T),g),w}var qr=function(){function r(e){this.texture=e,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=L.UNSIGNED_BYTE,this.internalFormat=R.RGBA,this.samplerType=0}return r}(),Fc=function(){function r(e){this.renderer=e,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new V,this.hasIntegerTextures=!1}return r.prototype.contextChange=function(){var e=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=Dc(e);var t=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=t;for(var i=0;i<t;i++)this.boundTextures[i]=null;this.emptyTextures={};var n=new qr(e.createTexture());e.bindTexture(e.TEXTURE_2D,n.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array(4)),this.emptyTextures[e.TEXTURE_2D]=n,this.emptyTextures[e.TEXTURE_CUBE_MAP]=new qr(e.createTexture()),e.bindTexture(e.TEXTURE_CUBE_MAP,this.emptyTextures[e.TEXTURE_CUBE_MAP].texture);for(var i=0;i<6;i++)e.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,null);e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,e.LINEAR);for(var i=0;i<this.boundTextures.length;i++)this.bind(null,i)},r.prototype.bind=function(e,t){t===void 0&&(t=0);var i=this.gl;if(e=e==null?void 0:e.castToBaseTexture(),e&&e.valid&&!e.parentTextureArray){e.touched=this.renderer.textureGC.count;var n=e._glTextures[this.CONTEXT_UID]||this.initTexture(e);this.boundTextures[t]!==e&&(this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),i.bindTexture(e.target,n.texture)),n.dirtyId!==e.dirtyId?(this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),this.updateTexture(e)):n.dirtyStyleId!==e.dirtyStyleId&&this.updateTextureStyle(e),this.boundTextures[t]=e}else this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),i.bindTexture(i.TEXTURE_2D,this.emptyTextures[i.TEXTURE_2D].texture),this.boundTextures[t]=null},r.prototype.reset=function(){this._unknownBoundTextures=!0,this.hasIntegerTextures=!1,this.currentLocation=-1;for(var e=0;e<this.boundTextures.length;e++)this.boundTextures[e]=this.unknownTexture},r.prototype.unbind=function(e){var t=this,i=t.gl,n=t.boundTextures;if(this._unknownBoundTextures){this._unknownBoundTextures=!1;for(var s=0;s<n.length;s++)n[s]===this.unknownTexture&&this.bind(null,s)}for(var s=0;s<n.length;s++)n[s]===e&&(this.currentLocation!==s&&(i.activeTexture(i.TEXTURE0+s),this.currentLocation=s),i.bindTexture(e.target,this.emptyTextures[e.target].texture),n[s]=null)},r.prototype.ensureSamplerType=function(e){var t=this,i=t.boundTextures,n=t.hasIntegerTextures,s=t.CONTEXT_UID;if(n)for(var a=e-1;a>=0;--a){var o=i[a];if(o){var h=o._glTextures[s];h.samplerType!==Ti.FLOAT&&this.renderer.texture.unbind(o)}}},r.prototype.initTexture=function(e){var t=new qr(this.gl.createTexture());return t.dirtyId=-1,e._glTextures[this.CONTEXT_UID]=t,this.managedTextures.push(e),e.on("dispose",this.destroyTexture,this),t},r.prototype.initTextureType=function(e,t){var i,n;t.internalFormat=(n=(i=this.internalFormats[e.type])===null||i===void 0?void 0:i[e.format])!==null&&n!==void 0?n:e.format,this.webGLVersion===2&&e.type===L.HALF_FLOAT?t.type=this.gl.HALF_FLOAT:t.type=e.type},r.prototype.updateTexture=function(e){var t=e._glTextures[this.CONTEXT_UID];if(t){var i=this.renderer;if(this.initTextureType(e,t),e.resource&&e.resource.upload(i,e,t))t.samplerType!==Ti.FLOAT&&(this.hasIntegerTextures=!0);else{var n=e.realWidth,s=e.realHeight,a=i.gl;(t.width!==n||t.height!==s||t.dirtyId<0)&&(t.width=n,t.height=s,a.texImage2D(e.target,0,t.internalFormat,n,s,0,e.format,t.type,null))}e.dirtyStyleId!==t.dirtyStyleId&&this.updateTextureStyle(e),t.dirtyId=e.dirtyId}},r.prototype.destroyTexture=function(e,t){var i=this.gl;if(e=e.castToBaseTexture(),e._glTextures[this.CONTEXT_UID]&&(this.unbind(e),i.deleteTexture(e._glTextures[this.CONTEXT_UID].texture),e.off("dispose",this.destroyTexture,this),delete e._glTextures[this.CONTEXT_UID],!t)){var n=this.managedTextures.indexOf(e);n!==-1&&Le(this.managedTextures,n,1)}},r.prototype.updateTextureStyle=function(e){var t=e._glTextures[this.CONTEXT_UID];t&&((e.mipmap===Ft.POW2||this.webGLVersion!==2)&&!e.isPowerOfTwo?t.mipmap=!1:t.mipmap=e.mipmap>=1,this.webGLVersion!==2&&!e.isPowerOfTwo?t.wrapMode=zt.CLAMP:t.wrapMode=e.wrapMode,e.resource&&e.resource.style(this.renderer,e,t)||this.setStyle(e,t),t.dirtyStyleId=e.dirtyStyleId)},r.prototype.setStyle=function(e,t){var i=this.gl;if(t.mipmap&&e.mipmap!==Ft.ON_MANUAL&&i.generateMipmap(e.target),i.texParameteri(e.target,i.TEXTURE_WRAP_S,t.wrapMode),i.texParameteri(e.target,i.TEXTURE_WRAP_T,t.wrapMode),t.mipmap){i.texParameteri(e.target,i.TEXTURE_MIN_FILTER,e.scaleMode===jt.LINEAR?i.LINEAR_MIPMAP_LINEAR:i.NEAREST_MIPMAP_NEAREST);var n=this.renderer.context.extensions.anisotropicFiltering;if(n&&e.anisotropicLevel>0&&e.scaleMode===jt.LINEAR){var s=Math.min(e.anisotropicLevel,i.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT));i.texParameterf(e.target,n.TEXTURE_MAX_ANISOTROPY_EXT,s)}}else i.texParameteri(e.target,i.TEXTURE_MIN_FILTER,e.scaleMode===jt.LINEAR?i.LINEAR:i.NEAREST);i.texParameteri(e.target,i.TEXTURE_MAG_FILTER,e.scaleMode===jt.LINEAR?i.LINEAR:i.NEAREST)},r.prototype.destroy=function(){this.renderer=null},r}(),$r=new gt,Nc=function(r){it(e,r);function e(t,i){t===void 0&&(t=Ye.UNKNOWN);var n=r.call(this)||this;return i=Object.assign({},F.RENDER_OPTIONS,i),n.options=i,n.type=t,n.screen=new j(0,0,i.width,i.height),n.view=i.view||F.ADAPTER.createCanvas(),n.resolution=i.resolution||F.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&&(Ut("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 e.prototype.initPlugins=function(t){for(var i in t)this.plugins[i]=new t[i](this)},Object.defineProperty(e.prototype,"width",{get:function(){return this.view.width},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.view.height},enumerable:!1,configurable:!0}),e.prototype.resize=function(t,i){this.view.width=Math.round(t*this.resolution),this.view.height=Math.round(i*this.resolution);var n=this.view.width/this.resolution,s=this.view.height/this.resolution;this.screen.width=n,this.screen.height=s,this.autoDensity&&(this.view.style.width=n+"px",this.view.style.height=s+"px"),this.emit("resize",n,s)},e.prototype.generateTexture=function(t,i,n,s){i===void 0&&(i={}),typeof i=="number"&&(Ut("6.1.0","generateTexture options (scaleMode, resolution, region) are now object options."),i={scaleMode:i,resolution:n,region:s});var a=i.region,o=mf(i,["region"]);s=a||t.getLocalBounds(null,!0),s.width===0&&(s.width=1),s.height===0&&(s.height=1);var h=Te.create(Br({width:s.width,height:s.height},o));return $r.tx=-s.x,$r.ty=-s.y,this.render(t,{renderTexture:h,clear:!1,transform:$r,skipUpdateTransform:!!t.parent}),h},e.prototype.destroy=function(t){for(var i in this.plugins)this.plugins[i].destroy(),this.plugins[i]=null;t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view);var n=this;n.plugins=null,n.type=Ye.UNKNOWN,n.view=null,n.screen=null,n._tempDisplayObjectParent=null,n.options=null,this._backgroundColorRgba=null,this._backgroundColorString=null,this._lastObjectRendered=null},Object.defineProperty(e.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=_s(t),Be(t,this._backgroundColorRgba)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"backgroundAlpha",{get:function(){return this._backgroundColorRgba[3]},set:function(t){this._backgroundColorRgba[3]=t},enumerable:!1,configurable:!0}),e}(Ve),Bc=function(){function r(e){this.buffer=e||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}return r}(),Lc=function(){function r(e){this.renderer=e,this.managedBuffers={},this.boundBufferBases={}}return r.prototype.destroy=function(){this.renderer=null},r.prototype.contextChange=function(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID},r.prototype.bind=function(e){var t=this,i=t.gl,n=t.CONTEXT_UID,s=e._glBuffers[n]||this.createGLBuffer(e);i.bindBuffer(e.type,s.buffer)},r.prototype.bindBufferBase=function(e,t){var i=this,n=i.gl,s=i.CONTEXT_UID;if(this.boundBufferBases[t]!==e){var a=e._glBuffers[s]||this.createGLBuffer(e);this.boundBufferBases[t]=e,n.bindBufferBase(n.UNIFORM_BUFFER,t,a.buffer)}},r.prototype.bindBufferRange=function(e,t,i){var n=this,s=n.gl,a=n.CONTEXT_UID;i=i||0;var o=e._glBuffers[a]||this.createGLBuffer(e);s.bindBufferRange(s.UNIFORM_BUFFER,t||0,o.buffer,i*256,256)},r.prototype.update=function(e){var t=this,i=t.gl,n=t.CONTEXT_UID,s=e._glBuffers[n];if(e._updateID!==s.updateID)if(s.updateID=e._updateID,i.bindBuffer(e.type,s.buffer),s.byteLength>=e.data.byteLength)i.bufferSubData(e.type,0,e.data);else{var a=e.static?i.STATIC_DRAW:i.DYNAMIC_DRAW;s.byteLength=e.data.byteLength,i.bufferData(e.type,e.data,a)}},r.prototype.dispose=function(e,t){if(this.managedBuffers[e.id]){delete this.managedBuffers[e.id];var i=e._glBuffers[this.CONTEXT_UID],n=this.gl;e.disposeRunner.remove(this),i&&(t||n.deleteBuffer(i.buffer),delete e._glBuffers[this.CONTEXT_UID])}},r.prototype.disposeAll=function(e){for(var t=Object.keys(this.managedBuffers),i=0;i<t.length;i++)this.dispose(this.managedBuffers[t[i]],e)},r.prototype.createGLBuffer=function(e){var t=this,i=t.CONTEXT_UID,n=t.gl;return e._glBuffers[i]=new Bc(n.createBuffer()),this.managedBuffers[e.id]=e,e.disposeRunner.add(this),e._glBuffers[i]},r}(),Qs=function(r){it(e,r);function e(t){var i=r.call(this,Ye.WEBGL,t)||this;return t=i.options,i.gl=null,i.CONTEXT_UID=0,i.runners={destroy:new Et("destroy"),contextChange:new Et("contextChange"),reset:new Et("reset"),update:new Et("update"),postrender:new Et("postrender"),prerender:new Et("prerender"),resize:new Et("resize")},i.runners.contextChange.add(i),i.globalUniforms=new we({projectionMatrix:new gt},!0),i.addSystem(hc,"mask").addSystem(Lf,"context").addSystem(Oc,"state").addSystem(wc,"shader").addSystem(Fc,"texture").addSystem(Lc,"buffer").addSystem(Hf,"geometry").addSystem(kf,"framebuffer").addSystem(uc,"scissor").addSystem(lc,"stencil").addSystem(fc,"projection").addSystem(Mc,"textureGC").addSystem(Nf,"filter").addSystem(cc,"renderTexture").addSystem(Bf,"batch"),i.initPlugins(e.__plugins),i.multisample=void 0,t.context?i.context.initFromContext(t.context):i.context.initFromOptions({alpha:!!i.useContextAlpha,antialias:t.antialias,premultipliedAlpha:i.useContextAlpha&&i.useContextAlpha!=="notMultiplied",stencil:!0,preserveDrawingBuffer:t.preserveDrawingBuffer,powerPreference:i.options.powerPreference}),i.renderingToScreen=!0,yh(i.context.webGLVersion===2?"WebGL 2":"WebGL 1"),i.resize(i.options.width,i.options.height),i}return e.create=function(t){if(xh())return new e(t);throw new Error('WebGL unsupported in this browser, use "pixi.js-legacy" for fallback canvas2d support.')},e.prototype.contextChange=function(){var t=this.gl,i;if(this.context.webGLVersion===1){var n=t.getParameter(t.FRAMEBUFFER_BINDING);t.bindFramebuffer(t.FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.FRAMEBUFFER,n)}else{var n=t.getParameter(t.DRAW_FRAMEBUFFER_BINDING);t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,n)}i>=ft.HIGH?this.multisample=ft.HIGH:i>=ft.MEDIUM?this.multisample=ft.MEDIUM:i>=ft.LOW?this.multisample=ft.LOW:this.multisample=ft.NONE},e.prototype.addSystem=function(t,i){var n=new t(this);if(this[i])throw new Error('Whoops! The name "'+i+'" is already in use');this[i]=n;for(var s in this.runners)this.runners[s].add(n);return this},e.prototype.render=function(t,i){var n,s,a,o;if(i&&(i instanceof Te?(Ut("6.0.0","Renderer#render arguments changed, use options instead."),n=i,s=arguments[2],a=arguments[3],o=arguments[4]):(n=i.renderTexture,s=i.clear,a=i.transform,o=i.skipUpdateTransform)),this.renderingToScreen=!n,this.runners.prerender.emit(),this.emit("prerender"),this.projection.transform=a,!this.context.isLost){if(n||(this._lastObjectRendered=t),!o){var h=t.enableTempParent();t.updateTransform(),t.disableTempParent(h)}this.renderTexture.bind(n),this.batch.currentRenderer.start(),(s!==void 0?s:this.clearBeforeRender)&&this.renderTexture.clear(),t.render(this),this.batch.currentRenderer.flush(),n&&n.baseTexture.update(),this.runners.postrender.emit(),this.projection.transform=null,this.emit("postrender")}},e.prototype.generateTexture=function(t,i,n,s){i===void 0&&(i={});var a=r.prototype.generateTexture.call(this,t,i,n,s);return this.framebuffer.blit(),a},e.prototype.resize=function(t,i){r.prototype.resize.call(this,t,i),this.runners.resize.emit(this.screen.height,this.screen.width)},e.prototype.reset=function(){return this.runners.reset.emit(),this},e.prototype.clear=function(){this.renderTexture.bind(),this.renderTexture.clear()},e.prototype.destroy=function(t){this.runners.destroy.emit();for(var i in this.runners)this.runners[i].destroy();r.prototype.destroy.call(this,t),this.gl=null},Object.defineProperty(e.prototype,"extract",{get:function(){return Ut("6.0.0","Renderer#extract has been deprecated, please use Renderer#plugins.extract instead."),this.plugins.extract},enumerable:!1,configurable:!0}),e.registerPlugin=function(t,i){Ut("6.5.0","Renderer.registerPlugin() has been deprecated, please use extensions.add() instead."),ee.add({name:t,type:tt.RendererPlugin,ref:i})},e.__plugins={},e}(Nc);ee.handleByMap(tt.RendererPlugin,Qs.__plugins);function Uc(r){return Qs.create(r)}var Gc=`attribute vec2 aVertexPosition;
418
+ `),{size:a,syncFunc:new Function("ud","uv","renderer","syncData","buffer",s.join(`
419
+ `))}}var Hb=function(){function l(e,t){this.program=e,this.uniformData=t,this.uniformGroups={},this.uniformDirtyGroups={},this.uniformBufferBindings={}}return l.prototype.destroy=function(){this.uniformData=null,this.uniformGroups=null,this.uniformDirtyGroups=null,this.uniformBufferBindings=null,this.program=null},l}();function Jb(l,e){for(var t={},i=e.getProgramParameter(l,e.ACTIVE_ATTRIBUTES),n=0;n<i;n++){var a=e.getActiveAttrib(l,n);if(a.name.indexOf("gl_")!==0){var s=Jh(e,a.type),d={type:s,name:a.name,size:Th(s),location:e.getAttribLocation(l,a.name)};t[a.name]=d}}return t}function Cb(l,e){for(var t={},i=e.getProgramParameter(l,e.ACTIVE_UNIFORMS),n=0;n<i;n++){var a=e.getActiveUniform(l,n),s=a.name.replace(/\[.*?\]$/,""),d=!!a.name.match(/\[.*?\]$/),h=Jh(e,a.type);t[s]={name:s,index:n,type:h,size:a.size,isArray:d,value:Ih(h,a.size)}}return t}function Fb(l,e){var t=Sh(l,l.VERTEX_SHADER,e.vertexSrc),i=Sh(l,l.FRAGMENT_SHADER,e.fragmentSrc),n=l.createProgram();if(l.attachShader(n,t),l.attachShader(n,i),l.linkProgram(n),l.getProgramParameter(n,l.LINK_STATUS)||lb(l,n,t,i),e.attributeData=Jb(n,l),e.uniformData=Cb(n,l),!/^[ \t]*#[ \t]*version[ \t]+300[ \t]+es[ \t]*$/m.test(e.vertexSrc)){var a=Object.keys(e.attributeData);a.sort(function(o,c){return o>c?1:-1});for(var s=0;s<a.length;s++)e.attributeData[a[s]].location=s,l.bindAttribLocation(n,s,a[s]);l.linkProgram(n)}l.deleteShader(t),l.deleteShader(i);var d={};for(var s in e.uniformData){var h=e.uniformData[s];d[s]={location:l.getUniformLocation(n,s),value:Ih(h.type,h.size)}}var r=new Hb(n,d);return r}var Ub=0,yn={textureCount:0,uboCount:0},kb=function(){function l(e){this.destroyed=!1,this.renderer=e,this.systemCheck(),this.gl=null,this.shader=null,this.program=null,this.cache={},this._uboCache={},this.id=Ub++}return l.prototype.systemCheck=function(){if(!mb())throw new Error("Current environment does not allow unsafe-eval, please use @pixi/unsafe-eval module to enable support.")},l.prototype.contextChange=function(e){this.gl=e,this.reset()},l.prototype.bind=function(e,t){e.disposeRunner.add(this),e.uniforms.globals=this.renderer.globalUniforms;var i=e.program,n=i.glPrograms[this.renderer.CONTEXT_UID]||this.generateProgram(e);return this.shader=e,this.program!==i&&(this.program=i,this.gl.useProgram(n.program)),t||(yn.textureCount=0,yn.uboCount=0,this.syncUniformGroup(e.uniformGroup,yn)),n},l.prototype.setUniforms=function(e){var t=this.shader.program,i=t.glPrograms[this.renderer.CONTEXT_UID];t.syncUniforms(i.uniformData,e,this.renderer)},l.prototype.syncUniformGroup=function(e,t){var i=this.getGlProgram();(!e.static||e.dirtyId!==i.uniformDirtyGroups[e.id])&&(i.uniformDirtyGroups[e.id]=e.dirtyId,this.syncUniforms(e,i,t))},l.prototype.syncUniforms=function(e,t,i){var n=e.syncUniforms[this.shader.program.id]||this.createSyncGroups(e);n(t.uniformData,e.uniforms,this.renderer,i)},l.prototype.createSyncGroups=function(e){var t=this.getSignature(e,this.shader.program.uniformData,"u");return this.cache[t]||(this.cache[t]=rb(e,this.shader.program.uniformData)),e.syncUniforms[this.shader.program.id]=this.cache[t],e.syncUniforms[this.shader.program.id]},l.prototype.syncUniformBufferGroup=function(e,t){var i=this.getGlProgram();if(!e.static||e.dirtyId!==0||!i.uniformGroups[e.id]){e.dirtyId=0;var n=i.uniformGroups[e.id]||this.createSyncBufferGroup(e,i,t);e.buffer.update(),n(i.uniformData,e.uniforms,this.renderer,yn,e.buffer)}this.renderer.buffer.bindBufferBase(e.buffer,i.uniformBufferBindings[t])},l.prototype.createSyncBufferGroup=function(e,t,i){var n=this.renderer.gl;this.renderer.buffer.bind(e.buffer);var a=this.gl.getUniformBlockIndex(t.program,i);t.uniformBufferBindings[i]=this.shader.uniformBindCount,n.uniformBlockBinding(t.program,a,this.shader.uniformBindCount),this.shader.uniformBindCount++;var s=this.getSignature(e,this.shader.program.uniformData,"ubo"),d=this._uboCache[s];if(d||(d=this._uboCache[s]=Tb(e,this.shader.program.uniformData)),e.autoManage){var h=new Float32Array(d.size/4);e.buffer.update(h)}return t.uniformGroups[e.id]=d.syncFunc,t.uniformGroups[e.id]},l.prototype.getSignature=function(e,t,i){var n=e.uniforms,a=[i+"-"];for(var s in n)a.push(s),t[s]&&a.push(t[s].type);return a.join("-")},l.prototype.getGlProgram=function(){return this.shader?this.shader.program.glPrograms[this.renderer.CONTEXT_UID]:null},l.prototype.generateProgram=function(e){var t=this.gl,i=e.program,n=Fb(t,i);return i.glPrograms[this.renderer.CONTEXT_UID]=n,n},l.prototype.reset=function(){this.program=null,this.shader=null},l.prototype.disposeShader=function(e){this.shader===e&&(this.shader=null)},l.prototype.destroy=function(){this.renderer=null,this.destroyed=!0},l}();function Nb(l,e){return e===void 0&&(e=[]),e[w.NORMAL]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.ADD]=[l.ONE,l.ONE],e[w.MULTIPLY]=[l.DST_COLOR,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.SCREEN]=[l.ONE,l.ONE_MINUS_SRC_COLOR,l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.OVERLAY]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.DARKEN]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.LIGHTEN]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.COLOR_DODGE]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.COLOR_BURN]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.HARD_LIGHT]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.SOFT_LIGHT]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.DIFFERENCE]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.EXCLUSION]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.HUE]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.SATURATION]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.COLOR]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.LUMINOSITY]=[l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.NONE]=[0,0],e[w.NORMAL_NPM]=[l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.ADD_NPM]=[l.SRC_ALPHA,l.ONE,l.ONE,l.ONE],e[w.SCREEN_NPM]=[l.SRC_ALPHA,l.ONE_MINUS_SRC_COLOR,l.ONE,l.ONE_MINUS_SRC_ALPHA],e[w.SRC_IN]=[l.DST_ALPHA,l.ZERO],e[w.SRC_OUT]=[l.ONE_MINUS_DST_ALPHA,l.ZERO],e[w.SRC_ATOP]=[l.DST_ALPHA,l.ONE_MINUS_SRC_ALPHA],e[w.DST_OVER]=[l.ONE_MINUS_DST_ALPHA,l.ONE],e[w.DST_IN]=[l.ZERO,l.SRC_ALPHA],e[w.DST_OUT]=[l.ZERO,l.ONE_MINUS_SRC_ALPHA],e[w.DST_ATOP]=[l.ONE_MINUS_DST_ALPHA,l.SRC_ALPHA],e[w.XOR]=[l.ONE_MINUS_DST_ALPHA,l.ONE_MINUS_SRC_ALPHA],e[w.SUBTRACT]=[l.ONE,l.ONE,l.ONE,l.ONE,l.FUNC_REVERSE_SUBTRACT,l.FUNC_ADD],e}var Mb=0,Kb=1,wb=2,Pb=3,zb=4,Eb=5,Bb=function(){function l(){this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode=w.NONE,this._blendEq=!1,this.map=[],this.map[Mb]=this.setBlend,this.map[Kb]=this.setOffset,this.map[wb]=this.setCullFace,this.map[Pb]=this.setDepthTest,this.map[zb]=this.setFrontFace,this.map[Eb]=this.setDepthMask,this.checks=[],this.defaultState=new Vi,this.defaultState.blend=!0}return l.prototype.contextChange=function(e){this.gl=e,this.blendModes=Nb(e),this.set(this.defaultState),this.reset()},l.prototype.set=function(e){if(e=e||this.defaultState,this.stateId!==e.data){for(var t=this.stateId^e.data,i=0;t;)t&1&&this.map[i].call(this,!!(e.data&1<<i)),t=t>>1,i++;this.stateId=e.data}for(var i=0;i<this.checks.length;i++)this.checks[i](this,e)},l.prototype.forceState=function(e){e=e||this.defaultState;for(var t=0;t<this.map.length;t++)this.map[t].call(this,!!(e.data&1<<t));for(var t=0;t<this.checks.length;t++)this.checks[t](this,e);this.stateId=e.data},l.prototype.setBlend=function(e){this.updateCheck(l.checkBlendMode,e),this.gl[e?"enable":"disable"](this.gl.BLEND)},l.prototype.setOffset=function(e){this.updateCheck(l.checkPolygonOffset,e),this.gl[e?"enable":"disable"](this.gl.POLYGON_OFFSET_FILL)},l.prototype.setDepthTest=function(e){this.gl[e?"enable":"disable"](this.gl.DEPTH_TEST)},l.prototype.setDepthMask=function(e){this.gl.depthMask(e)},l.prototype.setCullFace=function(e){this.gl[e?"enable":"disable"](this.gl.CULL_FACE)},l.prototype.setFrontFace=function(e){this.gl.frontFace(this.gl[e?"CW":"CCW"])},l.prototype.setBlendMode=function(e){if(e!==this.blendMode){this.blendMode=e;var t=this.blendModes[e],i=this.gl;t.length===2?i.blendFunc(t[0],t[1]):i.blendFuncSeparate(t[0],t[1],t[2],t[3]),t.length===6?(this._blendEq=!0,i.blendEquationSeparate(t[4],t[5])):this._blendEq&&(this._blendEq=!1,i.blendEquationSeparate(i.FUNC_ADD,i.FUNC_ADD))}},l.prototype.setPolygonOffset=function(e,t){this.gl.polygonOffset(e,t)},l.prototype.reset=function(){this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!1),this.forceState(this.defaultState),this._blendEq=!0,this.blendMode=-1,this.setBlendMode(0)},l.prototype.updateCheck=function(e,t){var i=this.checks.indexOf(e);t&&i===-1?this.checks.push(e):!t&&i!==-1&&this.checks.splice(i,1)},l.checkBlendMode=function(e,t){e.setBlendMode(t.blendMode)},l.checkPolygonOffset=function(e,t){e.setPolygonOffset(1,t.polygonOffset)},l.prototype.destroy=function(){this.gl=null},l}(),Qb=function(){function l(e){this.renderer=e,this.count=0,this.checkCount=0,this.maxIdle=U.GC_MAX_IDLE,this.checkCountMax=U.GC_MAX_CHECK_COUNT,this.mode=U.GC_MODE}return l.prototype.postrender=function(){this.renderer.renderingToScreen&&(this.count++,this.mode!==tn.MANUAL&&(this.checkCount++,this.checkCount>this.checkCountMax&&(this.checkCount=0,this.run())))},l.prototype.run=function(){for(var e=this.renderer.texture,t=e.managedTextures,i=!1,n=0;n<t.length;n++){var a=t[n];!a.framebuffer&&this.count-a.touched>this.maxIdle&&(e.destroyTexture(a,!0),t[n]=null,i=!0)}if(i){for(var s=0,n=0;n<t.length;n++)t[n]!==null&&(t[s++]=t[n]);t.length=s}},l.prototype.unload=function(e){var t=this.renderer.texture,i=e._texture;i&&!i.framebuffer&&t.destroyTexture(i);for(var n=e.children.length-1;n>=0;n--)this.unload(e.children[n])},l.prototype.destroy=function(){this.renderer=null},l}();function _b(l){var e,t,i,n,a,s,d,h,r,o,c,u,m,b,Z,p,G,X,y,R,V,W,f;return"WebGL2RenderingContext"in globalThis&&l instanceof globalThis.WebGL2RenderingContext?f=(e={},e[K.UNSIGNED_BYTE]=(t={},t[H.RGBA]=l.RGBA8,t[H.RGB]=l.RGB8,t[H.RG]=l.RG8,t[H.RED]=l.R8,t[H.RGBA_INTEGER]=l.RGBA8UI,t[H.RGB_INTEGER]=l.RGB8UI,t[H.RG_INTEGER]=l.RG8UI,t[H.RED_INTEGER]=l.R8UI,t[H.ALPHA]=l.ALPHA,t[H.LUMINANCE]=l.LUMINANCE,t[H.LUMINANCE_ALPHA]=l.LUMINANCE_ALPHA,t),e[K.BYTE]=(i={},i[H.RGBA]=l.RGBA8_SNORM,i[H.RGB]=l.RGB8_SNORM,i[H.RG]=l.RG8_SNORM,i[H.RED]=l.R8_SNORM,i[H.RGBA_INTEGER]=l.RGBA8I,i[H.RGB_INTEGER]=l.RGB8I,i[H.RG_INTEGER]=l.RG8I,i[H.RED_INTEGER]=l.R8I,i),e[K.UNSIGNED_SHORT]=(n={},n[H.RGBA_INTEGER]=l.RGBA16UI,n[H.RGB_INTEGER]=l.RGB16UI,n[H.RG_INTEGER]=l.RG16UI,n[H.RED_INTEGER]=l.R16UI,n[H.DEPTH_COMPONENT]=l.DEPTH_COMPONENT16,n),e[K.SHORT]=(a={},a[H.RGBA_INTEGER]=l.RGBA16I,a[H.RGB_INTEGER]=l.RGB16I,a[H.RG_INTEGER]=l.RG16I,a[H.RED_INTEGER]=l.R16I,a),e[K.UNSIGNED_INT]=(s={},s[H.RGBA_INTEGER]=l.RGBA32UI,s[H.RGB_INTEGER]=l.RGB32UI,s[H.RG_INTEGER]=l.RG32UI,s[H.RED_INTEGER]=l.R32UI,s[H.DEPTH_COMPONENT]=l.DEPTH_COMPONENT24,s),e[K.INT]=(d={},d[H.RGBA_INTEGER]=l.RGBA32I,d[H.RGB_INTEGER]=l.RGB32I,d[H.RG_INTEGER]=l.RG32I,d[H.RED_INTEGER]=l.R32I,d),e[K.FLOAT]=(h={},h[H.RGBA]=l.RGBA32F,h[H.RGB]=l.RGB32F,h[H.RG]=l.RG32F,h[H.RED]=l.R32F,h[H.DEPTH_COMPONENT]=l.DEPTH_COMPONENT32F,h),e[K.HALF_FLOAT]=(r={},r[H.RGBA]=l.RGBA16F,r[H.RGB]=l.RGB16F,r[H.RG]=l.RG16F,r[H.RED]=l.R16F,r),e[K.UNSIGNED_SHORT_5_6_5]=(o={},o[H.RGB]=l.RGB565,o),e[K.UNSIGNED_SHORT_4_4_4_4]=(c={},c[H.RGBA]=l.RGBA4,c),e[K.UNSIGNED_SHORT_5_5_5_1]=(u={},u[H.RGBA]=l.RGB5_A1,u),e[K.UNSIGNED_INT_2_10_10_10_REV]=(m={},m[H.RGBA]=l.RGB10_A2,m[H.RGBA_INTEGER]=l.RGB10_A2UI,m),e[K.UNSIGNED_INT_10F_11F_11F_REV]=(b={},b[H.RGB]=l.R11F_G11F_B10F,b),e[K.UNSIGNED_INT_5_9_9_9_REV]=(Z={},Z[H.RGB]=l.RGB9_E5,Z),e[K.UNSIGNED_INT_24_8]=(p={},p[H.DEPTH_STENCIL]=l.DEPTH24_STENCIL8,p),e[K.FLOAT_32_UNSIGNED_INT_24_8_REV]=(G={},G[H.DEPTH_STENCIL]=l.DEPTH32F_STENCIL8,G),e):f=(X={},X[K.UNSIGNED_BYTE]=(y={},y[H.RGBA]=l.RGBA,y[H.RGB]=l.RGB,y[H.ALPHA]=l.ALPHA,y[H.LUMINANCE]=l.LUMINANCE,y[H.LUMINANCE_ALPHA]=l.LUMINANCE_ALPHA,y),X[K.UNSIGNED_SHORT_5_6_5]=(R={},R[H.RGB]=l.RGB,R),X[K.UNSIGNED_SHORT_4_4_4_4]=(V={},V[H.RGBA]=l.RGBA,V),X[K.UNSIGNED_SHORT_5_5_5_1]=(W={},W[H.RGBA]=l.RGBA,W),X),f}var za=function(){function l(e){this.texture=e,this.width=-1,this.height=-1,this.dirtyId=-1,this.dirtyStyleId=-1,this.mipmap=!1,this.wrapMode=33071,this.type=K.UNSIGNED_BYTE,this.internalFormat=H.RGBA,this.samplerType=0}return l}(),jb=function(){function l(e){this.renderer=e,this.boundTextures=[],this.currentLocation=-1,this.managedTextures=[],this._unknownBoundTextures=!1,this.unknownTexture=new q,this.hasIntegerTextures=!1}return l.prototype.contextChange=function(){var e=this.gl=this.renderer.gl;this.CONTEXT_UID=this.renderer.CONTEXT_UID,this.webGLVersion=this.renderer.context.webGLVersion,this.internalFormats=_b(e);var t=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);this.boundTextures.length=t;for(var i=0;i<t;i++)this.boundTextures[i]=null;this.emptyTextures={};var n=new za(e.createTexture());e.bindTexture(e.TEXTURE_2D,n.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array(4)),this.emptyTextures[e.TEXTURE_2D]=n,this.emptyTextures[e.TEXTURE_CUBE_MAP]=new za(e.createTexture()),e.bindTexture(e.TEXTURE_CUBE_MAP,this.emptyTextures[e.TEXTURE_CUBE_MAP].texture);for(var i=0;i<6;i++)e.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,null);e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,e.LINEAR);for(var i=0;i<this.boundTextures.length;i++)this.bind(null,i)},l.prototype.bind=function(e,t){t===void 0&&(t=0);var i=this.gl;if(e=e==null?void 0:e.castToBaseTexture(),e&&e.valid&&!e.parentTextureArray){e.touched=this.renderer.textureGC.count;var n=e._glTextures[this.CONTEXT_UID]||this.initTexture(e);this.boundTextures[t]!==e&&(this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),i.bindTexture(e.target,n.texture)),n.dirtyId!==e.dirtyId?(this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),this.updateTexture(e)):n.dirtyStyleId!==e.dirtyStyleId&&this.updateTextureStyle(e),this.boundTextures[t]=e}else this.currentLocation!==t&&(this.currentLocation=t,i.activeTexture(i.TEXTURE0+t)),i.bindTexture(i.TEXTURE_2D,this.emptyTextures[i.TEXTURE_2D].texture),this.boundTextures[t]=null},l.prototype.reset=function(){this._unknownBoundTextures=!0,this.hasIntegerTextures=!1,this.currentLocation=-1;for(var e=0;e<this.boundTextures.length;e++)this.boundTextures[e]=this.unknownTexture},l.prototype.unbind=function(e){var t=this,i=t.gl,n=t.boundTextures;if(this._unknownBoundTextures){this._unknownBoundTextures=!1;for(var a=0;a<n.length;a++)n[a]===this.unknownTexture&&this.bind(null,a)}for(var a=0;a<n.length;a++)n[a]===e&&(this.currentLocation!==a&&(i.activeTexture(i.TEXTURE0+a),this.currentLocation=a),i.bindTexture(e.target,this.emptyTextures[e.target].texture),n[a]=null)},l.prototype.ensureSamplerType=function(e){var t=this,i=t.boundTextures,n=t.hasIntegerTextures,a=t.CONTEXT_UID;if(n)for(var s=e-1;s>=0;--s){var d=i[s];if(d){var h=d._glTextures[a];h.samplerType!==$l.FLOAT&&this.renderer.texture.unbind(d)}}},l.prototype.initTexture=function(e){var t=new za(this.gl.createTexture());return t.dirtyId=-1,e._glTextures[this.CONTEXT_UID]=t,this.managedTextures.push(e),e.on("dispose",this.destroyTexture,this),t},l.prototype.initTextureType=function(e,t){var i,n;t.internalFormat=(n=(i=this.internalFormats[e.type])===null||i===void 0?void 0:i[e.format])!==null&&n!==void 0?n:e.format,this.webGLVersion===2&&e.type===K.HALF_FLOAT?t.type=this.gl.HALF_FLOAT:t.type=e.type},l.prototype.updateTexture=function(e){var t=e._glTextures[this.CONTEXT_UID];if(t){var i=this.renderer;if(this.initTextureType(e,t),e.resource&&e.resource.upload(i,e,t))t.samplerType!==$l.FLOAT&&(this.hasIntegerTextures=!0);else{var n=e.realWidth,a=e.realHeight,s=i.gl;(t.width!==n||t.height!==a||t.dirtyId<0)&&(t.width=n,t.height=a,s.texImage2D(e.target,0,t.internalFormat,n,a,0,e.format,t.type,null))}e.dirtyStyleId!==t.dirtyStyleId&&this.updateTextureStyle(e),t.dirtyId=e.dirtyId}},l.prototype.destroyTexture=function(e,t){var i=this.gl;if(e=e.castToBaseTexture(),e._glTextures[this.CONTEXT_UID]&&(this.unbind(e),i.deleteTexture(e._glTextures[this.CONTEXT_UID].texture),e.off("dispose",this.destroyTexture,this),delete e._glTextures[this.CONTEXT_UID],!t)){var n=this.managedTextures.indexOf(e);n!==-1&&Ki(this.managedTextures,n,1)}},l.prototype.updateTextureStyle=function(e){var t=e._glTextures[this.CONTEXT_UID];t&&((e.mipmap===ue.POW2||this.webGLVersion!==2)&&!e.isPowerOfTwo?t.mipmap=!1:t.mipmap=e.mipmap>=1,this.webGLVersion!==2&&!e.isPowerOfTwo?t.wrapMode=xe.CLAMP:t.wrapMode=e.wrapMode,e.resource&&e.resource.style(this.renderer,e,t)||this.setStyle(e,t),t.dirtyStyleId=e.dirtyStyleId)},l.prototype.setStyle=function(e,t){var i=this.gl;if(t.mipmap&&e.mipmap!==ue.ON_MANUAL&&i.generateMipmap(e.target),i.texParameteri(e.target,i.TEXTURE_WRAP_S,t.wrapMode),i.texParameteri(e.target,i.TEXTURE_WRAP_T,t.wrapMode),t.mipmap){i.texParameteri(e.target,i.TEXTURE_MIN_FILTER,e.scaleMode===Le.LINEAR?i.LINEAR_MIPMAP_LINEAR:i.NEAREST_MIPMAP_NEAREST);var n=this.renderer.context.extensions.anisotropicFiltering;if(n&&e.anisotropicLevel>0&&e.scaleMode===Le.LINEAR){var a=Math.min(e.anisotropicLevel,i.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT));i.texParameterf(e.target,n.TEXTURE_MAX_ANISOTROPY_EXT,a)}}else i.texParameteri(e.target,i.TEXTURE_MIN_FILTER,e.scaleMode===Le.LINEAR?i.LINEAR:i.NEAREST);i.texParameteri(e.target,i.TEXTURE_MAG_FILTER,e.scaleMode===Le.LINEAR?i.LINEAR:i.NEAREST)},l.prototype.destroy=function(){this.renderer=null},l}(),Ea=new vt,Db=function(l){ht(e,l);function e(t,i){t===void 0&&(t=rl.UNKNOWN);var n=l.call(this)||this;return i=Object.assign({},U.RENDER_OPTIONS,i),n.options=i,n.type=t,n.screen=new j(0,0,i.width,i.height),n.view=i.view||U.ADAPTER.createCanvas(),n.resolution=i.resolution||U.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&&(pe("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 e.prototype.initPlugins=function(t){for(var i in t)this.plugins[i]=new t[i](this)},Object.defineProperty(e.prototype,"width",{get:function(){return this.view.width},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.view.height},enumerable:!1,configurable:!0}),e.prototype.resize=function(t,i){this.view.width=Math.round(t*this.resolution),this.view.height=Math.round(i*this.resolution);var n=this.view.width/this.resolution,a=this.view.height/this.resolution;this.screen.width=n,this.screen.height=a,this.autoDensity&&(this.view.style.width=n+"px",this.view.style.height=a+"px"),this.emit("resize",n,a)},e.prototype.generateTexture=function(t,i,n,a){i===void 0&&(i={}),typeof i=="number"&&(pe("6.1.0","generateTexture options (scaleMode, resolution, region) are now object options."),i={scaleMode:i,resolution:n,region:a});var s=i.region,d=TZ(i,["region"]);a=s||t.getLocalBounds(null,!0),a.width===0&&(a.width=1),a.height===0&&(a.height=1);var h=Xi.create(Ta({width:a.width,height:a.height},d));return Ea.tx=-a.x,Ea.ty=-a.y,this.render(t,{renderTexture:h,clear:!1,transform:Ea,skipUpdateTransform:!!t.parent}),h},e.prototype.destroy=function(t){for(var i in this.plugins)this.plugins[i].destroy(),this.plugins[i]=null;t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view);var n=this;n.plugins=null,n.type=rl.UNKNOWN,n.view=null,n.screen=null,n._tempDisplayObjectParent=null,n.options=null,this._backgroundColorRgba=null,this._backgroundColorString=null,this._lastObjectRendered=null},Object.defineProperty(e.prototype,"backgroundColor",{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=lh(t),Mi(t,this._backgroundColorRgba)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"backgroundAlpha",{get:function(){return this._backgroundColorRgba[3]},set:function(t){this._backgroundColorRgba[3]=t},enumerable:!1,configurable:!0}),e}(ol),Ob=function(){function l(e){this.buffer=e||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}return l}(),Ab=function(){function l(e){this.renderer=e,this.managedBuffers={},this.boundBufferBases={}}return l.prototype.destroy=function(){this.renderer=null},l.prototype.contextChange=function(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID},l.prototype.bind=function(e){var t=this,i=t.gl,n=t.CONTEXT_UID,a=e._glBuffers[n]||this.createGLBuffer(e);i.bindBuffer(e.type,a.buffer)},l.prototype.bindBufferBase=function(e,t){var i=this,n=i.gl,a=i.CONTEXT_UID;if(this.boundBufferBases[t]!==e){var s=e._glBuffers[a]||this.createGLBuffer(e);this.boundBufferBases[t]=e,n.bindBufferBase(n.UNIFORM_BUFFER,t,s.buffer)}},l.prototype.bindBufferRange=function(e,t,i){var n=this,a=n.gl,s=n.CONTEXT_UID;i=i||0;var d=e._glBuffers[s]||this.createGLBuffer(e);a.bindBufferRange(a.UNIFORM_BUFFER,t||0,d.buffer,i*256,256)},l.prototype.update=function(e){var t=this,i=t.gl,n=t.CONTEXT_UID,a=e._glBuffers[n];if(e._updateID!==a.updateID)if(a.updateID=e._updateID,i.bindBuffer(e.type,a.buffer),a.byteLength>=e.data.byteLength)i.bufferSubData(e.type,0,e.data);else{var s=e.static?i.STATIC_DRAW:i.DYNAMIC_DRAW;a.byteLength=e.data.byteLength,i.bufferData(e.type,e.data,s)}},l.prototype.dispose=function(e,t){if(this.managedBuffers[e.id]){delete this.managedBuffers[e.id];var i=e._glBuffers[this.CONTEXT_UID],n=this.gl;e.disposeRunner.remove(this),i&&(t||n.deleteBuffer(i.buffer),delete e._glBuffers[this.CONTEXT_UID])}},l.prototype.disposeAll=function(e){for(var t=Object.keys(this.managedBuffers),i=0;i<t.length;i++)this.dispose(this.managedBuffers[t[i]],e)},l.prototype.createGLBuffer=function(e){var t=this,i=t.CONTEXT_UID,n=t.gl;return e._glBuffers[i]=new Ob(n.createBuffer()),this.managedBuffers[e.id]=e,e.disposeRunner.add(this),e._glBuffers[i]},l}(),Mh=function(l){ht(e,l);function e(t){var i=l.call(this,rl.WEBGL,t)||this;return t=i.options,i.gl=null,i.CONTEXT_UID=0,i.runners={destroy:new kt("destroy"),contextChange:new kt("contextChange"),reset:new kt("reset"),update:new kt("update"),postrender:new kt("postrender"),prerender:new kt("prerender"),resize:new kt("resize")},i.runners.contextChange.add(i),i.globalUniforms=new yi({projectionMatrix:new vt},!0),i.addSystem(Wb,"mask").addSystem(AZ,"context").addSystem(Bb,"state").addSystem(kb,"shader").addSystem(jb,"texture").addSystem(Ab,"buffer").addSystem(eb,"geometry").addSystem(tb,"framebuffer").addSystem(fb,"scissor").addSystem(Lb,"stencil").addSystem(xb,"projection").addSystem(Qb,"textureGC").addSystem(DZ,"filter").addSystem(Sb,"renderTexture").addSystem(OZ,"batch"),i.initPlugins(e.__plugins),i.multisample=void 0,t.context?i.context.initFromContext(t.context):i.context.initFromOptions({alpha:!!i.useContextAlpha,antialias:t.antialias,premultipliedAlpha:i.useContextAlpha&&i.useContextAlpha!=="notMultiplied",stencil:!0,preserveDrawingBuffer:t.preserveDrawingBuffer,powerPreference:i.options.powerPreference}),i.renderingToScreen=!0,Cu(i.context.webGLVersion===2?"WebGL 2":"WebGL 1"),i.resize(i.options.width,i.options.height),i}return e.create=function(t){if(Fu())return new e(t);throw new Error('WebGL unsupported in this browser, use "pixi.js-legacy" for fallback canvas2d support.')},e.prototype.contextChange=function(){var t=this.gl,i;if(this.context.webGLVersion===1){var n=t.getParameter(t.FRAMEBUFFER_BINDING);t.bindFramebuffer(t.FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.FRAMEBUFFER,n)}else{var n=t.getParameter(t.DRAW_FRAMEBUFFER_BINDING);t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),i=t.getParameter(t.SAMPLES),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,n)}i>=Xt.HIGH?this.multisample=Xt.HIGH:i>=Xt.MEDIUM?this.multisample=Xt.MEDIUM:i>=Xt.LOW?this.multisample=Xt.LOW:this.multisample=Xt.NONE},e.prototype.addSystem=function(t,i){var n=new t(this);if(this[i])throw new Error('Whoops! The name "'+i+'" is already in use');this[i]=n;for(var a in this.runners)this.runners[a].add(n);return this},e.prototype.render=function(t,i){var n,a,s,d;if(i&&(i instanceof Xi?(pe("6.0.0","Renderer#render arguments changed, use options instead."),n=i,a=arguments[2],s=arguments[3],d=arguments[4]):(n=i.renderTexture,a=i.clear,s=i.transform,d=i.skipUpdateTransform)),this.renderingToScreen=!n,this.runners.prerender.emit(),this.emit("prerender"),this.projection.transform=s,!this.context.isLost){if(n||(this._lastObjectRendered=t),!d){var h=t.enableTempParent();t.updateTransform(),t.disableTempParent(h)}this.renderTexture.bind(n),this.batch.currentRenderer.start(),(a!==void 0?a:this.clearBeforeRender)&&this.renderTexture.clear(),t.render(this),this.batch.currentRenderer.flush(),n&&n.baseTexture.update(),this.runners.postrender.emit(),this.projection.transform=null,this.emit("postrender")}},e.prototype.generateTexture=function(t,i,n,a){i===void 0&&(i={});var s=l.prototype.generateTexture.call(this,t,i,n,a);return this.framebuffer.blit(),s},e.prototype.resize=function(t,i){l.prototype.resize.call(this,t,i),this.runners.resize.emit(this.screen.height,this.screen.width)},e.prototype.reset=function(){return this.runners.reset.emit(),this},e.prototype.clear=function(){this.renderTexture.bind(),this.renderTexture.clear()},e.prototype.destroy=function(t){this.runners.destroy.emit();for(var i in this.runners)this.runners[i].destroy();l.prototype.destroy.call(this,t),this.gl=null},Object.defineProperty(e.prototype,"extract",{get:function(){return pe("6.0.0","Renderer#extract has been deprecated, please use Renderer#plugins.extract instead."),this.plugins.extract},enumerable:!1,configurable:!0}),e.registerPlugin=function(t,i){pe("6.5.0","Renderer.registerPlugin() has been deprecated, please use extensions.add() instead."),ke.add({name:t,type:nt.RendererPlugin,ref:i})},e.__plugins={},e}(Db);ke.handleByMap(nt.RendererPlugin,Mh.__plugins);function qb(l){return Mh.create(l)}var $b=`attribute vec2 aVertexPosition;
416
420
  attribute vec2 aTextureCoord;
417
421
 
418
422
  uniform mat3 projectionMatrix;
@@ -423,7 +427,7 @@ void main(void)
423
427
  {
424
428
  gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
425
429
  vTextureCoord = aTextureCoord;
426
- }`,kc=`attribute vec2 aVertexPosition;
430
+ }`,tp=`attribute vec2 aVertexPosition;
427
431
 
428
432
  uniform mat3 projectionMatrix;
429
433
 
@@ -449,7 +453,7 @@ void main(void)
449
453
  gl_Position = filterVertexPosition();
450
454
  vTextureCoord = filterTextureCoord();
451
455
  }
452
- `,Hc=Gc,Js=kc,Zr=function(){function r(){this.texArray=null,this.blend=0,this.type=Dt.TRIANGLES,this.start=0,this.size=0,this.data=null}return r}(),Kr=function(){function r(){this.elements=[],this.ids=[],this.count=0}return r.prototype.clear=function(){for(var e=0;e<this.count;e++)this.elements[e]=null;this.count=0},r}(),Qr=function(){function r(e){typeof e=="number"?this.rawBinaryData=new ArrayBuffer(e):e instanceof Uint8Array?this.rawBinaryData=e.buffer:this.rawBinaryData=e,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData)}return Object.defineProperty(r.prototype,"int8View",{get:function(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"uint8View",{get:function(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"int16View",{get:function(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"uint16View",{get:function(){return this._uint16View||(this._uint16View=new Uint16Array(this.rawBinaryData)),this._uint16View},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"int32View",{get:function(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View},enumerable:!1,configurable:!0}),r.prototype.view=function(e){return this[e+"View"]},r.prototype.destroy=function(){this.rawBinaryData=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._uint16View=null,this._int32View=null,this.uint32View=null,this.float32View=null},r.sizeOf=function(e){switch(e){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(e+" isn't a valid view type")}},r}(),Xc=function(r){it(e,r);function e(t){var i=r.call(this,t)||this;return i.shaderGenerator=null,i.geometryClass=null,i.vertexSize=null,i.state=Ee.for2d(),i.size=F.SPRITE_BATCH_SIZE*4,i._vertexCount=0,i._indexCount=0,i._bufferedElements=[],i._bufferedTextures=[],i._bufferSize=0,i._shader=null,i._packedGeometries=[],i._packedGeometryPoolSize=2,i._flushId=0,i._aBuffers={},i._iBuffers={},i.MAX_TEXTURES=1,i.renderer.on("prerender",i.onPrerender,i),t.runners.contextChange.add(i),i._dcIndex=0,i._aIndex=0,i._iIndex=0,i._attributeBuffer=null,i._indexBuffer=null,i._tempBoundTextures=[],i}return e.prototype.contextChange=function(){var t=this.renderer.gl;F.PREFER_ENV===Qt.WEBGL_LEGACY?this.MAX_TEXTURES=1:(this.MAX_TEXTURES=Math.min(t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),F.SPRITE_MAX_TEXTURES),this.MAX_TEXTURES=Qf(this.MAX_TEXTURES,t)),this._shader=this.shaderGenerator.generateShader(this.MAX_TEXTURES);for(var i=0;i<this._packedGeometryPoolSize;i++)this._packedGeometries[i]=new this.geometryClass;this.initFlushBuffers()},e.prototype.initFlushBuffers=function(){for(var t=e._drawCallPool,i=e._textureArrayPool,n=this.size/4,s=Math.floor(n/this.MAX_TEXTURES)+1;t.length<n;)t.push(new Zr);for(;i.length<s;)i.push(new Kr);for(var a=0;a<this.MAX_TEXTURES;a++)this._tempBoundTextures[a]=null},e.prototype.onPrerender=function(){this._flushId=0},e.prototype.render=function(t){t._texture.valid&&(this._vertexCount+t.vertexData.length/2>this.size&&this.flush(),this._vertexCount+=t.vertexData.length/2,this._indexCount+=t.indices.length,this._bufferedTextures[this._bufferSize]=t._texture.baseTexture,this._bufferedElements[this._bufferSize++]=t)},e.prototype.buildTexturesAndDrawCalls=function(){var t=this,i=t._bufferedTextures,n=t.MAX_TEXTURES,s=e._textureArrayPool,a=this.renderer.batch,o=this._tempBoundTextures,h=this.renderer.textureGC.count,u=++V._globalBatch,l=0,f=s[0],c=0;a.copyBoundTextures(o,n);for(var d=0;d<this._bufferSize;++d){var p=i[d];i[d]=null,p._batchEnabled!==u&&(f.count>=n&&(a.boundArray(f,o,u,n),this.buildDrawCalls(f,c,d),c=d,f=s[++l],++u),p._batchEnabled=u,p.touched=h,f.elements[f.count++]=p)}f.count>0&&(a.boundArray(f,o,u,n),this.buildDrawCalls(f,c,this._bufferSize),++l,++u);for(var d=0;d<o.length;d++)o[d]=null;V._globalBatch=u},e.prototype.buildDrawCalls=function(t,i,n){var s=this,a=s._bufferedElements,o=s._attributeBuffer,h=s._indexBuffer,u=s.vertexSize,l=e._drawCallPool,f=this._dcIndex,c=this._aIndex,d=this._iIndex,p=l[f];p.start=this._iIndex,p.texArray=t;for(var v=i;v<n;++v){var _=a[v],m=_._texture.baseTexture,g=gs[m.alphaMode?1:0][_.blendMode];a[v]=null,i<v&&p.blend!==g&&(p.size=d-p.start,i=v,p=l[++f],p.texArray=t,p.start=d),this.packInterleavedGeometry(_,o,h,c,d),c+=_.vertexData.length/2*u,d+=_.indices.length,p.blend=g}i<n&&(p.size=d-p.start,++f),this._dcIndex=f,this._aIndex=c,this._iIndex=d},e.prototype.bindAndClearTexArray=function(t){for(var i=this.renderer.texture,n=0;n<t.count;n++)i.bind(t.elements[n],t.ids[n]),t.elements[n]=null;t.count=0},e.prototype.updateGeometry=function(){var t=this,i=t._packedGeometries,n=t._attributeBuffer,s=t._indexBuffer;F.CAN_UPLOAD_SAME_BUFFER?(i[this._flushId]._buffer.update(n.rawBinaryData),i[this._flushId]._indexBuffer.update(s),this.renderer.geometry.updateBuffers()):(this._packedGeometryPoolSize<=this._flushId&&(this._packedGeometryPoolSize++,i[this._flushId]=new this.geometryClass),i[this._flushId]._buffer.update(n.rawBinaryData),i[this._flushId]._indexBuffer.update(s),this.renderer.geometry.bind(i[this._flushId]),this.renderer.geometry.updateBuffers(),this._flushId++)},e.prototype.drawBatches=function(){for(var t=this._dcIndex,i=this.renderer,n=i.gl,s=i.state,a=e._drawCallPool,o=null,h=0;h<t;h++){var u=a[h],l=u.texArray,f=u.type,c=u.size,d=u.start,p=u.blend;o!==l&&(o=l,this.bindAndClearTexArray(l)),this.state.blendMode=p,s.set(this.state),n.drawElements(f,c,n.UNSIGNED_SHORT,d*2)}},e.prototype.flush=function(){this._vertexCount!==0&&(this._attributeBuffer=this.getAttributeBuffer(this._vertexCount),this._indexBuffer=this.getIndexBuffer(this._indexCount),this._aIndex=0,this._iIndex=0,this._dcIndex=0,this.buildTexturesAndDrawCalls(),this.updateGeometry(),this.drawBatches(),this._bufferSize=0,this._vertexCount=0,this._indexCount=0)},e.prototype.start=function(){this.renderer.state.set(this.state),this.renderer.texture.ensureSamplerType(this.MAX_TEXTURES),this.renderer.shader.bind(this._shader),F.CAN_UPLOAD_SAME_BUFFER&&this.renderer.geometry.bind(this._packedGeometries[this._flushId])},e.prototype.stop=function(){this.flush()},e.prototype.destroy=function(){for(var t=0;t<this._packedGeometryPoolSize;t++)this._packedGeometries[t]&&this._packedGeometries[t].destroy();this.renderer.off("prerender",this.onPrerender,this),this._aBuffers=null,this._iBuffers=null,this._packedGeometries=null,this._attributeBuffer=null,this._indexBuffer=null,this._shader&&(this._shader.destroy(),this._shader=null),r.prototype.destroy.call(this)},e.prototype.getAttributeBuffer=function(t){var i=Oi(Math.ceil(t/8)),n=ws(i),s=i*8;this._aBuffers.length<=n&&(this._iBuffers.length=n+1);var a=this._aBuffers[s];return a||(this._aBuffers[s]=a=new Qr(s*this.vertexSize*4)),a},e.prototype.getIndexBuffer=function(t){var i=Oi(Math.ceil(t/12)),n=ws(i),s=i*12;this._iBuffers.length<=n&&(this._iBuffers.length=n+1);var a=this._iBuffers[n];return a||(this._iBuffers[n]=a=new Uint16Array(s)),a},e.prototype.packInterleavedGeometry=function(t,i,n,s,a){for(var o=i.uint32View,h=i.float32View,u=s/this.vertexSize,l=t.uvs,f=t.indices,c=t.vertexData,d=t._texture.baseTexture._batchLocation,p=Math.min(t.worldAlpha,1),v=p<1&&t._texture.baseTexture.alphaMode?Ir(t._tintRGB,p):t._tintRGB+(p*255<<24),_=0;_<c.length;_+=2)h[s++]=c[_],h[s++]=c[_+1],h[s++]=l[_],h[s++]=l[_+1],o[s++]=v,h[s++]=d;for(var _=0;_<f.length;_++)n[a++]=u+f[_]},e._drawCallPool=[],e._textureArrayPool=[],e}(Li),Wc=function(){function r(e,t){if(this.vertexSrc=e,this.fragTemplate=t,this.programCache={},this.defaultGroupCache={},t.indexOf("%count%")<0)throw new Error('Fragment template must contain "%count%".');if(t.indexOf("%forloop%")<0)throw new Error('Fragment template must contain "%forloop%".')}return r.prototype.generateShader=function(e){if(!this.programCache[e]){for(var t=new Int32Array(e),i=0;i<e;i++)t[i]=i;this.defaultGroupCache[e]=we.from({uSamplers:t},!0);var n=this.fragTemplate;n=n.replace(/%count%/gi,""+e),n=n.replace(/%forloop%/gi,this.generateSampleSrc(e)),this.programCache[e]=new si(this.vertexSrc,n)}var s={tint:new Float32Array([1,1,1,1]),translationMatrix:new gt,default:this.defaultGroupCache[e]};return new ae(this.programCache[e],s)},r.prototype.generateSampleSrc=function(e){var t="";t+=`
456
+ `,ep=$b,Kh=tp,Ba=function(){function l(){this.texArray=null,this.blend=0,this.type=ce.TRIANGLES,this.start=0,this.size=0,this.data=null}return l}(),Qa=function(){function l(){this.elements=[],this.ids=[],this.count=0}return l.prototype.clear=function(){for(var e=0;e<this.count;e++)this.elements[e]=null;this.count=0},l}(),_a=function(){function l(e){typeof e=="number"?this.rawBinaryData=new ArrayBuffer(e):e instanceof Uint8Array?this.rawBinaryData=e.buffer:this.rawBinaryData=e,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData)}return Object.defineProperty(l.prototype,"int8View",{get:function(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"uint8View",{get:function(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"int16View",{get:function(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"uint16View",{get:function(){return this._uint16View||(this._uint16View=new Uint16Array(this.rawBinaryData)),this._uint16View},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"int32View",{get:function(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View},enumerable:!1,configurable:!0}),l.prototype.view=function(e){return this[e+"View"]},l.prototype.destroy=function(){this.rawBinaryData=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._uint16View=null,this._int32View=null,this.uint32View=null,this.float32View=null},l.sizeOf=function(e){switch(e){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(e+" isn't a valid view type")}},l}(),ip=function(l){ht(e,l);function e(t){var i=l.call(this,t)||this;return i.shaderGenerator=null,i.geometryClass=null,i.vertexSize=null,i.state=Vi.for2d(),i.size=U.SPRITE_BATCH_SIZE*4,i._vertexCount=0,i._indexCount=0,i._bufferedElements=[],i._bufferedTextures=[],i._bufferSize=0,i._shader=null,i._packedGeometries=[],i._packedGeometryPoolSize=2,i._flushId=0,i._aBuffers={},i._iBuffers={},i.MAX_TEXTURES=1,i.renderer.on("prerender",i.onPrerender,i),t.runners.contextChange.add(i),i._dcIndex=0,i._aIndex=0,i._iIndex=0,i._attributeBuffer=null,i._indexBuffer=null,i._tempBoundTextures=[],i}return e.prototype.contextChange=function(){var t=this.renderer.gl;U.PREFER_ENV===Ce.WEBGL_LEGACY?this.MAX_TEXTURES=1:(this.MAX_TEXTURES=Math.min(t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),U.SPRITE_MAX_TEXTURES),this.MAX_TEXTURES=ub(this.MAX_TEXTURES,t)),this._shader=this.shaderGenerator.generateShader(this.MAX_TEXTURES);for(var i=0;i<this._packedGeometryPoolSize;i++)this._packedGeometries[i]=new this.geometryClass;this.initFlushBuffers()},e.prototype.initFlushBuffers=function(){for(var t=e._drawCallPool,i=e._textureArrayPool,n=this.size/4,a=Math.floor(n/this.MAX_TEXTURES)+1;t.length<n;)t.push(new Ba);for(;i.length<a;)i.push(new Qa);for(var s=0;s<this.MAX_TEXTURES;s++)this._tempBoundTextures[s]=null},e.prototype.onPrerender=function(){this._flushId=0},e.prototype.render=function(t){t._texture.valid&&(this._vertexCount+t.vertexData.length/2>this.size&&this.flush(),this._vertexCount+=t.vertexData.length/2,this._indexCount+=t.indices.length,this._bufferedTextures[this._bufferSize]=t._texture.baseTexture,this._bufferedElements[this._bufferSize++]=t)},e.prototype.buildTexturesAndDrawCalls=function(){var t=this,i=t._bufferedTextures,n=t.MAX_TEXTURES,a=e._textureArrayPool,s=this.renderer.batch,d=this._tempBoundTextures,h=this.renderer.textureGC.count,r=++q._globalBatch,o=0,c=a[0],u=0;s.copyBoundTextures(d,n);for(var m=0;m<this._bufferSize;++m){var b=i[m];i[m]=null,b._batchEnabled!==r&&(c.count>=n&&(s.boundArray(c,d,r,n),this.buildDrawCalls(c,u,m),u=m,c=a[++o],++r),b._batchEnabled=r,b.touched=h,c.elements[c.count++]=b)}c.count>0&&(s.boundArray(c,d,r,n),this.buildDrawCalls(c,u,this._bufferSize),++o,++r);for(var m=0;m<d.length;m++)d[m]=null;q._globalBatch=r},e.prototype.buildDrawCalls=function(t,i,n){var a=this,s=a._bufferedElements,d=a._attributeBuffer,h=a._indexBuffer,r=a.vertexSize,o=e._drawCallPool,c=this._dcIndex,u=this._aIndex,m=this._iIndex,b=o[c];b.start=this._iIndex,b.texArray=t;for(var Z=i;Z<n;++Z){var p=s[Z],G=p._texture.baseTexture,X=ah[G.alphaMode?1:0][p.blendMode];s[Z]=null,i<Z&&b.blend!==X&&(b.size=m-b.start,i=Z,b=o[++c],b.texArray=t,b.start=m),this.packInterleavedGeometry(p,d,h,u,m),u+=p.vertexData.length/2*r,m+=p.indices.length,b.blend=X}i<n&&(b.size=m-b.start,++c),this._dcIndex=c,this._aIndex=u,this._iIndex=m},e.prototype.bindAndClearTexArray=function(t){for(var i=this.renderer.texture,n=0;n<t.count;n++)i.bind(t.elements[n],t.ids[n]),t.elements[n]=null;t.count=0},e.prototype.updateGeometry=function(){var t=this,i=t._packedGeometries,n=t._attributeBuffer,a=t._indexBuffer;U.CAN_UPLOAD_SAME_BUFFER?(i[this._flushId]._buffer.update(n.rawBinaryData),i[this._flushId]._indexBuffer.update(a),this.renderer.geometry.updateBuffers()):(this._packedGeometryPoolSize<=this._flushId&&(this._packedGeometryPoolSize++,i[this._flushId]=new this.geometryClass),i[this._flushId]._buffer.update(n.rawBinaryData),i[this._flushId]._indexBuffer.update(a),this.renderer.geometry.bind(i[this._flushId]),this.renderer.geometry.updateBuffers(),this._flushId++)},e.prototype.drawBatches=function(){for(var t=this._dcIndex,i=this.renderer,n=i.gl,a=i.state,s=e._drawCallPool,d=null,h=0;h<t;h++){var r=s[h],o=r.texArray,c=r.type,u=r.size,m=r.start,b=r.blend;d!==o&&(d=o,this.bindAndClearTexArray(o)),this.state.blendMode=b,a.set(this.state),n.drawElements(c,u,n.UNSIGNED_SHORT,m*2)}},e.prototype.flush=function(){this._vertexCount!==0&&(this._attributeBuffer=this.getAttributeBuffer(this._vertexCount),this._indexBuffer=this.getIndexBuffer(this._indexCount),this._aIndex=0,this._iIndex=0,this._dcIndex=0,this.buildTexturesAndDrawCalls(),this.updateGeometry(),this.drawBatches(),this._bufferSize=0,this._vertexCount=0,this._indexCount=0)},e.prototype.start=function(){this.renderer.state.set(this.state),this.renderer.texture.ensureSamplerType(this.MAX_TEXTURES),this.renderer.shader.bind(this._shader),U.CAN_UPLOAD_SAME_BUFFER&&this.renderer.geometry.bind(this._packedGeometries[this._flushId])},e.prototype.stop=function(){this.flush()},e.prototype.destroy=function(){for(var t=0;t<this._packedGeometryPoolSize;t++)this._packedGeometries[t]&&this._packedGeometries[t].destroy();this.renderer.off("prerender",this.onPrerender,this),this._aBuffers=null,this._iBuffers=null,this._packedGeometries=null,this._attributeBuffer=null,this._indexBuffer=null,this._shader&&(this._shader.destroy(),this._shader=null),l.prototype.destroy.call(this)},e.prototype.getAttributeBuffer=function(t){var i=rn(Math.ceil(t/8)),n=oh(i),a=i*8;this._aBuffers.length<=n&&(this._iBuffers.length=n+1);var s=this._aBuffers[a];return s||(this._aBuffers[a]=s=new _a(a*this.vertexSize*4)),s},e.prototype.getIndexBuffer=function(t){var i=rn(Math.ceil(t/12)),n=oh(i),a=i*12;this._iBuffers.length<=n&&(this._iBuffers.length=n+1);var s=this._iBuffers[n];return s||(this._iBuffers[n]=s=new Uint16Array(a)),s},e.prototype.packInterleavedGeometry=function(t,i,n,a,s){for(var d=i.uint32View,h=i.float32View,r=a/this.vertexSize,o=t.uvs,c=t.indices,u=t.vertexData,m=t._texture.baseTexture._batchLocation,b=Math.min(t.worldAlpha,1),Z=b<1&&t._texture.baseTexture.alphaMode?xa(t._tintRGB,b):t._tintRGB+(b*255<<24),p=0;p<u.length;p+=2)h[a++]=u[p],h[a++]=u[p+1],h[a++]=o[p],h[a++]=o[p+1],d[a++]=Z,h[a++]=m;for(var p=0;p<c.length;p++)n[s++]=r+c[p]},e._drawCallPool=[],e._textureArrayPool=[],e}(bn),lp=function(){function l(e,t){if(this.vertexSrc=e,this.fragTemplate=t,this.programCache={},this.defaultGroupCache={},t.indexOf("%count%")<0)throw new Error('Fragment template must contain "%count%".');if(t.indexOf("%forloop%")<0)throw new Error('Fragment template must contain "%forloop%".')}return l.prototype.generateShader=function(e){if(!this.programCache[e]){for(var t=new Int32Array(e),i=0;i<e;i++)t[i]=i;this.defaultGroupCache[e]=yi.from({uSamplers:t},!0);var n=this.fragTemplate;n=n.replace(/%count%/gi,""+e),n=n.replace(/%forloop%/gi,this.generateSampleSrc(e)),this.programCache[e]=new Wl(this.vertexSrc,n)}var a={tint:new Float32Array([1,1,1,1]),translationMatrix:new vt,default:this.defaultGroupCache[e]};return new je(this.programCache[e],a)},l.prototype.generateSampleSrc=function(e){var t="";t+=`
453
457
  `,t+=`
454
458
  `;for(var i=0;i<e;i++)i>0&&(t+=`
455
459
  else `),i<e-1&&(t+="if(vTextureId < "+i+".5)"),t+=`
@@ -457,7 +461,7 @@ else `),i<e-1&&(t+="if(vTextureId < "+i+".5)"),t+=`
457
461
  color = texture2D(uSamplers[`+i+"], vTextureCoord);",t+=`
458
462
  }`;return t+=`
459
463
  `,t+=`
460
- `,t},r}(),ta=function(r){it(e,r);function e(t){t===void 0&&(t=!1);var i=r.call(this)||this;return i._buffer=new yt(null,t,!1),i._indexBuffer=new yt(null,t,!0),i.addAttribute("aVertexPosition",i._buffer,2,!1,L.FLOAT).addAttribute("aTextureCoord",i._buffer,2,!1,L.FLOAT).addAttribute("aColor",i._buffer,4,!0,L.UNSIGNED_BYTE).addAttribute("aTextureId",i._buffer,1,!0,L.FLOAT).addIndex(i._indexBuffer),i}return e}(ii),ea=`precision highp float;
464
+ `,t},l}(),wh=function(l){ht(e,l);function e(t){t===void 0&&(t=!1);var i=l.call(this)||this;return i._buffer=new Yt(null,t,!1),i._indexBuffer=new Yt(null,t,!0),i.addAttribute("aVertexPosition",i._buffer,2,!1,K.FLOAT).addAttribute("aTextureCoord",i._buffer,2,!1,K.FLOAT).addAttribute("aColor",i._buffer,4,!0,K.UNSIGNED_BYTE).addAttribute("aTextureId",i._buffer,1,!0,K.FLOAT).addIndex(i._indexBuffer),i}return e}(yl),Ph=`precision highp float;
461
465
  attribute vec2 aVertexPosition;
462
466
  attribute vec2 aTextureCoord;
463
467
  attribute vec4 aColor;
@@ -478,7 +482,7 @@ void main(void){
478
482
  vTextureId = aTextureId;
479
483
  vColor = aColor * tint;
480
484
  }
481
- `,ia=`varying vec2 vTextureCoord;
485
+ `,zh=`varying vec2 vTextureCoord;
482
486
  varying vec4 vColor;
483
487
  varying float vTextureId;
484
488
  uniform sampler2D uSamplers[%count%];
@@ -488,7 +492,7 @@ void main(void){
488
492
  %forloop%
489
493
  gl_FragColor = color * vColor;
490
494
  }
491
- `,jc=function(){function r(){}return r.create=function(e){var t=Object.assign({vertex:ea,fragment:ia,geometryClass:ta,vertexSize:6},e),i=t.vertex,n=t.fragment,s=t.vertexSize,a=t.geometryClass;return function(o){it(h,o);function h(u){var l=o.call(this,u)||this;return l.shaderGenerator=new Wc(i,n),l.geometryClass=a,l.vertexSize=s,l}return h}(Xc)},Object.defineProperty(r,"defaultVertexSrc",{get:function(){return ea},enumerable:!1,configurable:!0}),Object.defineProperty(r,"defaultFragmentTemplate",{get:function(){return ia},enumerable:!1,configurable:!0}),r}(),ra=jc.create();Object.assign(ra,{extension:{name:"batch",type:tt.RendererPlugin}});var zc={accessible:!1,accessibleTitle:null,accessibleHint:null,tabIndex:0,_accessibleActive:!1,_accessibleDiv:null,accessibleType:"button",accessiblePointerEvents:"auto",accessibleChildren:!0,renderId:-1};pt.mixin(zc);var Yc=9,Xi=100,Vc=0,qc=0,na=2,sa=1,$c=-1e3,Zc=-1e3,Kc=2,Qc=function(){function r(e){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,(Vt.tablet||Vt.phone)&&this.createTouchHook();var t=document.createElement("div");t.style.width=Xi+"px",t.style.height=Xi+"px",t.style.position="absolute",t.style.top=Vc+"px",t.style.left=qc+"px",t.style.zIndex=na.toString(),this.div=t,this.renderer=e,this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),globalThis.addEventListener("keydown",this._onKeyDown,!1)}return Object.defineProperty(r.prototype,"isActive",{get:function(){return this._isActive},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isMobileAccessibility",{get:function(){return this._isMobileAccessibility},enumerable:!1,configurable:!0}),r.prototype.createTouchHook=function(){var e=this,t=document.createElement("button");t.style.width=sa+"px",t.style.height=sa+"px",t.style.position="absolute",t.style.top=$c+"px",t.style.left=Zc+"px",t.style.zIndex=Kc.toString(),t.style.backgroundColor="#FF0000",t.title="select to enable accessibility for this content",t.addEventListener("focus",function(){e._isMobileAccessibility=!0,e.activate(),e.destroyTouchHook()}),document.body.appendChild(t),this._hookDiv=t},r.prototype.destroyTouchHook=function(){this._hookDiv&&(document.body.removeChild(this._hookDiv),this._hookDiv=null)},r.prototype.activate=function(){var e;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),(e=this.renderer.view.parentNode)===null||e===void 0||e.appendChild(this.div))},r.prototype.deactivate=function(){var e;!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),(e=this.div.parentNode)===null||e===void 0||e.removeChild(this.div))},r.prototype.updateAccessibleObjects=function(e){if(!(!e.visible||!e.accessibleChildren)){e.accessible&&e.interactive&&(e._accessibleActive||this.addChild(e),e.renderId=this.renderId);var t=e.children;if(t)for(var i=0;i<t.length;i++)this.updateAccessibleObjects(t[i])}},r.prototype.update=function(){var e=performance.now();if(!(Vt.android.device&&e<this.androidUpdateCount)&&(this.androidUpdateCount=e+this.androidUpdateFrequency,!!this.renderer.renderingToScreen)){this.renderer._lastObjectRendered&&this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),i=t.left,n=t.top,s=t.width,a=t.height,o=this.renderer,h=o.width,u=o.height,l=o.resolution,f=s/h*l,c=a/u*l,d=this.div;d.style.left=i+"px",d.style.top=n+"px",d.style.width=h+"px",d.style.height=u+"px";for(var p=0;p<this.children.length;p++){var v=this.children[p];if(v.renderId!==this.renderId)v._accessibleActive=!1,Le(this.children,p,1),this.div.removeChild(v._accessibleDiv),this.pool.push(v._accessibleDiv),v._accessibleDiv=null,p--;else{d=v._accessibleDiv;var _=v.hitArea,m=v.worldTransform;v.hitArea?(d.style.left=(m.tx+_.x*m.a)*f+"px",d.style.top=(m.ty+_.y*m.d)*c+"px",d.style.width=_.width*m.a*f+"px",d.style.height=_.height*m.d*c+"px"):(_=v.getBounds(),this.capHitArea(_),d.style.left=_.x*f+"px",d.style.top=_.y*c+"px",d.style.width=_.width*f+"px",d.style.height=_.height*c+"px",d.title!==v.accessibleTitle&&v.accessibleTitle!==null&&(d.title=v.accessibleTitle),d.getAttribute("aria-label")!==v.accessibleHint&&v.accessibleHint!==null&&d.setAttribute("aria-label",v.accessibleHint)),(v.accessibleTitle!==d.title||v.tabIndex!==d.tabIndex)&&(d.title=v.accessibleTitle,d.tabIndex=v.tabIndex,this.debug&&this.updateDebugHTML(d))}}this.renderId++}},r.prototype.updateDebugHTML=function(e){e.innerHTML="type: "+e.type+"</br> title : "+e.title+"</br> tabIndex: "+e.tabIndex},r.prototype.capHitArea=function(e){e.x<0&&(e.width+=e.x,e.x=0),e.y<0&&(e.height+=e.y,e.y=0);var t=this.renderer,i=t.width,n=t.height;e.x+e.width>i&&(e.width=i-e.x),e.y+e.height>n&&(e.height=n-e.y)},r.prototype.addChild=function(e){var t=this.pool.pop();t||(t=document.createElement("button"),t.style.width=Xi+"px",t.style.height=Xi+"px",t.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",t.style.position="absolute",t.style.zIndex=na.toString(),t.style.borderStyle="none",navigator.userAgent.toLowerCase().indexOf("chrome")>-1?t.setAttribute("aria-live","off"):t.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?t.setAttribute("aria-relevant","additions"):t.setAttribute("aria-relevant","text"),t.addEventListener("click",this._onClick.bind(this)),t.addEventListener("focus",this._onFocus.bind(this)),t.addEventListener("focusout",this._onFocusOut.bind(this))),t.style.pointerEvents=e.accessiblePointerEvents,t.type=e.accessibleType,e.accessibleTitle&&e.accessibleTitle!==null?t.title=e.accessibleTitle:(!e.accessibleHint||e.accessibleHint===null)&&(t.title="displayObject "+e.tabIndex),e.accessibleHint&&e.accessibleHint!==null&&t.setAttribute("aria-label",e.accessibleHint),this.debug&&this.updateDebugHTML(t),e._accessibleActive=!0,e._accessibleDiv=t,t.displayObject=e,this.children.push(e),this.div.appendChild(e._accessibleDiv),e._accessibleDiv.tabIndex=e.tabIndex},r.prototype._onClick=function(e){var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"click",n),t.dispatchEvent(i,"pointertap",n),t.dispatchEvent(i,"tap",n)},r.prototype._onFocus=function(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","assertive");var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"mouseover",n)},r.prototype._onFocusOut=function(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","polite");var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"mouseout",n)},r.prototype._onKeyDown=function(e){e.keyCode===Yc&&this.activate()},r.prototype._onMouseMove=function(e){e.movementX===0&&e.movementY===0||this.deactivate()},r.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},r.extension={name:"accessibility",type:[tt.RendererPlugin,tt.CanvasRendererPlugin]},r}();var aa=function(){function r(){this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0,this.global=new X,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(r.prototype,"pointerId",{get:function(){return this.identifier},enumerable:!1,configurable:!0}),r.prototype.getLocalPosition=function(e,t,i){return e.worldTransform.applyInverse(i||this.global,t)},r.prototype.copyEvent=function(e){"isPrimary"in e&&e.isPrimary&&(this.isPrimary=!0),this.button="button"in e&&e.button;var t="buttons"in e&&e.buttons;this.buttons=Number.isInteger(t)?t:"which"in e&&e.which,this.width="width"in e&&e.width,this.height="height"in e&&e.height,this.tiltX="tiltX"in e&&e.tiltX,this.tiltY="tiltY"in e&&e.tiltY,this.pointerType="pointerType"in e&&e.pointerType,this.pressure="pressure"in e&&e.pressure,this.rotationAngle="rotationAngle"in e&&e.rotationAngle,this.twist="twist"in e&&e.twist||0,this.tangentialPressure="tangentialPressure"in e&&e.tangentialPressure||0},r.prototype.reset=function(){this.isPrimary=!1},r}();var Jr=function(r,e){return Jr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Jr(r,e)};function Jc(r,e){Jr(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var td=function(){function r(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.target=null,this.currentTarget=null,this.type=null,this.data=null}return r.prototype.stopPropagation=function(){this.stopped=!0,this.stopPropagationHint=!0,this.stopsPropagatingAt=this.currentTarget},r.prototype.reset=function(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.currentTarget=null,this.target=null},r}(),tn=function(){function r(e){this._pointerId=e,this._flags=r.FLAGS.NONE}return r.prototype._doSet=function(e,t){t?this._flags=this._flags|e:this._flags=this._flags&~e},Object.defineProperty(r.prototype,"pointerId",{get:function(){return this._pointerId},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"flags",{get:function(){return this._flags},set:function(e){this._flags=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"none",{get:function(){return this._flags===r.FLAGS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"over",{get:function(){return(this._flags&r.FLAGS.OVER)!==0},set:function(e){this._doSet(r.FLAGS.OVER,e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"rightDown",{get:function(){return(this._flags&r.FLAGS.RIGHT_DOWN)!==0},set:function(e){this._doSet(r.FLAGS.RIGHT_DOWN,e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"leftDown",{get:function(){return(this._flags&r.FLAGS.LEFT_DOWN)!==0},set:function(e){this._doSet(r.FLAGS.LEFT_DOWN,e)},enumerable:!1,configurable:!0}),r.FLAGS=Object.freeze({NONE:0,OVER:1<<0,LEFT_DOWN:1<<1,RIGHT_DOWN:1<<2}),r}(),ed=function(){function r(){this._tempPoint=new X}return r.prototype.recursiveFindHit=function(e,t,i,n,s){var a;if(!t||!t.visible)return!1;var o=e.data.global;s=t.interactive||s;var h=!1,u=s,l=!0;if(t.hitArea)n&&(t.worldTransform.applyInverse(o,this._tempPoint),t.hitArea.contains(this._tempPoint.x,this._tempPoint.y)?h=!0:(n=!1,l=!1)),u=!1;else if(t._mask&&n){var f=t._mask.isMaskData?t._mask.maskObject:t._mask;f&&!(!((a=f.containsPoint)===null||a===void 0)&&a.call(f,o))&&(n=!1)}if(l&&t.interactiveChildren&&t.children)for(var c=t.children,d=c.length-1;d>=0;d--){var p=c[d],v=this.recursiveFindHit(e,p,i,n,u);if(v){if(!p.parent)continue;u=!1,v&&(e.target&&(n=!1),h=!0)}}return s&&(n&&!e.target&&!t.hitArea&&t.containsPoint&&t.containsPoint(o)&&(h=!0),t.interactive&&(h&&!e.target&&(e.target=t),i&&i(e,t,!!h))),h},r.prototype.findHit=function(e,t,i,n){this.recursiveFindHit(e,t,i,n,!1)},r}(),id={interactive:!1,interactiveChildren:!0,hitArea:null,get buttonMode(){return this.cursor==="pointer"},set buttonMode(r){r?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};pt.mixin(id);var Wi=1,ji={target:null,data:{global:null}},rd=function(r){Jc(e,r);function e(t,i){var n=r.call(this)||this;return i=i||{},n.renderer=t,n.autoPreventDefault=i.autoPreventDefault!==void 0?i.autoPreventDefault:!0,n.interactionFrequency=i.interactionFrequency||10,n.mouse=new aa,n.mouse.identifier=Wi,n.mouse.global.set(-999999),n.activeInteractionData={},n.activeInteractionData[Wi]=n.mouse,n.interactionDataPool=[],n.eventData=new td,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 ed,n._tempDisplayObject=new Rs,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(e.prototype,"useSystemTicker",{get:function(){return this._useSystemTicker},set:function(t){this._useSystemTicker=t,t?this.addTickerListener():this.removeTickerListener()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastObjectRendered",{get:function(){return this.renderer._lastObjectRendered||this._tempDisplayObject},enumerable:!1,configurable:!0}),e.prototype.hitTest=function(t,i){return ji.target=null,ji.data.global=t,i||(i=this.lastObjectRendered),this.processInteractive(ji,i,null,!0),ji.target},e.prototype.setTargetElement=function(t,i){i===void 0&&(i=1),this.removeTickerListener(),this.removeEvents(),this.interactionDOMElement=t,this.resolution=i,this.addEvents(),this.addTickerListener()},e.prototype.addTickerListener=function(){this.tickerAdded||!this.interactionDOMElement||!this._useSystemTicker||(Tt.system.add(this.tickerUpdate,this,$t.INTERACTION),this.tickerAdded=!0)},e.prototype.removeTickerListener=function(){this.tickerAdded&&(Tt.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)},e.prototype.addEvents=function(){if(!(this.eventsAdded||!this.interactionDOMElement)){var t=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(t.msContentZooming="none",t.msTouchAction="none"):this.supportsPointerEvents&&(t.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}},e.prototype.removeEvents=function(){if(!(!this.eventsAdded||!this.interactionDOMElement)){var t=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(t.msContentZooming="",t.msTouchAction=""):this.supportsPointerEvents&&(t.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}},e.prototype.tickerUpdate=function(t){this._deltaTime+=t,!(this._deltaTime<this.interactionFrequency)&&(this._deltaTime=0,this.update())},e.prototype.update=function(){if(this.interactionDOMElement){if(this._didMove){this._didMove=!1;return}this.cursor=null;for(var t in this.activeInteractionData)if(this.activeInteractionData.hasOwnProperty(t)){var i=this.activeInteractionData[t];if(i.originalEvent&&i.pointerType!=="touch"){var n=this.configureInteractionEventForDOMEvent(this.eventData,i.originalEvent,i);this.processInteractive(n,this.lastObjectRendered,this.processPointerOverOut,!0)}}this.setCursorMode(this.cursor)}},e.prototype.setCursorMode=function(t){t=t||"default";var i=!0;if(globalThis.OffscreenCanvas&&this.interactionDOMElement instanceof OffscreenCanvas&&(i=!1),this.currentCursorMode!==t){this.currentCursorMode=t;var n=this.cursorStyles[t];if(n)switch(typeof n){case"string":i&&(this.interactionDOMElement.style.cursor=n);break;case"function":n(t);break;case"object":i&&Object.assign(this.interactionDOMElement.style,n);break}else i&&typeof t=="string"&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,t)&&(this.interactionDOMElement.style.cursor=t)}},e.prototype.dispatchEvent=function(t,i,n){(!n.stopPropagationHint||t===n.stopsPropagatingAt)&&(n.currentTarget=t,n.type=i,t.emit(i,n),t[i]&&t[i](n))},e.prototype.delayDispatchEvent=function(t,i,n){this.delayedEvents.push({displayObject:t,eventString:i,eventData:n})},e.prototype.mapPositionToPoint=function(t,i,n){var s;this.interactionDOMElement.parentElement?s=this.interactionDOMElement.getBoundingClientRect():s={x:0,y:0,width:this.interactionDOMElement.width,height:this.interactionDOMElement.height,left:0,top:0};var a=1/this.resolution;t.x=(i-s.left)*(this.interactionDOMElement.width/s.width)*a,t.y=(n-s.top)*(this.interactionDOMElement.height/s.height)*a},e.prototype.processInteractive=function(t,i,n,s){var a=this.search.findHit(t,i,n,s),o=this.delayedEvents;if(!o.length)return a;t.stopPropagationHint=!1;var h=o.length;this.delayedEvents=[];for(var u=0;u<h;u++){var l=o[u],f=l.displayObject,c=l.eventString,d=l.eventData;d.stopsPropagatingAt===f&&(d.stopPropagationHint=!0),this.dispatchEvent(f,c,d)}return a},e.prototype.onPointerDown=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t);if(this.autoPreventDefault&&i[0].isNormalized){var n=t.cancelable||!("cancelable"in t);n&&t.preventDefault()}for(var s=i.length,a=0;a<s;a++){var o=i[a],h=this.getInteractionDataForPointerId(o),u=this.configureInteractionEventForDOMEvent(this.eventData,o,h);if(u.data.originalEvent=t,this.processInteractive(u,this.lastObjectRendered,this.processPointerDown,!0),this.emit("pointerdown",u),o.pointerType==="touch")this.emit("touchstart",u);else if(o.pointerType==="mouse"||o.pointerType==="pen"){var l=o.button===2;this.emit(l?"rightdown":"mousedown",this.eventData)}}}},e.prototype.processPointerDown=function(t,i,n){var s=t.data,a=t.data.identifier;if(n){if(i.trackedPointers[a]||(i.trackedPointers[a]=new tn(a)),this.dispatchEvent(i,"pointerdown",t),s.pointerType==="touch")this.dispatchEvent(i,"touchstart",t);else if(s.pointerType==="mouse"||s.pointerType==="pen"){var o=s.button===2;o?i.trackedPointers[a].rightDown=!0:i.trackedPointers[a].leftDown=!0,this.dispatchEvent(i,o?"rightdown":"mousedown",t)}}},e.prototype.onPointerComplete=function(t,i,n){var s=this.normalizeToPointerData(t),a=s.length,o=t.target;t.composedPath&&t.composedPath().length>0&&(o=t.composedPath()[0]);for(var h=o!==this.interactionDOMElement?"outside":"",u=0;u<a;u++){var l=s[u],f=this.getInteractionDataForPointerId(l),c=this.configureInteractionEventForDOMEvent(this.eventData,l,f);if(c.data.originalEvent=t,this.processInteractive(c,this.lastObjectRendered,n,i||!h),this.emit(i?"pointercancel":"pointerup"+h,c),l.pointerType==="mouse"||l.pointerType==="pen"){var d=l.button===2;this.emit(d?"rightup"+h:"mouseup"+h,c)}else l.pointerType==="touch"&&(this.emit(i?"touchcancel":"touchend"+h,c),this.releaseInteractionDataForPointerId(l.pointerId))}},e.prototype.onPointerCancel=function(t){this.supportsTouchEvents&&t.pointerType==="touch"||this.onPointerComplete(t,!0,this.processPointerCancel)},e.prototype.processPointerCancel=function(t,i){var n=t.data,s=t.data.identifier;i.trackedPointers[s]!==void 0&&(delete i.trackedPointers[s],this.dispatchEvent(i,"pointercancel",t),n.pointerType==="touch"&&this.dispatchEvent(i,"touchcancel",t))},e.prototype.onPointerUp=function(t){this.supportsTouchEvents&&t.pointerType==="touch"||this.onPointerComplete(t,!1,this.processPointerUp)},e.prototype.processPointerUp=function(t,i,n){var s=t.data,a=t.data.identifier,o=i.trackedPointers[a],h=s.pointerType==="touch",u=s.pointerType==="mouse"||s.pointerType==="pen",l=!1;if(u){var f=s.button===2,c=tn.FLAGS,d=f?c.RIGHT_DOWN:c.LEFT_DOWN,p=o!==void 0&&o.flags&d;n?(this.dispatchEvent(i,f?"rightup":"mouseup",t),p&&(this.dispatchEvent(i,f?"rightclick":"click",t),l=!0)):p&&this.dispatchEvent(i,f?"rightupoutside":"mouseupoutside",t),o&&(f?o.rightDown=!1:o.leftDown=!1)}n?(this.dispatchEvent(i,"pointerup",t),h&&this.dispatchEvent(i,"touchend",t),o&&((!u||l)&&this.dispatchEvent(i,"pointertap",t),h&&(this.dispatchEvent(i,"tap",t),o.over=!1))):o&&(this.dispatchEvent(i,"pointerupoutside",t),h&&this.dispatchEvent(i,"touchendoutside",t)),o&&o.none&&delete i.trackedPointers[a]},e.prototype.onPointerMove=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t);(i[0].pointerType==="mouse"||i[0].pointerType==="pen")&&(this._didMove=!0,this.cursor=null);for(var n=i.length,s=0;s<n;s++){var a=i[s],o=this.getInteractionDataForPointerId(a),h=this.configureInteractionEventForDOMEvent(this.eventData,a,o);h.data.originalEvent=t,this.processInteractive(h,this.lastObjectRendered,this.processPointerMove,!0),this.emit("pointermove",h),a.pointerType==="touch"&&this.emit("touchmove",h),(a.pointerType==="mouse"||a.pointerType==="pen")&&this.emit("mousemove",h)}i[0].pointerType==="mouse"&&this.setCursorMode(this.cursor)}},e.prototype.processPointerMove=function(t,i,n){var s=t.data,a=s.pointerType==="touch",o=s.pointerType==="mouse"||s.pointerType==="pen";o&&this.processPointerOverOut(t,i,n),(!this.moveWhenInside||n)&&(this.dispatchEvent(i,"pointermove",t),a&&this.dispatchEvent(i,"touchmove",t),o&&this.dispatchEvent(i,"mousemove",t))},e.prototype.onPointerOut=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t),n=i[0];n.pointerType==="mouse"&&(this.mouseOverRenderer=!1,this.setCursorMode(null));var s=this.getInteractionDataForPointerId(n),a=this.configureInteractionEventForDOMEvent(this.eventData,n,s);a.data.originalEvent=n,this.processInteractive(a,this.lastObjectRendered,this.processPointerOverOut,!1),this.emit("pointerout",a),n.pointerType==="mouse"||n.pointerType==="pen"?this.emit("mouseout",a):this.releaseInteractionDataForPointerId(s.identifier)}},e.prototype.processPointerOverOut=function(t,i,n){var s=t.data,a=t.data.identifier,o=s.pointerType==="mouse"||s.pointerType==="pen",h=i.trackedPointers[a];n&&!h&&(h=i.trackedPointers[a]=new tn(a)),h!==void 0&&(n&&this.mouseOverRenderer?(h.over||(h.over=!0,this.delayDispatchEvent(i,"pointerover",t),o&&this.delayDispatchEvent(i,"mouseover",t)),o&&this.cursor===null&&(this.cursor=i.cursor)):h.over&&(h.over=!1,this.dispatchEvent(i,"pointerout",this.eventData),o&&this.dispatchEvent(i,"mouseout",t),h.none&&delete i.trackedPointers[a]))},e.prototype.onPointerOver=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t),n=i[0],s=this.getInteractionDataForPointerId(n),a=this.configureInteractionEventForDOMEvent(this.eventData,n,s);a.data.originalEvent=n,n.pointerType==="mouse"&&(this.mouseOverRenderer=!0),this.emit("pointerover",a),(n.pointerType==="mouse"||n.pointerType==="pen")&&this.emit("mouseover",a)}},e.prototype.getInteractionDataForPointerId=function(t){var i=t.pointerId,n;return i===Wi||t.pointerType==="mouse"?n=this.mouse:this.activeInteractionData[i]?n=this.activeInteractionData[i]:(n=this.interactionDataPool.pop()||new aa,n.identifier=i,this.activeInteractionData[i]=n),n.copyEvent(t),n},e.prototype.releaseInteractionDataForPointerId=function(t){var i=this.activeInteractionData[t];i&&(delete this.activeInteractionData[t],i.reset(),this.interactionDataPool.push(i))},e.prototype.configureInteractionEventForDOMEvent=function(t,i,n){return t.data=n,this.mapPositionToPoint(n.global,i.clientX,i.clientY),i.pointerType==="touch"&&(i.globalX=n.global.x,i.globalY=n.global.y),n.originalEvent=i,t.reset(),t},e.prototype.normalizeToPointerData=function(t){var i=[];if(this.supportsTouchEvents&&t instanceof TouchEvent)for(var n=0,s=t.changedTouches.length;n<s;n++){var a=t.changedTouches[n];typeof a.button>"u"&&(a.button=t.touches.length?1:0),typeof a.buttons>"u"&&(a.buttons=t.touches.length?1:0),typeof a.isPrimary>"u"&&(a.isPrimary=t.touches.length===1&&t.type==="touchstart"),typeof a.width>"u"&&(a.width=a.radiusX||1),typeof a.height>"u"&&(a.height=a.radiusY||1),typeof a.tiltX>"u"&&(a.tiltX=0),typeof a.tiltY>"u"&&(a.tiltY=0),typeof a.pointerType>"u"&&(a.pointerType="touch"),typeof a.pointerId>"u"&&(a.pointerId=a.identifier||0),typeof a.pressure>"u"&&(a.pressure=a.force||.5),typeof a.twist>"u"&&(a.twist=0),typeof a.tangentialPressure>"u"&&(a.tangentialPressure=0),typeof a.layerX>"u"&&(a.layerX=a.offsetX=a.clientX),typeof a.layerY>"u"&&(a.layerY=a.offsetY=a.clientY),a.isNormalized=!0,i.push(a)}else if(!globalThis.MouseEvent||t instanceof MouseEvent&&(!this.supportsPointerEvents||!(t instanceof globalThis.PointerEvent))){var o=t;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=Wi),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(t);return i},e.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},e.extension={name:"interaction",type:[tt.RendererPlugin,tt.CanvasRendererPlugin]},e}(Ve);var oa=new j,ha=4,nd=function(){function r(e){this.renderer=e}return r.prototype.image=function(e,t,i){var n=new Image;return n.src=this.base64(e,t,i),n},r.prototype.base64=function(e,t,i){return this.canvas(e).toDataURL(t,i)},r.prototype.canvas=function(e,t){var i=this.renderer,n,s=!1,a,o=!1;e&&(e instanceof Te?a=e:(a=this.renderer.generateTexture(e),o=!0)),a?(n=a.baseTexture.resolution,t=t??a.frame,s=!1,i.renderTexture.bind(a)):(n=i.resolution,t||(t=oa,t.width=i.width,t.height=i.height),s=!0,i.renderTexture.bind(null));var h=Math.round(t.width*n),u=Math.round(t.height*n),l=new Ps(h,u,1),f=new Uint8Array(ha*h*u),c=i.gl;c.readPixels(Math.round(t.x*n),Math.round(t.y*n),h,u,c.RGBA,c.UNSIGNED_BYTE,f);var d=l.context.getImageData(0,0,h,u);if(r.arrayPostDivide(f,d.data),l.context.putImageData(d,0,0),s){var p=new Ps(l.width,l.height,1);p.context.scale(1,-1),p.context.drawImage(l.canvas,0,-u),l.destroy(),l=p}return o&&a.destroy(!0),l.canvas},r.prototype.pixels=function(e,t){var i=this.renderer,n,s,a=!1;e&&(e instanceof Te?s=e:(s=this.renderer.generateTexture(e),a=!0)),s?(n=s.baseTexture.resolution,t=t??s.frame,i.renderTexture.bind(s)):(n=i.resolution,t||(t=oa,t.width=i.width,t.height=i.height),i.renderTexture.bind(null));var o=Math.round(t.width*n),h=Math.round(t.height*n),u=new Uint8Array(ha*o*h),l=i.gl;return l.readPixels(Math.round(t.x*n),Math.round(t.y*n),o,h,l.RGBA,l.UNSIGNED_BYTE,u),a&&s.destroy(!0),r.arrayPostDivide(u,u),u},r.prototype.destroy=function(){this.renderer=null},r.arrayPostDivide=function(e,t){for(var i=0;i<e.length;i+=4){var n=t[i+3]=e[i+3];n!==0?(t[i]=Math.round(Math.min(e[i]*255/n,255)),t[i+1]=Math.round(Math.min(e[i+1]*255/n,255)),t[i+2]=Math.round(Math.min(e[i+2]*255/n,255))):(t[i]=e[i],t[i+1]=e[i+1],t[i+2]=e[i+2])}},r.extension={name:"extract",type:tt.RendererPlugin},r}();var zi=function(){function r(e,t,i){t===void 0&&(t=!1),this._fn=e,this._once=t,this._thisArg=i,this._next=this._prev=this._owner=null}return r.prototype.detach=function(){return this._owner===null?!1:(this._owner.detach(this),!0)},r}();function ua(r,e){return r._head?(r._tail._next=e,e._prev=r._tail,r._tail=e):(r._head=e,r._tail=e),e._owner=r,e}var ie=function(){function r(){this._head=this._tail=void 0}return r.prototype.handlers=function(e){e===void 0&&(e=!1);var t=this._head;if(e)return!!t;for(var i=[];t;)i.push(t),t=t._next;return i},r.prototype.has=function(e){if(!(e instanceof zi))throw new Error("MiniSignal#has(): First arg must be a SignalBinding object.");return e._owner===this},r.prototype.dispatch=function(){for(var e=arguments,t=[],i=0;i<arguments.length;i++)t[i]=e[i];var n=this._head;if(!n)return!1;for(;n;)n._once&&this.detach(n),n._fn.apply(n._thisArg,t),n=n._next;return!0},r.prototype.add=function(e,t){if(t===void 0&&(t=null),typeof e!="function")throw new Error("MiniSignal#add(): First arg must be a Function.");return ua(this,new zi(e,!1,t))},r.prototype.once=function(e,t){if(t===void 0&&(t=null),typeof e!="function")throw new Error("MiniSignal#once(): First arg must be a Function.");return ua(this,new zi(e,!0,t))},r.prototype.detach=function(e){if(!(e instanceof zi))throw new Error("MiniSignal#detach(): First arg must be a SignalBinding object.");return e._owner!==this?this:(e._prev&&(e._prev._next=e._next),e._next&&(e._next._prev=e._prev),e===this._head?(this._head=e._next,e._next===null&&(this._tail=null)):e===this._tail&&(this._tail=e._prev,this._tail._next=null),e._owner=null,this)},r.prototype.detachAll=function(){var e=this._head;if(!e)return this;for(this._head=this._tail=null;e;)e._owner=null,e=e._next;return this},r}();function la(r,e){e=e||{};for(var t={key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},i=t.parser[e.strictMode?"strict":"loose"].exec(r),n={},s=14;s--;)n[t.key[s]]=i[s]||"";return n[t.q.name]={},n[t.key[12]].replace(t.q.parser,function(a,o,h){o&&(n[t.q.name][o]=h)}),n}var en,Yi=null,sd=0,fa=200,ad=204,od=1223,hd=2;function ca(){}function da(r,e,t){e&&e.indexOf(".")===0&&(e=e.substring(1)),e&&(r[e]=t)}function rn(r){return r.toString().replace("object ","")}var ct=function(){function r(e,t,i){if(this._dequeue=ca,this._onLoadBinding=null,this._elementTimer=0,this._boundComplete=null,this._boundOnError=null,this._boundOnProgress=null,this._boundOnTimeout=null,this._boundXhrOnError=null,this._boundXhrOnTimeout=null,this._boundXhrOnAbort=null,this._boundXhrOnLoad=null,typeof e!="string"||typeof t!="string")throw new Error("Both name and url are required for constructing a resource.");i=i||{},this._flags=0,this._setFlag(r.STATUS_FLAGS.DATA_URL,t.indexOf("data:")===0),this.name=e,this.url=t,this.extension=this._getExtension(),this.data=null,this.crossOrigin=i.crossOrigin===!0?"anonymous":i.crossOrigin,this.timeout=i.timeout||0,this.loadType=i.loadType||this._determineLoadType(),this.xhrType=i.xhrType,this.metadata=i.metadata||{},this.error=null,this.xhr=null,this.children=[],this.type=r.TYPE.UNKNOWN,this.progressChunk=0,this._dequeue=ca,this._onLoadBinding=null,this._elementTimer=0,this._boundComplete=this.complete.bind(this),this._boundOnError=this._onError.bind(this),this._boundOnProgress=this._onProgress.bind(this),this._boundOnTimeout=this._onTimeout.bind(this),this._boundXhrOnError=this._xhrOnError.bind(this),this._boundXhrOnTimeout=this._xhrOnTimeout.bind(this),this._boundXhrOnAbort=this._xhrOnAbort.bind(this),this._boundXhrOnLoad=this._xhrOnLoad.bind(this),this.onStart=new ie,this.onProgress=new ie,this.onComplete=new ie,this.onAfterMiddleware=new ie}return r.setExtensionLoadType=function(e,t){da(r._loadTypeMap,e,t)},r.setExtensionXhrType=function(e,t){da(r._xhrTypeMap,e,t)},Object.defineProperty(r.prototype,"isDataUrl",{get:function(){return this._hasFlag(r.STATUS_FLAGS.DATA_URL)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isComplete",{get:function(){return this._hasFlag(r.STATUS_FLAGS.COMPLETE)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isLoading",{get:function(){return this._hasFlag(r.STATUS_FLAGS.LOADING)},enumerable:!1,configurable:!0}),r.prototype.complete=function(){this._clearEvents(),this._finish()},r.prototype.abort=function(e){if(!this.error){if(this.error=new Error(e),this._clearEvents(),this.xhr)this.xhr.abort();else if(this.xdr)this.xdr.abort();else if(this.data)if(this.data.src)this.data.src=r.EMPTY_GIF;else for(;this.data.firstChild;)this.data.removeChild(this.data.firstChild);this._finish()}},r.prototype.load=function(e){var t=this;if(!this.isLoading){if(this.isComplete){e&&setTimeout(function(){return e(t)},1);return}else e&&this.onComplete.once(e);switch(this._setFlag(r.STATUS_FLAGS.LOADING,!0),this.onStart.dispatch(this),(this.crossOrigin===!1||typeof this.crossOrigin!="string")&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case r.LOAD_TYPE.IMAGE:this.type=r.TYPE.IMAGE,this._loadElement("image");break;case r.LOAD_TYPE.AUDIO:this.type=r.TYPE.AUDIO,this._loadSourceElement("audio");break;case r.LOAD_TYPE.VIDEO:this.type=r.TYPE.VIDEO,this._loadSourceElement("video");break;case r.LOAD_TYPE.XHR:default:typeof en>"u"&&(en=!!(globalThis.XDomainRequest&&!("withCredentials"in new XMLHttpRequest))),en&&this.crossOrigin?this._loadXdr():this._loadXhr();break}}},r.prototype._hasFlag=function(e){return(this._flags&e)!==0},r.prototype._setFlag=function(e,t){this._flags=t?this._flags|e:this._flags&~e},r.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))},r.prototype._finish=function(){if(this.isComplete)throw new Error("Complete called again for an already completed resource.");this._setFlag(r.STATUS_FLAGS.COMPLETE,!0),this._setFlag(r.STATUS_FLAGS.LOADING,!1),this.onComplete.dispatch(this)},r.prototype._loadElement=function(e){this.metadata.loadElement?this.data=this.metadata.loadElement:e==="image"&&typeof globalThis.Image<"u"?this.data=new Image:this.data=document.createElement(e),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))},r.prototype._loadSourceElement=function(e){if(this.metadata.loadElement?this.data=this.metadata.loadElement:e==="audio"&&typeof globalThis.Audio<"u"?this.data=new Audio:this.data=document.createElement(e),this.data===null){this.abort("Unsupported element: "+e);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 t=this.metadata.mimeType,i=0;i<this.url.length;++i)this.data.appendChild(this._createSource(e,this.url[i],Array.isArray(t)?t[i]:t));else{var t=this.metadata.mimeType;this.data.appendChild(this._createSource(e,this.url,Array.isArray(t)?t[0]:t))}this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1),this.data.addEventListener("canplaythrough",this._boundComplete,!1),this.data.load(),this.timeout&&(this._elementTimer=setTimeout(this._boundOnTimeout,this.timeout))},r.prototype._loadXhr=function(){typeof this.xhrType!="string"&&(this.xhrType=this._determineXhrType());var e=this.xhr=new XMLHttpRequest;this.crossOrigin==="use-credentials"&&(e.withCredentials=!0),e.open("GET",this.url,!0),e.timeout=this.timeout,this.xhrType===r.XHR_RESPONSE_TYPE.JSON||this.xhrType===r.XHR_RESPONSE_TYPE.DOCUMENT?e.responseType=r.XHR_RESPONSE_TYPE.TEXT:e.responseType=this.xhrType,e.addEventListener("error",this._boundXhrOnError,!1),e.addEventListener("timeout",this._boundXhrOnTimeout,!1),e.addEventListener("abort",this._boundXhrOnAbort,!1),e.addEventListener("progress",this._boundOnProgress,!1),e.addEventListener("load",this._boundXhrOnLoad,!1),e.send()},r.prototype._loadXdr=function(){typeof this.xhrType!="string"&&(this.xhrType=this._determineXhrType());var e=this.xhr=new globalThis.XDomainRequest;e.timeout=this.timeout||5e3,e.onerror=this._boundXhrOnError,e.ontimeout=this._boundXhrOnTimeout,e.onprogress=this._boundOnProgress,e.onload=this._boundXhrOnLoad,e.open("GET",this.url,!0),setTimeout(function(){return e.send()},1)},r.prototype._createSource=function(e,t,i){i||(i=e+"/"+this._getExtension(t));var n=document.createElement("source");return n.src=t,n.type=i,n},r.prototype._onError=function(e){this.abort("Failed to load element using: "+e.target.nodeName)},r.prototype._onProgress=function(e){e&&e.lengthComputable&&this.onProgress.dispatch(this,e.loaded/e.total)},r.prototype._onTimeout=function(){this.abort("Load timed out.")},r.prototype._xhrOnError=function(){var e=this.xhr;this.abort(rn(e)+" Request failed. Status: "+e.status+', text: "'+e.statusText+'"')},r.prototype._xhrOnTimeout=function(){var e=this.xhr;this.abort(rn(e)+" Request timed out.")},r.prototype._xhrOnAbort=function(){var e=this.xhr;this.abort(rn(e)+" Request was aborted by the user.")},r.prototype._xhrOnLoad=function(){var e=this.xhr,t="",i=typeof e.status>"u"?fa:e.status;(e.responseType===""||e.responseType==="text"||typeof e.responseType>"u")&&(t=e.responseText),i===sd&&(t.length>0||e.responseType===r.XHR_RESPONSE_TYPE.BUFFER)?i=fa:i===od&&(i=ad);var n=i/100|0;if(n===hd)if(this.xhrType===r.XHR_RESPONSE_TYPE.TEXT)this.data=t,this.type=r.TYPE.TEXT;else if(this.xhrType===r.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t),this.type=r.TYPE.JSON}catch(o){this.abort("Error trying to parse loaded json: "+o);return}else if(this.xhrType===r.XHR_RESPONSE_TYPE.DOCUMENT)try{if(globalThis.DOMParser){var s=new DOMParser;this.data=s.parseFromString(t,"text/xml")}else{var a=document.createElement("div");a.innerHTML=t,this.data=a}this.type=r.TYPE.XML}catch(o){this.abort("Error trying to parse loaded xml: "+o);return}else this.data=e.response||t;else{this.abort("["+e.status+"] "+e.statusText+": "+e.responseURL);return}this.complete()},r.prototype._determineCrossOrigin=function(e,t){if(e.indexOf("data:")===0)return"";if(globalThis.origin!==globalThis.location.origin)return"anonymous";t=t||globalThis.location,Yi||(Yi=document.createElement("a")),Yi.href=e;var i=la(Yi.href,{strictMode:!0}),n=!i.port&&t.port===""||i.port===t.port,s=i.protocol?i.protocol+":":"";return i.host!==t.hostname||!n||s!==t.protocol?"anonymous":""},r.prototype._determineXhrType=function(){return r._xhrTypeMap[this.extension]||r.XHR_RESPONSE_TYPE.TEXT},r.prototype._determineLoadType=function(){return r._loadTypeMap[this.extension]||r.LOAD_TYPE.XHR},r.prototype._getExtension=function(e){e===void 0&&(e=this.url);var t="";if(this.isDataUrl){var i=e.indexOf("/");t=e.substring(i+1,e.indexOf(";",i))}else{var n=e.indexOf("?"),s=e.indexOf("#"),a=Math.min(n>-1?n:e.length,s>-1?s:e.length);e=e.substring(0,a),t=e.substring(e.lastIndexOf(".")+1)}return t.toLowerCase()},r.prototype._getMimeFromXhrType=function(e){switch(e){case r.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case r.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case r.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case r.XHR_RESPONSE_TYPE.JSON:return"application/json";case r.XHR_RESPONSE_TYPE.DEFAULT:case r.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},r}();(function(r){(function(e){e[e.NONE=0]="NONE",e[e.DATA_URL=1]="DATA_URL",e[e.COMPLETE=2]="COMPLETE",e[e.LOADING=4]="LOADING"})(r.STATUS_FLAGS||(r.STATUS_FLAGS={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.JSON=1]="JSON",e[e.XML=2]="XML",e[e.IMAGE=3]="IMAGE",e[e.AUDIO=4]="AUDIO",e[e.VIDEO=5]="VIDEO",e[e.TEXT=6]="TEXT"}(r.TYPE||(r.TYPE={})),function(e){e[e.XHR=1]="XHR",e[e.IMAGE=2]="IMAGE",e[e.AUDIO=3]="AUDIO",e[e.VIDEO=4]="VIDEO"}(r.LOAD_TYPE||(r.LOAD_TYPE={})),function(e){e.DEFAULT="text",e.BUFFER="arraybuffer",e.BLOB="blob",e.DOCUMENT="document",e.JSON="json",e.TEXT="text"}(r.XHR_RESPONSE_TYPE||(r.XHR_RESPONSE_TYPE={})),r._loadTypeMap={gif:r.LOAD_TYPE.IMAGE,png:r.LOAD_TYPE.IMAGE,bmp:r.LOAD_TYPE.IMAGE,jpg:r.LOAD_TYPE.IMAGE,jpeg:r.LOAD_TYPE.IMAGE,tif:r.LOAD_TYPE.IMAGE,tiff:r.LOAD_TYPE.IMAGE,webp:r.LOAD_TYPE.IMAGE,tga:r.LOAD_TYPE.IMAGE,avif:r.LOAD_TYPE.IMAGE,svg:r.LOAD_TYPE.IMAGE,"svg+xml":r.LOAD_TYPE.IMAGE,mp3:r.LOAD_TYPE.AUDIO,ogg:r.LOAD_TYPE.AUDIO,wav:r.LOAD_TYPE.AUDIO,mp4:r.LOAD_TYPE.VIDEO,webm:r.LOAD_TYPE.VIDEO},r._xhrTypeMap={xhtml:r.XHR_RESPONSE_TYPE.DOCUMENT,html:r.XHR_RESPONSE_TYPE.DOCUMENT,htm:r.XHR_RESPONSE_TYPE.DOCUMENT,xml:r.XHR_RESPONSE_TYPE.DOCUMENT,tmx:r.XHR_RESPONSE_TYPE.DOCUMENT,svg:r.XHR_RESPONSE_TYPE.DOCUMENT,tsx:r.XHR_RESPONSE_TYPE.DOCUMENT,gif:r.XHR_RESPONSE_TYPE.BLOB,png:r.XHR_RESPONSE_TYPE.BLOB,bmp:r.XHR_RESPONSE_TYPE.BLOB,jpg:r.XHR_RESPONSE_TYPE.BLOB,jpeg:r.XHR_RESPONSE_TYPE.BLOB,tif:r.XHR_RESPONSE_TYPE.BLOB,tiff:r.XHR_RESPONSE_TYPE.BLOB,webp:r.XHR_RESPONSE_TYPE.BLOB,tga:r.XHR_RESPONSE_TYPE.BLOB,avif:r.XHR_RESPONSE_TYPE.BLOB,json:r.XHR_RESPONSE_TYPE.JSON,text:r.XHR_RESPONSE_TYPE.TEXT,txt:r.XHR_RESPONSE_TYPE.TEXT,ttf:r.XHR_RESPONSE_TYPE.BUFFER,otf:r.XHR_RESPONSE_TYPE.BUFFER},r.EMPTY_GIF="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="})(ct||(ct={}));function Pe(){}function ud(r){return function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(r===null)throw new Error("Callback was already called.");var s=r;r=null,s.apply(this,i)}}var ld=function(){function r(e,t){this.data=e,this.callback=t}return r}(),nn=function(){function r(e,t){var i=this;if(t===void 0&&(t=1),this.workers=0,this.saturated=Pe,this.unsaturated=Pe,this.empty=Pe,this.drain=Pe,this.error=Pe,this.started=!1,this.paused=!1,this._tasks=[],this._insert=function(n,s,a){if(a&&typeof a!="function")throw new Error("task callback must be a function");if(i.started=!0,n==null&&i.idle()){setTimeout(function(){return i.drain()},1);return}var o=new ld(n,typeof a=="function"?a:Pe);s?i._tasks.unshift(o):i._tasks.push(o),setTimeout(i.process,1)},this.process=function(){for(;!i.paused&&i.workers<i.concurrency&&i._tasks.length;){var n=i._tasks.shift();i._tasks.length===0&&i.empty(),i.workers+=1,i.workers===i.concurrency&&i.saturated(),i._worker(n.data,ud(i._next(n)))}},this._worker=e,t===0)throw new Error("Concurrency must not be zero");this.concurrency=t,this.buffer=t/4}return r.prototype._next=function(e){var t=this;return function(){for(var i=arguments,n=[],s=0;s<arguments.length;s++)n[s]=i[s];t.workers-=1,e.callback.apply(e,n),n[0]!=null&&t.error(n[0],e.data),t.workers<=t.concurrency-t.buffer&&t.unsaturated(),t.idle()&&t.drain(),t.process()}},r.prototype.push=function(e,t){this._insert(e,!1,t)},r.prototype.kill=function(){this.workers=0,this.drain=Pe,this.started=!1,this._tasks=[]},r.prototype.unshift=function(e,t){this._insert(e,!0,t)},r.prototype.length=function(){return this._tasks.length},r.prototype.running=function(){return this.workers},r.prototype.idle=function(){return this._tasks.length+this.workers===0},r.prototype.pause=function(){this.paused!==!0&&(this.paused=!0)},r.prototype.resume=function(){if(this.paused!==!1){this.paused=!1;for(var e=1;e<=this.concurrency;e++)this.process()}},r.eachSeries=function(e,t,i,n){var s=0,a=e.length;function o(h){if(h||s===a){i&&i(h);return}n?setTimeout(function(){t(e[s++],o)},1):t(e[s++],o)}o()},r.queue=function(e,t){return new r(e,t)},r}(),sn=100,fd=/(#[\w-]+)?$/,Vi=function(){function r(e,t){var i=this;e===void 0&&(e=""),t===void 0&&(t=10),this.progress=0,this.loading=!1,this.defaultQueryString="",this._beforeMiddleware=[],this._afterMiddleware=[],this._resourcesParsing=[],this._boundLoadResource=function(h,u){return i._loadResource(h,u)},this.resources={},this.baseUrl=e,this._beforeMiddleware=[],this._afterMiddleware=[],this._resourcesParsing=[],this._boundLoadResource=function(h,u){return i._loadResource(h,u)},this._queue=nn.queue(this._boundLoadResource,t),this._queue.pause(),this.resources={},this.onProgress=new ie,this.onError=new ie,this.onLoad=new ie,this.onStart=new ie,this.onComplete=new ie;for(var n=0;n<r._plugins.length;++n){var s=r._plugins[n],a=s.pre,o=s.use;a&&this.pre(a),o&&this.use(o)}this._protected=!1}return r.prototype._add=function(e,t,i,n){if(this.loading&&(!i||!i.parentResource))throw new Error("Cannot add resources while the loader is running.");if(this.resources[e])throw new Error('Resource named "'+e+'" already exists.');if(t=this._prepareUrl(t),this.resources[e]=new ct(e,t,i),typeof n=="function"&&this.resources[e].onAfterMiddleware.once(n),this.loading){for(var s=i.parentResource,a=[],o=0;o<s.children.length;++o)s.children[o].isComplete||a.push(s.children[o]);var h=s.progressChunk*(a.length+1),u=h/(a.length+2);s.children.push(this.resources[e]),s.progressChunk=u;for(var o=0;o<a.length;++o)a[o].progressChunk=u;this.resources[e].progressChunk=u}return this._queue.push(this.resources[e]),this},r.prototype.pre=function(e){return this._beforeMiddleware.push(e),this},r.prototype.use=function(e){return this._afterMiddleware.push(e),this},r.prototype.reset=function(){this.progress=0,this.loading=!1,this._queue.kill(),this._queue.pause();for(var e in this.resources){var t=this.resources[e];t._onLoadBinding&&t._onLoadBinding.detach(),t.isLoading&&t.abort("loader reset")}return this.resources={},this},r.prototype.load=function(e){if(Ut("6.5.0","@pixi/loaders is being replaced with @pixi/assets in the next major release."),typeof e=="function"&&this.onComplete.once(e),this.loading)return this;if(this._queue.idle())this._onStart(),this._onComplete();else{for(var t=this._queue._tasks.length,i=sn/t,n=0;n<this._queue._tasks.length;++n)this._queue._tasks[n].data.progressChunk=i;this._onStart(),this._queue.resume()}return this},Object.defineProperty(r.prototype,"concurrency",{get:function(){return this._queue.concurrency},set:function(e){this._queue.concurrency=e},enumerable:!1,configurable:!0}),r.prototype._prepareUrl=function(e){var t=la(e,{strictMode:!0}),i;if(t.protocol||!t.path||e.indexOf("//")===0?i=e:this.baseUrl.length&&this.baseUrl.lastIndexOf("/")!==this.baseUrl.length-1&&e.charAt(0)!=="/"?i=this.baseUrl+"/"+e:i=this.baseUrl+e,this.defaultQueryString){var n=fd.exec(i)[0];i=i.slice(0,i.length-n.length),i.indexOf("?")!==-1?i+="&"+this.defaultQueryString:i+="?"+this.defaultQueryString,i+=n}return i},r.prototype._loadResource=function(e,t){var i=this;e._dequeue=t,nn.eachSeries(this._beforeMiddleware,function(n,s){n.call(i,e,function(){s(e.isComplete?{}:null)})},function(){e.isComplete?i._onLoad(e):(e._onLoadBinding=e.onComplete.once(i._onLoad,i),e.load())},!0)},r.prototype._onStart=function(){this.progress=0,this.loading=!0,this.onStart.dispatch(this)},r.prototype._onComplete=function(){this.progress=sn,this.loading=!1,this.onComplete.dispatch(this,this.resources)},r.prototype._onLoad=function(e){var t=this;e._onLoadBinding=null,this._resourcesParsing.push(e),e._dequeue(),nn.eachSeries(this._afterMiddleware,function(i,n){i.call(t,e,n)},function(){e.onAfterMiddleware.dispatch(e),t.progress=Math.min(sn,t.progress+e.progressChunk),t.onProgress.dispatch(t,e),e.error?t.onError.dispatch(e.error,t,e):t.onLoad.dispatch(t,e),t._resourcesParsing.splice(t._resourcesParsing.indexOf(e),1),t._queue.idle()&&t._resourcesParsing.length===0&&t._onComplete()},!0)},r.prototype.destroy=function(){this._protected||this.reset()},Object.defineProperty(r,"shared",{get:function(){var e=r._shared;return e||(e=new r,e._protected=!0,r._shared=e),e},enumerable:!1,configurable:!0}),r.registerPlugin=function(e){return Ut("6.5.0","Loader.registerPlugin() is deprecated, use extensions.add() instead."),ee.add({type:tt.Loader,ref:e}),r},r._plugins=[],r}();ee.handleByList(tt.Loader,Vi._plugins),Vi.prototype.add=function(e,t,i,n){if(Array.isArray(e)){for(var s=0;s<e.length;++s)this.add(e[s]);return this}if(typeof e=="object"&&(i=e,n=t||i.callback||i.onComplete,t=i.url,e=i.name||i.key||i.url),typeof t!="string"&&(n=i,i=t,t=e),typeof t!="string")throw new Error("No url passed to add resource to loader.");return typeof i=="function"&&(n=i,i=null),this._add(e,t,i,n)};var cd=function(){function r(){}return r.init=function(e){e=Object.assign({sharedLoader:!1},e),this.loader=e.sharedLoader?Vi.shared:new Vi},r.destroy=function(){this.loader&&(this.loader.destroy(),this.loader=null)},r.extension=tt.Application,r}(),dd=function(){function r(){}return r.add=function(){ct.setExtensionLoadType("svg",ct.LOAD_TYPE.XHR),ct.setExtensionXhrType("svg",ct.XHR_RESPONSE_TYPE.TEXT)},r.use=function(e,t){if(e.data&&(e.type===ct.TYPE.IMAGE||e.extension==="svg")){var i=e.data,n=e.url,s=e.name,a=e.metadata;k.fromLoader(i,n,s,a).then(function(o){e.texture=o,t()}).catch(t)}else t()},r.extension=tt.Loader,r}(),pd="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function vd(r){for(var e="",t=0;t<r.length;){for(var i=[0,0,0],n=[0,0,0,0],s=0;s<i.length;++s)t<r.length?i[s]=r.charCodeAt(t++)&255:i[s]=0;n[0]=i[0]>>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 a=t-(r.length-1);switch(a){case 2:n[3]=64,n[2]=64;break;case 1:n[3]=64;break}for(var s=0;s<n.length;++s)e+=pd.charAt(n[s])}return e}function _d(r,e){if(!r.data){e();return}if(r.xhr&&r.xhrType===ct.XHR_RESPONSE_TYPE.BLOB){if(!self.Blob||typeof r.data=="string"){var t=r.xhr.getResponseHeader("content-type");if(t&&t.indexOf("image")===0){r.data=new Image,r.data.src="data:"+t+";base64,"+vd(r.xhr.responseText),r.type=ct.TYPE.IMAGE,r.data.onload=function(){r.data.onload=null,e()};return}}else if(r.data.type.indexOf("image")===0){var i=globalThis.URL||globalThis.webkitURL,n=i.createObjectURL(r.data);r.blob=r.data,r.data=new Image,r.data.src=n,r.type=ct.TYPE.IMAGE,r.data.onload=function(){i.revokeObjectURL(n),r.data.onload=null,e()};return}}e()}var md=function(){function r(){}return r.extension=tt.Loader,r.use=_d,r}();ee.add(dd,md);var J,H;(function(r){r[r.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",r[r.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",r[r.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",r[r.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",r[r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",r[r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",r[r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",r[r.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",r[r.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",r[r.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",r[r.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",r[r.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",r[r.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",r[r.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",r[r.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",r[r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",r[r.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",r[r.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",r[r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",r[r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",r[r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",r[r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",r[r.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",r[r.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",r[r.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",r[r.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",r[r.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR"})(H||(H={}));var qi=(J={},J[H.COMPRESSED_RGB_S3TC_DXT1_EXT]=.5,J[H.COMPRESSED_RGBA_S3TC_DXT1_EXT]=.5,J[H.COMPRESSED_RGBA_S3TC_DXT3_EXT]=1,J[H.COMPRESSED_RGBA_S3TC_DXT5_EXT]=1,J[H.COMPRESSED_SRGB_S3TC_DXT1_EXT]=.5,J[H.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT]=.5,J[H.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT]=1,J[H.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT]=1,J[H.COMPRESSED_R11_EAC]=.5,J[H.COMPRESSED_SIGNED_R11_EAC]=.5,J[H.COMPRESSED_RG11_EAC]=1,J[H.COMPRESSED_SIGNED_RG11_EAC]=1,J[H.COMPRESSED_RGB8_ETC2]=.5,J[H.COMPRESSED_RGBA8_ETC2_EAC]=1,J[H.COMPRESSED_SRGB8_ETC2]=.5,J[H.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]=1,J[H.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]=.5,J[H.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]=.5,J[H.COMPRESSED_RGB_PVRTC_4BPPV1_IMG]=.5,J[H.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]=.5,J[H.COMPRESSED_RGB_PVRTC_2BPPV1_IMG]=.25,J[H.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]=.25,J[H.COMPRESSED_RGB_ETC1_WEBGL]=.5,J[H.COMPRESSED_RGB_ATC_WEBGL]=.5,J[H.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]=1,J[H.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]=1,J[H.COMPRESSED_RGBA_ASTC_4x4_KHR]=1,J);var an=function(r,e){return an=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},an(r,e)};function pa(r,e){an(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}function gd(r,e,t,i){function n(s){return s instanceof t?s:new t(function(a){a(s)})}return new(t||(t=Promise))(function(s,a){function o(l){try{u(i.next(l))}catch(f){a(f)}}function h(l){try{u(i.throw(l))}catch(f){a(f)}}function u(l){l.done?s(l.value):n(l.value).then(o,h)}u((i=i.apply(r,e||[])).next())})}function yd(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,n,s,a;return a={next:o(0),throw:o(1),return:o(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function o(u){return function(l){return h([u,l])}}function h(u){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return t.label++,{value:u[1],done:!1};case 5:t.label++,n=u[1],u=[0];continue;case 7:u=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){t=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){t.label=u[1];break}if(u[0]===6&&t.label<s[1]){t.label=s[1],s=u;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(u);break}s[2]&&t.ops.pop(),t.trys.pop();continue}u=e.call(r,t)}catch(l){u=[6,l],n=0}finally{i=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}var xd=function(r){pa(e,r);function e(t,i){i===void 0&&(i={width:1,height:1,autoLoad:!0});var n=this,s,a;return typeof t=="string"?(s=t,a=new Uint8Array):(s=null,a=t),n=r.call(this,a,i)||this,n.origin=s,n.buffer=a?new Qr(a):null,n.origin&&i.autoLoad!==!1&&n.load(),a&&a.length&&(n.loaded=!0,n.onBlobLoaded(n.buffer.rawBinaryData)),n}return e.prototype.onBlobLoaded=function(t){},e.prototype.load=function(){return gd(this,void 0,Promise,function(){var t,i,n;return yd(this,function(s){switch(s.label){case 0:return[4,fetch(this.origin)];case 1:return t=s.sent(),[4,t.blob()];case 2:return i=s.sent(),[4,i.arrayBuffer()];case 3:return n=s.sent(),this.data=new Uint32Array(n),this.buffer=new Qr(n),this.loaded=!0,this.onBlobLoaded(n),this.update(),[2,this]}})})},e}(ei),on=function(r){pa(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.format=i.format,n.levels=i.levels||1,n._width=i.width,n._height=i.height,n._extension=e._formatToExtension(n.format),(i.levelBuffers||n.buffer)&&(n._levelBuffers=i.levelBuffers||e._createLevelBuffers(t instanceof Uint8Array?t:n.buffer.uint8View,n.format,n.levels,4,4,n.width,n.height)),n}return e.prototype.upload=function(t,i,n){var s=t.gl,a=t.context.extensions[this._extension];if(!a)throw new Error(this._extension+" textures are not supported on the current machine");if(!this._levelBuffers)return!1;for(var o=0,h=this.levels;o<h;o++){var u=this._levelBuffers[o],l=u.levelID,f=u.levelWidth,c=u.levelHeight,d=u.levelBuffer;s.compressedTexImage2D(s.TEXTURE_2D,l,this.format,f,c,0,d)}return!0},e.prototype.onBlobLoaded=function(){this._levelBuffers=e._createLevelBuffers(this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height)},e._formatToExtension=function(t){if(t>=33776&&t<=33779)return"s3tc";if(t>=37488&&t<=37497)return"etc";if(t>=35840&&t<=35843)return"pvrtc";if(t>=36196)return"etc1";if(t>=35986&&t<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")},e._createLevelBuffers=function(t,i,n,s,a,o,h){for(var u=new Array(n),l=t.byteOffset,f=o,c=h,d=f+s-1&~(s-1),p=c+a-1&~(a-1),v=d*p*qi[i],_=0;_<n;_++)u[_]={levelID:_,levelWidth:n>1?f:d,levelHeight:n>1?c:p,levelBuffer:new Uint8Array(t.buffer,l,v)},l+=v,f=f>>1||1,c=c>>1||1,d=f+s-1&~(s-1),p=c+a-1&~(a-1),v=d*p*qi[i];return u},e}(xd),bd=function(){function r(){}return r.use=function(e,t){var i=e.data,n=this;if(e.type===ct.TYPE.JSON&&i&&i.cacheID&&i.textures){for(var s=i.textures,a=void 0,o=void 0,h=0,u=s.length;h<u;h++){var l=s[h],f=l.src,c=l.format;if(c||(o=f),r.textureFormats[c]){a=f;break}}if(a=a||o,!a){t(new Error("Cannot load compressed-textures in "+e.url+", make sure you provide a fallback"));return}if(a===e.url){t(new Error("URL of compressed texture cannot be the same as the manifest's URL"));return}var d={crossOrigin:e.crossOrigin,metadata:e.metadata.imageMetadata,parentResource:e},p=Ne.resolve(e.url.replace(n.baseUrl,""),a),v=i.cacheID;n.add(v,p,d,function(_){if(_.error){t(_.error);return}var m=_.texture,g=m===void 0?null:m,y=_.textures,b=y===void 0?{}:y;Object.assign(e,{texture:g,textures:b}),t()})}else t()},Object.defineProperty(r,"textureExtensions",{get:function(){if(!r._textureExtensions){var e=F.ADAPTER.createCanvas(),t=e.getContext("webgl");if(!t)return console.warn("WebGL not available for compressed textures. Silently failing."),{};var i={s3tc:t.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:t.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:t.getExtension("WEBGL_compressed_texture_etc"),etc1:t.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:t.getExtension("WEBGL_compressed_texture_atc"),astc:t.getExtension("WEBGL_compressed_texture_astc")};r._textureExtensions=i}return r._textureExtensions},enumerable:!1,configurable:!0}),Object.defineProperty(r,"textureFormats",{get:function(){if(!r._textureFormats){var e=r.textureExtensions;r._textureFormats={};for(var t in e){var i=e[t];i&&Object.assign(r._textureFormats,Object.getPrototypeOf(i))}}return r._textureFormats},enumerable:!1,configurable:!0}),r.extension=tt.Loader,r}();function va(r,e,t){var i={textures:{},texture:null};if(!e)return i;var n=e.map(function(s){return new k(new V(s,Object.assign({mipmap:Ft.OFF,alphaMode:Nt.NO_PREMULTIPLIED_ALPHA},t)))});return n.forEach(function(s,a){var o=s.baseTexture,h=r+"-"+(a+1);V.addToCache(o,h),k.addToCache(s,h),a===0&&(V.addToCache(o,r),k.addToCache(s,r),i.texture=s),i.textures[h]=s}),i}var oi,Gt,hn=4,$i=124,Td=32,_a=20,wd=542327876,Zi={SIZE:1,FLAGS:2,HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19},Ed={SIZE:0,FLAGS:1,FOURCC:2,RGB_BITCOUNT:3,R_BIT_MASK:4,G_BIT_MASK:5,B_BIT_MASK:6,A_BIT_MASK:7},Ki={DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3,MISC_FLAGS2:4},kt;(function(r){r[r.DXGI_FORMAT_UNKNOWN=0]="DXGI_FORMAT_UNKNOWN",r[r.DXGI_FORMAT_R32G32B32A32_TYPELESS=1]="DXGI_FORMAT_R32G32B32A32_TYPELESS",r[r.DXGI_FORMAT_R32G32B32A32_FLOAT=2]="DXGI_FORMAT_R32G32B32A32_FLOAT",r[r.DXGI_FORMAT_R32G32B32A32_UINT=3]="DXGI_FORMAT_R32G32B32A32_UINT",r[r.DXGI_FORMAT_R32G32B32A32_SINT=4]="DXGI_FORMAT_R32G32B32A32_SINT",r[r.DXGI_FORMAT_R32G32B32_TYPELESS=5]="DXGI_FORMAT_R32G32B32_TYPELESS",r[r.DXGI_FORMAT_R32G32B32_FLOAT=6]="DXGI_FORMAT_R32G32B32_FLOAT",r[r.DXGI_FORMAT_R32G32B32_UINT=7]="DXGI_FORMAT_R32G32B32_UINT",r[r.DXGI_FORMAT_R32G32B32_SINT=8]="DXGI_FORMAT_R32G32B32_SINT",r[r.DXGI_FORMAT_R16G16B16A16_TYPELESS=9]="DXGI_FORMAT_R16G16B16A16_TYPELESS",r[r.DXGI_FORMAT_R16G16B16A16_FLOAT=10]="DXGI_FORMAT_R16G16B16A16_FLOAT",r[r.DXGI_FORMAT_R16G16B16A16_UNORM=11]="DXGI_FORMAT_R16G16B16A16_UNORM",r[r.DXGI_FORMAT_R16G16B16A16_UINT=12]="DXGI_FORMAT_R16G16B16A16_UINT",r[r.DXGI_FORMAT_R16G16B16A16_SNORM=13]="DXGI_FORMAT_R16G16B16A16_SNORM",r[r.DXGI_FORMAT_R16G16B16A16_SINT=14]="DXGI_FORMAT_R16G16B16A16_SINT",r[r.DXGI_FORMAT_R32G32_TYPELESS=15]="DXGI_FORMAT_R32G32_TYPELESS",r[r.DXGI_FORMAT_R32G32_FLOAT=16]="DXGI_FORMAT_R32G32_FLOAT",r[r.DXGI_FORMAT_R32G32_UINT=17]="DXGI_FORMAT_R32G32_UINT",r[r.DXGI_FORMAT_R32G32_SINT=18]="DXGI_FORMAT_R32G32_SINT",r[r.DXGI_FORMAT_R32G8X24_TYPELESS=19]="DXGI_FORMAT_R32G8X24_TYPELESS",r[r.DXGI_FORMAT_D32_FLOAT_S8X24_UINT=20]="DXGI_FORMAT_D32_FLOAT_S8X24_UINT",r[r.DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS=21]="DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",r[r.DXGI_FORMAT_X32_TYPELESS_G8X24_UINT=22]="DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",r[r.DXGI_FORMAT_R10G10B10A2_TYPELESS=23]="DXGI_FORMAT_R10G10B10A2_TYPELESS",r[r.DXGI_FORMAT_R10G10B10A2_UNORM=24]="DXGI_FORMAT_R10G10B10A2_UNORM",r[r.DXGI_FORMAT_R10G10B10A2_UINT=25]="DXGI_FORMAT_R10G10B10A2_UINT",r[r.DXGI_FORMAT_R11G11B10_FLOAT=26]="DXGI_FORMAT_R11G11B10_FLOAT",r[r.DXGI_FORMAT_R8G8B8A8_TYPELESS=27]="DXGI_FORMAT_R8G8B8A8_TYPELESS",r[r.DXGI_FORMAT_R8G8B8A8_UNORM=28]="DXGI_FORMAT_R8G8B8A8_UNORM",r[r.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB=29]="DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",r[r.DXGI_FORMAT_R8G8B8A8_UINT=30]="DXGI_FORMAT_R8G8B8A8_UINT",r[r.DXGI_FORMAT_R8G8B8A8_SNORM=31]="DXGI_FORMAT_R8G8B8A8_SNORM",r[r.DXGI_FORMAT_R8G8B8A8_SINT=32]="DXGI_FORMAT_R8G8B8A8_SINT",r[r.DXGI_FORMAT_R16G16_TYPELESS=33]="DXGI_FORMAT_R16G16_TYPELESS",r[r.DXGI_FORMAT_R16G16_FLOAT=34]="DXGI_FORMAT_R16G16_FLOAT",r[r.DXGI_FORMAT_R16G16_UNORM=35]="DXGI_FORMAT_R16G16_UNORM",r[r.DXGI_FORMAT_R16G16_UINT=36]="DXGI_FORMAT_R16G16_UINT",r[r.DXGI_FORMAT_R16G16_SNORM=37]="DXGI_FORMAT_R16G16_SNORM",r[r.DXGI_FORMAT_R16G16_SINT=38]="DXGI_FORMAT_R16G16_SINT",r[r.DXGI_FORMAT_R32_TYPELESS=39]="DXGI_FORMAT_R32_TYPELESS",r[r.DXGI_FORMAT_D32_FLOAT=40]="DXGI_FORMAT_D32_FLOAT",r[r.DXGI_FORMAT_R32_FLOAT=41]="DXGI_FORMAT_R32_FLOAT",r[r.DXGI_FORMAT_R32_UINT=42]="DXGI_FORMAT_R32_UINT",r[r.DXGI_FORMAT_R32_SINT=43]="DXGI_FORMAT_R32_SINT",r[r.DXGI_FORMAT_R24G8_TYPELESS=44]="DXGI_FORMAT_R24G8_TYPELESS",r[r.DXGI_FORMAT_D24_UNORM_S8_UINT=45]="DXGI_FORMAT_D24_UNORM_S8_UINT",r[r.DXGI_FORMAT_R24_UNORM_X8_TYPELESS=46]="DXGI_FORMAT_R24_UNORM_X8_TYPELESS",r[r.DXGI_FORMAT_X24_TYPELESS_G8_UINT=47]="DXGI_FORMAT_X24_TYPELESS_G8_UINT",r[r.DXGI_FORMAT_R8G8_TYPELESS=48]="DXGI_FORMAT_R8G8_TYPELESS",r[r.DXGI_FORMAT_R8G8_UNORM=49]="DXGI_FORMAT_R8G8_UNORM",r[r.DXGI_FORMAT_R8G8_UINT=50]="DXGI_FORMAT_R8G8_UINT",r[r.DXGI_FORMAT_R8G8_SNORM=51]="DXGI_FORMAT_R8G8_SNORM",r[r.DXGI_FORMAT_R8G8_SINT=52]="DXGI_FORMAT_R8G8_SINT",r[r.DXGI_FORMAT_R16_TYPELESS=53]="DXGI_FORMAT_R16_TYPELESS",r[r.DXGI_FORMAT_R16_FLOAT=54]="DXGI_FORMAT_R16_FLOAT",r[r.DXGI_FORMAT_D16_UNORM=55]="DXGI_FORMAT_D16_UNORM",r[r.DXGI_FORMAT_R16_UNORM=56]="DXGI_FORMAT_R16_UNORM",r[r.DXGI_FORMAT_R16_UINT=57]="DXGI_FORMAT_R16_UINT",r[r.DXGI_FORMAT_R16_SNORM=58]="DXGI_FORMAT_R16_SNORM",r[r.DXGI_FORMAT_R16_SINT=59]="DXGI_FORMAT_R16_SINT",r[r.DXGI_FORMAT_R8_TYPELESS=60]="DXGI_FORMAT_R8_TYPELESS",r[r.DXGI_FORMAT_R8_UNORM=61]="DXGI_FORMAT_R8_UNORM",r[r.DXGI_FORMAT_R8_UINT=62]="DXGI_FORMAT_R8_UINT",r[r.DXGI_FORMAT_R8_SNORM=63]="DXGI_FORMAT_R8_SNORM",r[r.DXGI_FORMAT_R8_SINT=64]="DXGI_FORMAT_R8_SINT",r[r.DXGI_FORMAT_A8_UNORM=65]="DXGI_FORMAT_A8_UNORM",r[r.DXGI_FORMAT_R1_UNORM=66]="DXGI_FORMAT_R1_UNORM",r[r.DXGI_FORMAT_R9G9B9E5_SHAREDEXP=67]="DXGI_FORMAT_R9G9B9E5_SHAREDEXP",r[r.DXGI_FORMAT_R8G8_B8G8_UNORM=68]="DXGI_FORMAT_R8G8_B8G8_UNORM",r[r.DXGI_FORMAT_G8R8_G8B8_UNORM=69]="DXGI_FORMAT_G8R8_G8B8_UNORM",r[r.DXGI_FORMAT_BC1_TYPELESS=70]="DXGI_FORMAT_BC1_TYPELESS",r[r.DXGI_FORMAT_BC1_UNORM=71]="DXGI_FORMAT_BC1_UNORM",r[r.DXGI_FORMAT_BC1_UNORM_SRGB=72]="DXGI_FORMAT_BC1_UNORM_SRGB",r[r.DXGI_FORMAT_BC2_TYPELESS=73]="DXGI_FORMAT_BC2_TYPELESS",r[r.DXGI_FORMAT_BC2_UNORM=74]="DXGI_FORMAT_BC2_UNORM",r[r.DXGI_FORMAT_BC2_UNORM_SRGB=75]="DXGI_FORMAT_BC2_UNORM_SRGB",r[r.DXGI_FORMAT_BC3_TYPELESS=76]="DXGI_FORMAT_BC3_TYPELESS",r[r.DXGI_FORMAT_BC3_UNORM=77]="DXGI_FORMAT_BC3_UNORM",r[r.DXGI_FORMAT_BC3_UNORM_SRGB=78]="DXGI_FORMAT_BC3_UNORM_SRGB",r[r.DXGI_FORMAT_BC4_TYPELESS=79]="DXGI_FORMAT_BC4_TYPELESS",r[r.DXGI_FORMAT_BC4_UNORM=80]="DXGI_FORMAT_BC4_UNORM",r[r.DXGI_FORMAT_BC4_SNORM=81]="DXGI_FORMAT_BC4_SNORM",r[r.DXGI_FORMAT_BC5_TYPELESS=82]="DXGI_FORMAT_BC5_TYPELESS",r[r.DXGI_FORMAT_BC5_UNORM=83]="DXGI_FORMAT_BC5_UNORM",r[r.DXGI_FORMAT_BC5_SNORM=84]="DXGI_FORMAT_BC5_SNORM",r[r.DXGI_FORMAT_B5G6R5_UNORM=85]="DXGI_FORMAT_B5G6R5_UNORM",r[r.DXGI_FORMAT_B5G5R5A1_UNORM=86]="DXGI_FORMAT_B5G5R5A1_UNORM",r[r.DXGI_FORMAT_B8G8R8A8_UNORM=87]="DXGI_FORMAT_B8G8R8A8_UNORM",r[r.DXGI_FORMAT_B8G8R8X8_UNORM=88]="DXGI_FORMAT_B8G8R8X8_UNORM",r[r.DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM=89]="DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",r[r.DXGI_FORMAT_B8G8R8A8_TYPELESS=90]="DXGI_FORMAT_B8G8R8A8_TYPELESS",r[r.DXGI_FORMAT_B8G8R8A8_UNORM_SRGB=91]="DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",r[r.DXGI_FORMAT_B8G8R8X8_TYPELESS=92]="DXGI_FORMAT_B8G8R8X8_TYPELESS",r[r.DXGI_FORMAT_B8G8R8X8_UNORM_SRGB=93]="DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",r[r.DXGI_FORMAT_BC6H_TYPELESS=94]="DXGI_FORMAT_BC6H_TYPELESS",r[r.DXGI_FORMAT_BC6H_UF16=95]="DXGI_FORMAT_BC6H_UF16",r[r.DXGI_FORMAT_BC6H_SF16=96]="DXGI_FORMAT_BC6H_SF16",r[r.DXGI_FORMAT_BC7_TYPELESS=97]="DXGI_FORMAT_BC7_TYPELESS",r[r.DXGI_FORMAT_BC7_UNORM=98]="DXGI_FORMAT_BC7_UNORM",r[r.DXGI_FORMAT_BC7_UNORM_SRGB=99]="DXGI_FORMAT_BC7_UNORM_SRGB",r[r.DXGI_FORMAT_AYUV=100]="DXGI_FORMAT_AYUV",r[r.DXGI_FORMAT_Y410=101]="DXGI_FORMAT_Y410",r[r.DXGI_FORMAT_Y416=102]="DXGI_FORMAT_Y416",r[r.DXGI_FORMAT_NV12=103]="DXGI_FORMAT_NV12",r[r.DXGI_FORMAT_P010=104]="DXGI_FORMAT_P010",r[r.DXGI_FORMAT_P016=105]="DXGI_FORMAT_P016",r[r.DXGI_FORMAT_420_OPAQUE=106]="DXGI_FORMAT_420_OPAQUE",r[r.DXGI_FORMAT_YUY2=107]="DXGI_FORMAT_YUY2",r[r.DXGI_FORMAT_Y210=108]="DXGI_FORMAT_Y210",r[r.DXGI_FORMAT_Y216=109]="DXGI_FORMAT_Y216",r[r.DXGI_FORMAT_NV11=110]="DXGI_FORMAT_NV11",r[r.DXGI_FORMAT_AI44=111]="DXGI_FORMAT_AI44",r[r.DXGI_FORMAT_IA44=112]="DXGI_FORMAT_IA44",r[r.DXGI_FORMAT_P8=113]="DXGI_FORMAT_P8",r[r.DXGI_FORMAT_A8P8=114]="DXGI_FORMAT_A8P8",r[r.DXGI_FORMAT_B4G4R4A4_UNORM=115]="DXGI_FORMAT_B4G4R4A4_UNORM",r[r.DXGI_FORMAT_P208=116]="DXGI_FORMAT_P208",r[r.DXGI_FORMAT_V208=117]="DXGI_FORMAT_V208",r[r.DXGI_FORMAT_V408=118]="DXGI_FORMAT_V408",r[r.DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE=119]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE",r[r.DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE=120]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE",r[r.DXGI_FORMAT_FORCE_UINT=121]="DXGI_FORMAT_FORCE_UINT"})(kt||(kt={}));var un;(function(r){r[r.DDS_DIMENSION_TEXTURE1D=2]="DDS_DIMENSION_TEXTURE1D",r[r.DDS_DIMENSION_TEXTURE2D=3]="DDS_DIMENSION_TEXTURE2D",r[r.DDS_DIMENSION_TEXTURE3D=6]="DDS_DIMENSION_TEXTURE3D"})(un||(un={}));var Sd=1,Pd=2,Rd=4,Cd=64,Ad=512,Id=131072,Od=827611204,Md=861165636,Dd=894720068,Fd=808540228,Nd=4,Bd=(oi={},oi[Od]=H.COMPRESSED_RGBA_S3TC_DXT1_EXT,oi[Md]=H.COMPRESSED_RGBA_S3TC_DXT3_EXT,oi[Dd]=H.COMPRESSED_RGBA_S3TC_DXT5_EXT,oi),Ld=(Gt={},Gt[kt.DXGI_FORMAT_BC1_TYPELESS]=H.COMPRESSED_RGBA_S3TC_DXT1_EXT,Gt[kt.DXGI_FORMAT_BC1_UNORM]=H.COMPRESSED_RGBA_S3TC_DXT1_EXT,Gt[kt.DXGI_FORMAT_BC2_TYPELESS]=H.COMPRESSED_RGBA_S3TC_DXT3_EXT,Gt[kt.DXGI_FORMAT_BC2_UNORM]=H.COMPRESSED_RGBA_S3TC_DXT3_EXT,Gt[kt.DXGI_FORMAT_BC3_TYPELESS]=H.COMPRESSED_RGBA_S3TC_DXT5_EXT,Gt[kt.DXGI_FORMAT_BC3_UNORM]=H.COMPRESSED_RGBA_S3TC_DXT5_EXT,Gt[kt.DXGI_FORMAT_BC1_UNORM_SRGB]=H.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,Gt[kt.DXGI_FORMAT_BC2_UNORM_SRGB]=H.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,Gt[kt.DXGI_FORMAT_BC3_UNORM_SRGB]=H.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,Gt);function Ud(r){var e=new Uint32Array(r),t=e[0];if(t!==wd)throw new Error("Invalid DDS file magic word");var i=new Uint32Array(r,0,$i/Uint32Array.BYTES_PER_ELEMENT),n=i[Zi.HEIGHT],s=i[Zi.WIDTH],a=i[Zi.MIPMAP_COUNT],o=new Uint32Array(r,Zi.PIXEL_FORMAT*Uint32Array.BYTES_PER_ELEMENT,Td/Uint32Array.BYTES_PER_ELEMENT),h=o[Sd];if(h&Rd){var u=o[Ed.FOURCC];if(u!==Fd){var l=Bd[u],f=hn+$i,c=new Uint8Array(r,f),d=new on(c,{format:l,width:s,height:n,levels:a});return[d]}var p=hn+$i,v=new Uint32Array(e.buffer,p,_a/Uint32Array.BYTES_PER_ELEMENT),_=v[Ki.DXGI_FORMAT],m=v[Ki.RESOURCE_DIMENSION],g=v[Ki.MISC_FLAG],y=v[Ki.ARRAY_SIZE],b=Ld[_];if(b===void 0)throw new Error("DDSParser cannot parse texture data with DXGI format "+_);if(g===Nd)throw new Error("DDSParser does not support cubemap textures");if(m===un.DDS_DIMENSION_TEXTURE3D)throw new Error("DDSParser does not supported 3D texture data");var x=new Array,T=hn+$i+_a;if(y===1)x.push(new Uint8Array(r,T));else{for(var w=qi[b],A=0,S=s,E=n,D=0;D<a;D++){var C=Math.max(1,S+3&-4),N=Math.max(1,E+3&-4),W=C*N*w;A+=W,S=S>>>1,E=E>>>1}for(var M=T,D=0;D<y;D++)x.push(new Uint8Array(r,M,A)),M+=A}return x.map(function(O){return new on(O,{format:b,width:s,height:n,levels:a})})}throw h&Cd?new Error("DDSParser does not support uncompressed texture data."):h&Ad?new Error("DDSParser does not supported YUV uncompressed texture data."):h&Id?new Error("DDSParser does not support single-channel (lumninance) texture data!"):h&Pd?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}var he,re,hi,ma=[171,75,84,88,32,49,49,187,13,10,26,10],Gd=67305985,Ht={FILE_IDENTIFIER:0,ENDIANNESS:12,GL_TYPE:16,GL_TYPE_SIZE:20,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,GL_BASE_INTERNAL_FORMAT:32,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},ln=64,ga=(he={},he[L.UNSIGNED_BYTE]=1,he[L.UNSIGNED_SHORT]=2,he[L.INT]=4,he[L.UNSIGNED_INT]=4,he[L.FLOAT]=4,he[L.HALF_FLOAT]=8,he),kd=(re={},re[R.RGBA]=4,re[R.RGB]=3,re[R.RG]=2,re[R.RED]=1,re[R.LUMINANCE]=1,re[R.LUMINANCE_ALPHA]=2,re[R.ALPHA]=1,re),Hd=(hi={},hi[L.UNSIGNED_SHORT_4_4_4_4]=2,hi[L.UNSIGNED_SHORT_5_5_5_1]=2,hi[L.UNSIGNED_SHORT_5_6_5]=2,hi);function Xd(r,e,t){t===void 0&&(t=!1);var i=new DataView(e);if(!Wd(r,i))return null;var n=i.getUint32(Ht.ENDIANNESS,!0)===Gd,s=i.getUint32(Ht.GL_TYPE,n),a=i.getUint32(Ht.GL_FORMAT,n),o=i.getUint32(Ht.GL_INTERNAL_FORMAT,n),h=i.getUint32(Ht.PIXEL_WIDTH,n),u=i.getUint32(Ht.PIXEL_HEIGHT,n)||1,l=i.getUint32(Ht.PIXEL_DEPTH,n)||1,f=i.getUint32(Ht.NUMBER_OF_ARRAY_ELEMENTS,n)||1,c=i.getUint32(Ht.NUMBER_OF_FACES,n),d=i.getUint32(Ht.NUMBER_OF_MIPMAP_LEVELS,n),p=i.getUint32(Ht.BYTES_OF_KEY_VALUE_DATA,n);if(u===0||l!==1)throw new Error("Only 2D textures are supported");if(c!==1)throw new Error("CubeTextures are not supported by KTXLoader yet!");if(f!==1)throw new Error("WebGL does not support array textures");var v=4,_=4,m=h+3&-4,g=u+3&-4,y=new Array(f),b=h*u;s===0&&(b=m*g);var x;if(s!==0?ga[s]?x=ga[s]*kd[a]:x=Hd[s]:x=qi[o],x===void 0)throw new Error("Unable to resolve the pixel format stored in the *.ktx file!");for(var T=t?zd(i,p,n):null,w=b*x,A=w,S=h,E=u,D=m,C=g,N=ln+p,W=0;W<d;W++){for(var M=i.getUint32(N,n),O=N+4,U=0;U<f;U++){var rt=y[U];rt||(rt=y[U]=new Array(d)),rt[W]={levelID:W,levelWidth:d>1||s!==0?S:D,levelHeight:d>1||s!==0?E:C,levelBuffer:new Uint8Array(e,O,A)},O+=A}N+=M+4,N=N%4!==0?N+4-N%4:N,S=S>>1||1,E=E>>1||1,D=S+v-1&~(v-1),C=E+_-1&~(_-1),A=D*C*x}return s!==0?{uncompressed:y.map(function(z){var I=z[0].levelBuffer,P=!1;return s===L.FLOAT?I=new Float32Array(z[0].levelBuffer.buffer,z[0].levelBuffer.byteOffset,z[0].levelBuffer.byteLength/4):s===L.UNSIGNED_INT?(P=!0,I=new Uint32Array(z[0].levelBuffer.buffer,z[0].levelBuffer.byteOffset,z[0].levelBuffer.byteLength/4)):s===L.INT&&(P=!0,I=new Int32Array(z[0].levelBuffer.buffer,z[0].levelBuffer.byteOffset,z[0].levelBuffer.byteLength/4)),{resource:new ei(I,{width:z[0].levelWidth,height:z[0].levelHeight}),type:s,format:P?jd(a):a}}),kvData:T}:{compressed:y.map(function(z){return new on(null,{format:o,width:h,height:u,levels:d,levelBuffers:z})}),kvData:T}}function Wd(r,e){for(var t=0;t<ma.length;t++)if(e.getUint8(t)!==ma[t])return console.error(r+" is not a valid *.ktx file!"),!1;return!0}function jd(r){switch(r){case R.RGBA:return R.RGBA_INTEGER;case R.RGB:return R.RGB_INTEGER;case R.RG:return R.RG_INTEGER;case R.RED:return R.RED_INTEGER;default:return r}}function zd(r,e,t){for(var i=new Map,n=0;n<e;){var s=r.getUint32(ln+n,t),a=ln+n+4,o=3-(s+3)%4;if(s===0||s>e-n){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}for(var h=0;h<s&&r.getUint8(a+h)!==0;h++);if(h===-1){console.error("KTXLoader: Failed to find null byte terminating kvData key");break}var u=new TextDecoder().decode(new Uint8Array(r.buffer,a,h)),l=new DataView(r.buffer,a+h+1,s-h-1);i.set(u,l),n+=4+s+o}return i}ct.setExtensionXhrType("dds",ct.XHR_RESPONSE_TYPE.BUFFER);var Yd=function(){function r(){}return r.use=function(e,t){if(e.extension==="dds"&&e.data)try{Object.assign(e,va(e.name||e.url,Ud(e.data),e.metadata))}catch(i){t(i);return}t()},r.extension=tt.Loader,r}();ct.setExtensionXhrType("ktx",ct.XHR_RESPONSE_TYPE.BUFFER);var Vd=function(){function r(){}return r.use=function(e,t){if(e.extension==="ktx"&&e.data)try{var i=e.name||e.url,n=Xd(i,e.data,this.loadKeyValueData),s=n.compressed,a=n.uncompressed,o=n.kvData;if(s){var h=va(i,s,e.metadata);if(o&&h.textures)for(var u in h.textures)h.textures[u].baseTexture.ktxKeyValueData=o;Object.assign(e,h)}else if(a){var l={};a.forEach(function(f,c){var d=new k(new V(f.resource,{mipmap:Ft.OFF,alphaMode:Nt.NO_PREMULTIPLIED_ALPHA,type:f.type,format:f.format})),p=i+"-"+(c+1);o&&(d.baseTexture.ktxKeyValueData=o),V.addToCache(d.baseTexture,p),k.addToCache(d,p),c===0&&(l[i]=d,V.addToCache(d.baseTexture,i),k.addToCache(d,i)),l[p]=d}),Object.assign(e,{textures:l})}}catch(f){t(f);return}t()},r.extension=tt.Loader,r.loadKeyValueData=!1,r}();var fn=function(r,e){return fn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},fn(r,e)};function ya(r,e){fn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}(function(r){ya(e,r);function e(t,i,n,s){t===void 0&&(t=1500),n===void 0&&(n=16384),s===void 0&&(s=!1);var a=r.call(this)||this,o=16384;return n>o&&(n=o),a._properties=[!1,!0,!1,!1,!1],a._maxSize=t,a._batchSize=n,a._buffers=null,a._bufferUpdateIDs=[],a._updateID=0,a.interactiveChildren=!1,a.blendMode=G.NORMAL,a.autoResize=s,a.roundPixels=!0,a.baseTexture=null,a.setProperties(i),a._tint=0,a.tintRgb=new Float32Array(4),a.tint=16777215,a}return e.prototype.setProperties=function(t){t&&(this._properties[0]="vertices"in t||"scale"in t?!!t.vertices||!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="tint"in t||"alpha"in t?!!t.tint||!!t.alpha:this._properties[4])},e.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t,Be(t,this.tintRgb)},enumerable:!1,configurable:!0}),e.prototype.render=function(t){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)})),t.batch.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},e.prototype.onChildrenChange=function(t){for(var i=Math.floor(t/this._batchSize);this._bufferUpdateIDs.length<i;)this._bufferUpdateIDs.push(0);this._bufferUpdateIDs[i]=++this._updateID},e.prototype.dispose=function(){if(this._buffers){for(var t=0;t<this._buffers.length;++t)this._buffers[t].destroy();this._buffers=null}},e.prototype.destroy=function(t){r.prototype.destroy.call(this,t),this.dispose(),this._properties=null,this._buffers=null,this._bufferUpdateIDs=null},e})(Pt);var xa=function(){function r(e,t,i){this.geometry=new ii,this.indexBuffer=null,this.size=i,this.dynamicProperties=[],this.staticProperties=[];for(var n=0;n<e.length;++n){var s=e[n];s={attributeName:s.attributeName,size:s.size,uploadFunction:s.uploadFunction,type:s.type||L.FLOAT,offset:s.offset},t[n]?this.dynamicProperties.push(s):this.staticProperties.push(s)}this.staticStride=0,this.staticBuffer=null,this.staticData=null,this.staticDataUint32=null,this.dynamicStride=0,this.dynamicBuffer=null,this.dynamicData=null,this.dynamicDataUint32=null,this._updateID=0,this.initBuffers()}return r.prototype.initBuffers=function(){var e=this.geometry,t=0;this.indexBuffer=new yt(ff(this.size),!0,!0),e.addIndex(this.indexBuffer),this.dynamicStride=0;for(var i=0;i<this.dynamicProperties.length;++i){var n=this.dynamicProperties[i];n.offset=t,t+=n.size,this.dynamicStride+=n.size}var s=new ArrayBuffer(this.size*this.dynamicStride*4*4);this.dynamicData=new Float32Array(s),this.dynamicDataUint32=new Uint32Array(s),this.dynamicBuffer=new yt(this.dynamicData,!1,!1);var a=0;this.staticStride=0;for(var i=0;i<this.staticProperties.length;++i){var n=this.staticProperties[i];n.offset=a,a+=n.size,this.staticStride+=n.size}var o=new ArrayBuffer(this.size*this.staticStride*4*4);this.staticData=new Float32Array(o),this.staticDataUint32=new Uint32Array(o),this.staticBuffer=new yt(this.staticData,!0,!1);for(var i=0;i<this.dynamicProperties.length;++i){var n=this.dynamicProperties[i];e.addAttribute(n.attributeName,this.dynamicBuffer,0,n.type===L.UNSIGNED_BYTE,n.type,this.dynamicStride*4,n.offset*4)}for(var i=0;i<this.staticProperties.length;++i){var n=this.staticProperties[i];e.addAttribute(n.attributeName,this.staticBuffer,0,n.type===L.UNSIGNED_BYTE,n.type,this.staticStride*4,n.offset*4)}},r.prototype.uploadDynamic=function(e,t,i){for(var n=0;n<this.dynamicProperties.length;n++){var s=this.dynamicProperties[n];s.uploadFunction(e,t,i,s.type===L.UNSIGNED_BYTE?this.dynamicDataUint32:this.dynamicData,this.dynamicStride,s.offset)}this.dynamicBuffer._updateID++},r.prototype.uploadStatic=function(e,t,i){for(var n=0;n<this.staticProperties.length;n++){var s=this.staticProperties[n];s.uploadFunction(e,t,i,s.type===L.UNSIGNED_BYTE?this.staticDataUint32:this.staticData,this.staticStride,s.offset)}this.staticBuffer._updateID++},r.prototype.destroy=function(){this.indexBuffer=null,this.dynamicProperties=null,this.dynamicBuffer=null,this.dynamicData=null,this.dynamicDataUint32=null,this.staticProperties=null,this.staticBuffer=null,this.staticData=null,this.staticDataUint32=null,this.geometry.destroy()},r}(),qd=`varying vec2 vTextureCoord;
495
+ `,np=function(){function l(){}return l.create=function(e){var t=Object.assign({vertex:Ph,fragment:zh,geometryClass:wh,vertexSize:6},e),i=t.vertex,n=t.fragment,a=t.vertexSize,s=t.geometryClass;return function(d){ht(h,d);function h(r){var o=d.call(this,r)||this;return o.shaderGenerator=new lp(i,n),o.geometryClass=s,o.vertexSize=a,o}return h}(ip)},Object.defineProperty(l,"defaultVertexSrc",{get:function(){return Ph},enumerable:!1,configurable:!0}),Object.defineProperty(l,"defaultFragmentTemplate",{get:function(){return zh},enumerable:!1,configurable:!0}),l}(),Eh=np.create();Object.assign(Eh,{extension:{name:"batch",type:nt.RendererPlugin}});var ap={accessible:!1,accessibleTitle:null,accessibleHint:null,tabIndex:0,_accessibleActive:!1,_accessibleDiv:null,accessibleType:"button",accessiblePointerEvents:"auto",accessibleChildren:!0,renderId:-1};Rt.mixin(ap);var sp=9,Vn=100,dp=0,hp=0,Bh=2,Qh=1,rp=-1e3,op=-1e3,cp=2,up=function(){function l(e){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,(ve.tablet||ve.phone)&&this.createTouchHook();var t=document.createElement("div");t.style.width=Vn+"px",t.style.height=Vn+"px",t.style.position="absolute",t.style.top=dp+"px",t.style.left=hp+"px",t.style.zIndex=Bh.toString(),this.div=t,this.renderer=e,this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),globalThis.addEventListener("keydown",this._onKeyDown,!1)}return Object.defineProperty(l.prototype,"isActive",{get:function(){return this._isActive},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"isMobileAccessibility",{get:function(){return this._isMobileAccessibility},enumerable:!1,configurable:!0}),l.prototype.createTouchHook=function(){var e=this,t=document.createElement("button");t.style.width=Qh+"px",t.style.height=Qh+"px",t.style.position="absolute",t.style.top=rp+"px",t.style.left=op+"px",t.style.zIndex=cp.toString(),t.style.backgroundColor="#FF0000",t.title="select to enable accessibility for this content",t.addEventListener("focus",function(){e._isMobileAccessibility=!0,e.activate(),e.destroyTouchHook()}),document.body.appendChild(t),this._hookDiv=t},l.prototype.destroyTouchHook=function(){this._hookDiv&&(document.body.removeChild(this._hookDiv),this._hookDiv=null)},l.prototype.activate=function(){var e;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),(e=this.renderer.view.parentNode)===null||e===void 0||e.appendChild(this.div))},l.prototype.deactivate=function(){var e;!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),(e=this.div.parentNode)===null||e===void 0||e.removeChild(this.div))},l.prototype.updateAccessibleObjects=function(e){if(!(!e.visible||!e.accessibleChildren)){e.accessible&&e.interactive&&(e._accessibleActive||this.addChild(e),e.renderId=this.renderId);var t=e.children;if(t)for(var i=0;i<t.length;i++)this.updateAccessibleObjects(t[i])}},l.prototype.update=function(){var e=performance.now();if(!(ve.android.device&&e<this.androidUpdateCount)&&(this.androidUpdateCount=e+this.androidUpdateFrequency,!!this.renderer.renderingToScreen)){this.renderer._lastObjectRendered&&this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),i=t.left,n=t.top,a=t.width,s=t.height,d=this.renderer,h=d.width,r=d.height,o=d.resolution,c=a/h*o,u=s/r*o,m=this.div;m.style.left=i+"px",m.style.top=n+"px",m.style.width=h+"px",m.style.height=r+"px";for(var b=0;b<this.children.length;b++){var Z=this.children[b];if(Z.renderId!==this.renderId)Z._accessibleActive=!1,Ki(this.children,b,1),this.div.removeChild(Z._accessibleDiv),this.pool.push(Z._accessibleDiv),Z._accessibleDiv=null,b--;else{m=Z._accessibleDiv;var p=Z.hitArea,G=Z.worldTransform;Z.hitArea?(m.style.left=(G.tx+p.x*G.a)*c+"px",m.style.top=(G.ty+p.y*G.d)*u+"px",m.style.width=p.width*G.a*c+"px",m.style.height=p.height*G.d*u+"px"):(p=Z.getBounds(),this.capHitArea(p),m.style.left=p.x*c+"px",m.style.top=p.y*u+"px",m.style.width=p.width*c+"px",m.style.height=p.height*u+"px",m.title!==Z.accessibleTitle&&Z.accessibleTitle!==null&&(m.title=Z.accessibleTitle),m.getAttribute("aria-label")!==Z.accessibleHint&&Z.accessibleHint!==null&&m.setAttribute("aria-label",Z.accessibleHint)),(Z.accessibleTitle!==m.title||Z.tabIndex!==m.tabIndex)&&(m.title=Z.accessibleTitle,m.tabIndex=Z.tabIndex,this.debug&&this.updateDebugHTML(m))}}this.renderId++}},l.prototype.updateDebugHTML=function(e){e.innerHTML="type: "+e.type+"</br> title : "+e.title+"</br> tabIndex: "+e.tabIndex},l.prototype.capHitArea=function(e){e.x<0&&(e.width+=e.x,e.x=0),e.y<0&&(e.height+=e.y,e.y=0);var t=this.renderer,i=t.width,n=t.height;e.x+e.width>i&&(e.width=i-e.x),e.y+e.height>n&&(e.height=n-e.y)},l.prototype.addChild=function(e){var t=this.pool.pop();t||(t=document.createElement("button"),t.style.width=Vn+"px",t.style.height=Vn+"px",t.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",t.style.position="absolute",t.style.zIndex=Bh.toString(),t.style.borderStyle="none",navigator.userAgent.toLowerCase().indexOf("chrome")>-1?t.setAttribute("aria-live","off"):t.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?t.setAttribute("aria-relevant","additions"):t.setAttribute("aria-relevant","text"),t.addEventListener("click",this._onClick.bind(this)),t.addEventListener("focus",this._onFocus.bind(this)),t.addEventListener("focusout",this._onFocusOut.bind(this))),t.style.pointerEvents=e.accessiblePointerEvents,t.type=e.accessibleType,e.accessibleTitle&&e.accessibleTitle!==null?t.title=e.accessibleTitle:(!e.accessibleHint||e.accessibleHint===null)&&(t.title="displayObject "+e.tabIndex),e.accessibleHint&&e.accessibleHint!==null&&t.setAttribute("aria-label",e.accessibleHint),this.debug&&this.updateDebugHTML(t),e._accessibleActive=!0,e._accessibleDiv=t,t.displayObject=e,this.children.push(e),this.div.appendChild(e._accessibleDiv),e._accessibleDiv.tabIndex=e.tabIndex},l.prototype._onClick=function(e){var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"click",n),t.dispatchEvent(i,"pointertap",n),t.dispatchEvent(i,"tap",n)},l.prototype._onFocus=function(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","assertive");var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"mouseover",n)},l.prototype._onFocusOut=function(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","polite");var t=this.renderer.plugins.interaction,i=e.target.displayObject,n=t.eventData;t.dispatchEvent(i,"mouseout",n)},l.prototype._onKeyDown=function(e){e.keyCode===sp&&this.activate()},l.prototype._onMouseMove=function(e){e.movementX===0&&e.movementY===0||this.deactivate()},l.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},l.extension={name:"accessibility",type:[nt.RendererPlugin,nt.CanvasRendererPlugin]},l}();var _h=function(){function l(){this.pressure=0,this.rotationAngle=0,this.twist=0,this.tangentialPressure=0,this.global=new _,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(l.prototype,"pointerId",{get:function(){return this.identifier},enumerable:!1,configurable:!0}),l.prototype.getLocalPosition=function(e,t,i){return e.worldTransform.applyInverse(i||this.global,t)},l.prototype.copyEvent=function(e){"isPrimary"in e&&e.isPrimary&&(this.isPrimary=!0),this.button="button"in e&&e.button;var t="buttons"in e&&e.buttons;this.buttons=Number.isInteger(t)?t:"which"in e&&e.which,this.width="width"in e&&e.width,this.height="height"in e&&e.height,this.tiltX="tiltX"in e&&e.tiltX,this.tiltY="tiltY"in e&&e.tiltY,this.pointerType="pointerType"in e&&e.pointerType,this.pressure="pressure"in e&&e.pressure,this.rotationAngle="rotationAngle"in e&&e.rotationAngle,this.twist="twist"in e&&e.twist||0,this.tangentialPressure="tangentialPressure"in e&&e.tangentialPressure||0},l.prototype.reset=function(){this.isPrimary=!1},l}();var ja=function(l,e){return ja=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},ja(l,e)};function mp(l,e){ja(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Zp=function(){function l(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.target=null,this.currentTarget=null,this.type=null,this.data=null}return l.prototype.stopPropagation=function(){this.stopped=!0,this.stopPropagationHint=!0,this.stopsPropagatingAt=this.currentTarget},l.prototype.reset=function(){this.stopped=!1,this.stopsPropagatingAt=null,this.stopPropagationHint=!1,this.currentTarget=null,this.target=null},l}(),Da=function(){function l(e){this._pointerId=e,this._flags=l.FLAGS.NONE}return l.prototype._doSet=function(e,t){t?this._flags=this._flags|e:this._flags=this._flags&~e},Object.defineProperty(l.prototype,"pointerId",{get:function(){return this._pointerId},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"flags",{get:function(){return this._flags},set:function(e){this._flags=e},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"none",{get:function(){return this._flags===l.FLAGS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"over",{get:function(){return(this._flags&l.FLAGS.OVER)!==0},set:function(e){this._doSet(l.FLAGS.OVER,e)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"rightDown",{get:function(){return(this._flags&l.FLAGS.RIGHT_DOWN)!==0},set:function(e){this._doSet(l.FLAGS.RIGHT_DOWN,e)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"leftDown",{get:function(){return(this._flags&l.FLAGS.LEFT_DOWN)!==0},set:function(e){this._doSet(l.FLAGS.LEFT_DOWN,e)},enumerable:!1,configurable:!0}),l.FLAGS=Object.freeze({NONE:0,OVER:1<<0,LEFT_DOWN:1<<1,RIGHT_DOWN:1<<2}),l}(),bp=function(){function l(){this._tempPoint=new _}return l.prototype.recursiveFindHit=function(e,t,i,n,a){var s;if(!t||!t.visible)return!1;var d=e.data.global;a=t.interactive||a;var h=!1,r=a,o=!0;if(t.hitArea)n&&(t.worldTransform.applyInverse(d,this._tempPoint),t.hitArea.contains(this._tempPoint.x,this._tempPoint.y)?h=!0:(n=!1,o=!1)),r=!1;else if(t._mask&&n){var c=t._mask.isMaskData?t._mask.maskObject:t._mask;c&&!(!((s=c.containsPoint)===null||s===void 0)&&s.call(c,d))&&(n=!1)}if(o&&t.interactiveChildren&&t.children)for(var u=t.children,m=u.length-1;m>=0;m--){var b=u[m],Z=this.recursiveFindHit(e,b,i,n,r);if(Z){if(!b.parent)continue;r=!1,Z&&(e.target&&(n=!1),h=!0)}}return a&&(n&&!e.target&&!t.hitArea&&t.containsPoint&&t.containsPoint(d)&&(h=!0),t.interactive&&(h&&!e.target&&(e.target=t),i&&i(e,t,!!h))),h},l.prototype.findHit=function(e,t,i,n){this.recursiveFindHit(e,t,i,n,!1)},l}(),pp={interactive:!1,interactiveChildren:!0,hitArea:null,get buttonMode(){return this.cursor==="pointer"},set buttonMode(l){l?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};Rt.mixin(pp);var Rn=1,Wn={target:null,data:{global:null}},Gp=function(l){mp(e,l);function e(t,i){var n=l.call(this)||this;return i=i||{},n.renderer=t,n.autoPreventDefault=i.autoPreventDefault!==void 0?i.autoPreventDefault:!0,n.interactionFrequency=i.interactionFrequency||10,n.mouse=new _h,n.mouse.identifier=Rn,n.mouse.global.set(-999999),n.activeInteractionData={},n.activeInteractionData[Rn]=n.mouse,n.interactionDataPool=[],n.eventData=new Zp,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 bp,n._tempDisplayObject=new Zh,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(e.prototype,"useSystemTicker",{get:function(){return this._useSystemTicker},set:function(t){this._useSystemTicker=t,t?this.addTickerListener():this.removeTickerListener()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastObjectRendered",{get:function(){return this.renderer._lastObjectRendered||this._tempDisplayObject},enumerable:!1,configurable:!0}),e.prototype.hitTest=function(t,i){return Wn.target=null,Wn.data.global=t,i||(i=this.lastObjectRendered),this.processInteractive(Wn,i,null,!0),Wn.target},e.prototype.setTargetElement=function(t,i){i===void 0&&(i=1),this.removeTickerListener(),this.removeEvents(),this.interactionDOMElement=t,this.resolution=i,this.addEvents(),this.addTickerListener()},e.prototype.addTickerListener=function(){this.tickerAdded||!this.interactionDOMElement||!this._useSystemTicker||(Jt.system.add(this.tickerUpdate,this,le.INTERACTION),this.tickerAdded=!0)},e.prototype.removeTickerListener=function(){this.tickerAdded&&(Jt.system.remove(this.tickerUpdate,this),this.tickerAdded=!1)},e.prototype.addEvents=function(){if(!(this.eventsAdded||!this.interactionDOMElement)){var t=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(t.msContentZooming="none",t.msTouchAction="none"):this.supportsPointerEvents&&(t.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}},e.prototype.removeEvents=function(){if(!(!this.eventsAdded||!this.interactionDOMElement)){var t=this.interactionDOMElement.style;globalThis.navigator.msPointerEnabled?(t.msContentZooming="",t.msTouchAction=""):this.supportsPointerEvents&&(t.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}},e.prototype.tickerUpdate=function(t){this._deltaTime+=t,!(this._deltaTime<this.interactionFrequency)&&(this._deltaTime=0,this.update())},e.prototype.update=function(){if(this.interactionDOMElement){if(this._didMove){this._didMove=!1;return}this.cursor=null;for(var t in this.activeInteractionData)if(this.activeInteractionData.hasOwnProperty(t)){var i=this.activeInteractionData[t];if(i.originalEvent&&i.pointerType!=="touch"){var n=this.configureInteractionEventForDOMEvent(this.eventData,i.originalEvent,i);this.processInteractive(n,this.lastObjectRendered,this.processPointerOverOut,!0)}}this.setCursorMode(this.cursor)}},e.prototype.setCursorMode=function(t){t=t||"default";var i=!0;if(globalThis.OffscreenCanvas&&this.interactionDOMElement instanceof OffscreenCanvas&&(i=!1),this.currentCursorMode!==t){this.currentCursorMode=t;var n=this.cursorStyles[t];if(n)switch(typeof n){case"string":i&&(this.interactionDOMElement.style.cursor=n);break;case"function":n(t);break;case"object":i&&Object.assign(this.interactionDOMElement.style,n);break}else i&&typeof t=="string"&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,t)&&(this.interactionDOMElement.style.cursor=t)}},e.prototype.dispatchEvent=function(t,i,n){(!n.stopPropagationHint||t===n.stopsPropagatingAt)&&(n.currentTarget=t,n.type=i,t.emit(i,n),t[i]&&t[i](n))},e.prototype.delayDispatchEvent=function(t,i,n){this.delayedEvents.push({displayObject:t,eventString:i,eventData:n})},e.prototype.mapPositionToPoint=function(t,i,n){var a;this.interactionDOMElement.parentElement?a=this.interactionDOMElement.getBoundingClientRect():a={x:0,y:0,width:this.interactionDOMElement.width,height:this.interactionDOMElement.height,left:0,top:0};var s=1/this.resolution;t.x=(i-a.left)*(this.interactionDOMElement.width/a.width)*s,t.y=(n-a.top)*(this.interactionDOMElement.height/a.height)*s},e.prototype.processInteractive=function(t,i,n,a){var s=this.search.findHit(t,i,n,a),d=this.delayedEvents;if(!d.length)return s;t.stopPropagationHint=!1;var h=d.length;this.delayedEvents=[];for(var r=0;r<h;r++){var o=d[r],c=o.displayObject,u=o.eventString,m=o.eventData;m.stopsPropagatingAt===c&&(m.stopPropagationHint=!0),this.dispatchEvent(c,u,m)}return s},e.prototype.onPointerDown=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t);if(this.autoPreventDefault&&i[0].isNormalized){var n=t.cancelable||!("cancelable"in t);n&&t.preventDefault()}for(var a=i.length,s=0;s<a;s++){var d=i[s],h=this.getInteractionDataForPointerId(d),r=this.configureInteractionEventForDOMEvent(this.eventData,d,h);if(r.data.originalEvent=t,this.processInteractive(r,this.lastObjectRendered,this.processPointerDown,!0),this.emit("pointerdown",r),d.pointerType==="touch")this.emit("touchstart",r);else if(d.pointerType==="mouse"||d.pointerType==="pen"){var o=d.button===2;this.emit(o?"rightdown":"mousedown",this.eventData)}}}},e.prototype.processPointerDown=function(t,i,n){var a=t.data,s=t.data.identifier;if(n){if(i.trackedPointers[s]||(i.trackedPointers[s]=new Da(s)),this.dispatchEvent(i,"pointerdown",t),a.pointerType==="touch")this.dispatchEvent(i,"touchstart",t);else if(a.pointerType==="mouse"||a.pointerType==="pen"){var d=a.button===2;d?i.trackedPointers[s].rightDown=!0:i.trackedPointers[s].leftDown=!0,this.dispatchEvent(i,d?"rightdown":"mousedown",t)}}},e.prototype.onPointerComplete=function(t,i,n){var a=this.normalizeToPointerData(t),s=a.length,d=t.target;t.composedPath&&t.composedPath().length>0&&(d=t.composedPath()[0]);for(var h=d!==this.interactionDOMElement?"outside":"",r=0;r<s;r++){var o=a[r],c=this.getInteractionDataForPointerId(o),u=this.configureInteractionEventForDOMEvent(this.eventData,o,c);if(u.data.originalEvent=t,this.processInteractive(u,this.lastObjectRendered,n,i||!h),this.emit(i?"pointercancel":"pointerup"+h,u),o.pointerType==="mouse"||o.pointerType==="pen"){var m=o.button===2;this.emit(m?"rightup"+h:"mouseup"+h,u)}else o.pointerType==="touch"&&(this.emit(i?"touchcancel":"touchend"+h,u),this.releaseInteractionDataForPointerId(o.pointerId))}},e.prototype.onPointerCancel=function(t){this.supportsTouchEvents&&t.pointerType==="touch"||this.onPointerComplete(t,!0,this.processPointerCancel)},e.prototype.processPointerCancel=function(t,i){var n=t.data,a=t.data.identifier;i.trackedPointers[a]!==void 0&&(delete i.trackedPointers[a],this.dispatchEvent(i,"pointercancel",t),n.pointerType==="touch"&&this.dispatchEvent(i,"touchcancel",t))},e.prototype.onPointerUp=function(t){this.supportsTouchEvents&&t.pointerType==="touch"||this.onPointerComplete(t,!1,this.processPointerUp)},e.prototype.processPointerUp=function(t,i,n){var a=t.data,s=t.data.identifier,d=i.trackedPointers[s],h=a.pointerType==="touch",r=a.pointerType==="mouse"||a.pointerType==="pen",o=!1;if(r){var c=a.button===2,u=Da.FLAGS,m=c?u.RIGHT_DOWN:u.LEFT_DOWN,b=d!==void 0&&d.flags&m;n?(this.dispatchEvent(i,c?"rightup":"mouseup",t),b&&(this.dispatchEvent(i,c?"rightclick":"click",t),o=!0)):b&&this.dispatchEvent(i,c?"rightupoutside":"mouseupoutside",t),d&&(c?d.rightDown=!1:d.leftDown=!1)}n?(this.dispatchEvent(i,"pointerup",t),h&&this.dispatchEvent(i,"touchend",t),d&&((!r||o)&&this.dispatchEvent(i,"pointertap",t),h&&(this.dispatchEvent(i,"tap",t),d.over=!1))):d&&(this.dispatchEvent(i,"pointerupoutside",t),h&&this.dispatchEvent(i,"touchendoutside",t)),d&&d.none&&delete i.trackedPointers[s]},e.prototype.onPointerMove=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t);(i[0].pointerType==="mouse"||i[0].pointerType==="pen")&&(this._didMove=!0,this.cursor=null);for(var n=i.length,a=0;a<n;a++){var s=i[a],d=this.getInteractionDataForPointerId(s),h=this.configureInteractionEventForDOMEvent(this.eventData,s,d);h.data.originalEvent=t,this.processInteractive(h,this.lastObjectRendered,this.processPointerMove,!0),this.emit("pointermove",h),s.pointerType==="touch"&&this.emit("touchmove",h),(s.pointerType==="mouse"||s.pointerType==="pen")&&this.emit("mousemove",h)}i[0].pointerType==="mouse"&&this.setCursorMode(this.cursor)}},e.prototype.processPointerMove=function(t,i,n){var a=t.data,s=a.pointerType==="touch",d=a.pointerType==="mouse"||a.pointerType==="pen";d&&this.processPointerOverOut(t,i,n),(!this.moveWhenInside||n)&&(this.dispatchEvent(i,"pointermove",t),s&&this.dispatchEvent(i,"touchmove",t),d&&this.dispatchEvent(i,"mousemove",t))},e.prototype.onPointerOut=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t),n=i[0];n.pointerType==="mouse"&&(this.mouseOverRenderer=!1,this.setCursorMode(null));var a=this.getInteractionDataForPointerId(n),s=this.configureInteractionEventForDOMEvent(this.eventData,n,a);s.data.originalEvent=n,this.processInteractive(s,this.lastObjectRendered,this.processPointerOverOut,!1),this.emit("pointerout",s),n.pointerType==="mouse"||n.pointerType==="pen"?this.emit("mouseout",s):this.releaseInteractionDataForPointerId(a.identifier)}},e.prototype.processPointerOverOut=function(t,i,n){var a=t.data,s=t.data.identifier,d=a.pointerType==="mouse"||a.pointerType==="pen",h=i.trackedPointers[s];n&&!h&&(h=i.trackedPointers[s]=new Da(s)),h!==void 0&&(n&&this.mouseOverRenderer?(h.over||(h.over=!0,this.delayDispatchEvent(i,"pointerover",t),d&&this.delayDispatchEvent(i,"mouseover",t)),d&&this.cursor===null&&(this.cursor=i.cursor)):h.over&&(h.over=!1,this.dispatchEvent(i,"pointerout",this.eventData),d&&this.dispatchEvent(i,"mouseout",t),h.none&&delete i.trackedPointers[s]))},e.prototype.onPointerOver=function(t){if(!(this.supportsTouchEvents&&t.pointerType==="touch")){var i=this.normalizeToPointerData(t),n=i[0],a=this.getInteractionDataForPointerId(n),s=this.configureInteractionEventForDOMEvent(this.eventData,n,a);s.data.originalEvent=n,n.pointerType==="mouse"&&(this.mouseOverRenderer=!0),this.emit("pointerover",s),(n.pointerType==="mouse"||n.pointerType==="pen")&&this.emit("mouseover",s)}},e.prototype.getInteractionDataForPointerId=function(t){var i=t.pointerId,n;return i===Rn||t.pointerType==="mouse"?n=this.mouse:this.activeInteractionData[i]?n=this.activeInteractionData[i]:(n=this.interactionDataPool.pop()||new _h,n.identifier=i,this.activeInteractionData[i]=n),n.copyEvent(t),n},e.prototype.releaseInteractionDataForPointerId=function(t){var i=this.activeInteractionData[t];i&&(delete this.activeInteractionData[t],i.reset(),this.interactionDataPool.push(i))},e.prototype.configureInteractionEventForDOMEvent=function(t,i,n){return t.data=n,this.mapPositionToPoint(n.global,i.clientX,i.clientY),i.pointerType==="touch"&&(i.globalX=n.global.x,i.globalY=n.global.y),n.originalEvent=i,t.reset(),t},e.prototype.normalizeToPointerData=function(t){var i=[];if(this.supportsTouchEvents&&t instanceof TouchEvent)for(var n=0,a=t.changedTouches.length;n<a;n++){var s=t.changedTouches[n];typeof s.button>"u"&&(s.button=t.touches.length?1:0),typeof s.buttons>"u"&&(s.buttons=t.touches.length?1:0),typeof s.isPrimary>"u"&&(s.isPrimary=t.touches.length===1&&t.type==="touchstart"),typeof s.width>"u"&&(s.width=s.radiusX||1),typeof s.height>"u"&&(s.height=s.radiusY||1),typeof s.tiltX>"u"&&(s.tiltX=0),typeof s.tiltY>"u"&&(s.tiltY=0),typeof s.pointerType>"u"&&(s.pointerType="touch"),typeof s.pointerId>"u"&&(s.pointerId=s.identifier||0),typeof s.pressure>"u"&&(s.pressure=s.force||.5),typeof s.twist>"u"&&(s.twist=0),typeof s.tangentialPressure>"u"&&(s.tangentialPressure=0),typeof s.layerX>"u"&&(s.layerX=s.offsetX=s.clientX),typeof s.layerY>"u"&&(s.layerY=s.offsetY=s.clientY),s.isNormalized=!0,i.push(s)}else if(!globalThis.MouseEvent||t instanceof MouseEvent&&(!this.supportsPointerEvents||!(t instanceof globalThis.PointerEvent))){var d=t;typeof d.isPrimary>"u"&&(d.isPrimary=!0),typeof d.width>"u"&&(d.width=1),typeof d.height>"u"&&(d.height=1),typeof d.tiltX>"u"&&(d.tiltX=0),typeof d.tiltY>"u"&&(d.tiltY=0),typeof d.pointerType>"u"&&(d.pointerType="mouse"),typeof d.pointerId>"u"&&(d.pointerId=Rn),typeof d.pressure>"u"&&(d.pressure=.5),typeof d.twist>"u"&&(d.twist=0),typeof d.tangentialPressure>"u"&&(d.tangentialPressure=0),d.isNormalized=!0,i.push(d)}else i.push(t);return i},e.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},e.extension={name:"interaction",type:[nt.RendererPlugin,nt.CanvasRendererPlugin]},e}(ol);var jh=new j,Dh=4,Xp=function(){function l(e){this.renderer=e}return l.prototype.image=function(e,t,i){var n=new Image;return n.src=this.base64(e,t,i),n},l.prototype.base64=function(e,t,i){return this.canvas(e).toDataURL(t,i)},l.prototype.canvas=function(e,t){var i=this.renderer,n,a=!1,s,d=!1;e&&(e instanceof Xi?s=e:(s=this.renderer.generateTexture(e),d=!0)),s?(n=s.baseTexture.resolution,t=t??s.frame,a=!1,i.renderTexture.bind(s)):(n=i.resolution,t||(t=jh,t.width=i.width,t.height=i.height),a=!0,i.renderTexture.bind(null));var h=Math.round(t.width*n),r=Math.round(t.height*n),o=new mh(h,r,1),c=new Uint8Array(Dh*h*r),u=i.gl;u.readPixels(Math.round(t.x*n),Math.round(t.y*n),h,r,u.RGBA,u.UNSIGNED_BYTE,c);var m=o.context.getImageData(0,0,h,r);if(l.arrayPostDivide(c,m.data),o.context.putImageData(m,0,0),a){var b=new mh(o.width,o.height,1);b.context.scale(1,-1),b.context.drawImage(o.canvas,0,-r),o.destroy(),o=b}return d&&s.destroy(!0),o.canvas},l.prototype.pixels=function(e,t){var i=this.renderer,n,a,s=!1;e&&(e instanceof Xi?a=e:(a=this.renderer.generateTexture(e),s=!0)),a?(n=a.baseTexture.resolution,t=t??a.frame,i.renderTexture.bind(a)):(n=i.resolution,t||(t=jh,t.width=i.width,t.height=i.height),i.renderTexture.bind(null));var d=Math.round(t.width*n),h=Math.round(t.height*n),r=new Uint8Array(Dh*d*h),o=i.gl;return o.readPixels(Math.round(t.x*n),Math.round(t.y*n),d,h,o.RGBA,o.UNSIGNED_BYTE,r),s&&a.destroy(!0),l.arrayPostDivide(r,r),r},l.prototype.destroy=function(){this.renderer=null},l.arrayPostDivide=function(e,t){for(var i=0;i<e.length;i+=4){var n=t[i+3]=e[i+3];n!==0?(t[i]=Math.round(Math.min(e[i]*255/n,255)),t[i+1]=Math.round(Math.min(e[i+1]*255/n,255)),t[i+2]=Math.round(Math.min(e[i+2]*255/n,255))):(t[i]=e[i],t[i+1]=e[i+1],t[i+2]=e[i+2])}},l.extension={name:"extract",type:nt.RendererPlugin},l}();var fn=function(){function l(e,t,i){t===void 0&&(t=!1),this._fn=e,this._once=t,this._thisArg=i,this._next=this._prev=this._owner=null}return l.prototype.detach=function(){return this._owner===null?!1:(this._owner.detach(this),!0)},l}();function Oh(l,e){return l._head?(l._tail._next=e,e._prev=l._tail,l._tail=e):(l._head=e,l._tail=e),e._owner=l,e}var Ne=function(){function l(){this._head=this._tail=void 0}return l.prototype.handlers=function(e){e===void 0&&(e=!1);var t=this._head;if(e)return!!t;for(var i=[];t;)i.push(t),t=t._next;return i},l.prototype.has=function(e){if(!(e instanceof fn))throw new Error("MiniSignal#has(): First arg must be a SignalBinding object.");return e._owner===this},l.prototype.dispatch=function(){for(var e=arguments,t=[],i=0;i<arguments.length;i++)t[i]=e[i];var n=this._head;if(!n)return!1;for(;n;)n._once&&this.detach(n),n._fn.apply(n._thisArg,t),n=n._next;return!0},l.prototype.add=function(e,t){if(t===void 0&&(t=null),typeof e!="function")throw new Error("MiniSignal#add(): First arg must be a Function.");return Oh(this,new fn(e,!1,t))},l.prototype.once=function(e,t){if(t===void 0&&(t=null),typeof e!="function")throw new Error("MiniSignal#once(): First arg must be a Function.");return Oh(this,new fn(e,!0,t))},l.prototype.detach=function(e){if(!(e instanceof fn))throw new Error("MiniSignal#detach(): First arg must be a SignalBinding object.");return e._owner!==this?this:(e._prev&&(e._prev._next=e._next),e._next&&(e._next._prev=e._prev),e===this._head?(this._head=e._next,e._next===null&&(this._tail=null)):e===this._tail&&(this._tail=e._prev,this._tail._next=null),e._owner=null,this)},l.prototype.detachAll=function(){var e=this._head;if(!e)return this;for(this._head=this._tail=null;e;)e._owner=null,e=e._next;return this},l}();function Ah(l,e){e=e||{};for(var t={key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},i=t.parser[e.strictMode?"strict":"loose"].exec(l),n={},a=14;a--;)n[t.key[a]]=i[a]||"";return n[t.q.name]={},n[t.key[12]].replace(t.q.parser,function(s,d,h){d&&(n[t.q.name][d]=h)}),n}var Oa,Ln=null,yp=0,qh=200,Vp=204,Rp=1223,Wp=2;function $h(){}function tr(l,e,t){e&&e.indexOf(".")===0&&(e=e.substring(1)),e&&(l[e]=t)}function Aa(l){return l.toString().replace("object ","")}var yt=function(){function l(e,t,i){if(this._dequeue=$h,this._onLoadBinding=null,this._elementTimer=0,this._boundComplete=null,this._boundOnError=null,this._boundOnProgress=null,this._boundOnTimeout=null,this._boundXhrOnError=null,this._boundXhrOnTimeout=null,this._boundXhrOnAbort=null,this._boundXhrOnLoad=null,typeof e!="string"||typeof t!="string")throw new Error("Both name and url are required for constructing a resource.");i=i||{},this._flags=0,this._setFlag(l.STATUS_FLAGS.DATA_URL,t.indexOf("data:")===0),this.name=e,this.url=t,this.extension=this._getExtension(),this.data=null,this.crossOrigin=i.crossOrigin===!0?"anonymous":i.crossOrigin,this.timeout=i.timeout||0,this.loadType=i.loadType||this._determineLoadType(),this.xhrType=i.xhrType,this.metadata=i.metadata||{},this.error=null,this.xhr=null,this.children=[],this.type=l.TYPE.UNKNOWN,this.progressChunk=0,this._dequeue=$h,this._onLoadBinding=null,this._elementTimer=0,this._boundComplete=this.complete.bind(this),this._boundOnError=this._onError.bind(this),this._boundOnProgress=this._onProgress.bind(this),this._boundOnTimeout=this._onTimeout.bind(this),this._boundXhrOnError=this._xhrOnError.bind(this),this._boundXhrOnTimeout=this._xhrOnTimeout.bind(this),this._boundXhrOnAbort=this._xhrOnAbort.bind(this),this._boundXhrOnLoad=this._xhrOnLoad.bind(this),this.onStart=new Ne,this.onProgress=new Ne,this.onComplete=new Ne,this.onAfterMiddleware=new Ne}return l.setExtensionLoadType=function(e,t){tr(l._loadTypeMap,e,t)},l.setExtensionXhrType=function(e,t){tr(l._xhrTypeMap,e,t)},Object.defineProperty(l.prototype,"isDataUrl",{get:function(){return this._hasFlag(l.STATUS_FLAGS.DATA_URL)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"isComplete",{get:function(){return this._hasFlag(l.STATUS_FLAGS.COMPLETE)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"isLoading",{get:function(){return this._hasFlag(l.STATUS_FLAGS.LOADING)},enumerable:!1,configurable:!0}),l.prototype.complete=function(){this._clearEvents(),this._finish()},l.prototype.abort=function(e){if(!this.error){if(this.error=new Error(e),this._clearEvents(),this.xhr)this.xhr.abort();else if(this.xdr)this.xdr.abort();else if(this.data)if(this.data.src)this.data.src=l.EMPTY_GIF;else for(;this.data.firstChild;)this.data.removeChild(this.data.firstChild);this._finish()}},l.prototype.load=function(e){var t=this;if(!this.isLoading){if(this.isComplete){e&&setTimeout(function(){return e(t)},1);return}else e&&this.onComplete.once(e);switch(this._setFlag(l.STATUS_FLAGS.LOADING,!0),this.onStart.dispatch(this),(this.crossOrigin===!1||typeof this.crossOrigin!="string")&&(this.crossOrigin=this._determineCrossOrigin(this.url)),this.loadType){case l.LOAD_TYPE.IMAGE:this.type=l.TYPE.IMAGE,this._loadElement("image");break;case l.LOAD_TYPE.AUDIO:this.type=l.TYPE.AUDIO,this._loadSourceElement("audio");break;case l.LOAD_TYPE.VIDEO:this.type=l.TYPE.VIDEO,this._loadSourceElement("video");break;case l.LOAD_TYPE.XHR:default:typeof Oa>"u"&&(Oa=!!(globalThis.XDomainRequest&&!("withCredentials"in new XMLHttpRequest))),Oa&&this.crossOrigin?this._loadXdr():this._loadXhr();break}}},l.prototype._hasFlag=function(e){return(this._flags&e)!==0},l.prototype._setFlag=function(e,t){this._flags=t?this._flags|e:this._flags&~e},l.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))},l.prototype._finish=function(){if(this.isComplete)throw new Error("Complete called again for an already completed resource.");this._setFlag(l.STATUS_FLAGS.COMPLETE,!0),this._setFlag(l.STATUS_FLAGS.LOADING,!1),this.onComplete.dispatch(this)},l.prototype._loadElement=function(e){this.metadata.loadElement?this.data=this.metadata.loadElement:e==="image"&&typeof globalThis.Image<"u"?this.data=new Image:this.data=document.createElement(e),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))},l.prototype._loadSourceElement=function(e){if(this.metadata.loadElement?this.data=this.metadata.loadElement:e==="audio"&&typeof globalThis.Audio<"u"?this.data=new Audio:this.data=document.createElement(e),this.data===null){this.abort("Unsupported element: "+e);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 t=this.metadata.mimeType,i=0;i<this.url.length;++i)this.data.appendChild(this._createSource(e,this.url[i],Array.isArray(t)?t[i]:t));else{var t=this.metadata.mimeType;this.data.appendChild(this._createSource(e,this.url,Array.isArray(t)?t[0]:t))}this.data.addEventListener("error",this._boundOnError,!1),this.data.addEventListener("load",this._boundComplete,!1),this.data.addEventListener("progress",this._boundOnProgress,!1),this.data.addEventListener("canplaythrough",this._boundComplete,!1),this.data.load(),this.timeout&&(this._elementTimer=setTimeout(this._boundOnTimeout,this.timeout))},l.prototype._loadXhr=function(){typeof this.xhrType!="string"&&(this.xhrType=this._determineXhrType());var e=this.xhr=new XMLHttpRequest;this.crossOrigin==="use-credentials"&&(e.withCredentials=!0),e.open("GET",this.url,!0),e.timeout=this.timeout,this.xhrType===l.XHR_RESPONSE_TYPE.JSON||this.xhrType===l.XHR_RESPONSE_TYPE.DOCUMENT?e.responseType=l.XHR_RESPONSE_TYPE.TEXT:e.responseType=this.xhrType,e.addEventListener("error",this._boundXhrOnError,!1),e.addEventListener("timeout",this._boundXhrOnTimeout,!1),e.addEventListener("abort",this._boundXhrOnAbort,!1),e.addEventListener("progress",this._boundOnProgress,!1),e.addEventListener("load",this._boundXhrOnLoad,!1),e.send()},l.prototype._loadXdr=function(){typeof this.xhrType!="string"&&(this.xhrType=this._determineXhrType());var e=this.xhr=new globalThis.XDomainRequest;e.timeout=this.timeout||5e3,e.onerror=this._boundXhrOnError,e.ontimeout=this._boundXhrOnTimeout,e.onprogress=this._boundOnProgress,e.onload=this._boundXhrOnLoad,e.open("GET",this.url,!0),setTimeout(function(){return e.send()},1)},l.prototype._createSource=function(e,t,i){i||(i=e+"/"+this._getExtension(t));var n=document.createElement("source");return n.src=t,n.type=i,n},l.prototype._onError=function(e){this.abort("Failed to load element using: "+e.target.nodeName)},l.prototype._onProgress=function(e){e&&e.lengthComputable&&this.onProgress.dispatch(this,e.loaded/e.total)},l.prototype._onTimeout=function(){this.abort("Load timed out.")},l.prototype._xhrOnError=function(){var e=this.xhr;this.abort(Aa(e)+" Request failed. Status: "+e.status+', text: "'+e.statusText+'"')},l.prototype._xhrOnTimeout=function(){var e=this.xhr;this.abort(Aa(e)+" Request timed out.")},l.prototype._xhrOnAbort=function(){var e=this.xhr;this.abort(Aa(e)+" Request was aborted by the user.")},l.prototype._xhrOnLoad=function(){var e=this.xhr,t="",i=typeof e.status>"u"?qh:e.status;(e.responseType===""||e.responseType==="text"||typeof e.responseType>"u")&&(t=e.responseText),i===yp&&(t.length>0||e.responseType===l.XHR_RESPONSE_TYPE.BUFFER)?i=qh:i===Rp&&(i=Vp);var n=i/100|0;if(n===Wp)if(this.xhrType===l.XHR_RESPONSE_TYPE.TEXT)this.data=t,this.type=l.TYPE.TEXT;else if(this.xhrType===l.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t),this.type=l.TYPE.JSON}catch(d){this.abort("Error trying to parse loaded json: "+d);return}else if(this.xhrType===l.XHR_RESPONSE_TYPE.DOCUMENT)try{if(globalThis.DOMParser){var a=new DOMParser;this.data=a.parseFromString(t,"text/xml")}else{var s=document.createElement("div");s.innerHTML=t,this.data=s}this.type=l.TYPE.XML}catch(d){this.abort("Error trying to parse loaded xml: "+d);return}else this.data=e.response||t;else{this.abort("["+e.status+"] "+e.statusText+": "+e.responseURL);return}this.complete()},l.prototype._determineCrossOrigin=function(e,t){if(e.indexOf("data:")===0)return"";if(globalThis.origin!==globalThis.location.origin)return"anonymous";t=t||globalThis.location,Ln||(Ln=document.createElement("a")),Ln.href=e;var i=Ah(Ln.href,{strictMode:!0}),n=!i.port&&t.port===""||i.port===t.port,a=i.protocol?i.protocol+":":"";return i.host!==t.hostname||!n||a!==t.protocol?"anonymous":""},l.prototype._determineXhrType=function(){return l._xhrTypeMap[this.extension]||l.XHR_RESPONSE_TYPE.TEXT},l.prototype._determineLoadType=function(){return l._loadTypeMap[this.extension]||l.LOAD_TYPE.XHR},l.prototype._getExtension=function(e){e===void 0&&(e=this.url);var t="";if(this.isDataUrl){var i=e.indexOf("/");t=e.substring(i+1,e.indexOf(";",i))}else{var n=e.indexOf("?"),a=e.indexOf("#"),s=Math.min(n>-1?n:e.length,a>-1?a:e.length);e=e.substring(0,s),t=e.substring(e.lastIndexOf(".")+1)}return t.toLowerCase()},l.prototype._getMimeFromXhrType=function(e){switch(e){case l.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case l.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case l.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case l.XHR_RESPONSE_TYPE.JSON:return"application/json";case l.XHR_RESPONSE_TYPE.DEFAULT:case l.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},l}();(function(l){(function(e){e[e.NONE=0]="NONE",e[e.DATA_URL=1]="DATA_URL",e[e.COMPLETE=2]="COMPLETE",e[e.LOADING=4]="LOADING"})(l.STATUS_FLAGS||(l.STATUS_FLAGS={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.JSON=1]="JSON",e[e.XML=2]="XML",e[e.IMAGE=3]="IMAGE",e[e.AUDIO=4]="AUDIO",e[e.VIDEO=5]="VIDEO",e[e.TEXT=6]="TEXT"}(l.TYPE||(l.TYPE={})),function(e){e[e.XHR=1]="XHR",e[e.IMAGE=2]="IMAGE",e[e.AUDIO=3]="AUDIO",e[e.VIDEO=4]="VIDEO"}(l.LOAD_TYPE||(l.LOAD_TYPE={})),function(e){e.DEFAULT="text",e.BUFFER="arraybuffer",e.BLOB="blob",e.DOCUMENT="document",e.JSON="json",e.TEXT="text"}(l.XHR_RESPONSE_TYPE||(l.XHR_RESPONSE_TYPE={})),l._loadTypeMap={gif:l.LOAD_TYPE.IMAGE,png:l.LOAD_TYPE.IMAGE,bmp:l.LOAD_TYPE.IMAGE,jpg:l.LOAD_TYPE.IMAGE,jpeg:l.LOAD_TYPE.IMAGE,tif:l.LOAD_TYPE.IMAGE,tiff:l.LOAD_TYPE.IMAGE,webp:l.LOAD_TYPE.IMAGE,tga:l.LOAD_TYPE.IMAGE,avif:l.LOAD_TYPE.IMAGE,svg:l.LOAD_TYPE.IMAGE,"svg+xml":l.LOAD_TYPE.IMAGE,mp3:l.LOAD_TYPE.AUDIO,ogg:l.LOAD_TYPE.AUDIO,wav:l.LOAD_TYPE.AUDIO,mp4:l.LOAD_TYPE.VIDEO,webm:l.LOAD_TYPE.VIDEO},l._xhrTypeMap={xhtml:l.XHR_RESPONSE_TYPE.DOCUMENT,html:l.XHR_RESPONSE_TYPE.DOCUMENT,htm:l.XHR_RESPONSE_TYPE.DOCUMENT,xml:l.XHR_RESPONSE_TYPE.DOCUMENT,tmx:l.XHR_RESPONSE_TYPE.DOCUMENT,svg:l.XHR_RESPONSE_TYPE.DOCUMENT,tsx:l.XHR_RESPONSE_TYPE.DOCUMENT,gif:l.XHR_RESPONSE_TYPE.BLOB,png:l.XHR_RESPONSE_TYPE.BLOB,bmp:l.XHR_RESPONSE_TYPE.BLOB,jpg:l.XHR_RESPONSE_TYPE.BLOB,jpeg:l.XHR_RESPONSE_TYPE.BLOB,tif:l.XHR_RESPONSE_TYPE.BLOB,tiff:l.XHR_RESPONSE_TYPE.BLOB,webp:l.XHR_RESPONSE_TYPE.BLOB,tga:l.XHR_RESPONSE_TYPE.BLOB,avif:l.XHR_RESPONSE_TYPE.BLOB,json:l.XHR_RESPONSE_TYPE.JSON,text:l.XHR_RESPONSE_TYPE.TEXT,txt:l.XHR_RESPONSE_TYPE.TEXT,ttf:l.XHR_RESPONSE_TYPE.BUFFER,otf:l.XHR_RESPONSE_TYPE.BUFFER},l.EMPTY_GIF="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="})(yt||(yt={}));function Wi(){}function fp(l){return function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];if(l===null)throw new Error("Callback was already called.");var a=l;l=null,a.apply(this,i)}}var Lp=function(){function l(e,t){this.data=e,this.callback=t}return l}(),qa=function(){function l(e,t){var i=this;if(t===void 0&&(t=1),this.workers=0,this.saturated=Wi,this.unsaturated=Wi,this.empty=Wi,this.drain=Wi,this.error=Wi,this.started=!1,this.paused=!1,this._tasks=[],this._insert=function(n,a,s){if(s&&typeof s!="function")throw new Error("task callback must be a function");if(i.started=!0,n==null&&i.idle()){setTimeout(function(){return i.drain()},1);return}var d=new Lp(n,typeof s=="function"?s:Wi);a?i._tasks.unshift(d):i._tasks.push(d),setTimeout(i.process,1)},this.process=function(){for(;!i.paused&&i.workers<i.concurrency&&i._tasks.length;){var n=i._tasks.shift();i._tasks.length===0&&i.empty(),i.workers+=1,i.workers===i.concurrency&&i.saturated(),i._worker(n.data,fp(i._next(n)))}},this._worker=e,t===0)throw new Error("Concurrency must not be zero");this.concurrency=t,this.buffer=t/4}return l.prototype._next=function(e){var t=this;return function(){for(var i=arguments,n=[],a=0;a<arguments.length;a++)n[a]=i[a];t.workers-=1,e.callback.apply(e,n),n[0]!=null&&t.error(n[0],e.data),t.workers<=t.concurrency-t.buffer&&t.unsaturated(),t.idle()&&t.drain(),t.process()}},l.prototype.push=function(e,t){this._insert(e,!1,t)},l.prototype.kill=function(){this.workers=0,this.drain=Wi,this.started=!1,this._tasks=[]},l.prototype.unshift=function(e,t){this._insert(e,!0,t)},l.prototype.length=function(){return this._tasks.length},l.prototype.running=function(){return this.workers},l.prototype.idle=function(){return this._tasks.length+this.workers===0},l.prototype.pause=function(){this.paused!==!0&&(this.paused=!0)},l.prototype.resume=function(){if(this.paused!==!1){this.paused=!1;for(var e=1;e<=this.concurrency;e++)this.process()}},l.eachSeries=function(e,t,i,n){var a=0,s=e.length;function d(h){if(h||a===s){i&&i(h);return}n?setTimeout(function(){t(e[a++],d)},1):t(e[a++],d)}d()},l.queue=function(e,t){return new l(e,t)},l}(),$a=100,xp=/(#[\w-]+)?$/,xn=function(){function l(e,t){var i=this;e===void 0&&(e=""),t===void 0&&(t=10),this.progress=0,this.loading=!1,this.defaultQueryString="",this._beforeMiddleware=[],this._afterMiddleware=[],this._resourcesParsing=[],this._boundLoadResource=function(h,r){return i._loadResource(h,r)},this.resources={},this.baseUrl=e,this._beforeMiddleware=[],this._afterMiddleware=[],this._resourcesParsing=[],this._boundLoadResource=function(h,r){return i._loadResource(h,r)},this._queue=qa.queue(this._boundLoadResource,t),this._queue.pause(),this.resources={},this.onProgress=new Ne,this.onError=new Ne,this.onLoad=new Ne,this.onStart=new Ne,this.onComplete=new Ne;for(var n=0;n<l._plugins.length;++n){var a=l._plugins[n],s=a.pre,d=a.use;s&&this.pre(s),d&&this.use(d)}this._protected=!1}return l.prototype._add=function(e,t,i,n){if(this.loading&&(!i||!i.parentResource))throw new Error("Cannot add resources while the loader is running.");if(this.resources[e])throw new Error('Resource named "'+e+'" already exists.');if(t=this._prepareUrl(t),this.resources[e]=new yt(e,t,i),typeof n=="function"&&this.resources[e].onAfterMiddleware.once(n),this.loading){for(var a=i.parentResource,s=[],d=0;d<a.children.length;++d)a.children[d].isComplete||s.push(a.children[d]);var h=a.progressChunk*(s.length+1),r=h/(s.length+2);a.children.push(this.resources[e]),a.progressChunk=r;for(var d=0;d<s.length;++d)s[d].progressChunk=r;this.resources[e].progressChunk=r}return this._queue.push(this.resources[e]),this},l.prototype.pre=function(e){return this._beforeMiddleware.push(e),this},l.prototype.use=function(e){return this._afterMiddleware.push(e),this},l.prototype.reset=function(){this.progress=0,this.loading=!1,this._queue.kill(),this._queue.pause();for(var e in this.resources){var t=this.resources[e];t._onLoadBinding&&t._onLoadBinding.detach(),t.isLoading&&t.abort("loader reset")}return this.resources={},this},l.prototype.load=function(e){if(pe("6.5.0","@pixi/loaders is being replaced with @pixi/assets in the next major release."),typeof e=="function"&&this.onComplete.once(e),this.loading)return this;if(this._queue.idle())this._onStart(),this._onComplete();else{for(var t=this._queue._tasks.length,i=$a/t,n=0;n<this._queue._tasks.length;++n)this._queue._tasks[n].data.progressChunk=i;this._onStart(),this._queue.resume()}return this},Object.defineProperty(l.prototype,"concurrency",{get:function(){return this._queue.concurrency},set:function(e){this._queue.concurrency=e},enumerable:!1,configurable:!0}),l.prototype._prepareUrl=function(e){var t=Ah(e,{strictMode:!0}),i;if(t.protocol||!t.path||e.indexOf("//")===0?i=e:this.baseUrl.length&&this.baseUrl.lastIndexOf("/")!==this.baseUrl.length-1&&e.charAt(0)!=="/"?i=this.baseUrl+"/"+e:i=this.baseUrl+e,this.defaultQueryString){var n=xp.exec(i)[0];i=i.slice(0,i.length-n.length),i.indexOf("?")!==-1?i+="&"+this.defaultQueryString:i+="?"+this.defaultQueryString,i+=n}return i},l.prototype._loadResource=function(e,t){var i=this;e._dequeue=t,qa.eachSeries(this._beforeMiddleware,function(n,a){n.call(i,e,function(){a(e.isComplete?{}:null)})},function(){e.isComplete?i._onLoad(e):(e._onLoadBinding=e.onComplete.once(i._onLoad,i),e.load())},!0)},l.prototype._onStart=function(){this.progress=0,this.loading=!0,this.onStart.dispatch(this)},l.prototype._onComplete=function(){this.progress=$a,this.loading=!1,this.onComplete.dispatch(this,this.resources)},l.prototype._onLoad=function(e){var t=this;e._onLoadBinding=null,this._resourcesParsing.push(e),e._dequeue(),qa.eachSeries(this._afterMiddleware,function(i,n){i.call(t,e,n)},function(){e.onAfterMiddleware.dispatch(e),t.progress=Math.min($a,t.progress+e.progressChunk),t.onProgress.dispatch(t,e),e.error?t.onError.dispatch(e.error,t,e):t.onLoad.dispatch(t,e),t._resourcesParsing.splice(t._resourcesParsing.indexOf(e),1),t._queue.idle()&&t._resourcesParsing.length===0&&t._onComplete()},!0)},l.prototype.destroy=function(){this._protected||this.reset()},Object.defineProperty(l,"shared",{get:function(){var e=l._shared;return e||(e=new l,e._protected=!0,l._shared=e),e},enumerable:!1,configurable:!0}),l.registerPlugin=function(e){return pe("6.5.0","Loader.registerPlugin() is deprecated, use extensions.add() instead."),ke.add({type:nt.Loader,ref:e}),l},l._plugins=[],l}();ke.handleByList(nt.Loader,xn._plugins),xn.prototype.add=function(e,t,i,n){if(Array.isArray(e)){for(var a=0;a<e.length;++a)this.add(e[a]);return this}if(typeof e=="object"&&(i=e,n=t||i.callback||i.onComplete,t=i.url,e=i.name||i.key||i.url),typeof t!="string"&&(n=i,i=t,t=e),typeof t!="string")throw new Error("No url passed to add resource to loader.");return typeof i=="function"&&(n=i,i=null),this._add(e,t,i,n)};var Sp=function(){function l(){}return l.init=function(e){e=Object.assign({sharedLoader:!1},e),this.loader=e.sharedLoader?xn.shared:new xn},l.destroy=function(){this.loader&&(this.loader.destroy(),this.loader=null)},l.extension=nt.Application,l}(),vp=function(){function l(){}return l.add=function(){yt.setExtensionLoadType("svg",yt.LOAD_TYPE.XHR),yt.setExtensionXhrType("svg",yt.XHR_RESPONSE_TYPE.TEXT)},l.use=function(e,t){if(e.data&&(e.type===yt.TYPE.IMAGE||e.extension==="svg")){var i=e.data,n=e.url,a=e.name,s=e.metadata;z.fromLoader(i,n,a,s).then(function(d){e.texture=d,t()}).catch(t)}else t()},l.extension=nt.Loader,l}(),Ip="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Yp(l){for(var e="",t=0;t<l.length;){for(var i=[0,0,0],n=[0,0,0,0],a=0;a<i.length;++a)t<l.length?i[a]=l.charCodeAt(t++)&255:i[a]=0;n[0]=i[0]>>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 s=t-(l.length-1);switch(s){case 2:n[3]=64,n[2]=64;break;case 1:n[3]=64;break}for(var a=0;a<n.length;++a)e+=Ip.charAt(n[a])}return e}function gp(l,e){if(!l.data){e();return}if(l.xhr&&l.xhrType===yt.XHR_RESPONSE_TYPE.BLOB){if(!self.Blob||typeof l.data=="string"){var t=l.xhr.getResponseHeader("content-type");if(t&&t.indexOf("image")===0){l.data=new Image,l.data.src="data:"+t+";base64,"+Yp(l.xhr.responseText),l.type=yt.TYPE.IMAGE,l.data.onload=function(){l.data.onload=null,e()};return}}else if(l.data.type.indexOf("image")===0){var i=globalThis.URL||globalThis.webkitURL,n=i.createObjectURL(l.data);l.blob=l.data,l.data=new Image,l.data.src=n,l.type=yt.TYPE.IMAGE,l.data.onload=function(){i.revokeObjectURL(n),l.data.onload=null,e()};return}}e()}var Tp=function(){function l(){}return l.extension=nt.Loader,l.use=gp,l}();ke.add(vp,Tp);var it,E;(function(l){l[l.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",l[l.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",l[l.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",l[l.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",l[l.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",l[l.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",l[l.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",l[l.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",l[l.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",l[l.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",l[l.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",l[l.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",l[l.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",l[l.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",l[l.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",l[l.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",l[l.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",l[l.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",l[l.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",l[l.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",l[l.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",l[l.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",l[l.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",l[l.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",l[l.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",l[l.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",l[l.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR"})(E||(E={}));var Sn=(it={},it[E.COMPRESSED_RGB_S3TC_DXT1_EXT]=.5,it[E.COMPRESSED_RGBA_S3TC_DXT1_EXT]=.5,it[E.COMPRESSED_RGBA_S3TC_DXT3_EXT]=1,it[E.COMPRESSED_RGBA_S3TC_DXT5_EXT]=1,it[E.COMPRESSED_SRGB_S3TC_DXT1_EXT]=.5,it[E.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT]=.5,it[E.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT]=1,it[E.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT]=1,it[E.COMPRESSED_R11_EAC]=.5,it[E.COMPRESSED_SIGNED_R11_EAC]=.5,it[E.COMPRESSED_RG11_EAC]=1,it[E.COMPRESSED_SIGNED_RG11_EAC]=1,it[E.COMPRESSED_RGB8_ETC2]=.5,it[E.COMPRESSED_RGBA8_ETC2_EAC]=1,it[E.COMPRESSED_SRGB8_ETC2]=.5,it[E.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]=1,it[E.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]=.5,it[E.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]=.5,it[E.COMPRESSED_RGB_PVRTC_4BPPV1_IMG]=.5,it[E.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]=.5,it[E.COMPRESSED_RGB_PVRTC_2BPPV1_IMG]=.25,it[E.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]=.25,it[E.COMPRESSED_RGB_ETC1_WEBGL]=.5,it[E.COMPRESSED_RGB_ATC_WEBGL]=.5,it[E.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]=1,it[E.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]=1,it[E.COMPRESSED_RGBA_ASTC_4x4_KHR]=1,it);var ts=function(l,e){return ts=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},ts(l,e)};function er(l,e){ts(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}function Hp(l,e,t,i){function n(a){return a instanceof t?a:new t(function(s){s(a)})}return new(t||(t=Promise))(function(a,s){function d(o){try{r(i.next(o))}catch(c){s(c)}}function h(o){try{r(i.throw(o))}catch(c){s(c)}}function r(o){o.done?a(o.value):n(o.value).then(d,h)}r((i=i.apply(l,e||[])).next())})}function Jp(l,e){var t={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,n,a,s;return s={next:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function d(r){return function(o){return h([r,o])}}function h(r){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,n&&(a=r[0]&2?n.return:r[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,r[1])).done)return a;switch(n=0,a&&(r=[r[0]&2,a.value]),r[0]){case 0:case 1:a=r;break;case 4:return t.label++,{value:r[1],done:!1};case 5:t.label++,n=r[1],r=[0];continue;case 7:r=t.ops.pop(),t.trys.pop();continue;default:if(a=t.trys,!(a=a.length>0&&a[a.length-1])&&(r[0]===6||r[0]===2)){t=0;continue}if(r[0]===3&&(!a||r[1]>a[0]&&r[1]<a[3])){t.label=r[1];break}if(r[0]===6&&t.label<a[1]){t.label=a[1],a=r;break}if(a&&t.label<a[2]){t.label=a[2],t.ops.push(r);break}a[2]&&t.ops.pop(),t.trys.pop();continue}r=e.call(l,t)}catch(o){r=[6,o],n=0}finally{i=a=0}if(r[0]&5)throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}var Cp=function(l){er(e,l);function e(t,i){i===void 0&&(i={width:1,height:1,autoLoad:!0});var n=this,a,s;return typeof t=="string"?(a=t,s=new Uint8Array):(a=null,s=t),n=l.call(this,s,i)||this,n.origin=a,n.buffer=s?new _a(s):null,n.origin&&i.autoLoad!==!1&&n.load(),s&&s.length&&(n.loaded=!0,n.onBlobLoaded(n.buffer.rawBinaryData)),n}return e.prototype.onBlobLoaded=function(t){},e.prototype.load=function(){return Hp(this,void 0,Promise,function(){var t,i,n;return Jp(this,function(a){switch(a.label){case 0:return[4,fetch(this.origin)];case 1:return t=a.sent(),[4,t.blob()];case 2:return i=a.sent(),[4,i.arrayBuffer()];case 3:return n=a.sent(),this.data=new Uint32Array(n),this.buffer=new _a(n),this.loaded=!0,this.onBlobLoaded(n),this.update(),[2,this]}})})},e}(Xl),es=function(l){er(e,l);function e(t,i){var n=l.call(this,t,i)||this;return n.format=i.format,n.levels=i.levels||1,n._width=i.width,n._height=i.height,n._extension=e._formatToExtension(n.format),(i.levelBuffers||n.buffer)&&(n._levelBuffers=i.levelBuffers||e._createLevelBuffers(t instanceof Uint8Array?t:n.buffer.uint8View,n.format,n.levels,4,4,n.width,n.height)),n}return e.prototype.upload=function(t,i,n){var a=t.gl,s=t.context.extensions[this._extension];if(!s)throw new Error(this._extension+" textures are not supported on the current machine");if(!this._levelBuffers)return!1;for(var d=0,h=this.levels;d<h;d++){var r=this._levelBuffers[d],o=r.levelID,c=r.levelWidth,u=r.levelHeight,m=r.levelBuffer;a.compressedTexImage2D(a.TEXTURE_2D,o,this.format,c,u,0,m)}return!0},e.prototype.onBlobLoaded=function(){this._levelBuffers=e._createLevelBuffers(this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height)},e._formatToExtension=function(t){if(t>=33776&&t<=33779)return"s3tc";if(t>=37488&&t<=37497)return"etc";if(t>=35840&&t<=35843)return"pvrtc";if(t>=36196)return"etc1";if(t>=35986&&t<=34798)return"atc";throw new Error("Invalid (compressed) texture format given!")},e._createLevelBuffers=function(t,i,n,a,s,d,h){for(var r=new Array(n),o=t.byteOffset,c=d,u=h,m=c+a-1&~(a-1),b=u+s-1&~(s-1),Z=m*b*Sn[i],p=0;p<n;p++)r[p]={levelID:p,levelWidth:n>1?c:m,levelHeight:n>1?u:b,levelBuffer:new Uint8Array(t.buffer,o,Z)},o+=Z,c=c>>1||1,u=u>>1||1,m=c+a-1&~(a-1),b=u+s-1&~(s-1),Z=m*b*Sn[i];return r},e}(Cp),Fp=function(){function l(){}return l.use=function(e,t){var i=e.data,n=this;if(e.type===yt.TYPE.JSON&&i&&i.cacheID&&i.textures){for(var a=i.textures,s=void 0,d=void 0,h=0,r=a.length;h<r;h++){var o=a[h],c=o.src,u=o.format;if(u||(d=c),l.textureFormats[u]){s=c;break}}if(s=s||d,!s){t(new Error("Cannot load compressed-textures in "+e.url+", make sure you provide a fallback"));return}if(s===e.url){t(new Error("URL of compressed texture cannot be the same as the manifest's URL"));return}var m={crossOrigin:e.crossOrigin,metadata:e.metadata.imageMetadata,parentResource:e},b=Ni.resolve(e.url.replace(n.baseUrl,""),s),Z=i.cacheID;n.add(Z,b,m,function(p){if(p.error){t(p.error);return}var G=p.texture,X=G===void 0?null:G,y=p.textures,R=y===void 0?{}:y;Object.assign(e,{texture:X,textures:R}),t()})}else t()},Object.defineProperty(l,"textureExtensions",{get:function(){if(!l._textureExtensions){var e=U.ADAPTER.createCanvas(),t=e.getContext("webgl");if(!t)return console.warn("WebGL not available for compressed textures. Silently failing."),{};var i={s3tc:t.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:t.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:t.getExtension("WEBGL_compressed_texture_etc"),etc1:t.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:t.getExtension("WEBGL_compressed_texture_atc"),astc:t.getExtension("WEBGL_compressed_texture_astc")};l._textureExtensions=i}return l._textureExtensions},enumerable:!1,configurable:!0}),Object.defineProperty(l,"textureFormats",{get:function(){if(!l._textureFormats){var e=l.textureExtensions;l._textureFormats={};for(var t in e){var i=e[t];i&&Object.assign(l._textureFormats,Object.getPrototypeOf(i))}}return l._textureFormats},enumerable:!1,configurable:!0}),l.extension=nt.Loader,l}();function ir(l,e,t){var i={textures:{},texture:null};if(!e)return i;var n=e.map(function(a){return new z(new q(a,Object.assign({mipmap:ue.OFF,alphaMode:me.NO_PREMULTIPLIED_ALPHA},t)))});return n.forEach(function(a,s){var d=a.baseTexture,h=l+"-"+(s+1);q.addToCache(d,h),z.addToCache(a,h),s===0&&(q.addToCache(d,l),z.addToCache(a,l),i.texture=a),i.textures[h]=a}),i}var Ll,Ge,is=4,vn=124,Up=32,lr=20,kp=542327876,In={SIZE:1,FLAGS:2,HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19},Np={SIZE:0,FLAGS:1,FOURCC:2,RGB_BITCOUNT:3,R_BIT_MASK:4,G_BIT_MASK:5,B_BIT_MASK:6,A_BIT_MASK:7},Yn={DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3,MISC_FLAGS2:4},Xe;(function(l){l[l.DXGI_FORMAT_UNKNOWN=0]="DXGI_FORMAT_UNKNOWN",l[l.DXGI_FORMAT_R32G32B32A32_TYPELESS=1]="DXGI_FORMAT_R32G32B32A32_TYPELESS",l[l.DXGI_FORMAT_R32G32B32A32_FLOAT=2]="DXGI_FORMAT_R32G32B32A32_FLOAT",l[l.DXGI_FORMAT_R32G32B32A32_UINT=3]="DXGI_FORMAT_R32G32B32A32_UINT",l[l.DXGI_FORMAT_R32G32B32A32_SINT=4]="DXGI_FORMAT_R32G32B32A32_SINT",l[l.DXGI_FORMAT_R32G32B32_TYPELESS=5]="DXGI_FORMAT_R32G32B32_TYPELESS",l[l.DXGI_FORMAT_R32G32B32_FLOAT=6]="DXGI_FORMAT_R32G32B32_FLOAT",l[l.DXGI_FORMAT_R32G32B32_UINT=7]="DXGI_FORMAT_R32G32B32_UINT",l[l.DXGI_FORMAT_R32G32B32_SINT=8]="DXGI_FORMAT_R32G32B32_SINT",l[l.DXGI_FORMAT_R16G16B16A16_TYPELESS=9]="DXGI_FORMAT_R16G16B16A16_TYPELESS",l[l.DXGI_FORMAT_R16G16B16A16_FLOAT=10]="DXGI_FORMAT_R16G16B16A16_FLOAT",l[l.DXGI_FORMAT_R16G16B16A16_UNORM=11]="DXGI_FORMAT_R16G16B16A16_UNORM",l[l.DXGI_FORMAT_R16G16B16A16_UINT=12]="DXGI_FORMAT_R16G16B16A16_UINT",l[l.DXGI_FORMAT_R16G16B16A16_SNORM=13]="DXGI_FORMAT_R16G16B16A16_SNORM",l[l.DXGI_FORMAT_R16G16B16A16_SINT=14]="DXGI_FORMAT_R16G16B16A16_SINT",l[l.DXGI_FORMAT_R32G32_TYPELESS=15]="DXGI_FORMAT_R32G32_TYPELESS",l[l.DXGI_FORMAT_R32G32_FLOAT=16]="DXGI_FORMAT_R32G32_FLOAT",l[l.DXGI_FORMAT_R32G32_UINT=17]="DXGI_FORMAT_R32G32_UINT",l[l.DXGI_FORMAT_R32G32_SINT=18]="DXGI_FORMAT_R32G32_SINT",l[l.DXGI_FORMAT_R32G8X24_TYPELESS=19]="DXGI_FORMAT_R32G8X24_TYPELESS",l[l.DXGI_FORMAT_D32_FLOAT_S8X24_UINT=20]="DXGI_FORMAT_D32_FLOAT_S8X24_UINT",l[l.DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS=21]="DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",l[l.DXGI_FORMAT_X32_TYPELESS_G8X24_UINT=22]="DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",l[l.DXGI_FORMAT_R10G10B10A2_TYPELESS=23]="DXGI_FORMAT_R10G10B10A2_TYPELESS",l[l.DXGI_FORMAT_R10G10B10A2_UNORM=24]="DXGI_FORMAT_R10G10B10A2_UNORM",l[l.DXGI_FORMAT_R10G10B10A2_UINT=25]="DXGI_FORMAT_R10G10B10A2_UINT",l[l.DXGI_FORMAT_R11G11B10_FLOAT=26]="DXGI_FORMAT_R11G11B10_FLOAT",l[l.DXGI_FORMAT_R8G8B8A8_TYPELESS=27]="DXGI_FORMAT_R8G8B8A8_TYPELESS",l[l.DXGI_FORMAT_R8G8B8A8_UNORM=28]="DXGI_FORMAT_R8G8B8A8_UNORM",l[l.DXGI_FORMAT_R8G8B8A8_UNORM_SRGB=29]="DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",l[l.DXGI_FORMAT_R8G8B8A8_UINT=30]="DXGI_FORMAT_R8G8B8A8_UINT",l[l.DXGI_FORMAT_R8G8B8A8_SNORM=31]="DXGI_FORMAT_R8G8B8A8_SNORM",l[l.DXGI_FORMAT_R8G8B8A8_SINT=32]="DXGI_FORMAT_R8G8B8A8_SINT",l[l.DXGI_FORMAT_R16G16_TYPELESS=33]="DXGI_FORMAT_R16G16_TYPELESS",l[l.DXGI_FORMAT_R16G16_FLOAT=34]="DXGI_FORMAT_R16G16_FLOAT",l[l.DXGI_FORMAT_R16G16_UNORM=35]="DXGI_FORMAT_R16G16_UNORM",l[l.DXGI_FORMAT_R16G16_UINT=36]="DXGI_FORMAT_R16G16_UINT",l[l.DXGI_FORMAT_R16G16_SNORM=37]="DXGI_FORMAT_R16G16_SNORM",l[l.DXGI_FORMAT_R16G16_SINT=38]="DXGI_FORMAT_R16G16_SINT",l[l.DXGI_FORMAT_R32_TYPELESS=39]="DXGI_FORMAT_R32_TYPELESS",l[l.DXGI_FORMAT_D32_FLOAT=40]="DXGI_FORMAT_D32_FLOAT",l[l.DXGI_FORMAT_R32_FLOAT=41]="DXGI_FORMAT_R32_FLOAT",l[l.DXGI_FORMAT_R32_UINT=42]="DXGI_FORMAT_R32_UINT",l[l.DXGI_FORMAT_R32_SINT=43]="DXGI_FORMAT_R32_SINT",l[l.DXGI_FORMAT_R24G8_TYPELESS=44]="DXGI_FORMAT_R24G8_TYPELESS",l[l.DXGI_FORMAT_D24_UNORM_S8_UINT=45]="DXGI_FORMAT_D24_UNORM_S8_UINT",l[l.DXGI_FORMAT_R24_UNORM_X8_TYPELESS=46]="DXGI_FORMAT_R24_UNORM_X8_TYPELESS",l[l.DXGI_FORMAT_X24_TYPELESS_G8_UINT=47]="DXGI_FORMAT_X24_TYPELESS_G8_UINT",l[l.DXGI_FORMAT_R8G8_TYPELESS=48]="DXGI_FORMAT_R8G8_TYPELESS",l[l.DXGI_FORMAT_R8G8_UNORM=49]="DXGI_FORMAT_R8G8_UNORM",l[l.DXGI_FORMAT_R8G8_UINT=50]="DXGI_FORMAT_R8G8_UINT",l[l.DXGI_FORMAT_R8G8_SNORM=51]="DXGI_FORMAT_R8G8_SNORM",l[l.DXGI_FORMAT_R8G8_SINT=52]="DXGI_FORMAT_R8G8_SINT",l[l.DXGI_FORMAT_R16_TYPELESS=53]="DXGI_FORMAT_R16_TYPELESS",l[l.DXGI_FORMAT_R16_FLOAT=54]="DXGI_FORMAT_R16_FLOAT",l[l.DXGI_FORMAT_D16_UNORM=55]="DXGI_FORMAT_D16_UNORM",l[l.DXGI_FORMAT_R16_UNORM=56]="DXGI_FORMAT_R16_UNORM",l[l.DXGI_FORMAT_R16_UINT=57]="DXGI_FORMAT_R16_UINT",l[l.DXGI_FORMAT_R16_SNORM=58]="DXGI_FORMAT_R16_SNORM",l[l.DXGI_FORMAT_R16_SINT=59]="DXGI_FORMAT_R16_SINT",l[l.DXGI_FORMAT_R8_TYPELESS=60]="DXGI_FORMAT_R8_TYPELESS",l[l.DXGI_FORMAT_R8_UNORM=61]="DXGI_FORMAT_R8_UNORM",l[l.DXGI_FORMAT_R8_UINT=62]="DXGI_FORMAT_R8_UINT",l[l.DXGI_FORMAT_R8_SNORM=63]="DXGI_FORMAT_R8_SNORM",l[l.DXGI_FORMAT_R8_SINT=64]="DXGI_FORMAT_R8_SINT",l[l.DXGI_FORMAT_A8_UNORM=65]="DXGI_FORMAT_A8_UNORM",l[l.DXGI_FORMAT_R1_UNORM=66]="DXGI_FORMAT_R1_UNORM",l[l.DXGI_FORMAT_R9G9B9E5_SHAREDEXP=67]="DXGI_FORMAT_R9G9B9E5_SHAREDEXP",l[l.DXGI_FORMAT_R8G8_B8G8_UNORM=68]="DXGI_FORMAT_R8G8_B8G8_UNORM",l[l.DXGI_FORMAT_G8R8_G8B8_UNORM=69]="DXGI_FORMAT_G8R8_G8B8_UNORM",l[l.DXGI_FORMAT_BC1_TYPELESS=70]="DXGI_FORMAT_BC1_TYPELESS",l[l.DXGI_FORMAT_BC1_UNORM=71]="DXGI_FORMAT_BC1_UNORM",l[l.DXGI_FORMAT_BC1_UNORM_SRGB=72]="DXGI_FORMAT_BC1_UNORM_SRGB",l[l.DXGI_FORMAT_BC2_TYPELESS=73]="DXGI_FORMAT_BC2_TYPELESS",l[l.DXGI_FORMAT_BC2_UNORM=74]="DXGI_FORMAT_BC2_UNORM",l[l.DXGI_FORMAT_BC2_UNORM_SRGB=75]="DXGI_FORMAT_BC2_UNORM_SRGB",l[l.DXGI_FORMAT_BC3_TYPELESS=76]="DXGI_FORMAT_BC3_TYPELESS",l[l.DXGI_FORMAT_BC3_UNORM=77]="DXGI_FORMAT_BC3_UNORM",l[l.DXGI_FORMAT_BC3_UNORM_SRGB=78]="DXGI_FORMAT_BC3_UNORM_SRGB",l[l.DXGI_FORMAT_BC4_TYPELESS=79]="DXGI_FORMAT_BC4_TYPELESS",l[l.DXGI_FORMAT_BC4_UNORM=80]="DXGI_FORMAT_BC4_UNORM",l[l.DXGI_FORMAT_BC4_SNORM=81]="DXGI_FORMAT_BC4_SNORM",l[l.DXGI_FORMAT_BC5_TYPELESS=82]="DXGI_FORMAT_BC5_TYPELESS",l[l.DXGI_FORMAT_BC5_UNORM=83]="DXGI_FORMAT_BC5_UNORM",l[l.DXGI_FORMAT_BC5_SNORM=84]="DXGI_FORMAT_BC5_SNORM",l[l.DXGI_FORMAT_B5G6R5_UNORM=85]="DXGI_FORMAT_B5G6R5_UNORM",l[l.DXGI_FORMAT_B5G5R5A1_UNORM=86]="DXGI_FORMAT_B5G5R5A1_UNORM",l[l.DXGI_FORMAT_B8G8R8A8_UNORM=87]="DXGI_FORMAT_B8G8R8A8_UNORM",l[l.DXGI_FORMAT_B8G8R8X8_UNORM=88]="DXGI_FORMAT_B8G8R8X8_UNORM",l[l.DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM=89]="DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",l[l.DXGI_FORMAT_B8G8R8A8_TYPELESS=90]="DXGI_FORMAT_B8G8R8A8_TYPELESS",l[l.DXGI_FORMAT_B8G8R8A8_UNORM_SRGB=91]="DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",l[l.DXGI_FORMAT_B8G8R8X8_TYPELESS=92]="DXGI_FORMAT_B8G8R8X8_TYPELESS",l[l.DXGI_FORMAT_B8G8R8X8_UNORM_SRGB=93]="DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",l[l.DXGI_FORMAT_BC6H_TYPELESS=94]="DXGI_FORMAT_BC6H_TYPELESS",l[l.DXGI_FORMAT_BC6H_UF16=95]="DXGI_FORMAT_BC6H_UF16",l[l.DXGI_FORMAT_BC6H_SF16=96]="DXGI_FORMAT_BC6H_SF16",l[l.DXGI_FORMAT_BC7_TYPELESS=97]="DXGI_FORMAT_BC7_TYPELESS",l[l.DXGI_FORMAT_BC7_UNORM=98]="DXGI_FORMAT_BC7_UNORM",l[l.DXGI_FORMAT_BC7_UNORM_SRGB=99]="DXGI_FORMAT_BC7_UNORM_SRGB",l[l.DXGI_FORMAT_AYUV=100]="DXGI_FORMAT_AYUV",l[l.DXGI_FORMAT_Y410=101]="DXGI_FORMAT_Y410",l[l.DXGI_FORMAT_Y416=102]="DXGI_FORMAT_Y416",l[l.DXGI_FORMAT_NV12=103]="DXGI_FORMAT_NV12",l[l.DXGI_FORMAT_P010=104]="DXGI_FORMAT_P010",l[l.DXGI_FORMAT_P016=105]="DXGI_FORMAT_P016",l[l.DXGI_FORMAT_420_OPAQUE=106]="DXGI_FORMAT_420_OPAQUE",l[l.DXGI_FORMAT_YUY2=107]="DXGI_FORMAT_YUY2",l[l.DXGI_FORMAT_Y210=108]="DXGI_FORMAT_Y210",l[l.DXGI_FORMAT_Y216=109]="DXGI_FORMAT_Y216",l[l.DXGI_FORMAT_NV11=110]="DXGI_FORMAT_NV11",l[l.DXGI_FORMAT_AI44=111]="DXGI_FORMAT_AI44",l[l.DXGI_FORMAT_IA44=112]="DXGI_FORMAT_IA44",l[l.DXGI_FORMAT_P8=113]="DXGI_FORMAT_P8",l[l.DXGI_FORMAT_A8P8=114]="DXGI_FORMAT_A8P8",l[l.DXGI_FORMAT_B4G4R4A4_UNORM=115]="DXGI_FORMAT_B4G4R4A4_UNORM",l[l.DXGI_FORMAT_P208=116]="DXGI_FORMAT_P208",l[l.DXGI_FORMAT_V208=117]="DXGI_FORMAT_V208",l[l.DXGI_FORMAT_V408=118]="DXGI_FORMAT_V408",l[l.DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE=119]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE",l[l.DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE=120]="DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE",l[l.DXGI_FORMAT_FORCE_UINT=121]="DXGI_FORMAT_FORCE_UINT"})(Xe||(Xe={}));var ls;(function(l){l[l.DDS_DIMENSION_TEXTURE1D=2]="DDS_DIMENSION_TEXTURE1D",l[l.DDS_DIMENSION_TEXTURE2D=3]="DDS_DIMENSION_TEXTURE2D",l[l.DDS_DIMENSION_TEXTURE3D=6]="DDS_DIMENSION_TEXTURE3D"})(ls||(ls={}));var Mp=1,Kp=2,wp=4,Pp=64,zp=512,Ep=131072,Bp=827611204,Qp=861165636,_p=894720068,jp=808540228,Dp=4,Op=(Ll={},Ll[Bp]=E.COMPRESSED_RGBA_S3TC_DXT1_EXT,Ll[Qp]=E.COMPRESSED_RGBA_S3TC_DXT3_EXT,Ll[_p]=E.COMPRESSED_RGBA_S3TC_DXT5_EXT,Ll),Ap=(Ge={},Ge[Xe.DXGI_FORMAT_BC1_TYPELESS]=E.COMPRESSED_RGBA_S3TC_DXT1_EXT,Ge[Xe.DXGI_FORMAT_BC1_UNORM]=E.COMPRESSED_RGBA_S3TC_DXT1_EXT,Ge[Xe.DXGI_FORMAT_BC2_TYPELESS]=E.COMPRESSED_RGBA_S3TC_DXT3_EXT,Ge[Xe.DXGI_FORMAT_BC2_UNORM]=E.COMPRESSED_RGBA_S3TC_DXT3_EXT,Ge[Xe.DXGI_FORMAT_BC3_TYPELESS]=E.COMPRESSED_RGBA_S3TC_DXT5_EXT,Ge[Xe.DXGI_FORMAT_BC3_UNORM]=E.COMPRESSED_RGBA_S3TC_DXT5_EXT,Ge[Xe.DXGI_FORMAT_BC1_UNORM_SRGB]=E.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,Ge[Xe.DXGI_FORMAT_BC2_UNORM_SRGB]=E.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,Ge[Xe.DXGI_FORMAT_BC3_UNORM_SRGB]=E.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,Ge);function qp(l){var e=new Uint32Array(l),t=e[0];if(t!==kp)throw new Error("Invalid DDS file magic word");var i=new Uint32Array(l,0,vn/Uint32Array.BYTES_PER_ELEMENT),n=i[In.HEIGHT],a=i[In.WIDTH],s=i[In.MIPMAP_COUNT],d=new Uint32Array(l,In.PIXEL_FORMAT*Uint32Array.BYTES_PER_ELEMENT,Up/Uint32Array.BYTES_PER_ELEMENT),h=d[Mp];if(h&wp){var r=d[Np.FOURCC];if(r!==jp){var o=Op[r],c=is+vn,u=new Uint8Array(l,c),m=new es(u,{format:o,width:a,height:n,levels:s});return[m]}var b=is+vn,Z=new Uint32Array(e.buffer,b,lr/Uint32Array.BYTES_PER_ELEMENT),p=Z[Yn.DXGI_FORMAT],G=Z[Yn.RESOURCE_DIMENSION],X=Z[Yn.MISC_FLAG],y=Z[Yn.ARRAY_SIZE],R=Ap[p];if(R===void 0)throw new Error("DDSParser cannot parse texture data with DXGI format "+p);if(X===Dp)throw new Error("DDSParser does not support cubemap textures");if(G===ls.DDS_DIMENSION_TEXTURE3D)throw new Error("DDSParser does not supported 3D texture data");var V=new Array,W=is+vn+lr;if(y===1)V.push(new Uint8Array(l,W));else{for(var f=Sn[R],x=0,L=a,S=n,Y=0;Y<s;Y++){var J=Math.max(1,L+3&-4),F=Math.max(1,S+3&-4),M=J*F*f;x+=M,L=L>>>1,S=S>>>1}for(var g=W,Y=0;Y<y;Y++)V.push(new Uint8Array(l,g,x)),g+=x}return V.map(function(v){return new es(v,{format:R,width:a,height:n,levels:s})})}throw h&Pp?new Error("DDSParser does not support uncompressed texture data."):h&zp?new Error("DDSParser does not supported YUV uncompressed texture data."):h&Ep?new Error("DDSParser does not support single-channel (lumninance) texture data!"):h&Kp?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}var Oe,Me,xl,nr=[171,75,84,88,32,49,49,187,13,10,26,10],$p=67305985,ye={FILE_IDENTIFIER:0,ENDIANNESS:12,GL_TYPE:16,GL_TYPE_SIZE:20,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,GL_BASE_INTERNAL_FORMAT:32,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},ns=64,ar=(Oe={},Oe[K.UNSIGNED_BYTE]=1,Oe[K.UNSIGNED_SHORT]=2,Oe[K.INT]=4,Oe[K.UNSIGNED_INT]=4,Oe[K.FLOAT]=4,Oe[K.HALF_FLOAT]=8,Oe),tG=(Me={},Me[H.RGBA]=4,Me[H.RGB]=3,Me[H.RG]=2,Me[H.RED]=1,Me[H.LUMINANCE]=1,Me[H.LUMINANCE_ALPHA]=2,Me[H.ALPHA]=1,Me),eG=(xl={},xl[K.UNSIGNED_SHORT_4_4_4_4]=2,xl[K.UNSIGNED_SHORT_5_5_5_1]=2,xl[K.UNSIGNED_SHORT_5_6_5]=2,xl);function iG(l,e,t){t===void 0&&(t=!1);var i=new DataView(e);if(!lG(l,i))return null;var n=i.getUint32(ye.ENDIANNESS,!0)===$p,a=i.getUint32(ye.GL_TYPE,n),s=i.getUint32(ye.GL_FORMAT,n),d=i.getUint32(ye.GL_INTERNAL_FORMAT,n),h=i.getUint32(ye.PIXEL_WIDTH,n),r=i.getUint32(ye.PIXEL_HEIGHT,n)||1,o=i.getUint32(ye.PIXEL_DEPTH,n)||1,c=i.getUint32(ye.NUMBER_OF_ARRAY_ELEMENTS,n)||1,u=i.getUint32(ye.NUMBER_OF_FACES,n),m=i.getUint32(ye.NUMBER_OF_MIPMAP_LEVELS,n),b=i.getUint32(ye.BYTES_OF_KEY_VALUE_DATA,n);if(r===0||o!==1)throw new Error("Only 2D textures are supported");if(u!==1)throw new Error("CubeTextures are not supported by KTXLoader yet!");if(c!==1)throw new Error("WebGL does not support array textures");var Z=4,p=4,G=h+3&-4,X=r+3&-4,y=new Array(c),R=h*r;a===0&&(R=G*X);var V;if(a!==0?ar[a]?V=ar[a]*tG[s]:V=eG[a]:V=Sn[d],V===void 0)throw new Error("Unable to resolve the pixel format stored in the *.ktx file!");for(var W=t?aG(i,b,n):null,f=R*V,x=f,L=h,S=r,Y=G,J=X,F=ns+b,M=0;M<m;M++){for(var g=i.getUint32(F,n),v=F+4,C=0;C<c;C++){var B=y[C];B||(B=y[C]=new Array(m)),B[M]={levelID:M,levelWidth:m>1||a!==0?L:Y,levelHeight:m>1||a!==0?S:J,levelBuffer:new Uint8Array(e,v,x)},v+=x}F+=g+4,F=F%4!==0?F+4-F%4:F,L=L>>1||1,S=S>>1||1,Y=L+Z-1&~(Z-1),J=S+p-1&~(p-1),x=Y*J*V}return a!==0?{uncompressed:y.map(function(P){var T=P[0].levelBuffer,I=!1;return a===K.FLOAT?T=new Float32Array(P[0].levelBuffer.buffer,P[0].levelBuffer.byteOffset,P[0].levelBuffer.byteLength/4):a===K.UNSIGNED_INT?(I=!0,T=new Uint32Array(P[0].levelBuffer.buffer,P[0].levelBuffer.byteOffset,P[0].levelBuffer.byteLength/4)):a===K.INT&&(I=!0,T=new Int32Array(P[0].levelBuffer.buffer,P[0].levelBuffer.byteOffset,P[0].levelBuffer.byteLength/4)),{resource:new Xl(T,{width:P[0].levelWidth,height:P[0].levelHeight}),type:a,format:I?nG(s):s}}),kvData:W}:{compressed:y.map(function(P){return new es(null,{format:d,width:h,height:r,levels:m,levelBuffers:P})}),kvData:W}}function lG(l,e){for(var t=0;t<nr.length;t++)if(e.getUint8(t)!==nr[t])return console.error(l+" is not a valid *.ktx file!"),!1;return!0}function nG(l){switch(l){case H.RGBA:return H.RGBA_INTEGER;case H.RGB:return H.RGB_INTEGER;case H.RG:return H.RG_INTEGER;case H.RED:return H.RED_INTEGER;default:return l}}function aG(l,e,t){for(var i=new Map,n=0;n<e;){var a=l.getUint32(ns+n,t),s=ns+n+4,d=3-(a+3)%4;if(a===0||a>e-n){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}for(var h=0;h<a&&l.getUint8(s+h)!==0;h++);if(h===-1){console.error("KTXLoader: Failed to find null byte terminating kvData key");break}var r=new TextDecoder().decode(new Uint8Array(l.buffer,s,h)),o=new DataView(l.buffer,s+h+1,a-h-1);i.set(r,o),n+=4+a+d}return i}yt.setExtensionXhrType("dds",yt.XHR_RESPONSE_TYPE.BUFFER);var sG=function(){function l(){}return l.use=function(e,t){if(e.extension==="dds"&&e.data)try{Object.assign(e,ir(e.name||e.url,qp(e.data),e.metadata))}catch(i){t(i);return}t()},l.extension=nt.Loader,l}();yt.setExtensionXhrType("ktx",yt.XHR_RESPONSE_TYPE.BUFFER);var dG=function(){function l(){}return l.use=function(e,t){if(e.extension==="ktx"&&e.data)try{var i=e.name||e.url,n=iG(i,e.data,this.loadKeyValueData),a=n.compressed,s=n.uncompressed,d=n.kvData;if(a){var h=ir(i,a,e.metadata);if(d&&h.textures)for(var r in h.textures)h.textures[r].baseTexture.ktxKeyValueData=d;Object.assign(e,h)}else if(s){var o={};s.forEach(function(c,u){var m=new z(new q(c.resource,{mipmap:ue.OFF,alphaMode:me.NO_PREMULTIPLIED_ALPHA,type:c.type,format:c.format})),b=i+"-"+(u+1);d&&(m.baseTexture.ktxKeyValueData=d),q.addToCache(m.baseTexture,b),z.addToCache(m,b),u===0&&(o[i]=m,q.addToCache(m.baseTexture,i),z.addToCache(m,i)),o[b]=m}),Object.assign(e,{textures:o})}}catch(c){t(c);return}t()},l.extension=nt.Loader,l.loadKeyValueData=!1,l}();var as=function(l,e){return as=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},as(l,e)};function sr(l,e){as(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}(function(l){sr(e,l);function e(t,i,n,a){t===void 0&&(t=1500),n===void 0&&(n=16384),a===void 0&&(a=!1);var s=l.call(this)||this,d=16384;return n>d&&(n=d),s._properties=[!1,!0,!1,!1,!1],s._maxSize=t,s._batchSize=n,s._buffers=null,s._bufferUpdateIDs=[],s._updateID=0,s.interactiveChildren=!1,s.blendMode=w.NORMAL,s.autoResize=a,s.roundPixels=!0,s.baseTexture=null,s.setProperties(i),s._tint=0,s.tintRgb=new Float32Array(4),s.tint=16777215,s}return e.prototype.setProperties=function(t){t&&(this._properties[0]="vertices"in t||"scale"in t?!!t.vertices||!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="tint"in t||"alpha"in t?!!t.tint||!!t.alpha:this._properties[4])},e.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t,Mi(t,this.tintRgb)},enumerable:!1,configurable:!0}),e.prototype.render=function(t){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)})),t.batch.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},e.prototype.onChildrenChange=function(t){for(var i=Math.floor(t/this._batchSize);this._bufferUpdateIDs.length<i;)this._bufferUpdateIDs.push(0);this._bufferUpdateIDs[i]=++this._updateID},e.prototype.dispose=function(){if(this._buffers){for(var t=0;t<this._buffers.length;++t)this._buffers[t].destroy();this._buffers=null}},e.prototype.destroy=function(t){l.prototype.destroy.call(this,t),this.dispose(),this._properties=null,this._buffers=null,this._bufferUpdateIDs=null},e})(xt);var dr=function(){function l(e,t,i){this.geometry=new yl,this.indexBuffer=null,this.size=i,this.dynamicProperties=[],this.staticProperties=[];for(var n=0;n<e.length;++n){var a=e[n];a={attributeName:a.attributeName,size:a.size,uploadFunction:a.uploadFunction,type:a.type||K.FLOAT,offset:a.offset},t[n]?this.dynamicProperties.push(a):this.staticProperties.push(a)}this.staticStride=0,this.staticBuffer=null,this.staticData=null,this.staticDataUint32=null,this.dynamicStride=0,this.dynamicBuffer=null,this.dynamicData=null,this.dynamicDataUint32=null,this._updateID=0,this.initBuffers()}return l.prototype.initBuffers=function(){var e=this.geometry,t=0;this.indexBuffer=new Yt(xZ(this.size),!0,!0),e.addIndex(this.indexBuffer),this.dynamicStride=0;for(var i=0;i<this.dynamicProperties.length;++i){var n=this.dynamicProperties[i];n.offset=t,t+=n.size,this.dynamicStride+=n.size}var a=new ArrayBuffer(this.size*this.dynamicStride*4*4);this.dynamicData=new Float32Array(a),this.dynamicDataUint32=new Uint32Array(a),this.dynamicBuffer=new Yt(this.dynamicData,!1,!1);var s=0;this.staticStride=0;for(var i=0;i<this.staticProperties.length;++i){var n=this.staticProperties[i];n.offset=s,s+=n.size,this.staticStride+=n.size}var d=new ArrayBuffer(this.size*this.staticStride*4*4);this.staticData=new Float32Array(d),this.staticDataUint32=new Uint32Array(d),this.staticBuffer=new Yt(this.staticData,!0,!1);for(var i=0;i<this.dynamicProperties.length;++i){var n=this.dynamicProperties[i];e.addAttribute(n.attributeName,this.dynamicBuffer,0,n.type===K.UNSIGNED_BYTE,n.type,this.dynamicStride*4,n.offset*4)}for(var i=0;i<this.staticProperties.length;++i){var n=this.staticProperties[i];e.addAttribute(n.attributeName,this.staticBuffer,0,n.type===K.UNSIGNED_BYTE,n.type,this.staticStride*4,n.offset*4)}},l.prototype.uploadDynamic=function(e,t,i){for(var n=0;n<this.dynamicProperties.length;n++){var a=this.dynamicProperties[n];a.uploadFunction(e,t,i,a.type===K.UNSIGNED_BYTE?this.dynamicDataUint32:this.dynamicData,this.dynamicStride,a.offset)}this.dynamicBuffer._updateID++},l.prototype.uploadStatic=function(e,t,i){for(var n=0;n<this.staticProperties.length;n++){var a=this.staticProperties[n];a.uploadFunction(e,t,i,a.type===K.UNSIGNED_BYTE?this.staticDataUint32:this.staticData,this.staticStride,a.offset)}this.staticBuffer._updateID++},l.prototype.destroy=function(){this.indexBuffer=null,this.dynamicProperties=null,this.dynamicBuffer=null,this.dynamicData=null,this.dynamicDataUint32=null,this.staticProperties=null,this.staticBuffer=null,this.staticData=null,this.staticDataUint32=null,this.geometry.destroy()},l}(),hG=`varying vec2 vTextureCoord;
492
496
  varying vec4 vColor;
493
497
 
494
498
  uniform sampler2D uSampler;
@@ -496,7 +500,7 @@ uniform sampler2D uSampler;
496
500
  void main(void){
497
501
  vec4 color = texture2D(uSampler, vTextureCoord) * vColor;
498
502
  gl_FragColor = color;
499
- }`,$d=`attribute vec2 aVertexPosition;
503
+ }`,rG=`attribute vec2 aVertexPosition;
500
504
  attribute vec2 aTextureCoord;
501
505
  attribute vec4 aColor;
502
506
 
@@ -521,8 +525,8 @@ void main(void){
521
525
  vTextureCoord = aTextureCoord;
522
526
  vColor = aColor * uColor;
523
527
  }
524
- `,Zd=function(r){ya(e,r);function e(t){var i=r.call(this,t)||this;return i.shader=null,i.properties=null,i.tempMatrix=new gt,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:L.UNSIGNED_BYTE,uploadFunction:i.uploadTint,offset:0}],i.shader=ae.from($d,qd,{}),i.state=Ee.for2d(),i}return e.prototype.render=function(t){var i=t.children,n=t._maxSize,s=t._batchSize,a=this.renderer,o=i.length;if(o!==0){o>n&&!t.autoResize&&(o=n);var h=t._buffers;h||(h=t._buffers=this.generateBuffers(t));var u=i[0]._texture.baseTexture,l=u.alphaMode>0;this.state.blendMode=ys(t.blendMode,l),a.state.set(this.state);var f=a.gl,c=t.worldTransform.copyTo(this.tempMatrix);c.prepend(a.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=c.toArray(!0),this.shader.uniforms.uColor=lf(t.tintRgb,t.worldAlpha,this.shader.uniforms.uColor,l),this.shader.uniforms.uSampler=u,this.renderer.shader.bind(this.shader);for(var d=!1,p=0,v=0;p<o;p+=s,v+=1){var _=o-p;_>s&&(_=s),v>=h.length&&h.push(this._generateOneMoreBuffer(t));var m=h[v];m.uploadDynamic(i,p,_);var g=t._bufferUpdateIDs[v]||0;d=d||m._updateID<g,d&&(m._updateID=t._updateID,m.uploadStatic(i,p,_)),a.geometry.bind(m.geometry),f.drawElements(f.TRIANGLES,_*6,f.UNSIGNED_SHORT,0)}}},e.prototype.generateBuffers=function(t){for(var i=[],n=t._maxSize,s=t._batchSize,a=t._properties,o=0;o<n;o+=s)i.push(new xa(this.properties,a,s));return i},e.prototype._generateOneMoreBuffer=function(t){var i=t._batchSize,n=t._properties;return new xa(this.properties,n,i)},e.prototype.uploadVertices=function(t,i,n,s,a,o){for(var h=0,u=0,l=0,f=0,c=0;c<n;++c){var d=t[i+c],p=d._texture,v=d.scale.x,_=d.scale.y,m=p.trim,g=p.orig;m?(u=m.x-d.anchor.x*g.width,h=u+m.width,f=m.y-d.anchor.y*g.height,l=f+m.height):(h=g.width*(1-d.anchor.x),u=g.width*-d.anchor.x,l=g.height*(1-d.anchor.y),f=g.height*-d.anchor.y),s[o]=u*v,s[o+1]=f*_,s[o+a]=h*v,s[o+a+1]=f*_,s[o+a*2]=h*v,s[o+a*2+1]=l*_,s[o+a*3]=u*v,s[o+a*3+1]=l*_,o+=a*4}},e.prototype.uploadPosition=function(t,i,n,s,a,o){for(var h=0;h<n;h++){var u=t[i+h].position;s[o]=u.x,s[o+1]=u.y,s[o+a]=u.x,s[o+a+1]=u.y,s[o+a*2]=u.x,s[o+a*2+1]=u.y,s[o+a*3]=u.x,s[o+a*3+1]=u.y,o+=a*4}},e.prototype.uploadRotation=function(t,i,n,s,a,o){for(var h=0;h<n;h++){var u=t[i+h].rotation;s[o]=u,s[o+a]=u,s[o+a*2]=u,s[o+a*3]=u,o+=a*4}},e.prototype.uploadUvs=function(t,i,n,s,a,o){for(var h=0;h<n;++h){var u=t[i+h]._texture._uvs;u?(s[o]=u.x0,s[o+1]=u.y0,s[o+a]=u.x1,s[o+a+1]=u.y1,s[o+a*2]=u.x2,s[o+a*2+1]=u.y2,s[o+a*3]=u.x3,s[o+a*3+1]=u.y3,o+=a*4):(s[o]=0,s[o+1]=0,s[o+a]=0,s[o+a+1]=0,s[o+a*2]=0,s[o+a*2+1]=0,s[o+a*3]=0,s[o+a*3+1]=0,o+=a*4)}},e.prototype.uploadTint=function(t,i,n,s,a,o){for(var h=0;h<n;++h){var u=t[i+h],l=u._texture.baseTexture.alphaMode>0,f=u.alpha,c=f<1&&l?Ir(u._tintRGB,f):u._tintRGB+(f*255<<24);s[o]=c,s[o+a]=c,s[o+a*2]=c,s[o+a*3]=c,o+=a*4}},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null},e.extension={name:"particle",type:tt.RendererPlugin},e}(Li);var ne;(function(r){r.MITER="miter",r.BEVEL="bevel",r.ROUND="round"})(ne||(ne={}));var ue;(function(r){r.BUTT="butt",r.ROUND="round",r.SQUARE="square"})(ue||(ue={}));var ui={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount:function(r,e){if(e===void 0&&(e=20),!this.adaptive||!r||isNaN(r))return e;var t=Math.ceil(r/this.maxLength);return t<this.minSegments?t=this.minSegments:t>this.maxSegments&&(t=this.maxSegments),t}},ba=function(){function r(){this.color=16777215,this.alpha=1,this.texture=k.WHITE,this.matrix=null,this.visible=!1,this.reset()}return r.prototype.clone=function(){var e=new r;return e.color=this.color,e.alpha=this.alpha,e.texture=this.texture,e.matrix=this.matrix,e.visible=this.visible,e},r.prototype.reset=function(){this.color=16777215,this.alpha=1,this.texture=k.WHITE,this.matrix=null,this.visible=!1},r.prototype.destroy=function(){this.texture=null,this.matrix=null},r}();var cn=function(r,e){return cn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},cn(r,e)};function dn(r,e){cn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}function Ta(r,e){var t,i;e===void 0&&(e=!1);var n=r.length;if(!(n<6)){for(var s=0,a=0,o=r[n-2],h=r[n-1];a<n;a+=2){var u=r[a],l=r[a+1];s+=(u-o)*(l+h),o=u,h=l}if(!e&&s>0||e&&s<=0)for(var f=n/2,a=f+f%2;a<n;a+=2){var c=n-a-2,d=n-a-1,p=a,v=a+1;t=[r[p],r[c]],r[c]=t[0],r[p]=t[1],i=[r[v],r[d]],r[d]=i[0],r[v]=i[1]}}}var wa={build:function(r){r.points=r.shape.points.slice()},triangulate:function(r,e){var t=r.points,i=r.holes,n=e.points,s=e.indices;if(t.length>=6){Ta(t,!1);for(var a=[],o=0;o<i.length;o++){var h=i[o];Ta(h.points,!0),a.push(t.length/2),t=t.concat(h.points)}var u=Si.exports(t,a,2);if(!u)return;for(var l=n.length/2,o=0;o<u.length;o+=3)s.push(u[o]+l),s.push(u[o+1]+l),s.push(u[o+2]+l);for(var o=0;o<t.length;o++)n.push(t[o])}}},Qi={build:function(r){var e=r.points,t,i,n,s,a,o;if(r.type===bt.CIRC){var h=r.shape;t=h.x,i=h.y,a=o=h.radius,n=s=0}else if(r.type===bt.ELIP){var u=r.shape;t=u.x,i=u.y,a=u.width,o=u.height,n=s=0}else{var l=r.shape,f=l.width/2,c=l.height/2;t=l.x+f,i=l.y+c,a=o=Math.max(0,Math.min(l.radius,Math.min(f,c))),n=f-a,s=c-o}if(!(a>=0&&o>=0&&n>=0&&s>=0)){e.length=0;return}var d=Math.ceil(2.3*Math.sqrt(a+o)),p=d*8+(n?4:0)+(s?4:0);if(e.length=p,p!==0){if(d===0){e.length=8,e[0]=e[6]=t+n,e[1]=e[3]=i+s,e[2]=e[4]=t-n,e[5]=e[7]=i-s;return}var v=0,_=d*4+(n?2:0)+2,m=_,g=p;{var y=n+a,b=s,x=t+y,T=t-y,w=i+b;if(e[v++]=x,e[v++]=w,e[--_]=w,e[--_]=T,s){var A=i-b;e[m++]=T,e[m++]=A,e[--g]=A,e[--g]=x}}for(var S=1;S<d;S++){var E=Math.PI/2*(S/d),y=n+Math.cos(E)*a,b=s+Math.sin(E)*o,x=t+y,T=t-y,w=i+b,A=i-b;e[v++]=x,e[v++]=w,e[--_]=w,e[--_]=T,e[m++]=T,e[m++]=A,e[--g]=A,e[--g]=x}{var y=n,b=s+o,x=t+y,T=t-y,w=i+b,A=i-b;e[v++]=x,e[v++]=w,e[--g]=A,e[--g]=x,n&&(e[v++]=T,e[v++]=w,e[--g]=A,e[--g]=T)}}},triangulate:function(r,e){var t=r.points,i=e.points,n=e.indices;if(t.length!==0){var s=i.length/2,a=s,o,h;if(r.type!==bt.RREC){var u=r.shape;o=u.x,h=u.y}else{var l=r.shape;o=l.x+l.width/2,h=l.y+l.height/2}var f=r.matrix;i.push(r.matrix?f.a*o+f.c*h+f.tx:o,r.matrix?f.b*o+f.d*h+f.ty:h),s++,i.push(t[0],t[1]);for(var c=2;c<t.length;c+=2)i.push(t[c],t[c+1]),n.push(s++,a,s);n.push(a+1,a,s)}}},Kd={build:function(r){var e=r.shape,t=e.x,i=e.y,n=e.width,s=e.height,a=r.points;a.length=0,a.push(t,i,t+n,i,t+n,i+s,t,i+s)},triangulate:function(r,e){var t=r.points,i=e.points,n=i.length/2;i.push(t[0],t[1],t[2],t[3],t[6],t[7],t[4],t[5]),e.indices.push(n,n+1,n+2,n+1,n+2,n+3)}};function ke(r,e,t){var i=e-r;return r+i*t}function Ji(r,e,t,i,n,s,a){a===void 0&&(a=[]);for(var o=20,h=a,u=0,l=0,f=0,c=0,d=0,p=0,v=0,_=0;v<=o;++v)_=v/o,u=ke(r,t,_),l=ke(e,i,_),f=ke(t,n,_),c=ke(i,s,_),d=ke(u,f,_),p=ke(l,c,_),!(v===0&&h[h.length-2]===d&&h[h.length-1]===p)&&h.push(d,p);return h}var Qd={build:function(r){if(Ae.nextRoundedRectBehavior){Qi.build(r);return}var e=r.shape,t=r.points,i=e.x,n=e.y,s=e.width,a=e.height,o=Math.max(0,Math.min(e.radius,Math.min(s,a)/2));t.length=0,o?(Ji(i,n+o,i,n,i+o,n,t),Ji(i+s-o,n,i+s,n,i+s,n+o,t),Ji(i+s,n+a-o,i+s,n+a,i+s-o,n+a,t),Ji(i+o,n+a,i,n+a,i,n+a-o,t)):t.push(i,n,i+s,n,i+s,n+a,i,n+a)},triangulate:function(r,e){if(Ae.nextRoundedRectBehavior){Qi.triangulate(r,e);return}for(var t=r.points,i=e.points,n=e.indices,s=i.length/2,a=Si.exports(t,null,2),o=0,h=a.length;o<h;o+=3)n.push(a[o]+s),n.push(a[o+1]+s),n.push(a[o+2]+s);for(var o=0,h=t.length;o<h;o++)i.push(t[o],t[++o])}};function Ea(r,e,t,i,n,s,a,o){var h=r-t*n,u=e-i*n,l=r+t*s,f=e+i*s,c,d;a?(c=i,d=-t):(c=-i,d=t);var p=h+c,v=u+d,_=l+c,m=f+d;return o.push(p,v),o.push(_,m),2}function Re(r,e,t,i,n,s,a,o){var h=t-r,u=i-e,l=Math.atan2(h,u),f=Math.atan2(n-r,s-e);o&&l<f?l+=Math.PI*2:!o&&l>f&&(f+=Math.PI*2);var c=l,d=f-l,p=Math.abs(d),v=Math.sqrt(h*h+u*u),_=(15*p*Math.sqrt(v)/Math.PI>>0)+1,m=d/_;if(c+=m,o){a.push(r,e),a.push(t,i);for(var g=1,y=c;g<_;g++,y+=m)a.push(r,e),a.push(r+Math.sin(y)*v,e+Math.cos(y)*v);a.push(r,e),a.push(n,s)}else{a.push(t,i),a.push(r,e);for(var g=1,y=c;g<_;g++,y+=m)a.push(r+Math.sin(y)*v,e+Math.cos(y)*v),a.push(r,e);a.push(n,s),a.push(r,e)}return _*2}function Jd(r,e){var t=r.shape,i=r.points||t.points.slice(),n=e.closePointEps;if(i.length!==0){var s=r.lineStyle,a=new X(i[0],i[1]),o=new X(i[i.length-2],i[i.length-1]),h=t.type!==bt.POLY||t.closeStroke,u=Math.abs(a.x-o.x)<n&&Math.abs(a.y-o.y)<n;if(h){i=i.slice(),u&&(i.pop(),i.pop(),o.set(i[i.length-2],i[i.length-1]));var l=(a.x+o.x)*.5,f=(o.y+a.y)*.5;i.unshift(l,f),i.push(l,f)}var c=e.points,d=i.length/2,p=i.length,v=c.length/2,_=s.width/2,m=_*_,g=s.miterLimit*s.miterLimit,y=i[0],b=i[1],x=i[2],T=i[3],w=0,A=0,S=-(b-T),E=y-x,D=0,C=0,N=Math.sqrt(S*S+E*E);S/=N,E/=N,S*=_,E*=_;var W=s.alignment,M=(1-W)*2,O=W*2;h||(s.cap===ue.ROUND?p+=Re(y-S*(M-O)*.5,b-E*(M-O)*.5,y-S*M,b-E*M,y+S*O,b+E*O,c,!0)+2:s.cap===ue.SQUARE&&(p+=Ea(y,b,S,E,M,O,!0,c))),c.push(y-S*M,b-E*M),c.push(y+S*O,b+E*O);for(var U=1;U<d-1;++U){y=i[(U-1)*2],b=i[(U-1)*2+1],x=i[U*2],T=i[U*2+1],w=i[(U+1)*2],A=i[(U+1)*2+1],S=-(b-T),E=y-x,N=Math.sqrt(S*S+E*E),S/=N,E/=N,S*=_,E*=_,D=-(T-A),C=x-w,N=Math.sqrt(D*D+C*C),D/=N,C/=N,D*=_,C*=_;var rt=x-y,z=b-T,I=x-w,P=A-T,B=rt*I+z*P,$=z*I-P*rt,Z=$<0;if(Math.abs($)<.001*Math.abs(B)){c.push(x-S*M,T-E*M),c.push(x+S*O,T+E*O),B>=0&&(s.join===ne.ROUND?p+=Re(x,T,x-S*M,T-E*M,x-D*M,T-C*M,c,!1)+4:p+=2,c.push(x-D*O,T-C*O),c.push(x+D*M,T+C*M));continue}var vt=(-S+y)*(-E+T)-(-S+x)*(-E+b),st=(-D+w)*(-C+T)-(-D+x)*(-C+A),at=(rt*st-I*vt)/$,wt=(P*vt-z*st)/$,St=(at-x)*(at-x)+(wt-T)*(wt-T),_t=x+(at-x)*M,et=T+(wt-T)*M,nt=x-(at-x)*O,ot=T-(wt-T)*O,q=Math.min(rt*rt+z*z,I*I+P*P),Rt=Z?M:O,Ct=q+Rt*Rt*m,Q=St<=Ct;Q?s.join===ne.BEVEL||St/m>g?(Z?(c.push(_t,et),c.push(x+S*O,T+E*O),c.push(_t,et),c.push(x+D*O,T+C*O)):(c.push(x-S*M,T-E*M),c.push(nt,ot),c.push(x-D*M,T-C*M),c.push(nt,ot)),p+=2):s.join===ne.ROUND?Z?(c.push(_t,et),c.push(x+S*O,T+E*O),p+=Re(x,T,x+S*O,T+E*O,x+D*O,T+C*O,c,!0)+4,c.push(_t,et),c.push(x+D*O,T+C*O)):(c.push(x-S*M,T-E*M),c.push(nt,ot),p+=Re(x,T,x-S*M,T-E*M,x-D*M,T-C*M,c,!1)+4,c.push(x-D*M,T-C*M),c.push(nt,ot)):(c.push(_t,et),c.push(nt,ot)):(c.push(x-S*M,T-E*M),c.push(x+S*O,T+E*O),s.join===ne.ROUND?Z?p+=Re(x,T,x+S*O,T+E*O,x+D*O,T+C*O,c,!0)+2:p+=Re(x,T,x-S*M,T-E*M,x-D*M,T-C*M,c,!1)+2:s.join===ne.MITER&&St/m<=g&&(Z?(c.push(nt,ot),c.push(nt,ot)):(c.push(_t,et),c.push(_t,et)),p+=2),c.push(x-D*M,T-C*M),c.push(x+D*O,T+C*O),p+=2)}y=i[(d-2)*2],b=i[(d-2)*2+1],x=i[(d-1)*2],T=i[(d-1)*2+1],S=-(b-T),E=y-x,N=Math.sqrt(S*S+E*E),S/=N,E/=N,S*=_,E*=_,c.push(x-S*M,T-E*M),c.push(x+S*O,T+E*O),h||(s.cap===ue.ROUND?p+=Re(x-S*(M-O)*.5,T-E*(M-O)*.5,x-S*M,T-E*M,x+S*O,T+E*O,c,!1)+2:s.cap===ue.SQUARE&&(p+=Ea(x,T,S,E,M,O,!1,c)));for(var Kt=e.indices,je=ui.epsilon*ui.epsilon,U=v;U<p+v-2;++U)y=c[U*2],b=c[U*2+1],x=c[(U+1)*2],T=c[(U+1)*2+1],w=c[(U+2)*2],A=c[(U+2)*2+1],!(Math.abs(y*(T-A)+x*(A-b)+w*(b-T))<je)&&Kt.push(U,U+1,U+2)}}function tp(r,e){var t=0,i=r.shape,n=r.points||i.points,s=i.type!==bt.POLY||i.closeStroke;if(n.length!==0){var a=e.points,o=e.indices,h=n.length/2,u=a.length/2,l=u;for(a.push(n[0],n[1]),t=1;t<h;t++)a.push(n[t*2],n[t*2+1]),o.push(l,l+1),l++;s&&o.push(l,u)}}function Sa(r,e){r.lineStyle.native?tp(r,e):Jd(r,e)}var Pa=function(){function r(){}return r.curveTo=function(e,t,i,n,s,a){var o=a[a.length-2],h=a[a.length-1],u=h-t,l=o-e,f=n-t,c=i-e,d=Math.abs(u*c-l*f);if(d<1e-8||s===0)return(a[a.length-2]!==e||a[a.length-1]!==t)&&a.push(e,t),null;var p=u*u+l*l,v=f*f+c*c,_=u*f+l*c,m=s*Math.sqrt(p)/d,g=s*Math.sqrt(v)/d,y=m*_/p,b=g*_/v,x=m*c+g*l,T=m*f+g*u,w=l*(g+y),A=u*(g+y),S=c*(m+b),E=f*(m+b),D=Math.atan2(A-T,w-x),C=Math.atan2(E-T,S-x);return{cx:x+e,cy:T+t,radius:s,startAngle:D,endAngle:C,anticlockwise:l*f>c*u}},r.arc=function(e,t,i,n,s,a,o,h,u){for(var l=o-a,f=ui._segmentsCount(Math.abs(l)*s,Math.ceil(Math.abs(l)/Wt)*40),c=l/(f*2),d=c*2,p=Math.cos(c),v=Math.sin(c),_=f-1,m=_%1/_,g=0;g<=_;++g){var y=g+m*g,b=c+a+d*y,x=Math.cos(b),T=-Math.sin(b);u.push((p*x+v*T)*s+i,(p*-T+v*x)*s+n)}},r}(),ep=function(){function r(){}return r.curveLength=function(e,t,i,n,s,a,o,h){for(var u=10,l=0,f=0,c=0,d=0,p=0,v=0,_=0,m=0,g=0,y=0,b=0,x=e,T=t,w=1;w<=u;++w)f=w/u,c=f*f,d=c*f,p=1-f,v=p*p,_=v*p,m=_*e+3*v*f*i+3*p*c*s+d*o,g=_*t+3*v*f*n+3*p*c*a+d*h,y=x-m,b=T-g,x=m,T=g,l+=Math.sqrt(y*y+b*b);return l},r.curveTo=function(e,t,i,n,s,a,o){var h=o[o.length-2],u=o[o.length-1];o.length-=2;var l=ui._segmentsCount(r.curveLength(h,u,e,t,i,n,s,a)),f=0,c=0,d=0,p=0,v=0;o.push(h,u);for(var _=1,m=0;_<=l;++_)m=_/l,f=1-m,c=f*f,d=c*f,p=m*m,v=p*m,o.push(d*h+3*c*m*e+3*f*p*i+v*s,d*u+3*c*m*t+3*f*p*n+v*a)},r}(),ip=function(){function r(){}return r.curveLength=function(e,t,i,n,s,a){var o=e-2*i+s,h=t-2*n+a,u=2*i-2*e,l=2*n-2*t,f=4*(o*o+h*h),c=4*(o*u+h*l),d=u*u+l*l,p=2*Math.sqrt(f+c+d),v=Math.sqrt(f),_=2*f*v,m=2*Math.sqrt(d),g=c/v;return(_*p+v*c*(p-m)+(4*d*f-c*c)*Math.log((2*v+g+p)/(g+m)))/(4*_)},r.curveTo=function(e,t,i,n,s){for(var a=s[s.length-2],o=s[s.length-1],h=ui._segmentsCount(r.curveLength(a,o,e,t,i,n)),u=0,l=0,f=1;f<=h;++f){var c=f/h;u=a+(e-a)*c,l=o+(t-o)*c,s.push(u+(e+(i-e)*c-u)*c,l+(t+(n-t)*c-l)*c)}},r}(),rp=function(){function r(){this.reset()}return r.prototype.begin=function(e,t,i){this.reset(),this.style=e,this.start=t,this.attribStart=i},r.prototype.end=function(e,t){this.attribSize=t-this.attribStart,this.size=e-this.start},r.prototype.reset=function(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0},r}(),Ce,pn=(Ce={},Ce[bt.POLY]=wa,Ce[bt.CIRC]=Qi,Ce[bt.ELIP]=Qi,Ce[bt.RECT]=Kd,Ce[bt.RREC]=Qd,Ce),Ra=[],tr=[],Ca=function(){function r(e,t,i,n){t===void 0&&(t=null),i===void 0&&(i=null),n===void 0&&(n=null),this.points=[],this.holes=[],this.shape=e,this.lineStyle=i,this.fillStyle=t,this.matrix=n,this.type=e.type}return r.prototype.clone=function(){return new r(this.shape,this.fillStyle,this.lineStyle,this.matrix)},r.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},r}(),He=new X,np=function(r){dn(e,r);function e(){var t=r.call(this)||this;return t.closePointEps=1e-4,t.boundsPadding=0,t.uvsFloat32=null,t.indicesUint16=null,t.batchable=!1,t.points=[],t.colors=[],t.uvs=[],t.indices=[],t.textureIds=[],t.graphicsData=[],t.drawCalls=[],t.batchDirty=-1,t.batches=[],t.dirty=0,t.cacheDirty=-1,t.clearDirty=0,t.shapeIndex=0,t._bounds=new Fi,t.boundsDirty=-1,t}return Object.defineProperty(e.prototype,"bounds",{get:function(){return this.updateBatches(),this.boundsDirty!==this.dirty&&(this.boundsDirty=this.dirty,this.calculateBounds()),this._bounds},enumerable:!1,configurable:!0}),e.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 t=0;t<this.drawCalls.length;t++)this.drawCalls[t].texArray.clear(),tr.push(this.drawCalls[t]);this.drawCalls.length=0;for(var t=0;t<this.batches.length;t++){var i=this.batches[t];i.reset(),Ra.push(i)}this.batches.length=0},e.prototype.clear=function(){return this.graphicsData.length>0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this},e.prototype.drawShape=function(t,i,n,s){i===void 0&&(i=null),n===void 0&&(n=null),s===void 0&&(s=null);var a=new Ca(t,i,n,s);return this.graphicsData.push(a),this.dirty++,this},e.prototype.drawHole=function(t,i){if(i===void 0&&(i=null),!this.graphicsData.length)return null;var n=new Ca(t,null,null,i),s=this.graphicsData[this.graphicsData.length-1];return n.lineStyle=s.lineStyle,s.holes.push(n),this.dirty++,this},e.prototype.destroy=function(){r.prototype.destroy.call(this);for(var t=0;t<this.graphicsData.length;++t)this.graphicsData[t].destroy();this.points.length=0,this.points=null,this.colors.length=0,this.colors=null,this.uvs.length=0,this.uvs=null,this.indices.length=0,this.indices=null,this.indexBuffer.destroy(),this.indexBuffer=null,this.graphicsData.length=0,this.graphicsData=null,this.drawCalls.length=0,this.drawCalls=null,this.batches.length=0,this.batches=null,this._bounds=null},e.prototype.containsPoint=function(t){for(var i=this.graphicsData,n=0;n<i.length;++n){var s=i[n];if(s.fillStyle.visible&&s.shape&&(s.matrix?s.matrix.applyInverse(t,He):He.copyFrom(t),s.shape.contains(He.x,He.y))){var a=!1;if(s.holes)for(var o=0;o<s.holes.length;o++){var h=s.holes[o];if(h.shape.contains(He.x,He.y)){a=!0;break}}if(!a)return!0}}return!1},e.prototype.updateBatches=function(){if(!this.graphicsData.length){this.batchable=!0;return}if(this.validateBatching()){this.cacheDirty=this.dirty;var t=this.uvs,i=this.graphicsData,n=null,s=null;this.batches.length>0&&(n=this.batches[this.batches.length-1],s=n.style);for(var a=this.shapeIndex;a<i.length;a++){this.shapeIndex++;var o=i[a],h=o.fillStyle,u=o.lineStyle,l=pn[o.type];l.build(o),o.matrix&&this.transformPoints(o.points,o.matrix),(h.visible||u.visible)&&this.processHoles(o.holes);for(var f=0;f<2;f++){var c=f===0?h:u;if(c.visible){var d=c.texture.baseTexture,p=this.indices.length,v=this.points.length/2;d.wrapMode=zt.REPEAT,f===0?this.processFill(o):this.processLine(o);var _=this.points.length/2-v;_!==0&&(n&&!this._compareStyles(s,c)&&(n.end(p,v),n=null),n||(n=Ra.pop()||new rp,n.begin(c,p,v),this.batches.push(n),s=c),this.addUvs(this.points,t,c.texture,v,_,c.matrix))}}}var m=this.indices.length,g=this.points.length/2;if(n&&n.end(m,g),this.batches.length===0){this.batchable=!0;return}var y=g>65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&y===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=y?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}},e.prototype._compareStyles=function(t,i){return!(!t||!i||t.texture.baseTexture!==i.texture.baseTexture||t.color+t.alpha!==i.color+i.alpha||!!t.native!=!!i.native)},e.prototype.validateBatching=function(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(var t=0,i=this.graphicsData.length;t<i;t++){var n=this.graphicsData[t],s=n.fillStyle,a=n.lineStyle;if(s&&!s.texture.baseTexture.valid||a&&!a.texture.baseTexture.valid)return!1}return!0},e.prototype.packBatches=function(){this.batchDirty++,this.uvsFloat32=new Float32Array(this.uvs);for(var t=this.batches,i=0,n=t.length;i<n;i++)for(var s=t[i],a=0;a<s.size;a++){var o=s.start+a;this.indicesUint16[o]=this.indicesUint16[o]-s.attribStart}},e.prototype.isBatchable=function(){if(this.points.length>65535*2)return!1;for(var t=this.batches,i=0;i<t.length;i++)if(t[i].style.native)return!1;return this.points.length<e.BATCHABLE_SIZE*2},e.prototype.buildDrawCalls=function(){for(var t=++V._globalBatch,i=0;i<this.drawCalls.length;i++)this.drawCalls[i].texArray.clear(),tr.push(this.drawCalls[i]);this.drawCalls.length=0;var n=this.colors,s=this.textureIds,a=tr.pop();a||(a=new Zr,a.texArray=new Kr),a.texArray.count=0,a.start=0,a.size=0,a.type=Dt.TRIANGLES;var o=0,h=null,u=0,l=!1,f=Dt.TRIANGLES,c=0;this.drawCalls.push(a);for(var i=0;i<this.batches.length;i++){var d=this.batches[i],p=8,v=d.style,_=v.texture.baseTexture;l!==!!v.native&&(l=!!v.native,f=l?Dt.LINES:Dt.TRIANGLES,h=null,o=p,t++),h!==_&&(h=_,_._batchEnabled!==t&&(o===p&&(t++,o=0,a.size>0&&(a=tr.pop(),a||(a=new Zr,a.texArray=new Kr),this.drawCalls.push(a)),a.start=c,a.size=0,a.texArray.count=0,a.type=f),_.touched=1,_._batchEnabled=t,_._batchLocation=o,_.wrapMode=zt.REPEAT,a.texArray.elements[a.texArray.count++]=_,o++)),a.size+=d.size,c+=d.size,u=_._batchLocation,this.addColors(n,v.color,v.alpha,d.attribSize,d.attribStart),this.addTextureIds(s,u,d.attribSize,d.attribStart)}V._globalBatch=t,this.packAttributes()},e.prototype.packAttributes=function(){for(var t=this.points,i=this.uvs,n=this.colors,s=this.textureIds,a=new ArrayBuffer(t.length*3*4),o=new Float32Array(a),h=new Uint32Array(a),u=0,l=0;l<t.length/2;l++)o[u++]=t[l*2],o[u++]=t[l*2+1],o[u++]=i[l*2],o[u++]=i[l*2+1],h[u++]=n[l],o[u++]=s[l];this._buffer.update(a),this._indexBuffer.update(this.indicesUint16)},e.prototype.processFill=function(t){if(t.holes.length)wa.triangulate(t,this);else{var i=pn[t.type];i.triangulate(t,this)}},e.prototype.processLine=function(t){Sa(t,this);for(var i=0;i<t.holes.length;i++)Sa(t.holes[i],this)},e.prototype.processHoles=function(t){for(var i=0;i<t.length;i++){var n=t[i],s=pn[n.type];s.build(n),n.matrix&&this.transformPoints(n.points,n.matrix)}},e.prototype.calculateBounds=function(){var t=this._bounds;t.clear(),t.addVertexData(this.points,0,this.points.length),t.pad(this.boundsPadding,this.boundsPadding)},e.prototype.transformPoints=function(t,i){for(var n=0;n<t.length/2;n++){var s=t[n*2],a=t[n*2+1];t[n*2]=i.a*s+i.c*a+i.tx,t[n*2+1]=i.b*s+i.d*a+i.ty}},e.prototype.addColors=function(t,i,n,s,a){a===void 0&&(a=0);var o=(i>>16)+(i&65280)+((i&255)<<16),h=Ir(o,n);t.length=Math.max(t.length,a+s);for(var u=0;u<s;u++)t[a+u]=h},e.prototype.addTextureIds=function(t,i,n,s){s===void 0&&(s=0),t.length=Math.max(t.length,s+n);for(var a=0;a<n;a++)t[s+a]=i},e.prototype.addUvs=function(t,i,n,s,a,o){o===void 0&&(o=null);for(var h=0,u=i.length,l=n.frame;h<a;){var f=t[(s+h)*2],c=t[(s+h)*2+1];if(o){var d=o.a*f+o.c*c+o.tx;c=o.b*f+o.d*c+o.ty,f=d}h++,i.push(f/l.width,c/l.height)}var p=n.baseTexture;(l.width<p.width||l.height<p.height)&&this.adjustUvs(i,n,u,a)},e.prototype.adjustUvs=function(t,i,n,s){for(var a=i.baseTexture,o=1e-6,h=n+s*2,u=i.frame,l=u.width/a.width,f=u.height/a.height,c=u.x/u.width,d=u.y/u.height,p=Math.floor(t[n]+o),v=Math.floor(t[n+1]+o),_=n+2;_<h;_+=2)p=Math.min(p,Math.floor(t[_]+o)),v=Math.min(v,Math.floor(t[_+1]+o));c-=p,d-=v;for(var _=n;_<h;_+=2)t[_]=(t[_]+c)*l,t[_+1]=(t[_+1]+d)*f},e.BATCHABLE_SIZE=100,e}(ta),sp=function(r){dn(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.width=0,t.alignment=.5,t.native=!1,t.cap=ue.BUTT,t.join=ne.MITER,t.miterLimit=10,t}return e.prototype.clone=function(){var t=new e;return t.color=this.color,t.alpha=this.alpha,t.texture=this.texture,t.matrix=this.matrix,t.visible=this.visible,t.width=this.width,t.alignment=this.alignment,t.native=this.native,t.cap=this.cap,t.join=this.join,t.miterLimit=this.miterLimit,t},e.prototype.reset=function(){r.prototype.reset.call(this),this.color=0,this.alignment=.5,this.width=0,this.native=!1},e}(ba),ap=new Float32Array(3),vn={},Ae=function(r){dn(e,r);function e(t){t===void 0&&(t=null);var i=r.call(this)||this;return i.shader=null,i.pluginName="batch",i.currentPath=null,i.batches=[],i.batchTint=-1,i.batchDirty=-1,i.vertexData=null,i._fillStyle=new ba,i._lineStyle=new sp,i._matrix=null,i._holeMode=!1,i.state=Ee.for2d(),i._geometry=t||new np,i._geometry.refCount++,i._transformID=-1,i.tint=16777215,i.blendMode=G.NORMAL,i}return Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!1,configurable:!0}),e.prototype.clone=function(){return this.finishPoly(),new e(this._geometry)},Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fill",{get:function(){return this._fillStyle},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){return this._lineStyle},enumerable:!1,configurable:!0}),e.prototype.lineStyle=function(t,i,n,s,a){return t===void 0&&(t=null),i===void 0&&(i=0),n===void 0&&(n=1),s===void 0&&(s=.5),a===void 0&&(a=!1),typeof t=="number"&&(t={width:t,color:i,alpha:n,alignment:s,native:a}),this.lineTextureStyle(t)},e.prototype.lineTextureStyle=function(t){t=Object.assign({width:0,texture:k.WHITE,color:t&&t.texture?16777215:0,alpha:1,matrix:null,alignment:.5,native:!1,cap:ue.BUTT,join:ne.MITER,miterLimit:10},t),this.currentPath&&this.startPoly();var i=t.width>0&&t.alpha>0;return i?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._lineStyle,{visible:i},t)):this._lineStyle.reset(),this},e.prototype.startPoly=function(){if(this.currentPath){var t=this.currentPath.points,i=this.currentPath.points.length;i>2&&(this.drawShape(this.currentPath),this.currentPath=new yi,this.currentPath.closeStroke=!1,this.currentPath.points.push(t[i-2],t[i-1]))}else this.currentPath=new yi,this.currentPath.closeStroke=!1},e.prototype.finishPoly=function(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)},e.prototype.moveTo=function(t,i){return this.startPoly(),this.currentPath.points[0]=t,this.currentPath.points[1]=i,this},e.prototype.lineTo=function(t,i){this.currentPath||this.moveTo(0,0);var n=this.currentPath.points,s=n[n.length-2],a=n[n.length-1];return(s!==t||a!==i)&&n.push(t,i),this},e.prototype._initCurve=function(t,i){t===void 0&&(t=0),i===void 0&&(i=0),this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[t,i]):this.moveTo(t,i)},e.prototype.quadraticCurveTo=function(t,i,n,s){this._initCurve();var a=this.currentPath.points;return a.length===0&&this.moveTo(0,0),ip.curveTo(t,i,n,s,a),this},e.prototype.bezierCurveTo=function(t,i,n,s,a,o){return this._initCurve(),ep.curveTo(t,i,n,s,a,o,this.currentPath.points),this},e.prototype.arcTo=function(t,i,n,s,a){this._initCurve(t,i);var o=this.currentPath.points,h=Pa.curveTo(t,i,n,s,a,o);if(h){var u=h.cx,l=h.cy,f=h.radius,c=h.startAngle,d=h.endAngle,p=h.anticlockwise;this.arc(u,l,f,c,d,p)}return this},e.prototype.arc=function(t,i,n,s,a,o){if(o===void 0&&(o=!1),s===a)return this;!o&&a<=s?a+=Wt:o&&s<=a&&(s+=Wt);var h=a-s;if(h===0)return this;var u=t+Math.cos(s)*n,l=i+Math.sin(s)*n,f=this._geometry.closePointEps,c=this.currentPath?this.currentPath.points:null;if(c){var d=Math.abs(c[c.length-2]-u),p=Math.abs(c[c.length-1]-l);d<f&&p<f||c.push(u,l)}else this.moveTo(u,l),c=this.currentPath.points;return Pa.arc(u,l,t,i,n,s,a,o,c),this},e.prototype.beginFill=function(t,i){return t===void 0&&(t=0),i===void 0&&(i=1),this.beginTextureFill({texture:k.WHITE,color:t,alpha:i})},e.prototype.beginTextureFill=function(t){t=Object.assign({texture:k.WHITE,color:16777215,alpha:1,matrix:null},t),this.currentPath&&this.startPoly();var i=t.alpha>0;return i?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._fillStyle,{visible:i},t)):this._fillStyle.reset(),this},e.prototype.endFill=function(){return this.finishPoly(),this._fillStyle.reset(),this},e.prototype.drawRect=function(t,i,n,s){return this.drawShape(new j(t,i,n,s))},e.prototype.drawRoundedRect=function(t,i,n,s,a){return this.drawShape(new go(t,i,n,s,a))},e.prototype.drawCircle=function(t,i,n){return this.drawShape(new _o(t,i,n))},e.prototype.drawEllipse=function(t,i,n,s){return this.drawShape(new mo(t,i,n,s))},e.prototype.drawPolygon=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];var s,a=!0,o=i[0];o.points?(a=o.closeStroke,s=o.points):Array.isArray(i[0])?s=i[0]:s=i;var h=new yi(s);return h.closeStroke=a,this.drawShape(h),this},e.prototype.drawShape=function(t){return this._holeMode?this._geometry.drawHole(t,this._matrix):this._geometry.drawShape(t,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this},e.prototype.clear=function(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this},e.prototype.isFastRect=function(){var t=this._geometry.graphicsData;return t.length===1&&t[0].shape.type===bt.RECT&&!t[0].matrix&&!t[0].holes.length&&!(t[0].lineStyle.visible&&t[0].lineStyle.width)},e.prototype._render=function(t){this.finishPoly();var i=this._geometry;i.updateBatches(),i.batchable?(this.batchDirty!==i.batchDirty&&this._populateBatches(),this._renderBatched(t)):(t.batch.flush(),this._renderDirect(t))},e.prototype._populateBatches=function(){var t=this._geometry,i=this.blendMode,n=t.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=t.batchDirty,this.batches.length=n,this.vertexData=new Float32Array(t.points);for(var s=0;s<n;s++){var a=t.batches[s],o=a.style.color,h=new Float32Array(this.vertexData.buffer,a.attribStart*4*2,a.attribSize*2),u=new Float32Array(t.uvsFloat32.buffer,a.attribStart*4*2,a.attribSize*2),l=new Uint16Array(t.indicesUint16.buffer,a.start*2,a.size),f={vertexData:h,blendMode:i,indices:l,uvs:u,_batchRGB:Be(o),_tintRGB:o,_texture:a.style.texture,alpha:a.style.alpha,worldAlpha:1};this.batches[s]=f}},e.prototype._renderBatched=function(t){if(this.batches.length){t.batch.setObjectRenderer(t.plugins[this.pluginName]),this.calculateVertices(),this.calculateTints();for(var i=0,n=this.batches.length;i<n;i++){var s=this.batches[i];s.worldAlpha=this.worldAlpha*s.alpha,t.plugins[this.pluginName].render(s)}}},e.prototype._renderDirect=function(t){var i=this._resolveDirectShader(t),n=this._geometry,s=this.tint,a=this.worldAlpha,o=i.uniforms,h=n.drawCalls;o.translationMatrix=this.transform.worldTransform,o.tint[0]=(s>>16&255)/255*a,o.tint[1]=(s>>8&255)/255*a,o.tint[2]=(s&255)/255*a,o.tint[3]=a,t.shader.bind(i),t.geometry.bind(n,i),t.state.set(this.state);for(var u=0,l=h.length;u<l;u++)this._renderDrawCallDirect(t,n.drawCalls[u])},e.prototype._renderDrawCallDirect=function(t,i){for(var n=i.texArray,s=i.type,a=i.size,o=i.start,h=n.count,u=0;u<h;u++)t.texture.bind(n.elements[u],u);t.geometry.draw(s,a,o)},e.prototype._resolveDirectShader=function(t){var i=this.shader,n=this.pluginName;if(!i){if(!vn[n]){for(var s=t.plugins[n].MAX_TEXTURES,a=new Int32Array(s),o=0;o<s;o++)a[o]=o;var h={tint:new Float32Array([1,1,1,1]),translationMatrix:new gt,default:we.from({uSamplers:a},!0)},u=t.plugins[n]._shader.program;vn[n]=new ae(u,h)}i=vn[n]}return i},e.prototype._calculateBounds=function(){this.finishPoly();var t=this._geometry;if(t.graphicsData.length){var i=t.bounds,n=i.minX,s=i.minY,a=i.maxX,o=i.maxY;this._bounds.addFrame(this.transform,n,s,a,o)}},e.prototype.containsPoint=function(t){return this.worldTransform.applyInverse(t,e._TEMP_POINT),this._geometry.containsPoint(e._TEMP_POINT)},e.prototype.calculateTints=function(){if(this.batchTint!==this.tint){this.batchTint=this.tint;for(var t=Be(this.tint,ap),i=0;i<this.batches.length;i++){var n=this.batches[i],s=n._batchRGB,a=t[0]*s[0]*255,o=t[1]*s[1]*255,h=t[2]*s[2]*255,u=(a<<16)+(o<<8)+(h|0);n._tintRGB=(u>>16)+(u&65280)+((u&255)<<16)}}},e.prototype.calculateVertices=function(){var t=this.transform._worldID;if(this._transformID!==t){this._transformID=t;for(var i=this.transform.worldTransform,n=i.a,s=i.b,a=i.c,o=i.d,h=i.tx,u=i.ty,l=this._geometry.points,f=this.vertexData,c=0,d=0;d<l.length;d+=2){var p=l[d],v=l[d+1];f[c++]=n*p+a*v+h,f[c++]=o*v+s*p+u}}},e.prototype.closePath=function(){var t=this.currentPath;return t&&(t.closeStroke=!0,this.finishPoly()),this},e.prototype.setMatrix=function(t){return this._matrix=t,this},e.prototype.beginHole=function(){return this.finishPoly(),this._holeMode=!0,this},e.prototype.endHole=function(){return this.finishPoly(),this._holeMode=!1,this},e.prototype.destroy=function(t){this._geometry.refCount--,this._geometry.refCount===0&&this._geometry.dispose(),this._matrix=null,this.currentPath=null,this._lineStyle.destroy(),this._lineStyle=null,this._fillStyle.destroy(),this._fillStyle=null,this._geometry=null,this.shader=null,this.vertexData=null,this.batches.length=0,this.batches=null,r.prototype.destroy.call(this,t)},e.nextRoundedRectBehavior=!1,e._TEMP_POINT=new X,e}(Pt);var _n=function(r,e){return _n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},_n(r,e)};function op(r,e){_n(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var li=new X,hp=new Uint16Array([0,1,2,0,2,3]),fi=function(r){op(e,r);function e(t){var i=r.call(this)||this;return i._anchor=new Oe(i._onAnchorUpdate,i,t?t.defaultAnchor.x:0,t?t.defaultAnchor.y:0),i._texture=null,i._width=0,i._height=0,i._tint=null,i._tintRGB=null,i.tint=16777215,i.blendMode=G.NORMAL,i._cachedTint=16777215,i.uvs=null,i.texture=t||k.EMPTY,i.vertexData=new Float32Array(8),i.vertexTrimmedData=null,i._transformID=-1,i._textureID=-1,i._transformTrimmedID=-1,i._textureTrimmedID=-1,i.indices=hp,i.pluginName="batch",i.isSprite=!0,i._roundPixels=F.ROUND_PIXELS,i}return e.prototype._onTextureUpdate=function(){this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this._width&&(this.scale.x=Ue(this.scale.x)*this._width/this._texture.orig.width),this._height&&(this.scale.y=Ue(this.scale.y)*this._height/this._texture.orig.height)},e.prototype._onAnchorUpdate=function(){this._transformID=-1,this._transformTrimmedID=-1},e.prototype.calculateVertices=function(){var t=this._texture;if(!(this._transformID===this.transform._worldID&&this._textureID===t._updateID)){this._textureID!==t._updateID&&(this.uvs=this._texture._uvs.uvsFloat32),this._transformID=this.transform._worldID,this._textureID=t._updateID;var i=this.transform.worldTransform,n=i.a,s=i.b,a=i.c,o=i.d,h=i.tx,u=i.ty,l=this.vertexData,f=t.trim,c=t.orig,d=this._anchor,p=0,v=0,_=0,m=0;if(f?(v=f.x-d._x*c.width,p=v+f.width,m=f.y-d._y*c.height,_=m+f.height):(v=-d._x*c.width,p=v+c.width,m=-d._y*c.height,_=m+c.height),l[0]=n*v+a*m+h,l[1]=o*m+s*v+u,l[2]=n*p+a*m+h,l[3]=o*m+s*p+u,l[4]=n*p+a*_+h,l[5]=o*_+s*p+u,l[6]=n*v+a*_+h,l[7]=o*_+s*v+u,this._roundPixels)for(var g=F.RESOLUTION,y=0;y<l.length;++y)l[y]=Math.round((l[y]*g|0)/g)}},e.prototype.calculateTrimmedVertices=function(){if(!this.vertexTrimmedData)this.vertexTrimmedData=new Float32Array(8);else if(this._transformTrimmedID===this.transform._worldID&&this._textureTrimmedID===this._texture._updateID)return;this._transformTrimmedID=this.transform._worldID,this._textureTrimmedID=this._texture._updateID;var t=this._texture,i=this.vertexTrimmedData,n=t.orig,s=this._anchor,a=this.transform.worldTransform,o=a.a,h=a.b,u=a.c,l=a.d,f=a.tx,c=a.ty,d=-s._x*n.width,p=d+n.width,v=-s._y*n.height,_=v+n.height;i[0]=o*d+u*v+f,i[1]=l*v+h*d+c,i[2]=o*p+u*v+f,i[3]=l*v+h*p+c,i[4]=o*p+u*_+f,i[5]=l*_+h*p+c,i[6]=o*d+u*_+f,i[7]=l*_+h*d+c},e.prototype._render=function(t){this.calculateVertices(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this)},e.prototype._calculateBounds=function(){var t=this._texture.trim,i=this._texture.orig;!t||t.width===i.width&&t.height===i.height?(this.calculateVertices(),this._bounds.addQuad(this.vertexData)):(this.calculateTrimmedVertices(),this._bounds.addQuad(this.vertexTrimmedData))},e.prototype.getLocalBounds=function(t){return this.children.length===0?(this._localBounds||(this._localBounds=new Fi),this._localBounds.minX=this._texture.orig.width*-this._anchor._x,this._localBounds.minY=this._texture.orig.height*-this._anchor._y,this._localBounds.maxX=this._texture.orig.width*(1-this._anchor._x),this._localBounds.maxY=this._texture.orig.height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._localBounds.getRectangle(t)):r.prototype.getLocalBounds.call(this,t)},e.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,li);var i=this._texture.orig.width,n=this._texture.orig.height,s=-i*this.anchor.x,a=0;return li.x>=s&&li.x<s+i&&(a=-n*this.anchor.y,li.y>=a&&li.y<a+n)},e.prototype.destroy=function(t){r.prototype.destroy.call(this,t),this._texture.off("update",this._onTextureUpdate,this),this._anchor=null;var i=typeof t=="boolean"?t:t&&t.texture;if(i){var n=typeof t=="boolean"?t:t&&t.baseTexture;this._texture.destroy(!!n)}this._texture=null},e.from=function(t,i){var n=t instanceof k?t:k.from(t,i);return new e(n)},Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){this._roundPixels!==t&&(this._transformID=-1),this._roundPixels=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"width",{get:function(){return Math.abs(this.scale.x)*this._texture.orig.width},set:function(t){var i=Ue(this.scale.x)||1;this.scale.x=i*t/this._texture.orig.width,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return Math.abs(this.scale.y)*this._texture.orig.height},set:function(t){var i=Ue(this.scale.y)||1;this.scale.y=i*t/this._texture.orig.height,this._height=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"anchor",{get:function(){return this._anchor},set:function(t){this._anchor.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t,this._tintRGB=(t>>16)+(t&65280)+((t&255)<<16)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"texture",{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture&&this._texture.off("update",this._onTextureUpdate,this),this._texture=t||k.EMPTY,this._cachedTint=16777215,this._textureID=-1,this._textureTrimmedID=-1,t&&(t.baseTexture.valid?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))},enumerable:!1,configurable:!0}),e}(Pt);var mn=function(r,e){return mn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},mn(r,e)};function up(r,e){mn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var ci;(function(r){r[r.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",r[r.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL"})(ci||(ci={}));var gn={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:ci.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},lp=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],le=function(){function r(e){this.styleID=0,this.reset(),xn(this,e,e)}return r.prototype.clone=function(){var e={};return xn(e,this,gn),new r(e)},r.prototype.reset=function(){xn(this,gn,gn)},Object.defineProperty(r.prototype,"align",{get:function(){return this._align},set:function(e){this._align!==e&&(this._align=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"breakWords",{get:function(){return this._breakWords},set:function(e){this._breakWords!==e&&(this._breakWords=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadow",{get:function(){return this._dropShadow},set:function(e){this._dropShadow!==e&&(this._dropShadow=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadowAlpha",{get:function(){return this._dropShadowAlpha},set:function(e){this._dropShadowAlpha!==e&&(this._dropShadowAlpha=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadowAngle",{get:function(){return this._dropShadowAngle},set:function(e){this._dropShadowAngle!==e&&(this._dropShadowAngle=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadowBlur",{get:function(){return this._dropShadowBlur},set:function(e){this._dropShadowBlur!==e&&(this._dropShadowBlur=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadowColor",{get:function(){return this._dropShadowColor},set:function(e){var t=yn(e);this._dropShadowColor!==t&&(this._dropShadowColor=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dropShadowDistance",{get:function(){return this._dropShadowDistance},set:function(e){this._dropShadowDistance!==e&&(this._dropShadowDistance=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fill",{get:function(){return this._fill},set:function(e){var t=yn(e);this._fill!==t&&(this._fill=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fillGradientType",{get:function(){return this._fillGradientType},set:function(e){this._fillGradientType!==e&&(this._fillGradientType=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fillGradientStops",{get:function(){return this._fillGradientStops},set:function(e){fp(this._fillGradientStops,e)||(this._fillGradientStops=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fontFamily",{get:function(){return this._fontFamily},set:function(e){this.fontFamily!==e&&(this._fontFamily=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fontSize",{get:function(){return this._fontSize},set:function(e){this._fontSize!==e&&(this._fontSize=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fontStyle",{get:function(){return this._fontStyle},set:function(e){this._fontStyle!==e&&(this._fontStyle=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fontVariant",{get:function(){return this._fontVariant},set:function(e){this._fontVariant!==e&&(this._fontVariant=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"fontWeight",{get:function(){return this._fontWeight},set:function(e){this._fontWeight!==e&&(this._fontWeight=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"letterSpacing",{get:function(){return this._letterSpacing},set:function(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"lineHeight",{get:function(){return this._lineHeight},set:function(e){this._lineHeight!==e&&(this._lineHeight=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"leading",{get:function(){return this._leading},set:function(e){this._leading!==e&&(this._leading=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"lineJoin",{get:function(){return this._lineJoin},set:function(e){this._lineJoin!==e&&(this._lineJoin=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"miterLimit",{get:function(){return this._miterLimit},set:function(e){this._miterLimit!==e&&(this._miterLimit=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"padding",{get:function(){return this._padding},set:function(e){this._padding!==e&&(this._padding=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"stroke",{get:function(){return this._stroke},set:function(e){var t=yn(e);this._stroke!==t&&(this._stroke=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"strokeThickness",{get:function(){return this._strokeThickness},set:function(e){this._strokeThickness!==e&&(this._strokeThickness=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"textBaseline",{get:function(){return this._textBaseline},set:function(e){this._textBaseline!==e&&(this._textBaseline=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"trim",{get:function(){return this._trim},set:function(e){this._trim!==e&&(this._trim=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"whiteSpace",{get:function(){return this._whiteSpace},set:function(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"wordWrap",{get:function(){return this._wordWrap},set:function(e){this._wordWrap!==e&&(this._wordWrap=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"wordWrapWidth",{get:function(){return this._wordWrapWidth},set:function(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.styleID++)},enumerable:!1,configurable:!0}),r.prototype.toFontString=function(){var e=typeof this.fontSize=="number"?this.fontSize+"px":this.fontSize,t=this.fontFamily;Array.isArray(this.fontFamily)||(t=this.fontFamily.split(","));for(var i=t.length-1;i>=0;i--){var n=t[i].trim();!/([\"\'])[^\'\"]+\1/.test(n)&&lp.indexOf(n)<0&&(n='"'+n+'"'),t[i]=n}return this.fontStyle+" "+this.fontVariant+" "+this.fontWeight+" "+e+" "+t.join(",")},r}();function Aa(r){return typeof r=="number"?_s(r):(typeof r=="string"&&r.indexOf("0x")===0&&(r=r.replace("0x","#")),r)}function yn(r){if(Array.isArray(r)){for(var e=0;e<r.length;++e)r[e]=Aa(r[e]);return r}else return Aa(r)}function fp(r,e){if(!Array.isArray(r)||!Array.isArray(e)||r.length!==e.length)return!1;for(var t=0;t<r.length;++t)if(r[t]!==e[t])return!1;return!0}function xn(r,e,t){for(var i in t)Array.isArray(e[i])?r[i]=e[i].slice():r[i]=e[i]}var er={willReadFrequently:!0},Xt=function(){function r(e,t,i,n,s,a,o,h,u){this.text=e,this.style=t,this.width=i,this.height=n,this.lines=s,this.lineWidths=a,this.lineHeight=o,this.maxLineWidth=h,this.fontProperties=u}return r.measureText=function(e,t,i,n){n===void 0&&(n=r._canvas),i=i??t.wordWrap;var s=t.toFontString(),a=r.measureFont(s);a.fontSize===0&&(a.fontSize=t.fontSize,a.ascent=t.fontSize);var o=n.getContext("2d",er);o.font=s;for(var h=i?r.wordWrap(e,t,n):e,u=h.split(/(?:\r\n|\r|\n)/),l=new Array(u.length),f=0,c=0;c<u.length;c++){var d=o.measureText(u[c]).width+(u[c].length-1)*t.letterSpacing;l[c]=d,f=Math.max(f,d)}var p=f+t.strokeThickness;t.dropShadow&&(p+=t.dropShadowDistance);var v=t.lineHeight||a.fontSize+t.strokeThickness,_=Math.max(v,a.fontSize+t.strokeThickness)+(u.length-1)*(v+t.leading);return t.dropShadow&&(_+=t.dropShadowDistance),new r(e,t,p,_,u,l,v+t.leading,f,a)},r.wordWrap=function(e,t,i){i===void 0&&(i=r._canvas);for(var n=i.getContext("2d",er),s=0,a="",o="",h=Object.create(null),u=t.letterSpacing,l=t.whiteSpace,f=r.collapseSpaces(l),c=r.collapseNewlines(l),d=!f,p=t.wordWrapWidth+u,v=r.tokenize(e),_=0;_<v.length;_++){var m=v[_];if(r.isNewline(m)){if(!c){o+=r.addLine(a),d=!f,a="",s=0;continue}m=" "}if(f){var g=r.isBreakingSpace(m),y=r.isBreakingSpace(a[a.length-1]);if(g&&y)continue}var b=r.getFromCache(m,u,h,n);if(b>p)if(a!==""&&(o+=r.addLine(a),a="",s=0),r.canBreakWords(m,t.breakWords))for(var x=r.wordWrapSplit(m),T=0;T<x.length;T++){for(var w=x[T],A=1;x[T+A];){var S=x[T+A],E=w[w.length-1];if(!r.canBreakChars(E,S,m,T,t.breakWords))w+=S;else break;A++}T+=w.length-1;var D=r.getFromCache(w,u,h,n);D+s>p&&(o+=r.addLine(a),d=!1,a="",s=0),a+=w,s+=D}else{a.length>0&&(o+=r.addLine(a),a="",s=0);var C=_===v.length-1;o+=r.addLine(m,!C),d=!1,a="",s=0}else b+s>p&&(d=!1,o+=r.addLine(a),a="",s=0),(a.length>0||!r.isBreakingSpace(m)||d)&&(a+=m,s+=b)}return o+=r.addLine(a,!1),o},r.addLine=function(e,t){return t===void 0&&(t=!0),e=r.trimRight(e),e=t?e+`
525
- `:e,e},r.getFromCache=function(e,t,i,n){var s=i[e];if(typeof s!="number"){var a=e.length*t;s=n.measureText(e).width+a,i[e]=s}return s},r.collapseSpaces=function(e){return e==="normal"||e==="pre-line"},r.collapseNewlines=function(e){return e==="normal"},r.trimRight=function(e){if(typeof e!="string")return"";for(var t=e.length-1;t>=0;t--){var i=e[t];if(!r.isBreakingSpace(i))break;e=e.slice(0,-1)}return e},r.isNewline=function(e){return typeof e!="string"?!1:r._newlines.indexOf(e.charCodeAt(0))>=0},r.isBreakingSpace=function(e,t){return typeof e!="string"?!1:r._breakingSpaces.indexOf(e.charCodeAt(0))>=0},r.tokenize=function(e){var t=[],i="";if(typeof e!="string")return t;for(var n=0;n<e.length;n++){var s=e[n],a=e[n+1];if(r.isBreakingSpace(s,a)||r.isNewline(s)){i!==""&&(t.push(i),i=""),t.push(s);continue}i+=s}return i!==""&&t.push(i),t},r.canBreakWords=function(e,t){return t},r.canBreakChars=function(e,t,i,n,s){return!0},r.wordWrapSplit=function(e){return e.split("")},r.measureFont=function(e){if(r._fonts[e])return r._fonts[e];var t={ascent:0,descent:0,fontSize:0},i=r._canvas,n=r._context;n.font=e;var s=r.METRICS_STRING+r.BASELINE_SYMBOL,a=Math.ceil(n.measureText(s).width),o=Math.ceil(n.measureText(r.BASELINE_SYMBOL).width),h=Math.ceil(r.HEIGHT_MULTIPLIER*o);o=o*r.BASELINE_MULTIPLIER|0,i.width=a,i.height=h,n.fillStyle="#f00",n.fillRect(0,0,a,h),n.font=e,n.textBaseline="alphabetic",n.fillStyle="#000",n.fillText(s,0,o);var u=n.getImageData(0,0,a,h).data,l=u.length,f=a*4,c=0,d=0,p=!1;for(c=0;c<o;++c){for(var v=0;v<f;v+=4)if(u[d+v]!==255){p=!0;break}if(!p)d+=f;else break}for(t.ascent=o-c,d=l-f,p=!1,c=h;c>o;--c){for(var v=0;v<f;v+=4)if(u[d+v]!==255){p=!0;break}if(!p)d-=f;else break}return t.descent=c-o,t.fontSize=t.ascent+t.descent,r._fonts[e]=t,t},r.clearMetrics=function(e){e===void 0&&(e=""),e?delete r._fonts[e]:r._fonts={}},Object.defineProperty(r,"_canvas",{get:function(){if(!r.__canvas){var e=void 0;try{var t=new OffscreenCanvas(0,0),i=t.getContext("2d",er);if(i&&i.measureText)return r.__canvas=t,t;e=F.ADAPTER.createCanvas()}catch{e=F.ADAPTER.createCanvas()}e.width=e.height=10,r.__canvas=e}return r.__canvas},enumerable:!1,configurable:!0}),Object.defineProperty(r,"_context",{get:function(){return r.__context||(r.__context=r._canvas.getContext("2d",er)),r.__context},enumerable:!1,configurable:!0}),r}();Xt._fonts={},Xt.METRICS_STRING="|ÉqÅ",Xt.BASELINE_SYMBOL="M",Xt.BASELINE_MULTIPLIER=1.4,Xt.HEIGHT_MULTIPLIER=2,Xt._newlines=[10,13],Xt._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];var cp={texture:!0,children:!1,baseTexture:!0},Ia=function(r){up(e,r);function e(t,i,n){var s=this,a=!1;n||(n=F.ADAPTER.createCanvas(),a=!0),n.width=3,n.height=3;var o=k.from(n);return o.orig=new j,o.trim=new j,s=r.call(this,o)||this,s._ownCanvas=a,s.canvas=n,s.context=n.getContext("2d",{willReadFrequently:!0}),s._resolution=F.RESOLUTION,s._autoResolution=!0,s._text=null,s._style=null,s._styleListener=null,s._font="",s.text=t,s.style=i,s.localStyleID=-1,s}return e.prototype.updateText=function(t){var i=this._style;if(this.localStyleID!==i.styleID&&(this.dirty=!0,this.localStyleID=i.styleID),!(!this.dirty&&t)){this._font=this._style.toFontString();var n=this.context,s=Xt.measureText(this._text||" ",this._style,this._style.wordWrap,this.canvas),a=s.width,o=s.height,h=s.lines,u=s.lineHeight,l=s.lineWidths,f=s.maxLineWidth,c=s.fontProperties;this.canvas.width=Math.ceil(Math.ceil(Math.max(1,a)+i.padding*2)*this._resolution),this.canvas.height=Math.ceil(Math.ceil(Math.max(1,o)+i.padding*2)*this._resolution),n.scale(this._resolution,this._resolution),n.clearRect(0,0,this.canvas.width,this.canvas.height),n.font=this._font,n.lineWidth=i.strokeThickness,n.textBaseline=i.textBaseline,n.lineJoin=i.lineJoin,n.miterLimit=i.miterLimit;for(var d,p,v=i.dropShadow?2:1,_=0;_<v;++_){var m=i.dropShadow&&_===0,g=m?Math.ceil(Math.max(1,o)+i.padding*2):0,y=g*this._resolution;if(m){n.fillStyle="black",n.strokeStyle="black";var b=i.dropShadowColor,x=Be(typeof b=="number"?b:ms(b)),T=i.dropShadowBlur*this._resolution,w=i.dropShadowDistance*this._resolution;n.shadowColor="rgba("+x[0]*255+","+x[1]*255+","+x[2]*255+","+i.dropShadowAlpha+")",n.shadowBlur=T,n.shadowOffsetX=Math.cos(i.dropShadowAngle)*w,n.shadowOffsetY=Math.sin(i.dropShadowAngle)*w+y}else n.fillStyle=this._generateFillStyle(i,h,s),n.strokeStyle=i.stroke,n.shadowColor="black",n.shadowBlur=0,n.shadowOffsetX=0,n.shadowOffsetY=0;var A=(u-c.fontSize)/2;(!e.nextLineHeightBehavior||u-c.fontSize<0)&&(A=0);for(var S=0;S<h.length;S++)d=i.strokeThickness/2,p=i.strokeThickness/2+S*u+c.ascent+A,i.align==="right"?d+=f-l[S]:i.align==="center"&&(d+=(f-l[S])/2),i.stroke&&i.strokeThickness&&this.drawLetterSpacing(h[S],d+i.padding,p+i.padding-g,!0),i.fill&&this.drawLetterSpacing(h[S],d+i.padding,p+i.padding-g)}this.updateTexture()}},e.prototype.drawLetterSpacing=function(t,i,n,s){s===void 0&&(s=!1);var a=this._style,o=a.letterSpacing,h=e.experimentalLetterSpacing&&("letterSpacing"in CanvasRenderingContext2D.prototype||"textLetterSpacing"in CanvasRenderingContext2D.prototype);if(o===0||h){h&&(this.context.letterSpacing=o,this.context.textLetterSpacing=o),s?this.context.strokeText(t,i,n):this.context.fillText(t,i,n);return}for(var u=i,l=Array.from?Array.from(t):t.split(""),f=this.context.measureText(t).width,c=0,d=0;d<l.length;++d){var p=l[d];s?this.context.strokeText(p,u,n):this.context.fillText(p,u,n);for(var v="",_=d+1;_<l.length;++_)v+=l[_];c=this.context.measureText(v).width,u+=f-c+o,f=c}},e.prototype.updateTexture=function(){var t=this.canvas;if(this._style.trim){var i=df(t);i.data&&(t.width=i.width,t.height=i.height,this.context.putImageData(i.data,0,0))}var n=this._texture,s=this._style,a=s.trim?0:s.padding,o=n.baseTexture;n.trim.width=n._frame.width=t.width/this._resolution,n.trim.height=n._frame.height=t.height/this._resolution,n.trim.x=-a,n.trim.y=-a,n.orig.width=n._frame.width-a*2,n.orig.height=n._frame.height-a*2,this._onTextureUpdate(),o.setRealSize(t.width,t.height,this._resolution),n.updateUvs(),this.dirty=!1},e.prototype._render=function(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0),this.updateText(!0),r.prototype._render.call(this,t)},e.prototype.updateTransform=function(){this.updateText(!0),r.prototype.updateTransform.call(this)},e.prototype.getBounds=function(t,i){return this.updateText(!0),this._textureID===-1&&(t=!1),r.prototype.getBounds.call(this,t,i)},e.prototype.getLocalBounds=function(t){return this.updateText(!0),r.prototype.getLocalBounds.call(this,t)},e.prototype._calculateBounds=function(){this.calculateVertices(),this._bounds.addQuad(this.vertexData)},e.prototype._generateFillStyle=function(t,i,n){var s=t.fill;if(Array.isArray(s)){if(s.length===1)return s[0]}else return s;var a,o=t.dropShadow?t.dropShadowDistance:0,h=t.padding||0,u=this.canvas.width/this._resolution-o-h*2,l=this.canvas.height/this._resolution-o-h*2,f=s.slice(),c=t.fillGradientStops.slice();if(!c.length)for(var d=f.length+1,p=1;p<d;++p)c.push(p/d);if(f.unshift(s[0]),c.unshift(0),f.push(s[s.length-1]),c.push(1),t.fillGradientType===ci.LINEAR_VERTICAL){a=this.context.createLinearGradient(u/2,h,u/2,l+h);for(var v=n.fontProperties.fontSize+t.strokeThickness,p=0;p<i.length;p++){var _=n.lineHeight*(p-1)+v,m=n.lineHeight*p,g=m;p>0&&_>m&&(g=(m+_)/2);var y=m+v,b=n.lineHeight*(p+1),x=y;p+1<i.length&&b<y&&(x=(y+b)/2);for(var T=(x-g)/l,w=0;w<f.length;w++){var A=0;typeof c[w]=="number"?A=c[w]:A=w/f.length;var S=Math.min(1,Math.max(0,g/l+A*T));S=Number(S.toFixed(5)),a.addColorStop(S,f[w])}}}else{a=this.context.createLinearGradient(h,l/2,u+h,l/2);for(var E=f.length+1,D=1,p=0;p<f.length;p++){var C=void 0;typeof c[p]=="number"?C=c[p]:C=D/E,a.addColorStop(C,f[p]),D++}}return a},e.prototype.destroy=function(t){typeof t=="boolean"&&(t={children:t}),t=Object.assign({},cp,t),r.prototype.destroy.call(this,t),this._ownCanvas&&(this.canvas.height=this.canvas.width=0),this.context=null,this.canvas=null,this._style=null},Object.defineProperty(e.prototype,"width",{get:function(){return this.updateText(!0),Math.abs(this.scale.x)*this._texture.orig.width},set:function(t){this.updateText(!0);var i=Ue(this.scale.x)||1;this.scale.x=i*t/this._texture.orig.width,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.updateText(!0),Math.abs(this.scale.y)*this._texture.orig.height},set:function(t){this.updateText(!0);var i=Ue(this.scale.y)||1;this.scale.y=i*t/this._texture.orig.height,this._height=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"style",{get:function(){return this._style},set:function(t){t=t||{},t instanceof le?this._style=t:this._style=new le(t),this.localStyleID=-1,this.dirty=!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){t=String(t??""),this._text!==t&&(this._text=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._autoResolution=!1,this._resolution!==t&&(this._resolution=t,this.dirty=!0)},enumerable:!1,configurable:!0}),e.nextLineHeightBehavior=!1,e.experimentalLetterSpacing=!1,e}(fi);F.UPLOADS_PER_FRAME=4;var bn=function(r,e){return bn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},bn(r,e)};function dp(r,e){bn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var pp=function(){function r(e){this.maxItemsPerFrame=e,this.itemsLeft=0}return r.prototype.beginFrame=function(){this.itemsLeft=this.maxItemsPerFrame},r.prototype.allowedToUpload=function(){return this.itemsLeft-- >0},r}();function vp(r,e){var t=!1;if(r&&r._textures&&r._textures.length){for(var i=0;i<r._textures.length;i++)if(r._textures[i]instanceof k){var n=r._textures[i].baseTexture;e.indexOf(n)===-1&&(e.push(n),t=!0)}}return t}function _p(r,e){if(r.baseTexture instanceof V){var t=r.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function mp(r,e){if(r._texture&&r._texture instanceof k){var t=r._texture.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function gp(r,e){return e instanceof Ia?(e.updateText(!0),!0):!1}function yp(r,e){if(e instanceof le){var t=e.toFontString();return Xt.measureFont(t),!0}return!1}function xp(r,e){if(r instanceof Ia){e.indexOf(r.style)===-1&&e.push(r.style),e.indexOf(r)===-1&&e.push(r);var t=r._texture.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function bp(r,e){return r instanceof le?(e.indexOf(r)===-1&&e.push(r),!0):!1}var Tp=function(){function r(e){var t=this;this.limiter=new pp(F.UPLOADS_PER_FRAME),this.renderer=e,this.uploadHookHelper=null,this.queue=[],this.addHooks=[],this.uploadHooks=[],this.completes=[],this.ticking=!1,this.delayedTick=function(){t.queue&&t.prepareItems()},this.registerFindHook(xp),this.registerFindHook(bp),this.registerFindHook(vp),this.registerFindHook(_p),this.registerFindHook(mp),this.registerUploadHook(gp),this.registerUploadHook(yp)}return r.prototype.upload=function(e,t){var i=this;return typeof e=="function"&&(t=e,e=null),t&&Ut("6.5.0","BasePrepare.upload callback is deprecated, use the return Promise instead."),new Promise(function(n){e&&i.add(e);var s=function(){t==null||t(),n()};i.queue.length?(i.completes.push(s),i.ticking||(i.ticking=!0,Tt.system.addOnce(i.tick,i,$t.UTILITY))):s()})},r.prototype.tick=function(){setTimeout(this.delayedTick,0)},r.prototype.prepareItems=function(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){var e=this.queue[0],t=!1;if(e&&!e._destroyed){for(var i=0,n=this.uploadHooks.length;i<n;i++)if(this.uploadHooks[i](this.uploadHookHelper,e)){this.queue.shift(),t=!0;break}}t||this.queue.shift()}if(this.queue.length)Tt.system.addOnce(this.tick,this,$t.UTILITY);else{this.ticking=!1;var s=this.completes.slice(0);this.completes.length=0;for(var i=0,n=s.length;i<n;i++)s[i]()}},r.prototype.registerFindHook=function(e){return e&&this.addHooks.push(e),this},r.prototype.registerUploadHook=function(e){return e&&this.uploadHooks.push(e),this},r.prototype.add=function(e){for(var t=0,i=this.addHooks.length;t<i&&!this.addHooks[t](e,this.queue);t++);if(e instanceof Pt)for(var t=e.children.length-1;t>=0;t--)this.add(e.children[t]);return this},r.prototype.destroy=function(){this.ticking&&Tt.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},r}();function Oa(r,e){return e instanceof V?(e._glTextures[r.CONTEXT_UID]||r.texture.bind(e),!0):!1}function wp(r,e){if(!(e instanceof Ae))return!1;var t=e.geometry;e.finishPoly(),t.updateBatches();for(var i=t.batches,n=0;n<i.length;n++){var s=i[n].style.texture;s&&Oa(r,s.baseTexture)}return t.batchable||r.geometry.bind(t,e._resolveDirectShader(r)),!0}function Ep(r,e){return r instanceof Ae?(e.push(r),!0):!1}var Sp=function(r){dp(e,r);function e(t){var i=r.call(this,t)||this;return i.uploadHookHelper=i.renderer,i.registerFindHook(Ep),i.registerUploadHook(Oa),i.registerUploadHook(wp),i}return e.extension={name:"prepare",type:tt.RendererPlugin},e}(Tp);var Pp=function(){function r(e,t,i){i===void 0&&(i=null),this.linkedSheets=[],this._texture=e instanceof k?e:null,this.baseTexture=e instanceof V?e:this._texture.baseTexture,this.textures={},this.animations={},this.data=t;var n=this.baseTexture.resource;this.resolution=this._updateResolution(i||(n?n.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}return r.prototype._updateResolution=function(e){e===void 0&&(e=null);var t=this.data.meta.scale,i=Di(e,null);return i===null&&(i=t!==void 0?parseFloat(t):1),i!==1&&this.baseTexture.setResolution(i),i},r.prototype.parse=function(e){var t=this;return e&&Ut("6.5.0","Spritesheet.parse callback is deprecated, use the return Promise instead."),new Promise(function(i){t._callback=function(n){e==null||e(n),i(n)},t._batchIndex=0,t._frameKeys.length<=r.BATCH_SIZE?(t._processFrames(0),t._processAnimations(),t._parseComplete()):t._nextBatch()})},r.prototype._processFrames=function(e){for(var t=e,i=r.BATCH_SIZE;t-e<i&&t<this._frameKeys.length;){var n=this._frameKeys[t],s=this._frames[n],a=s.frame;if(a){var o=null,h=null,u=s.trimmed!==!1&&s.sourceSize?s.sourceSize:s.frame,l=new j(0,0,Math.floor(u.w)/this.resolution,Math.floor(u.h)/this.resolution);s.rotated?o=new j(Math.floor(a.x)/this.resolution,Math.floor(a.y)/this.resolution,Math.floor(a.h)/this.resolution,Math.floor(a.w)/this.resolution):o=new j(Math.floor(a.x)/this.resolution,Math.floor(a.y)/this.resolution,Math.floor(a.w)/this.resolution,Math.floor(a.h)/this.resolution),s.trimmed!==!1&&s.spriteSourceSize&&(h=new j(Math.floor(s.spriteSourceSize.x)/this.resolution,Math.floor(s.spriteSourceSize.y)/this.resolution,Math.floor(a.w)/this.resolution,Math.floor(a.h)/this.resolution)),this.textures[n]=new k(this.baseTexture,o,l,h,s.rotated?2:0,s.anchor),k.addToCache(this.textures[n],n)}t++}},r.prototype._processAnimations=function(){var e=this.data.animations||{};for(var t in e){this.animations[t]=[];for(var i=0;i<e[t].length;i++){var n=e[t][i];this.animations[t].push(this.textures[n])}}},r.prototype._parseComplete=function(){var e=this._callback;this._callback=null,this._batchIndex=0,e.call(this,this.textures)},r.prototype._nextBatch=function(){var e=this;this._processFrames(this._batchIndex*r.BATCH_SIZE),this._batchIndex++,setTimeout(function(){e._batchIndex*r.BATCH_SIZE<e._frameKeys.length?e._nextBatch():(e._processAnimations(),e._parseComplete())},0)},r.prototype.destroy=function(e){var t;e===void 0&&(e=!1);for(var i in this.textures)this.textures[i].destroy();this._frames=null,this._frameKeys=null,this.data=null,this.textures=null,e&&((t=this._texture)===null||t===void 0||t.destroy(),this.baseTexture.destroy()),this._texture=null,this.baseTexture=null,this.linkedSheets=[]},r.BATCH_SIZE=1e3,r}(),Rp=function(){function r(){}return r.use=function(e,t){var i,n,s=this,a=e.name+"_image";if(!e.data||e.type!==ct.TYPE.JSON||!e.data.frames||s.resources[a]){t();return}var o=(n=(i=e.data)===null||i===void 0?void 0:i.meta)===null||n===void 0?void 0:n.related_multi_packs;if(Array.isArray(o))for(var h=function(p){if(typeof p!="string")return"continue";var v=p.replace(".json",""),_=Ne.resolve(e.url.replace(s.baseUrl,""),p);if(s.resources[v]||Object.values(s.resources).some(function(g){return Ne.format(Ne.parse(g.url))===_}))return"continue";var m={crossOrigin:e.crossOrigin,loadType:ct.LOAD_TYPE.XHR,xhrType:ct.XHR_RESPONSE_TYPE.JSON,parentResource:e,metadata:e.metadata};s.add(v,_,m)},u=0,l=o;u<l.length;u++){var f=l[u];h(f)}var c={crossOrigin:e.crossOrigin,metadata:e.metadata.imageMetadata,parentResource:e},d=r.getResourcePath(e,s.baseUrl);s.add(a,d,c,function(v){if(v.error){t(v.error);return}var _=new Pp(v.texture,e.data,e.url);_.parse().then(function(){e.spritesheet=_,e.textures=_.textures,t()})})},r.getResourcePath=function(e,t){return e.isDataUrl?e.data.meta.image:Ne.resolve(e.url.replace(t,""),e.data.meta.image)},r.extension=tt.Loader,r}();var Tn=function(r,e){return Tn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Tn(r,e)};function Ma(r,e){Tn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var di=new X;(function(r){Ma(e,r);function e(t,i,n){i===void 0&&(i=100),n===void 0&&(n=100);var s=r.call(this,t)||this;return s.tileTransform=new Wn,s._width=i,s._height=n,s.uvMatrix=s.texture.uvMatrix||new Vr(t),s.pluginName="tilingSprite",s.uvRespectAnchor=!1,s}return Object.defineProperty(e.prototype,"clampMargin",{get:function(){return this.uvMatrix.clampMargin},set:function(t){this.uvMatrix.clampMargin=t,this.uvMatrix.update(!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tileScale",{get:function(){return this.tileTransform.scale},set:function(t){this.tileTransform.scale.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tilePosition",{get:function(){return this.tileTransform.position},set:function(t){this.tileTransform.position.copyFrom(t)},enumerable:!1,configurable:!0}),e.prototype._onTextureUpdate=function(){this.uvMatrix&&(this.uvMatrix.texture=this._texture),this._cachedTint=16777215},e.prototype._render=function(t){var i=this._texture;!i||!i.valid||(this.tileTransform.updateLocalTransform(),this.uvMatrix.update(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this))},e.prototype._calculateBounds=function(){var t=this._width*-this._anchor._x,i=this._height*-this._anchor._y,n=this._width*(1-this._anchor._x),s=this._height*(1-this._anchor._y);this._bounds.addFrame(this.transform,t,i,n,s)},e.prototype.getLocalBounds=function(t){return this.children.length===0?(this._bounds.minX=this._width*-this._anchor._x,this._bounds.minY=this._height*-this._anchor._y,this._bounds.maxX=this._width*(1-this._anchor._x),this._bounds.maxY=this._height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._bounds.getRectangle(t)):r.prototype.getLocalBounds.call(this,t)},e.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,di);var i=this._width,n=this._height,s=-i*this.anchor._x;if(di.x>=s&&di.x<s+i){var a=-n*this.anchor._y;if(di.y>=a&&di.y<a+n)return!0}return!1},e.prototype.destroy=function(t){r.prototype.destroy.call(this,t),this.tileTransform=null,this.uvMatrix=null},e.from=function(t,i){var n=t instanceof k?t:k.from(t,i);return new e(n,i.width,i.height)},Object.defineProperty(e.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t},enumerable:!1,configurable:!0}),e})(fi);var Cp=`#version 100
528
+ `,oG=function(l){sr(e,l);function e(t){var i=l.call(this,t)||this;return i.shader=null,i.properties=null,i.tempMatrix=new vt,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:K.UNSIGNED_BYTE,uploadFunction:i.uploadTint,offset:0}],i.shader=je.from(rG,hG,{}),i.state=Vi.for2d(),i}return e.prototype.render=function(t){var i=t.children,n=t._maxSize,a=t._batchSize,s=this.renderer,d=i.length;if(d!==0){d>n&&!t.autoResize&&(d=n);var h=t._buffers;h||(h=t._buffers=this.generateBuffers(t));var r=i[0]._texture.baseTexture,o=r.alphaMode>0;this.state.blendMode=sh(t.blendMode,o),s.state.set(this.state);var c=s.gl,u=t.worldTransform.copyTo(this.tempMatrix);u.prepend(s.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=u.toArray(!0),this.shader.uniforms.uColor=LZ(t.tintRgb,t.worldAlpha,this.shader.uniforms.uColor,o),this.shader.uniforms.uSampler=r,this.renderer.shader.bind(this.shader);for(var m=!1,b=0,Z=0;b<d;b+=a,Z+=1){var p=d-b;p>a&&(p=a),Z>=h.length&&h.push(this._generateOneMoreBuffer(t));var G=h[Z];G.uploadDynamic(i,b,p);var X=t._bufferUpdateIDs[Z]||0;m=m||G._updateID<X,m&&(G._updateID=t._updateID,G.uploadStatic(i,b,p)),s.geometry.bind(G.geometry),c.drawElements(c.TRIANGLES,p*6,c.UNSIGNED_SHORT,0)}}},e.prototype.generateBuffers=function(t){for(var i=[],n=t._maxSize,a=t._batchSize,s=t._properties,d=0;d<n;d+=a)i.push(new dr(this.properties,s,a));return i},e.prototype._generateOneMoreBuffer=function(t){var i=t._batchSize,n=t._properties;return new dr(this.properties,n,i)},e.prototype.uploadVertices=function(t,i,n,a,s,d){for(var h=0,r=0,o=0,c=0,u=0;u<n;++u){var m=t[i+u],b=m._texture,Z=m.scale.x,p=m.scale.y,G=b.trim,X=b.orig;G?(r=G.x-m.anchor.x*X.width,h=r+G.width,c=G.y-m.anchor.y*X.height,o=c+G.height):(h=X.width*(1-m.anchor.x),r=X.width*-m.anchor.x,o=X.height*(1-m.anchor.y),c=X.height*-m.anchor.y),a[d]=r*Z,a[d+1]=c*p,a[d+s]=h*Z,a[d+s+1]=c*p,a[d+s*2]=h*Z,a[d+s*2+1]=o*p,a[d+s*3]=r*Z,a[d+s*3+1]=o*p,d+=s*4}},e.prototype.uploadPosition=function(t,i,n,a,s,d){for(var h=0;h<n;h++){var r=t[i+h].position;a[d]=r.x,a[d+1]=r.y,a[d+s]=r.x,a[d+s+1]=r.y,a[d+s*2]=r.x,a[d+s*2+1]=r.y,a[d+s*3]=r.x,a[d+s*3+1]=r.y,d+=s*4}},e.prototype.uploadRotation=function(t,i,n,a,s,d){for(var h=0;h<n;h++){var r=t[i+h].rotation;a[d]=r,a[d+s]=r,a[d+s*2]=r,a[d+s*3]=r,d+=s*4}},e.prototype.uploadUvs=function(t,i,n,a,s,d){for(var h=0;h<n;++h){var r=t[i+h]._texture._uvs;r?(a[d]=r.x0,a[d+1]=r.y0,a[d+s]=r.x1,a[d+s+1]=r.y1,a[d+s*2]=r.x2,a[d+s*2+1]=r.y2,a[d+s*3]=r.x3,a[d+s*3+1]=r.y3,d+=s*4):(a[d]=0,a[d+1]=0,a[d+s]=0,a[d+s+1]=0,a[d+s*2]=0,a[d+s*2+1]=0,a[d+s*3]=0,a[d+s*3+1]=0,d+=s*4)}},e.prototype.uploadTint=function(t,i,n,a,s,d){for(var h=0;h<n;++h){var r=t[i+h],o=r._texture.baseTexture.alphaMode>0,c=r.alpha,u=c<1&&o?xa(r._tintRGB,c):r._tintRGB+(c*255<<24);a[d]=u,a[d+s]=u,a[d+s*2]=u,a[d+s*3]=u,d+=s*4}},e.prototype.destroy=function(){l.prototype.destroy.call(this),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null},e.extension={name:"particle",type:nt.RendererPlugin},e}(bn);var Ke;(function(l){l.MITER="miter",l.BEVEL="bevel",l.ROUND="round"})(Ke||(Ke={}));var Ae;(function(l){l.BUTT="butt",l.ROUND="round",l.SQUARE="square"})(Ae||(Ae={}));var Sl={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount:function(l,e){if(e===void 0&&(e=20),!this.adaptive||!l||isNaN(l))return e;var t=Math.ceil(l/this.maxLength);return t<this.minSegments?t=this.minSegments:t>this.maxSegments&&(t=this.maxSegments),t}},hr=function(){function l(){this.color=16777215,this.alpha=1,this.texture=z.WHITE,this.matrix=null,this.visible=!1,this.reset()}return l.prototype.clone=function(){var e=new l;return e.color=this.color,e.alpha=this.alpha,e.texture=this.texture,e.matrix=this.matrix,e.visible=this.visible,e},l.prototype.reset=function(){this.color=16777215,this.alpha=1,this.texture=z.WHITE,this.matrix=null,this.visible=!1},l.prototype.destroy=function(){this.texture=null,this.matrix=null},l}();var ss=function(l,e){return ss=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},ss(l,e)};function ds(l,e){ss(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}function rr(l,e){var t,i;e===void 0&&(e=!1);var n=l.length;if(!(n<6)){for(var a=0,s=0,d=l[n-2],h=l[n-1];s<n;s+=2){var r=l[s],o=l[s+1];a+=(r-d)*(o+h),d=r,h=o}if(!e&&a>0||e&&a<=0)for(var c=n/2,s=c+c%2;s<n;s+=2){var u=n-s-2,m=n-s-1,b=s,Z=s+1;t=[l[b],l[u]],l[u]=t[0],l[b]=t[1],i=[l[Z],l[m]],l[m]=i[0],l[Z]=i[1]}}}var or={build:function(l){l.points=l.shape.points.slice()},triangulate:function(l,e){var t=l.points,i=l.holes,n=e.points,a=e.indices;if(t.length>=6){rr(t,!1);for(var s=[],d=0;d<i.length;d++){var h=i[d];rr(h.points,!0),s.push(t.length/2),t=t.concat(h.points)}var r=ln.exports(t,s,2);if(!r)return;for(var o=n.length/2,d=0;d<r.length;d+=3)a.push(r[d]+o),a.push(r[d+1]+o),a.push(r[d+2]+o);for(var d=0;d<t.length;d++)n.push(t[d])}}},gn={build:function(l){var e=l.points,t,i,n,a,s,d;if(l.type===Tt.CIRC){var h=l.shape;t=h.x,i=h.y,s=d=h.radius,n=a=0}else if(l.type===Tt.ELIP){var r=l.shape;t=r.x,i=r.y,s=r.width,d=r.height,n=a=0}else{var o=l.shape,c=o.width/2,u=o.height/2;t=o.x+c,i=o.y+u,s=d=Math.max(0,Math.min(o.radius,Math.min(c,u))),n=c-s,a=u-d}if(!(s>=0&&d>=0&&n>=0&&a>=0)){e.length=0;return}var m=Math.ceil(2.3*Math.sqrt(s+d)),b=m*8+(n?4:0)+(a?4:0);if(e.length=b,b!==0){if(m===0){e.length=8,e[0]=e[6]=t+n,e[1]=e[3]=i+a,e[2]=e[4]=t-n,e[5]=e[7]=i-a;return}var Z=0,p=m*4+(n?2:0)+2,G=p,X=b;{var y=n+s,R=a,V=t+y,W=t-y,f=i+R;if(e[Z++]=V,e[Z++]=f,e[--p]=f,e[--p]=W,a){var x=i-R;e[G++]=W,e[G++]=x,e[--X]=x,e[--X]=V}}for(var L=1;L<m;L++){var S=Math.PI/2*(L/m),y=n+Math.cos(S)*s,R=a+Math.sin(S)*d,V=t+y,W=t-y,f=i+R,x=i-R;e[Z++]=V,e[Z++]=f,e[--p]=f,e[--p]=W,e[G++]=W,e[G++]=x,e[--X]=x,e[--X]=V}{var y=n,R=a+d,V=t+y,W=t-y,f=i+R,x=i-R;e[Z++]=V,e[Z++]=f,e[--X]=x,e[--X]=V,n&&(e[Z++]=W,e[Z++]=f,e[--X]=x,e[--X]=W)}}},triangulate:function(l,e){var t=l.points,i=e.points,n=e.indices;if(t.length!==0){var a=i.length/2,s=a,d,h;if(l.type!==Tt.RREC){var r=l.shape;d=r.x,h=r.y}else{var o=l.shape;d=o.x+o.width/2,h=o.y+o.height/2}var c=l.matrix;i.push(l.matrix?c.a*d+c.c*h+c.tx:d,l.matrix?c.b*d+c.d*h+c.ty:h),a++,i.push(t[0],t[1]);for(var u=2;u<t.length;u+=2)i.push(t[u],t[u+1]),n.push(a++,s,a);n.push(s+1,s,a)}}},cG={build:function(l){var e=l.shape,t=e.x,i=e.y,n=e.width,a=e.height,s=l.points;s.length=0,s.push(t,i,t+n,i,t+n,i+a,t,i+a)},triangulate:function(l,e){var t=l.points,i=e.points,n=i.length/2;i.push(t[0],t[1],t[2],t[3],t[6],t[7],t[4],t[5]),e.indices.push(n,n+1,n+2,n+1,n+2,n+3)}};function zi(l,e,t){var i=e-l;return l+i*t}function Tn(l,e,t,i,n,a,s){s===void 0&&(s=[]);for(var d=20,h=s,r=0,o=0,c=0,u=0,m=0,b=0,Z=0,p=0;Z<=d;++Z)p=Z/d,r=zi(l,t,p),o=zi(e,i,p),c=zi(t,n,p),u=zi(i,a,p),m=zi(r,c,p),b=zi(o,u,p),!(Z===0&&h[h.length-2]===m&&h[h.length-1]===b)&&h.push(m,b);return h}var uG={build:function(l){if(Ve.nextRoundedRectBehavior){gn.build(l);return}var e=l.shape,t=l.points,i=e.x,n=e.y,a=e.width,s=e.height,d=Math.max(0,Math.min(e.radius,Math.min(a,s)/2));t.length=0,d?(Tn(i,n+d,i,n,i+d,n,t),Tn(i+a-d,n,i+a,n,i+a,n+d,t),Tn(i+a,n+s-d,i+a,n+s,i+a-d,n+s,t),Tn(i+d,n+s,i,n+s,i,n+s-d,t)):t.push(i,n,i+a,n,i+a,n+s,i,n+s)},triangulate:function(l,e){if(Ve.nextRoundedRectBehavior){gn.triangulate(l,e);return}for(var t=l.points,i=e.points,n=e.indices,a=i.length/2,s=ln.exports(t,null,2),d=0,h=s.length;d<h;d+=3)n.push(s[d]+a),n.push(s[d+1]+a),n.push(s[d+2]+a);for(var d=0,h=t.length;d<h;d++)i.push(t[d],t[++d])}};function cr(l,e,t,i,n,a,s,d){var h=l-t*n,r=e-i*n,o=l+t*a,c=e+i*a,u,m;s?(u=i,m=-t):(u=-i,m=t);var b=h+u,Z=r+m,p=o+u,G=c+m;return d.push(b,Z),d.push(p,G),2}function fi(l,e,t,i,n,a,s,d){var h=t-l,r=i-e,o=Math.atan2(h,r),c=Math.atan2(n-l,a-e);d&&o<c?o+=Math.PI*2:!d&&o>c&&(c+=Math.PI*2);var u=o,m=c-o,b=Math.abs(m),Z=Math.sqrt(h*h+r*r),p=(15*b*Math.sqrt(Z)/Math.PI>>0)+1,G=m/p;if(u+=G,d){s.push(l,e),s.push(t,i);for(var X=1,y=u;X<p;X++,y+=G)s.push(l,e),s.push(l+Math.sin(y)*Z,e+Math.cos(y)*Z);s.push(l,e),s.push(n,a)}else{s.push(t,i),s.push(l,e);for(var X=1,y=u;X<p;X++,y+=G)s.push(l+Math.sin(y)*Z,e+Math.cos(y)*Z),s.push(l,e);s.push(n,a),s.push(l,e)}return p*2}function mG(l,e){var t=l.shape,i=l.points||t.points.slice(),n=e.closePointEps;if(i.length!==0){var a=l.lineStyle,s=new _(i[0],i[1]),d=new _(i[i.length-2],i[i.length-1]),h=t.type!==Tt.POLY||t.closeStroke,r=Math.abs(s.x-d.x)<n&&Math.abs(s.y-d.y)<n;if(h){i=i.slice(),r&&(i.pop(),i.pop(),d.set(i[i.length-2],i[i.length-1]));var o=(s.x+d.x)*.5,c=(d.y+s.y)*.5;i.unshift(o,c),i.push(o,c)}var u=e.points,m=i.length/2,b=i.length,Z=u.length/2,p=a.width/2,G=p*p,X=a.miterLimit*a.miterLimit,y=i[0],R=i[1],V=i[2],W=i[3],f=0,x=0,L=-(R-W),S=y-V,Y=0,J=0,F=Math.sqrt(L*L+S*S);L/=F,S/=F,L*=p,S*=p;var M=a.alignment,g=(1-M)*2,v=M*2;h||(a.cap===Ae.ROUND?b+=fi(y-L*(g-v)*.5,R-S*(g-v)*.5,y-L*g,R-S*g,y+L*v,R+S*v,u,!0)+2:a.cap===Ae.SQUARE&&(b+=cr(y,R,L,S,g,v,!0,u))),u.push(y-L*g,R-S*g),u.push(y+L*v,R+S*v);for(var C=1;C<m-1;++C){y=i[(C-1)*2],R=i[(C-1)*2+1],V=i[C*2],W=i[C*2+1],f=i[(C+1)*2],x=i[(C+1)*2+1],L=-(R-W),S=y-V,F=Math.sqrt(L*L+S*S),L/=F,S/=F,L*=p,S*=p,Y=-(W-x),J=V-f,F=Math.sqrt(Y*Y+J*J),Y/=F,J/=F,Y*=p,J*=p;var B=V-y,P=R-W,T=V-f,I=x-W,k=B*T+P*I,A=P*T-I*B,Q=A<0;if(Math.abs(A)<.001*Math.abs(k)){u.push(V-L*g,W-S*g),u.push(V+L*v,W+S*v),k>=0&&(a.join===Ke.ROUND?b+=fi(V,W,V-L*g,W-S*g,V-Y*g,W-J*g,u,!1)+4:b+=2,u.push(V-Y*v,W-J*v),u.push(V+Y*g,W+J*g));continue}var lt=(-L+y)*(-S+W)-(-L+V)*(-S+R),ot=(-Y+f)*(-J+W)-(-Y+V)*(-J+x),ct=(B*ot-T*lt)/A,Ut=(I*lt-P*ot)/A,Mt=(ct-V)*(ct-V)+(Ut-W)*(Ut-W),ft=V+(ct-V)*g,at=W+(Ut-W)*g,rt=V-(ct-V)*v,ut=W-(Ut-W)*v,$=Math.min(B*B+P*P,T*T+I*I),Et=Q?g:v,Dt=$+Et*Et*G,et=Mt<=Dt;et?a.join===Ke.BEVEL||Mt/G>X?(Q?(u.push(ft,at),u.push(V+L*v,W+S*v),u.push(ft,at),u.push(V+Y*v,W+J*v)):(u.push(V-L*g,W-S*g),u.push(rt,ut),u.push(V-Y*g,W-J*g),u.push(rt,ut)),b+=2):a.join===Ke.ROUND?Q?(u.push(ft,at),u.push(V+L*v,W+S*v),b+=fi(V,W,V+L*v,W+S*v,V+Y*v,W+J*v,u,!0)+4,u.push(ft,at),u.push(V+Y*v,W+J*v)):(u.push(V-L*g,W-S*g),u.push(rt,ut),b+=fi(V,W,V-L*g,W-S*g,V-Y*g,W-J*g,u,!1)+4,u.push(V-Y*g,W-J*g),u.push(rt,ut)):(u.push(ft,at),u.push(rt,ut)):(u.push(V-L*g,W-S*g),u.push(V+L*v,W+S*v),a.join===Ke.ROUND?Q?b+=fi(V,W,V+L*v,W+S*v,V+Y*v,W+J*v,u,!0)+2:b+=fi(V,W,V-L*g,W-S*g,V-Y*g,W-J*g,u,!1)+2:a.join===Ke.MITER&&Mt/G<=X&&(Q?(u.push(rt,ut),u.push(rt,ut)):(u.push(ft,at),u.push(ft,at)),b+=2),u.push(V-Y*g,W-J*g),u.push(V+Y*v,W+J*v),b+=2)}y=i[(m-2)*2],R=i[(m-2)*2+1],V=i[(m-1)*2],W=i[(m-1)*2+1],L=-(R-W),S=y-V,F=Math.sqrt(L*L+S*S),L/=F,S/=F,L*=p,S*=p,u.push(V-L*g,W-S*g),u.push(V+L*v,W+S*v),h||(a.cap===Ae.ROUND?b+=fi(V-L*(g-v)*.5,W-S*(g-v)*.5,V-L*g,W-S*g,V+L*v,W+S*v,u,!1)+2:a.cap===Ae.SQUARE&&(b+=cr(V,W,L,S,g,v,!1,u)));for(var Je=e.indices,dl=Sl.epsilon*Sl.epsilon,C=Z;C<b+Z-2;++C)y=u[C*2],R=u[C*2+1],V=u[(C+1)*2],W=u[(C+1)*2+1],f=u[(C+2)*2],x=u[(C+2)*2+1],!(Math.abs(y*(W-x)+V*(x-R)+f*(R-W))<dl)&&Je.push(C,C+1,C+2)}}function ZG(l,e){var t=0,i=l.shape,n=l.points||i.points,a=i.type!==Tt.POLY||i.closeStroke;if(n.length!==0){var s=e.points,d=e.indices,h=n.length/2,r=s.length/2,o=r;for(s.push(n[0],n[1]),t=1;t<h;t++)s.push(n[t*2],n[t*2+1]),d.push(o,o+1),o++;a&&d.push(o,r)}}function ur(l,e){l.lineStyle.native?ZG(l,e):mG(l,e)}var mr=function(){function l(){}return l.curveTo=function(e,t,i,n,a,s){var d=s[s.length-2],h=s[s.length-1],r=h-t,o=d-e,c=n-t,u=i-e,m=Math.abs(r*u-o*c);if(m<1e-8||a===0)return(s[s.length-2]!==e||s[s.length-1]!==t)&&s.push(e,t),null;var b=r*r+o*o,Z=c*c+u*u,p=r*c+o*u,G=a*Math.sqrt(b)/m,X=a*Math.sqrt(Z)/m,y=G*p/b,R=X*p/Z,V=G*u+X*o,W=G*c+X*r,f=o*(X+y),x=r*(X+y),L=u*(G+R),S=c*(G+R),Y=Math.atan2(x-W,f-V),J=Math.atan2(S-W,L-V);return{cx:V+e,cy:W+t,radius:a,startAngle:Y,endAngle:J,anticlockwise:o*c>u*r}},l.arc=function(e,t,i,n,a,s,d,h,r){for(var o=d-s,c=Sl._segmentsCount(Math.abs(o)*a,Math.ceil(Math.abs(o)/fe)*40),u=o/(c*2),m=u*2,b=Math.cos(u),Z=Math.sin(u),p=c-1,G=p%1/p,X=0;X<=p;++X){var y=X+G*X,R=u+s+m*y,V=Math.cos(R),W=-Math.sin(R);r.push((b*V+Z*W)*a+i,(b*-W+Z*V)*a+n)}},l}(),bG=function(){function l(){}return l.curveLength=function(e,t,i,n,a,s,d,h){for(var r=10,o=0,c=0,u=0,m=0,b=0,Z=0,p=0,G=0,X=0,y=0,R=0,V=e,W=t,f=1;f<=r;++f)c=f/r,u=c*c,m=u*c,b=1-c,Z=b*b,p=Z*b,G=p*e+3*Z*c*i+3*b*u*a+m*d,X=p*t+3*Z*c*n+3*b*u*s+m*h,y=V-G,R=W-X,V=G,W=X,o+=Math.sqrt(y*y+R*R);return o},l.curveTo=function(e,t,i,n,a,s,d){var h=d[d.length-2],r=d[d.length-1];d.length-=2;var o=Sl._segmentsCount(l.curveLength(h,r,e,t,i,n,a,s)),c=0,u=0,m=0,b=0,Z=0;d.push(h,r);for(var p=1,G=0;p<=o;++p)G=p/o,c=1-G,u=c*c,m=u*c,b=G*G,Z=b*G,d.push(m*h+3*u*G*e+3*c*b*i+Z*a,m*r+3*u*G*t+3*c*b*n+Z*s)},l}(),pG=function(){function l(){}return l.curveLength=function(e,t,i,n,a,s){var d=e-2*i+a,h=t-2*n+s,r=2*i-2*e,o=2*n-2*t,c=4*(d*d+h*h),u=4*(d*r+h*o),m=r*r+o*o,b=2*Math.sqrt(c+u+m),Z=Math.sqrt(c),p=2*c*Z,G=2*Math.sqrt(m),X=u/Z;return(p*b+Z*u*(b-G)+(4*m*c-u*u)*Math.log((2*Z+X+b)/(X+G)))/(4*p)},l.curveTo=function(e,t,i,n,a){for(var s=a[a.length-2],d=a[a.length-1],h=Sl._segmentsCount(l.curveLength(s,d,e,t,i,n)),r=0,o=0,c=1;c<=h;++c){var u=c/h;r=s+(e-s)*u,o=d+(t-d)*u,a.push(r+(e+(i-e)*u-r)*u,o+(t+(n-t)*u-o)*u)}},l}(),GG=function(){function l(){this.reset()}return l.prototype.begin=function(e,t,i){this.reset(),this.style=e,this.start=t,this.attribStart=i},l.prototype.end=function(e,t){this.attribSize=t-this.attribStart,this.size=e-this.start},l.prototype.reset=function(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0},l}(),Li,hs=(Li={},Li[Tt.POLY]=or,Li[Tt.CIRC]=gn,Li[Tt.ELIP]=gn,Li[Tt.RECT]=cG,Li[Tt.RREC]=uG,Li),Zr=[],Hn=[],br=function(){function l(e,t,i,n){t===void 0&&(t=null),i===void 0&&(i=null),n===void 0&&(n=null),this.points=[],this.holes=[],this.shape=e,this.lineStyle=i,this.fillStyle=t,this.matrix=n,this.type=e.type}return l.prototype.clone=function(){return new l(this.shape,this.fillStyle,this.lineStyle,this.matrix)},l.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},l}(),Ei=new _,XG=function(l){ds(e,l);function e(){var t=l.call(this)||this;return t.closePointEps=1e-4,t.boundsPadding=0,t.uvsFloat32=null,t.indicesUint16=null,t.batchable=!1,t.points=[],t.colors=[],t.uvs=[],t.indices=[],t.textureIds=[],t.graphicsData=[],t.drawCalls=[],t.batchDirty=-1,t.batches=[],t.dirty=0,t.cacheDirty=-1,t.clearDirty=0,t.shapeIndex=0,t._bounds=new un,t.boundsDirty=-1,t}return Object.defineProperty(e.prototype,"bounds",{get:function(){return this.updateBatches(),this.boundsDirty!==this.dirty&&(this.boundsDirty=this.dirty,this.calculateBounds()),this._bounds},enumerable:!1,configurable:!0}),e.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 t=0;t<this.drawCalls.length;t++)this.drawCalls[t].texArray.clear(),Hn.push(this.drawCalls[t]);this.drawCalls.length=0;for(var t=0;t<this.batches.length;t++){var i=this.batches[t];i.reset(),Zr.push(i)}this.batches.length=0},e.prototype.clear=function(){return this.graphicsData.length>0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this},e.prototype.drawShape=function(t,i,n,a){i===void 0&&(i=null),n===void 0&&(n=null),a===void 0&&(a=null);var s=new br(t,i,n,a);return this.graphicsData.push(s),this.dirty++,this},e.prototype.drawHole=function(t,i){if(i===void 0&&(i=null),!this.graphicsData.length)return null;var n=new br(t,null,null,i),a=this.graphicsData[this.graphicsData.length-1];return n.lineStyle=a.lineStyle,a.holes.push(n),this.dirty++,this},e.prototype.destroy=function(){l.prototype.destroy.call(this);for(var t=0;t<this.graphicsData.length;++t)this.graphicsData[t].destroy();this.points.length=0,this.points=null,this.colors.length=0,this.colors=null,this.uvs.length=0,this.uvs=null,this.indices.length=0,this.indices=null,this.indexBuffer.destroy(),this.indexBuffer=null,this.graphicsData.length=0,this.graphicsData=null,this.drawCalls.length=0,this.drawCalls=null,this.batches.length=0,this.batches=null,this._bounds=null},e.prototype.containsPoint=function(t){for(var i=this.graphicsData,n=0;n<i.length;++n){var a=i[n];if(a.fillStyle.visible&&a.shape&&(a.matrix?a.matrix.applyInverse(t,Ei):Ei.copyFrom(t),a.shape.contains(Ei.x,Ei.y))){var s=!1;if(a.holes)for(var d=0;d<a.holes.length;d++){var h=a.holes[d];if(h.shape.contains(Ei.x,Ei.y)){s=!0;break}}if(!s)return!0}}return!1},e.prototype.updateBatches=function(){if(!this.graphicsData.length){this.batchable=!0;return}if(this.validateBatching()){this.cacheDirty=this.dirty;var t=this.uvs,i=this.graphicsData,n=null,a=null;this.batches.length>0&&(n=this.batches[this.batches.length-1],a=n.style);for(var s=this.shapeIndex;s<i.length;s++){this.shapeIndex++;var d=i[s],h=d.fillStyle,r=d.lineStyle,o=hs[d.type];o.build(d),d.matrix&&this.transformPoints(d.points,d.matrix),(h.visible||r.visible)&&this.processHoles(d.holes);for(var c=0;c<2;c++){var u=c===0?h:r;if(u.visible){var m=u.texture.baseTexture,b=this.indices.length,Z=this.points.length/2;m.wrapMode=xe.REPEAT,c===0?this.processFill(d):this.processLine(d);var p=this.points.length/2-Z;p!==0&&(n&&!this._compareStyles(a,u)&&(n.end(b,Z),n=null),n||(n=Zr.pop()||new GG,n.begin(u,b,Z),this.batches.push(n),a=u),this.addUvs(this.points,t,u.texture,Z,p,u.matrix))}}}var G=this.indices.length,X=this.points.length/2;if(n&&n.end(G,X),this.batches.length===0){this.batchable=!0;return}var y=X>65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&y===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=y?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}},e.prototype._compareStyles=function(t,i){return!(!t||!i||t.texture.baseTexture!==i.texture.baseTexture||t.color+t.alpha!==i.color+i.alpha||!!t.native!=!!i.native)},e.prototype.validateBatching=function(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(var t=0,i=this.graphicsData.length;t<i;t++){var n=this.graphicsData[t],a=n.fillStyle,s=n.lineStyle;if(a&&!a.texture.baseTexture.valid||s&&!s.texture.baseTexture.valid)return!1}return!0},e.prototype.packBatches=function(){this.batchDirty++,this.uvsFloat32=new Float32Array(this.uvs);for(var t=this.batches,i=0,n=t.length;i<n;i++)for(var a=t[i],s=0;s<a.size;s++){var d=a.start+s;this.indicesUint16[d]=this.indicesUint16[d]-a.attribStart}},e.prototype.isBatchable=function(){if(this.points.length>65535*2)return!1;for(var t=this.batches,i=0;i<t.length;i++)if(t[i].style.native)return!1;return this.points.length<e.BATCHABLE_SIZE*2},e.prototype.buildDrawCalls=function(){for(var t=++q._globalBatch,i=0;i<this.drawCalls.length;i++)this.drawCalls[i].texArray.clear(),Hn.push(this.drawCalls[i]);this.drawCalls.length=0;var n=this.colors,a=this.textureIds,s=Hn.pop();s||(s=new Ba,s.texArray=new Qa),s.texArray.count=0,s.start=0,s.size=0,s.type=ce.TRIANGLES;var d=0,h=null,r=0,o=!1,c=ce.TRIANGLES,u=0;this.drawCalls.push(s);for(var i=0;i<this.batches.length;i++){var m=this.batches[i],b=8,Z=m.style,p=Z.texture.baseTexture;o!==!!Z.native&&(o=!!Z.native,c=o?ce.LINES:ce.TRIANGLES,h=null,d=b,t++),h!==p&&(h=p,p._batchEnabled!==t&&(d===b&&(t++,d=0,s.size>0&&(s=Hn.pop(),s||(s=new Ba,s.texArray=new Qa),this.drawCalls.push(s)),s.start=u,s.size=0,s.texArray.count=0,s.type=c),p.touched=1,p._batchEnabled=t,p._batchLocation=d,p.wrapMode=xe.REPEAT,s.texArray.elements[s.texArray.count++]=p,d++)),s.size+=m.size,u+=m.size,r=p._batchLocation,this.addColors(n,Z.color,Z.alpha,m.attribSize,m.attribStart),this.addTextureIds(a,r,m.attribSize,m.attribStart)}q._globalBatch=t,this.packAttributes()},e.prototype.packAttributes=function(){for(var t=this.points,i=this.uvs,n=this.colors,a=this.textureIds,s=new ArrayBuffer(t.length*3*4),d=new Float32Array(s),h=new Uint32Array(s),r=0,o=0;o<t.length/2;o++)d[r++]=t[o*2],d[r++]=t[o*2+1],d[r++]=i[o*2],d[r++]=i[o*2+1],h[r++]=n[o],d[r++]=a[o];this._buffer.update(s),this._indexBuffer.update(this.indicesUint16)},e.prototype.processFill=function(t){if(t.holes.length)or.triangulate(t,this);else{var i=hs[t.type];i.triangulate(t,this)}},e.prototype.processLine=function(t){ur(t,this);for(var i=0;i<t.holes.length;i++)ur(t.holes[i],this)},e.prototype.processHoles=function(t){for(var i=0;i<t.length;i++){var n=t[i],a=hs[n.type];a.build(n),n.matrix&&this.transformPoints(n.points,n.matrix)}},e.prototype.calculateBounds=function(){var t=this._bounds;t.clear(),t.addVertexData(this.points,0,this.points.length),t.pad(this.boundsPadding,this.boundsPadding)},e.prototype.transformPoints=function(t,i){for(var n=0;n<t.length/2;n++){var a=t[n*2],s=t[n*2+1];t[n*2]=i.a*a+i.c*s+i.tx,t[n*2+1]=i.b*a+i.d*s+i.ty}},e.prototype.addColors=function(t,i,n,a,s){s===void 0&&(s=0);var d=(i>>16)+(i&65280)+((i&255)<<16),h=xa(d,n);t.length=Math.max(t.length,s+a);for(var r=0;r<a;r++)t[s+r]=h},e.prototype.addTextureIds=function(t,i,n,a){a===void 0&&(a=0),t.length=Math.max(t.length,a+n);for(var s=0;s<n;s++)t[a+s]=i},e.prototype.addUvs=function(t,i,n,a,s,d){d===void 0&&(d=null);for(var h=0,r=i.length,o=n.frame;h<s;){var c=t[(a+h)*2],u=t[(a+h)*2+1];if(d){var m=d.a*c+d.c*u+d.tx;u=d.b*c+d.d*u+d.ty,c=m}h++,i.push(c/o.width,u/o.height)}var b=n.baseTexture;(o.width<b.width||o.height<b.height)&&this.adjustUvs(i,n,r,s)},e.prototype.adjustUvs=function(t,i,n,a){for(var s=i.baseTexture,d=1e-6,h=n+a*2,r=i.frame,o=r.width/s.width,c=r.height/s.height,u=r.x/r.width,m=r.y/r.height,b=Math.floor(t[n]+d),Z=Math.floor(t[n+1]+d),p=n+2;p<h;p+=2)b=Math.min(b,Math.floor(t[p]+d)),Z=Math.min(Z,Math.floor(t[p+1]+d));u-=b,m-=Z;for(var p=n;p<h;p+=2)t[p]=(t[p]+u)*o,t[p+1]=(t[p+1]+m)*c},e.BATCHABLE_SIZE=100,e}(wh),yG=function(l){ds(e,l);function e(){var t=l!==null&&l.apply(this,arguments)||this;return t.width=0,t.alignment=.5,t.native=!1,t.cap=Ae.BUTT,t.join=Ke.MITER,t.miterLimit=10,t}return e.prototype.clone=function(){var t=new e;return t.color=this.color,t.alpha=this.alpha,t.texture=this.texture,t.matrix=this.matrix,t.visible=this.visible,t.width=this.width,t.alignment=this.alignment,t.native=this.native,t.cap=this.cap,t.join=this.join,t.miterLimit=this.miterLimit,t},e.prototype.reset=function(){l.prototype.reset.call(this),this.color=0,this.alignment=.5,this.width=0,this.native=!1},e}(hr),VG=new Float32Array(3),rs={},Ve=function(l){ds(e,l);function e(t){t===void 0&&(t=null);var i=l.call(this)||this;return i.shader=null,i.pluginName="batch",i.currentPath=null,i.batches=[],i.batchTint=-1,i.batchDirty=-1,i.vertexData=null,i._fillStyle=new hr,i._lineStyle=new yG,i._matrix=null,i._holeMode=!1,i.state=Vi.for2d(),i._geometry=t||new XG,i._geometry.refCount++,i._transformID=-1,i.tint=16777215,i.blendMode=w.NORMAL,i}return Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!1,configurable:!0}),e.prototype.clone=function(){return this.finishPoly(),new e(this._geometry)},Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fill",{get:function(){return this._fillStyle},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){return this._lineStyle},enumerable:!1,configurable:!0}),e.prototype.lineStyle=function(t,i,n,a,s){return t===void 0&&(t=null),i===void 0&&(i=0),n===void 0&&(n=1),a===void 0&&(a=.5),s===void 0&&(s=!1),typeof t=="number"&&(t={width:t,color:i,alpha:n,alignment:a,native:s}),this.lineTextureStyle(t)},e.prototype.lineTextureStyle=function(t){t=Object.assign({width:0,texture:z.WHITE,color:t&&t.texture?16777215:0,alpha:1,matrix:null,alignment:.5,native:!1,cap:Ae.BUTT,join:Ke.MITER,miterLimit:10},t),this.currentPath&&this.startPoly();var i=t.width>0&&t.alpha>0;return i?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._lineStyle,{visible:i},t)):this._lineStyle.reset(),this},e.prototype.startPoly=function(){if(this.currentPath){var t=this.currentPath.points,i=this.currentPath.points.length;i>2&&(this.drawShape(this.currentPath),this.currentPath=new Ol,this.currentPath.closeStroke=!1,this.currentPath.points.push(t[i-2],t[i-1]))}else this.currentPath=new Ol,this.currentPath.closeStroke=!1},e.prototype.finishPoly=function(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)},e.prototype.moveTo=function(t,i){return this.startPoly(),this.currentPath.points[0]=t,this.currentPath.points[1]=i,this},e.prototype.lineTo=function(t,i){this.currentPath||this.moveTo(0,0);var n=this.currentPath.points,a=n[n.length-2],s=n[n.length-1];return(a!==t||s!==i)&&n.push(t,i),this},e.prototype._initCurve=function(t,i){t===void 0&&(t=0),i===void 0&&(i=0),this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[t,i]):this.moveTo(t,i)},e.prototype.quadraticCurveTo=function(t,i,n,a){this._initCurve();var s=this.currentPath.points;return s.length===0&&this.moveTo(0,0),pG.curveTo(t,i,n,a,s),this},e.prototype.bezierCurveTo=function(t,i,n,a,s,d){return this._initCurve(),bG.curveTo(t,i,n,a,s,d,this.currentPath.points),this},e.prototype.arcTo=function(t,i,n,a,s){this._initCurve(t,i);var d=this.currentPath.points,h=mr.curveTo(t,i,n,a,s,d);if(h){var r=h.cx,o=h.cy,c=h.radius,u=h.startAngle,m=h.endAngle,b=h.anticlockwise;this.arc(r,o,c,u,m,b)}return this},e.prototype.arc=function(t,i,n,a,s,d){if(d===void 0&&(d=!1),a===s)return this;!d&&s<=a?s+=fe:d&&a<=s&&(a+=fe);var h=s-a;if(h===0)return this;var r=t+Math.cos(a)*n,o=i+Math.sin(a)*n,c=this._geometry.closePointEps,u=this.currentPath?this.currentPath.points:null;if(u){var m=Math.abs(u[u.length-2]-r),b=Math.abs(u[u.length-1]-o);m<c&&b<c||u.push(r,o)}else this.moveTo(r,o),u=this.currentPath.points;return mr.arc(r,o,t,i,n,a,s,d,u),this},e.prototype.beginFill=function(t,i){return t===void 0&&(t=0),i===void 0&&(i=1),this.beginTextureFill({texture:z.WHITE,color:t,alpha:i})},e.prototype.beginTextureFill=function(t){t=Object.assign({texture:z.WHITE,color:16777215,alpha:1,matrix:null},t),this.currentPath&&this.startPoly();var i=t.alpha>0;return i?(t.matrix&&(t.matrix=t.matrix.clone(),t.matrix.invert()),Object.assign(this._fillStyle,{visible:i},t)):this._fillStyle.reset(),this},e.prototype.endFill=function(){return this.finishPoly(),this._fillStyle.reset(),this},e.prototype.drawRect=function(t,i,n,a){return this.drawShape(new j(t,i,n,a))},e.prototype.drawRoundedRect=function(t,i,n,a,s){return this.drawShape(new Vc(t,i,n,a,s))},e.prototype.drawCircle=function(t,i,n){return this.drawShape(new Xc(t,i,n))},e.prototype.drawEllipse=function(t,i,n,a){return this.drawShape(new yc(t,i,n,a))},e.prototype.drawPolygon=function(){for(var t=arguments,i=[],n=0;n<arguments.length;n++)i[n]=t[n];var a,s=!0,d=i[0];d.points?(s=d.closeStroke,a=d.points):Array.isArray(i[0])?a=i[0]:a=i;var h=new Ol(a);return h.closeStroke=s,this.drawShape(h),this},e.prototype.drawShape=function(t){return this._holeMode?this._geometry.drawHole(t,this._matrix):this._geometry.drawShape(t,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this},e.prototype.clear=function(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this},e.prototype.isFastRect=function(){var t=this._geometry.graphicsData;return t.length===1&&t[0].shape.type===Tt.RECT&&!t[0].matrix&&!t[0].holes.length&&!(t[0].lineStyle.visible&&t[0].lineStyle.width)},e.prototype._render=function(t){this.finishPoly();var i=this._geometry;i.updateBatches(),i.batchable?(this.batchDirty!==i.batchDirty&&this._populateBatches(),this._renderBatched(t)):(t.batch.flush(),this._renderDirect(t))},e.prototype._populateBatches=function(){var t=this._geometry,i=this.blendMode,n=t.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=t.batchDirty,this.batches.length=n,this.vertexData=new Float32Array(t.points);for(var a=0;a<n;a++){var s=t.batches[a],d=s.style.color,h=new Float32Array(this.vertexData.buffer,s.attribStart*4*2,s.attribSize*2),r=new Float32Array(t.uvsFloat32.buffer,s.attribStart*4*2,s.attribSize*2),o=new Uint16Array(t.indicesUint16.buffer,s.start*2,s.size),c={vertexData:h,blendMode:i,indices:o,uvs:r,_batchRGB:Mi(d),_tintRGB:d,_texture:s.style.texture,alpha:s.style.alpha,worldAlpha:1};this.batches[a]=c}},e.prototype._renderBatched=function(t){if(this.batches.length){t.batch.setObjectRenderer(t.plugins[this.pluginName]),this.calculateVertices(),this.calculateTints();for(var i=0,n=this.batches.length;i<n;i++){var a=this.batches[i];a.worldAlpha=this.worldAlpha*a.alpha,t.plugins[this.pluginName].render(a)}}},e.prototype._renderDirect=function(t){var i=this._resolveDirectShader(t),n=this._geometry,a=this.tint,s=this.worldAlpha,d=i.uniforms,h=n.drawCalls;d.translationMatrix=this.transform.worldTransform,d.tint[0]=(a>>16&255)/255*s,d.tint[1]=(a>>8&255)/255*s,d.tint[2]=(a&255)/255*s,d.tint[3]=s,t.shader.bind(i),t.geometry.bind(n,i),t.state.set(this.state);for(var r=0,o=h.length;r<o;r++)this._renderDrawCallDirect(t,n.drawCalls[r])},e.prototype._renderDrawCallDirect=function(t,i){for(var n=i.texArray,a=i.type,s=i.size,d=i.start,h=n.count,r=0;r<h;r++)t.texture.bind(n.elements[r],r);t.geometry.draw(a,s,d)},e.prototype._resolveDirectShader=function(t){var i=this.shader,n=this.pluginName;if(!i){if(!rs[n]){for(var a=t.plugins[n].MAX_TEXTURES,s=new Int32Array(a),d=0;d<a;d++)s[d]=d;var h={tint:new Float32Array([1,1,1,1]),translationMatrix:new vt,default:yi.from({uSamplers:s},!0)},r=t.plugins[n]._shader.program;rs[n]=new je(r,h)}i=rs[n]}return i},e.prototype._calculateBounds=function(){this.finishPoly();var t=this._geometry;if(t.graphicsData.length){var i=t.bounds,n=i.minX,a=i.minY,s=i.maxX,d=i.maxY;this._bounds.addFrame(this.transform,n,a,s,d)}},e.prototype.containsPoint=function(t){return this.worldTransform.applyInverse(t,e._TEMP_POINT),this._geometry.containsPoint(e._TEMP_POINT)},e.prototype.calculateTints=function(){if(this.batchTint!==this.tint){this.batchTint=this.tint;for(var t=Mi(this.tint,VG),i=0;i<this.batches.length;i++){var n=this.batches[i],a=n._batchRGB,s=t[0]*a[0]*255,d=t[1]*a[1]*255,h=t[2]*a[2]*255,r=(s<<16)+(d<<8)+(h|0);n._tintRGB=(r>>16)+(r&65280)+((r&255)<<16)}}},e.prototype.calculateVertices=function(){var t=this.transform._worldID;if(this._transformID!==t){this._transformID=t;for(var i=this.transform.worldTransform,n=i.a,a=i.b,s=i.c,d=i.d,h=i.tx,r=i.ty,o=this._geometry.points,c=this.vertexData,u=0,m=0;m<o.length;m+=2){var b=o[m],Z=o[m+1];c[u++]=n*b+s*Z+h,c[u++]=d*Z+a*b+r}}},e.prototype.closePath=function(){var t=this.currentPath;return t&&(t.closeStroke=!0,this.finishPoly()),this},e.prototype.setMatrix=function(t){return this._matrix=t,this},e.prototype.beginHole=function(){return this.finishPoly(),this._holeMode=!0,this},e.prototype.endHole=function(){return this.finishPoly(),this._holeMode=!1,this},e.prototype.destroy=function(t){this._geometry.refCount--,this._geometry.refCount===0&&this._geometry.dispose(),this._matrix=null,this.currentPath=null,this._lineStyle.destroy(),this._lineStyle=null,this._fillStyle.destroy(),this._fillStyle=null,this._geometry=null,this.shader=null,this.vertexData=null,this.batches.length=0,this.batches=null,l.prototype.destroy.call(this,t)},e.nextRoundedRectBehavior=!1,e._TEMP_POINT=new _,e}(xt);var os=function(l,e){return os=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},os(l,e)};function RG(l,e){os(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var vl=new _,WG=new Uint16Array([0,1,2,0,2,3]),Il=function(l){RG(e,l);function e(t){var i=l.call(this)||this;return i._anchor=new Ci(i._onAnchorUpdate,i,t?t.defaultAnchor.x:0,t?t.defaultAnchor.y:0),i._texture=null,i._width=0,i._height=0,i._tint=null,i._tintRGB=null,i.tint=16777215,i.blendMode=w.NORMAL,i._cachedTint=16777215,i.uvs=null,i.texture=t||z.EMPTY,i.vertexData=new Float32Array(8),i.vertexTrimmedData=null,i._transformID=-1,i._textureID=-1,i._transformTrimmedID=-1,i._textureTrimmedID=-1,i.indices=WG,i.pluginName="batch",i.isSprite=!0,i._roundPixels=U.ROUND_PIXELS,i}return e.prototype._onTextureUpdate=function(){this._textureID=-1,this._textureTrimmedID=-1,this._cachedTint=16777215,this._width&&(this.scale.x=wi(this.scale.x)*this._width/this._texture.orig.width),this._height&&(this.scale.y=wi(this.scale.y)*this._height/this._texture.orig.height)},e.prototype._onAnchorUpdate=function(){this._transformID=-1,this._transformTrimmedID=-1},e.prototype.calculateVertices=function(){var t=this._texture;if(!(this._transformID===this.transform._worldID&&this._textureID===t._updateID)){this._textureID!==t._updateID&&(this.uvs=this._texture._uvs.uvsFloat32),this._transformID=this.transform._worldID,this._textureID=t._updateID;var i=this.transform.worldTransform,n=i.a,a=i.b,s=i.c,d=i.d,h=i.tx,r=i.ty,o=this.vertexData,c=t.trim,u=t.orig,m=this._anchor,b=0,Z=0,p=0,G=0;if(c?(Z=c.x-m._x*u.width,b=Z+c.width,G=c.y-m._y*u.height,p=G+c.height):(Z=-m._x*u.width,b=Z+u.width,G=-m._y*u.height,p=G+u.height),o[0]=n*Z+s*G+h,o[1]=d*G+a*Z+r,o[2]=n*b+s*G+h,o[3]=d*G+a*b+r,o[4]=n*b+s*p+h,o[5]=d*p+a*b+r,o[6]=n*Z+s*p+h,o[7]=d*p+a*Z+r,this._roundPixels)for(var X=U.RESOLUTION,y=0;y<o.length;++y)o[y]=Math.round((o[y]*X|0)/X)}},e.prototype.calculateTrimmedVertices=function(){if(!this.vertexTrimmedData)this.vertexTrimmedData=new Float32Array(8);else if(this._transformTrimmedID===this.transform._worldID&&this._textureTrimmedID===this._texture._updateID)return;this._transformTrimmedID=this.transform._worldID,this._textureTrimmedID=this._texture._updateID;var t=this._texture,i=this.vertexTrimmedData,n=t.orig,a=this._anchor,s=this.transform.worldTransform,d=s.a,h=s.b,r=s.c,o=s.d,c=s.tx,u=s.ty,m=-a._x*n.width,b=m+n.width,Z=-a._y*n.height,p=Z+n.height;i[0]=d*m+r*Z+c,i[1]=o*Z+h*m+u,i[2]=d*b+r*Z+c,i[3]=o*Z+h*b+u,i[4]=d*b+r*p+c,i[5]=o*p+h*b+u,i[6]=d*m+r*p+c,i[7]=o*p+h*m+u},e.prototype._render=function(t){this.calculateVertices(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this)},e.prototype._calculateBounds=function(){var t=this._texture.trim,i=this._texture.orig;!t||t.width===i.width&&t.height===i.height?(this.calculateVertices(),this._bounds.addQuad(this.vertexData)):(this.calculateTrimmedVertices(),this._bounds.addQuad(this.vertexTrimmedData))},e.prototype.getLocalBounds=function(t){return this.children.length===0?(this._localBounds||(this._localBounds=new un),this._localBounds.minX=this._texture.orig.width*-this._anchor._x,this._localBounds.minY=this._texture.orig.height*-this._anchor._y,this._localBounds.maxX=this._texture.orig.width*(1-this._anchor._x),this._localBounds.maxY=this._texture.orig.height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._localBounds.getRectangle(t)):l.prototype.getLocalBounds.call(this,t)},e.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,vl);var i=this._texture.orig.width,n=this._texture.orig.height,a=-i*this.anchor.x,s=0;return vl.x>=a&&vl.x<a+i&&(s=-n*this.anchor.y,vl.y>=s&&vl.y<s+n)},e.prototype.destroy=function(t){l.prototype.destroy.call(this,t),this._texture.off("update",this._onTextureUpdate,this),this._anchor=null;var i=typeof t=="boolean"?t:t&&t.texture;if(i){var n=typeof t=="boolean"?t:t&&t.baseTexture;this._texture.destroy(!!n)}this._texture=null},e.from=function(t,i){var n=t instanceof z?t:z.from(t,i);return new e(n)},Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){this._roundPixels!==t&&(this._transformID=-1),this._roundPixels=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"width",{get:function(){return Math.abs(this.scale.x)*this._texture.orig.width},set:function(t){var i=wi(this.scale.x)||1;this.scale.x=i*t/this._texture.orig.width,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return Math.abs(this.scale.y)*this._texture.orig.height},set:function(t){var i=wi(this.scale.y)||1;this.scale.y=i*t/this._texture.orig.height,this._height=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"anchor",{get:function(){return this._anchor},set:function(t){this._anchor.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){this._tint=t,this._tintRGB=(t>>16)+(t&65280)+((t&255)<<16)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"texture",{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture&&this._texture.off("update",this._onTextureUpdate,this),this._texture=t||z.EMPTY,this._cachedTint=16777215,this._textureID=-1,this._textureTrimmedID=-1,t&&(t.baseTexture.valid?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))},enumerable:!1,configurable:!0}),e}(xt);var cs=function(l,e){return cs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},cs(l,e)};function fG(l,e){cs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Yl;(function(l){l[l.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",l[l.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL"})(Yl||(Yl={}));var us={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:Yl.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},LG=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],qe=function(){function l(e){this.styleID=0,this.reset(),Zs(this,e,e)}return l.prototype.clone=function(){var e={};return Zs(e,this,us),new l(e)},l.prototype.reset=function(){Zs(this,us,us)},Object.defineProperty(l.prototype,"align",{get:function(){return this._align},set:function(e){this._align!==e&&(this._align=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"breakWords",{get:function(){return this._breakWords},set:function(e){this._breakWords!==e&&(this._breakWords=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadow",{get:function(){return this._dropShadow},set:function(e){this._dropShadow!==e&&(this._dropShadow=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadowAlpha",{get:function(){return this._dropShadowAlpha},set:function(e){this._dropShadowAlpha!==e&&(this._dropShadowAlpha=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadowAngle",{get:function(){return this._dropShadowAngle},set:function(e){this._dropShadowAngle!==e&&(this._dropShadowAngle=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadowBlur",{get:function(){return this._dropShadowBlur},set:function(e){this._dropShadowBlur!==e&&(this._dropShadowBlur=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadowColor",{get:function(){return this._dropShadowColor},set:function(e){var t=ms(e);this._dropShadowColor!==t&&(this._dropShadowColor=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"dropShadowDistance",{get:function(){return this._dropShadowDistance},set:function(e){this._dropShadowDistance!==e&&(this._dropShadowDistance=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fill",{get:function(){return this._fill},set:function(e){var t=ms(e);this._fill!==t&&(this._fill=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fillGradientType",{get:function(){return this._fillGradientType},set:function(e){this._fillGradientType!==e&&(this._fillGradientType=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fillGradientStops",{get:function(){return this._fillGradientStops},set:function(e){xG(this._fillGradientStops,e)||(this._fillGradientStops=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fontFamily",{get:function(){return this._fontFamily},set:function(e){this.fontFamily!==e&&(this._fontFamily=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fontSize",{get:function(){return this._fontSize},set:function(e){this._fontSize!==e&&(this._fontSize=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fontStyle",{get:function(){return this._fontStyle},set:function(e){this._fontStyle!==e&&(this._fontStyle=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fontVariant",{get:function(){return this._fontVariant},set:function(e){this._fontVariant!==e&&(this._fontVariant=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"fontWeight",{get:function(){return this._fontWeight},set:function(e){this._fontWeight!==e&&(this._fontWeight=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"letterSpacing",{get:function(){return this._letterSpacing},set:function(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"lineHeight",{get:function(){return this._lineHeight},set:function(e){this._lineHeight!==e&&(this._lineHeight=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"leading",{get:function(){return this._leading},set:function(e){this._leading!==e&&(this._leading=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"lineJoin",{get:function(){return this._lineJoin},set:function(e){this._lineJoin!==e&&(this._lineJoin=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"miterLimit",{get:function(){return this._miterLimit},set:function(e){this._miterLimit!==e&&(this._miterLimit=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"padding",{get:function(){return this._padding},set:function(e){this._padding!==e&&(this._padding=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"stroke",{get:function(){return this._stroke},set:function(e){var t=ms(e);this._stroke!==t&&(this._stroke=t,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"strokeThickness",{get:function(){return this._strokeThickness},set:function(e){this._strokeThickness!==e&&(this._strokeThickness=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"textBaseline",{get:function(){return this._textBaseline},set:function(e){this._textBaseline!==e&&(this._textBaseline=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"trim",{get:function(){return this._trim},set:function(e){this._trim!==e&&(this._trim=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"whiteSpace",{get:function(){return this._whiteSpace},set:function(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"wordWrap",{get:function(){return this._wordWrap},set:function(e){this._wordWrap!==e&&(this._wordWrap=e,this.styleID++)},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"wordWrapWidth",{get:function(){return this._wordWrapWidth},set:function(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.styleID++)},enumerable:!1,configurable:!0}),l.prototype.toFontString=function(){var e=typeof this.fontSize=="number"?this.fontSize+"px":this.fontSize,t=this.fontFamily;Array.isArray(this.fontFamily)||(t=this.fontFamily.split(","));for(var i=t.length-1;i>=0;i--){var n=t[i].trim();!/([\"\'])[^\'\"]+\1/.test(n)&&LG.indexOf(n)<0&&(n='"'+n+'"'),t[i]=n}return this.fontStyle+" "+this.fontVariant+" "+this.fontWeight+" "+e+" "+t.join(",")},l}();function pr(l){return typeof l=="number"?lh(l):(typeof l=="string"&&l.indexOf("0x")===0&&(l=l.replace("0x","#")),l)}function ms(l){if(Array.isArray(l)){for(var e=0;e<l.length;++e)l[e]=pr(l[e]);return l}else return pr(l)}function xG(l,e){if(!Array.isArray(l)||!Array.isArray(e)||l.length!==e.length)return!1;for(var t=0;t<l.length;++t)if(l[t]!==e[t])return!1;return!0}function Zs(l,e,t){for(var i in t)Array.isArray(e[i])?l[i]=e[i].slice():l[i]=e[i]}var Jn={willReadFrequently:!0},Re=function(){function l(e,t,i,n,a,s,d,h,r){this.text=e,this.style=t,this.width=i,this.height=n,this.lines=a,this.lineWidths=s,this.lineHeight=d,this.maxLineWidth=h,this.fontProperties=r}return l.measureText=function(e,t,i,n){n===void 0&&(n=l._canvas),i=i??t.wordWrap;var a=t.toFontString(),s=l.measureFont(a);s.fontSize===0&&(s.fontSize=t.fontSize,s.ascent=t.fontSize);var d=n.getContext("2d",Jn);d.font=a;for(var h=i?l.wordWrap(e,t,n):e,r=h.split(/(?:\r\n|\r|\n)/),o=new Array(r.length),c=0,u=0;u<r.length;u++){var m=d.measureText(r[u]).width+(r[u].length-1)*t.letterSpacing;o[u]=m,c=Math.max(c,m)}var b=c+t.strokeThickness;t.dropShadow&&(b+=t.dropShadowDistance);var Z=t.lineHeight||s.fontSize+t.strokeThickness,p=Math.max(Z,s.fontSize+t.strokeThickness)+(r.length-1)*(Z+t.leading);return t.dropShadow&&(p+=t.dropShadowDistance),new l(e,t,b,p,r,o,Z+t.leading,c,s)},l.wordWrap=function(e,t,i){i===void 0&&(i=l._canvas);for(var n=i.getContext("2d",Jn),a=0,s="",d="",h=Object.create(null),r=t.letterSpacing,o=t.whiteSpace,c=l.collapseSpaces(o),u=l.collapseNewlines(o),m=!c,b=t.wordWrapWidth+r,Z=l.tokenize(e),p=0;p<Z.length;p++){var G=Z[p];if(l.isNewline(G)){if(!u){d+=l.addLine(s),m=!c,s="",a=0;continue}G=" "}if(c){var X=l.isBreakingSpace(G),y=l.isBreakingSpace(s[s.length-1]);if(X&&y)continue}var R=l.getFromCache(G,r,h,n);if(R>b)if(s!==""&&(d+=l.addLine(s),s="",a=0),l.canBreakWords(G,t.breakWords))for(var V=l.wordWrapSplit(G),W=0;W<V.length;W++){for(var f=V[W],x=1;V[W+x];){var L=V[W+x],S=f[f.length-1];if(!l.canBreakChars(S,L,G,W,t.breakWords))f+=L;else break;x++}W+=f.length-1;var Y=l.getFromCache(f,r,h,n);Y+a>b&&(d+=l.addLine(s),m=!1,s="",a=0),s+=f,a+=Y}else{s.length>0&&(d+=l.addLine(s),s="",a=0);var J=p===Z.length-1;d+=l.addLine(G,!J),m=!1,s="",a=0}else R+a>b&&(m=!1,d+=l.addLine(s),s="",a=0),(s.length>0||!l.isBreakingSpace(G)||m)&&(s+=G,a+=R)}return d+=l.addLine(s,!1),d},l.addLine=function(e,t){return t===void 0&&(t=!0),e=l.trimRight(e),e=t?e+`
529
+ `:e,e},l.getFromCache=function(e,t,i,n){var a=i[e];if(typeof a!="number"){var s=e.length*t;a=n.measureText(e).width+s,i[e]=a}return a},l.collapseSpaces=function(e){return e==="normal"||e==="pre-line"},l.collapseNewlines=function(e){return e==="normal"},l.trimRight=function(e){if(typeof e!="string")return"";for(var t=e.length-1;t>=0;t--){var i=e[t];if(!l.isBreakingSpace(i))break;e=e.slice(0,-1)}return e},l.isNewline=function(e){return typeof e!="string"?!1:l._newlines.indexOf(e.charCodeAt(0))>=0},l.isBreakingSpace=function(e,t){return typeof e!="string"?!1:l._breakingSpaces.indexOf(e.charCodeAt(0))>=0},l.tokenize=function(e){var t=[],i="";if(typeof e!="string")return t;for(var n=0;n<e.length;n++){var a=e[n],s=e[n+1];if(l.isBreakingSpace(a,s)||l.isNewline(a)){i!==""&&(t.push(i),i=""),t.push(a);continue}i+=a}return i!==""&&t.push(i),t},l.canBreakWords=function(e,t){return t},l.canBreakChars=function(e,t,i,n,a){return!0},l.wordWrapSplit=function(e){return e.split("")},l.measureFont=function(e){if(l._fonts[e])return l._fonts[e];var t={ascent:0,descent:0,fontSize:0},i=l._canvas,n=l._context;n.font=e;var a=l.METRICS_STRING+l.BASELINE_SYMBOL,s=Math.ceil(n.measureText(a).width),d=Math.ceil(n.measureText(l.BASELINE_SYMBOL).width),h=Math.ceil(l.HEIGHT_MULTIPLIER*d);d=d*l.BASELINE_MULTIPLIER|0,i.width=s,i.height=h,n.fillStyle="#f00",n.fillRect(0,0,s,h),n.font=e,n.textBaseline="alphabetic",n.fillStyle="#000",n.fillText(a,0,d);var r=n.getImageData(0,0,s,h).data,o=r.length,c=s*4,u=0,m=0,b=!1;for(u=0;u<d;++u){for(var Z=0;Z<c;Z+=4)if(r[m+Z]!==255){b=!0;break}if(!b)m+=c;else break}for(t.ascent=d-u,m=o-c,b=!1,u=h;u>d;--u){for(var Z=0;Z<c;Z+=4)if(r[m+Z]!==255){b=!0;break}if(!b)m-=c;else break}return t.descent=u-d,t.fontSize=t.ascent+t.descent,l._fonts[e]=t,t},l.clearMetrics=function(e){e===void 0&&(e=""),e?delete l._fonts[e]:l._fonts={}},Object.defineProperty(l,"_canvas",{get:function(){if(!l.__canvas){var e=void 0;try{var t=new OffscreenCanvas(0,0),i=t.getContext("2d",Jn);if(i&&i.measureText)return l.__canvas=t,t;e=U.ADAPTER.createCanvas()}catch{e=U.ADAPTER.createCanvas()}e.width=e.height=10,l.__canvas=e}return l.__canvas},enumerable:!1,configurable:!0}),Object.defineProperty(l,"_context",{get:function(){return l.__context||(l.__context=l._canvas.getContext("2d",Jn)),l.__context},enumerable:!1,configurable:!0}),l}();Re._fonts={},Re.METRICS_STRING="|ÉqÅ",Re.BASELINE_SYMBOL="M",Re.BASELINE_MULTIPLIER=1.4,Re.HEIGHT_MULTIPLIER=2,Re._newlines=[10,13],Re._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];var SG={texture:!0,children:!1,baseTexture:!0},Gr=function(l){fG(e,l);function e(t,i,n){var a=this,s=!1;n||(n=U.ADAPTER.createCanvas(),s=!0),n.width=3,n.height=3;var d=z.from(n);return d.orig=new j,d.trim=new j,a=l.call(this,d)||this,a._ownCanvas=s,a.canvas=n,a.context=n.getContext("2d",{willReadFrequently:!0}),a._resolution=U.RESOLUTION,a._autoResolution=!0,a._text=null,a._style=null,a._styleListener=null,a._font="",a.text=t,a.style=i,a.localStyleID=-1,a}return e.prototype.updateText=function(t){var i=this._style;if(this.localStyleID!==i.styleID&&(this.dirty=!0,this.localStyleID=i.styleID),!(!this.dirty&&t)){this._font=this._style.toFontString();var n=this.context,a=Re.measureText(this._text||" ",this._style,this._style.wordWrap,this.canvas),s=a.width,d=a.height,h=a.lines,r=a.lineHeight,o=a.lineWidths,c=a.maxLineWidth,u=a.fontProperties;this.canvas.width=Math.ceil(Math.ceil(Math.max(1,s)+i.padding*2)*this._resolution),this.canvas.height=Math.ceil(Math.ceil(Math.max(1,d)+i.padding*2)*this._resolution),n.scale(this._resolution,this._resolution),n.clearRect(0,0,this.canvas.width,this.canvas.height),n.font=this._font,n.lineWidth=i.strokeThickness,n.textBaseline=i.textBaseline,n.lineJoin=i.lineJoin,n.miterLimit=i.miterLimit;for(var m,b,Z=i.dropShadow?2:1,p=0;p<Z;++p){var G=i.dropShadow&&p===0,X=G?Math.ceil(Math.max(1,d)+i.padding*2):0,y=X*this._resolution;if(G){n.fillStyle="black",n.strokeStyle="black";var R=i.dropShadowColor,V=Mi(typeof R=="number"?R:nh(R)),W=i.dropShadowBlur*this._resolution,f=i.dropShadowDistance*this._resolution;n.shadowColor="rgba("+V[0]*255+","+V[1]*255+","+V[2]*255+","+i.dropShadowAlpha+")",n.shadowBlur=W,n.shadowOffsetX=Math.cos(i.dropShadowAngle)*f,n.shadowOffsetY=Math.sin(i.dropShadowAngle)*f+y}else n.fillStyle=this._generateFillStyle(i,h,a),n.strokeStyle=i.stroke,n.shadowColor="black",n.shadowBlur=0,n.shadowOffsetX=0,n.shadowOffsetY=0;var x=(r-u.fontSize)/2;(!e.nextLineHeightBehavior||r-u.fontSize<0)&&(x=0);for(var L=0;L<h.length;L++)m=i.strokeThickness/2,b=i.strokeThickness/2+L*r+u.ascent+x,i.align==="right"?m+=c-o[L]:i.align==="center"&&(m+=(c-o[L])/2),i.stroke&&i.strokeThickness&&this.drawLetterSpacing(h[L],m+i.padding,b+i.padding-X,!0),i.fill&&this.drawLetterSpacing(h[L],m+i.padding,b+i.padding-X)}this.updateTexture()}},e.prototype.drawLetterSpacing=function(t,i,n,a){a===void 0&&(a=!1);var s=this._style,d=s.letterSpacing,h=e.experimentalLetterSpacing&&("letterSpacing"in CanvasRenderingContext2D.prototype||"textLetterSpacing"in CanvasRenderingContext2D.prototype);if(d===0||h){h&&(this.context.letterSpacing=d,this.context.textLetterSpacing=d),a?this.context.strokeText(t,i,n):this.context.fillText(t,i,n);return}for(var r=i,o=Array.from?Array.from(t):t.split(""),c=this.context.measureText(t).width,u=0,m=0;m<o.length;++m){var b=o[m];a?this.context.strokeText(b,r,n):this.context.fillText(b,r,n);for(var Z="",p=m+1;p<o.length;++p)Z+=o[p];u=this.context.measureText(Z).width,r+=c-u+d,c=u}},e.prototype.updateTexture=function(){var t=this.canvas;if(this._style.trim){var i=vZ(t);i.data&&(t.width=i.width,t.height=i.height,this.context.putImageData(i.data,0,0))}var n=this._texture,a=this._style,s=a.trim?0:a.padding,d=n.baseTexture;n.trim.width=n._frame.width=t.width/this._resolution,n.trim.height=n._frame.height=t.height/this._resolution,n.trim.x=-s,n.trim.y=-s,n.orig.width=n._frame.width-s*2,n.orig.height=n._frame.height-s*2,this._onTextureUpdate(),d.setRealSize(t.width,t.height,this._resolution),n.updateUvs(),this.dirty=!1},e.prototype._render=function(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0),this.updateText(!0),l.prototype._render.call(this,t)},e.prototype.updateTransform=function(){this.updateText(!0),l.prototype.updateTransform.call(this)},e.prototype.getBounds=function(t,i){return this.updateText(!0),this._textureID===-1&&(t=!1),l.prototype.getBounds.call(this,t,i)},e.prototype.getLocalBounds=function(t){return this.updateText(!0),l.prototype.getLocalBounds.call(this,t)},e.prototype._calculateBounds=function(){this.calculateVertices(),this._bounds.addQuad(this.vertexData)},e.prototype._generateFillStyle=function(t,i,n){var a=t.fill;if(Array.isArray(a)){if(a.length===1)return a[0]}else return a;var s,d=t.dropShadow?t.dropShadowDistance:0,h=t.padding||0,r=this.canvas.width/this._resolution-d-h*2,o=this.canvas.height/this._resolution-d-h*2,c=a.slice(),u=t.fillGradientStops.slice();if(!u.length)for(var m=c.length+1,b=1;b<m;++b)u.push(b/m);if(c.unshift(a[0]),u.unshift(0),c.push(a[a.length-1]),u.push(1),t.fillGradientType===Yl.LINEAR_VERTICAL){s=this.context.createLinearGradient(r/2,h,r/2,o+h);for(var Z=n.fontProperties.fontSize+t.strokeThickness,b=0;b<i.length;b++){var p=n.lineHeight*(b-1)+Z,G=n.lineHeight*b,X=G;b>0&&p>G&&(X=(G+p)/2);var y=G+Z,R=n.lineHeight*(b+1),V=y;b+1<i.length&&R<y&&(V=(y+R)/2);for(var W=(V-X)/o,f=0;f<c.length;f++){var x=0;typeof u[f]=="number"?x=u[f]:x=f/c.length;var L=Math.min(1,Math.max(0,X/o+x*W));L=Number(L.toFixed(5)),s.addColorStop(L,c[f])}}}else{s=this.context.createLinearGradient(h,o/2,r+h,o/2);for(var S=c.length+1,Y=1,b=0;b<c.length;b++){var J=void 0;typeof u[b]=="number"?J=u[b]:J=Y/S,s.addColorStop(J,c[b]),Y++}}return s},e.prototype.destroy=function(t){typeof t=="boolean"&&(t={children:t}),t=Object.assign({},SG,t),l.prototype.destroy.call(this,t),this._ownCanvas&&(this.canvas.height=this.canvas.width=0),this.context=null,this.canvas=null,this._style=null},Object.defineProperty(e.prototype,"width",{get:function(){return this.updateText(!0),Math.abs(this.scale.x)*this._texture.orig.width},set:function(t){this.updateText(!0);var i=wi(this.scale.x)||1;this.scale.x=i*t/this._texture.orig.width,this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this.updateText(!0),Math.abs(this.scale.y)*this._texture.orig.height},set:function(t){this.updateText(!0);var i=wi(this.scale.y)||1;this.scale.y=i*t/this._texture.orig.height,this._height=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"style",{get:function(){return this._style},set:function(t){t=t||{},t instanceof qe?this._style=t:this._style=new qe(t),this.localStyleID=-1,this.dirty=!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){t=String(t??""),this._text!==t&&(this._text=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._autoResolution=!1,this._resolution!==t&&(this._resolution=t,this.dirty=!0)},enumerable:!1,configurable:!0}),e.nextLineHeightBehavior=!1,e.experimentalLetterSpacing=!1,e}(Il);U.UPLOADS_PER_FRAME=4;var bs=function(l,e){return bs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},bs(l,e)};function vG(l,e){bs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var IG=function(){function l(e){this.maxItemsPerFrame=e,this.itemsLeft=0}return l.prototype.beginFrame=function(){this.itemsLeft=this.maxItemsPerFrame},l.prototype.allowedToUpload=function(){return this.itemsLeft-- >0},l}();function YG(l,e){var t=!1;if(l&&l._textures&&l._textures.length){for(var i=0;i<l._textures.length;i++)if(l._textures[i]instanceof z){var n=l._textures[i].baseTexture;e.indexOf(n)===-1&&(e.push(n),t=!0)}}return t}function gG(l,e){if(l.baseTexture instanceof q){var t=l.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function TG(l,e){if(l._texture&&l._texture instanceof z){var t=l._texture.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function HG(l,e){return e instanceof Gr?(e.updateText(!0),!0):!1}function JG(l,e){if(e instanceof qe){var t=e.toFontString();return Re.measureFont(t),!0}return!1}function CG(l,e){if(l instanceof Gr){e.indexOf(l.style)===-1&&e.push(l.style),e.indexOf(l)===-1&&e.push(l);var t=l._texture.baseTexture;return e.indexOf(t)===-1&&e.push(t),!0}return!1}function FG(l,e){return l instanceof qe?(e.indexOf(l)===-1&&e.push(l),!0):!1}var UG=function(){function l(e){var t=this;this.limiter=new IG(U.UPLOADS_PER_FRAME),this.renderer=e,this.uploadHookHelper=null,this.queue=[],this.addHooks=[],this.uploadHooks=[],this.completes=[],this.ticking=!1,this.delayedTick=function(){t.queue&&t.prepareItems()},this.registerFindHook(CG),this.registerFindHook(FG),this.registerFindHook(YG),this.registerFindHook(gG),this.registerFindHook(TG),this.registerUploadHook(HG),this.registerUploadHook(JG)}return l.prototype.upload=function(e,t){var i=this;return typeof e=="function"&&(t=e,e=null),t&&pe("6.5.0","BasePrepare.upload callback is deprecated, use the return Promise instead."),new Promise(function(n){e&&i.add(e);var a=function(){t==null||t(),n()};i.queue.length?(i.completes.push(a),i.ticking||(i.ticking=!0,Jt.system.addOnce(i.tick,i,le.UTILITY))):a()})},l.prototype.tick=function(){setTimeout(this.delayedTick,0)},l.prototype.prepareItems=function(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){var e=this.queue[0],t=!1;if(e&&!e._destroyed){for(var i=0,n=this.uploadHooks.length;i<n;i++)if(this.uploadHooks[i](this.uploadHookHelper,e)){this.queue.shift(),t=!0;break}}t||this.queue.shift()}if(this.queue.length)Jt.system.addOnce(this.tick,this,le.UTILITY);else{this.ticking=!1;var a=this.completes.slice(0);this.completes.length=0;for(var i=0,n=a.length;i<n;i++)a[i]()}},l.prototype.registerFindHook=function(e){return e&&this.addHooks.push(e),this},l.prototype.registerUploadHook=function(e){return e&&this.uploadHooks.push(e),this},l.prototype.add=function(e){for(var t=0,i=this.addHooks.length;t<i&&!this.addHooks[t](e,this.queue);t++);if(e instanceof xt)for(var t=e.children.length-1;t>=0;t--)this.add(e.children[t]);return this},l.prototype.destroy=function(){this.ticking&&Jt.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},l}();function Xr(l,e){return e instanceof q?(e._glTextures[l.CONTEXT_UID]||l.texture.bind(e),!0):!1}function kG(l,e){if(!(e instanceof Ve))return!1;var t=e.geometry;e.finishPoly(),t.updateBatches();for(var i=t.batches,n=0;n<i.length;n++){var a=i[n].style.texture;a&&Xr(l,a.baseTexture)}return t.batchable||l.geometry.bind(t,e._resolveDirectShader(l)),!0}function NG(l,e){return l instanceof Ve?(e.push(l),!0):!1}var MG=function(l){vG(e,l);function e(t){var i=l.call(this,t)||this;return i.uploadHookHelper=i.renderer,i.registerFindHook(NG),i.registerUploadHook(Xr),i.registerUploadHook(kG),i}return e.extension={name:"prepare",type:nt.RendererPlugin},e}(UG);var KG=function(){function l(e,t,i){i===void 0&&(i=null),this.linkedSheets=[],this._texture=e instanceof z?e:null,this.baseTexture=e instanceof q?e:this._texture.baseTexture,this.textures={},this.animations={},this.data=t;var n=this.baseTexture.resource;this.resolution=this._updateResolution(i||(n?n.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}return l.prototype._updateResolution=function(e){e===void 0&&(e=null);var t=this.data.meta.scale,i=cn(e,null);return i===null&&(i=t!==void 0?parseFloat(t):1),i!==1&&this.baseTexture.setResolution(i),i},l.prototype.parse=function(e){var t=this;return e&&pe("6.5.0","Spritesheet.parse callback is deprecated, use the return Promise instead."),new Promise(function(i){t._callback=function(n){e==null||e(n),i(n)},t._batchIndex=0,t._frameKeys.length<=l.BATCH_SIZE?(t._processFrames(0),t._processAnimations(),t._parseComplete()):t._nextBatch()})},l.prototype._processFrames=function(e){for(var t=e,i=l.BATCH_SIZE;t-e<i&&t<this._frameKeys.length;){var n=this._frameKeys[t],a=this._frames[n],s=a.frame;if(s){var d=null,h=null,r=a.trimmed!==!1&&a.sourceSize?a.sourceSize:a.frame,o=new j(0,0,Math.floor(r.w)/this.resolution,Math.floor(r.h)/this.resolution);a.rotated?d=new j(Math.floor(s.x)/this.resolution,Math.floor(s.y)/this.resolution,Math.floor(s.h)/this.resolution,Math.floor(s.w)/this.resolution):d=new j(Math.floor(s.x)/this.resolution,Math.floor(s.y)/this.resolution,Math.floor(s.w)/this.resolution,Math.floor(s.h)/this.resolution),a.trimmed!==!1&&a.spriteSourceSize&&(h=new j(Math.floor(a.spriteSourceSize.x)/this.resolution,Math.floor(a.spriteSourceSize.y)/this.resolution,Math.floor(s.w)/this.resolution,Math.floor(s.h)/this.resolution)),this.textures[n]=new z(this.baseTexture,d,o,h,a.rotated?2:0,a.anchor),z.addToCache(this.textures[n],n)}t++}},l.prototype._processAnimations=function(){var e=this.data.animations||{};for(var t in e){this.animations[t]=[];for(var i=0;i<e[t].length;i++){var n=e[t][i];this.animations[t].push(this.textures[n])}}},l.prototype._parseComplete=function(){var e=this._callback;this._callback=null,this._batchIndex=0,e.call(this,this.textures)},l.prototype._nextBatch=function(){var e=this;this._processFrames(this._batchIndex*l.BATCH_SIZE),this._batchIndex++,setTimeout(function(){e._batchIndex*l.BATCH_SIZE<e._frameKeys.length?e._nextBatch():(e._processAnimations(),e._parseComplete())},0)},l.prototype.destroy=function(e){var t;e===void 0&&(e=!1);for(var i in this.textures)this.textures[i].destroy();this._frames=null,this._frameKeys=null,this.data=null,this.textures=null,e&&((t=this._texture)===null||t===void 0||t.destroy(),this.baseTexture.destroy()),this._texture=null,this.baseTexture=null,this.linkedSheets=[]},l.BATCH_SIZE=1e3,l}(),wG=function(){function l(){}return l.use=function(e,t){var i,n,a=this,s=e.name+"_image";if(!e.data||e.type!==yt.TYPE.JSON||!e.data.frames||a.resources[s]){t();return}var d=(n=(i=e.data)===null||i===void 0?void 0:i.meta)===null||n===void 0?void 0:n.related_multi_packs;if(Array.isArray(d))for(var h=function(b){if(typeof b!="string")return"continue";var Z=b.replace(".json",""),p=Ni.resolve(e.url.replace(a.baseUrl,""),b);if(a.resources[Z]||Object.values(a.resources).some(function(X){return Ni.format(Ni.parse(X.url))===p}))return"continue";var G={crossOrigin:e.crossOrigin,loadType:yt.LOAD_TYPE.XHR,xhrType:yt.XHR_RESPONSE_TYPE.JSON,parentResource:e,metadata:e.metadata};a.add(Z,p,G)},r=0,o=d;r<o.length;r++){var c=o[r];h(c)}var u={crossOrigin:e.crossOrigin,metadata:e.metadata.imageMetadata,parentResource:e},m=l.getResourcePath(e,a.baseUrl);a.add(s,m,u,function(Z){if(Z.error){t(Z.error);return}var p=new KG(Z.texture,e.data,e.url);p.parse().then(function(){e.spritesheet=p,e.textures=p.textures,t()})})},l.getResourcePath=function(e,t){return e.isDataUrl?e.data.meta.image:Ni.resolve(e.url.replace(t,""),e.data.meta.image)},l.extension=nt.Loader,l}();var ps=function(l,e){return ps=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},ps(l,e)};function yr(l,e){ps(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var gl=new _;(function(l){yr(e,l);function e(t,i,n){i===void 0&&(i=100),n===void 0&&(n=100);var a=l.call(this,t)||this;return a.tileTransform=new fd,a._width=i,a._height=n,a.uvMatrix=a.texture.uvMatrix||new Pa(t),a.pluginName="tilingSprite",a.uvRespectAnchor=!1,a}return Object.defineProperty(e.prototype,"clampMargin",{get:function(){return this.uvMatrix.clampMargin},set:function(t){this.uvMatrix.clampMargin=t,this.uvMatrix.update(!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tileScale",{get:function(){return this.tileTransform.scale},set:function(t){this.tileTransform.scale.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tilePosition",{get:function(){return this.tileTransform.position},set:function(t){this.tileTransform.position.copyFrom(t)},enumerable:!1,configurable:!0}),e.prototype._onTextureUpdate=function(){this.uvMatrix&&(this.uvMatrix.texture=this._texture),this._cachedTint=16777215},e.prototype._render=function(t){var i=this._texture;!i||!i.valid||(this.tileTransform.updateLocalTransform(),this.uvMatrix.update(),t.batch.setObjectRenderer(t.plugins[this.pluginName]),t.plugins[this.pluginName].render(this))},e.prototype._calculateBounds=function(){var t=this._width*-this._anchor._x,i=this._height*-this._anchor._y,n=this._width*(1-this._anchor._x),a=this._height*(1-this._anchor._y);this._bounds.addFrame(this.transform,t,i,n,a)},e.prototype.getLocalBounds=function(t){return this.children.length===0?(this._bounds.minX=this._width*-this._anchor._x,this._bounds.minY=this._height*-this._anchor._y,this._bounds.maxX=this._width*(1-this._anchor._x),this._bounds.maxY=this._height*(1-this._anchor._y),t||(this._localBoundsRect||(this._localBoundsRect=new j),t=this._localBoundsRect),this._bounds.getRectangle(t)):l.prototype.getLocalBounds.call(this,t)},e.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,gl);var i=this._width,n=this._height,a=-i*this.anchor._x;if(gl.x>=a&&gl.x<a+i){var s=-n*this.anchor._y;if(gl.y>=s&&gl.y<s+n)return!0}return!1},e.prototype.destroy=function(t){l.prototype.destroy.call(this,t),this.tileTransform=null,this.uvMatrix=null},e.from=function(t,i){var n=t instanceof z?t:z.from(t,i);return new e(n,i.width,i.height)},Object.defineProperty(e.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t},enumerable:!1,configurable:!0}),e})(Il);var PG=`#version 100
526
530
  #define SHADER_NAME Tiling-Sprite-Simple-100
527
531
 
528
532
  precision lowp float;
@@ -537,7 +541,7 @@ void main(void)
537
541
  vec4 texSample = texture2D(uSampler, vTextureCoord);
538
542
  gl_FragColor = texSample * uColor;
539
543
  }
540
- `,Da=`#version 100
544
+ `,Vr=`#version 100
541
545
  #define SHADER_NAME Tiling-Sprite-100
542
546
 
543
547
  precision lowp float;
@@ -557,7 +561,7 @@ void main(void)
557
561
 
558
562
  vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;
559
563
  }
560
- `,Ap=`#version 100
564
+ `,zG=`#version 100
561
565
  #ifdef GL_EXT_shader_texture_lod
562
566
  #extension GL_EXT_shader_texture_lod : enable
563
567
  #endif
@@ -590,7 +594,7 @@ void main(void)
590
594
 
591
595
  gl_FragColor = texSample * uColor;
592
596
  }
593
- `,Ip=`#version 300 es
597
+ `,EG=`#version 300 es
594
598
  #define SHADER_NAME Tiling-Sprite-300
595
599
 
596
600
  precision lowp float;
@@ -610,7 +614,7 @@ void main(void)
610
614
 
611
615
  vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;
612
616
  }
613
- `,Op=`#version 300 es
617
+ `,BG=`#version 300 es
614
618
  #define SHADER_NAME Tiling-Sprite-100
615
619
 
616
620
  precision lowp float;
@@ -636,7 +640,7 @@ void main(void)
636
640
 
637
641
  fragmentColor = texSample * uColor;
638
642
  }
639
- `,ir=new gt,Mp=function(r){Ma(e,r);function e(t){var i=r.call(this,t)||this;return t.runners.contextChange.add(i),i.quad=new Ls,i.state=Ee.for2d(),i}return e.prototype.contextChange=function(){var t=this.renderer,i={globals:t.globalUniforms};this.simpleShader=ae.from(Da,Cp,i),this.shader=t.context.webGLVersion>1?ae.from(Ip,Op,i):ae.from(Da,Ap,i)},e.prototype.render=function(t){var i=this.renderer,n=this.quad,s=n.vertices;s[0]=s[6]=t._width*-t.anchor.x,s[1]=s[3]=t._height*-t.anchor.y,s[2]=s[4]=t._width*(1-t.anchor.x),s[5]=s[7]=t._height*(1-t.anchor.y);var a=t.uvRespectAnchor?t.anchor.x:0,o=t.uvRespectAnchor?t.anchor.y:0;s=n.uvs,s[0]=s[6]=-a,s[1]=s[3]=-o,s[2]=s[4]=1-a,s[5]=s[7]=1-o,n.invalidate();var h=t._texture,u=h.baseTexture,l=u.alphaMode>0,f=t.tileTransform.localTransform,c=t.uvMatrix,d=u.isPowerOfTwo&&h.frame.width===u.width&&h.frame.height===u.height;d&&(u._glTextures[i.CONTEXT_UID]?d=u.wrapMode!==zt.CLAMP:u.wrapMode===zt.CLAMP&&(u.wrapMode=zt.REPEAT));var p=d?this.simpleShader:this.shader,v=h.width,_=h.height,m=t._width,g=t._height;ir.set(f.a*v/m,f.b*v/g,f.c*_/m,f.d*_/g,f.tx/m,f.ty/g),ir.invert(),d?ir.prepend(c.mapCoord):(p.uniforms.uMapCoord=c.mapCoord.toArray(!0),p.uniforms.uClampFrame=c.uClampFrame,p.uniforms.uClampOffset=c.uClampOffset),p.uniforms.uTransform=ir.toArray(!0),p.uniforms.uColor=xs(t.tint,t.worldAlpha,p.uniforms.uColor,l),p.uniforms.translationMatrix=t.transform.worldTransform.toArray(!0),p.uniforms.uSampler=h,i.shader.bind(p),i.geometry.bind(n),this.state.blendMode=ys(t.blendMode,l),i.state.set(this.state),i.geometry.draw(this.renderer.gl.TRIANGLES,6,0)},e.extension={name:"tilingSprite",type:tt.RendererPlugin},e}(Li);var wn=function(r,e){return wn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},wn(r,e)};function En(r,e){wn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Dp=function(){function r(e,t){this.uvBuffer=e,this.uvMatrix=t,this.data=null,this._bufferUpdateId=-1,this._textureUpdateId=-1,this._updateID=0}return r.prototype.update=function(e){if(!(!e&&this._bufferUpdateId===this.uvBuffer._updateID&&this._textureUpdateId===this.uvMatrix._updateID)){this._bufferUpdateId=this.uvBuffer._updateID,this._textureUpdateId=this.uvMatrix._updateID;var t=this.uvBuffer.data;(!this.data||this.data.length!==t.length)&&(this.data=new Float32Array(t.length)),this.uvMatrix.multiplyUvs(t,this.data),this._updateID++}},r}(),Sn=new X,Fa=new yi,pi=function(r){En(e,r);function e(t,i,n,s){s===void 0&&(s=Dt.TRIANGLES);var a=r.call(this)||this;return a.geometry=t,a.shader=i,a.state=n||Ee.for2d(),a.drawMode=s,a.start=0,a.size=0,a.uvs=null,a.indices=null,a.vertexData=new Float32Array(1),a.vertexDirty=-1,a._transformID=-1,a._roundPixels=F.ROUND_PIXELS,a.batchUvs=null,a}return Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},set:function(t){this._geometry!==t&&(this._geometry&&(this._geometry.refCount--,this._geometry.refCount===0&&this._geometry.dispose()),this._geometry=t,this._geometry&&this._geometry.refCount++,this.vertexDirty=-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"uvBuffer",{get:function(){return this.geometry.buffers[1]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"verticesBuffer",{get:function(){return this.geometry.buffers[0]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"material",{get:function(){return this.shader},set:function(t){this.shader=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){this._roundPixels!==t&&(this._transformID=-1),this._roundPixels=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return"tint"in this.shader?this.shader.tint:null},set:function(t){this.shader.tint=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"texture",{get:function(){return"texture"in this.shader?this.shader.texture:null},set:function(t){this.shader.texture=t},enumerable:!1,configurable:!0}),e.prototype._render=function(t){var i=this.geometry.buffers[0].data,n=this.shader;n.batchable&&this.drawMode===Dt.TRIANGLES&&i.length<e.BATCHABLE_SIZE*2?this._renderToBatch(t):this._renderDefault(t)},e.prototype._renderDefault=function(t){var i=this.shader;i.alpha=this.worldAlpha,i.update&&i.update(),t.batch.flush(),i.uniforms.translationMatrix=this.transform.worldTransform.toArray(!0),t.shader.bind(i),t.state.set(this.state),t.geometry.bind(this.geometry,i),t.geometry.draw(this.drawMode,this.size,this.start,this.geometry.instanceCount)},e.prototype._renderToBatch=function(t){var i=this.geometry,n=this.shader;n.uvMatrix&&(n.uvMatrix.update(),this.calculateUvs()),this.calculateVertices(),this.indices=i.indexBuffer.data,this._tintRGB=n._tintRGB,this._texture=n.texture;var s=this.material.pluginName;t.batch.setObjectRenderer(t.plugins[s]),t.plugins[s].render(this)},e.prototype.calculateVertices=function(){var t=this.geometry,i=t.buffers[0],n=i.data,s=i._updateID;if(!(s===this.vertexDirty&&this._transformID===this.transform._worldID)){this._transformID=this.transform._worldID,this.vertexData.length!==n.length&&(this.vertexData=new Float32Array(n.length));for(var a=this.transform.worldTransform,o=a.a,h=a.b,u=a.c,l=a.d,f=a.tx,c=a.ty,d=this.vertexData,p=0;p<d.length/2;p++){var v=n[p*2],_=n[p*2+1];d[p*2]=o*v+u*_+f,d[p*2+1]=h*v+l*_+c}if(this._roundPixels)for(var m=F.RESOLUTION,p=0;p<d.length;++p)d[p]=Math.round((d[p]*m|0)/m);this.vertexDirty=s}},e.prototype.calculateUvs=function(){var t=this.geometry.buffers[1],i=this.shader;i.uvMatrix.isSimple?this.uvs=t.data:(this.batchUvs||(this.batchUvs=new Dp(t,i.uvMatrix)),this.batchUvs.update(),this.uvs=this.batchUvs.data)},e.prototype._calculateBounds=function(){this.calculateVertices(),this._bounds.addVertexData(this.vertexData,0,this.vertexData.length)},e.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,Sn);for(var i=this.geometry.getBuffer("aVertexPosition").data,n=Fa.points,s=this.geometry.getIndex().data,a=s.length,o=this.drawMode===4?3:1,h=0;h+2<a;h+=o){var u=s[h]*2,l=s[h+1]*2,f=s[h+2]*2;if(n[0]=i[u],n[1]=i[u+1],n[2]=i[l],n[3]=i[l+1],n[4]=i[f],n[5]=i[f+1],Fa.contains(Sn.x,Sn.y))return!0}return!1},e.prototype.destroy=function(t){r.prototype.destroy.call(this,t),this._cachedTexture&&(this._cachedTexture.destroy(),this._cachedTexture=null),this.geometry=null,this.shader=null,this.state=null,this.uvs=null,this.indices=null,this.vertexData=null},e.BATCHABLE_SIZE=100,e}(Pt),Fp=`varying vec2 vTextureCoord;
643
+ `,Cn=new vt,QG=function(l){yr(e,l);function e(t){var i=l.call(this,t)||this;return t.runners.contextChange.add(i),i.quad=new Lh,i.state=Vi.for2d(),i}return e.prototype.contextChange=function(){var t=this.renderer,i={globals:t.globalUniforms};this.simpleShader=je.from(Vr,PG,i),this.shader=t.context.webGLVersion>1?je.from(EG,BG,i):je.from(Vr,zG,i)},e.prototype.render=function(t){var i=this.renderer,n=this.quad,a=n.vertices;a[0]=a[6]=t._width*-t.anchor.x,a[1]=a[3]=t._height*-t.anchor.y,a[2]=a[4]=t._width*(1-t.anchor.x),a[5]=a[7]=t._height*(1-t.anchor.y);var s=t.uvRespectAnchor?t.anchor.x:0,d=t.uvRespectAnchor?t.anchor.y:0;a=n.uvs,a[0]=a[6]=-s,a[1]=a[3]=-d,a[2]=a[4]=1-s,a[5]=a[7]=1-d,n.invalidate();var h=t._texture,r=h.baseTexture,o=r.alphaMode>0,c=t.tileTransform.localTransform,u=t.uvMatrix,m=r.isPowerOfTwo&&h.frame.width===r.width&&h.frame.height===r.height;m&&(r._glTextures[i.CONTEXT_UID]?m=r.wrapMode!==xe.CLAMP:r.wrapMode===xe.CLAMP&&(r.wrapMode=xe.REPEAT));var b=m?this.simpleShader:this.shader,Z=h.width,p=h.height,G=t._width,X=t._height;Cn.set(c.a*Z/G,c.b*Z/X,c.c*p/G,c.d*p/X,c.tx/G,c.ty/X),Cn.invert(),m?Cn.prepend(u.mapCoord):(b.uniforms.uMapCoord=u.mapCoord.toArray(!0),b.uniforms.uClampFrame=u.uClampFrame,b.uniforms.uClampOffset=u.uClampOffset),b.uniforms.uTransform=Cn.toArray(!0),b.uniforms.uColor=dh(t.tint,t.worldAlpha,b.uniforms.uColor,o),b.uniforms.translationMatrix=t.transform.worldTransform.toArray(!0),b.uniforms.uSampler=h,i.shader.bind(b),i.geometry.bind(n),this.state.blendMode=sh(t.blendMode,o),i.state.set(this.state),i.geometry.draw(this.renderer.gl.TRIANGLES,6,0)},e.extension={name:"tilingSprite",type:nt.RendererPlugin},e}(bn);var Gs=function(l,e){return Gs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Gs(l,e)};function Xs(l,e){Gs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var _G=function(){function l(e,t){this.uvBuffer=e,this.uvMatrix=t,this.data=null,this._bufferUpdateId=-1,this._textureUpdateId=-1,this._updateID=0}return l.prototype.update=function(e){if(!(!e&&this._bufferUpdateId===this.uvBuffer._updateID&&this._textureUpdateId===this.uvMatrix._updateID)){this._bufferUpdateId=this.uvBuffer._updateID,this._textureUpdateId=this.uvMatrix._updateID;var t=this.uvBuffer.data;(!this.data||this.data.length!==t.length)&&(this.data=new Float32Array(t.length)),this.uvMatrix.multiplyUvs(t,this.data),this._updateID++}},l}(),ys=new _,Rr=new Ol,Tl=function(l){Xs(e,l);function e(t,i,n,a){a===void 0&&(a=ce.TRIANGLES);var s=l.call(this)||this;return s.geometry=t,s.shader=i,s.state=n||Vi.for2d(),s.drawMode=a,s.start=0,s.size=0,s.uvs=null,s.indices=null,s.vertexData=new Float32Array(1),s.vertexDirty=-1,s._transformID=-1,s._roundPixels=U.ROUND_PIXELS,s.batchUvs=null,s}return Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},set:function(t){this._geometry!==t&&(this._geometry&&(this._geometry.refCount--,this._geometry.refCount===0&&this._geometry.dispose()),this._geometry=t,this._geometry&&this._geometry.refCount++,this.vertexDirty=-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"uvBuffer",{get:function(){return this.geometry.buffers[1]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"verticesBuffer",{get:function(){return this.geometry.buffers[0]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"material",{get:function(){return this.shader},set:function(t){this.shader=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.state.blendMode},set:function(t){this.state.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){this._roundPixels!==t&&(this._transformID=-1),this._roundPixels=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return"tint"in this.shader?this.shader.tint:null},set:function(t){this.shader.tint=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"texture",{get:function(){return"texture"in this.shader?this.shader.texture:null},set:function(t){this.shader.texture=t},enumerable:!1,configurable:!0}),e.prototype._render=function(t){var i=this.geometry.buffers[0].data,n=this.shader;n.batchable&&this.drawMode===ce.TRIANGLES&&i.length<e.BATCHABLE_SIZE*2?this._renderToBatch(t):this._renderDefault(t)},e.prototype._renderDefault=function(t){var i=this.shader;i.alpha=this.worldAlpha,i.update&&i.update(),t.batch.flush(),i.uniforms.translationMatrix=this.transform.worldTransform.toArray(!0),t.shader.bind(i),t.state.set(this.state),t.geometry.bind(this.geometry,i),t.geometry.draw(this.drawMode,this.size,this.start,this.geometry.instanceCount)},e.prototype._renderToBatch=function(t){var i=this.geometry,n=this.shader;n.uvMatrix&&(n.uvMatrix.update(),this.calculateUvs()),this.calculateVertices(),this.indices=i.indexBuffer.data,this._tintRGB=n._tintRGB,this._texture=n.texture;var a=this.material.pluginName;t.batch.setObjectRenderer(t.plugins[a]),t.plugins[a].render(this)},e.prototype.calculateVertices=function(){var t=this.geometry,i=t.buffers[0],n=i.data,a=i._updateID;if(!(a===this.vertexDirty&&this._transformID===this.transform._worldID)){this._transformID=this.transform._worldID,this.vertexData.length!==n.length&&(this.vertexData=new Float32Array(n.length));for(var s=this.transform.worldTransform,d=s.a,h=s.b,r=s.c,o=s.d,c=s.tx,u=s.ty,m=this.vertexData,b=0;b<m.length/2;b++){var Z=n[b*2],p=n[b*2+1];m[b*2]=d*Z+r*p+c,m[b*2+1]=h*Z+o*p+u}if(this._roundPixels)for(var G=U.RESOLUTION,b=0;b<m.length;++b)m[b]=Math.round((m[b]*G|0)/G);this.vertexDirty=a}},e.prototype.calculateUvs=function(){var t=this.geometry.buffers[1],i=this.shader;i.uvMatrix.isSimple?this.uvs=t.data:(this.batchUvs||(this.batchUvs=new _G(t,i.uvMatrix)),this.batchUvs.update(),this.uvs=this.batchUvs.data)},e.prototype._calculateBounds=function(){this.calculateVertices(),this._bounds.addVertexData(this.vertexData,0,this.vertexData.length)},e.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,ys);for(var i=this.geometry.getBuffer("aVertexPosition").data,n=Rr.points,a=this.geometry.getIndex().data,s=a.length,d=this.drawMode===4?3:1,h=0;h+2<s;h+=d){var r=a[h]*2,o=a[h+1]*2,c=a[h+2]*2;if(n[0]=i[r],n[1]=i[r+1],n[2]=i[o],n[3]=i[o+1],n[4]=i[c],n[5]=i[c+1],Rr.contains(ys.x,ys.y))return!0}return!1},e.prototype.destroy=function(t){l.prototype.destroy.call(this,t),this._cachedTexture&&(this._cachedTexture.destroy(),this._cachedTexture=null),this.geometry=null,this.shader=null,this.state=null,this.uvs=null,this.indices=null,this.vertexData=null},e.BATCHABLE_SIZE=100,e}(xt),jG=`varying vec2 vTextureCoord;
640
644
  uniform vec4 uColor;
641
645
 
642
646
  uniform sampler2D uSampler;
@@ -645,7 +649,7 @@ void main(void)
645
649
  {
646
650
  gl_FragColor = texture2D(uSampler, vTextureCoord) * uColor;
647
651
  }
648
- `,Np=`attribute vec2 aVertexPosition;
652
+ `,DG=`attribute vec2 aVertexPosition;
649
653
  attribute vec2 aTextureCoord;
650
654
 
651
655
  uniform mat3 projectionMatrix;
@@ -660,7 +664,7 @@ void main(void)
660
664
 
661
665
  vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy;
662
666
  }
663
- `,vi=function(r){En(e,r);function e(t,i){var n=this,s={uSampler:t,alpha:1,uTextureMatrix:gt.IDENTITY,uColor:new Float32Array([1,1,1,1])};return i=Object.assign({tint:16777215,alpha:1,pluginName:"batch"},i),i.uniforms&&Object.assign(s,i.uniforms),n=r.call(this,i.program||si.from(Np,Fp),s)||this,n._colorDirty=!1,n.uvMatrix=new Vr(t),n.batchable=i.program===void 0,n.pluginName=i.pluginName,n.tint=i.tint,n.alpha=i.alpha,n}return Object.defineProperty(e.prototype,"texture",{get:function(){return this.uniforms.uSampler},set:function(t){this.uniforms.uSampler!==t&&(!this.uniforms.uSampler.baseTexture.alphaMode!=!t.baseTexture.alphaMode&&(this._colorDirty=!0),this.uniforms.uSampler=t,this.uvMatrix.texture=t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alpha",{get:function(){return this._alpha},set:function(t){t!==this._alpha&&(this._alpha=t,this._colorDirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){t!==this._tint&&(this._tint=t,this._tintRGB=(t>>16)+(t&65280)+((t&255)<<16),this._colorDirty=!0)},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(this._colorDirty){this._colorDirty=!1;var t=this.texture.baseTexture;xs(this._tint,this._alpha,this.uniforms.uColor,t.alphaMode)}this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)},e}(ae),rr=function(r){En(e,r);function e(t,i,n){var s=r.call(this)||this,a=new yt(t),o=new yt(i,!0),h=new yt(n,!0,!0);return s.addAttribute("aVertexPosition",a,2,!1,L.FLOAT).addAttribute("aTextureCoord",o,2,!1,L.FLOAT).addIndex(h),s._updateId=-1,s}return Object.defineProperty(e.prototype,"vertexDirtyId",{get:function(){return this.buffers[0]._updateID},enumerable:!1,configurable:!0}),e}(ii);var Pn=function(r,e){return Pn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Pn(r,e)};function Bp(r,e){Pn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var nr=function(){function r(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}return r}(),Lp=function(){function r(){}return r.test=function(e){return typeof e=="string"&&e.indexOf("info face=")===0},r.parse=function(e){var t=e.match(/^[a-z]+\s+.+$/gm),i={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(var n in t){var s=t[n].match(/^[a-z]+/gm)[0],a=t[n].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),o={};for(var h in a){var u=a[h].split("="),l=u[0],f=u[1].replace(/"/gm,""),c=parseFloat(f),d=isNaN(c)?f:c;o[l]=d}i[s].push(o)}var p=new nr;return i.info.forEach(function(v){return p.info.push({face:v.face,size:parseInt(v.size,10)})}),i.common.forEach(function(v){return p.common.push({lineHeight:parseInt(v.lineHeight,10)})}),i.page.forEach(function(v){return p.page.push({id:parseInt(v.id,10),file:v.file})}),i.char.forEach(function(v){return p.char.push({id:parseInt(v.id,10),page:parseInt(v.page,10),x:parseInt(v.x,10),y:parseInt(v.y,10),width:parseInt(v.width,10),height:parseInt(v.height,10),xoffset:parseInt(v.xoffset,10),yoffset:parseInt(v.yoffset,10),xadvance:parseInt(v.xadvance,10)})}),i.kerning.forEach(function(v){return p.kerning.push({first:parseInt(v.first,10),second:parseInt(v.second,10),amount:parseInt(v.amount,10)})}),i.distanceField.forEach(function(v){return p.distanceField.push({distanceRange:parseInt(v.distanceRange,10),fieldType:v.fieldType})}),p},r}(),Rn=function(){function r(){}return r.test=function(e){return e instanceof XMLDocument&&e.getElementsByTagName("page").length&&e.getElementsByTagName("info")[0].getAttribute("face")!==null},r.parse=function(e){for(var t=new nr,i=e.getElementsByTagName("info"),n=e.getElementsByTagName("common"),s=e.getElementsByTagName("page"),a=e.getElementsByTagName("char"),o=e.getElementsByTagName("kerning"),h=e.getElementsByTagName("distanceField"),u=0;u<i.length;u++)t.info.push({face:i[u].getAttribute("face"),size:parseInt(i[u].getAttribute("size"),10)});for(var u=0;u<n.length;u++)t.common.push({lineHeight:parseInt(n[u].getAttribute("lineHeight"),10)});for(var u=0;u<s.length;u++)t.page.push({id:parseInt(s[u].getAttribute("id"),10)||0,file:s[u].getAttribute("file")});for(var u=0;u<a.length;u++){var l=a[u];t.char.push({id:parseInt(l.getAttribute("id"),10),page:parseInt(l.getAttribute("page"),10)||0,x:parseInt(l.getAttribute("x"),10),y:parseInt(l.getAttribute("y"),10),width:parseInt(l.getAttribute("width"),10),height:parseInt(l.getAttribute("height"),10),xoffset:parseInt(l.getAttribute("xoffset"),10),yoffset:parseInt(l.getAttribute("yoffset"),10),xadvance:parseInt(l.getAttribute("xadvance"),10)})}for(var u=0;u<o.length;u++)t.kerning.push({first:parseInt(o[u].getAttribute("first"),10),second:parseInt(o[u].getAttribute("second"),10),amount:parseInt(o[u].getAttribute("amount"),10)});for(var u=0;u<h.length;u++)t.distanceField.push({fieldType:h[u].getAttribute("fieldType"),distanceRange:parseInt(h[u].getAttribute("distanceRange"),10)});return t},r}(),Up=function(){function r(){}return r.test=function(e){if(typeof e=="string"&&e.indexOf("<font>")>-1){var t=new globalThis.DOMParser().parseFromString(e,"text/xml");return Rn.test(t)}return!1},r.parse=function(e){var t=new globalThis.DOMParser().parseFromString(e,"text/xml");return Rn.parse(t)},r}(),Cn=[Lp,Rn,Up];function Na(r){for(var e=0;e<Cn.length;e++)if(Cn[e].test(r))return Cn[e];return null}function Gp(r,e,t,i,n,s){var a=t.fill;if(Array.isArray(a)){if(a.length===1)return a[0]}else return a;var o,h=t.dropShadow?t.dropShadowDistance:0,u=t.padding||0,l=r.width/i-h-u*2,f=r.height/i-h-u*2,c=a.slice(),d=t.fillGradientStops.slice();if(!d.length)for(var p=c.length+1,v=1;v<p;++v)d.push(v/p);if(c.unshift(a[0]),d.unshift(0),c.push(a[a.length-1]),d.push(1),t.fillGradientType===ci.LINEAR_VERTICAL){o=e.createLinearGradient(l/2,u,l/2,f+u);for(var _=0,m=s.fontProperties.fontSize+t.strokeThickness,g=m/f,v=0;v<n.length;v++)for(var y=s.lineHeight*v,b=0;b<c.length;b++){var x=0;typeof d[b]=="number"?x=d[b]:x=b/c.length;var T=y/f+x*g,w=Math.max(_,T);w=Math.min(w,1),o.addColorStop(w,c[b]),_=w}}else{o=e.createLinearGradient(u,f/2,l+u,f/2);for(var A=c.length+1,S=1,v=0;v<c.length;v++){var E=void 0;typeof d[v]=="number"?E=d[v]:E=S/A,o.addColorStop(E,c[v]),S++}}return o}function kp(r,e,t,i,n,s,a){var o=t.text,h=t.fontProperties;e.translate(i,n),e.scale(s,s);var u=a.strokeThickness/2,l=-(a.strokeThickness/2);if(e.font=a.toFontString(),e.lineWidth=a.strokeThickness,e.textBaseline=a.textBaseline,e.lineJoin=a.lineJoin,e.miterLimit=a.miterLimit,e.fillStyle=Gp(r,e,a,s,[o],t),e.strokeStyle=a.stroke,a.dropShadow){var f=a.dropShadowColor,c=Be(typeof f=="number"?f:ms(f)),d=a.dropShadowBlur*s,p=a.dropShadowDistance*s;e.shadowColor="rgba("+c[0]*255+","+c[1]*255+","+c[2]*255+","+a.dropShadowAlpha+")",e.shadowBlur=d,e.shadowOffsetX=Math.cos(a.dropShadowAngle)*p,e.shadowOffsetY=Math.sin(a.dropShadowAngle)*p}else e.shadowColor="black",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0;a.stroke&&a.strokeThickness&&e.strokeText(o,u,l+t.lineHeight-h.descent),a.fill&&e.fillText(o,u,l+t.lineHeight-h.descent),e.setTransform(1,0,0,1,0,0),e.fillStyle="rgba(0, 0, 0, 0)"}function Ba(r){return Array.from?Array.from(r):r.split("")}function Hp(r){typeof r=="string"&&(r=[r]);for(var e=[],t=0,i=r.length;t<i;t++){var n=r[t];if(Array.isArray(n)){if(n.length!==2)throw new Error("[BitmapFont]: Invalid character range length, expecting 2 got "+n.length+".");var s=n[0].charCodeAt(0),a=n[1].charCodeAt(0);if(a<s)throw new Error("[BitmapFont]: Invalid character range.");for(var o=s,h=a;o<=h;o++)e.push(String.fromCharCode(o))}else e.push.apply(e,Ba(n))}if(e.length===0)throw new Error("[BitmapFont]: Empty set when resolving characters.");return e}function sr(r){return r.codePointAt?r.codePointAt(0):r.charCodeAt(0)}var Mt=function(){function r(e,t,i){var n,s,a=e.info[0],o=e.common[0],h=e.page[0],u=e.distanceField[0],l=Di(h.file),f={};this._ownsTextures=i,this.font=a.face,this.size=a.size,this.lineHeight=o.lineHeight/l,this.chars={},this.pageTextures=f;for(var c=0;c<e.page.length;c++){var d=e.page[c],p=d.id,v=d.file;f[p]=t instanceof Array?t[c]:t[v],u!=null&&u.fieldType&&u.fieldType!=="none"&&(f[p].baseTexture.alphaMode=Nt.NO_PREMULTIPLIED_ALPHA,f[p].baseTexture.mipmap=Ft.OFF)}for(var c=0;c<e.char.length;c++){var _=e.char[c],p=_.id,m=_.page,g=e.char[c],y=g.x,b=g.y,x=g.width,T=g.height,w=g.xoffset,A=g.yoffset,S=g.xadvance;y/=l,b/=l,x/=l,T/=l,w/=l,A/=l,S/=l;var E=new j(y+f[m].frame.x/l,b+f[m].frame.y/l,x,T);this.chars[p]={xOffset:w,yOffset:A,xAdvance:S,kerning:{},texture:new k(f[m].baseTexture,E),page:m}}for(var c=0;c<e.kerning.length;c++){var D=e.kerning[c],C=D.first,N=D.second,W=D.amount;C/=l,N/=l,W/=l,this.chars[N]&&(this.chars[N].kerning[C]=W)}this.distanceFieldRange=u==null?void 0:u.distanceRange,this.distanceFieldType=(s=(n=u==null?void 0:u.fieldType)===null||n===void 0?void 0:n.toLowerCase())!==null&&s!==void 0?s:"none"}return r.prototype.destroy=function(){for(var e in this.chars)this.chars[e].texture.destroy(),this.chars[e].texture=null;for(var e in this.pageTextures)this._ownsTextures&&this.pageTextures[e].destroy(!0),this.pageTextures[e]=null;this.chars=null,this.pageTextures=null},r.install=function(e,t,i){var n;if(e instanceof nr)n=e;else{var s=Na(e);if(!s)throw new Error("Unrecognized data format for font.");n=s.parse(e)}t instanceof k&&(t=[t]);var a=new r(n,t,i);return r.available[a.font]=a,a},r.uninstall=function(e){var t=r.available[e];if(!t)throw new Error("No font found named '"+e+"'");t.destroy(),delete r.available[e]},r.from=function(e,t,i){if(!e)throw new Error("[BitmapFont] Property `name` is required.");var n=Object.assign({},r.defaultOptions,i),s=n.chars,a=n.padding,o=n.resolution,h=n.textureWidth,u=n.textureHeight,l=Hp(s),f=t instanceof le?t:new le(t),c=h,d=new nr;d.info[0]={face:f.fontFamily,size:f.fontSize},d.common[0]={lineHeight:f.fontSize};for(var p=0,v=0,_,m,g,y=0,b=[],x=0;x<l.length;x++){_||(_=F.ADAPTER.createCanvas(),_.width=h,_.height=u,m=_.getContext("2d"),g=new V(_,{resolution:o}),b.push(new k(g)),d.page.push({id:b.length-1,file:""}));var T=l[x],w=Xt.measureText(T,f,!1,_),A=w.width,S=Math.ceil(w.height),E=Math.ceil((f.fontStyle==="italic"?2:1)*A);if(v>=u-S*o){if(v===0)throw new Error("[BitmapFont] textureHeight "+u+"px is too small "+("(fontFamily: '"+f.fontFamily+"', fontSize: "+f.fontSize+"px, char: '"+T+"')"));--x,_=null,m=null,g=null,v=0,p=0,y=0;continue}if(y=Math.max(S+w.fontProperties.descent,y),E*o+p>=c){if(p===0)throw new Error("[BitmapFont] textureWidth "+h+"px is too small "+("(fontFamily: '"+f.fontFamily+"', fontSize: "+f.fontSize+"px, char: '"+T+"')"));--x,v+=y*o,v=Math.ceil(v),p=0,y=0;continue}kp(_,m,w,p,v,o,f);var D=sr(w.text);d.char.push({id:D,page:b.length-1,x:p/o,y:v/o,width:E,height:S,xoffset:0,yoffset:0,xadvance:Math.ceil(A-(f.dropShadow?f.dropShadowDistance:0)-(f.stroke?f.strokeThickness:0))}),p+=(E+2*a)*o,p=Math.ceil(p)}for(var x=0,C=l.length;x<C;x++)for(var N=l[x],W=0;W<C;W++){var M=l[W],O=m.measureText(N).width,U=m.measureText(M).width,rt=m.measureText(N+M).width,z=rt-(O+U);z&&d.kerning.push({first:sr(N),second:sr(M),amount:z})}var I=new r(d,b,!0);return r.available[e]!==void 0&&r.uninstall(e),r.available[e]=I,I},r.ALPHA=[["a","z"],["A","Z"]," "],r.NUMERIC=[["0","9"]],r.ALPHANUMERIC=[["a","z"],["A","Z"],["0","9"]," "],r.ASCII=[[" ","~"]],r.defaultOptions={resolution:1,textureWidth:512,textureHeight:512,padding:4,chars:r.ALPHANUMERIC},r.available={},r}(),Xp=`// Pixi texture info\r
667
+ `,Hl=function(l){Xs(e,l);function e(t,i){var n=this,a={uSampler:t,alpha:1,uTextureMatrix:vt.IDENTITY,uColor:new Float32Array([1,1,1,1])};return i=Object.assign({tint:16777215,alpha:1,pluginName:"batch"},i),i.uniforms&&Object.assign(a,i.uniforms),n=l.call(this,i.program||Wl.from(DG,jG),a)||this,n._colorDirty=!1,n.uvMatrix=new Pa(t),n.batchable=i.program===void 0,n.pluginName=i.pluginName,n.tint=i.tint,n.alpha=i.alpha,n}return Object.defineProperty(e.prototype,"texture",{get:function(){return this.uniforms.uSampler},set:function(t){this.uniforms.uSampler!==t&&(!this.uniforms.uSampler.baseTexture.alphaMode!=!t.baseTexture.alphaMode&&(this._colorDirty=!0),this.uniforms.uSampler=t,this.uvMatrix.texture=t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alpha",{get:function(){return this._alpha},set:function(t){t!==this._alpha&&(this._alpha=t,this._colorDirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){t!==this._tint&&(this._tint=t,this._tintRGB=(t>>16)+(t&65280)+((t&255)<<16),this._colorDirty=!0)},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(this._colorDirty){this._colorDirty=!1;var t=this.texture.baseTexture;dh(this._tint,this._alpha,this.uniforms.uColor,t.alphaMode)}this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)},e}(je),Fn=function(l){Xs(e,l);function e(t,i,n){var a=l.call(this)||this,s=new Yt(t),d=new Yt(i,!0),h=new Yt(n,!0,!0);return a.addAttribute("aVertexPosition",s,2,!1,K.FLOAT).addAttribute("aTextureCoord",d,2,!1,K.FLOAT).addIndex(h),a._updateId=-1,a}return Object.defineProperty(e.prototype,"vertexDirtyId",{get:function(){return this.buffers[0]._updateID},enumerable:!1,configurable:!0}),e}(yl);var Vs=function(l,e){return Vs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Vs(l,e)};function OG(l,e){Vs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Un=function(){function l(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}return l}(),AG=function(){function l(){}return l.test=function(e){return typeof e=="string"&&e.indexOf("info face=")===0},l.parse=function(e){var t=e.match(/^[a-z]+\s+.+$/gm),i={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(var n in t){var a=t[n].match(/^[a-z]+/gm)[0],s=t[n].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),d={};for(var h in s){var r=s[h].split("="),o=r[0],c=r[1].replace(/"/gm,""),u=parseFloat(c),m=isNaN(u)?c:u;d[o]=m}i[a].push(d)}var b=new Un;return i.info.forEach(function(Z){return b.info.push({face:Z.face,size:parseInt(Z.size,10)})}),i.common.forEach(function(Z){return b.common.push({lineHeight:parseInt(Z.lineHeight,10)})}),i.page.forEach(function(Z){return b.page.push({id:parseInt(Z.id,10),file:Z.file})}),i.char.forEach(function(Z){return b.char.push({id:parseInt(Z.id,10),page:parseInt(Z.page,10),x:parseInt(Z.x,10),y:parseInt(Z.y,10),width:parseInt(Z.width,10),height:parseInt(Z.height,10),xoffset:parseInt(Z.xoffset,10),yoffset:parseInt(Z.yoffset,10),xadvance:parseInt(Z.xadvance,10)})}),i.kerning.forEach(function(Z){return b.kerning.push({first:parseInt(Z.first,10),second:parseInt(Z.second,10),amount:parseInt(Z.amount,10)})}),i.distanceField.forEach(function(Z){return b.distanceField.push({distanceRange:parseInt(Z.distanceRange,10),fieldType:Z.fieldType})}),b},l}(),Rs=function(){function l(){}return l.test=function(e){return e instanceof XMLDocument&&e.getElementsByTagName("page").length&&e.getElementsByTagName("info")[0].getAttribute("face")!==null},l.parse=function(e){for(var t=new Un,i=e.getElementsByTagName("info"),n=e.getElementsByTagName("common"),a=e.getElementsByTagName("page"),s=e.getElementsByTagName("char"),d=e.getElementsByTagName("kerning"),h=e.getElementsByTagName("distanceField"),r=0;r<i.length;r++)t.info.push({face:i[r].getAttribute("face"),size:parseInt(i[r].getAttribute("size"),10)});for(var r=0;r<n.length;r++)t.common.push({lineHeight:parseInt(n[r].getAttribute("lineHeight"),10)});for(var r=0;r<a.length;r++)t.page.push({id:parseInt(a[r].getAttribute("id"),10)||0,file:a[r].getAttribute("file")});for(var r=0;r<s.length;r++){var o=s[r];t.char.push({id:parseInt(o.getAttribute("id"),10),page:parseInt(o.getAttribute("page"),10)||0,x:parseInt(o.getAttribute("x"),10),y:parseInt(o.getAttribute("y"),10),width:parseInt(o.getAttribute("width"),10),height:parseInt(o.getAttribute("height"),10),xoffset:parseInt(o.getAttribute("xoffset"),10),yoffset:parseInt(o.getAttribute("yoffset"),10),xadvance:parseInt(o.getAttribute("xadvance"),10)})}for(var r=0;r<d.length;r++)t.kerning.push({first:parseInt(d[r].getAttribute("first"),10),second:parseInt(d[r].getAttribute("second"),10),amount:parseInt(d[r].getAttribute("amount"),10)});for(var r=0;r<h.length;r++)t.distanceField.push({fieldType:h[r].getAttribute("fieldType"),distanceRange:parseInt(h[r].getAttribute("distanceRange"),10)});return t},l}(),qG=function(){function l(){}return l.test=function(e){if(typeof e=="string"&&e.indexOf("<font>")>-1){var t=new globalThis.DOMParser().parseFromString(e,"text/xml");return Rs.test(t)}return!1},l.parse=function(e){var t=new globalThis.DOMParser().parseFromString(e,"text/xml");return Rs.parse(t)},l}(),Ws=[AG,Rs,qG];function Wr(l){for(var e=0;e<Ws.length;e++)if(Ws[e].test(l))return Ws[e];return null}function $G(l,e,t,i,n,a){var s=t.fill;if(Array.isArray(s)){if(s.length===1)return s[0]}else return s;var d,h=t.dropShadow?t.dropShadowDistance:0,r=t.padding||0,o=l.width/i-h-r*2,c=l.height/i-h-r*2,u=s.slice(),m=t.fillGradientStops.slice();if(!m.length)for(var b=u.length+1,Z=1;Z<b;++Z)m.push(Z/b);if(u.unshift(s[0]),m.unshift(0),u.push(s[s.length-1]),m.push(1),t.fillGradientType===Yl.LINEAR_VERTICAL){d=e.createLinearGradient(o/2,r,o/2,c+r);for(var p=0,G=a.fontProperties.fontSize+t.strokeThickness,X=G/c,Z=0;Z<n.length;Z++)for(var y=a.lineHeight*Z,R=0;R<u.length;R++){var V=0;typeof m[R]=="number"?V=m[R]:V=R/u.length;var W=y/c+V*X,f=Math.max(p,W);f=Math.min(f,1),d.addColorStop(f,u[R]),p=f}}else{d=e.createLinearGradient(r,c/2,o+r,c/2);for(var x=u.length+1,L=1,Z=0;Z<u.length;Z++){var S=void 0;typeof m[Z]=="number"?S=m[Z]:S=L/x,d.addColorStop(S,u[Z]),L++}}return d}function tX(l,e,t,i,n,a,s){var d=t.text,h=t.fontProperties;e.translate(i,n),e.scale(a,a);var r=s.strokeThickness/2,o=-(s.strokeThickness/2);if(e.font=s.toFontString(),e.lineWidth=s.strokeThickness,e.textBaseline=s.textBaseline,e.lineJoin=s.lineJoin,e.miterLimit=s.miterLimit,e.fillStyle=$G(l,e,s,a,[d],t),e.strokeStyle=s.stroke,s.dropShadow){var c=s.dropShadowColor,u=Mi(typeof c=="number"?c:nh(c)),m=s.dropShadowBlur*a,b=s.dropShadowDistance*a;e.shadowColor="rgba("+u[0]*255+","+u[1]*255+","+u[2]*255+","+s.dropShadowAlpha+")",e.shadowBlur=m,e.shadowOffsetX=Math.cos(s.dropShadowAngle)*b,e.shadowOffsetY=Math.sin(s.dropShadowAngle)*b}else e.shadowColor="black",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0;s.stroke&&s.strokeThickness&&e.strokeText(d,r,o+t.lineHeight-h.descent),s.fill&&e.fillText(d,r,o+t.lineHeight-h.descent),e.setTransform(1,0,0,1,0,0),e.fillStyle="rgba(0, 0, 0, 0)"}function fr(l){return Array.from?Array.from(l):l.split("")}function eX(l){typeof l=="string"&&(l=[l]);for(var e=[],t=0,i=l.length;t<i;t++){var n=l[t];if(Array.isArray(n)){if(n.length!==2)throw new Error("[BitmapFont]: Invalid character range length, expecting 2 got "+n.length+".");var a=n[0].charCodeAt(0),s=n[1].charCodeAt(0);if(s<a)throw new Error("[BitmapFont]: Invalid character range.");for(var d=a,h=s;d<=h;d++)e.push(String.fromCharCode(d))}else e.push.apply(e,fr(n))}if(e.length===0)throw new Error("[BitmapFont]: Empty set when resolving characters.");return e}function kn(l){return l.codePointAt?l.codePointAt(0):l.charCodeAt(0)}var Ct=function(){function l(e,t,i){var n,a,s=e.info[0],d=e.common[0],h=e.page[0],r=e.distanceField[0],o=cn(h.file),c={};this._ownsTextures=i,this.font=s.face,this.size=s.size,this.lineHeight=d.lineHeight/o,this.chars={},this.pageTextures=c;for(var u=0;u<e.page.length;u++){var m=e.page[u],b=m.id,Z=m.file;c[b]=t instanceof Array?t[u]:t[Z],r!=null&&r.fieldType&&r.fieldType!=="none"&&(c[b].baseTexture.alphaMode=me.NO_PREMULTIPLIED_ALPHA,c[b].baseTexture.mipmap=ue.OFF)}for(var u=0;u<e.char.length;u++){var p=e.char[u],b=p.id,G=p.page,X=e.char[u],y=X.x,R=X.y,V=X.width,W=X.height,f=X.xoffset,x=X.yoffset,L=X.xadvance;y/=o,R/=o,V/=o,W/=o,f/=o,x/=o,L/=o;var S=new j(y+c[G].frame.x/o,R+c[G].frame.y/o,V,W);this.chars[b]={xOffset:f,yOffset:x,xAdvance:L,kerning:{},texture:new z(c[G].baseTexture,S),page:G}}for(var u=0;u<e.kerning.length;u++){var Y=e.kerning[u],J=Y.first,F=Y.second,M=Y.amount;J/=o,F/=o,M/=o,this.chars[F]&&(this.chars[F].kerning[J]=M)}this.distanceFieldRange=r==null?void 0:r.distanceRange,this.distanceFieldType=(a=(n=r==null?void 0:r.fieldType)===null||n===void 0?void 0:n.toLowerCase())!==null&&a!==void 0?a:"none"}return l.prototype.destroy=function(){for(var e in this.chars)this.chars[e].texture.destroy(),this.chars[e].texture=null;for(var e in this.pageTextures)this._ownsTextures&&this.pageTextures[e].destroy(!0),this.pageTextures[e]=null;this.chars=null,this.pageTextures=null},l.install=function(e,t,i){var n;if(e instanceof Un)n=e;else{var a=Wr(e);if(!a)throw new Error("Unrecognized data format for font.");n=a.parse(e)}t instanceof z&&(t=[t]);var s=new l(n,t,i);return l.available[s.font]=s,s},l.uninstall=function(e){var t=l.available[e];if(!t)throw new Error("No font found named '"+e+"'");t.destroy(),delete l.available[e]},l.from=function(e,t,i){if(!e)throw new Error("[BitmapFont] Property `name` is required.");var n=Object.assign({},l.defaultOptions,i),a=n.chars,s=n.padding,d=n.resolution,h=n.textureWidth,r=n.textureHeight,o=eX(a),c=t instanceof qe?t:new qe(t),u=h,m=new Un;m.info[0]={face:c.fontFamily,size:c.fontSize},m.common[0]={lineHeight:c.fontSize};for(var b=0,Z=0,p,G,X,y=0,R=[],V=0;V<o.length;V++){p||(p=U.ADAPTER.createCanvas(),p.width=h,p.height=r,G=p.getContext("2d"),X=new q(p,{resolution:d}),R.push(new z(X)),m.page.push({id:R.length-1,file:""}));var W=o[V],f=Re.measureText(W,c,!1,p),x=f.width,L=Math.ceil(f.height),S=Math.ceil((c.fontStyle==="italic"?2:1)*x);if(Z>=r-L*d){if(Z===0)throw new Error("[BitmapFont] textureHeight "+r+"px is too small "+("(fontFamily: '"+c.fontFamily+"', fontSize: "+c.fontSize+"px, char: '"+W+"')"));--V,p=null,G=null,X=null,Z=0,b=0,y=0;continue}if(y=Math.max(L+f.fontProperties.descent,y),S*d+b>=u){if(b===0)throw new Error("[BitmapFont] textureWidth "+h+"px is too small "+("(fontFamily: '"+c.fontFamily+"', fontSize: "+c.fontSize+"px, char: '"+W+"')"));--V,Z+=y*d,Z=Math.ceil(Z),b=0,y=0;continue}tX(p,G,f,b,Z,d,c);var Y=kn(f.text);m.char.push({id:Y,page:R.length-1,x:b/d,y:Z/d,width:S,height:L,xoffset:0,yoffset:0,xadvance:Math.ceil(x-(c.dropShadow?c.dropShadowDistance:0)-(c.stroke?c.strokeThickness:0))}),b+=(S+2*s)*d,b=Math.ceil(b)}for(var V=0,J=o.length;V<J;V++)for(var F=o[V],M=0;M<J;M++){var g=o[M],v=G.measureText(F).width,C=G.measureText(g).width,B=G.measureText(F+g).width,P=B-(v+C);P&&m.kerning.push({first:kn(F),second:kn(g),amount:P})}var T=new l(m,R,!0);return l.available[e]!==void 0&&l.uninstall(e),l.available[e]=T,T},l.ALPHA=[["a","z"],["A","Z"]," "],l.NUMERIC=[["0","9"]],l.ALPHANUMERIC=[["a","z"],["A","Z"],["0","9"]," "],l.ASCII=[[" ","~"]],l.defaultOptions={resolution:1,textureWidth:512,textureHeight:512,padding:4,chars:l.ALPHANUMERIC},l.available={},l}(),iX=`// Pixi texture info\r
664
668
  varying vec2 vTextureCoord;\r
665
669
  uniform sampler2D uSampler;\r
666
670
  \r
@@ -694,7 +698,7 @@ void main(void) {\r
694
698
  gl_FragColor = vec4(uColor.rgb, uColor.a * alpha);\r
695
699
  \r
696
700
  }\r
697
- `,Wp=`// Mesh material default fragment\r
701
+ `,lX=`// Mesh material default fragment\r
698
702
  attribute vec2 aVertexPosition;\r
699
703
  attribute vec2 aTextureCoord;\r
700
704
  \r
@@ -710,10 +714,10 @@ void main(void)\r
710
714
  \r
711
715
  vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy;\r
712
716
  }\r
713
- `,La=[],Ua=[],Ga=[],An=function(r){Bp(e,r);function e(t,i){i===void 0&&(i={});var n=r.call(this)||this;n._tint=16777215;var s=Object.assign({},e.styleDefaults,i),a=s.align,o=s.tint,h=s.maxWidth,u=s.letterSpacing,l=s.fontName,f=s.fontSize;if(!Mt.available[l])throw new Error('Missing BitmapFont "'+l+'"');return n._activePagesMeshData=[],n._textWidth=0,n._textHeight=0,n._align=a,n._tint=o,n._font=void 0,n._fontName=l,n._fontSize=f,n.text=t,n._maxWidth=h,n._maxLineHeight=0,n._letterSpacing=u,n._anchor=new Oe(function(){n.dirty=!0},n,0,0),n._roundPixels=F.ROUND_PIXELS,n.dirty=!0,n._resolution=F.RESOLUTION,n._autoResolution=!0,n._textureCache={},n}return e.prototype.updateText=function(){for(var t,i=Mt.available[this._fontName],n=this.fontSize,s=n/i.size,a=new X,o=[],h=[],u=[],l=this._text.replace(/(?:\r\n|\r)/g,`
714
- `)||" ",f=Ba(l),c=this._maxWidth*i.size/n,d=i.distanceFieldType==="none"?La:Ua,p=null,v=0,_=0,m=0,g=-1,y=0,b=0,x=0,T=0,w=0;w<f.length;w++){var A=f[w],S=sr(A);if(/(?:\s)/.test(A)&&(g=w,y=v,T++),A==="\r"||A===`
715
- `){h.push(v),u.push(-1),_=Math.max(_,v),++m,++b,a.x=0,a.y+=i.lineHeight,p=null,T=0;continue}var E=i.chars[S];if(E){p&&E.kerning[p]&&(a.x+=E.kerning[p]);var D=Ga.pop()||{texture:k.EMPTY,line:0,charCode:0,prevSpaces:0,position:new X};D.texture=E.texture,D.line=m,D.charCode=S,D.position.x=a.x+E.xOffset+this._letterSpacing/2,D.position.y=a.y+E.yOffset,D.prevSpaces=T,o.push(D),v=D.position.x+Math.max(E.xAdvance-E.xOffset,E.texture.orig.width),a.x+=E.xAdvance+this._letterSpacing,x=Math.max(x,E.yOffset+E.texture.height),p=S,g!==-1&&c>0&&a.x>c&&(++b,Le(o,1+g-b,1+w-g),w=g,g=-1,h.push(y),u.push(o.length>0?o[o.length-1].prevSpaces:0),_=Math.max(_,y),m++,a.x=0,a.y+=i.lineHeight,p=null,T=0)}}var C=f[f.length-1];C!=="\r"&&C!==`
716
- `&&(/(?:\s)/.test(C)&&(v=y),h.push(v),_=Math.max(_,v),u.push(-1));for(var N=[],w=0;w<=m;w++){var W=0;this._align==="right"?W=_-h[w]:this._align==="center"?W=(_-h[w])/2:this._align==="justify"&&(W=u[w]<0?0:(_-h[w])/u[w]),N.push(W)}var M=o.length,O={},U=[],rt=this._activePagesMeshData;d.push.apply(d,rt);for(var w=0;w<M;w++){var z=o[w].texture,I=z.baseTexture.uid;if(!O[I]){var P=d.pop();if(!P){var B=new rr,$=void 0,Z=void 0;i.distanceFieldType==="none"?($=new vi(k.EMPTY),Z=G.NORMAL):($=new vi(k.EMPTY,{program:si.from(Wp,Xp),uniforms:{uFWidth:0}}),Z=G.NORMAL_NPM);var vt=new pi(B,$);vt.blendMode=Z,P={index:0,indexCount:0,vertexCount:0,uvsCount:0,total:0,mesh:vt,vertices:null,uvs:null,indices:null}}P.index=0,P.indexCount=0,P.vertexCount=0,P.uvsCount=0,P.total=0;var st=this._textureCache;st[I]=st[I]||new k(z.baseTexture),P.mesh.texture=st[I],P.mesh.tint=this._tint,U.push(P),O[I]=P}O[I].total++}for(var w=0;w<rt.length;w++)U.indexOf(rt[w])===-1&&this.removeChild(rt[w].mesh);for(var w=0;w<U.length;w++)U[w].mesh.parent!==this&&this.addChild(U[w].mesh);this._activePagesMeshData=U;for(var w in O){var P=O[w],at=P.total;if(!(((t=P.indices)===null||t===void 0?void 0:t.length)>6*at)||P.vertices.length<pi.BATCHABLE_SIZE*2)P.vertices=new Float32Array(4*2*at),P.uvs=new Float32Array(4*2*at),P.indices=new Uint16Array(6*at);else for(var wt=P.total,St=P.vertices,_t=wt*4*2;_t<St.length;_t++)St[_t]=0;P.mesh.size=6*at}for(var w=0;w<M;w++){var A=o[w],et=A.position.x+N[A.line]*(this._align==="justify"?A.prevSpaces:1);this._roundPixels&&(et=Math.round(et));var nt=et*s,ot=A.position.y*s,z=A.texture,q=O[z.baseTexture.uid],Rt=z.frame,Ct=z._uvs,Q=q.index++;q.indices[Q*6+0]=0+Q*4,q.indices[Q*6+1]=1+Q*4,q.indices[Q*6+2]=2+Q*4,q.indices[Q*6+3]=0+Q*4,q.indices[Q*6+4]=2+Q*4,q.indices[Q*6+5]=3+Q*4,q.vertices[Q*8+0]=nt,q.vertices[Q*8+1]=ot,q.vertices[Q*8+2]=nt+Rt.width*s,q.vertices[Q*8+3]=ot,q.vertices[Q*8+4]=nt+Rt.width*s,q.vertices[Q*8+5]=ot+Rt.height*s,q.vertices[Q*8+6]=nt,q.vertices[Q*8+7]=ot+Rt.height*s,q.uvs[Q*8+0]=Ct.x0,q.uvs[Q*8+1]=Ct.y0,q.uvs[Q*8+2]=Ct.x1,q.uvs[Q*8+3]=Ct.y1,q.uvs[Q*8+4]=Ct.x2,q.uvs[Q*8+5]=Ct.y2,q.uvs[Q*8+6]=Ct.x3,q.uvs[Q*8+7]=Ct.y3}this._textWidth=_*s,this._textHeight=(a.y+i.lineHeight)*s;for(var w in O){var P=O[w];if(this.anchor.x!==0||this.anchor.y!==0)for(var Kt=0,je=this._textWidth*this.anchor.x,fr=this._textHeight*this.anchor.y,uo=0;uo<P.total;uo++)P.vertices[Kt++]-=je,P.vertices[Kt++]-=fr,P.vertices[Kt++]-=je,P.vertices[Kt++]-=fr,P.vertices[Kt++]-=je,P.vertices[Kt++]-=fr,P.vertices[Kt++]-=je,P.vertices[Kt++]-=fr;this._maxLineHeight=x*s;var lo=P.mesh.geometry.getBuffer("aVertexPosition"),fo=P.mesh.geometry.getBuffer("aTextureCoord"),co=P.mesh.geometry.getIndex();lo.data=P.vertices,fo.data=P.uvs,co.data=P.indices,lo.update(),fo.update(),co.update()}for(var w=0;w<o.length;w++)Ga.push(o[w]);this._font=i,this.dirty=!1},e.prototype.updateTransform=function(){this.validate(),this.containerUpdateTransform()},e.prototype._render=function(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0);var i=Mt.available[this._fontName],n=i.distanceFieldRange,s=i.distanceFieldType,a=i.size;if(s!=="none")for(var o=this.worldTransform,h=o.a,u=o.b,l=o.c,f=o.d,c=Math.sqrt(h*h+u*u),d=Math.sqrt(l*l+f*f),p=(Math.abs(c)+Math.abs(d))/2,v=this.fontSize/a,_=0,m=this._activePagesMeshData;_<m.length;_++){var g=m[_];g.mesh.shader.uniforms.uFWidth=p*n*v*this._resolution}r.prototype._render.call(this,t)},e.prototype.getLocalBounds=function(){return this.validate(),r.prototype.getLocalBounds.call(this)},e.prototype.validate=function(){var t=Mt.available[this._fontName];if(!t)throw new Error('Missing BitmapFont "'+this._fontName+'"');this._font!==t&&(this.dirty=!0),this.dirty&&this.updateText()},Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){if(this._tint!==t){this._tint=t;for(var i=0;i<this._activePagesMeshData.length;i++)this._activePagesMeshData[i].mesh.tint=t}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"align",{get:function(){return this._align},set:function(t){this._align!==t&&(this._align=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontName",{get:function(){return this._fontName},set:function(t){if(!Mt.available[t])throw new Error('Missing BitmapFont "'+t+'"');this._fontName!==t&&(this._fontName=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontSize",{get:function(){var t;return(t=this._fontSize)!==null&&t!==void 0?t:Mt.available[this._fontName].size},set:function(t){this._fontSize!==t&&(this._fontSize=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"anchor",{get:function(){return this._anchor},set:function(t){typeof t=="number"?this._anchor.set(t):this._anchor.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){t=String(t??""),this._text!==t&&(this._text=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxWidth",{get:function(){return this._maxWidth},set:function(t){this._maxWidth!==t&&(this._maxWidth=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLineHeight",{get:function(){return this.validate(),this._maxLineHeight},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textWidth",{get:function(){return this.validate(),this._textWidth},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"letterSpacing",{get:function(){return this._letterSpacing},set:function(t){this._letterSpacing!==t&&(this._letterSpacing=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){t!==this._roundPixels&&(this._roundPixels=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textHeight",{get:function(){return this.validate(),this._textHeight},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._autoResolution=!1,this._resolution!==t&&(this._resolution=t,this.dirty=!0)},enumerable:!1,configurable:!0}),e.prototype.destroy=function(t){var i=this._textureCache,n=Mt.available[this._fontName],s=n.distanceFieldType==="none"?La:Ua;s.push.apply(s,this._activePagesMeshData);for(var a=0,o=this._activePagesMeshData;a<o.length;a++){var h=o[a];this.removeChild(h.mesh)}this._activePagesMeshData=[],s.filter(function(f){return i[f.mesh.texture.baseTexture.uid]}).forEach(function(f){f.mesh.texture=k.EMPTY});for(var u in i){var l=i[u];l.destroy(),delete i[u]}this._font=null,this._textureCache=null,r.prototype.destroy.call(this,t)},e.styleDefaults={align:"left",tint:16777215,maxWidth:0,letterSpacing:0},e}(Pt),jp=function(){function r(){}return r.add=function(){ct.setExtensionXhrType("fnt",ct.XHR_RESPONSE_TYPE.TEXT)},r.use=function(e,t){var i=Na(e.data);if(!i){t();return}for(var n=r.getBaseUrl(this,e),s=i.parse(e.data),a={},o=function(v){a[v.metadata.pageFile]=v.texture,Object.keys(a).length===s.page.length&&(e.bitmapFont=Mt.install(s,a,!0),t())},h=0;h<s.page.length;++h){var u=s.page[h].file,l=n+u,f=!1;for(var c in this.resources){var d=this.resources[c];if(d.url===l){d.metadata.pageFile=u,d.texture?o(d):d.onAfterMiddleware.add(o),f=!0;break}}if(!f){var p={crossOrigin:e.crossOrigin,loadType:ct.LOAD_TYPE.IMAGE,metadata:Object.assign({pageFile:u},e.metadata.imageMetadata),parentResource:e};this.add(l,p,o)}}},r.getBaseUrl=function(e,t){var i=t.isDataUrl?"":r.dirname(t.url);return t.isDataUrl&&(i==="."&&(i=""),e.baseUrl&&i&&e.baseUrl.charAt(e.baseUrl.length-1)==="/"&&(i+="/")),i=i.replace(e.baseUrl,""),i&&i.charAt(i.length-1)!=="/"&&(i+="/"),i},r.dirname=function(e){var t=e.replace(/\\/g,"/").replace(/\/$/,"").replace(/\/[^\/]*$/,"");return t===e?".":t===""?"/":t},r.extension=tt.Loader,r}();var In=function(r,e){return In=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},In(r,e)};function zp(r,e){In(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Yp=`varying vec2 vTextureCoord;
717
+ `,Lr=[],xr=[],Sr=[],fs=function(l){OG(e,l);function e(t,i){i===void 0&&(i={});var n=l.call(this)||this;n._tint=16777215;var a=Object.assign({},e.styleDefaults,i),s=a.align,d=a.tint,h=a.maxWidth,r=a.letterSpacing,o=a.fontName,c=a.fontSize;if(!Ct.available[o])throw new Error('Missing BitmapFont "'+o+'"');return n._activePagesMeshData=[],n._textWidth=0,n._textHeight=0,n._align=s,n._tint=d,n._font=void 0,n._fontName=o,n._fontSize=c,n.text=t,n._maxWidth=h,n._maxLineHeight=0,n._letterSpacing=r,n._anchor=new Ci(function(){n.dirty=!0},n,0,0),n._roundPixels=U.ROUND_PIXELS,n.dirty=!0,n._resolution=U.RESOLUTION,n._autoResolution=!0,n._textureCache={},n}return e.prototype.updateText=function(){for(var t,i=Ct.available[this._fontName],n=this.fontSize,a=n/i.size,s=new _,d=[],h=[],r=[],o=this._text.replace(/(?:\r\n|\r)/g,`
718
+ `)||" ",c=fr(o),u=this._maxWidth*i.size/n,m=i.distanceFieldType==="none"?Lr:xr,b=null,Z=0,p=0,G=0,X=-1,y=0,R=0,V=0,W=0,f=0;f<c.length;f++){var x=c[f],L=kn(x);if(/(?:\s)/.test(x)&&(X=f,y=Z,W++),x==="\r"||x===`
719
+ `){h.push(Z),r.push(-1),p=Math.max(p,Z),++G,++R,s.x=0,s.y+=i.lineHeight,b=null,W=0;continue}var S=i.chars[L];if(S){b&&S.kerning[b]&&(s.x+=S.kerning[b]);var Y=Sr.pop()||{texture:z.EMPTY,line:0,charCode:0,prevSpaces:0,position:new _};Y.texture=S.texture,Y.line=G,Y.charCode=L,Y.position.x=s.x+S.xOffset+this._letterSpacing/2,Y.position.y=s.y+S.yOffset,Y.prevSpaces=W,d.push(Y),Z=Y.position.x+Math.max(S.xAdvance-S.xOffset,S.texture.orig.width),s.x+=S.xAdvance+this._letterSpacing,V=Math.max(V,S.yOffset+S.texture.height),b=L,X!==-1&&u>0&&s.x>u&&(++R,Ki(d,1+X-R,1+f-X),f=X,X=-1,h.push(y),r.push(d.length>0?d[d.length-1].prevSpaces:0),p=Math.max(p,y),G++,s.x=0,s.y+=i.lineHeight,b=null,W=0)}}var J=c[c.length-1];J!=="\r"&&J!==`
720
+ `&&(/(?:\s)/.test(J)&&(Z=y),h.push(Z),p=Math.max(p,Z),r.push(-1));for(var F=[],f=0;f<=G;f++){var M=0;this._align==="right"?M=p-h[f]:this._align==="center"?M=(p-h[f])/2:this._align==="justify"&&(M=r[f]<0?0:(p-h[f])/r[f]),F.push(M)}var g=d.length,v={},C=[],B=this._activePagesMeshData;m.push.apply(m,B);for(var f=0;f<g;f++){var P=d[f].texture,T=P.baseTexture.uid;if(!v[T]){var I=m.pop();if(!I){var k=new Fn,A=void 0,Q=void 0;i.distanceFieldType==="none"?(A=new Hl(z.EMPTY),Q=w.NORMAL):(A=new Hl(z.EMPTY,{program:Wl.from(lX,iX),uniforms:{uFWidth:0}}),Q=w.NORMAL_NPM);var lt=new Tl(k,A);lt.blendMode=Q,I={index:0,indexCount:0,vertexCount:0,uvsCount:0,total:0,mesh:lt,vertices:null,uvs:null,indices:null}}I.index=0,I.indexCount=0,I.vertexCount=0,I.uvsCount=0,I.total=0;var ot=this._textureCache;ot[T]=ot[T]||new z(P.baseTexture),I.mesh.texture=ot[T],I.mesh.tint=this._tint,C.push(I),v[T]=I}v[T].total++}for(var f=0;f<B.length;f++)C.indexOf(B[f])===-1&&this.removeChild(B[f].mesh);for(var f=0;f<C.length;f++)C[f].mesh.parent!==this&&this.addChild(C[f].mesh);this._activePagesMeshData=C;for(var f in v){var I=v[f],ct=I.total;if(!(((t=I.indices)===null||t===void 0?void 0:t.length)>6*ct)||I.vertices.length<Tl.BATCHABLE_SIZE*2)I.vertices=new Float32Array(4*2*ct),I.uvs=new Float32Array(4*2*ct),I.indices=new Uint16Array(6*ct);else for(var Ut=I.total,Mt=I.vertices,ft=Ut*4*2;ft<Mt.length;ft++)Mt[ft]=0;I.mesh.size=6*ct}for(var f=0;f<g;f++){var x=d[f],at=x.position.x+F[x.line]*(this._align==="justify"?x.prevSpaces:1);this._roundPixels&&(at=Math.round(at));var rt=at*a,ut=x.position.y*a,P=x.texture,$=v[P.baseTexture.uid],Et=P.frame,Dt=P._uvs,et=$.index++;$.indices[et*6+0]=0+et*4,$.indices[et*6+1]=1+et*4,$.indices[et*6+2]=2+et*4,$.indices[et*6+3]=0+et*4,$.indices[et*6+4]=2+et*4,$.indices[et*6+5]=3+et*4,$.vertices[et*8+0]=rt,$.vertices[et*8+1]=ut,$.vertices[et*8+2]=rt+Et.width*a,$.vertices[et*8+3]=ut,$.vertices[et*8+4]=rt+Et.width*a,$.vertices[et*8+5]=ut+Et.height*a,$.vertices[et*8+6]=rt,$.vertices[et*8+7]=ut+Et.height*a,$.uvs[et*8+0]=Dt.x0,$.uvs[et*8+1]=Dt.y0,$.uvs[et*8+2]=Dt.x1,$.uvs[et*8+3]=Dt.y1,$.uvs[et*8+4]=Dt.x2,$.uvs[et*8+5]=Dt.y2,$.uvs[et*8+6]=Dt.x3,$.uvs[et*8+7]=Dt.y3}this._textWidth=p*a,this._textHeight=(s.y+i.lineHeight)*a;for(var f in v){var I=v[f];if(this.anchor.x!==0||this.anchor.y!==0)for(var Je=0,dl=this._textWidth*this.anchor.x,sa=this._textHeight*this.anchor.y,uc=0;uc<I.total;uc++)I.vertices[Je++]-=dl,I.vertices[Je++]-=sa,I.vertices[Je++]-=dl,I.vertices[Je++]-=sa,I.vertices[Je++]-=dl,I.vertices[Je++]-=sa,I.vertices[Je++]-=dl,I.vertices[Je++]-=sa;this._maxLineHeight=V*a;var mc=I.mesh.geometry.getBuffer("aVertexPosition"),Zc=I.mesh.geometry.getBuffer("aTextureCoord"),bc=I.mesh.geometry.getIndex();mc.data=I.vertices,Zc.data=I.uvs,bc.data=I.indices,mc.update(),Zc.update(),bc.update()}for(var f=0;f<d.length;f++)Sr.push(d[f]);this._font=i,this.dirty=!1},e.prototype.updateTransform=function(){this.validate(),this.containerUpdateTransform()},e.prototype._render=function(t){this._autoResolution&&this._resolution!==t.resolution&&(this._resolution=t.resolution,this.dirty=!0);var i=Ct.available[this._fontName],n=i.distanceFieldRange,a=i.distanceFieldType,s=i.size;if(a!=="none")for(var d=this.worldTransform,h=d.a,r=d.b,o=d.c,c=d.d,u=Math.sqrt(h*h+r*r),m=Math.sqrt(o*o+c*c),b=(Math.abs(u)+Math.abs(m))/2,Z=this.fontSize/s,p=0,G=this._activePagesMeshData;p<G.length;p++){var X=G[p];X.mesh.shader.uniforms.uFWidth=b*n*Z*this._resolution}l.prototype._render.call(this,t)},e.prototype.getLocalBounds=function(){return this.validate(),l.prototype.getLocalBounds.call(this)},e.prototype.validate=function(){var t=Ct.available[this._fontName];if(!t)throw new Error('Missing BitmapFont "'+this._fontName+'"');this._font!==t&&(this.dirty=!0),this.dirty&&this.updateText()},Object.defineProperty(e.prototype,"tint",{get:function(){return this._tint},set:function(t){if(this._tint!==t){this._tint=t;for(var i=0;i<this._activePagesMeshData.length;i++)this._activePagesMeshData[i].mesh.tint=t}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"align",{get:function(){return this._align},set:function(t){this._align!==t&&(this._align=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontName",{get:function(){return this._fontName},set:function(t){if(!Ct.available[t])throw new Error('Missing BitmapFont "'+t+'"');this._fontName!==t&&(this._fontName=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"fontSize",{get:function(){var t;return(t=this._fontSize)!==null&&t!==void 0?t:Ct.available[this._fontName].size},set:function(t){this._fontSize!==t&&(this._fontSize=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"anchor",{get:function(){return this._anchor},set:function(t){typeof t=="number"?this._anchor.set(t):this._anchor.copyFrom(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){t=String(t??""),this._text!==t&&(this._text=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxWidth",{get:function(){return this._maxWidth},set:function(t){this._maxWidth!==t&&(this._maxWidth=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLineHeight",{get:function(){return this.validate(),this._maxLineHeight},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textWidth",{get:function(){return this.validate(),this._textWidth},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"letterSpacing",{get:function(){return this._letterSpacing},set:function(t){this._letterSpacing!==t&&(this._letterSpacing=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"roundPixels",{get:function(){return this._roundPixels},set:function(t){t!==this._roundPixels&&(this._roundPixels=t,this.dirty=!0)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textHeight",{get:function(){return this.validate(),this._textHeight},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"resolution",{get:function(){return this._resolution},set:function(t){this._autoResolution=!1,this._resolution!==t&&(this._resolution=t,this.dirty=!0)},enumerable:!1,configurable:!0}),e.prototype.destroy=function(t){var i=this._textureCache,n=Ct.available[this._fontName],a=n.distanceFieldType==="none"?Lr:xr;a.push.apply(a,this._activePagesMeshData);for(var s=0,d=this._activePagesMeshData;s<d.length;s++){var h=d[s];this.removeChild(h.mesh)}this._activePagesMeshData=[],a.filter(function(c){return i[c.mesh.texture.baseTexture.uid]}).forEach(function(c){c.mesh.texture=z.EMPTY});for(var r in i){var o=i[r];o.destroy(),delete i[r]}this._font=null,this._textureCache=null,l.prototype.destroy.call(this,t)},e.styleDefaults={align:"left",tint:16777215,maxWidth:0,letterSpacing:0},e}(xt),nX=function(){function l(){}return l.add=function(){yt.setExtensionXhrType("fnt",yt.XHR_RESPONSE_TYPE.TEXT)},l.use=function(e,t){var i=Wr(e.data);if(!i){t();return}for(var n=l.getBaseUrl(this,e),a=i.parse(e.data),s={},d=function(Z){s[Z.metadata.pageFile]=Z.texture,Object.keys(s).length===a.page.length&&(e.bitmapFont=Ct.install(a,s,!0),t())},h=0;h<a.page.length;++h){var r=a.page[h].file,o=n+r,c=!1;for(var u in this.resources){var m=this.resources[u];if(m.url===o){m.metadata.pageFile=r,m.texture?d(m):m.onAfterMiddleware.add(d),c=!0;break}}if(!c){var b={crossOrigin:e.crossOrigin,loadType:yt.LOAD_TYPE.IMAGE,metadata:Object.assign({pageFile:r},e.metadata.imageMetadata),parentResource:e};this.add(o,b,d)}}},l.getBaseUrl=function(e,t){var i=t.isDataUrl?"":l.dirname(t.url);return t.isDataUrl&&(i==="."&&(i=""),e.baseUrl&&i&&e.baseUrl.charAt(e.baseUrl.length-1)==="/"&&(i+="/")),i=i.replace(e.baseUrl,""),i&&i.charAt(i.length-1)!=="/"&&(i+="/"),i},l.dirname=function(e){var t=e.replace(/\\/g,"/").replace(/\/$/,"").replace(/\/[^\/]*$/,"");return t===e?".":t===""?"/":t},l.extension=nt.Loader,l}();var Ls=function(l,e){return Ls=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Ls(l,e)};function aX(l,e){Ls(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var sX=`varying vec2 vTextureCoord;
717
721
 
718
722
  uniform sampler2D uSampler;
719
723
  uniform float uAlpha;
@@ -722,7 +726,7 @@ void main(void)
722
726
  {
723
727
  gl_FragColor = texture2D(uSampler, vTextureCoord) * uAlpha;
724
728
  }
725
- `;(function(r){zp(e,r);function e(t){t===void 0&&(t=1);var i=r.call(this,Hc,Yp,{uAlpha:1})||this;return i.alpha=t,i}return Object.defineProperty(e.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(t){this.uniforms.uAlpha=t},enumerable:!1,configurable:!0}),e})(oe);var On=function(r,e){return On=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},On(r,e)};function ka(r,e){On(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Vp=`
729
+ `;(function(l){aX(e,l);function e(t){t===void 0&&(t=1);var i=l.call(this,ep,sX,{uAlpha:1})||this;return i.alpha=t,i}return Object.defineProperty(e.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(t){this.uniforms.uAlpha=t},enumerable:!1,configurable:!0}),e})(De);var xs=function(l,e){return xs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},xs(l,e)};function vr(l,e){xs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var dX=`
726
730
  attribute vec2 aVertexPosition;
727
731
 
728
732
  uniform mat3 projectionMatrix;
@@ -752,10 +756,10 @@ void main(void)
752
756
 
753
757
  vec2 textureCoord = filterTextureCoord();
754
758
  %blur%
755
- }`;function qp(r,e){var t=Math.ceil(r/2),i=Vp,n="",s;e?s="vBlurTexCoords[%index%] = textureCoord + vec2(%sampleIndex% * strength, 0.0);":s="vBlurTexCoords[%index%] = textureCoord + vec2(0.0, %sampleIndex% * strength);";for(var a=0;a<r;a++){var o=s.replace("%index%",a.toString());o=o.replace("%sampleIndex%",a-(t-1)+".0"),n+=o,n+=`
756
- `}return i=i.replace("%blur%",n),i=i.replace("%size%",r.toString()),i}var $p={5:[.153388,.221461,.250301],7:[.071303,.131514,.189879,.214607],9:[.028532,.067234,.124009,.179044,.20236],11:[.0093,.028002,.065984,.121703,.175713,.198596],13:[.002406,.009255,.027867,.065666,.121117,.174868,.197641],15:[489e-6,.002403,.009246,.02784,.065602,.120999,.174697,.197448]},Zp=["varying vec2 vBlurTexCoords[%size%];","uniform sampler2D uSampler;","void main(void)","{"," gl_FragColor = vec4(0.0);"," %blur%","}"].join(`
757
- `);function Kp(r){for(var e=$p[r],t=e.length,i=Zp,n="",s="gl_FragColor += texture2D(uSampler, vBlurTexCoords[%index%]) * %value%;",a,o=0;o<r;o++){var h=s.replace("%index%",o.toString());a=o,o>=t&&(a=r-o-1),h=h.replace("%value%",e[a].toString()),n+=h,n+=`
758
- `}return i=i.replace("%blur%",n),i=i.replace("%size%",r.toString()),i}var Ha=function(r){ka(e,r);function e(t,i,n,s,a){i===void 0&&(i=8),n===void 0&&(n=4),s===void 0&&(s=F.FILTER_RESOLUTION),a===void 0&&(a=5);var o=this,h=qp(a,t),u=Kp(a);return o=r.call(this,h,u)||this,o.horizontal=t,o.resolution=s,o._quality=0,o.quality=n,o.blur=i,o}return e.prototype.apply=function(t,i,n,s){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/t.renderer.width*(t.renderer.width/i.width):this.uniforms.strength=1/t.renderer.height*(t.renderer.height/i.height),this.uniforms.strength*=this.strength,this.uniforms.strength/=this.passes,this.passes===1)t.applyFilter(this,i,n,s);else{var a=t.getFilterTexture(),o=t.renderer,h=i,u=a;this.state.blend=!1,t.applyFilter(this,h,u,Bt.CLEAR);for(var l=1;l<this.passes-1;l++){t.bindAndClear(h,Bt.BLIT),this.uniforms.uSampler=u;var f=u;u=h,h=f,o.shader.bind(this),o.geometry.draw(5)}this.state.blend=!0,t.applyFilter(this,u,n,s),t.returnFilterTexture(a)}},Object.defineProperty(e.prototype,"blur",{get:function(){return this.strength},set:function(t){this.padding=1+Math.abs(t)*2,this.strength=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"quality",{get:function(){return this._quality},set:function(t){this._quality=t,this.passes=t},enumerable:!1,configurable:!0}),e}(oe);(function(r){ka(e,r);function e(t,i,n,s){t===void 0&&(t=8),i===void 0&&(i=4),n===void 0&&(n=F.FILTER_RESOLUTION),s===void 0&&(s=5);var a=r.call(this)||this;return a.blurXFilter=new Ha(!0,t,i,n,s),a.blurYFilter=new Ha(!1,t,i,n,s),a.resolution=n,a.quality=i,a.blur=t,a.repeatEdgePixels=!1,a}return e.prototype.apply=function(t,i,n,s){var a=Math.abs(this.blurXFilter.strength),o=Math.abs(this.blurYFilter.strength);if(a&&o){var h=t.getFilterTexture();this.blurXFilter.apply(t,i,h,Bt.CLEAR),this.blurYFilter.apply(t,h,n,s),t.returnFilterTexture(h)}else o?this.blurYFilter.apply(t,i,n,s):this.blurXFilter.apply(t,i,n,s)},e.prototype.updatePadding=function(){this._repeatEdgePixels?this.padding=0:this.padding=Math.max(Math.abs(this.blurXFilter.strength),Math.abs(this.blurYFilter.strength))*2},Object.defineProperty(e.prototype,"blur",{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"quality",{get:function(){return this.blurXFilter.quality},set:function(t){this.blurXFilter.quality=this.blurYFilter.quality=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blurX",{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blurY",{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.blurYFilter.blendMode},set:function(t){this.blurYFilter.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"repeatEdgePixels",{get:function(){return this._repeatEdgePixels},set:function(t){this._repeatEdgePixels=t,this.updatePadding()},enumerable:!1,configurable:!0}),e})(oe);var Mn=function(r,e){return Mn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Mn(r,e)};function Qp(r,e){Mn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var Jp=`varying vec2 vTextureCoord;
759
+ }`;function hX(l,e){var t=Math.ceil(l/2),i=dX,n="",a;e?a="vBlurTexCoords[%index%] = textureCoord + vec2(%sampleIndex% * strength, 0.0);":a="vBlurTexCoords[%index%] = textureCoord + vec2(0.0, %sampleIndex% * strength);";for(var s=0;s<l;s++){var d=a.replace("%index%",s.toString());d=d.replace("%sampleIndex%",s-(t-1)+".0"),n+=d,n+=`
760
+ `}return i=i.replace("%blur%",n),i=i.replace("%size%",l.toString()),i}var rX={5:[.153388,.221461,.250301],7:[.071303,.131514,.189879,.214607],9:[.028532,.067234,.124009,.179044,.20236],11:[.0093,.028002,.065984,.121703,.175713,.198596],13:[.002406,.009255,.027867,.065666,.121117,.174868,.197641],15:[489e-6,.002403,.009246,.02784,.065602,.120999,.174697,.197448]},oX=["varying vec2 vBlurTexCoords[%size%];","uniform sampler2D uSampler;","void main(void)","{"," gl_FragColor = vec4(0.0);"," %blur%","}"].join(`
761
+ `);function cX(l){for(var e=rX[l],t=e.length,i=oX,n="",a="gl_FragColor += texture2D(uSampler, vBlurTexCoords[%index%]) * %value%;",s,d=0;d<l;d++){var h=a.replace("%index%",d.toString());s=d,d>=t&&(s=l-d-1),h=h.replace("%value%",e[s].toString()),n+=h,n+=`
762
+ `}return i=i.replace("%blur%",n),i=i.replace("%size%",l.toString()),i}var Ir=function(l){vr(e,l);function e(t,i,n,a,s){i===void 0&&(i=8),n===void 0&&(n=4),a===void 0&&(a=U.FILTER_RESOLUTION),s===void 0&&(s=5);var d=this,h=hX(s,t),r=cX(s);return d=l.call(this,h,r)||this,d.horizontal=t,d.resolution=a,d._quality=0,d.quality=n,d.blur=i,d}return e.prototype.apply=function(t,i,n,a){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/t.renderer.width*(t.renderer.width/i.width):this.uniforms.strength=1/t.renderer.height*(t.renderer.height/i.height),this.uniforms.strength*=this.strength,this.uniforms.strength/=this.passes,this.passes===1)t.applyFilter(this,i,n,a);else{var s=t.getFilterTexture(),d=t.renderer,h=i,r=s;this.state.blend=!1,t.applyFilter(this,h,r,Ze.CLEAR);for(var o=1;o<this.passes-1;o++){t.bindAndClear(h,Ze.BLIT),this.uniforms.uSampler=r;var c=r;r=h,h=c,d.shader.bind(this),d.geometry.draw(5)}this.state.blend=!0,t.applyFilter(this,r,n,a),t.returnFilterTexture(s)}},Object.defineProperty(e.prototype,"blur",{get:function(){return this.strength},set:function(t){this.padding=1+Math.abs(t)*2,this.strength=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"quality",{get:function(){return this._quality},set:function(t){this._quality=t,this.passes=t},enumerable:!1,configurable:!0}),e}(De);(function(l){vr(e,l);function e(t,i,n,a){t===void 0&&(t=8),i===void 0&&(i=4),n===void 0&&(n=U.FILTER_RESOLUTION),a===void 0&&(a=5);var s=l.call(this)||this;return s.blurXFilter=new Ir(!0,t,i,n,a),s.blurYFilter=new Ir(!1,t,i,n,a),s.resolution=n,s.quality=i,s.blur=t,s.repeatEdgePixels=!1,s}return e.prototype.apply=function(t,i,n,a){var s=Math.abs(this.blurXFilter.strength),d=Math.abs(this.blurYFilter.strength);if(s&&d){var h=t.getFilterTexture();this.blurXFilter.apply(t,i,h,Ze.CLEAR),this.blurYFilter.apply(t,h,n,a),t.returnFilterTexture(h)}else d?this.blurYFilter.apply(t,i,n,a):this.blurXFilter.apply(t,i,n,a)},e.prototype.updatePadding=function(){this._repeatEdgePixels?this.padding=0:this.padding=Math.max(Math.abs(this.blurXFilter.strength),Math.abs(this.blurYFilter.strength))*2},Object.defineProperty(e.prototype,"blur",{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"quality",{get:function(){return this.blurXFilter.quality},set:function(t){this.blurXFilter.quality=this.blurYFilter.quality=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blurX",{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blurY",{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t,this.updatePadding()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"blendMode",{get:function(){return this.blurYFilter.blendMode},set:function(t){this.blurYFilter.blendMode=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"repeatEdgePixels",{get:function(){return this._repeatEdgePixels},set:function(t){this._repeatEdgePixels=t,this.updatePadding()},enumerable:!1,configurable:!0}),e})(De);var Ss=function(l,e){return Ss=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Ss(l,e)};function uX(l,e){Ss(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var mX=`varying vec2 vTextureCoord;
759
763
  uniform sampler2D uSampler;
760
764
  uniform float m[20];
761
765
  uniform float uAlpha;
@@ -807,7 +811,7 @@ void main(void)
807
811
 
808
812
  gl_FragColor = vec4(rgb, result.a);
809
813
  }
810
- `,Xa=function(r){Qp(e,r);function e(){var t=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 t=r.call(this,Js,Jp,i)||this,t.alpha=1,t}return e.prototype._loadMatrix=function(t,i){i===void 0&&(i=!1);var n=t;i&&(this._multiply(n,this.uniforms.m,t),n=this._colorMatrix(n)),this.uniforms.m=n},e.prototype._multiply=function(t,i,n){return t[0]=i[0]*n[0]+i[1]*n[5]+i[2]*n[10]+i[3]*n[15],t[1]=i[0]*n[1]+i[1]*n[6]+i[2]*n[11]+i[3]*n[16],t[2]=i[0]*n[2]+i[1]*n[7]+i[2]*n[12]+i[3]*n[17],t[3]=i[0]*n[3]+i[1]*n[8]+i[2]*n[13]+i[3]*n[18],t[4]=i[0]*n[4]+i[1]*n[9]+i[2]*n[14]+i[3]*n[19]+i[4],t[5]=i[5]*n[0]+i[6]*n[5]+i[7]*n[10]+i[8]*n[15],t[6]=i[5]*n[1]+i[6]*n[6]+i[7]*n[11]+i[8]*n[16],t[7]=i[5]*n[2]+i[6]*n[7]+i[7]*n[12]+i[8]*n[17],t[8]=i[5]*n[3]+i[6]*n[8]+i[7]*n[13]+i[8]*n[18],t[9]=i[5]*n[4]+i[6]*n[9]+i[7]*n[14]+i[8]*n[19]+i[9],t[10]=i[10]*n[0]+i[11]*n[5]+i[12]*n[10]+i[13]*n[15],t[11]=i[10]*n[1]+i[11]*n[6]+i[12]*n[11]+i[13]*n[16],t[12]=i[10]*n[2]+i[11]*n[7]+i[12]*n[12]+i[13]*n[17],t[13]=i[10]*n[3]+i[11]*n[8]+i[12]*n[13]+i[13]*n[18],t[14]=i[10]*n[4]+i[11]*n[9]+i[12]*n[14]+i[13]*n[19]+i[14],t[15]=i[15]*n[0]+i[16]*n[5]+i[17]*n[10]+i[18]*n[15],t[16]=i[15]*n[1]+i[16]*n[6]+i[17]*n[11]+i[18]*n[16],t[17]=i[15]*n[2]+i[16]*n[7]+i[17]*n[12]+i[18]*n[17],t[18]=i[15]*n[3]+i[16]*n[8]+i[17]*n[13]+i[18]*n[18],t[19]=i[15]*n[4]+i[16]*n[9]+i[17]*n[14]+i[18]*n[19]+i[19],t},e.prototype._colorMatrix=function(t){var i=new Float32Array(t);return i[4]/=255,i[9]/=255,i[14]/=255,i[19]/=255,i},e.prototype.brightness=function(t,i){var n=[t,0,0,0,0,0,t,0,0,0,0,0,t,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.tint=function(t,i){var n=t>>16&255,s=t>>8&255,a=t&255,o=[n/255,0,0,0,0,0,s/255,0,0,0,0,0,a/255,0,0,0,0,0,1,0];this._loadMatrix(o,i)},e.prototype.greyscale=function(t,i){var n=[t,t,t,0,0,t,t,t,0,0,t,t,t,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.blackAndWhite=function(t){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,t)},e.prototype.hue=function(t,i){t=(t||0)/180*Math.PI;var n=Math.cos(t),s=Math.sin(t),a=Math.sqrt,o=1/3,h=a(o),u=n+(1-n)*o,l=o*(1-n)-h*s,f=o*(1-n)+h*s,c=o*(1-n)+h*s,d=n+o*(1-n),p=o*(1-n)-h*s,v=o*(1-n)-h*s,_=o*(1-n)+h*s,m=n+o*(1-n),g=[u,l,f,0,0,c,d,p,0,0,v,_,m,0,0,0,0,0,1,0];this._loadMatrix(g,i)},e.prototype.contrast=function(t,i){var n=(t||0)+1,s=-.5*(n-1),a=[n,0,0,0,s,0,n,0,0,s,0,0,n,0,s,0,0,0,1,0];this._loadMatrix(a,i)},e.prototype.saturate=function(t,i){t===void 0&&(t=0);var n=t*2/3+1,s=(n-1)*-.5,a=[n,s,s,0,0,s,n,s,0,0,s,s,n,0,0,0,0,0,1,0];this._loadMatrix(a,i)},e.prototype.desaturate=function(){this.saturate(-1)},e.prototype.negative=function(t){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,t)},e.prototype.sepia=function(t){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,t)},e.prototype.technicolor=function(t){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,t)},e.prototype.polaroid=function(t){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,t)},e.prototype.toBGR=function(t){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,t)},e.prototype.kodachrome=function(t){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,t)},e.prototype.browni=function(t){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,t)},e.prototype.vintage=function(t){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,t)},e.prototype.colorTone=function(t,i,n,s,a){t=t||.2,i=i||.15,n=n||16770432,s=s||3375104;var o=(n>>16&255)/255,h=(n>>8&255)/255,u=(n&255)/255,l=(s>>16&255)/255,f=(s>>8&255)/255,c=(s&255)/255,d=[.3,.59,.11,0,0,o,h,u,t,0,l,f,c,i,0,o-l,h-f,u-c,0,0];this._loadMatrix(d,a)},e.prototype.night=function(t,i){t=t||.1;var n=[t*-2,-t,0,0,0,-t,0,t,0,0,0,t,t*2,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.predator=function(t,i){var n=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.lsd=function(t){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,t)},e.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperty(e.prototype,"matrix",{get:function(){return this.uniforms.m},set:function(t){this.uniforms.m=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(t){this.uniforms.uAlpha=t},enumerable:!1,configurable:!0}),e}(oe);Xa.prototype.grayscale=Xa.prototype.greyscale;var Dn=function(r,e){return Dn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Dn(r,e)};function tv(r,e){Dn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var ev=`varying vec2 vFilterCoord;
814
+ `,Yr=function(l){uX(e,l);function e(){var t=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 t=l.call(this,Kh,mX,i)||this,t.alpha=1,t}return e.prototype._loadMatrix=function(t,i){i===void 0&&(i=!1);var n=t;i&&(this._multiply(n,this.uniforms.m,t),n=this._colorMatrix(n)),this.uniforms.m=n},e.prototype._multiply=function(t,i,n){return t[0]=i[0]*n[0]+i[1]*n[5]+i[2]*n[10]+i[3]*n[15],t[1]=i[0]*n[1]+i[1]*n[6]+i[2]*n[11]+i[3]*n[16],t[2]=i[0]*n[2]+i[1]*n[7]+i[2]*n[12]+i[3]*n[17],t[3]=i[0]*n[3]+i[1]*n[8]+i[2]*n[13]+i[3]*n[18],t[4]=i[0]*n[4]+i[1]*n[9]+i[2]*n[14]+i[3]*n[19]+i[4],t[5]=i[5]*n[0]+i[6]*n[5]+i[7]*n[10]+i[8]*n[15],t[6]=i[5]*n[1]+i[6]*n[6]+i[7]*n[11]+i[8]*n[16],t[7]=i[5]*n[2]+i[6]*n[7]+i[7]*n[12]+i[8]*n[17],t[8]=i[5]*n[3]+i[6]*n[8]+i[7]*n[13]+i[8]*n[18],t[9]=i[5]*n[4]+i[6]*n[9]+i[7]*n[14]+i[8]*n[19]+i[9],t[10]=i[10]*n[0]+i[11]*n[5]+i[12]*n[10]+i[13]*n[15],t[11]=i[10]*n[1]+i[11]*n[6]+i[12]*n[11]+i[13]*n[16],t[12]=i[10]*n[2]+i[11]*n[7]+i[12]*n[12]+i[13]*n[17],t[13]=i[10]*n[3]+i[11]*n[8]+i[12]*n[13]+i[13]*n[18],t[14]=i[10]*n[4]+i[11]*n[9]+i[12]*n[14]+i[13]*n[19]+i[14],t[15]=i[15]*n[0]+i[16]*n[5]+i[17]*n[10]+i[18]*n[15],t[16]=i[15]*n[1]+i[16]*n[6]+i[17]*n[11]+i[18]*n[16],t[17]=i[15]*n[2]+i[16]*n[7]+i[17]*n[12]+i[18]*n[17],t[18]=i[15]*n[3]+i[16]*n[8]+i[17]*n[13]+i[18]*n[18],t[19]=i[15]*n[4]+i[16]*n[9]+i[17]*n[14]+i[18]*n[19]+i[19],t},e.prototype._colorMatrix=function(t){var i=new Float32Array(t);return i[4]/=255,i[9]/=255,i[14]/=255,i[19]/=255,i},e.prototype.brightness=function(t,i){var n=[t,0,0,0,0,0,t,0,0,0,0,0,t,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.tint=function(t,i){var n=t>>16&255,a=t>>8&255,s=t&255,d=[n/255,0,0,0,0,0,a/255,0,0,0,0,0,s/255,0,0,0,0,0,1,0];this._loadMatrix(d,i)},e.prototype.greyscale=function(t,i){var n=[t,t,t,0,0,t,t,t,0,0,t,t,t,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.blackAndWhite=function(t){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,t)},e.prototype.hue=function(t,i){t=(t||0)/180*Math.PI;var n=Math.cos(t),a=Math.sin(t),s=Math.sqrt,d=1/3,h=s(d),r=n+(1-n)*d,o=d*(1-n)-h*a,c=d*(1-n)+h*a,u=d*(1-n)+h*a,m=n+d*(1-n),b=d*(1-n)-h*a,Z=d*(1-n)-h*a,p=d*(1-n)+h*a,G=n+d*(1-n),X=[r,o,c,0,0,u,m,b,0,0,Z,p,G,0,0,0,0,0,1,0];this._loadMatrix(X,i)},e.prototype.contrast=function(t,i){var n=(t||0)+1,a=-.5*(n-1),s=[n,0,0,0,a,0,n,0,0,a,0,0,n,0,a,0,0,0,1,0];this._loadMatrix(s,i)},e.prototype.saturate=function(t,i){t===void 0&&(t=0);var n=t*2/3+1,a=(n-1)*-.5,s=[n,a,a,0,0,a,n,a,0,0,a,a,n,0,0,0,0,0,1,0];this._loadMatrix(s,i)},e.prototype.desaturate=function(){this.saturate(-1)},e.prototype.negative=function(t){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,t)},e.prototype.sepia=function(t){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,t)},e.prototype.technicolor=function(t){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,t)},e.prototype.polaroid=function(t){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,t)},e.prototype.toBGR=function(t){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,t)},e.prototype.kodachrome=function(t){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,t)},e.prototype.browni=function(t){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,t)},e.prototype.vintage=function(t){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,t)},e.prototype.colorTone=function(t,i,n,a,s){t=t||.2,i=i||.15,n=n||16770432,a=a||3375104;var d=(n>>16&255)/255,h=(n>>8&255)/255,r=(n&255)/255,o=(a>>16&255)/255,c=(a>>8&255)/255,u=(a&255)/255,m=[.3,.59,.11,0,0,d,h,r,t,0,o,c,u,i,0,d-o,h-c,r-u,0,0];this._loadMatrix(m,s)},e.prototype.night=function(t,i){t=t||.1;var n=[t*-2,-t,0,0,0,-t,0,t,0,0,0,t,t*2,0,0,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.predator=function(t,i){var n=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(n,i)},e.prototype.lsd=function(t){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,t)},e.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperty(e.prototype,"matrix",{get:function(){return this.uniforms.m},set:function(t){this.uniforms.m=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alpha",{get:function(){return this.uniforms.uAlpha},set:function(t){this.uniforms.uAlpha=t},enumerable:!1,configurable:!0}),e}(De);Yr.prototype.grayscale=Yr.prototype.greyscale;var vs=function(l,e){return vs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},vs(l,e)};function ZX(l,e){vs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var bX=`varying vec2 vFilterCoord;
811
815
  varying vec2 vTextureCoord;
812
816
 
813
817
  uniform vec2 scale;
@@ -827,7 +831,7 @@ void main(void)
827
831
 
828
832
  gl_FragColor = texture2D(uSampler, clamp(vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y), inputClamp.xy, inputClamp.zw));
829
833
  }
830
- `,iv=`attribute vec2 aVertexPosition;
834
+ `,pX=`attribute vec2 aVertexPosition;
831
835
 
832
836
  uniform mat3 projectionMatrix;
833
837
  uniform mat3 filterMatrix;
@@ -856,7 +860,7 @@ void main(void)
856
860
  vTextureCoord = filterTextureCoord();
857
861
  vFilterCoord = ( filterMatrix * vec3( vTextureCoord, 1.0) ).xy;
858
862
  }
859
- `;(function(r){tv(e,r);function e(t,i){var n=this,s=new gt;return t.renderable=!1,n=r.call(this,iv,ev,{mapSampler:t._texture,filterMatrix:s,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])})||this,n.maskSprite=t,n.maskMatrix=s,i==null&&(i=20),n.scale=new X(i,i),n}return e.prototype.apply=function(t,i,n,s){this.uniforms.filterMatrix=t.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;var a=this.maskSprite.worldTransform,o=Math.sqrt(a.a*a.a+a.b*a.b),h=Math.sqrt(a.c*a.c+a.d*a.d);o!==0&&h!==0&&(this.uniforms.rotation[0]=a.a/o,this.uniforms.rotation[1]=a.b/o,this.uniforms.rotation[2]=a.c/h,this.uniforms.rotation[3]=a.d/h),t.applyFilter(this,i,n,s)},Object.defineProperty(e.prototype,"map",{get:function(){return this.uniforms.mapSampler},set:function(t){this.uniforms.mapSampler=t},enumerable:!1,configurable:!0}),e})(oe);var Fn=function(r,e){return Fn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Fn(r,e)};function rv(r,e){Fn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var nv=`
863
+ `;(function(l){ZX(e,l);function e(t,i){var n=this,a=new vt;return t.renderable=!1,n=l.call(this,pX,bX,{mapSampler:t._texture,filterMatrix:a,scale:{x:1,y:1},rotation:new Float32Array([1,0,0,1])})||this,n.maskSprite=t,n.maskMatrix=a,i==null&&(i=20),n.scale=new _(i,i),n}return e.prototype.apply=function(t,i,n,a){this.uniforms.filterMatrix=t.calculateSpriteMatrix(this.maskMatrix,this.maskSprite),this.uniforms.scale.x=this.scale.x,this.uniforms.scale.y=this.scale.y;var s=this.maskSprite.worldTransform,d=Math.sqrt(s.a*s.a+s.b*s.b),h=Math.sqrt(s.c*s.c+s.d*s.d);d!==0&&h!==0&&(this.uniforms.rotation[0]=s.a/d,this.uniforms.rotation[1]=s.b/d,this.uniforms.rotation[2]=s.c/h,this.uniforms.rotation[3]=s.d/h),t.applyFilter(this,i,n,a)},Object.defineProperty(e.prototype,"map",{get:function(){return this.uniforms.mapSampler},set:function(t){this.uniforms.mapSampler=t},enumerable:!1,configurable:!0}),e})(De);var Is=function(l,e){return Is=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Is(l,e)};function GX(l,e){Is(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var XX=`
860
864
  attribute vec2 aVertexPosition;
861
865
 
862
866
  uniform mat3 projectionMatrix;
@@ -898,7 +902,7 @@ void main(void) {
898
902
 
899
903
  texcoords(vFragCoord, inputSize.zw, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);
900
904
  }
901
- `,sv=`varying vec2 v_rgbNW;
905
+ `,yX=`varying vec2 v_rgbNW;
902
906
  varying vec2 v_rgbNE;
903
907
  varying vec2 v_rgbSW;
904
908
  varying vec2 v_rgbSE;
@@ -1019,7 +1023,7 @@ void main() {
1019
1023
 
1020
1024
  gl_FragColor = color;
1021
1025
  }
1022
- `;(function(r){rv(e,r);function e(){return r.call(this,nv,sv)||this}return e})(oe);var Nn=function(r,e){return Nn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Nn(r,e)};function av(r,e){Nn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var ov=`precision highp float;
1026
+ `;(function(l){GX(e,l);function e(){return l.call(this,XX,yX)||this}return e})(De);var Ys=function(l,e){return Ys=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Ys(l,e)};function VX(l,e){Ys(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var RX=`precision highp float;
1023
1027
 
1024
1028
  varying vec2 vTextureCoord;
1025
1029
  varying vec4 vColor;
@@ -1053,6 +1057,6 @@ void main()
1053
1057
 
1054
1058
  gl_FragColor = color;
1055
1059
  }
1056
- `;(function(r){av(e,r);function e(t,i){t===void 0&&(t=.5),i===void 0&&(i=Math.random());var n=r.call(this,Js,ov,{uNoise:0,uSeed:0})||this;return n.noise=t,n.seed=i,n}return Object.defineProperty(e.prototype,"noise",{get:function(){return this.uniforms.uNoise},set:function(t){this.uniforms.uNoise=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"seed",{get:function(){return this.uniforms.uSeed},set:function(t){this.uniforms.uSeed=t},enumerable:!1,configurable:!0}),e})(oe);var Wa=new gt;pt.prototype._cacheAsBitmap=!1,pt.prototype._cacheData=null,pt.prototype._cacheAsBitmapResolution=null,pt.prototype._cacheAsBitmapMultisample=ft.NONE;var hv=function(){function r(){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 r}();Object.defineProperties(pt.prototype,{cacheAsBitmapResolution:{get:function(){return this._cacheAsBitmapResolution},set:function(r){r!==this._cacheAsBitmapResolution&&(this._cacheAsBitmapResolution=r,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmapMultisample:{get:function(){return this._cacheAsBitmapMultisample},set:function(r){r!==this._cacheAsBitmapMultisample&&(this._cacheAsBitmapMultisample=r,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmap:{get:function(){return this._cacheAsBitmap},set:function(r){if(this._cacheAsBitmap!==r){this._cacheAsBitmap=r;var e;r?(this._cacheData||(this._cacheData=new hv),e=this._cacheData,e.originalRender=this.render,e.originalRenderCanvas=this.renderCanvas,e.originalUpdateTransform=this.updateTransform,e.originalCalculateBounds=this.calculateBounds,e.originalGetLocalBounds=this.getLocalBounds,e.originalDestroy=this.destroy,e.originalContainsPoint=this.containsPoint,e.originalMask=this._mask,e.originalFilterArea=this.filterArea,this.render=this._renderCached,this.renderCanvas=this._renderCachedCanvas,this.destroy=this._cacheAsBitmapDestroy):(e=this._cacheData,e.sprite&&this._destroyCachedDisplayObject(),this.render=e.originalRender,this.renderCanvas=e.originalRenderCanvas,this.calculateBounds=e.originalCalculateBounds,this.getLocalBounds=e.originalGetLocalBounds,this.destroy=e.originalDestroy,this.updateTransform=e.originalUpdateTransform,this.containsPoint=e.originalContainsPoint,this._mask=e.originalMask,this.filterArea=e.originalFilterArea)}}}}),pt.prototype._renderCached=function(e){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObject(e),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._render(e))},pt.prototype._initCachedDisplayObject=function(e){var t;if(!(this._cacheData&&this._cacheData.sprite)){var i=this.alpha;this.alpha=1,e.batch.flush();var n=this.getLocalBounds(null,!0).clone();if(this.filters&&this.filters.length){var s=this.filters[0].padding;n.pad(s)}n.ceil(F.RESOLUTION);var a=e.renderTexture.current,o=e.renderTexture.sourceFrame.clone(),h=e.renderTexture.destinationFrame.clone(),u=e.projection.transform,l=Te.create({width:n.width,height:n.height,resolution:this.cacheAsBitmapResolution||e.resolution,multisample:(t=this.cacheAsBitmapMultisample)!==null&&t!==void 0?t:e.multisample}),f="cacheAsBitmap_"+xe();this._cacheData.textureCacheId=f,V.addToCache(l.baseTexture,f),k.addToCache(l,f);var c=this.transform.localTransform.copyTo(Wa).invert().translate(-n.x,-n.y);this.render=this._cacheData.originalRender,e.render(this,{renderTexture:l,clear:!0,transform:c,skipUpdateTransform:!1}),e.framebuffer.blit(),e.projection.transform=u,e.renderTexture.bind(a,o,h),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 d=new fi(l);d.transform.worldTransform=this.transform.worldTransform,d.anchor.x=-(n.x/n.width),d.anchor.y=-(n.y/n.height),d.alpha=i,d._bounds=this._bounds,this._cacheData.sprite=d,this.transform._parentID=-1,this.parent?this.updateTransform():(this.enableTempParent(),this.updateTransform(),this.disableTempParent(null)),this.containsPoint=d.containsPoint.bind(d)}},pt.prototype._renderCachedCanvas=function(e){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObjectCanvas(e),this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._renderCanvas(e))},pt.prototype._initCachedDisplayObjectCanvas=function(e){if(!(this._cacheData&&this._cacheData.sprite)){var t=this.getLocalBounds(null,!0),i=this.alpha;this.alpha=1;var n=e.context,s=e._projTransform;t.ceil(F.RESOLUTION);var a=Te.create({width:t.width,height:t.height}),o="cacheAsBitmap_"+xe();this._cacheData.textureCacheId=o,V.addToCache(a.baseTexture,o),k.addToCache(a,o);var h=Wa;this.transform.localTransform.copyTo(h),h.invert(),h.tx-=t.x,h.ty-=t.y,this.renderCanvas=this._cacheData.originalRenderCanvas,e.render(this,{renderTexture:a,clear:!0,transform:h,skipUpdateTransform:!1}),e.context=n,e._projTransform=s,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 u=new fi(a);u.transform.worldTransform=this.transform.worldTransform,u.anchor.x=-(t.x/t.width),u.anchor.y=-(t.y/t.height),u.alpha=i,u._bounds=this._bounds,this._cacheData.sprite=u,this.transform._parentID=-1,this.parent?this.updateTransform():(this.parent=e._tempDisplayObjectParent,this.updateTransform(),this.parent=null),this.containsPoint=u.containsPoint.bind(u)}},pt.prototype._calculateCachedBounds=function(){this._bounds.clear(),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite._calculateBounds(),this._bounds.updateID=this._boundsID},pt.prototype._getCachedLocalBounds=function(){return this._cacheData.sprite.getLocalBounds(null)},pt.prototype._destroyCachedDisplayObject=function(){this._cacheData.sprite._texture.destroy(!0),this._cacheData.sprite=null,V.removeFromCache(this._cacheData.textureCacheId),k.removeFromCache(this._cacheData.textureCacheId),this._cacheData.textureCacheId=null},pt.prototype._cacheAsBitmapDestroy=function(e){this.cacheAsBitmap=!1,this.destroy(e)};pt.prototype.name=null,Pt.prototype.getChildByName=function(e,t){for(var i=0,n=this.children.length;i<n;i++)if(this.children[i].name===e)return this.children[i];if(t)for(var i=0,n=this.children.length;i<n;i++){var s=this.children[i];if(s.getChildByName){var a=s.getChildByName(e,!0);if(a)return a}}return null};pt.prototype.getGlobalPosition=function(e,t){return e===void 0&&(e=new X),t===void 0&&(t=!1),this.parent?this.parent.toGlobal(this.position,e,t):(e.x=this.position.x,e.y=this.position.y),e};var uv=function(){function r(){}return r.init=function(e){var t=this;Object.defineProperty(this,"resizeTo",{set:function(i){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=i,i&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get:function(){return this._resizeTo}}),this.queueResize=function(){t._resizeTo&&(t.cancelResize(),t._resizeId=requestAnimationFrame(function(){return t.resize()}))},this.cancelResize=function(){t._resizeId&&(cancelAnimationFrame(t._resizeId),t._resizeId=null)},this.resize=function(){if(t._resizeTo){t.cancelResize();var i,n;if(t._resizeTo===globalThis.window)i=globalThis.innerWidth,n=globalThis.innerHeight;else{var s=t._resizeTo,a=s.clientWidth,o=s.clientHeight;i=a,n=o}t.renderer.resize(i,n)}},this._resizeId=null,this._resizeTo=null,this.resizeTo=e.resizeTo||null},r.destroy=function(){globalThis.removeEventListener("resize",this.queueResize),this.cancelResize(),this.cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null},r.extension=tt.Application,r}(),ja=function(){function r(e){var t=this;this.stage=new Pt,e=Object.assign({forceCanvas:!1},e),this.renderer=Uc(e),r._plugins.forEach(function(i){i.init.call(t,e)})}return r.registerPlugin=function(e){Ut("6.5.0","Application.registerPlugin() is deprecated, use extensions.add()"),ee.add({type:tt.Application,ref:e})},r.prototype.render=function(){this.renderer.render(this.stage)},Object.defineProperty(r.prototype,"view",{get:function(){return this.renderer.view},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"screen",{get:function(){return this.renderer.screen},enumerable:!1,configurable:!0}),r.prototype.destroy=function(e,t){var i=this,n=r._plugins.slice(0);n.reverse(),n.forEach(function(s){s.destroy.call(i)}),this.stage.destroy(t),this.stage=null,this.renderer.destroy(e),this.renderer=null},r._plugins=[],r}();ee.handleByList(tt.Application,ja._plugins),ee.add(uv);var Bn=function(r,e){return Bn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Bn(r,e)};function Xe(r,e){Bn(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var lv=function(r){Xe(e,r);function e(t,i,n,s){t===void 0&&(t=100),i===void 0&&(i=100),n===void 0&&(n=10),s===void 0&&(s=10);var a=r.call(this)||this;return a.segWidth=n,a.segHeight=s,a.width=t,a.height=i,a.build(),a}return e.prototype.build=function(){for(var t=this.segWidth*this.segHeight,i=[],n=[],s=[],a=this.segWidth-1,o=this.segHeight-1,h=this.width/a,u=this.height/o,l=0;l<t;l++){var f=l%this.segWidth,c=l/this.segWidth|0;i.push(f*h,c*u),n.push(f/a,c/o)}for(var d=a*o,l=0;l<d;l++){var p=l%a,v=l/a|0,_=v*this.segWidth+p,m=v*this.segWidth+p+1,g=(v+1)*this.segWidth+p,y=(v+1)*this.segWidth+p+1;s.push(_,m,g,m,y,g)}this.buffers[0].data=new Float32Array(i),this.buffers[1].data=new Float32Array(n),this.indexBuffer.data=new Uint16Array(s),this.buffers[0].update(),this.buffers[1].update(),this.indexBuffer.update()},e}(rr),fv=function(r){Xe(e,r);function e(t,i,n){t===void 0&&(t=200),n===void 0&&(n=0);var s=r.call(this,new Float32Array(i.length*4),new Float32Array(i.length*4),new Uint16Array((i.length-1)*6))||this;return s.points=i,s._width=t,s.textureScale=n,s.build(),s}return Object.defineProperty(e.prototype,"width",{get:function(){return this._width},enumerable:!1,configurable:!0}),e.prototype.build=function(){var t=this.points;if(t){var i=this.getBuffer("aVertexPosition"),n=this.getBuffer("aTextureCoord"),s=this.getIndex();if(!(t.length<1)){i.data.length/4!==t.length&&(i.data=new Float32Array(t.length*4),n.data=new Float32Array(t.length*4),s.data=new Uint16Array((t.length-1)*6));var a=n.data,o=s.data;a[0]=0,a[1]=0,a[2]=0,a[3]=1;for(var h=0,u=t[0],l=this._width*this.textureScale,f=t.length,c=0;c<f;c++){var d=c*4;if(this.textureScale>0){var p=u.x-t[c].x,v=u.y-t[c].y,_=Math.sqrt(p*p+v*v);u=t[c],h+=_/l}else h=c/(f-1);a[d]=h,a[d+1]=0,a[d+2]=h,a[d+3]=1}for(var m=0,c=0;c<f-1;c++){var d=c*2;o[m++]=d,o[m++]=d+1,o[m++]=d+2,o[m++]=d+2,o[m++]=d+1,o[m++]=d+3}n.update(),s.update(),this.updateVertices()}}},e.prototype.updateVertices=function(){var t=this.points;if(!(t.length<1)){for(var i=t[0],n,s=0,a=0,o=this.buffers[0].data,h=t.length,u=0;u<h;u++){var l=t[u],f=u*4;u<t.length-1?n=t[u+1]:n=l,a=-(n.x-i.x),s=n.y-i.y;var c=Math.sqrt(s*s+a*a),d=this.textureScale>0?this.textureScale*this._width/2:this._width/2;s/=c,a/=c,s*=d,a*=d,o[f]=l.x+s,o[f+1]=l.y+a,o[f+2]=l.x-s,o[f+3]=l.y-a,i=l}this.buffers[0].update()}},e.prototype.update=function(){this.textureScale>0?this.build():this.updateVertices()},e}(rr);(function(r){Xe(e,r);function e(t,i,n){n===void 0&&(n=0);var s=this,a=new fv(t.height,i,n),o=new vi(t);return n>0&&(t.baseTexture.wrapMode=zt.REPEAT),s=r.call(this,a,o)||this,s.autoUpdate=!0,s}return e.prototype._render=function(t){var i=this.geometry;(this.autoUpdate||i._width!==this.shader.texture.height)&&(i._width=this.shader.texture.height,i.update()),r.prototype._render.call(this,t)},e})(pi);var cv=function(r){Xe(e,r);function e(t,i,n){var s=this,a=new lv(t.width,t.height,i,n),o=new vi(k.WHITE);return s=r.call(this,a,o)||this,s.texture=t,s.autoResize=!0,s}return e.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID;var t=this.geometry,i=this.shader.texture,n=i.width,s=i.height;this.autoResize&&(t.width!==n||t.height!==s)&&(t.width=this.shader.texture.width,t.height=this.shader.texture.height,t.build())},Object.defineProperty(e.prototype,"texture",{get:function(){return this.shader.texture},set:function(t){this.shader.texture!==t&&(this.shader.texture=t,this._textureID=-1,t.baseTexture.valid?this.textureUpdated():t.once("update",this.textureUpdated,this))},enumerable:!1,configurable:!0}),e.prototype._render=function(t){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),r.prototype._render.call(this,t)},e.prototype.destroy=function(t){this.shader.texture.off("update",this.textureUpdated,this),r.prototype.destroy.call(this,t)},e}(pi);(function(r){Xe(e,r);function e(t,i,n,s,a){t===void 0&&(t=k.EMPTY);var o=this,h=new rr(i,n,s);h.getBuffer("aVertexPosition").static=!1;var u=new vi(t);return o=r.call(this,h,u,null,a)||this,o.autoUpdate=!0,o}return Object.defineProperty(e.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(t){this.geometry.getBuffer("aVertexPosition").data=t},enumerable:!1,configurable:!0}),e.prototype._render=function(t){this.autoUpdate&&this.geometry.getBuffer("aVertexPosition").update(),r.prototype._render.call(this,t)},e})(pi);var ar=10;(function(r){Xe(e,r);function e(t,i,n,s,a){i===void 0&&(i=ar),n===void 0&&(n=ar),s===void 0&&(s=ar),a===void 0&&(a=ar);var o=r.call(this,k.WHITE,4,4)||this;return o._origWidth=t.orig.width,o._origHeight=t.orig.height,o._width=o._origWidth,o._height=o._origHeight,o._leftWidth=i,o._rightWidth=s,o._topHeight=n,o._bottomHeight=a,o.texture=t,o}return e.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID,this._refresh()},Object.defineProperty(e.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(t){this.geometry.getBuffer("aVertexPosition").data=t},enumerable:!1,configurable:!0}),e.prototype.updateHorizontalVertices=function(){var t=this.vertices,i=this._getMinScale();t[9]=t[11]=t[13]=t[15]=this._topHeight*i,t[17]=t[19]=t[21]=t[23]=this._height-this._bottomHeight*i,t[25]=t[27]=t[29]=t[31]=this._height},e.prototype.updateVerticalVertices=function(){var t=this.vertices,i=this._getMinScale();t[2]=t[10]=t[18]=t[26]=this._leftWidth*i,t[4]=t[12]=t[20]=t[28]=this._width-this._rightWidth*i,t[6]=t[14]=t[22]=t[30]=this._width},e.prototype._getMinScale=function(){var t=this._leftWidth+this._rightWidth,i=this._width>t?1:this._width/t,n=this._topHeight+this._bottomHeight,s=this._height>n?1:this._height/n,a=Math.min(i,s);return a},Object.defineProperty(e.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leftWidth",{get:function(){return this._leftWidth},set:function(t){this._leftWidth=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rightWidth",{get:function(){return this._rightWidth},set:function(t){this._rightWidth=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"topHeight",{get:function(){return this._topHeight},set:function(t){this._topHeight=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"bottomHeight",{get:function(){return this._bottomHeight},set:function(t){this._bottomHeight=t,this._refresh()},enumerable:!1,configurable:!0}),e.prototype._refresh=function(){var t=this.texture,i=this.geometry.buffers[1].data;this._origWidth=t.orig.width,this._origHeight=t.orig.height;var n=1/this._origWidth,s=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]=s*this._topHeight,i[17]=i[19]=i[21]=i[23]=1-s*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()},e})(cv);var Ln=function(r,e){return Ln=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Ln(r,e)};function dv(r,e){Ln(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}(function(r){dv(e,r);function e(t,i){i===void 0&&(i=!0);var n=r.call(this,t[0]instanceof k?t[0]:t[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=t,n}return e.prototype.stop=function(){this._playing&&(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&(Tt.shared.remove(this.update,this),this._isConnectedToTicker=!1))},e.prototype.play=function(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&(Tt.shared.add(this.update,this,$t.HIGH),this._isConnectedToTicker=!0))},e.prototype.gotoAndStop=function(t){this.stop();var i=this.currentFrame;this._currentTime=t,i!==this.currentFrame&&this.updateTexture()},e.prototype.gotoAndPlay=function(t){var i=this.currentFrame;this._currentTime=t,i!==this.currentFrame&&this.updateTexture(),this.play()},e.prototype.update=function(t){if(this._playing){var i=this.animationSpeed*t,n=this.currentFrame;if(this._durations!==null){var s=this._currentTime%1*this._durations[this.currentFrame];for(s+=i/60*1e3;s<0;)this._currentTime--,s+=this._durations[this.currentFrame];var a=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);s>=this._durations[this.currentFrame];)s-=this._durations[this.currentFrame]*a,this._currentTime+=a;this._currentTime+=s/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.currentFrame<n?this.onLoop():this.animationSpeed<0&&this.currentFrame>n&&this.onLoop()),this.updateTexture())}},e.prototype.updateTexture=function(){var t=this.currentFrame;this._previousFrame!==t&&(this._previousFrame=t,this._texture=this._textures[t],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))},e.prototype.destroy=function(t){this.stop(),r.prototype.destroy.call(this,t),this.onComplete=null,this.onFrameChange=null,this.onLoop=null},e.fromFrames=function(t){for(var i=[],n=0;n<t.length;++n)i.push(k.from(t[n]));return new e(i)},e.fromImages=function(t){for(var i=[],n=0;n<t.length;++n)i.push(k.from(t[n]));return new e(i)},Object.defineProperty(e.prototype,"totalFrames",{get:function(){return this._textures.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textures",{get:function(){return this._textures},set:function(t){if(t[0]instanceof k)this._textures=t,this._durations=null;else{this._textures=[],this._durations=[];for(var i=0;i<t.length;i++)this._textures.push(t[i].texture),this._durations.push(t[i].time)}this._previousFrame=null,this.gotoAndStop(0),this.updateTexture()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentFrame",{get:function(){var t=Math.floor(this._currentTime)%this._textures.length;return t<0&&(t+=this._textures.length),t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"playing",{get:function(){return this._playing},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?(Tt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&(Tt.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),e})(fi);ee.add(Qc,nd,rd,Zd,Sp,ra,Mp,jp,bd,Yd,Vd,Rp,_f,cd);var za={exports:{}};(function(r){(function(){function e(v,_){document.addEventListener?v.addEventListener("scroll",_,!1):v.attachEvent("scroll",_)}function t(v){document.body?v():document.addEventListener?document.addEventListener("DOMContentLoaded",function _(){document.removeEventListener("DOMContentLoaded",_),v()}):document.attachEvent("onreadystatechange",function _(){(document.readyState=="interactive"||document.readyState=="complete")&&(document.detachEvent("onreadystatechange",_),v())})}function i(v){this.g=document.createElement("div"),this.g.setAttribute("aria-hidden","true"),this.g.appendChild(document.createTextNode(v)),this.h=document.createElement("span"),this.i=document.createElement("span"),this.m=document.createElement("span"),this.j=document.createElement("span"),this.l=-1,this.h.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.i.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.j.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.m.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;",this.h.appendChild(this.m),this.i.appendChild(this.j),this.g.appendChild(this.h),this.g.appendChild(this.i)}function n(v,_){v.g.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+_+";"}function s(v){var _=v.g.offsetWidth,m=_+100;return v.j.style.width=m+"px",v.i.scrollLeft=m,v.h.scrollLeft=v.h.scrollWidth+100,v.l!==_?(v.l=_,!0):!1}function a(v,_){function m(){var y=g;s(y)&&y.g.parentNode!==null&&_(y.l)}var g=v;e(v.h,m),e(v.i,m),s(v)}function o(v,_,m){_=_||{},m=m||window,this.family=v,this.style=_.style||"normal",this.weight=_.weight||"normal",this.stretch=_.stretch||"normal",this.context=m}var h=null,u=null,l=null,f=null;function c(v){return u===null&&(d(v)&&/Apple/.test(window.navigator.vendor)?(v=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent),u=!!v&&603>parseInt(v[1],10)):u=!1),u}function d(v){return f===null&&(f=!!v.document.fonts),f}function p(v,_){var m=v.style,g=v.weight;if(l===null){var y=document.createElement("div");try{y.style.font="condensed 100px sans-serif"}catch{}l=y.style.font!==""}return[m,g,l?v.stretch:"","100px",_].join(" ")}o.prototype.load=function(v,_){var m=this,g=v||"BESbswy",y=0,b=_||3e3,x=new Date().getTime();return new Promise(function(T,w){if(d(m.context)&&!c(m.context)){var A=new Promise(function(E,D){function C(){new Date().getTime()-x>=b?D(Error(""+b+"ms timeout exceeded")):m.context.document.fonts.load(p(m,'"'+m.family+'"'),g).then(function(N){1<=N.length?E():setTimeout(C,25)},D)}C()}),S=new Promise(function(E,D){y=setTimeout(function(){D(Error(""+b+"ms timeout exceeded"))},b)});Promise.race([S,A]).then(function(){clearTimeout(y),T(m)},w)}else t(function(){function E(){var B;(B=M!=-1&&O!=-1||M!=-1&&U!=-1||O!=-1&&U!=-1)&&((B=M!=O&&M!=U&&O!=U)||(h===null&&(B=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),h=!!B&&(536>parseInt(B[1],10)||parseInt(B[1],10)===536&&11>=parseInt(B[2],10))),B=h&&(M==rt&&O==rt&&U==rt||M==z&&O==z&&U==z||M==I&&O==I&&U==I)),B=!B),B&&(P.parentNode!==null&&P.parentNode.removeChild(P),clearTimeout(y),T(m))}function D(){if(new Date().getTime()-x>=b)P.parentNode!==null&&P.parentNode.removeChild(P),w(Error(""+b+"ms timeout exceeded"));else{var B=m.context.document.hidden;(B===!0||B===void 0)&&(M=C.g.offsetWidth,O=N.g.offsetWidth,U=W.g.offsetWidth,E()),y=setTimeout(D,50)}}var C=new i(g),N=new i(g),W=new i(g),M=-1,O=-1,U=-1,rt=-1,z=-1,I=-1,P=document.createElement("div");P.dir="ltr",n(C,p(m,"sans-serif")),n(N,p(m,"serif")),n(W,p(m,"monospace")),P.appendChild(C.g),P.appendChild(N.g),P.appendChild(W.g),m.context.document.body.appendChild(P),rt=C.g.offsetWidth,z=N.g.offsetWidth,I=W.g.offsetWidth,D(),a(C,function(B){M=B,E()}),n(C,p(m,'"'+m.family+'",sans-serif')),a(N,function(B){O=B,E()}),n(N,p(m,'"'+m.family+'",serif')),a(W,function(B){U=B,E()}),n(W,p(m,'"'+m.family+'",monospace'))})})},r.exports=o})()})(za);const pv=za.exports,_i=new le({fontFamily:"InterVariable",fontSize:14,lineHeight:20}),vv=new le({fontFamily:"InterVariable",fontSize:12,lineHeight:16});function _v(){const r=window.devicePixelRatio||2;return new Promise(e=>{new pv("InterVariable").load().then(()=>{const i={resolution:r,chars:Mt.ASCII};Mt.from("NodeTextDefault",{..._i,fill:1120295},i),Mt.from("NodeTextInverse",{..._i,fill:16777215},i),Mt.from("TimeMarkerLabel",{...vv,fill:9741240},i),e({nodeTextDefault:{fontName:"NodeTextDefault",fontSize:14},nodeTextInverse:{fontName:"NodeTextInverse",fontSize:14},timeMarkerLabel:{fontName:"TimeMarkerLabel",fontSize:12}})})})}let Un=null;const Ya=()=>(Un||(Un=_v()),Un);function mv(r){gh();const e=new ja({backgroundAlpha:0,width:r.clientWidth,height:r.clientHeight,resolution:window.devicePixelRatio||2,autoDensity:!0,antialias:!0,resizeTo:r});return r.appendChild(e.view),e}async function gv(){const{Viewport:r}=await Promise.resolve().then(()=>jv);return r}async function yv(r,e){const t=await gv(),{width:i,height:n}=e.screen,s=new t({screenWidth:i,screenHeight:n,passiveWheel:!1,interaction:e.renderer.plugins.interaction,divWheel:r,ticker:e.ticker});return s.drag({wheel:!1,pressDrag:!0}).wheel({trackpadPinch:!0,wheelZoom:!0}).pinch().clampZoom({minWidth:i/2,maxWidth:i*40}).decelerate({friction:.9}),e.stage.addChild(s),e.ticker.add(()=>{(s.screenWidth!==e.screen.width||s.screenHeight!==e.screen.height)&&s.resize(e.screen.width,e.screen.height)},null,$t.LOW),s}const Gn={guideLineColor:13227490,labelPadding:4};class xv extends Pt{constructor(t,i){super();K(this,"labelText");K(this,"guideHeight");K(this,"guideLine");K(this,"label");this.labelText=t,this.guideHeight=i,this.guideLine=new Ae,this.drawGuideLine(),this.addChild(this.guideLine),this.drawLabel()}drawGuideLine(){this.guideLine.clear(),this.guideLine.beginFill(Gn.guideLineColor),this.guideLine.drawRect(0,0,1,this.guideHeight),this.guideLine.endFill()}async drawLabel(){var t;if(this.labelText){const i=await Ya();(t=this.label)==null||t.destroy(),this.label=new An(this.labelText,i.timeMarkerLabel),this.label.position.set(Gn.labelPadding,Gn.labelPadding),this.addChild(this.label)}}updateHeight(t){this.guideHeight=t,this.drawGuideLine()}}function bv(r,e){let t,i;r.forEach(s=>{(t===void 0||t>s.start||isNaN(s.start.getDate()))&&(t=s.start),s.end!==null&&(i===void 0||i<s.end||isNaN(s.end.getDate()))&&(i=s.end)}),t=t??new Date,i=i??new Date(t.getTime()+(e??0));const n=i.getTime()-t.getTime();return{min:t,max:i,span:e&&n<e?e:n}}function Tv(r){return new Date(r.getFullYear(),r.getMonth(),r.getDate())}function wv(r){return new Date(r.getFullYear(),r.getMonth(),r.getDate(),Math.floor(r.getHours()/2)*2)}const Y={second:1e3,minute:1e3*60,hour:1e3*60*60,day:1e3*60*60*24,week:1e3*60*60*24*7},xt={seconds:"seconds",minutes:"minutes",date:"date"},Va=[{ceiling:Y.second*4,span:Y.second,labelFormat:xt.seconds},{ceiling:Y.second*8,span:Y.second*5,labelFormat:xt.seconds},{ceiling:Y.second*13,span:Y.second*10,labelFormat:xt.seconds},{ceiling:Y.second*20,span:Y.second*15,labelFormat:xt.seconds},{ceiling:Y.second*45,span:Y.second*30,labelFormat:xt.seconds},{ceiling:Y.minute*4,span:Y.minute,labelFormat:xt.minutes},{ceiling:Y.minute*8,span:Y.minute*5,labelFormat:xt.minutes},{ceiling:Y.minute*13,span:Y.minute*10,labelFormat:xt.minutes},{ceiling:Y.minute*28,span:Y.minute*15,labelFormat:xt.minutes},{ceiling:Y.hour*1.24,span:Y.minute*30,labelFormat:xt.minutes},{ceiling:Y.hour*3,span:Y.hour,labelFormat:xt.minutes},{ceiling:Y.hour*8,span:Y.hour*2,labelFormat:xt.minutes},{ceiling:Y.hour*13,span:Y.hour*6,labelFormat:xt.minutes},{ceiling:Y.hour*22,span:Y.hour*12,labelFormat:xt.minutes},{ceiling:Y.day*4,span:Y.day,labelFormat:xt.date},{ceiling:Y.week*2,span:Y.week,labelFormat:xt.date},{ceiling:1/0,span:Y.week*4,labelFormat:xt.date}],Ev=260,kn={xPadding:4e3};class Sv extends Pt{constructor({viewportRef:t,appRef:i,xScale:n,dateScale:s,minimumStartDate:a,maximumEndDate:o,isRunning:h,formatTimeBySeconds:u,formatTimeByMinutes:l,formatDate:f}){super();K(this,"viewportRef");K(this,"appRef");K(this,"xScale");K(this,"dateScale");K(this,"minimumStartDate");K(this,"maximumEndDate");K(this,"isRunning");K(this,"formatTimeBySeconds");K(this,"formatTimeByMinutes");K(this,"formatDate");K(this,"idealGuideCount",10);K(this,"currentTimeGap",120);K(this,"labelFormatter",t=>t.toLocaleTimeString());K(this,"guides",new Map);this.viewportRef=t,this.appRef=i,this.xScale=n,this.dateScale=s,this.minimumStartDate=a,this.maximumEndDate=o,this.isRunning=h,this.formatTimeBySeconds=u,this.formatTimeByMinutes=l,this.formatDate=f,this.updateIdealGuideCount(),this.updateCurrentTimeGap(),this.createGuides()}updateGuides(){const t=this.currentTimeGap;this.updateCurrentTimeGap(),this.isRedrawRequired(t)?(this.guides.size>0&&(this.removeChildren(),this.guides.clear()),this.createGuides()):this.updateGuidePositions()}updateIdealGuideCount(){this.idealGuideCount=Math.ceil(this.appRef.screen.width/Ev)}updateCurrentTimeGap(){const t=Math.ceil((this.viewportRef.right-this.viewportRef.left)/this.idealGuideCount),i=this.dateScale(t)-this.minimumStartDate.getTime(),n=Va.find(s=>s.ceiling>i)??Va[0];this.currentTimeGap=n.span,this.setLabelFormatter(n.labelFormat)}createGuides(){let t;const i=this.dateScale(this.xScale(this.maximumEndDate.value??new Date)+kn.xPadding);let n=new Date(Math.ceil(this.dateScale(-kn.xPadding)/this.currentTimeGap)*this.currentTimeGap);for(this.currentTimeGap>Y.hour*6?n=Tv(n):this.currentTimeGap>Y.hour&&(n=wv(n)),t=n;t.getTime()<i;){const s=new xv(this.labelFormatter(t),this.appRef.screen.height);s.position.set(this.getGuidePosition(t),0),this.guides.set(t,s),this.addChild(s),t=new Date(t.getTime()+this.currentTimeGap)}}getGuidePosition(t){return this.xScale(t)*this.viewportRef.scale._x+this.viewportRef.worldTransform.tx}updateGuidePositions(){this.guides.forEach((t,i)=>{this.getGuidePosition(i)!==t.position.x&&t.position.set(this.getGuidePosition(i),0),t.height!==this.appRef.screen.height&&t.updateHeight(this.appRef.screen.height)})}setLabelFormatter(t){switch(t){case xt.minutes:this.labelFormatter=this.formatByMinutesWithDates;break;case xt.date:this.labelFormatter=this.formatDate;break;default:this.labelFormatter=this.formatTimeBySeconds}}formatByMinutesWithDates(t){return t.getHours()===0&&t.getMinutes()===0?`${this.formatDate(t)}
1057
- ${this.formatTimeByMinutes(t)}`:this.formatTimeByMinutes(t)}isRedrawRequired(t){return t!==this.currentTimeGap||this.noGuidesExist()||this.isGuideLengthOutdated()}noGuidesExist(){return this.guides.size===0}isGuideLengthOutdated(){var n;if(!this.isRunning)return!1;const t=(n=Array.from(this.guides).pop())==null?void 0:n[1];if(!t||!this.maximumEndDate.value)return!1;const i=this.getGuidePosition(this.maximumEndDate.value)+kn.xPadding*this.viewportRef.scale._x-this.xScale(new Date(this.minimumStartDate.getTime()+this.currentTimeGap))*this.viewportRef.scale._x;return t.x<i}destroy(){this.removeChildren(),this.guides.clear(),super.destroy.call(this)}}const qa=12,Ie={padding:qa,borderRadius:8,labelGap:4,yPositionOffset:_i.lineHeight+qa*2+16},$a={completed:42557,running:43247,scheduled:6321549,pending:6321549,failed:15728657,cancelled:15728657,crashed:15728657,paused:16035840};class Za extends Pt{constructor(t,i,n){super();K(this,"nodeData");K(this,"xScale");K(this,"label");K(this,"box");K(this,"apxLabelWidth",0);K(this,"nodeWidth");K(this,"yPositionIndex",0);K(this,"isLabelInBox",!0);this.nodeData=t,this.xScale=i,this.yPositionIndex=n,this.nodeWidth=this.getNodeWidth(),this.box=new Ae,this.drawBox(),this.addChild(this.box),this.drawLabel(),this.updatePosition()}getNodeWidth(){return this.xScale(this.nodeData.end??new Date)-this.xScale(this.nodeData.start)}get boxColor(){return this.nodeData.state?$a[this.nodeData.state]:$a.pending}drawBox(){this.box.beginFill(this.boxColor),this.box.drawRoundedRect(0,0,this.nodeWidth,_i.lineHeight+Ie.padding*2,Ie.borderRadius),this.box.endFill()}async drawLabel(){var i;const t=await Ya();this.apxLabelWidth===0&&(this.apxLabelWidth=Xt.measureText(this.nodeData.label,_i).width),(i=this.label)==null||i.destroy(),this.apxLabelWidth+Ie.padding*2>this.nodeWidth?(this.isLabelInBox=!1,this.label=new An(this.nodeData.label,t.nodeTextDefault)):(this.isLabelInBox=!0,this.label=new An(this.nodeData.label,t.nodeTextInverse)),this.updateLabelPosition(),this.addChild(this.label)}updatePosition(){this.position.set(this.xScale(this.nodeData.start),this.yPositionIndex*Ie.yPositionOffset)}updateLabelPosition(){var t;(t=this.label)==null||t.position.set(this.isLabelInBox?Ie.padding:this.nodeWidth+Ie.labelGap,Ie.padding)}update(t){t&&(this.nodeData=t);const i=this.getNodeWidth();i!==this.nodeWidth&&(this.nodeWidth=i,this.box.clear(),this.drawBox(),this.isLabelInBox&&this.apxLabelWidth>this.nodeWidth+2||!this.isLabelInBox&&this.apxLabelWidth<this.nodeWidth-2?this.drawLabel():this.isLabelInBox||this.updateLabelPosition()),this.updatePosition()}}const fe={playheadBg:5145342,playheadWidth:2,playheadGlowPadding:8};class Pv extends Pt{constructor({viewportRef:t,appRef:i,xScale:n}){super();K(this,"viewportRef");K(this,"appRef");K(this,"xScale");K(this,"playhead",new Ae);this.viewportRef=t,this.appRef=i,this.xScale=n,this.drawPlayhead()}drawPlayhead(){this.playhead.beginFill(fe.playheadBg,.1),this.playhead.drawRect(0,0,fe.playheadWidth+fe.playheadGlowPadding*2,this.appRef.screen.height),this.playhead.endFill(),this.playhead.beginFill(fe.playheadBg),this.playhead.drawRect(fe.playheadGlowPadding,0,fe.playheadWidth,this.appRef.screen.height),this.playhead.endFill(),this.addChild(this.playhead)}updatePosition(){this.position.x=this.xScale(new Date)*this.viewportRef.scale._x+this.viewportRef.worldTransform.tx-fe.playheadGlowPadding-fe.playheadWidth/2,this.playhead.height!==this.appRef.screen.height&&(this.playhead.height=this.appRef.screen.height)}}const Rv=dt.defineComponent({__name:"FlowRunTimeline",props:{graphData:null,isRunning:{type:Boolean},formatTimeBySeconds:null,formatTimeByMinutes:null,formatDate:null},setup(r){const e=r,t=dt.ref(),i={defaultViewportPadding:40},n={timelineGuides:0,viewport:10,playhead:20};let s=dt.ref(!0),a,o,h=new xo,u=!1,l,f=dt.ref(),c,d,p,v,_=null,m=new Pt,g=new Map;dt.onMounted(async()=>{if(!t.value){console.error("Stage reference not found in initPixiApp");return}b(),a=mv(t.value),a.stage.sortableChildren=!0,o=await yv(t.value,a),o.zIndex=n.viewport,w(),S(),x(),A(),s.value=!1}),dt.onBeforeUnmount(()=>{y()});function y(){p.destroy(),v==null||v.destroy(),m.removeChildren(),g.clear(),m.destroy(),a.destroy(!0)}function b(){const N=Array.from(e.graphData).filter(U=>U.end).flatMap(({start:U,end:rt})=>({start:U,end:rt}));e.isRunning===!0&&N.push({start:new Date,end:new Date});const{min:W,max:M,span:O}=bv(N,6e4);l=W,f.value=M,c=O,d=t.value.clientWidth*2}function x(){e.isRunning&&(v=new Pv({viewportRef:o,appRef:a,xScale:E}),v.zIndex=n.playhead,a.stage.addChild(v),T())}function T(){_||(_=a.ticker.add(()=>{if(e.isRunning&&v){const C=v.position.x>0&&v.position.x<a.screen.width;if(f.value=new Date,v.updatePosition(),!o.moving&&C&&v.position.x>a.screen.width-i.defaultViewportPadding){const N=D(o.left);o.zoomPercent(-.1,!0),o.left=E(new Date(N))}}else v!=null&&v.destroyed||v==null||v.destroy()}))}function w(){p=new Sv({viewportRef:o,appRef:a,xScale:E,dateScale:D,minimumStartDate:l,maximumEndDate:f,isRunning:e.isRunning??!1,formatTimeBySeconds:e.formatTimeBySeconds,formatTimeByMinutes:e.formatTimeByMinutes,formatDate:e.formatDate}),p.zIndex=n.timelineGuides,a.stage.addChild(p),a.ticker.add(()=>{p.updateGuides()})}function A(){h.addAll(o.children),o.on("frame-end",()=>{(o.dirty||u)&&(h.cull(a.renderer.screen),o.dirty=!1,u=!1)})}function S(){e.graphData.forEach((C,N)=>{const W=new Za(C,E,N);g.set(C.id,{node:W,end:C.end,state:C.state}),m.addChild(W)}),o.addChild(m),o.ensureVisible(m.x-i.defaultViewportPadding,m.y-i.defaultViewportPadding,m.width+i.defaultViewportPadding*2,m.height+i.defaultViewportPadding*2,!0),o.moveCenter(m.x+m.width/2,m.y+m.height/2),e.isRunning&&a.ticker.add(()=>{e.isRunning&&g.forEach(C=>C.node.update())})}dt.watchEffect(()=>{s.value||(e.graphData.forEach(C=>{if(g.has(C.id)){const N=g.get(C.id);(N.end!==C.end||N.state!==C.state)&&N.node.update(C)}else{const N=new Za(C,E,g.size);g.set(C.id,{node:N,end:C.end,state:C.state}),m.addChild(N),u=!0}}),e.isRunning&&(!v||v.destroyed)&&x())});function E(C){return Math.ceil((C.getTime()-l.getTime())*(d/c))}function D(C){return Math.ceil(l.getTime()+C*(c/d))}return(C,N)=>(dt.openBlock(),dt.createElementBlock("div",{ref_key:"stage",ref:t,class:"flow-run-timeline"},null,512))}}),Vv="";class Ot{constructor(e){this.parent=e,this.paused=!1}destroy(){}down(e){return!1}move(e){return!1}up(e){return!1}wheel(e){return!1}update(e){}resize(){}reset(){}pause(){this.paused=!0}resume(){this.paused=!1}}var Cv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Av(r,e,t){return t={path:e,exports:{},require:function(i,n){return Iv(i,n??t.path)}},r(t,t.exports),t.exports}function Iv(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var Ka=Av(function(r,e){(function(){var t,i;i=function(n){return r.exports=n},t={linear:function(n,s,a,o){return a*n/o+s},easeInQuad:function(n,s,a,o){return a*(n/=o)*n+s},easeOutQuad:function(n,s,a,o){return-a*(n/=o)*(n-2)+s},easeInOutQuad:function(n,s,a,o){return(n/=o/2)<1?a/2*n*n+s:-a/2*(--n*(n-2)-1)+s},easeInCubic:function(n,s,a,o){return a*(n/=o)*n*n+s},easeOutCubic:function(n,s,a,o){return a*((n=n/o-1)*n*n+1)+s},easeInOutCubic:function(n,s,a,o){return(n/=o/2)<1?a/2*n*n*n+s:a/2*((n-=2)*n*n+2)+s},easeInQuart:function(n,s,a,o){return a*(n/=o)*n*n*n+s},easeOutQuart:function(n,s,a,o){return-a*((n=n/o-1)*n*n*n-1)+s},easeInOutQuart:function(n,s,a,o){return(n/=o/2)<1?a/2*n*n*n*n+s:-a/2*((n-=2)*n*n*n-2)+s},easeInQuint:function(n,s,a,o){return a*(n/=o)*n*n*n*n+s},easeOutQuint:function(n,s,a,o){return a*((n=n/o-1)*n*n*n*n+1)+s},easeInOutQuint:function(n,s,a,o){return(n/=o/2)<1?a/2*n*n*n*n*n+s:a/2*((n-=2)*n*n*n*n+2)+s},easeInSine:function(n,s,a,o){return-a*Math.cos(n/o*(Math.PI/2))+a+s},easeOutSine:function(n,s,a,o){return a*Math.sin(n/o*(Math.PI/2))+s},easeInOutSine:function(n,s,a,o){return-a/2*(Math.cos(Math.PI*n/o)-1)+s},easeInExpo:function(n,s,a,o){return n===0?s:a*Math.pow(2,10*(n/o-1))+s},easeOutExpo:function(n,s,a,o){return n===o?s+a:a*(-Math.pow(2,-10*n/o)+1)+s},easeInOutExpo:function(n,s,a,o){return(n/=o/2)<1?a/2*Math.pow(2,10*(n-1))+s:a/2*(-Math.pow(2,-10*--n)+2)+s},easeInCirc:function(n,s,a,o){return-a*(Math.sqrt(1-(n/=o)*n)-1)+s},easeOutCirc:function(n,s,a,o){return a*Math.sqrt(1-(n=n/o-1)*n)+s},easeInOutCirc:function(n,s,a,o){return(n/=o/2)<1?-a/2*(Math.sqrt(1-n*n)-1)+s:a/2*(Math.sqrt(1-(n-=2)*n)+1)+s},easeInElastic:function(n,s,a,o){var h,u,l;return l=1.70158,u=0,h=a,n===0||(n/=o),u||(u=o*.3),h<Math.abs(a)?(h=a,l=u/4):l=u/(2*Math.PI)*Math.asin(a/h),-(h*Math.pow(2,10*(n-=1))*Math.sin((n*o-l)*(2*Math.PI)/u))+s},easeOutElastic:function(n,s,a,o){var h,u,l;return l=1.70158,u=0,h=a,n===0||(n/=o),u||(u=o*.3),h<Math.abs(a)?(h=a,l=u/4):l=u/(2*Math.PI)*Math.asin(a/h),h*Math.pow(2,-10*n)*Math.sin((n*o-l)*(2*Math.PI)/u)+a+s},easeInOutElastic:function(n,s,a,o){var h,u,l;return l=1.70158,u=0,h=a,n===0||(n/=o/2),u||(u=o*(.3*1.5)),h<Math.abs(a)?(h=a,l=u/4):l=u/(2*Math.PI)*Math.asin(a/h),n<1?-.5*(h*Math.pow(2,10*(n-=1))*Math.sin((n*o-l)*(2*Math.PI)/u))+s:h*Math.pow(2,-10*(n-=1))*Math.sin((n*o-l)*(2*Math.PI)/u)*.5+a+s},easeInBack:function(n,s,a,o,h){return h===void 0&&(h=1.70158),a*(n/=o)*n*((h+1)*n-h)+s},easeOutBack:function(n,s,a,o,h){return h===void 0&&(h=1.70158),a*((n=n/o-1)*n*((h+1)*n+h)+1)+s},easeInOutBack:function(n,s,a,o,h){return h===void 0&&(h=1.70158),(n/=o/2)<1?a/2*(n*n*(((h*=1.525)+1)*n-h))+s:a/2*((n-=2)*n*(((h*=1.525)+1)*n+h)+2)+s},easeInBounce:function(n,s,a,o){var h;return h=t.easeOutBounce(o-n,0,a,o),a-h+s},easeOutBounce:function(n,s,a,o){return(n/=o)<1/2.75?a*(7.5625*n*n)+s:n<2/2.75?a*(7.5625*(n-=1.5/2.75)*n+.75)+s:n<2.5/2.75?a*(7.5625*(n-=2.25/2.75)*n+.9375)+s:a*(7.5625*(n-=2.625/2.75)*n+.984375)+s},easeInOutBounce:function(n,s,a,o){var h;return n<o/2?(h=t.easeInBounce(n*2,0,a,o),h*.5+s):(h=t.easeOutBounce(n*2-o,0,a,o),h*.5+a*.5+s)}},i(t)}).call(Cv)});function or(r,e){if(r){if(typeof r=="function")return r;if(typeof r=="string")return Ka[r]}else return Ka[e]}const Ov={removeOnInterrupt:!1,ease:"linear",time:1e3};class Zt extends Ot{__init(){this.startWidth=null}__init2(){this.startHeight=null}__init3(){this.deltaWidth=null}__init4(){this.deltaHeight=null}__init5(){this.width=null}__init6(){this.height=null}__init7(){this.time=0}constructor(e,t={}){super(e),Zt.prototype.__init.call(this),Zt.prototype.__init2.call(this),Zt.prototype.__init3.call(this),Zt.prototype.__init4.call(this),Zt.prototype.__init5.call(this),Zt.prototype.__init6.call(this),Zt.prototype.__init7.call(this),this.options=Object.assign({},Ov,t),this.options.ease=or(this.options.ease),this.setupPosition(),this.setupZoom(),this.time=0}setupPosition(){typeof this.options.position<"u"?(this.startX=this.parent.center.x,this.startY=this.parent.center.y,this.deltaX=this.options.position.x-this.parent.center.x,this.deltaY=this.options.position.y-this.parent.center.y,this.keepCenter=!1):this.keepCenter=!0}setupZoom(){this.width=null,this.height=null,typeof this.options.scale<"u"?this.width=this.parent.screenWidth/this.options.scale:typeof this.options.scaleX<"u"||typeof this.options.scaleY<"u"?(typeof this.options.scaleX<"u"&&(this.width=this.parent.screenWidth/this.options.scaleX),typeof this.options.scaleY<"u"&&(this.height=this.parent.screenHeight/this.options.scaleY)):(typeof this.options.width<"u"&&(this.width=this.options.width),typeof this.options.height<"u"&&(this.height=this.options.height)),this.width!==null&&(this.startWidth=this.parent.screenWidthInWorldPixels,this.deltaWidth=this.width-this.startWidth),this.height!==null&&(this.startHeight=this.parent.screenHeightInWorldPixels,this.deltaHeight=this.height-this.startHeight)}down(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("animate"),!1}complete(){this.parent.plugins.remove("animate"),this.width!==null&&this.parent.fitWidth(this.width,this.keepCenter,this.height===null),this.height!==null&&this.parent.fitHeight(this.height,this.keepCenter,this.width===null),!this.keepCenter&&this.options.position&&this.parent.moveCenter(this.options.position),this.parent.emit("animate-end",this.parent),this.options.callbackOnComplete&&this.options.callbackOnComplete(this.parent)}update(e){if(this.paused)return;this.time+=e;const t=new X(this.parent.scale.x,this.parent.scale.y);if(this.time>=this.options.time){const i=this.parent.width,n=this.parent.height;this.complete(),(i!==this.parent.width||n!==this.parent.height)&&this.parent.emit("zoomed",{viewport:this.parent,original:t,type:"animate"})}else{const i=this.options.ease(this.time,0,1,this.options.time);if(this.width!==null){const n=this.startWidth,s=this.deltaWidth;this.parent.fitWidth(n+s*i,this.keepCenter,this.height===null)}if(this.height!==null){const n=this.startHeight,s=this.deltaHeight;this.parent.fitHeight(n+s*i,this.keepCenter,this.width===null)}if(this.width===null?this.parent.scale.x=this.parent.scale.y:this.height===null&&(this.parent.scale.y=this.parent.scale.x),!this.keepCenter){const n=this.startX,s=this.startY,a=this.deltaX,o=this.deltaY,h=new X(this.parent.x,this.parent.y);this.parent.moveCenter(n+a*i,s+o*i),this.parent.emit("moved",{viewport:this.parent,original:h,type:"animate"})}(this.width||this.height)&&this.parent.emit("zoomed",{viewport:this.parent,original:t,type:"animate"})}}}function hr(r){let e,t=r[0],i=1;for(;i<r.length;){const n=r[i],s=r[i+1];if(i+=2,(n==="optionalAccess"||n==="optionalCall")&&t==null)return;n==="access"||n==="optionalAccess"?(e=t,t=s(t)):(n==="call"||n==="optionalCall")&&(t=s((...a)=>t.call(e,...a)),e=void 0)}return t}const Mv={sides:"all",friction:.5,time:150,ease:"easeInOutSine",underflow:"center",bounceBox:null};class Qa extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Mv,t),this.ease=or(this.options.ease,"easeInOutSine"),this.options.sides?this.options.sides==="all"?this.top=this.bottom=this.left=this.right=!0:this.options.sides==="horizontal"?(this.right=this.left=!0,this.top=this.bottom=!1):this.options.sides==="vertical"?(this.left=this.right=!1,this.top=this.bottom=!0):(this.top=this.options.sides.indexOf("top")!==-1,this.bottom=this.options.sides.indexOf("bottom")!==-1,this.left=this.options.sides.indexOf("left")!==-1,this.right=this.options.sides.indexOf("right")!==-1):this.left=this.top=this.right=this.bottom=!1;const i=this.options.underflow.toLowerCase();i==="center"?(this.underflowX=0,this.underflowY=0):(this.underflowX=i.indexOf("left")!==-1?-1:i.indexOf("right")!==-1?1:0,this.underflowY=i.indexOf("top")!==-1?-1:i.indexOf("bottom")!==-1?1:0),this.reset()}isActive(){return this.toX!==null||this.toY!==null}down(){return this.toX=this.toY=null,!1}up(){return this.bounce(),!1}update(e){if(!this.paused){if(this.bounce(),this.toX){const t=this.toX;t.time+=e,this.parent.emit("moved",{viewport:this.parent,type:"bounce-x"}),t.time>=this.options.time?(this.parent.x=t.end,this.toX=null,this.parent.emit("bounce-x-end",this.parent)):this.parent.x=this.ease(t.time,t.start,t.delta,this.options.time)}if(this.toY){const t=this.toY;t.time+=e,this.parent.emit("moved",{viewport:this.parent,type:"bounce-y"}),t.time>=this.options.time?(this.parent.y=t.end,this.toY=null,this.parent.emit("bounce-y-end",this.parent)):this.parent.y=this.ease(t.time,t.start,t.delta,this.options.time)}}}calcUnderflowX(){let e;switch(this.underflowX){case-1:e=0;break;case 1:e=this.parent.screenWidth-this.parent.screenWorldWidth;break;default:e=(this.parent.screenWidth-this.parent.screenWorldWidth)/2}return e}calcUnderflowY(){let e;switch(this.underflowY){case-1:e=0;break;case 1:e=this.parent.screenHeight-this.parent.screenWorldHeight;break;default:e=(this.parent.screenHeight-this.parent.screenWorldHeight)/2}return e}oob(){const e=this.options.bounceBox;if(e){const t=typeof e.x>"u"?0:e.x,i=typeof e.y>"u"?0:e.y,n=typeof e.width>"u"?this.parent.worldWidth:e.width,s=typeof e.height>"u"?this.parent.worldHeight:e.height;return{left:this.parent.left<t,right:this.parent.right>n,top:this.parent.top<i,bottom:this.parent.bottom>s,topLeft:new X(t*this.parent.scale.x,i*this.parent.scale.y),bottomRight:new X(n*this.parent.scale.x-this.parent.screenWidth,s*this.parent.scale.y-this.parent.screenHeight)}}return{left:this.parent.left<0,right:this.parent.right>this.parent.worldWidth,top:this.parent.top<0,bottom:this.parent.bottom>this.parent.worldHeight,topLeft:new X(0,0),bottomRight:new X(this.parent.worldWidth*this.parent.scale.x-this.parent.screenWidth,this.parent.worldHeight*this.parent.scale.y-this.parent.screenHeight)}}bounce(){if(this.paused)return;let e,t=this.parent.plugins.get("decelerate",!0);t&&(t.x||t.y)&&(t.x&&t.percentChangeX===hr([t,"access",s=>s.options,"optionalAccess",s=>s.friction])||t.y&&t.percentChangeY===hr([t,"access",s=>s.options,"optionalAccess",s=>s.friction]))&&(e=this.oob(),(e.left&&this.left||e.right&&this.right)&&(t.percentChangeX=this.options.friction),(e.top&&this.top||e.bottom&&this.bottom)&&(t.percentChangeY=this.options.friction));const i=this.parent.plugins.get("drag",!0)||{},n=this.parent.plugins.get("pinch",!0)||{};if(t=t||{},!hr([i,"optionalAccess",s=>s.active])&&!hr([n,"optionalAccess",s=>s.active])&&(!this.toX||!this.toY)&&(!t.x||!t.y)){e=e||this.oob();const s=e.topLeft,a=e.bottomRight;if(!this.toX&&!t.x){let o=null;e.left&&this.left?o=this.parent.screenWorldWidth<this.parent.screenWidth?this.calcUnderflowX():-s.x:e.right&&this.right&&(o=this.parent.screenWorldWidth<this.parent.screenWidth?this.calcUnderflowX():-a.x),o!==null&&this.parent.x!==o&&(this.toX={time:0,start:this.parent.x,delta:o-this.parent.x,end:o},this.parent.emit("bounce-x-start",this.parent))}if(!this.toY&&!t.y){let o=null;e.top&&this.top?o=this.parent.screenWorldHeight<this.parent.screenHeight?this.calcUnderflowY():-s.y:e.bottom&&this.bottom&&(o=this.parent.screenWorldHeight<this.parent.screenHeight?this.calcUnderflowY():-a.y),o!==null&&this.parent.y!==o&&(this.toY={time:0,start:this.parent.y,delta:o-this.parent.y,end:o},this.parent.emit("bounce-y-start",this.parent))}}}reset(){this.toX=this.toY=null,this.bounce()}}const Dv={left:!1,right:!1,top:!1,bottom:!1,direction:null,underflow:"center"};class Ja extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Dv,t),this.options.direction&&(this.options.left=this.options.direction==="x"||this.options.direction==="all"?!0:null,this.options.right=this.options.direction==="x"||this.options.direction==="all"?!0:null,this.options.top=this.options.direction==="y"||this.options.direction==="all"?!0:null,this.options.bottom=this.options.direction==="y"||this.options.direction==="all"?!0:null),this.parseUnderflow(),this.last={x:null,y:null,scaleX:null,scaleY:null},this.update()}parseUnderflow(){const e=this.options.underflow.toLowerCase();e==="none"?this.noUnderflow=!0:e==="center"?(this.underflowX=this.underflowY=0,this.noUnderflow=!1):(this.underflowX=e.indexOf("left")!==-1?-1:e.indexOf("right")!==-1?1:0,this.underflowY=e.indexOf("top")!==-1?-1:e.indexOf("bottom")!==-1?1:0,this.noUnderflow=!1)}move(){return this.update(),!1}update(){if(this.paused||this.parent.x===this.last.x&&this.parent.y===this.last.y&&this.parent.scale.x===this.last.scaleX&&this.parent.scale.y===this.last.scaleY)return;const e={x:this.parent.x,y:this.parent.y},t=this.parent.plugins.decelerate||{};if(this.options.left!==null||this.options.right!==null){let i=!1;if(!this.noUnderflow&&this.parent.screenWorldWidth<this.parent.screenWidth)switch(this.underflowX){case-1:this.parent.x!==0&&(this.parent.x=0,i=!0);break;case 1:this.parent.x!==this.parent.screenWidth-this.parent.screenWorldWidth&&(this.parent.x=this.parent.screenWidth-this.parent.screenWorldWidth,i=!0);break;default:this.parent.x!==(this.parent.screenWidth-this.parent.screenWorldWidth)/2&&(this.parent.x=(this.parent.screenWidth-this.parent.screenWorldWidth)/2,i=!0)}else this.options.left!==null&&this.parent.left<(this.options.left===!0?0:this.options.left)&&(this.parent.x=-(this.options.left===!0?0:this.options.left)*this.parent.scale.x,t.x=0,i=!0),this.options.right!==null&&this.parent.right>(this.options.right===!0?this.parent.worldWidth:this.options.right)&&(this.parent.x=-(this.options.right===!0?this.parent.worldWidth:this.options.right)*this.parent.scale.x+this.parent.screenWidth,t.x=0,i=!0);i&&this.parent.emit("moved",{viewport:this.parent,original:e,type:"clamp-x"})}if(this.options.top!==null||this.options.bottom!==null){let i=!1;if(!this.noUnderflow&&this.parent.screenWorldHeight<this.parent.screenHeight)switch(this.underflowY){case-1:this.parent.y!==0&&(this.parent.y=0,i=!0);break;case 1:this.parent.y!==this.parent.screenHeight-this.parent.screenWorldHeight&&(this.parent.y=this.parent.screenHeight-this.parent.screenWorldHeight,i=!0);break;default:this.parent.y!==(this.parent.screenHeight-this.parent.screenWorldHeight)/2&&(this.parent.y=(this.parent.screenHeight-this.parent.screenWorldHeight)/2,i=!0)}else this.options.top!==null&&this.parent.top<(this.options.top===!0?0:this.options.top)&&(this.parent.y=-(this.options.top===!0?0:this.options.top)*this.parent.scale.y,t.y=0,i=!0),this.options.bottom!==null&&this.parent.bottom>(this.options.bottom===!0?this.parent.worldHeight:this.options.bottom)&&(this.parent.y=-(this.options.bottom===!0?this.parent.worldHeight:this.options.bottom)*this.parent.scale.y+this.parent.screenHeight,t.y=0,i=!0);i&&this.parent.emit("moved",{viewport:this.parent,original:e,type:"clamp-y"})}this.last.x=this.parent.x,this.last.y=this.parent.y,this.last.scaleX=this.parent.scale.x,this.last.scaleY=this.parent.scale.y}reset(){this.update()}}const Fv={minWidth:null,minHeight:null,maxWidth:null,maxHeight:null,minScale:null,maxScale:null};class to extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Fv,t),this.clamp()}resize(){this.clamp()}clamp(){if(!this.paused){if(this.options.minWidth||this.options.minHeight||this.options.maxWidth||this.options.maxHeight){let e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight;if(this.options.minWidth!==null&&e<this.options.minWidth){const i=this.parent.scale.x;this.parent.fitWidth(this.options.minWidth,!1,!1,!0),this.parent.scale.y*=this.parent.scale.x/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.maxWidth!==null&&e>this.options.maxWidth){const i=this.parent.scale.x;this.parent.fitWidth(this.options.maxWidth,!1,!1,!0),this.parent.scale.y*=this.parent.scale.x/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.minHeight!==null&&t<this.options.minHeight){const i=this.parent.scale.y;this.parent.fitHeight(this.options.minHeight,!1,!1,!0),this.parent.scale.x*=this.parent.scale.y/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.maxHeight!==null&&t>this.options.maxHeight){const i=this.parent.scale.y;this.parent.fitHeight(this.options.maxHeight,!1,!1,!0),this.parent.scale.x*=this.parent.scale.y/i,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}}else if(this.options.minScale||this.options.maxScale){const e={x:null,y:null},t={x:null,y:null};if(typeof this.options.minScale=="number")e.x=this.options.minScale,e.y=this.options.minScale;else if(this.options.minScale!==null){const s=this.options.minScale;e.x=typeof s.x>"u"?null:s.x,e.y=typeof s.y>"u"?null:s.y}if(typeof this.options.maxScale=="number")t.x=this.options.maxScale,t.y=this.options.maxScale;else if(this.options.maxScale!==null){const s=this.options.maxScale;t.x=typeof s.x>"u"?null:s.x,t.y=typeof s.y>"u"?null:s.y}let i=this.parent.scale.x,n=this.parent.scale.y;e.x!==null&&i<e.x&&(i=e.x),t.x!==null&&i>t.x&&(i=t.x),e.y!==null&&n<e.y&&(n=e.y),t.y!==null&&n>t.y&&(n=t.y),(i!==this.parent.scale.x||n!==this.parent.scale.y)&&(this.parent.scale.set(i,n),this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"}))}}}reset(){this.clamp()}}const Nv={friction:.98,bounce:.8,minSpeed:.01},ce=16;class eo extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Nv,t),this.saved=[],this.timeSinceRelease=0,this.reset(),this.parent.on("moved",i=>this.moved(i))}down(){return this.saved=[],this.x=this.y=null,!1}isActive(){return!!(this.x||this.y)}move(){if(this.paused)return!1;const e=this.parent.input.count();return(e===1||e>1&&!this.parent.plugins.get("pinch",!0))&&(this.saved.push({x:this.parent.x,y:this.parent.y,time:performance.now()}),this.saved.length>60&&this.saved.splice(0,30)),!1}moved(e){if(this.saved.length){const t=this.saved[this.saved.length-1];e.type==="clamp-x"?t.x===e.original.x&&(t.x=this.parent.x):e.type==="clamp-y"&&t.y===e.original.y&&(t.y=this.parent.y)}}up(){if(this.parent.input.count()===0&&this.saved.length){const e=performance.now();for(const t of this.saved)if(t.time>=e-100){const i=e-t.time;this.x=(this.parent.x-t.x)/i,this.y=(this.parent.y-t.y)/i,this.percentChangeX=this.percentChangeY=this.options.friction,this.timeSinceRelease=0;break}}return!1}activate(e){e=e||{},typeof e.x<"u"&&(this.x=e.x,this.percentChangeX=this.options.friction),typeof e.y<"u"&&(this.y=e.y,this.percentChangeY=this.options.friction)}update(e){if(this.paused)return;const t=this.x||this.y,i=this.timeSinceRelease,n=this.timeSinceRelease+e;if(this.x){const s=this.percentChangeX,a=Math.log(s);this.parent.x+=this.x*ce/a*(Math.pow(s,n/ce)-Math.pow(s,i/ce)),this.x*=Math.pow(this.percentChangeX,e/ce)}if(this.y){const s=this.percentChangeY,a=Math.log(s);this.parent.y+=this.y*ce/a*(Math.pow(s,n/ce)-Math.pow(s,i/ce)),this.y*=Math.pow(this.percentChangeY,e/ce)}this.timeSinceRelease+=e,this.x&&this.y?Math.abs(this.x)<this.options.minSpeed&&Math.abs(this.y)<this.options.minSpeed&&(this.x=0,this.y=0):(Math.abs(this.x||0)<this.options.minSpeed&&(this.x=0),Math.abs(this.y||0)<this.options.minSpeed&&(this.y=0)),t&&this.parent.emit("moved",{viewport:this.parent,type:"decelerate"})}reset(){this.x=this.y=null}}const Bv={direction:"all",pressDrag:!0,wheel:!0,wheelScroll:1,reverse:!1,clampWheel:!1,underflow:"center",factor:1,mouseButtons:"all",keyToPress:null,ignoreKeyToPressOnTouch:!1,lineHeight:20,wheelSwapAxes:!1};class ur extends Ot{__init(){this.windowEventHandlers=new Array}constructor(e,t={}){super(e),ur.prototype.__init.call(this),this.options=Object.assign({},Bv,t),this.moved=!1,this.reverse=this.options.reverse?1:-1,this.xDirection=!this.options.direction||this.options.direction==="all"||this.options.direction==="x",this.yDirection=!this.options.direction||this.options.direction==="all"||this.options.direction==="y",this.keyIsPressed=!1,this.parseUnderflow(),this.mouseButtons(this.options.mouseButtons),this.options.keyToPress&&this.handleKeyPresses(this.options.keyToPress)}handleKeyPresses(e){const t=n=>{e.includes(n.code)&&(this.keyIsPressed=!0)},i=n=>{e.includes(n.code)&&(this.keyIsPressed=!1)};this.addWindowEventHandler("keyup",i),this.addWindowEventHandler("keydown",t)}addWindowEventHandler(e,t){window.addEventListener(e,t),this.windowEventHandlers.push({event:e,handler:t})}destroy(){this.windowEventHandlers.forEach(({event:e,handler:t})=>{window.removeEventListener(e,t)})}mouseButtons(e){!e||e==="all"?this.mouse=[!0,!0,!0]:this.mouse=[e.indexOf("left")!==-1,e.indexOf("middle")!==-1,e.indexOf("right")!==-1]}parseUnderflow(){const e=this.options.underflow.toLowerCase();e==="center"?(this.underflowX=0,this.underflowY=0):(e.includes("left")?this.underflowX=-1:e.includes("right")?this.underflowX=1:this.underflowX=0,e.includes("top")?this.underflowY=-1:e.includes("bottom")?this.underflowY=1:this.underflowY=0)}checkButtons(e){const t=e.data.pointerType==="mouse",i=this.parent.input.count();return!!((i===1||i>1&&!this.parent.plugins.get("pinch",!0))&&(!t||this.mouse[e.data.button]))}checkKeyPress(e){return!this.options.keyToPress||this.keyIsPressed||this.options.ignoreKeyToPressOnTouch&&e.data.pointerType==="touch"}down(e){return this.paused||!this.options.pressDrag?!1:this.checkButtons(e)&&this.checkKeyPress(e)?(this.last={x:e.data.global.x,y:e.data.global.y},this.current=e.data.pointerId,!0):(this.last=null,!1)}get active(){return this.moved}move(e){if(this.paused||!this.options.pressDrag)return!1;if(this.last&&this.current===e.data.pointerId){const t=e.data.global.x,i=e.data.global.y,n=this.parent.input.count();if(n===1||n>1&&!this.parent.plugins.get("pinch",!0)){const s=t-this.last.x,a=i-this.last.y;if(this.moved||this.xDirection&&this.parent.input.checkThreshold(s)||this.yDirection&&this.parent.input.checkThreshold(a)){const o={x:t,y:i};return this.xDirection&&(this.parent.x+=(o.x-this.last.x)*this.options.factor),this.yDirection&&(this.parent.y+=(o.y-this.last.y)*this.options.factor),this.last=o,this.moved||this.parent.emit("drag-start",{event:e,screen:new X(this.last.x,this.last.y),world:this.parent.toWorld(new X(this.last.x,this.last.y)),viewport:this.parent}),this.moved=!0,this.parent.emit("moved",{viewport:this.parent,type:"drag"}),!0}}else this.moved=!1}return!1}up(e){if(this.paused)return!1;const t=this.parent.input.touches;if(t.length===1){const i=t[0];return i.last&&(this.last={x:i.last.x,y:i.last.y},this.current=i.id),this.moved=!1,!0}else if(this.last&&this.moved){const i=new X(this.last.x,this.last.y);return this.parent.emit("drag-end",{event:e,screen:i,world:this.parent.toWorld(i),viewport:this.parent}),this.last=null,this.moved=!1,!0}return!1}wheel(e){if(this.paused)return!1;if(this.options.wheel){const t=this.parent.plugins.get("wheel",!0);if(!t||!t.options.wheelZoom&&!e.ctrlKey){const i=e.deltaMode?this.options.lineHeight:1,n=[e.deltaX,e.deltaY],[s,a]=this.options.wheelSwapAxes?n.reverse():n;return this.xDirection&&(this.parent.x+=s*i*this.options.wheelScroll*this.reverse),this.yDirection&&(this.parent.y+=a*i*this.options.wheelScroll*this.reverse),this.options.clampWheel&&this.clamp(),this.parent.emit("wheel-scroll",this.parent),this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.options.passiveWheel||e.preventDefault(),this.parent.options.stopPropagation&&e.stopPropagation(),!0}}return!1}resume(){this.last=null,this.paused=!1}clamp(){const e=this.parent.plugins.get("decelerate",!0)||{};if(this.options.clampWheel!=="y")if(this.parent.screenWorldWidth<this.parent.screenWidth)switch(this.underflowX){case-1:this.parent.x=0;break;case 1:this.parent.x=this.parent.screenWidth-this.parent.screenWorldWidth;break;default:this.parent.x=(this.parent.screenWidth-this.parent.screenWorldWidth)/2}else this.parent.left<0?(this.parent.x=0,e.x=0):this.parent.right>this.parent.worldWidth&&(this.parent.x=-this.parent.worldWidth*this.parent.scale.x+this.parent.screenWidth,e.x=0);if(this.options.clampWheel!=="x")if(this.parent.screenWorldHeight<this.parent.screenHeight)switch(this.underflowY){case-1:this.parent.y=0;break;case 1:this.parent.y=this.parent.screenHeight-this.parent.screenWorldHeight;break;default:this.parent.y=(this.parent.screenHeight-this.parent.screenWorldHeight)/2}else this.parent.top<0&&(this.parent.y=0,e.y=0),this.parent.bottom>this.parent.worldHeight&&(this.parent.y=-this.parent.worldHeight*this.parent.scale.y+this.parent.screenHeight,e.y=0)}}const Lv={speed:0,acceleration:null,radius:null};class io extends Ot{constructor(e,t,i={}){super(e),this.target=t,this.options=Object.assign({},Lv,i),this.velocity={x:0,y:0}}update(e){if(this.paused)return;const t=this.parent.center;let i=this.target.x,n=this.target.y;if(this.options.radius)if(Math.sqrt(Math.pow(this.target.y-t.y,2)+Math.pow(this.target.x-t.x,2))>this.options.radius){const h=Math.atan2(this.target.y-t.y,this.target.x-t.x);i=this.target.x-Math.cos(h)*this.options.radius,n=this.target.y-Math.sin(h)*this.options.radius}else return;const s=i-t.x,a=n-t.y;if(s||a)if(this.options.speed)if(this.options.acceleration){const o=Math.atan2(n-t.y,i-t.x),h=Math.sqrt(Math.pow(s,2)+Math.pow(a,2));if(h){const u=(Math.pow(this.velocity.x,2)+Math.pow(this.velocity.y,2))/(2*this.options.acceleration);h>u?this.velocity={x:Math.min(this.velocity.x+(this.options.acceleration*e,this.options.speed)),y:Math.min(this.velocity.y+(this.options.acceleration*e,this.options.speed))}:this.velocity={x:Math.max(this.velocity.x-this.options.acceleration*this.options.speed,0),y:Math.max(this.velocity.y-this.options.acceleration*this.options.speed,0)};const l=Math.cos(o)*this.velocity.x,f=Math.sin(o)*this.velocity.y,c=Math.abs(l)>Math.abs(s)?i:t.x+l,d=Math.abs(f)>Math.abs(a)?n:t.y+f;this.parent.moveCenter(c,d),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}}else{const o=Math.atan2(n-t.y,i-t.x),h=Math.cos(o)*this.options.speed,u=Math.sin(o)*this.options.speed,l=Math.abs(h)>Math.abs(s)?i:t.x+h,f=Math.abs(u)>Math.abs(a)?n:t.y+u;this.parent.moveCenter(l,f),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}else this.parent.moveCenter(i,n),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}}const Uv={radius:null,distance:null,top:null,bottom:null,left:null,right:null,speed:8,reverse:!1,noDecelerate:!1,linear:!1,allowButtons:!1};class ro extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Uv,t),this.reverse=this.options.reverse?1:-1,this.radiusSquared=typeof this.options.radius=="number"?Math.pow(this.options.radius,2):null,this.resize()}resize(){const e=this.options.distance;e!==null?(this.left=e,this.top=e,this.right=this.parent.screenWidth-e,this.bottom=this.parent.screenHeight-e):this.options.radius||(this.left=this.options.left,this.top=this.options.top,this.right=this.options.right===null?null:this.parent.screenWidth-this.options.right,this.bottom=this.options.bottom===null?null:this.parent.screenHeight-this.options.bottom)}down(){return this.paused||this.options.allowButtons||(this.horizontal=this.vertical=null),!1}move(e){if(this.paused||e.data.pointerType!=="mouse"&&e.data.identifier!==1||!this.options.allowButtons&&e.data.buttons!==0)return!1;const t=e.data.global.x,i=e.data.global.y;if(this.radiusSquared){const n=this.parent.toScreen(this.parent.center);if(Math.pow(n.x-t,2)+Math.pow(n.y-i,2)>=this.radiusSquared){const a=Math.atan2(n.y-i,n.x-t);this.options.linear?(this.horizontal=Math.round(Math.cos(a))*this.options.speed*this.reverse*(60/1e3),this.vertical=Math.round(Math.sin(a))*this.options.speed*this.reverse*(60/1e3)):(this.horizontal=Math.cos(a)*this.options.speed*this.reverse*(60/1e3),this.vertical=Math.sin(a)*this.options.speed*this.reverse*(60/1e3))}else this.horizontal&&this.decelerateHorizontal(),this.vertical&&this.decelerateVertical(),this.horizontal=this.vertical=0}else this.left!==null&&t<this.left?this.horizontal=Number(this.reverse)*this.options.speed*(60/1e3):this.right!==null&&t>this.right?this.horizontal=-1*this.reverse*this.options.speed*(60/1e3):(this.decelerateHorizontal(),this.horizontal=0),this.top!==null&&i<this.top?this.vertical=Number(this.reverse)*this.options.speed*(60/1e3):this.bottom!==null&&i>this.bottom?this.vertical=-1*this.reverse*this.options.speed*(60/1e3):(this.decelerateVertical(),this.vertical=0);return!1}decelerateHorizontal(){const e=this.parent.plugins.get("decelerate",!0);this.horizontal&&e&&!this.options.noDecelerate&&e.activate({x:this.horizontal*this.options.speed*this.reverse/(1e3/60)})}decelerateVertical(){const e=this.parent.plugins.get("decelerate",!0);this.vertical&&e&&!this.options.noDecelerate&&e.activate({y:this.vertical*this.options.speed*this.reverse/(1e3/60)})}up(){return this.paused||(this.horizontal&&this.decelerateHorizontal(),this.vertical&&this.decelerateVertical(),this.horizontal=this.vertical=null),!1}update(){if(!this.paused&&(this.horizontal||this.vertical)){const e=this.parent.center;this.horizontal&&(e.x+=this.horizontal*this.options.speed),this.vertical&&(e.y+=this.vertical*this.options.speed),this.parent.moveCenter(e),this.parent.emit("moved",{viewport:this.parent,type:"mouse-edges"})}}}const Gv={noDrag:!1,percent:1,center:null,factor:1,axis:"all"};class We extends Ot{__init(){this.active=!1}__init2(){this.pinching=!1}__init3(){this.moved=!1}constructor(e,t={}){super(e),We.prototype.__init.call(this),We.prototype.__init2.call(this),We.prototype.__init3.call(this),this.options=Object.assign({},Gv,t)}down(){return this.parent.input.count()>=2?(this.active=!0,!0):!1}isAxisX(){return["all","x"].includes(this.options.axis)}isAxisY(){return["all","y"].includes(this.options.axis)}move(e){if(this.paused||!this.active)return!1;const t=e.data.global.x,i=e.data.global.y,n=this.parent.input.touches;if(n.length>=2){const s=n[0],a=n[1],o=s.last&&a.last?Math.sqrt(Math.pow(a.last.x-s.last.x,2)+Math.pow(a.last.y-s.last.y,2)):null;if(s.id===e.data.pointerId?s.last={x:t,y:i,data:e.data}:a.id===e.data.pointerId&&(a.last={x:t,y:i,data:e.data}),o){let h;const u={x:s.last.x+(a.last.x-s.last.x)/2,y:s.last.y+(a.last.y-s.last.y)/2};this.options.center||(h=this.parent.toLocal(u));let l=Math.sqrt(Math.pow(a.last.x-s.last.x,2)+Math.pow(a.last.y-s.last.y,2));l=l===0?l=1e-10:l;const f=(1-o/l)*this.options.percent*(this.isAxisX()?this.parent.scale.x:this.parent.scale.y);this.isAxisX()&&(this.parent.scale.x+=f),this.isAxisY()&&(this.parent.scale.y+=f),this.parent.emit("zoomed",{viewport:this.parent,type:"pinch",center:u});const c=this.parent.plugins.get("clamp-zoom",!0);if(c&&c.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const d=this.parent.toGlobal(h);this.parent.x+=(u.x-d.x)*this.options.factor,this.parent.y+=(u.y-d.y)*this.options.factor,this.parent.emit("moved",{viewport:this.parent,type:"pinch"})}!this.options.noDrag&&this.lastCenter&&(this.parent.x+=(u.x-this.lastCenter.x)*this.options.factor,this.parent.y+=(u.y-this.lastCenter.y)*this.options.factor,this.parent.emit("moved",{viewport:this.parent,type:"pinch"})),this.lastCenter=u,this.moved=!0}else this.pinching||(this.parent.emit("pinch-start",this.parent),this.pinching=!0);return!0}return!1}up(){return this.pinching&&this.parent.input.touches.length<=1?(this.active=!1,this.lastCenter=null,this.pinching=!1,this.moved=!1,this.parent.emit("pinch-end",this.parent),!0):!1}}const kv={topLeft:!1,friction:.8,time:1e3,ease:"easeInOutSine",interrupt:!0,removeOnComplete:!1,removeOnInterrupt:!1,forceStart:!1};class no extends Ot{constructor(e,t,i,n={}){super(e),this.options=Object.assign({},kv,n),this.ease=or(n.ease,"easeInOutSine"),this.x=t,this.y=i,this.options.forceStart&&this.snapStart()}snapStart(){this.percent=0,this.snapping={time:0};const e=this.options.topLeft?this.parent.corner:this.parent.center;this.deltaX=this.x-e.x,this.deltaY=this.y-e.y,this.startX=e.x,this.startY=e.y,this.parent.emit("snap-start",this.parent)}wheel(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("snap"),!1}down(){return this.options.removeOnInterrupt?this.parent.plugins.remove("snap"):this.options.interrupt&&(this.snapping=null),!1}up(){if(this.parent.input.count()===0){const e=this.parent.plugins.get("decelerate",!0);e&&(e.x||e.y)&&(e.percentChangeX=e.percentChangeY=this.options.friction)}return!1}update(e){if(!this.paused&&!(this.options.interrupt&&this.parent.input.count()!==0))if(this.snapping){const t=this.snapping;t.time+=e;let i,n,s;const a=this.startX,o=this.startY,h=this.deltaX,u=this.deltaY;if(t.time>this.options.time)i=!0,n=a+h,s=o+u;else{const l=this.ease(t.time,0,1,this.options.time);n=a+h*l,s=o+u*l}this.options.topLeft?this.parent.moveCorner(n,s):this.parent.moveCenter(n,s),this.parent.emit("moved",{viewport:this.parent,type:"snap"}),i&&(this.options.removeOnComplete&&this.parent.plugins.remove("snap"),this.parent.emit("snap-end",this.parent),this.snapping=null)}else{const t=this.options.topLeft?this.parent.corner:this.parent.center;(t.x!==this.x||t.y!==this.y)&&this.snapStart()}}}const Hv={width:0,height:0,time:1e3,ease:"easeInOutSine",center:null,interrupt:!0,removeOnComplete:!1,removeOnInterrupt:!1,forceStart:!1,noMove:!1};class so extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Hv,t),this.ease=or(this.options.ease),this.xIndependent=!1,this.yIndependent=!1,this.xScale=0,this.yScale=0,this.options.width>0&&(this.xScale=e.screenWidth/this.options.width,this.xIndependent=!0),this.options.height>0&&(this.yScale=e.screenHeight/this.options.height,this.yIndependent=!0),this.xScale=this.xIndependent?this.xScale:this.yScale,this.yScale=this.yIndependent?this.yScale:this.xScale,this.options.time===0?(e.container.scale.x=this.xScale,e.container.scale.y=this.yScale,this.options.removeOnComplete&&this.parent.plugins.remove("snap-zoom")):t.forceStart&&this.createSnapping()}createSnapping(){const e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,i=this.parent.screenWidth/this.xScale,n=this.parent.screenHeight/this.yScale;this.snapping={time:0,startX:e,startY:t,deltaX:i-e,deltaY:n-t},this.parent.emit("snap-zoom-start",this.parent)}resize(){this.snapping=null,this.options.width>0&&(this.xScale=this.parent.screenWidth/this.options.width),this.options.height>0&&(this.yScale=this.parent.screenHeight/this.options.height),this.xScale=this.xIndependent?this.xScale:this.yScale,this.yScale=this.yIndependent?this.yScale:this.xScale}wheel(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("snap-zoom"),!1}down(){return this.options.removeOnInterrupt?this.parent.plugins.remove("snap-zoom"):this.options.interrupt&&(this.snapping=null),!1}update(e){if(this.paused||this.options.interrupt&&this.parent.input.count()!==0)return;let t;if(!this.options.center&&!this.options.noMove&&(t=this.parent.center),!this.snapping)(this.parent.scale.x!==this.xScale||this.parent.scale.y!==this.yScale)&&this.createSnapping();else if(this.snapping){const i=this.snapping;if(i.time+=e,i.time>=this.options.time)this.parent.scale.set(this.xScale,this.yScale),this.options.removeOnComplete&&this.parent.plugins.remove("snap-zoom"),this.parent.emit("snap-zoom-end",this.parent),this.snapping=null;else{const s=this.snapping,a=this.ease(s.time,s.startX,s.deltaX,this.options.time),o=this.ease(s.time,s.startY,s.deltaY,this.options.time);this.parent.scale.x=this.parent.screenWidth/a,this.parent.scale.y=this.parent.screenHeight/o}const n=this.parent.plugins.get("clamp-zoom",!0);n&&n.clamp(),this.options.noMove||(this.options.center?this.parent.moveCenter(this.options.center):this.parent.moveCenter(t))}}resume(){this.snapping=null,super.resume()}}const Xv={percent:.1,smooth:!1,interrupt:!0,reverse:!1,center:null,lineHeight:20,axis:"all",keyToPress:null,trackpadPinch:!1,wheelZoom:!0};class ao extends Ot{constructor(e,t={}){super(e),this.options=Object.assign({},Xv,t),this.keyIsPressed=!1,this.options.keyToPress&&this.handleKeyPresses(this.options.keyToPress)}handleKeyPresses(e){window.addEventListener("keydown",t=>{e.includes(t.code)&&(this.keyIsPressed=!0)}),window.addEventListener("keyup",t=>{e.includes(t.code)&&(this.keyIsPressed=!1)})}checkKeyPress(){return!this.options.keyToPress||this.keyIsPressed}down(){return this.options.interrupt&&(this.smoothing=null),!1}isAxisX(){return["all","x"].includes(this.options.axis)}isAxisY(){return["all","y"].includes(this.options.axis)}update(){if(this.smoothing){const e=this.smoothingCenter,t=this.smoothing;let i;this.options.center||(i=this.parent.toLocal(e)),this.isAxisX()&&(this.parent.scale.x+=t.x),this.isAxisY()&&(this.parent.scale.y+=t.y),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const n=this.parent.plugins.get("clamp-zoom",!0);if(n&&n.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const s=this.parent.toGlobal(i);this.parent.x+=e.x-s.x,this.parent.y+=e.y-s.y}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.smoothingCount++,this.smoothingCount>=this.options.smooth&&(this.smoothing=null)}}pinch(e){if(this.paused)return;const t=this.parent.input.getPointerPosition(e),i=-e.deltaY*(e.deltaMode?this.options.lineHeight:1)/200,n=Math.pow(2,(1+this.options.percent)*i);let s;this.options.center||(s=this.parent.toLocal(t)),this.isAxisX()&&(this.parent.scale.x*=n),this.isAxisY()&&(this.parent.scale.y*=n),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const a=this.parent.plugins.get("clamp-zoom",!0);if(a&&a.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const o=this.parent.toGlobal(s);this.parent.x+=t.x-o.x,this.parent.y+=t.y-o.y}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.emit("wheel",{wheel:{dx:e.deltaX,dy:e.deltaY,dz:e.deltaZ},event:e,viewport:this.parent})}wheel(e){if(this.paused||!this.checkKeyPress())return!1;if(e.ctrlKey&&this.options.trackpadPinch)this.pinch(e);else if(this.options.wheelZoom){const t=this.parent.input.getPointerPosition(e),n=(this.options.reverse?-1:1)*-e.deltaY*(e.deltaMode?this.options.lineHeight:1)/500,s=Math.pow(2,(1+this.options.percent)*n);if(this.options.smooth){const a={x:this.smoothing?this.smoothing.x*(this.options.smooth-this.smoothingCount):0,y:this.smoothing?this.smoothing.y*(this.options.smooth-this.smoothingCount):0};this.smoothing={x:((this.parent.scale.x+a.x)*s-this.parent.scale.x)/this.options.smooth,y:((this.parent.scale.y+a.y)*s-this.parent.scale.y)/this.options.smooth},this.smoothingCount=0,this.smoothingCenter=t}else{let a;this.options.center||(a=this.parent.toLocal(t)),this.isAxisX()&&(this.parent.scale.x*=s),this.isAxisY()&&(this.parent.scale.y*=s),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const o=this.parent.plugins.get("clamp-zoom",!0);if(o&&o.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const h=this.parent.toGlobal(a);this.parent.x+=t.x-h.x,this.parent.y+=t.y-h.y}}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.emit("wheel",{wheel:{dx:e.deltaX,dy:e.deltaY,dz:e.deltaZ},event:e,viewport:this.parent})}return!this.parent.options.passiveWheel}}class oo{constructor(e){this.viewport=e,this.touches=[],this.addListeners()}addListeners(){this.viewport.interactive=!0,this.viewport.forceHitArea||(this.viewport.hitArea=new j(0,0,this.viewport.worldWidth,this.viewport.worldHeight)),this.viewport.on("pointerdown",this.down,this),this.viewport.on("pointermove",this.move,this),this.viewport.on("pointerup",this.up,this),this.viewport.on("pointerupoutside",this.up,this),this.viewport.on("pointercancel",this.up,this),this.viewport.on("pointerout",this.up,this),this.wheelFunction=e=>this.handleWheel(e),this.viewport.options.divWheel.addEventListener("wheel",this.wheelFunction,{passive:this.viewport.options.passiveWheel}),this.isMouseDown=!1}destroy(){this.viewport.options.divWheel.removeEventListener("wheel",this.wheelFunction)}down(e){if(this.viewport.pause||!this.viewport.worldVisible)return;if(e.data.pointerType==="mouse"?this.isMouseDown=!0:this.get(e.data.pointerId)||this.touches.push({id:e.data.pointerId,last:null}),this.count()===1){this.last=e.data.global.clone();const i=this.viewport.plugins.get("decelerate",!0),n=this.viewport.plugins.get("bounce",!0);(!i||!i.isActive())&&(!n||!n.isActive())?this.clickedAvailable=!0:this.clickedAvailable=!1}else this.clickedAvailable=!1;this.viewport.plugins.down(e)&&this.viewport.options.stopPropagation&&e.stopPropagation()}clear(){this.isMouseDown=!1,this.touches=[],this.last=null}checkThreshold(e){return Math.abs(e)>=this.viewport.threshold}move(e){if(this.viewport.pause||!this.viewport.worldVisible)return;const t=this.viewport.plugins.move(e);if(this.clickedAvailable&&this.last){const i=e.data.global.x-this.last.x,n=e.data.global.y-this.last.y;(this.checkThreshold(i)||this.checkThreshold(n))&&(this.clickedAvailable=!1)}t&&this.viewport.options.stopPropagation&&e.stopPropagation()}up(e){if(this.viewport.pause||!this.viewport.worldVisible)return;e.data.pointerType==="mouse"&&(this.isMouseDown=!1),e.data.pointerType!=="mouse"&&this.remove(e.data.pointerId);const t=this.viewport.plugins.up(e);this.clickedAvailable&&this.count()===0&&this.last&&(this.viewport.emit("clicked",{event:e,screen:this.last,world:this.viewport.toWorld(this.last),viewport:this}),this.clickedAvailable=!1),t&&this.viewport.options.stopPropagation&&e.stopPropagation()}getPointerPosition(e){const t=new X;if(this.viewport.options.interaction)this.viewport.options.interaction.mapPositionToPoint(t,e.clientX,e.clientY);else if(this.viewport.options.useDivWheelForInputManager&&this.viewport.options.divWheel){const i=this.viewport.options.divWheel.getBoundingClientRect();t.x=e.clientX-i.left,t.y=e.clientY-i.top}else t.x=e.clientX,t.y=e.clientY;return t}handleWheel(e){if(this.viewport.pause||!this.viewport.worldVisible||this.viewport.options.interaction&&this.viewport.options.interaction.interactionDOMElement!==e.target)return;const t=this.viewport.toLocal(this.getPointerPosition(e));this.viewport.left<=t.x&&t.x<=this.viewport.right&&this.viewport.top<=t.y&&t.y<=this.viewport.bottom&&this.viewport.plugins.wheel(e)&&!this.viewport.options.passiveWheel&&e.preventDefault()}pause(){this.touches=[],this.isMouseDown=!1}get(e){for(const t of this.touches)if(t.id===e)return t;return null}remove(e){for(let t=0;t<this.touches.length;t++)if(this.touches[t].id===e){this.touches.splice(t,1);return}}count(){return(this.isMouseDown?1:0)+this.touches.length}}function lr(r){let e,t=r[0],i=1;for(;i<r.length;){const n=r[i],s=r[i+1];if(i+=2,(n==="optionalAccess"||n==="optionalCall")&&t==null)return;n==="access"||n==="optionalAccess"?(e=t,t=s(t)):(n==="call"||n==="optionalCall")&&(t=s((...a)=>t.call(e,...a)),e=void 0)}return t}const mi=["drag","pinch","wheel","follow","mouse-edges","decelerate","animate","bounce","snap-zoom","clamp-zoom","snap","clamp"];class ho{constructor(e){this.viewport=e,this.list=[],this.plugins={}}add(e,t,i=mi.length){const n=this.plugins[e];n&&n.destroy(),this.plugins[e]=t;const s=mi.indexOf(e);s!==-1&&mi.splice(s,1),mi.splice(i,0,e),this.sort()}get(e,t){return t&&lr([this,"access",i=>i.plugins,"access",i=>i[e],"optionalAccess",i=>i.paused])?null:this.plugins[e]}update(e){for(const t of this.list)t.update(e)}resize(){for(const e of this.list)e.resize()}reset(){for(const e of this.list)e.reset()}removeAll(){this.list.forEach(e=>{e.destroy()}),this.plugins={},this.sort()}remove(e){this.plugins[e]&&(lr([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.destroy,"call",t=>t()]),delete this.plugins[e],this.viewport.emit(`${e}-remove`),this.sort())}pause(e){lr([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.pause,"call",t=>t()])}resume(e){lr([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.resume,"call",t=>t()])}sort(){this.list=[];for(const e of mi)this.plugins[e]&&this.list.push(this.plugins[e])}down(e){let t=!1;for(const i of this.list)i.down(e)&&(t=!0);return t}move(e){let t=!1;for(const i of this.viewport.plugins.list)i.move(e)&&(t=!0);return t}up(e){let t=!1;for(const i of this.list)i.up(e)&&(t=!0);return t}wheel(e){let t=!1;for(const i of this.list)i.wheel(e)&&(t=!0);return t}}const Wv={screenWidth:window.innerWidth,screenHeight:window.innerHeight,worldWidth:null,worldHeight:null,threshold:5,passiveWheel:!0,stopPropagation:!1,forceHitArea:null,noTicker:!1,interaction:null,disableOnContextMenu:!1,ticker:Tt.shared};class Hn extends Pt{__init(){this._disableOnContextMenu=e=>e.preventDefault()}constructor(e={}){super(),Hn.prototype.__init.call(this),this.options=Object.assign({},{divWheel:document.body},Wv,e),this.screenWidth=this.options.screenWidth,this.screenHeight=this.options.screenHeight,this._worldWidth=this.options.worldWidth,this._worldHeight=this.options.worldHeight,this.forceHitArea=this.options.forceHitArea,this.threshold=this.options.threshold,this.options.divWheel=this.options.divWheel||document.body,this.options.disableOnContextMenu&&this.options.divWheel.addEventListener("contextmenu",this._disableOnContextMenu),this.options.noTicker||(this.tickerFunction=()=>this.update(this.options.ticker.elapsedMS),this.options.ticker.add(this.tickerFunction)),this.input=new oo(this),this.plugins=new ho(this)}destroy(e){!this.options.noTicker&&this.tickerFunction&&this.options.ticker.remove(this.tickerFunction),this.options.disableOnContextMenu&&this.options.divWheel.removeEventListener("contextmenu",this._disableOnContextMenu),this.input.destroy(),super.destroy(e)}update(e){this.pause||(this.plugins.update(e),this.lastViewport&&(this.lastViewport.x!==this.x||this.lastViewport.y!==this.y?this.moving=!0:this.moving&&(this.emit("moved-end",this),this.moving=!1),this.lastViewport.scaleX!==this.scale.x||this.lastViewport.scaleY!==this.scale.y?this.zooming=!0:this.zooming&&(this.emit("zoomed-end",this),this.zooming=!1)),this.forceHitArea||(this._hitAreaDefault=new j(this.left,this.top,this.worldScreenWidth,this.worldScreenHeight),this.hitArea=this._hitAreaDefault),this._dirty=this._dirty||!this.lastViewport||this.lastViewport.x!==this.x||this.lastViewport.y!==this.y||this.lastViewport.scaleX!==this.scale.x||this.lastViewport.scaleY!==this.scale.y,this.lastViewport={x:this.x,y:this.y,scaleX:this.scale.x,scaleY:this.scale.y},this.emit("frame-end",this))}resize(e=window.innerWidth,t=window.innerHeight,i,n){this.screenWidth=e,this.screenHeight=t,typeof i<"u"&&(this._worldWidth=i),typeof n<"u"&&(this._worldHeight=n),this.plugins.resize(),this.dirty=!0}get worldWidth(){return this._worldWidth?this._worldWidth:this.width/this.scale.x}set worldWidth(e){this._worldWidth=e,this.plugins.resize()}get worldHeight(){return this._worldHeight?this._worldHeight:this.height/this.scale.y}set worldHeight(e){this._worldHeight=e,this.plugins.resize()}getVisibleBounds(){return new j(this.left,this.top,this.worldScreenWidth,this.worldScreenHeight)}toWorld(e,t){return arguments.length===2?this.toLocal(new X(e,t)):this.toLocal(e)}toScreen(e,t){return arguments.length===2?this.toGlobal(new X(e,t)):this.toGlobal(e)}get worldScreenWidth(){return this.screenWidth/this.scale.x}get worldScreenHeight(){return this.screenHeight/this.scale.y}get screenWorldWidth(){return this.worldWidth*this.scale.x}get screenWorldHeight(){return this.worldHeight*this.scale.y}get center(){return new X(this.worldScreenWidth/2-this.x/this.scale.x,this.worldScreenHeight/2-this.y/this.scale.y)}set center(e){this.moveCenter(e)}moveCenter(...e){let t,i;typeof e[0]=="number"?(t=e[0],i=e[1]):(t=e[0].x,i=e[0].y);const n=(this.worldScreenWidth/2-t)*this.scale.x,s=(this.worldScreenHeight/2-i)*this.scale.y;return(this.x!==n||this.y!==s)&&(this.position.set(n,s),this.plugins.reset(),this.dirty=!0),this}get corner(){return new X(-this.x/this.scale.x,-this.y/this.scale.y)}set corner(e){this.moveCorner(e)}moveCorner(...e){let t,i;return e.length===1?(t=-e[0].x*this.scale.x,i=-e[0].y*this.scale.y):(t=-e[0]*this.scale.x,i=-e[1]*this.scale.y),(t!==this.x||i!==this.y)&&(this.position.set(t,i),this.plugins.reset(),this.dirty=!0),this}get screenWidthInWorldPixels(){return this.screenWidth/this.scale.x}get screenHeightInWorldPixels(){return this.screenHeight/this.scale.y}findFitWidth(e){return this.screenWidth/e}findFitHeight(e){return this.screenHeight/e}findFit(e,t){const i=this.screenWidth/e,n=this.screenHeight/t;return Math.min(i,n)}findCover(e,t){const i=this.screenWidth/e,n=this.screenHeight/t;return Math.max(i,n)}fitWidth(e=this.worldWidth,t,i=!0,n){let s;t&&(s=this.center),this.scale.x=this.screenWidth/e,i&&(this.scale.y=this.scale.x);const a=this.plugins.get("clamp-zoom",!0);return!n&&a&&a.clamp(),t&&s&&this.moveCenter(s),this}fitHeight(e=this.worldHeight,t,i=!0,n){let s;t&&(s=this.center),this.scale.y=this.screenHeight/e,i&&(this.scale.x=this.scale.y);const a=this.plugins.get("clamp-zoom",!0);return!n&&a&&a.clamp(),t&&s&&this.moveCenter(s),this}fitWorld(e){let t;e&&(t=this.center),this.scale.x=this.screenWidth/this.worldWidth,this.scale.y=this.screenHeight/this.worldHeight,this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y;const i=this.plugins.get("clamp-zoom",!0);return i&&i.clamp(),e&&t&&this.moveCenter(t),this}fit(e,t=this.worldWidth,i=this.worldHeight){let n;e&&(n=this.center),this.scale.x=this.screenWidth/t,this.scale.y=this.screenHeight/i,this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y;const s=this.plugins.get("clamp-zoom",!0);return s&&s.clamp(),e&&n&&this.moveCenter(n),this}setZoom(e,t){let i;t&&(i=this.center),this.scale.set(e);const n=this.plugins.get("clamp-zoom",!0);return n&&n.clamp(),t&&i&&this.moveCenter(i),this}zoomPercent(e,t){return this.setZoom(this.scale.x+this.scale.x*e,t)}zoom(e,t){return this.fitWidth(e+this.worldScreenWidth,t),this}get scaled(){return this.scale.x}set scaled(e){this.setZoom(e,!0)}snapZoom(e){return this.plugins.add("snap-zoom",new so(this,e)),this}OOB(){return{left:this.left<0,right:this.right>this.worldWidth,top:this.top<0,bottom:this.bottom>this.worldHeight,cornerPoint:new X(this.worldWidth*this.scale.x-this.screenWidth,this.worldHeight*this.scale.y-this.screenHeight)}}get right(){return-this.x/this.scale.x+this.worldScreenWidth}set right(e){this.x=-e*this.scale.x+this.screenWidth,this.plugins.reset()}get left(){return-this.x/this.scale.x}set left(e){this.x=-e*this.scale.x,this.plugins.reset()}get top(){return-this.y/this.scale.y}set top(e){this.y=-e*this.scale.y,this.plugins.reset()}get bottom(){return-this.y/this.scale.y+this.worldScreenHeight}set bottom(e){this.y=-e*this.scale.y+this.screenHeight,this.plugins.reset()}get dirty(){return!!this._dirty}set dirty(e){this._dirty=e}get forceHitArea(){return this._forceHitArea}set forceHitArea(e){e?(this._forceHitArea=e,this.hitArea=e):(this._forceHitArea=null,this.hitArea=new j(0,0,this.worldWidth,this.worldHeight))}drag(e){return this.plugins.add("drag",new ur(this,e)),this}clamp(e){return this.plugins.add("clamp",new Ja(this,e)),this}decelerate(e){return this.plugins.add("decelerate",new eo(this,e)),this}bounce(e){return this.plugins.add("bounce",new Qa(this,e)),this}pinch(e){return this.plugins.add("pinch",new We(this,e)),this}snap(e,t,i){return this.plugins.add("snap",new no(this,e,t,i)),this}follow(e,t){return this.plugins.add("follow",new io(this,e,t)),this}wheel(e){return this.plugins.add("wheel",new ao(this,e)),this}animate(e){return this.plugins.add("animate",new Zt(this,e)),this}clampZoom(e){return this.plugins.add("clamp-zoom",new to(this,e)),this}mouseEdges(e){return this.plugins.add("mouse-edges",new ro(this,e)),this}get pause(){return!!this._pause}set pause(e){this._pause=e,this.lastViewport=null,this.moving=!1,this.zooming=!1,e&&this.input.pause()}ensureVisible(e,t,i,n,s){s&&(i>this.worldScreenWidth||n>this.worldScreenHeight)&&(this.fit(!0,i,n),this.emit("zoomed",{viewport:this,type:"ensureVisible"}));let a=!1;e<this.left?(this.left=e,a=!0):e+i>this.right&&(this.right=e+i,a=!0),t<this.top?(this.top=t,a=!0):t+n>this.bottom&&(this.bottom=t+n,a=!0),a&&this.emit("moved",{viewport:this,type:"ensureVisible"})}}const jv=Object.freeze(Object.defineProperty({__proto__:null,Animate:Zt,Bounce:Qa,Clamp:Ja,ClampZoom:to,Decelerate:eo,Drag:ur,Follow:io,InputManager:oo,MouseEdges:ro,Pinch:We,Plugin:Ot,PluginManager:ho,Snap:no,SnapZoom:so,Viewport:Hn,Wheel:ao},Symbol.toStringTag,{value:"Module"}));At.FlowRunTimeline=Rv,Object.defineProperty(At,Symbol.toStringTag,{value:"Module"})});
1060
+ `;(function(l){VX(e,l);function e(t,i){t===void 0&&(t=.5),i===void 0&&(i=Math.random());var n=l.call(this,Kh,RX,{uNoise:0,uSeed:0})||this;return n.noise=t,n.seed=i,n}return Object.defineProperty(e.prototype,"noise",{get:function(){return this.uniforms.uNoise},set:function(t){this.uniforms.uNoise=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"seed",{get:function(){return this.uniforms.uSeed},set:function(t){this.uniforms.uSeed=t},enumerable:!1,configurable:!0}),e})(De);var gr=new vt;Rt.prototype._cacheAsBitmap=!1,Rt.prototype._cacheData=null,Rt.prototype._cacheAsBitmapResolution=null,Rt.prototype._cacheAsBitmapMultisample=Xt.NONE;var WX=function(){function l(){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 l}();Object.defineProperties(Rt.prototype,{cacheAsBitmapResolution:{get:function(){return this._cacheAsBitmapResolution},set:function(l){l!==this._cacheAsBitmapResolution&&(this._cacheAsBitmapResolution=l,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmapMultisample:{get:function(){return this._cacheAsBitmapMultisample},set:function(l){l!==this._cacheAsBitmapMultisample&&(this._cacheAsBitmapMultisample=l,this.cacheAsBitmap&&(this.cacheAsBitmap=!1,this.cacheAsBitmap=!0))}},cacheAsBitmap:{get:function(){return this._cacheAsBitmap},set:function(l){if(this._cacheAsBitmap!==l){this._cacheAsBitmap=l;var e;l?(this._cacheData||(this._cacheData=new WX),e=this._cacheData,e.originalRender=this.render,e.originalRenderCanvas=this.renderCanvas,e.originalUpdateTransform=this.updateTransform,e.originalCalculateBounds=this.calculateBounds,e.originalGetLocalBounds=this.getLocalBounds,e.originalDestroy=this.destroy,e.originalContainsPoint=this.containsPoint,e.originalMask=this._mask,e.originalFilterArea=this.filterArea,this.render=this._renderCached,this.renderCanvas=this._renderCachedCanvas,this.destroy=this._cacheAsBitmapDestroy):(e=this._cacheData,e.sprite&&this._destroyCachedDisplayObject(),this.render=e.originalRender,this.renderCanvas=e.originalRenderCanvas,this.calculateBounds=e.originalCalculateBounds,this.getLocalBounds=e.originalGetLocalBounds,this.destroy=e.originalDestroy,this.updateTransform=e.originalUpdateTransform,this.containsPoint=e.originalContainsPoint,this._mask=e.originalMask,this.filterArea=e.originalFilterArea)}}}}),Rt.prototype._renderCached=function(e){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObject(e),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._render(e))},Rt.prototype._initCachedDisplayObject=function(e){var t;if(!(this._cacheData&&this._cacheData.sprite)){var i=this.alpha;this.alpha=1,e.batch.flush();var n=this.getLocalBounds(null,!0).clone();if(this.filters&&this.filters.length){var a=this.filters[0].padding;n.pad(a)}n.ceil(U.RESOLUTION);var s=e.renderTexture.current,d=e.renderTexture.sourceFrame.clone(),h=e.renderTexture.destinationFrame.clone(),r=e.projection.transform,o=Xi.create({width:n.width,height:n.height,resolution:this.cacheAsBitmapResolution||e.resolution,multisample:(t=this.cacheAsBitmapMultisample)!==null&&t!==void 0?t:e.multisample}),c="cacheAsBitmap_"+pi();this._cacheData.textureCacheId=c,q.addToCache(o.baseTexture,c),z.addToCache(o,c);var u=this.transform.localTransform.copyTo(gr).invert().translate(-n.x,-n.y);this.render=this._cacheData.originalRender,e.render(this,{renderTexture:o,clear:!0,transform:u,skipUpdateTransform:!1}),e.framebuffer.blit(),e.projection.transform=r,e.renderTexture.bind(s,d,h),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 m=new Il(o);m.transform.worldTransform=this.transform.worldTransform,m.anchor.x=-(n.x/n.width),m.anchor.y=-(n.y/n.height),m.alpha=i,m._bounds=this._bounds,this._cacheData.sprite=m,this.transform._parentID=-1,this.parent?this.updateTransform():(this.enableTempParent(),this.updateTransform(),this.disableTempParent(null)),this.containsPoint=m.containsPoint.bind(m)}},Rt.prototype._renderCachedCanvas=function(e){!this.visible||this.worldAlpha<=0||!this.renderable||(this._initCachedDisplayObjectCanvas(e),this._cacheData.sprite.worldAlpha=this.worldAlpha,this._cacheData.sprite._renderCanvas(e))},Rt.prototype._initCachedDisplayObjectCanvas=function(e){if(!(this._cacheData&&this._cacheData.sprite)){var t=this.getLocalBounds(null,!0),i=this.alpha;this.alpha=1;var n=e.context,a=e._projTransform;t.ceil(U.RESOLUTION);var s=Xi.create({width:t.width,height:t.height}),d="cacheAsBitmap_"+pi();this._cacheData.textureCacheId=d,q.addToCache(s.baseTexture,d),z.addToCache(s,d);var h=gr;this.transform.localTransform.copyTo(h),h.invert(),h.tx-=t.x,h.ty-=t.y,this.renderCanvas=this._cacheData.originalRenderCanvas,e.render(this,{renderTexture:s,clear:!0,transform:h,skipUpdateTransform:!1}),e.context=n,e._projTransform=a,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 r=new Il(s);r.transform.worldTransform=this.transform.worldTransform,r.anchor.x=-(t.x/t.width),r.anchor.y=-(t.y/t.height),r.alpha=i,r._bounds=this._bounds,this._cacheData.sprite=r,this.transform._parentID=-1,this.parent?this.updateTransform():(this.parent=e._tempDisplayObjectParent,this.updateTransform(),this.parent=null),this.containsPoint=r.containsPoint.bind(r)}},Rt.prototype._calculateCachedBounds=function(){this._bounds.clear(),this._cacheData.sprite.transform._worldID=this.transform._worldID,this._cacheData.sprite._calculateBounds(),this._bounds.updateID=this._boundsID},Rt.prototype._getCachedLocalBounds=function(){return this._cacheData.sprite.getLocalBounds(null)},Rt.prototype._destroyCachedDisplayObject=function(){this._cacheData.sprite._texture.destroy(!0),this._cacheData.sprite=null,q.removeFromCache(this._cacheData.textureCacheId),z.removeFromCache(this._cacheData.textureCacheId),this._cacheData.textureCacheId=null},Rt.prototype._cacheAsBitmapDestroy=function(e){this.cacheAsBitmap=!1,this.destroy(e)};Rt.prototype.name=null,xt.prototype.getChildByName=function(e,t){for(var i=0,n=this.children.length;i<n;i++)if(this.children[i].name===e)return this.children[i];if(t)for(var i=0,n=this.children.length;i<n;i++){var a=this.children[i];if(a.getChildByName){var s=a.getChildByName(e,!0);if(s)return s}}return null};Rt.prototype.getGlobalPosition=function(e,t){return e===void 0&&(e=new _),t===void 0&&(t=!1),this.parent?this.parent.toGlobal(this.position,e,t):(e.x=this.position.x,e.y=this.position.y),e};var fX=function(){function l(){}return l.init=function(e){var t=this;Object.defineProperty(this,"resizeTo",{set:function(i){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=i,i&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get:function(){return this._resizeTo}}),this.queueResize=function(){t._resizeTo&&(t.cancelResize(),t._resizeId=requestAnimationFrame(function(){return t.resize()}))},this.cancelResize=function(){t._resizeId&&(cancelAnimationFrame(t._resizeId),t._resizeId=null)},this.resize=function(){if(t._resizeTo){t.cancelResize();var i,n;if(t._resizeTo===globalThis.window)i=globalThis.innerWidth,n=globalThis.innerHeight;else{var a=t._resizeTo,s=a.clientWidth,d=a.clientHeight;i=s,n=d}t.renderer.resize(i,n)}},this._resizeId=null,this._resizeTo=null,this.resizeTo=e.resizeTo||null},l.destroy=function(){globalThis.removeEventListener("resize",this.queueResize),this.cancelResize(),this.cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null},l.extension=nt.Application,l}(),Tr=function(){function l(e){var t=this;this.stage=new xt,e=Object.assign({forceCanvas:!1},e),this.renderer=qb(e),l._plugins.forEach(function(i){i.init.call(t,e)})}return l.registerPlugin=function(e){pe("6.5.0","Application.registerPlugin() is deprecated, use extensions.add()"),ke.add({type:nt.Application,ref:e})},l.prototype.render=function(){this.renderer.render(this.stage)},Object.defineProperty(l.prototype,"view",{get:function(){return this.renderer.view},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"screen",{get:function(){return this.renderer.screen},enumerable:!1,configurable:!0}),l.prototype.destroy=function(e,t){var i=this,n=l._plugins.slice(0);n.reverse(),n.forEach(function(a){a.destroy.call(i)}),this.stage.destroy(t),this.stage=null,this.renderer.destroy(e),this.renderer=null},l._plugins=[],l}();ke.handleByList(nt.Application,Tr._plugins),ke.add(fX);var gs=function(l,e){return gs=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},gs(l,e)};function Bi(l,e){gs(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var LX=function(l){Bi(e,l);function e(t,i,n,a){t===void 0&&(t=100),i===void 0&&(i=100),n===void 0&&(n=10),a===void 0&&(a=10);var s=l.call(this)||this;return s.segWidth=n,s.segHeight=a,s.width=t,s.height=i,s.build(),s}return e.prototype.build=function(){for(var t=this.segWidth*this.segHeight,i=[],n=[],a=[],s=this.segWidth-1,d=this.segHeight-1,h=this.width/s,r=this.height/d,o=0;o<t;o++){var c=o%this.segWidth,u=o/this.segWidth|0;i.push(c*h,u*r),n.push(c/s,u/d)}for(var m=s*d,o=0;o<m;o++){var b=o%s,Z=o/s|0,p=Z*this.segWidth+b,G=Z*this.segWidth+b+1,X=(Z+1)*this.segWidth+b,y=(Z+1)*this.segWidth+b+1;a.push(p,G,X,G,y,X)}this.buffers[0].data=new Float32Array(i),this.buffers[1].data=new Float32Array(n),this.indexBuffer.data=new Uint16Array(a),this.buffers[0].update(),this.buffers[1].update(),this.indexBuffer.update()},e}(Fn),xX=function(l){Bi(e,l);function e(t,i,n){t===void 0&&(t=200),n===void 0&&(n=0);var a=l.call(this,new Float32Array(i.length*4),new Float32Array(i.length*4),new Uint16Array((i.length-1)*6))||this;return a.points=i,a._width=t,a.textureScale=n,a.build(),a}return Object.defineProperty(e.prototype,"width",{get:function(){return this._width},enumerable:!1,configurable:!0}),e.prototype.build=function(){var t=this.points;if(t){var i=this.getBuffer("aVertexPosition"),n=this.getBuffer("aTextureCoord"),a=this.getIndex();if(!(t.length<1)){i.data.length/4!==t.length&&(i.data=new Float32Array(t.length*4),n.data=new Float32Array(t.length*4),a.data=new Uint16Array((t.length-1)*6));var s=n.data,d=a.data;s[0]=0,s[1]=0,s[2]=0,s[3]=1;for(var h=0,r=t[0],o=this._width*this.textureScale,c=t.length,u=0;u<c;u++){var m=u*4;if(this.textureScale>0){var b=r.x-t[u].x,Z=r.y-t[u].y,p=Math.sqrt(b*b+Z*Z);r=t[u],h+=p/o}else h=u/(c-1);s[m]=h,s[m+1]=0,s[m+2]=h,s[m+3]=1}for(var G=0,u=0;u<c-1;u++){var m=u*2;d[G++]=m,d[G++]=m+1,d[G++]=m+2,d[G++]=m+2,d[G++]=m+1,d[G++]=m+3}n.update(),a.update(),this.updateVertices()}}},e.prototype.updateVertices=function(){var t=this.points;if(!(t.length<1)){for(var i=t[0],n,a=0,s=0,d=this.buffers[0].data,h=t.length,r=0;r<h;r++){var o=t[r],c=r*4;r<t.length-1?n=t[r+1]:n=o,s=-(n.x-i.x),a=n.y-i.y;var u=Math.sqrt(a*a+s*s),m=this.textureScale>0?this.textureScale*this._width/2:this._width/2;a/=u,s/=u,a*=m,s*=m,d[c]=o.x+a,d[c+1]=o.y+s,d[c+2]=o.x-a,d[c+3]=o.y-s,i=o}this.buffers[0].update()}},e.prototype.update=function(){this.textureScale>0?this.build():this.updateVertices()},e}(Fn);(function(l){Bi(e,l);function e(t,i,n){n===void 0&&(n=0);var a=this,s=new xX(t.height,i,n),d=new Hl(t);return n>0&&(t.baseTexture.wrapMode=xe.REPEAT),a=l.call(this,s,d)||this,a.autoUpdate=!0,a}return e.prototype._render=function(t){var i=this.geometry;(this.autoUpdate||i._width!==this.shader.texture.height)&&(i._width=this.shader.texture.height,i.update()),l.prototype._render.call(this,t)},e})(Tl);var SX=function(l){Bi(e,l);function e(t,i,n){var a=this,s=new LX(t.width,t.height,i,n),d=new Hl(z.WHITE);return a=l.call(this,s,d)||this,a.texture=t,a.autoResize=!0,a}return e.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID;var t=this.geometry,i=this.shader.texture,n=i.width,a=i.height;this.autoResize&&(t.width!==n||t.height!==a)&&(t.width=this.shader.texture.width,t.height=this.shader.texture.height,t.build())},Object.defineProperty(e.prototype,"texture",{get:function(){return this.shader.texture},set:function(t){this.shader.texture!==t&&(this.shader.texture=t,this._textureID=-1,t.baseTexture.valid?this.textureUpdated():t.once("update",this.textureUpdated,this))},enumerable:!1,configurable:!0}),e.prototype._render=function(t){this._textureID!==this.shader.texture._updateID&&this.textureUpdated(),l.prototype._render.call(this,t)},e.prototype.destroy=function(t){this.shader.texture.off("update",this.textureUpdated,this),l.prototype.destroy.call(this,t)},e}(Tl);(function(l){Bi(e,l);function e(t,i,n,a,s){t===void 0&&(t=z.EMPTY);var d=this,h=new Fn(i,n,a);h.getBuffer("aVertexPosition").static=!1;var r=new Hl(t);return d=l.call(this,h,r,null,s)||this,d.autoUpdate=!0,d}return Object.defineProperty(e.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(t){this.geometry.getBuffer("aVertexPosition").data=t},enumerable:!1,configurable:!0}),e.prototype._render=function(t){this.autoUpdate&&this.geometry.getBuffer("aVertexPosition").update(),l.prototype._render.call(this,t)},e})(Tl);var Nn=10;(function(l){Bi(e,l);function e(t,i,n,a,s){i===void 0&&(i=Nn),n===void 0&&(n=Nn),a===void 0&&(a=Nn),s===void 0&&(s=Nn);var d=l.call(this,z.WHITE,4,4)||this;return d._origWidth=t.orig.width,d._origHeight=t.orig.height,d._width=d._origWidth,d._height=d._origHeight,d._leftWidth=i,d._rightWidth=a,d._topHeight=n,d._bottomHeight=s,d.texture=t,d}return e.prototype.textureUpdated=function(){this._textureID=this.shader.texture._updateID,this._refresh()},Object.defineProperty(e.prototype,"vertices",{get:function(){return this.geometry.getBuffer("aVertexPosition").data},set:function(t){this.geometry.getBuffer("aVertexPosition").data=t},enumerable:!1,configurable:!0}),e.prototype.updateHorizontalVertices=function(){var t=this.vertices,i=this._getMinScale();t[9]=t[11]=t[13]=t[15]=this._topHeight*i,t[17]=t[19]=t[21]=t[23]=this._height-this._bottomHeight*i,t[25]=t[27]=t[29]=t[31]=this._height},e.prototype.updateVerticalVertices=function(){var t=this.vertices,i=this._getMinScale();t[2]=t[10]=t[18]=t[26]=this._leftWidth*i,t[4]=t[12]=t[20]=t[28]=this._width-this._rightWidth*i,t[6]=t[14]=t[22]=t[30]=this._width},e.prototype._getMinScale=function(){var t=this._leftWidth+this._rightWidth,i=this._width>t?1:this._width/t,n=this._topHeight+this._bottomHeight,a=this._height>n?1:this._height/n,s=Math.min(i,a);return s},Object.defineProperty(e.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leftWidth",{get:function(){return this._leftWidth},set:function(t){this._leftWidth=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"rightWidth",{get:function(){return this._rightWidth},set:function(t){this._rightWidth=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"topHeight",{get:function(){return this._topHeight},set:function(t){this._topHeight=t,this._refresh()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"bottomHeight",{get:function(){return this._bottomHeight},set:function(t){this._bottomHeight=t,this._refresh()},enumerable:!1,configurable:!0}),e.prototype._refresh=function(){var t=this.texture,i=this.geometry.buffers[1].data;this._origWidth=t.orig.width,this._origHeight=t.orig.height;var n=1/this._origWidth,a=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]=a*this._topHeight,i[17]=i[19]=i[21]=i[23]=1-a*this._bottomHeight,this.updateHorizontalVertices(),this.updateVerticalVertices(),this.geometry.buffers[0].update(),this.geometry.buffers[1].update()},e})(SX);var Ts=function(l,e){return Ts=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},Ts(l,e)};function vX(l,e){Ts(l,e);function t(){this.constructor=l}l.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}(function(l){vX(e,l);function e(t,i){i===void 0&&(i=!0);var n=l.call(this,t[0]instanceof z?t[0]:t[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=t,n}return e.prototype.stop=function(){this._playing&&(this._playing=!1,this._autoUpdate&&this._isConnectedToTicker&&(Jt.shared.remove(this.update,this),this._isConnectedToTicker=!1))},e.prototype.play=function(){this._playing||(this._playing=!0,this._autoUpdate&&!this._isConnectedToTicker&&(Jt.shared.add(this.update,this,le.HIGH),this._isConnectedToTicker=!0))},e.prototype.gotoAndStop=function(t){this.stop();var i=this.currentFrame;this._currentTime=t,i!==this.currentFrame&&this.updateTexture()},e.prototype.gotoAndPlay=function(t){var i=this.currentFrame;this._currentTime=t,i!==this.currentFrame&&this.updateTexture(),this.play()},e.prototype.update=function(t){if(this._playing){var i=this.animationSpeed*t,n=this.currentFrame;if(this._durations!==null){var a=this._currentTime%1*this._durations[this.currentFrame];for(a+=i/60*1e3;a<0;)this._currentTime--,a+=this._durations[this.currentFrame];var s=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);a>=this._durations[this.currentFrame];)a-=this._durations[this.currentFrame]*s,this._currentTime+=s;this._currentTime+=a/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.currentFrame<n?this.onLoop():this.animationSpeed<0&&this.currentFrame>n&&this.onLoop()),this.updateTexture())}},e.prototype.updateTexture=function(){var t=this.currentFrame;this._previousFrame!==t&&(this._previousFrame=t,this._texture=this._textures[t],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))},e.prototype.destroy=function(t){this.stop(),l.prototype.destroy.call(this,t),this.onComplete=null,this.onFrameChange=null,this.onLoop=null},e.fromFrames=function(t){for(var i=[],n=0;n<t.length;++n)i.push(z.from(t[n]));return new e(i)},e.fromImages=function(t){for(var i=[],n=0;n<t.length;++n)i.push(z.from(t[n]));return new e(i)},Object.defineProperty(e.prototype,"totalFrames",{get:function(){return this._textures.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textures",{get:function(){return this._textures},set:function(t){if(t[0]instanceof z)this._textures=t,this._durations=null;else{this._textures=[],this._durations=[];for(var i=0;i<t.length;i++)this._textures.push(t[i].texture),this._durations.push(t[i].time)}this._previousFrame=null,this.gotoAndStop(0),this.updateTexture()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentFrame",{get:function(){var t=Math.floor(this._currentTime)%this._textures.length;return t<0&&(t+=this._textures.length),t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"playing",{get:function(){return this._playing},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(t){t!==this._autoUpdate&&(this._autoUpdate=t,!this._autoUpdate&&this._isConnectedToTicker?(Jt.shared.remove(this.update,this),this._isConnectedToTicker=!1):this._autoUpdate&&!this._isConnectedToTicker&&this._playing&&(Jt.shared.add(this.update,this),this._isConnectedToTicker=!0))},enumerable:!1,configurable:!0}),e})(Il);ke.add(up,Xp,Gp,oG,MG,Eh,QG,nX,Fp,sG,dG,wG,gZ,Sp);let Qi="sans-serif",Mn=null;const $e=new qe,Hr={chars:Ct.ASCII},Jl=new qe;async function Jr(l){const e=new Fc(l.textFontFamilyDefault);try{await e.load()}catch(t){return console.error(t),console.warn(`loadBitmapFonts: font ${l.textFontFamilyDefault} failed to load, falling back to ${Qi}`),Fr(Qi,l)}return Qi=l.textFontFamilyDefault,Fr(Qi,l)}function Cr(l){$e.fontFamily=Qi,$e.fontSize=l.textSizeDefault,$e.lineHeight=l.textLineHeightDefault,Jl.fontFamily=Qi,Jl.fontSize=l.textSizeSmall,Jl.lineHeight=l.textLineHeightSmall}function Fr(l,e){Cr(e);const t={resolution:window.devicePixelRatio||2,...Hr};Ct.from("NodeTextDefault",{...$e,fill:e.colorTextDefault},t);const i={fontName:"NodeTextDefault",fontSize:e.textSizeDefault};Ct.from("NodeTextInverse",{...$e,fill:e.colorTextInverse},t);const n={fontName:"NodeTextInverse",fontSize:e.textSizeDefault};Ct.from("TimeMarkerLabel",{...Jl,fill:e.colorTextSubdued},t);const a={fontName:"TimeMarkerLabel",fontSize:e.textSizeSmall};return{nodeTextDefault:i,nodeTextInverse:n,nodeTextStyles:$e,timeMarkerLabel:a}}function IX(l){Cr(l);const e={resolution:window.devicePixelRatio||2,...Hr};setTimeout(()=>{Ct.uninstall("NodeTextDefault"),Ct.from("NodeTextDefault",{...$e,fill:l.colorTextDefault},e),Ct.uninstall("NodeTextInverse"),Ct.from("NodeTextInverse",{...$e,fill:l.colorTextInverse},e),Ct.uninstall("TimeMarkerLabel"),Ct.from("TimeMarkerLabel",{...Jl,fill:l.colorTextSubdued},e)},0)}const Hs=l=>(Mn||(Mn=Jr(l)),Mn),YX=l=>{Mn=Jr(l)};class gX extends xt{constructor(t,i){super();N(this,"appRef");N(this,"viewportRef");N(this,"layer",new Ve);this.appRef=t,this.viewportRef=i,this.drawLayer(),this.initUpdater(),this.interactive=!0}drawLayer(){const{xPos:t,yPos:i,width:n,height:a}=this.getDimensions();this.layer.beginFill(16777215,1),this.layer.drawRect(t,i,n,a),this.layer.endFill(),this.layer.alpha=0,this.addChild(this.layer)}getDimensions(){return{xPos:this.viewportRef.left,yPos:this.viewportRef.top,width:this.viewportRef.right-this.viewportRef.left,height:this.viewportRef.bottom-this.viewportRef.top}}initUpdater(){this.appRef.ticker.add(()=>{this.update()},null,le.LOW)}update(){const{xPos:t,yPos:i,width:n,height:a}=this.getDimensions();this.x=t,this.y=i,this.width=n,this.height=a}}function TX(l){Ju();const e=new Tr({backgroundAlpha:0,width:l.clientWidth,height:l.clientHeight,resolution:window.devicePixelRatio||2,autoDensity:!0,antialias:!0,resizeTo:l});return l.appendChild(e.view),e.ticker.add(()=>{(l.clientWidth!==e.screen.width||l.clientHeight!==e.screen.height)&&(e.resizeTo=l)},null,le.LOW),e}async function HX(){const{Viewport:l}=await Promise.resolve().then(()=>fV);return l}async function JX(l,e){const t=await HX(),{width:i,height:n}=e.screen,a=new t({screenWidth:i,screenHeight:n,passiveWheel:!1,interaction:e.renderer.plugins.interaction,divWheel:l,ticker:e.ticker});return a.drag({wheel:!1,pressDrag:!0}).wheel({trackpadPinch:!0,wheelZoom:!0}).pinch().clampZoom({minWidth:i/2,maxWidth:i*40}).decelerate({friction:.9}),e.stage.addChild(a),e.ticker.add(()=>{(a.screenWidth!==e.screen.width||a.screenHeight!==e.screen.height)&&a.resize(e.screen.width,e.screen.height)},null,le.LOW),a}function we(l){if(l===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l}function Ur(l,e){l.prototype=Object.create(e.prototype),l.prototype.constructor=l,l.__proto__=e}var At={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},_i={duration:.5,overwrite:!1,delay:0},Js,Kt,St,ne=1e8,st=1/ne,Cs=Math.PI*2,CX=Cs/4,FX=0,kr=Math.sqrt,UX=Math.cos,kX=Math.sin,Ft=function(e){return typeof e=="string"},Vt=function(e){return typeof e=="function"},Pe=function(e){return typeof e=="number"},Fs=function(e){return typeof e>"u"},Ye=function(e){return typeof e=="object"},Bt=function(e){return e!==!1},Nr=function(){return typeof window<"u"},Kn=function(e){return Vt(e)||Ft(e)},Mr=typeof ArrayBuffer=="function"&&ArrayBuffer.isView||function(){},wt=Array.isArray,Us=/(?:-?\.?\d|\.)+/gi,Kr=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,ji=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,ks=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,wr=/[+-]=-?[.\d]+/,Pr=/[^,'"\[\]\s]+/gi,NX=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,bt,ae,Ns,Ms,qt={},wn={},zr,Er=function(e){return(wn=Si(e,qt))&&ee},Ks=function(e,t){return console.warn("Invalid property",e,"set to",t,"Missing plugin? gsap.registerPlugin()")},Pn=function(e,t){return!t&&console.warn(e)},Br=function(e,t){return e&&(qt[e]=t)&&wn&&(wn[e]=t)||qt},Cl=function(){return 0},MX={suppressEvents:!0,isStart:!0,kill:!1},zn={suppressEvents:!0,kill:!1},KX={suppressEvents:!0},ws={},ti=[],Ps={},Qr,$t={},zs={},_r=30,En=[],Es="",Bs=function(e){var t=e[0],i,n;if(Ye(t)||Vt(t)||(e=[e]),!(i=(t._gsap||{}).harness)){for(n=En.length;n--&&!En[n].targetTest(t););i=En[n]}for(n=e.length;n--;)e[n]&&(e[n]._gsap||(e[n]._gsap=new Ro(e[n],i)))||e.splice(n,1);return e},xi=function(e){return e._gsap||Bs(he(e))[0]._gsap},jr=function(e,t,i){return(i=e[t])&&Vt(i)?e[t]():Fs(i)&&e.getAttribute&&e.getAttribute(t)||i},Qt=function(e,t){return(e=e.split(",")).forEach(t)||e},Wt=function(e){return Math.round(e*1e5)/1e5||0},Nt=function(e){return Math.round(e*1e7)/1e7||0},Di=function(e,t){var i=t.charAt(0),n=parseFloat(t.substr(2));return e=parseFloat(e),i==="+"?e+n:i==="-"?e-n:i==="*"?e*n:e/n},wX=function(e,t){for(var i=t.length,n=0;e.indexOf(t[n])<0&&++n<i;);return n<i},Bn=function(){var e=ti.length,t=ti.slice(0),i,n;for(Ps={},ti.length=0,i=0;i<e;i++)n=t[i],n&&n._lazy&&(n.render(n._lazy[0],n._lazy[1],!0)._lazy=0)},Dr=function(e,t,i,n){ti.length&&!Kt&&Bn(),e.render(t,i,n||Kt&&t<0&&(e._initted||e._startAt)),ti.length&&!Kt&&Bn()},Or=function(e){var t=parseFloat(e);return(t||t===0)&&(e+"").match(Pr).length<2?t:Ft(e)?e.trim():e},Ar=function(e){return e},se=function(e,t){for(var i in t)i in e||(e[i]=t[i]);return e},PX=function(e){return function(t,i){for(var n in i)n in t||n==="duration"&&e||n==="ease"||(t[n]=i[n])}},Si=function(e,t){for(var i in t)e[i]=t[i];return e},qr=function l(e,t){for(var i in t)i!=="__proto__"&&i!=="constructor"&&i!=="prototype"&&(e[i]=Ye(t[i])?l(e[i]||(e[i]={}),t[i]):t[i]);return e},Qn=function(e,t){var i={},n;for(n in e)n in t||(i[n]=e[n]);return i},Fl=function(e){var t=e.parent||bt,i=e.keyframes?PX(wt(e.keyframes)):se;if(Bt(e.inherit))for(;t;)i(e,t.vars.defaults),t=t.parent||t._dp;return e},zX=function(e,t){for(var i=e.length,n=i===t.length;n&&i--&&e[i]===t[i];);return i<0},$r=function(e,t,i,n,a){i===void 0&&(i="_first"),n===void 0&&(n="_last");var s=e[n],d;if(a)for(d=t[a];s&&s[a]>d;)s=s._prev;return s?(t._next=s._next,s._next=t):(t._next=e[i],e[i]=t),t._next?t._next._prev=t:e[n]=t,t._prev=s,t.parent=t._dp=e,t},_n=function(e,t,i,n){i===void 0&&(i="_first"),n===void 0&&(n="_last");var a=t._prev,s=t._next;a?a._next=s:e[i]===t&&(e[i]=s),s?s._prev=a:e[n]===t&&(e[n]=a),t._next=t._prev=t.parent=null},ei=function(e,t){e.parent&&(!t||e.parent.autoRemoveChildren)&&e.parent.remove(e),e._act=0},vi=function(e,t){if(e&&(!t||t._end>e._dur||t._start<0))for(var i=e;i;)i._dirty=1,i=i.parent;return e},EX=function(e){for(var t=e.parent;t&&t.parent;)t._dirty=1,t.totalDuration(),t=t.parent;return e},Qs=function(e,t,i,n){return e._startAt&&(Kt?e._startAt.revert(zn):e.vars.immediateRender&&!e.vars.autoRevert||e._startAt.render(t,!0,n))},BX=function l(e){return!e||e._ts&&l(e.parent)},to=function(e){return e._repeat?Oi(e._tTime,e=e.duration()+e._rDelay)*e:0},Oi=function(e,t){var i=Math.floor(e/=t);return e&&i===e?i-1:i},jn=function(e,t){return(e-t._start)*t._ts+(t._ts>=0?0:t._dirty?t.totalDuration():t._tDur)},Dn=function(e){return e._end=Nt(e._start+(e._tDur/Math.abs(e._ts||e._rts||st)||0))},On=function(e,t){var i=e._dp;return i&&i.smoothChildTiming&&e._ts&&(e._start=Nt(i._time-(e._ts>0?t/e._ts:((e._dirty?e.totalDuration():e._tDur)-t)/-e._ts)),Dn(e),i._dirty||vi(i,e)),e},eo=function(e,t){var i;if((t._time||t._initted&&!t._dur)&&(i=jn(e.rawTime(),t),(!t._dur||kl(0,t.totalDuration(),i)-t._tTime>st)&&t.render(i,!0)),vi(e,t)._dp&&e._initted&&e._time>=e._dur&&e._ts){if(e._dur<e.duration())for(i=e;i._dp;)i.rawTime()>=0&&i.totalTime(i._tTime),i=i._dp;e._zTime=-st}},ge=function(e,t,i,n){return t.parent&&ei(t),t._start=Nt((Pe(i)?i:i||e!==bt?de(e,i,t):e._time)+t._delay),t._end=Nt(t._start+(t.totalDuration()/Math.abs(t.timeScale())||0)),$r(e,t,"_first","_last",e._sort?"_start":0),_s(t)||(e._recent=t),n||eo(e,t),e._ts<0&&On(e,e._tTime),e},io=function(e,t){return(qt.ScrollTrigger||Ks("scrollTrigger",t))&&qt.ScrollTrigger.create(t,e)},lo=function(e,t,i,n,a){if(id(e,t,a),!e._initted)return 1;if(!i&&e._pt&&!Kt&&(e._dur&&e.vars.lazy!==!1||!e._dur&&e.vars.lazy)&&Qr!==te.frame)return ti.push(e),e._lazy=[a,n],1},QX=function l(e){var t=e.parent;return t&&t._ts&&t._initted&&!t._lock&&(t.rawTime()<0||l(t))},_s=function(e){var t=e.data;return t==="isFromStart"||t==="isStart"},_X=function(e,t,i,n){var a=e.ratio,s=t<0||!t&&(!e._start&&QX(e)&&!(!e._initted&&_s(e))||(e._ts<0||e._dp._ts<0)&&!_s(e))?0:1,d=e._rDelay,h=0,r,o,c;if(d&&e._repeat&&(h=kl(0,e._tDur,t),o=Oi(h,d),e._yoyo&&o&1&&(s=1-s),o!==Oi(e._tTime,d)&&(a=1-s,e.vars.repeatRefresh&&e._initted&&e.invalidate())),s!==a||Kt||n||e._zTime===st||!t&&e._zTime){if(!e._initted&&lo(e,t,n,i,h))return;for(c=e._zTime,e._zTime=t||(i?st:0),i||(i=t&&!c),e.ratio=s,e._from&&(s=1-s),e._time=0,e._tTime=h,r=e._pt;r;)r.r(s,r.d),r=r._next;t<0&&Qs(e,t,i,!0),e._onUpdate&&!i&&re(e,"onUpdate"),h&&e._repeat&&!i&&e.parent&&re(e,"onRepeat"),(t>=e._tDur||t<0)&&e.ratio===s&&(s&&ei(e,1),!i&&!Kt&&(re(e,s?"onComplete":"onReverseComplete",!0),e._prom&&e._prom()))}else e._zTime||(e._zTime=t)},jX=function(e,t,i){var n;if(i>t)for(n=e._first;n&&n._start<=i;){if(n.data==="isPause"&&n._start>t)return n;n=n._next}else for(n=e._last;n&&n._start>=i;){if(n.data==="isPause"&&n._start<t)return n;n=n._prev}},Ai=function(e,t,i,n){var a=e._repeat,s=Nt(t)||0,d=e._tTime/e._tDur;return d&&!n&&(e._time*=s/e._dur),e._dur=s,e._tDur=a?a<0?1e10:Nt(s*(a+1)+e._rDelay*a):s,d>0&&!n&&On(e,e._tTime=e._tDur*d),e.parent&&Dn(e),i||vi(e.parent,e),e},no=function(e){return e instanceof _t?vi(e):Ai(e,e._dur)},DX={_start:0,endTime:Cl,totalDuration:Cl},de=function l(e,t,i){var n=e.labels,a=e._recent||DX,s=e.duration()>=ne?a.endTime(!1):e._dur,d,h,r;return Ft(t)&&(isNaN(t)||t in n)?(h=t.charAt(0),r=t.substr(-1)==="%",d=t.indexOf("="),h==="<"||h===">"?(d>=0&&(t=t.replace(/=/,"")),(h==="<"?a._start:a.endTime(a._repeat>=0))+(parseFloat(t.substr(1))||0)*(r?(d<0?a:i).totalDuration()/100:1)):d<0?(t in n||(n[t]=s),n[t]):(h=parseFloat(t.charAt(d-1)+t.substr(d+1)),r&&i&&(h=h/100*(wt(i)?i[0]:i).totalDuration()),d>1?l(e,t.substr(0,d-1),i)+h:s+h)):t==null?s:+t},Ul=function(e,t,i){var n=Pe(t[1]),a=(n?2:1)+(e<2?0:1),s=t[a],d,h;if(n&&(s.duration=t[1]),s.parent=i,e){for(d=s,h=i;h&&!("immediateRender"in d);)d=h.vars.defaults||{},h=Bt(h.vars.inherit)&&h.parent;s.immediateRender=Bt(d.immediateRender),e<2?s.runBackwards=1:s.startAt=t[a-1]}return new gt(t[0],s,t[a+1])},ii=function(e,t){return e||e===0?t(e):t},kl=function(e,t,i){return i<e?e:i>t?t:i},Pt=function(e,t){return!Ft(e)||!(t=NX.exec(e))?"":t[1]},OX=function(e,t,i){return ii(i,function(n){return kl(e,t,n)})},js=[].slice,ao=function(e,t){return e&&Ye(e)&&"length"in e&&(!t&&!e.length||e.length-1 in e&&Ye(e[0]))&&!e.nodeType&&e!==ae},AX=function(e,t,i){return i===void 0&&(i=[]),e.forEach(function(n){var a;return Ft(n)&&!t||ao(n,1)?(a=i).push.apply(a,he(n)):i.push(n)})||i},he=function(e,t,i){return St&&!t&&St.selector?St.selector(e):Ft(e)&&!i&&(Ns||!$i())?js.call((t||Ms).querySelectorAll(e),0):wt(e)?AX(e,i):ao(e)?js.call(e,0):e?[e]:[]},Ds=function(e){return e=he(e)[0]||Pn("Invalid scope")||{},function(t){var i=e.current||e.nativeElement||e;return he(t,i.querySelectorAll?i:i===e?Pn("Invalid scope")||Ms.createElement("div"):e)}},so=function(e){return e.sort(function(){return .5-Math.random()})},ho=function(e){if(Vt(e))return e;var t=Ye(e)?e:{each:e},i=Ii(t.ease),n=t.from||0,a=parseFloat(t.base)||0,s={},d=n>0&&n<1,h=isNaN(n)||d,r=t.axis,o=n,c=n;return Ft(n)?o=c={center:.5,edges:.5,end:1}[n]||0:!d&&h&&(o=n[0],c=n[1]),function(u,m,b){var Z=(b||t).length,p=s[Z],G,X,y,R,V,W,f,x,L;if(!p){if(L=t.grid==="auto"?0:(t.grid||[1,ne])[1],!L){for(f=-ne;f<(f=b[L++].getBoundingClientRect().left)&&L<Z;);L--}for(p=s[Z]=[],G=h?Math.min(L,Z)*o-.5:n%L,X=L===ne?0:h?Z*c/L-.5:n/L|0,f=0,x=ne,W=0;W<Z;W++)y=W%L-G,R=X-(W/L|0),p[W]=V=r?Math.abs(r==="y"?R:y):kr(y*y+R*R),V>f&&(f=V),V<x&&(x=V);n==="random"&&so(p),p.max=f-x,p.min=x,p.v=Z=(parseFloat(t.amount)||parseFloat(t.each)*(L>Z?Z-1:r?r==="y"?Z/L:L:Math.max(L,Z/L))||0)*(n==="edges"?-1:1),p.b=Z<0?a-Z:a,p.u=Pt(t.amount||t.each)||0,i=i&&Z<0?Xo(i):i}return Z=(p[u]-p.min)/p.max||0,Nt(p.b+(i?i(Z):Z)*p.v)+p.u}},Os=function(e){var t=Math.pow(10,((e+"").split(".")[1]||"").length);return function(i){var n=Nt(Math.round(parseFloat(i)/e)*e*t);return(n-n%1)/t+(Pe(i)?0:Pt(i))}},ro=function(e,t){var i=wt(e),n,a;return!i&&Ye(e)&&(n=i=e.radius||ne,e.values?(e=he(e.values),(a=!Pe(e[0]))&&(n*=n)):e=Os(e.increment)),ii(t,i?Vt(e)?function(s){return a=e(s),Math.abs(a-s)<=n?a:s}:function(s){for(var d=parseFloat(a?s.x:s),h=parseFloat(a?s.y:0),r=ne,o=0,c=e.length,u,m;c--;)a?(u=e[c].x-d,m=e[c].y-h,u=u*u+m*m):u=Math.abs(e[c]-d),u<r&&(r=u,o=c);return o=!n||r<=n?e[o]:s,a||o===s||Pe(s)?o:o+Pt(s)}:Os(e))},oo=function(e,t,i,n){return ii(wt(e)?!t:i===!0?!!(i=0):!n,function(){return wt(e)?e[~~(Math.random()*e.length)]:(i=i||1e-5)&&(n=i<1?Math.pow(10,(i+"").length-2):1)&&Math.floor(Math.round((e-i/2+Math.random()*(t-e+i*.99))/i)*i*n)/n})},qX=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return function(n){return t.reduce(function(a,s){return s(a)},n)}},$X=function(e,t){return function(i){return e(parseFloat(i))+(t||Pt(i))}},ty=function(e,t,i){return uo(e,t,0,1,i)},co=function(e,t,i){return ii(i,function(n){return e[~~t(n)]})},ey=function l(e,t,i){var n=t-e;return wt(e)?co(e,l(0,e.length),t):ii(i,function(a){return(n+(a-e)%n)%n+e})},iy=function l(e,t,i){var n=t-e,a=n*2;return wt(e)?co(e,l(0,e.length-1),t):ii(i,function(s){return s=(a+(s-e)%a)%a||0,e+(s>n?a-s:s)})},Nl=function(e){for(var t=0,i="",n,a,s,d;~(n=e.indexOf("random(",t));)s=e.indexOf(")",n),d=e.charAt(n+7)==="[",a=e.substr(n+7,s-n-7).match(d?Pr:Us),i+=e.substr(t,n-t)+oo(d?a:+a[0],d?0:+a[1],+a[2]||1e-5),t=s+1;return i+e.substr(t,e.length-t)},uo=function(e,t,i,n,a){var s=t-e,d=n-i;return ii(a,function(h){return i+((h-e)/s*d||0)})},ly=function l(e,t,i,n){var a=isNaN(e+t)?0:function(m){return(1-m)*e+m*t};if(!a){var s=Ft(e),d={},h,r,o,c,u;if(i===!0&&(n=1)&&(i=null),s)e={p:e},t={p:t};else if(wt(e)&&!wt(t)){for(o=[],c=e.length,u=c-2,r=1;r<c;r++)o.push(l(e[r-1],e[r]));c--,a=function(b){b*=c;var Z=Math.min(u,~~b);return o[Z](b-Z)},i=t}else n||(e=Si(wt(e)?[]:{},e));if(!o){for(h in t)td.call(d,e,h,"get",t[h]);a=function(b){return ad(b,d)||(s?e.p:e)}}}return ii(i,a)},mo=function(e,t,i){var n=e.labels,a=ne,s,d,h;for(s in n)d=n[s]-t,d<0==!!i&&d&&a>(d=Math.abs(d))&&(h=s,a=d);return h},re=function(e,t,i){var n=e.vars,a=n[t],s=St,d=e._ctx,h,r,o;if(a)return h=n[t+"Params"],r=n.callbackScope||e,i&&ti.length&&Bn(),d&&(St=d),o=h?a.apply(r,h):a.call(r),St=s,o},Ml=function(e){return ei(e),e.scrollTrigger&&e.scrollTrigger.kill(!!Kt),e.progress()<1&&re(e,"onInterrupt"),e},qi,ny=function(e){e=!e.name&&e.default||e;var t=e.name,i=Vt(e),n=t&&!i&&e.init?function(){this._props=[]}:e,a={init:Cl,render:ad,add:td,kill:Vy,modifier:yy,rawVars:0},s={targetTest:0,get:0,getSetter:nd,aliases:{},register:0};if($i(),e!==n){if($t[t])return;se(n,se(Qn(e,a),s)),Si(n.prototype,Si(a,Qn(e,s))),$t[n.prop=t]=n,e.targetTest&&(En.push(n),ws[t]=1),t=(t==="css"?"CSS":t.charAt(0).toUpperCase()+t.substr(1))+"Plugin"}Br(t,n),e.register&&e.register(ee,n,jt)},dt=255,Kl={aqua:[0,dt,dt],lime:[0,dt,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,dt],navy:[0,0,128],white:[dt,dt,dt],olive:[128,128,0],yellow:[dt,dt,0],orange:[dt,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[dt,0,0],pink:[dt,192,203],cyan:[0,dt,dt],transparent:[dt,dt,dt,0]},As=function(e,t,i){return e+=e<0?1:e>1?-1:0,(e*6<1?t+(i-t)*e*6:e<.5?i:e*3<2?t+(i-t)*(2/3-e)*6:t)*dt+.5|0},Zo=function(e,t,i){var n=e?Pe(e)?[e>>16,e>>8&dt,e&dt]:0:Kl.black,a,s,d,h,r,o,c,u,m,b;if(!n){if(e.substr(-1)===","&&(e=e.substr(0,e.length-1)),Kl[e])n=Kl[e];else if(e.charAt(0)==="#"){if(e.length<6&&(a=e.charAt(1),s=e.charAt(2),d=e.charAt(3),e="#"+a+a+s+s+d+d+(e.length===5?e.charAt(4)+e.charAt(4):"")),e.length===9)return n=parseInt(e.substr(1,6),16),[n>>16,n>>8&dt,n&dt,parseInt(e.substr(7),16)/255];e=parseInt(e.substr(1),16),n=[e>>16,e>>8&dt,e&dt]}else if(e.substr(0,3)==="hsl"){if(n=b=e.match(Us),!t)h=+n[0]%360/360,r=+n[1]/100,o=+n[2]/100,s=o<=.5?o*(r+1):o+r-o*r,a=o*2-s,n.length>3&&(n[3]*=1),n[0]=As(h+1/3,a,s),n[1]=As(h,a,s),n[2]=As(h-1/3,a,s);else if(~e.indexOf("="))return n=e.match(Kr),i&&n.length<4&&(n[3]=1),n}else n=e.match(Us)||Kl.transparent;n=n.map(Number)}return t&&!b&&(a=n[0]/dt,s=n[1]/dt,d=n[2]/dt,c=Math.max(a,s,d),u=Math.min(a,s,d),o=(c+u)/2,c===u?h=r=0:(m=c-u,r=o>.5?m/(2-c-u):m/(c+u),h=c===a?(s-d)/m+(s<d?6:0):c===s?(d-a)/m+2:(a-s)/m+4,h*=60),n[0]=~~(h+.5),n[1]=~~(r*100+.5),n[2]=~~(o*100+.5)),i&&n.length<4&&(n[3]=1),n},bo=function(e){var t=[],i=[],n=-1;return e.split(li).forEach(function(a){var s=a.match(ji)||[];t.push.apply(t,s),i.push(n+=s.length+1)}),t.c=i,t},po=function(e,t,i){var n="",a=(e+n).match(li),s=t?"hsla(":"rgba(",d=0,h,r,o,c;if(!a)return e;if(a=a.map(function(u){return(u=Zo(u,t,1))&&s+(t?u[0]+","+u[1]+"%,"+u[2]+"%,"+u[3]:u.join(","))+")"}),i&&(o=bo(e),h=i.c,h.join(n)!==o.c.join(n)))for(r=e.replace(li,"1").split(ji),c=r.length-1;d<c;d++)n+=r[d]+(~h.indexOf(d)?a.shift()||s+"0,0,0,0)":(o.length?o:a.length?a:i).shift());if(!r)for(r=e.split(li),c=r.length-1;d<c;d++)n+=r[d]+a[d];return n+r[c]},li=function(){var l="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b",e;for(e in Kl)l+="|"+e+"\\b";return new RegExp(l+")","gi")}(),ay=/hsl[a]?\(/,Go=function(e){var t=e.join(" "),i;if(li.lastIndex=0,li.test(t))return i=ay.test(t),e[1]=po(e[1],i),e[0]=po(e[0],i,bo(e[1])),!0},wl,te=function(){var l=Date.now,e=500,t=33,i=l(),n=i,a=1e3/240,s=a,d=[],h,r,o,c,u,m,b=function Z(p){var G=l()-n,X=p===!0,y,R,V,W;if(G>e&&(i+=G-t),n+=G,V=n-i,y=V-s,(y>0||X)&&(W=++c.frame,u=V-c.time*1e3,c.time=V=V/1e3,s+=y+(y>=a?4:a-y),R=1),X||(h=r(Z)),R)for(m=0;m<d.length;m++)d[m](V,u,W,p)};return c={time:0,frame:0,tick:function(){b(!0)},deltaRatio:function(p){return u/(1e3/(p||60))},wake:function(){zr&&(!Ns&&Nr()&&(ae=Ns=window,Ms=ae.document||{},qt.gsap=ee,(ae.gsapVersions||(ae.gsapVersions=[])).push(ee.version),Er(wn||ae.GreenSockGlobals||!ae.gsap&&ae||{}),o=ae.requestAnimationFrame),h&&c.sleep(),r=o||function(p){return setTimeout(p,s-c.time*1e3+1|0)},wl=1,b(2))},sleep:function(){(o?ae.cancelAnimationFrame:clearTimeout)(h),wl=0,r=Cl},lagSmoothing:function(p,G){e=p||1/0,t=Math.min(G||33,e)},fps:function(p){a=1e3/(p||240),s=c.time*1e3+a},add:function(p,G,X){var y=G?function(R,V,W,f){p(R,V,W,f),c.remove(y)}:p;return c.remove(p),d[X?"unshift":"push"](y),$i(),y},remove:function(p,G){~(G=d.indexOf(p))&&d.splice(G,1)&&m>=G&&m--},_listeners:d},c}(),$i=function(){return!wl&&te.wake()},O={},sy=/^[\d.\-M][\d.\-,\s]/,dy=/["']/g,hy=function(e){for(var t={},i=e.substr(1,e.length-3).split(":"),n=i[0],a=1,s=i.length,d,h,r;a<s;a++)h=i[a],d=a!==s-1?h.lastIndexOf(","):h.length,r=h.substr(0,d),t[n]=isNaN(r)?r.replace(dy,"").trim():+r,n=h.substr(d+1).trim();return t},ry=function(e){var t=e.indexOf("(")+1,i=e.indexOf(")"),n=e.indexOf("(",t);return e.substring(t,~n&&n<i?e.indexOf(")",i+1):i)},oy=function(e){var t=(e+"").split("("),i=O[t[0]];return i&&t.length>1&&i.config?i.config.apply(null,~e.indexOf("{")?[hy(t[1])]:ry(e).split(",").map(Or)):O._CE&&sy.test(e)?O._CE("",e):i},Xo=function(e){return function(t){return 1-e(1-t)}},yo=function l(e,t){for(var i=e._first,n;i;)i instanceof _t?l(i,t):i.vars.yoyoEase&&(!i._yoyo||!i._repeat)&&i._yoyo!==t&&(i.timeline?l(i.timeline,t):(n=i._ease,i._ease=i._yEase,i._yEase=n,i._yoyo=t)),i=i._next},Ii=function(e,t){return e&&(Vt(e)?e:O[e]||oy(e))||t},Yi=function(e,t,i,n){i===void 0&&(i=function(h){return 1-t(1-h)}),n===void 0&&(n=function(h){return h<.5?t(h*2)/2:1-t((1-h)*2)/2});var a={easeIn:t,easeOut:i,easeInOut:n},s;return Qt(e,function(d){O[d]=qt[d]=a,O[s=d.toLowerCase()]=i;for(var h in a)O[s+(h==="easeIn"?".in":h==="easeOut"?".out":".inOut")]=O[d+"."+h]=a[h]}),a},Vo=function(e){return function(t){return t<.5?(1-e(1-t*2))/2:.5+e((t-.5)*2)/2}},qs=function l(e,t,i){var n=t>=1?t:1,a=(i||(e?.3:.45))/(t<1?t:1),s=a/Cs*(Math.asin(1/n)||0),d=function(o){return o===1?1:n*Math.pow(2,-10*o)*kX((o-s)*a)+1},h=e==="out"?d:e==="in"?function(r){return 1-d(1-r)}:Vo(d);return a=Cs/a,h.config=function(r,o){return l(e,r,o)},h},$s=function l(e,t){t===void 0&&(t=1.70158);var i=function(s){return s?--s*s*((t+1)*s+t)+1:0},n=e==="out"?i:e==="in"?function(a){return 1-i(1-a)}:Vo(i);return n.config=function(a){return l(e,a)},n};Qt("Linear,Quad,Cubic,Quart,Quint,Strong",function(l,e){var t=e<5?e+1:e;Yi(l+",Power"+(t-1),e?function(i){return Math.pow(i,t)}:function(i){return i},function(i){return 1-Math.pow(1-i,t)},function(i){return i<.5?Math.pow(i*2,t)/2:1-Math.pow((1-i)*2,t)/2})}),O.Linear.easeNone=O.none=O.Linear.easeIn,Yi("Elastic",qs("in"),qs("out"),qs()),function(l,e){var t=1/e,i=2*t,n=2.5*t,a=function(d){return d<t?l*d*d:d<i?l*Math.pow(d-1.5/e,2)+.75:d<n?l*(d-=2.25/e)*d+.9375:l*Math.pow(d-2.625/e,2)+.984375};Yi("Bounce",function(s){return 1-a(1-s)},a)}(7.5625,2.75),Yi("Expo",function(l){return l?Math.pow(2,10*(l-1)):0}),Yi("Circ",function(l){return-(kr(1-l*l)-1)}),Yi("Sine",function(l){return l===1?1:-UX(l*CX)+1}),Yi("Back",$s("in"),$s("out"),$s()),O.SteppedEase=O.steps=qt.SteppedEase={config:function(e,t){e===void 0&&(e=1);var i=1/e,n=e+(t?0:1),a=t?1:0,s=1-st;return function(d){return((n*kl(0,s,d)|0)+a)*i}}},_i.ease=O["quad.out"],Qt("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt",function(l){return Es+=l+","+l+"Params,"});var Ro=function(e,t){this.id=FX++,e._gsap=this,this.target=e,this.harness=t,this.get=t?t.get:jr,this.set=t?t.getSetter:nd},tl=function(){function l(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Ai(this,+t.duration,1,1),this.data=t.data,St&&(this._ctx=St,St.data.push(this)),wl||te.wake()}var e=l.prototype;return e.delay=function(i){return i||i===0?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+i-this._delay),this._delay=i,this):this._delay},e.duration=function(i){return arguments.length?this.totalDuration(this._repeat>0?i+(i+this._rDelay)*this._repeat:i):this.totalDuration()&&this._dur},e.totalDuration=function(i){return arguments.length?(this._dirty=0,Ai(this,this._repeat<0?i:(i-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(i,n){if($i(),!arguments.length)return this._tTime;var a=this._dp;if(a&&a.smoothChildTiming&&this._ts){for(On(this,i),!a._dp||a.parent||eo(a,this);a&&a.parent;)a.parent._time!==a._start+(a._ts>=0?a._tTime/a._ts:(a.totalDuration()-a._tTime)/-a._ts)&&a.totalTime(a._tTime,!0),a=a.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&i<this._tDur||this._ts<0&&i>0||!this._tDur&&!i)&&ge(this._dp,this,this._start-this._delay)}return(this._tTime!==i||!this._dur&&!n||this._initted&&Math.abs(this._zTime)===st||!i&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=i),Dr(this,i,n)),this},e.time=function(i,n){return arguments.length?this.totalTime(Math.min(this.totalDuration(),i+to(this))%(this._dur+this._rDelay)||(i?this._dur:0),n):this._time},e.totalProgress=function(i,n){return arguments.length?this.totalTime(this.totalDuration()*i,n):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},e.progress=function(i,n){return arguments.length?this.totalTime(this.duration()*(this._yoyo&&!(this.iteration()&1)?1-i:i)+to(this),n):this.duration()?Math.min(1,this._time/this._dur):this.ratio},e.iteration=function(i,n){var a=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(i-1)*a,n):this._repeat?Oi(this._tTime,a)+1:1},e.timeScale=function(i){if(!arguments.length)return this._rts===-st?0:this._rts;if(this._rts===i)return this;var n=this.parent&&this._ts?jn(this.parent._time,this):this._tTime;return this._rts=+i||0,this._ts=this._ps||i===-st?0:this._rts,this.totalTime(kl(-this._delay,this._tDur,n),!0),Dn(this),EX(this)},e.paused=function(i){return arguments.length?(this._ps!==i&&(this._ps=i,i?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):($i(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,this.progress()===1&&Math.abs(this._zTime)!==st&&(this._tTime-=st)))),this):this._ps},e.startTime=function(i){if(arguments.length){this._start=i;var n=this.parent||this._dp;return n&&(n._sort||!this.parent)&&ge(n,this,i-this._delay),this}return this._start},e.endTime=function(i){return this._start+(Bt(i)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},e.rawTime=function(i){var n=this.parent||this._dp;return n?i&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?jn(n.rawTime(i),this):this._tTime:this._tTime},e.revert=function(i){i===void 0&&(i=KX);var n=Kt;return Kt=i,(this._initted||this._startAt)&&(this.timeline&&this.timeline.revert(i),this.totalTime(-.01,i.suppressEvents)),this.data!=="nested"&&i.kill!==!1&&this.kill(),Kt=n,this},e.globalTime=function(i){for(var n=this,a=arguments.length?i:n.rawTime();n;)a=n._start+a/(n._ts||1),n=n._dp;return!this.parent&&this._sat?this._sat.vars.immediateRender?-1:this._sat.globalTime(i):a},e.repeat=function(i){return arguments.length?(this._repeat=i===1/0?-2:i,no(this)):this._repeat===-2?1/0:this._repeat},e.repeatDelay=function(i){if(arguments.length){var n=this._time;return this._rDelay=i,no(this),n?this.time(n):this}return this._rDelay},e.yoyo=function(i){return arguments.length?(this._yoyo=i,this):this._yoyo},e.seek=function(i,n){return this.totalTime(de(this,i),Bt(n))},e.restart=function(i,n){return this.play().totalTime(i?-this._delay:0,Bt(n))},e.play=function(i,n){return i!=null&&this.seek(i,n),this.reversed(!1).paused(!1)},e.reverse=function(i,n){return i!=null&&this.seek(i||this.totalDuration(),n),this.reversed(!0).paused(!1)},e.pause=function(i,n){return i!=null&&this.seek(i,n),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(i){return arguments.length?(!!i!==this.reversed()&&this.timeScale(-this._rts||(i?-st:0)),this):this._rts<0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-st,this},e.isActive=function(){var i=this.parent||this._dp,n=this._start,a;return!!(!i||this._ts&&this._initted&&i.isActive()&&(a=i.rawTime(!0))>=n&&a<this.endTime(!0)-st)},e.eventCallback=function(i,n,a){var s=this.vars;return arguments.length>1?(n?(s[i]=n,a&&(s[i+"Params"]=a),i==="onUpdate"&&(this._onUpdate=n)):delete s[i],this):s[i]},e.then=function(i){var n=this;return new Promise(function(a){var s=Vt(i)?i:Ar,d=function(){var r=n.then;n.then=null,Vt(s)&&(s=s(n))&&(s.then||s===n)&&(n.then=r),a(s),n.then=r};n._initted&&n.totalProgress()===1&&n._ts>=0||!n._tTime&&n._ts<0?d():n._prom=d})},e.kill=function(){Ml(this)},l}();se(tl.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-st,_prom:0,_ps:!1,_rts:1});var _t=function(l){Ur(e,l);function e(i,n){var a;return i===void 0&&(i={}),a=l.call(this,i)||this,a.labels={},a.smoothChildTiming=!!i.smoothChildTiming,a.autoRemoveChildren=!!i.autoRemoveChildren,a._sort=Bt(i.sortChildren),bt&&ge(i.parent||bt,we(a),n),i.reversed&&a.reverse(),i.paused&&a.paused(!0),i.scrollTrigger&&io(we(a),i.scrollTrigger),a}var t=e.prototype;return t.to=function(n,a,s){return Ul(0,arguments,this),this},t.from=function(n,a,s){return Ul(1,arguments,this),this},t.fromTo=function(n,a,s,d){return Ul(2,arguments,this),this},t.set=function(n,a,s){return a.duration=0,a.parent=this,Fl(a).repeatDelay||(a.repeat=0),a.immediateRender=!!a.immediateRender,new gt(n,a,de(this,s),1),this},t.call=function(n,a,s){return ge(this,gt.delayedCall(0,n,a),s)},t.staggerTo=function(n,a,s,d,h,r,o){return s.duration=a,s.stagger=s.stagger||d,s.onComplete=r,s.onCompleteParams=o,s.parent=this,new gt(n,s,de(this,h)),this},t.staggerFrom=function(n,a,s,d,h,r,o){return s.runBackwards=1,Fl(s).immediateRender=Bt(s.immediateRender),this.staggerTo(n,a,s,d,h,r,o)},t.staggerFromTo=function(n,a,s,d,h,r,o,c){return d.startAt=s,Fl(d).immediateRender=Bt(d.immediateRender),this.staggerTo(n,a,d,h,r,o,c)},t.render=function(n,a,s){var d=this._time,h=this._dirty?this.totalDuration():this._tDur,r=this._dur,o=n<=0?0:Nt(n),c=this._zTime<0!=n<0&&(this._initted||!r),u,m,b,Z,p,G,X,y,R,V,W,f;if(this!==bt&&o>h&&n>=0&&(o=h),o!==this._tTime||s||c){if(d!==this._time&&r&&(o+=this._time-d,n+=this._time-d),u=o,R=this._start,y=this._ts,G=!y,c&&(r||(d=this._zTime),(n||!a)&&(this._zTime=n)),this._repeat){if(W=this._yoyo,p=r+this._rDelay,this._repeat<-1&&n<0)return this.totalTime(p*100+n,a,s);if(u=Nt(o%p),o===h?(Z=this._repeat,u=r):(Z=~~(o/p),Z&&Z===o/p&&(u=r,Z--),u>r&&(u=r)),V=Oi(this._tTime,p),!d&&this._tTime&&V!==Z&&(V=Z),W&&Z&1&&(u=r-u,f=1),Z!==V&&!this._lock){var x=W&&V&1,L=x===(W&&Z&1);if(Z<V&&(x=!x),d=x?0:r,this._lock=1,this.render(d||(f?0:Nt(Z*p)),a,!r)._lock=0,this._tTime=o,!a&&this.parent&&re(this,"onRepeat"),this.vars.repeatRefresh&&!f&&(this.invalidate()._lock=1),d&&d!==this._time||G!==!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(r=this._dur,h=this._tDur,L&&(this._lock=2,d=x?r:-1e-4,this.render(d,!0),this.vars.repeatRefresh&&!f&&this.invalidate()),this._lock=0,!this._ts&&!G)return this;yo(this,f)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(X=jX(this,Nt(d),Nt(u)),X&&(o-=u-(u=X._start))),this._tTime=o,this._time=u,this._act=!y,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=n,d=0),!d&&u&&!a&&(re(this,"onStart"),this._tTime!==o))return this;if(u>=d&&n>=0)for(m=this._first;m;){if(b=m._next,(m._act||u>=m._start)&&m._ts&&X!==m){if(m.parent!==this)return this.render(n,a,s);if(m.render(m._ts>0?(u-m._start)*m._ts:(m._dirty?m.totalDuration():m._tDur)+(u-m._start)*m._ts,a,s),u!==this._time||!this._ts&&!G){X=0,b&&(o+=this._zTime=-st);break}}m=b}else{m=this._last;for(var S=n<0?n:u;m;){if(b=m._prev,(m._act||S<=m._end)&&m._ts&&X!==m){if(m.parent!==this)return this.render(n,a,s);if(m.render(m._ts>0?(S-m._start)*m._ts:(m._dirty?m.totalDuration():m._tDur)+(S-m._start)*m._ts,a,s||Kt&&(m._initted||m._startAt)),u!==this._time||!this._ts&&!G){X=0,b&&(o+=this._zTime=S?-st:st);break}}m=b}}if(X&&!a&&(this.pause(),X.render(u>=d?0:-st)._zTime=u>=d?1:-1,this._ts))return this._start=R,Dn(this),this.render(n,a,s);this._onUpdate&&!a&&re(this,"onUpdate",!0),(o===h&&this._tTime>=this.totalDuration()||!o&&d)&&(R===this._start||Math.abs(y)!==Math.abs(this._ts))&&(this._lock||((n||!r)&&(o===h&&this._ts>0||!o&&this._ts<0)&&ei(this,1),!a&&!(n<0&&!d)&&(o||d||!h)&&(re(this,o===h&&n>=0?"onComplete":"onReverseComplete",!0),this._prom&&!(o<h&&this.timeScale()>0)&&this._prom())))}return this},t.add=function(n,a){var s=this;if(Pe(a)||(a=de(this,a,n)),!(n instanceof tl)){if(wt(n))return n.forEach(function(d){return s.add(d,a)}),this;if(Ft(n))return this.addLabel(n,a);if(Vt(n))n=gt.delayedCall(0,n);else return this}return this!==n?ge(this,n,a):this},t.getChildren=function(n,a,s,d){n===void 0&&(n=!0),a===void 0&&(a=!0),s===void 0&&(s=!0),d===void 0&&(d=-ne);for(var h=[],r=this._first;r;)r._start>=d&&(r instanceof gt?a&&h.push(r):(s&&h.push(r),n&&h.push.apply(h,r.getChildren(!0,a,s)))),r=r._next;return h},t.getById=function(n){for(var a=this.getChildren(1,1,1),s=a.length;s--;)if(a[s].vars.id===n)return a[s]},t.remove=function(n){return Ft(n)?this.removeLabel(n):Vt(n)?this.killTweensOf(n):(_n(this,n),n===this._recent&&(this._recent=this._last),vi(this))},t.totalTime=function(n,a){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=Nt(te.time-(this._ts>0?n/this._ts:(this.totalDuration()-n)/-this._ts))),l.prototype.totalTime.call(this,n,a),this._forcing=0,this):this._tTime},t.addLabel=function(n,a){return this.labels[n]=de(this,a),this},t.removeLabel=function(n){return delete this.labels[n],this},t.addPause=function(n,a,s){var d=gt.delayedCall(0,a||Cl,s);return d.data="isPause",this._hasPause=1,ge(this,d,de(this,n))},t.removePause=function(n){var a=this._first;for(n=de(this,n);a;)a._start===n&&a.data==="isPause"&&ei(a),a=a._next},t.killTweensOf=function(n,a,s){for(var d=this.getTweensOf(n,s),h=d.length;h--;)ni!==d[h]&&d[h].kill(n,a);return this},t.getTweensOf=function(n,a){for(var s=[],d=he(n),h=this._first,r=Pe(a),o;h;)h instanceof gt?wX(h._targets,d)&&(r?(!ni||h._initted&&h._ts)&&h.globalTime(0)<=a&&h.globalTime(h.totalDuration())>a:!a||h.isActive())&&s.push(h):(o=h.getTweensOf(d,a)).length&&s.push.apply(s,o),h=h._next;return s},t.tweenTo=function(n,a){a=a||{};var s=this,d=de(s,n),h=a,r=h.startAt,o=h.onStart,c=h.onStartParams,u=h.immediateRender,m,b=gt.to(s,se({ease:a.ease||"none",lazy:!1,immediateRender:!1,time:d,overwrite:"auto",duration:a.duration||Math.abs((d-(r&&"time"in r?r.time:s._time))/s.timeScale())||st,onStart:function(){if(s.pause(),!m){var p=a.duration||Math.abs((d-(r&&"time"in r?r.time:s._time))/s.timeScale());b._dur!==p&&Ai(b,p,0,1).render(b._time,!0,!0),m=1}o&&o.apply(b,c||[])}},a));return u?b.render(0):b},t.tweenFromTo=function(n,a,s){return this.tweenTo(a,se({startAt:{time:de(this,n)}},s))},t.recent=function(){return this._recent},t.nextLabel=function(n){return n===void 0&&(n=this._time),mo(this,de(this,n))},t.previousLabel=function(n){return n===void 0&&(n=this._time),mo(this,de(this,n),1)},t.currentLabel=function(n){return arguments.length?this.seek(n,!0):this.previousLabel(this._time+st)},t.shiftChildren=function(n,a,s){s===void 0&&(s=0);for(var d=this._first,h=this.labels,r;d;)d._start>=s&&(d._start+=n,d._end+=n),d=d._next;if(a)for(r in h)h[r]>=s&&(h[r]+=n);return vi(this)},t.invalidate=function(n){var a=this._first;for(this._lock=0;a;)a.invalidate(n),a=a._next;return l.prototype.invalidate.call(this,n)},t.clear=function(n){n===void 0&&(n=!0);for(var a=this._first,s;a;)s=a._next,this.remove(a),a=s;return this._dp&&(this._time=this._tTime=this._pTime=0),n&&(this.labels={}),vi(this)},t.totalDuration=function(n){var a=0,s=this,d=s._last,h=ne,r,o,c;if(arguments.length)return s.timeScale((s._repeat<0?s.duration():s.totalDuration())/(s.reversed()?-n:n));if(s._dirty){for(c=s.parent;d;)r=d._prev,d._dirty&&d.totalDuration(),o=d._start,o>h&&s._sort&&d._ts&&!s._lock?(s._lock=1,ge(s,d,o-d._delay,1)._lock=0):h=o,o<0&&d._ts&&(a-=o,(!c&&!s._dp||c&&c.smoothChildTiming)&&(s._start+=o/s._ts,s._time-=o,s._tTime-=o),s.shiftChildren(-o,!1,-1/0),h=0),d._end>a&&d._ts&&(a=d._end),d=r;Ai(s,s===bt&&s._time>a?s._time:a,1,1),s._dirty=0}return s._tDur},e.updateRoot=function(n){if(bt._ts&&(Dr(bt,jn(n,bt)),Qr=te.frame),te.frame>=_r){_r+=At.autoSleep||120;var a=bt._first;if((!a||!a._ts)&&At.autoSleep&&te._listeners.length<2){for(;a&&!a._ts;)a=a._next;a||te.sleep()}}},e}(tl);se(_t.prototype,{_lock:0,_hasPause:0,_forcing:0});var cy=function(e,t,i,n,a,s,d){var h=new jt(this._pt,e,t,0,1,vo,null,a),r=0,o=0,c,u,m,b,Z,p,G,X;for(h.b=i,h.e=n,i+="",n+="",(G=~n.indexOf("random("))&&(n=Nl(n)),s&&(X=[i,n],s(X,e,t),i=X[0],n=X[1]),u=i.match(ks)||[];c=ks.exec(n);)b=c[0],Z=n.substring(r,c.index),m?m=(m+1)%5:Z.substr(-5)==="rgba("&&(m=1),b!==u[o++]&&(p=parseFloat(u[o-1])||0,h._pt={_next:h._pt,p:Z||o===1?Z:",",s:p,c:b.charAt(1)==="="?Di(p,b)-p:parseFloat(b)-p,m:m&&m<4?Math.round:0},r=ks.lastIndex);return h.c=r<n.length?n.substring(r,n.length):"",h.fp=d,(wr.test(n)||G)&&(h.e=0),this._pt=h,h},td=function(e,t,i,n,a,s,d,h,r,o){Vt(n)&&(n=n(a||0,e,s));var c=e[t],u=i!=="get"?i:Vt(c)?r?e[t.indexOf("set")||!Vt(e["get"+t.substr(3)])?t:"get"+t.substr(3)](r):e[t]():c,m=Vt(c)?r?py:xo:ld,b;if(Ft(n)&&(~n.indexOf("random(")&&(n=Nl(n)),n.charAt(1)==="="&&(b=Di(u,n)+(Pt(u)||0),(b||b===0)&&(n=b))),!o||u!==n||ed)return!isNaN(u*n)&&n!==""?(b=new jt(this._pt,e,t,+u||0,n-(u||0),typeof c=="boolean"?Xy:So,0,m),r&&(b.fp=r),d&&b.modifier(d,this,e),this._pt=b):(!c&&!(t in e)&&Ks(t,n),cy.call(this,e,t,u,n,m,h||At.stringFilter,r))},uy=function(e,t,i,n,a){if(Vt(e)&&(e=Pl(e,a,t,i,n)),!Ye(e)||e.style&&e.nodeType||wt(e)||Mr(e))return Ft(e)?Pl(e,a,t,i,n):e;var s={},d;for(d in e)s[d]=Pl(e[d],a,t,i,n);return s},Wo=function(e,t,i,n,a,s){var d,h,r,o;if($t[e]&&(d=new $t[e]).init(a,d.rawVars?t[e]:uy(t[e],n,a,s,i),i,n,s)!==!1&&(i._pt=h=new jt(i._pt,a,e,0,1,d.render,d,0,d.priority),i!==qi))for(r=i._ptLookup[i._targets.indexOf(a)],o=d._props.length;o--;)r[d._props[o]]=h;return d},ni,ed,id=function l(e,t,i){var n=e.vars,a=n.ease,s=n.startAt,d=n.immediateRender,h=n.lazy,r=n.onUpdate,o=n.onUpdateParams,c=n.callbackScope,u=n.runBackwards,m=n.yoyoEase,b=n.keyframes,Z=n.autoRevert,p=e._dur,G=e._startAt,X=e._targets,y=e.parent,R=y&&y.data==="nested"?y.vars.targets:X,V=e._overwrite==="auto"&&!Js,W=e.timeline,f,x,L,S,Y,J,F,M,g,v,C,B,P;if(W&&(!b||!a)&&(a="none"),e._ease=Ii(a,_i.ease),e._yEase=m?Xo(Ii(m===!0?a:m,_i.ease)):0,m&&e._yoyo&&!e._repeat&&(m=e._yEase,e._yEase=e._ease,e._ease=m),e._from=!W&&!!n.runBackwards,!W||b&&!n.stagger){if(M=X[0]?xi(X[0]).harness:0,B=M&&n[M.prop],f=Qn(n,ws),G&&(G._zTime<0&&G.progress(1),t<0&&u&&d&&!Z?G.render(-1,!0):G.revert(u&&p?zn:MX),G._lazy=0),s){if(ei(e._startAt=gt.set(X,se({data:"isStart",overwrite:!1,parent:y,immediateRender:!0,lazy:!G&&Bt(h),startAt:null,delay:0,onUpdate:r,onUpdateParams:o,callbackScope:c,stagger:0},s))),e._startAt._dp=0,e._startAt._sat=e,t<0&&(Kt||!d&&!Z)&&e._startAt.revert(zn),d&&p&&t<=0&&i<=0){t&&(e._zTime=t);return}}else if(u&&p&&!G){if(t&&(d=!1),L=se({overwrite:!1,data:"isFromStart",lazy:d&&!G&&Bt(h),immediateRender:d,stagger:0,parent:y},f),B&&(L[M.prop]=B),ei(e._startAt=gt.set(X,L)),e._startAt._dp=0,e._startAt._sat=e,t<0&&(Kt?e._startAt.revert(zn):e._startAt.render(-1,!0)),e._zTime=t,!d)l(e._startAt,st,st);else if(!t)return}for(e._pt=e._ptCache=0,h=p&&Bt(h)||h&&!p,x=0;x<X.length;x++){if(Y=X[x],F=Y._gsap||Bs(X)[x]._gsap,e._ptLookup[x]=v={},Ps[F.id]&&ti.length&&Bn(),C=R===X?x:R.indexOf(Y),M&&(g=new M).init(Y,B||f,e,C,R)!==!1&&(e._pt=S=new jt(e._pt,Y,g.name,0,1,g.render,g,0,g.priority),g._props.forEach(function(T){v[T]=S}),g.priority&&(J=1)),!M||B)for(L in f)$t[L]&&(g=Wo(L,f,e,C,Y,R))?g.priority&&(J=1):v[L]=S=td.call(e,Y,L,"get",f[L],C,R,0,n.stringFilter);e._op&&e._op[x]&&e.kill(Y,e._op[x]),V&&e._pt&&(ni=e,bt.killTweensOf(Y,v,e.globalTime(t)),P=!e.parent,ni=0),e._pt&&h&&(Ps[F.id]=1)}J&&Io(e),e._onInit&&e._onInit(e)}e._onUpdate=r,e._initted=(!e._op||e._pt)&&!P,b&&t<=0&&W.render(ne,!0,!0)},my=function(e,t,i,n,a,s,d){var h=(e._pt&&e._ptCache||(e._ptCache={}))[t],r,o,c,u;if(!h)for(h=e._ptCache[t]=[],c=e._ptLookup,u=e._targets.length;u--;){if(r=c[u][t],r&&r.d&&r.d._pt)for(r=r.d._pt;r&&r.p!==t&&r.fp!==t;)r=r._next;if(!r)return ed=1,e.vars[t]="+=0",id(e,d),ed=0,1;h.push(r)}for(u=h.length;u--;)o=h[u],r=o._pt||o,r.s=(n||n===0)&&!a?n:r.s+(n||0)+s*r.c,r.c=i-r.s,o.e&&(o.e=Wt(i)+Pt(o.e)),o.b&&(o.b=r.s+Pt(o.b))},Zy=function(e,t){var i=e[0]?xi(e[0]).harness:0,n=i&&i.aliases,a,s,d,h;if(!n)return t;a=Si({},t);for(s in n)if(s in a)for(h=n[s].split(","),d=h.length;d--;)a[h[d]]=a[s];return a},by=function(e,t,i,n){var a=t.ease||n||"power1.inOut",s,d;if(wt(t))d=i[e]||(i[e]=[]),t.forEach(function(h,r){return d.push({t:r/(t.length-1)*100,v:h,e:a})});else for(s in t)d=i[s]||(i[s]=[]),s==="ease"||d.push({t:parseFloat(e),v:t[s],e:a})},Pl=function(e,t,i,n,a){return Vt(e)?e.call(t,i,n,a):Ft(e)&&~e.indexOf("random(")?Nl(e):e},fo=Es+"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert",Lo={};Qt(fo+",id,stagger,delay,duration,paused,scrollTrigger",function(l){return Lo[l]=1});var gt=function(l){Ur(e,l);function e(i,n,a,s){var d;typeof n=="number"&&(a.duration=n,n=a,a=null),d=l.call(this,s?n:Fl(n))||this;var h=d.vars,r=h.duration,o=h.delay,c=h.immediateRender,u=h.stagger,m=h.overwrite,b=h.keyframes,Z=h.defaults,p=h.scrollTrigger,G=h.yoyoEase,X=n.parent||bt,y=(wt(i)||Mr(i)?Pe(i[0]):"length"in n)?[i]:he(i),R,V,W,f,x,L,S,Y;if(d._targets=y.length?Bs(y):Pn("GSAP target "+i+" not found. https://greensock.com",!At.nullTargetWarn)||[],d._ptLookup=[],d._overwrite=m,b||u||Kn(r)||Kn(o)){if(n=d.vars,R=d.timeline=new _t({data:"nested",defaults:Z||{},targets:X&&X.data==="nested"?X.vars.targets:y}),R.kill(),R.parent=R._dp=we(d),R._start=0,u||Kn(r)||Kn(o)){if(f=y.length,S=u&&ho(u),Ye(u))for(x in u)~fo.indexOf(x)&&(Y||(Y={}),Y[x]=u[x]);for(V=0;V<f;V++)W=Qn(n,Lo),W.stagger=0,G&&(W.yoyoEase=G),Y&&Si(W,Y),L=y[V],W.duration=+Pl(r,we(d),V,L,y),W.delay=(+Pl(o,we(d),V,L,y)||0)-d._delay,!u&&f===1&&W.delay&&(d._delay=o=W.delay,d._start+=o,W.delay=0),R.to(L,W,S?S(V,L,y):0),R._ease=O.none;R.duration()?r=o=0:d.timeline=0}else if(b){Fl(se(R.vars.defaults,{ease:"none"})),R._ease=Ii(b.ease||n.ease||"none");var J=0,F,M,g;if(wt(b))b.forEach(function(v){return R.to(y,v,">")}),R.duration();else{W={};for(x in b)x==="ease"||x==="easeEach"||by(x,b[x],W,b.easeEach);for(x in W)for(F=W[x].sort(function(v,C){return v.t-C.t}),J=0,V=0;V<F.length;V++)M=F[V],g={ease:M.e,duration:(M.t-(V?F[V-1].t:0))/100*r},g[x]=M.v,R.to(y,g,J),J+=g.duration;R.duration()<r&&R.to({},{duration:r-R.duration()})}}r||d.duration(r=R.duration())}else d.timeline=0;return m===!0&&!Js&&(ni=we(d),bt.killTweensOf(y),ni=0),ge(X,we(d),a),n.reversed&&d.reverse(),n.paused&&d.paused(!0),(c||!r&&!b&&d._start===Nt(X._time)&&Bt(c)&&BX(we(d))&&X.data!=="nested")&&(d._tTime=-st,d.render(Math.max(0,-o)||0)),p&&io(we(d),p),d}var t=e.prototype;return t.render=function(n,a,s){var d=this._time,h=this._tDur,r=this._dur,o=n<0,c=n>h-st&&!o?h:n<st?0:n,u,m,b,Z,p,G,X,y,R;if(!r)_X(this,n,a,s);else if(c!==this._tTime||!n||s||!this._initted&&this._tTime||this._startAt&&this._zTime<0!==o){if(u=c,y=this.timeline,this._repeat){if(Z=r+this._rDelay,this._repeat<-1&&o)return this.totalTime(Z*100+n,a,s);if(u=Nt(c%Z),c===h?(b=this._repeat,u=r):(b=~~(c/Z),b&&b===c/Z&&(u=r,b--),u>r&&(u=r)),G=this._yoyo&&b&1,G&&(R=this._yEase,u=r-u),p=Oi(this._tTime,Z),u===d&&!s&&this._initted)return this._tTime=c,this;b!==p&&(y&&this._yEase&&yo(y,G),this.vars.repeatRefresh&&!G&&!this._lock&&(this._lock=s=1,this.render(Nt(Z*b),!0).invalidate()._lock=0))}if(!this._initted){if(lo(this,o?n:u,s,a,c))return this._tTime=0,this;if(d!==this._time)return this;if(r!==this._dur)return this.render(n,a,s)}if(this._tTime=c,this._time=u,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=X=(R||this._ease)(u/r),this._from&&(this.ratio=X=1-X),u&&!d&&!a&&(re(this,"onStart"),this._tTime!==c))return this;for(m=this._pt;m;)m.r(X,m.d),m=m._next;y&&y.render(n<0?n:!u&&G?-st:y._dur*y._ease(u/this._dur),a,s)||this._startAt&&(this._zTime=n),this._onUpdate&&!a&&(o&&Qs(this,n,a,s),re(this,"onUpdate")),this._repeat&&b!==p&&this.vars.onRepeat&&!a&&this.parent&&re(this,"onRepeat"),(c===this._tDur||!c)&&this._tTime===c&&(o&&!this._onUpdate&&Qs(this,n,!0,!0),(n||!r)&&(c===this._tDur&&this._ts>0||!c&&this._ts<0)&&ei(this,1),!a&&!(o&&!d)&&(c||d||G)&&(re(this,c===h?"onComplete":"onReverseComplete",!0),this._prom&&!(c<h&&this.timeScale()>0)&&this._prom()))}return this},t.targets=function(){return this._targets},t.invalidate=function(n){return(!n||!this.vars.runBackwards)&&(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(n),l.prototype.invalidate.call(this,n)},t.resetTo=function(n,a,s,d){wl||te.wake(),this._ts||this.play();var h=Math.min(this._dur,(this._dp._time-this._start)*this._ts),r;return this._initted||id(this,h),r=this._ease(h/this._dur),my(this,n,a,s,d,r,h)?this.resetTo(n,a,s,d):(On(this,0),this.parent||$r(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},t.kill=function(n,a){if(a===void 0&&(a="all"),!n&&(!a||a==="all"))return this._lazy=this._pt=0,this.parent?Ml(this):this;if(this.timeline){var s=this.timeline.totalDuration();return this.timeline.killTweensOf(n,a,ni&&ni.vars.overwrite!==!0)._first||Ml(this),this.parent&&s!==this.timeline.totalDuration()&&Ai(this,this._dur*this.timeline._tDur/s,0,1),this}var d=this._targets,h=n?he(n):d,r=this._ptLookup,o=this._pt,c,u,m,b,Z,p,G;if((!a||a==="all")&&zX(d,h))return a==="all"&&(this._pt=0),Ml(this);for(c=this._op=this._op||[],a!=="all"&&(Ft(a)&&(Z={},Qt(a,function(X){return Z[X]=1}),a=Z),a=Zy(d,a)),G=d.length;G--;)if(~h.indexOf(d[G])){u=r[G],a==="all"?(c[G]=a,b=u,m={}):(m=c[G]=c[G]||{},b=a);for(Z in b)p=u&&u[Z],p&&((!("kill"in p.d)||p.d.kill(Z)===!0)&&_n(this,p,"_pt"),delete u[Z]),m!=="all"&&(m[Z]=1)}return this._initted&&!this._pt&&o&&Ml(this),this},e.to=function(n,a){return new e(n,a,arguments[2])},e.from=function(n,a){return Ul(1,arguments)},e.delayedCall=function(n,a,s,d){return new e(a,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:n,onComplete:a,onReverseComplete:a,onCompleteParams:s,onReverseCompleteParams:s,callbackScope:d})},e.fromTo=function(n,a,s){return Ul(2,arguments)},e.set=function(n,a){return a.duration=0,a.repeatDelay||(a.repeat=0),new e(n,a)},e.killTweensOf=function(n,a,s){return bt.killTweensOf(n,a,s)},e}(tl);se(gt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),Qt("staggerTo,staggerFrom,staggerFromTo",function(l){gt[l]=function(){var e=new _t,t=js.call(arguments,0);return t.splice(l==="staggerFromTo"?5:4,0,0),e[l].apply(e,t)}});var ld=function(e,t,i){return e[t]=i},xo=function(e,t,i){return e[t](i)},py=function(e,t,i,n){return e[t](n.fp,i)},Gy=function(e,t,i){return e.setAttribute(t,i)},nd=function(e,t){return Vt(e[t])?xo:Fs(e[t])&&e.setAttribute?Gy:ld},So=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e6)/1e6,t)},Xy=function(e,t){return t.set(t.t,t.p,!!(t.s+t.c*e),t)},vo=function(e,t){var i=t._pt,n="";if(!e&&t.b)n=t.b;else if(e===1&&t.e)n=t.e;else{for(;i;)n=i.p+(i.m?i.m(i.s+i.c*e):Math.round((i.s+i.c*e)*1e4)/1e4)+n,i=i._next;n+=t.c}t.set(t.t,t.p,n,t)},ad=function(e,t){for(var i=t._pt;i;)i.r(e,i.d),i=i._next},yy=function(e,t,i,n){for(var a=this._pt,s;a;)s=a._next,a.p===n&&a.modifier(e,t,i),a=s},Vy=function(e){for(var t=this._pt,i,n;t;)n=t._next,t.p===e&&!t.op||t.op===e?_n(this,t,"_pt"):t.dep||(i=1),t=n;return!i},Ry=function(e,t,i,n){n.mSet(e,t,n.m.call(n.tween,i,n.mt),n)},Io=function(e){for(var t=e._pt,i,n,a,s;t;){for(i=t._next,n=a;n&&n.pr>t.pr;)n=n._next;(t._prev=n?n._prev:s)?t._prev._next=t:a=t,(t._next=n)?n._prev=t:s=t,t=i}e._pt=a},jt=function(){function l(t,i,n,a,s,d,h,r,o){this.t=i,this.s=a,this.c=s,this.p=n,this.r=d||So,this.d=h||this,this.set=r||ld,this.pr=o||0,this._next=t,t&&(t._prev=this)}var e=l.prototype;return e.modifier=function(i,n,a){this.mSet=this.mSet||this.set,this.set=Ry,this.m=i,this.mt=a,this.tween=n},l}();Qt(Es+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(l){return ws[l]=1}),qt.TweenMax=qt.TweenLite=gt,qt.TimelineLite=qt.TimelineMax=_t,bt=new _t({sortChildren:!1,defaults:_i,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),At.stringFilter=Go;var el=[],An={},Wy=[],Yo=0,sd=function(e){return(An[e]||Wy).map(function(t){return t()})},dd=function(){var e=Date.now(),t=[];e-Yo>2&&(sd("matchMediaInit"),el.forEach(function(i){var n=i.queries,a=i.conditions,s,d,h,r;for(d in n)s=ae.matchMedia(n[d]).matches,s&&(h=1),s!==a[d]&&(a[d]=s,r=1);r&&(i.revert(),h&&t.push(i))}),sd("matchMediaRevert"),t.forEach(function(i){return i.onMatch(i)}),Yo=e,sd("matchMedia"))},go=function(){function l(t,i){this.selector=i&&Ds(i),this.data=[],this._r=[],this.isReverted=!1,t&&this.add(t)}var e=l.prototype;return e.add=function(i,n,a){Vt(i)&&(a=n,n=i,i=Vt);var s=this,d=function(){var r=St,o=s.selector,c;return r&&r!==s&&r.data.push(s),a&&(s.selector=Ds(a)),St=s,c=n.apply(s,arguments),Vt(c)&&s._r.push(c),St=r,s.selector=o,s.isReverted=!1,c};return s.last=d,i===Vt?d(s):i?s[i]=d:d},e.ignore=function(i){var n=St;St=null,i(this),St=n},e.getTweens=function(){var i=[];return this.data.forEach(function(n){return n instanceof l?i.push.apply(i,n.getTweens()):n instanceof gt&&!(n.parent&&n.parent.data==="nested")&&i.push(n)}),i},e.clear=function(){this._r.length=this.data.length=0},e.kill=function(i,n){var a=this;if(i){var s=this.getTweens();this.data.forEach(function(h){h.data==="isFlip"&&(h.revert(),h.getChildren(!0,!0,!1).forEach(function(r){return s.splice(s.indexOf(r),1)}))}),s.map(function(h){return{g:h.globalTime(0),t:h}}).sort(function(h,r){return r.g-h.g||-1}).forEach(function(h){return h.t.revert(i)}),this.data.forEach(function(h){return!(h instanceof tl)&&h.revert&&h.revert(i)}),this._r.forEach(function(h){return h(i,a)}),this.isReverted=!0}else this.data.forEach(function(h){return h.kill&&h.kill()});if(this.clear(),n){var d=el.indexOf(this);~d&&el.splice(d,1)}},e.revert=function(i){this.kill(i||{})},l}(),fy=function(){function l(t){this.contexts=[],this.scope=t}var e=l.prototype;return e.add=function(i,n,a){Ye(i)||(i={matches:i});var s=new go(0,a||this.scope),d=s.conditions={},h,r,o;this.contexts.push(s),n=s.add("onMatch",n),s.queries=i;for(r in i)r==="all"?o=1:(h=ae.matchMedia(i[r]),h&&(el.indexOf(s)<0&&el.push(s),(d[r]=h.matches)&&(o=1),h.addListener?h.addListener(dd):h.addEventListener("change",dd)));return o&&n(s),this},e.revert=function(i){this.kill(i||{})},e.kill=function(i){this.contexts.forEach(function(n){return n.kill(i,!0)})},l}(),qn={registerPlugin:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];t.forEach(function(n){return ny(n)})},timeline:function(e){return new _t(e)},getTweensOf:function(e,t){return bt.getTweensOf(e,t)},getProperty:function(e,t,i,n){Ft(e)&&(e=he(e)[0]);var a=xi(e||{}).get,s=i?Ar:Or;return i==="native"&&(i=""),e&&(t?s(($t[t]&&$t[t].get||a)(e,t,i,n)):function(d,h,r){return s(($t[d]&&$t[d].get||a)(e,d,h,r))})},quickSetter:function(e,t,i){if(e=he(e),e.length>1){var n=e.map(function(o){return ee.quickSetter(o,t,i)}),a=n.length;return function(o){for(var c=a;c--;)n[c](o)}}e=e[0]||{};var s=$t[t],d=xi(e),h=d.harness&&(d.harness.aliases||{})[t]||t,r=s?function(o){var c=new s;qi._pt=0,c.init(e,i?o+i:o,qi,0,[e]),c.render(1,c),qi._pt&&ad(1,qi)}:d.set(e,h);return s?r:function(o){return r(e,h,i?o+i:o,d,1)}},quickTo:function(e,t,i){var n,a=ee.to(e,Si((n={},n[t]="+=0.1",n.paused=!0,n),i||{})),s=function(h,r,o){return a.resetTo(t,h,r,o)};return s.tween=a,s},isTweening:function(e){return bt.getTweensOf(e,!0).length>0},defaults:function(e){return e&&e.ease&&(e.ease=Ii(e.ease,_i.ease)),qr(_i,e||{})},config:function(e){return qr(At,e||{})},registerEffect:function(e){var t=e.name,i=e.effect,n=e.plugins,a=e.defaults,s=e.extendTimeline;(n||"").split(",").forEach(function(d){return d&&!$t[d]&&!qt[d]&&Pn(t+" effect requires "+d+" plugin.")}),zs[t]=function(d,h,r){return i(he(d),se(h||{},a),r)},s&&(_t.prototype[t]=function(d,h,r){return this.add(zs[t](d,Ye(h)?h:(r=h)&&{},this),r)})},registerEase:function(e,t){O[e]=Ii(t)},parseEase:function(e,t){return arguments.length?Ii(e,t):O},getById:function(e){return bt.getById(e)},exportRoot:function(e,t){e===void 0&&(e={});var i=new _t(e),n,a;for(i.smoothChildTiming=Bt(e.smoothChildTiming),bt.remove(i),i._dp=0,i._time=i._tTime=bt._time,n=bt._first;n;)a=n._next,(t||!(!n._dur&&n instanceof gt&&n.vars.onComplete===n._targets[0]))&&ge(i,n,n._start-n._delay),n=a;return ge(bt,i,0),i},context:function(e,t){return e?new go(e,t):St},matchMedia:function(e){return new fy(e)},matchMediaRefresh:function(){return el.forEach(function(e){var t=e.conditions,i,n;for(n in t)t[n]&&(t[n]=!1,i=1);i&&e.revert()})||dd()},addEventListener:function(e,t){var i=An[e]||(An[e]=[]);~i.indexOf(t)||i.push(t)},removeEventListener:function(e,t){var i=An[e],n=i&&i.indexOf(t);n>=0&&i.splice(n,1)},utils:{wrap:ey,wrapYoyo:iy,distribute:ho,random:oo,snap:ro,normalize:ty,getUnit:Pt,clamp:OX,splitColor:Zo,toArray:he,selector:Ds,mapRange:uo,pipe:qX,unitize:$X,interpolate:ly,shuffle:so},install:Er,effects:zs,ticker:te,updateRoot:_t.updateRoot,plugins:$t,globalTimeline:bt,core:{PropTween:jt,globals:Br,Tween:gt,Timeline:_t,Animation:tl,getCache:xi,_removeLinkedListItem:_n,reverting:function(){return Kt},context:function(e){return e&&St&&(St.data.push(e),e._ctx=St),St},suppressOverwrites:function(e){return Js=e}}};Qt("to,from,fromTo,delayedCall,set,killTweensOf",function(l){return qn[l]=gt[l]}),te.add(_t.updateRoot),qi=qn.to({},{duration:0});var Ly=function(e,t){for(var i=e._pt;i&&i.p!==t&&i.op!==t&&i.fp!==t;)i=i._next;return i},xy=function(e,t){var i=e._targets,n,a,s;for(n in t)for(a=i.length;a--;)s=e._ptLookup[a][n],s&&(s=s.d)&&(s._pt&&(s=Ly(s,n)),s&&s.modifier&&s.modifier(t[n],e,i[a],n))},hd=function(e,t){return{name:e,rawVars:1,init:function(n,a,s){s._onInit=function(d){var h,r;if(Ft(a)&&(h={},Qt(a,function(o){return h[o]=1}),a=h),t){h={};for(r in a)h[r]=t(a[r]);a=h}xy(d,a)}}}},ee=qn.registerPlugin({name:"attr",init:function(e,t,i,n,a){var s,d,h;this.tween=i;for(s in t)h=e.getAttribute(s)||"",d=this.add(e,"setAttribute",(h||0)+"",t[s],n,a,0,0,s),d.op=s,d.b=h,this._props.push(s)},render:function(e,t){for(var i=t._pt;i;)Kt?i.set(i.t,i.p,i.b,i):i.r(e,i.d),i=i._next}},{name:"endArray",init:function(e,t){for(var i=t.length;i--;)this.add(e,i,e[i]||0,t[i],0,0,0,0,0,1)}},hd("roundProps",Os),hd("modifiers"),hd("snap",ro))||qn;gt.version=_t.version=ee.version="3.11.4",zr=1,Nr()&&$i(),O.Power0,O.Power1,O.Power2,O.Power3,O.Power4,O.Linear,O.Quad,O.Cubic,O.Quart,O.Quint,O.Strong,O.Elastic,O.Back,O.SteppedEase,O.Bounce,O.Sine,O.Expo,O.Circ;var To,ai,il,rd,gi,Ho,od,Sy=function(){return typeof window<"u"},ze={},Ti=180/Math.PI,ll=Math.PI/180,nl=Math.atan2,Jo=1e8,cd=/([A-Z])/g,vy=/(left|right|width|margin|padding|x)/i,Iy=/[\s,\(]\S/,Ee={autoAlpha:"opacity,visibility",scale:"scaleX,scaleY",alpha:"opacity"},ud=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},Yy=function(e,t){return t.set(t.t,t.p,e===1?t.e:Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},gy=function(e,t){return t.set(t.t,t.p,e?Math.round((t.s+t.c*e)*1e4)/1e4+t.u:t.b,t)},Ty=function(e,t){var i=t.s+t.c*e;t.set(t.t,t.p,~~(i+(i<0?-.5:.5))+t.u,t)},Co=function(e,t){return t.set(t.t,t.p,e?t.e:t.b,t)},Fo=function(e,t){return t.set(t.t,t.p,e!==1?t.b:t.e,t)},Hy=function(e,t,i){return e.style[t]=i},Jy=function(e,t,i){return e.style.setProperty(t,i)},Cy=function(e,t,i){return e._gsap[t]=i},Fy=function(e,t,i){return e._gsap.scaleX=e._gsap.scaleY=i},Uy=function(e,t,i,n,a){var s=e._gsap;s.scaleX=s.scaleY=i,s.renderTransform(a,s)},ky=function(e,t,i,n,a){var s=e._gsap;s[t]=i,s.renderTransform(a,s)},pt="transform",We=pt+"Origin",Ny=function(e,t){var i=this,n=this.target,a=n.style;if(e in ze){if(this.tfm=this.tfm||{},e!=="transform"&&(e=Ee[e]||e,~e.indexOf(",")?e.split(",").forEach(function(s){return i.tfm[s]=Be(n,s)}):this.tfm[e]=n._gsap.x?n._gsap[e]:Be(n,e)),this.props.indexOf(pt)>=0)return;n._gsap.svg&&(this.svgo=n.getAttribute("data-svg-origin"),this.props.push(We,t,"")),e=pt}(a||t)&&this.props.push(e,t,a[e])},Uo=function(e){e.translate&&(e.removeProperty("translate"),e.removeProperty("scale"),e.removeProperty("rotate"))},My=function(){var e=this.props,t=this.target,i=t.style,n=t._gsap,a,s;for(a=0;a<e.length;a+=3)e[a+1]?t[e[a]]=e[a+2]:e[a+2]?i[e[a]]=e[a+2]:i.removeProperty(e[a].replace(cd,"-$1").toLowerCase());if(this.tfm){for(s in this.tfm)n[s]=this.tfm[s];n.svg&&(n.renderTransform(),t.setAttribute("data-svg-origin",this.svgo||"")),a=od(),a&&!a.isStart&&!i[pt]&&(Uo(i),n.uncache=1)}},ko=function(e,t){var i={target:e,props:[],revert:My,save:Ny};return t&&t.split(",").forEach(function(n){return i.save(n)}),i},No,md=function(e,t){var i=ai.createElementNS?ai.createElementNS((t||"http://www.w3.org/1999/xhtml").replace(/^https/,"http"),e):ai.createElement(e);return i.style?i:ai.createElement(e)},Te=function l(e,t,i){var n=getComputedStyle(e);return n[t]||n.getPropertyValue(t.replace(cd,"-$1").toLowerCase())||n.getPropertyValue(t)||!i&&l(e,al(t)||t,1)||""},Mo="O,Moz,ms,Ms,Webkit".split(","),al=function(e,t,i){var n=t||gi,a=n.style,s=5;if(e in a&&!i)return e;for(e=e.charAt(0).toUpperCase()+e.substr(1);s--&&!(Mo[s]+e in a););return s<0?null:(s===3?"ms":s>=0?Mo[s]:"")+e},Zd=function(){Sy()&&window.document&&(To=window,ai=To.document,il=ai.documentElement,gi=md("div")||{style:{}},md("div"),pt=al(pt),We=pt+"Origin",gi.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",No=!!al("perspective"),od=ee.core.reverting,rd=1)},bd=function l(e){var t=md("svg",this.ownerSVGElement&&this.ownerSVGElement.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),i=this.parentNode,n=this.nextSibling,a=this.style.cssText,s;if(il.appendChild(t),t.appendChild(this),this.style.display="block",e)try{s=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=l}catch{}else this._gsapBBox&&(s=this._gsapBBox());return i&&(n?i.insertBefore(this,n):i.appendChild(this)),il.removeChild(t),this.style.cssText=a,s},Ko=function(e,t){for(var i=t.length;i--;)if(e.hasAttribute(t[i]))return e.getAttribute(t[i])},wo=function(e){var t;try{t=e.getBBox()}catch{t=bd.call(e,!0)}return t&&(t.width||t.height)||e.getBBox===bd||(t=bd.call(e,!0)),t&&!t.width&&!t.x&&!t.y?{x:+Ko(e,["x","cx","x1"])||0,y:+Ko(e,["y","cy","y1"])||0,width:0,height:0}:t},Po=function(e){return!!(e.getCTM&&(!e.parentNode||e.ownerSVGElement)&&wo(e))},zl=function(e,t){if(t){var i=e.style;t in ze&&t!==We&&(t=pt),i.removeProperty?((t.substr(0,2)==="ms"||t.substr(0,6)==="webkit")&&(t="-"+t),i.removeProperty(t.replace(cd,"-$1").toLowerCase())):i.removeAttribute(t)}},si=function(e,t,i,n,a,s){var d=new jt(e._pt,t,i,0,1,s?Fo:Co);return e._pt=d,d.b=n,d.e=a,e._props.push(i),d},zo={deg:1,rad:1,turn:1},Ky={grid:1,flex:1},di=function l(e,t,i,n){var a=parseFloat(i)||0,s=(i+"").trim().substr((a+"").length)||"px",d=gi.style,h=vy.test(t),r=e.tagName.toLowerCase()==="svg",o=(r?"client":"offset")+(h?"Width":"Height"),c=100,u=n==="px",m=n==="%",b,Z,p,G;return n===s||!a||zo[n]||zo[s]?a:(s!=="px"&&!u&&(a=l(e,t,i,"px")),G=e.getCTM&&Po(e),(m||s==="%")&&(ze[t]||~t.indexOf("adius"))?(b=G?e.getBBox()[h?"width":"height"]:e[o],Wt(m?a/b*c:a/100*b)):(d[h?"width":"height"]=c+(u?s:n),Z=~t.indexOf("adius")||n==="em"&&e.appendChild&&!r?e:e.parentNode,G&&(Z=(e.ownerSVGElement||{}).parentNode),(!Z||Z===ai||!Z.appendChild)&&(Z=ai.body),p=Z._gsap,p&&m&&p.width&&h&&p.time===te.time&&!p.uncache?Wt(a/p.width*c):((m||s==="%")&&!Ky[Te(Z,"display")]&&(d.position=Te(e,"position")),Z===e&&(d.position="static"),Z.appendChild(gi),b=gi[o],Z.removeChild(gi),d.position="absolute",h&&m&&(p=xi(Z),p.time=te.time,p.width=Z[o]),Wt(u?b*a/c:b&&a?c/b*a:0))))},Be=function(e,t,i,n){var a;return rd||Zd(),t in Ee&&t!=="transform"&&(t=Ee[t],~t.indexOf(",")&&(t=t.split(",")[0])),ze[t]&&t!=="transform"?(a=Bl(e,n),a=t!=="transformOrigin"?a[t]:a.svg?a.origin:ta(Te(e,We))+" "+a.zOrigin+"px"):(a=e.style[t],(!a||a==="auto"||n||~(a+"").indexOf("calc("))&&(a=$n[t]&&$n[t](e,t,i)||Te(e,t)||jr(e,t)||(t==="opacity"?1:0))),i&&!~(a+"").trim().indexOf(" ")?di(e,t,a,i)+i:a},wy=function(e,t,i,n){if(!i||i==="none"){var a=al(t,e,1),s=a&&Te(e,a,1);s&&s!==i?(t=a,i=s):t==="borderColor"&&(i=Te(e,"borderTopColor"))}var d=new jt(this._pt,e.style,t,0,1,vo),h=0,r=0,o,c,u,m,b,Z,p,G,X,y,R,V;if(d.b=i,d.e=n,i+="",n+="",n==="auto"&&(e.style[t]=n,n=Te(e,t)||n,e.style[t]=i),o=[i,n],Go(o),i=o[0],n=o[1],u=i.match(ji)||[],V=n.match(ji)||[],V.length){for(;c=ji.exec(n);)p=c[0],X=n.substring(h,c.index),b?b=(b+1)%5:(X.substr(-5)==="rgba("||X.substr(-5)==="hsla(")&&(b=1),p!==(Z=u[r++]||"")&&(m=parseFloat(Z)||0,R=Z.substr((m+"").length),p.charAt(1)==="="&&(p=Di(m,p)+R),G=parseFloat(p),y=p.substr((G+"").length),h=ji.lastIndex-y.length,y||(y=y||At.units[t]||R,h===n.length&&(n+=y,d.e+=y)),R!==y&&(m=di(e,t,Z,y)||0),d._pt={_next:d._pt,p:X||r===1?X:",",s:m,c:G-m,m:b&&b<4||t==="zIndex"?Math.round:0});d.c=h<n.length?n.substring(h,n.length):""}else d.r=t==="display"&&n==="none"?Fo:Co;return wr.test(n)&&(d.e=0),this._pt=d,d},Eo={top:"0%",bottom:"100%",left:"0%",right:"100%",center:"50%"},Py=function(e){var t=e.split(" "),i=t[0],n=t[1]||"50%";return(i==="top"||i==="bottom"||n==="left"||n==="right")&&(e=i,i=n,n=e),t[0]=Eo[i]||i,t[1]=Eo[n]||n,t.join(" ")},zy=function(e,t){if(t.tween&&t.tween._time===t.tween._dur){var i=t.t,n=i.style,a=t.u,s=i._gsap,d,h,r;if(a==="all"||a===!0)n.cssText="",h=1;else for(a=a.split(","),r=a.length;--r>-1;)d=a[r],ze[d]&&(h=1,d=d==="transformOrigin"?We:pt),zl(i,d);h&&(zl(i,pt),s&&(s.svg&&i.removeAttribute("transform"),Bl(i,1),s.uncache=1,Uo(n)))}},$n={clearProps:function(e,t,i,n,a){if(a.data!=="isFromStart"){var s=e._pt=new jt(e._pt,t,i,0,0,zy);return s.u=n,s.pr=-10,s.tween=a,e._props.push(i),1}}},El=[1,0,0,1,0,0],Bo={},Qo=function(e){return e==="matrix(1, 0, 0, 1, 0, 0)"||e==="none"||!e},_o=function(e){var t=Te(e,pt);return Qo(t)?El:t.substr(7).match(Kr).map(Wt)},pd=function(e,t){var i=e._gsap||xi(e),n=e.style,a=_o(e),s,d,h,r;return i.svg&&e.getAttribute("transform")?(h=e.transform.baseVal.consolidate().matrix,a=[h.a,h.b,h.c,h.d,h.e,h.f],a.join(",")==="1,0,0,1,0,0"?El:a):(a===El&&!e.offsetParent&&e!==il&&!i.svg&&(h=n.display,n.display="block",s=e.parentNode,(!s||!e.offsetParent)&&(r=1,d=e.nextElementSibling,il.appendChild(e)),a=_o(e),h?n.display=h:zl(e,"display"),r&&(d?s.insertBefore(e,d):s?s.appendChild(e):il.removeChild(e))),t&&a.length>6?[a[0],a[1],a[4],a[5],a[12],a[13]]:a)},Gd=function(e,t,i,n,a,s){var d=e._gsap,h=a||pd(e,!0),r=d.xOrigin||0,o=d.yOrigin||0,c=d.xOffset||0,u=d.yOffset||0,m=h[0],b=h[1],Z=h[2],p=h[3],G=h[4],X=h[5],y=t.split(" "),R=parseFloat(y[0])||0,V=parseFloat(y[1])||0,W,f,x,L;i?h!==El&&(f=m*p-b*Z)&&(x=R*(p/f)+V*(-Z/f)+(Z*X-p*G)/f,L=R*(-b/f)+V*(m/f)-(m*X-b*G)/f,R=x,V=L):(W=wo(e),R=W.x+(~y[0].indexOf("%")?R/100*W.width:R),V=W.y+(~(y[1]||y[0]).indexOf("%")?V/100*W.height:V)),n||n!==!1&&d.smooth?(G=R-r,X=V-o,d.xOffset=c+(G*m+X*Z)-G,d.yOffset=u+(G*b+X*p)-X):d.xOffset=d.yOffset=0,d.xOrigin=R,d.yOrigin=V,d.smooth=!!n,d.origin=t,d.originIsAbsolute=!!i,e.style[We]="0px 0px",s&&(si(s,d,"xOrigin",r,R),si(s,d,"yOrigin",o,V),si(s,d,"xOffset",c,d.xOffset),si(s,d,"yOffset",u,d.yOffset)),e.setAttribute("data-svg-origin",R+" "+V)},Bl=function(e,t){var i=e._gsap||new Ro(e);if("x"in i&&!t&&!i.uncache)return i;var n=e.style,a=i.scaleX<0,s="px",d="deg",h=getComputedStyle(e),r=Te(e,We)||"0",o,c,u,m,b,Z,p,G,X,y,R,V,W,f,x,L,S,Y,J,F,M,g,v,C,B,P,T,I,k,A,Q,lt;return o=c=u=Z=p=G=X=y=R=0,m=b=1,i.svg=!!(e.getCTM&&Po(e)),h.translate&&((h.translate!=="none"||h.scale!=="none"||h.rotate!=="none")&&(n[pt]=(h.translate!=="none"?"translate3d("+(h.translate+" 0 0").split(" ").slice(0,3).join(", ")+") ":"")+(h.rotate!=="none"?"rotate("+h.rotate+") ":"")+(h.scale!=="none"?"scale("+h.scale.split(" ").join(",")+") ":"")+(h[pt]!=="none"?h[pt]:"")),n.scale=n.rotate=n.translate="none"),f=pd(e,i.svg),i.svg&&(i.uncache?(B=e.getBBox(),r=i.xOrigin-B.x+"px "+(i.yOrigin-B.y)+"px",C=""):C=!t&&e.getAttribute("data-svg-origin"),Gd(e,C||r,!!C||i.originIsAbsolute,i.smooth!==!1,f)),V=i.xOrigin||0,W=i.yOrigin||0,f!==El&&(Y=f[0],J=f[1],F=f[2],M=f[3],o=g=f[4],c=v=f[5],f.length===6?(m=Math.sqrt(Y*Y+J*J),b=Math.sqrt(M*M+F*F),Z=Y||J?nl(J,Y)*Ti:0,X=F||M?nl(F,M)*Ti+Z:0,X&&(b*=Math.abs(Math.cos(X*ll))),i.svg&&(o-=V-(V*Y+W*F),c-=W-(V*J+W*M))):(lt=f[6],A=f[7],T=f[8],I=f[9],k=f[10],Q=f[11],o=f[12],c=f[13],u=f[14],x=nl(lt,k),p=x*Ti,x&&(L=Math.cos(-x),S=Math.sin(-x),C=g*L+T*S,B=v*L+I*S,P=lt*L+k*S,T=g*-S+T*L,I=v*-S+I*L,k=lt*-S+k*L,Q=A*-S+Q*L,g=C,v=B,lt=P),x=nl(-F,k),G=x*Ti,x&&(L=Math.cos(-x),S=Math.sin(-x),C=Y*L-T*S,B=J*L-I*S,P=F*L-k*S,Q=M*S+Q*L,Y=C,J=B,F=P),x=nl(J,Y),Z=x*Ti,x&&(L=Math.cos(x),S=Math.sin(x),C=Y*L+J*S,B=g*L+v*S,J=J*L-Y*S,v=v*L-g*S,Y=C,g=B),p&&Math.abs(p)+Math.abs(Z)>359.9&&(p=Z=0,G=180-G),m=Wt(Math.sqrt(Y*Y+J*J+F*F)),b=Wt(Math.sqrt(v*v+lt*lt)),x=nl(g,v),X=Math.abs(x)>2e-4?x*Ti:0,R=Q?1/(Q<0?-Q:Q):0),i.svg&&(C=e.getAttribute("transform"),i.forceCSS=e.setAttribute("transform","")||!Qo(Te(e,pt)),C&&e.setAttribute("transform",C))),Math.abs(X)>90&&Math.abs(X)<270&&(a?(m*=-1,X+=Z<=0?180:-180,Z+=Z<=0?180:-180):(b*=-1,X+=X<=0?180:-180)),t=t||i.uncache,i.x=o-((i.xPercent=o&&(!t&&i.xPercent||(Math.round(e.offsetWidth/2)===Math.round(-o)?-50:0)))?e.offsetWidth*i.xPercent/100:0)+s,i.y=c-((i.yPercent=c&&(!t&&i.yPercent||(Math.round(e.offsetHeight/2)===Math.round(-c)?-50:0)))?e.offsetHeight*i.yPercent/100:0)+s,i.z=u+s,i.scaleX=Wt(m),i.scaleY=Wt(b),i.rotation=Wt(Z)+d,i.rotationX=Wt(p)+d,i.rotationY=Wt(G)+d,i.skewX=X+d,i.skewY=y+d,i.transformPerspective=R+s,(i.zOrigin=parseFloat(r.split(" ")[2])||0)&&(n[We]=ta(r)),i.xOffset=i.yOffset=0,i.force3D=At.force3D,i.renderTransform=i.svg?By:No?jo:Ey,i.uncache=0,i},ta=function(e){return(e=e.split(" "))[0]+" "+e[1]},Xd=function(e,t,i){var n=Pt(t);return Wt(parseFloat(t)+parseFloat(di(e,"x",i+"px",n)))+n},Ey=function(e,t){t.z="0px",t.rotationY=t.rotationX="0deg",t.force3D=0,jo(e,t)},Hi="0deg",Ql="0px",Ji=") ",jo=function(e,t){var i=t||this,n=i.xPercent,a=i.yPercent,s=i.x,d=i.y,h=i.z,r=i.rotation,o=i.rotationY,c=i.rotationX,u=i.skewX,m=i.skewY,b=i.scaleX,Z=i.scaleY,p=i.transformPerspective,G=i.force3D,X=i.target,y=i.zOrigin,R="",V=G==="auto"&&e&&e!==1||G===!0;if(y&&(c!==Hi||o!==Hi)){var W=parseFloat(o)*ll,f=Math.sin(W),x=Math.cos(W),L;W=parseFloat(c)*ll,L=Math.cos(W),s=Xd(X,s,f*L*-y),d=Xd(X,d,-Math.sin(W)*-y),h=Xd(X,h,x*L*-y+y)}p!==Ql&&(R+="perspective("+p+Ji),(n||a)&&(R+="translate("+n+"%, "+a+"%) "),(V||s!==Ql||d!==Ql||h!==Ql)&&(R+=h!==Ql||V?"translate3d("+s+", "+d+", "+h+") ":"translate("+s+", "+d+Ji),r!==Hi&&(R+="rotate("+r+Ji),o!==Hi&&(R+="rotateY("+o+Ji),c!==Hi&&(R+="rotateX("+c+Ji),(u!==Hi||m!==Hi)&&(R+="skew("+u+", "+m+Ji),(b!==1||Z!==1)&&(R+="scale("+b+", "+Z+Ji),X.style[pt]=R||"translate(0, 0)"},By=function(e,t){var i=t||this,n=i.xPercent,a=i.yPercent,s=i.x,d=i.y,h=i.rotation,r=i.skewX,o=i.skewY,c=i.scaleX,u=i.scaleY,m=i.target,b=i.xOrigin,Z=i.yOrigin,p=i.xOffset,G=i.yOffset,X=i.forceCSS,y=parseFloat(s),R=parseFloat(d),V,W,f,x,L;h=parseFloat(h),r=parseFloat(r),o=parseFloat(o),o&&(o=parseFloat(o),r+=o,h+=o),h||r?(h*=ll,r*=ll,V=Math.cos(h)*c,W=Math.sin(h)*c,f=Math.sin(h-r)*-u,x=Math.cos(h-r)*u,r&&(o*=ll,L=Math.tan(r-o),L=Math.sqrt(1+L*L),f*=L,x*=L,o&&(L=Math.tan(o),L=Math.sqrt(1+L*L),V*=L,W*=L)),V=Wt(V),W=Wt(W),f=Wt(f),x=Wt(x)):(V=c,x=u,W=f=0),(y&&!~(s+"").indexOf("px")||R&&!~(d+"").indexOf("px"))&&(y=di(m,"x",s,"px"),R=di(m,"y",d,"px")),(b||Z||p||G)&&(y=Wt(y+b-(b*V+Z*f)+p),R=Wt(R+Z-(b*W+Z*x)+G)),(n||a)&&(L=m.getBBox(),y=Wt(y+n/100*L.width),R=Wt(R+a/100*L.height)),L="matrix("+V+","+W+","+f+","+x+","+y+","+R+")",m.setAttribute("transform",L),X&&(m.style[pt]=L)},Qy=function(e,t,i,n,a){var s=360,d=Ft(a),h=parseFloat(a)*(d&&~a.indexOf("rad")?Ti:1),r=h-n,o=n+r+"deg",c,u;return d&&(c=a.split("_")[1],c==="short"&&(r%=s,r!==r%(s/2)&&(r+=r<0?s:-s)),c==="cw"&&r<0?r=(r+s*Jo)%s-~~(r/s)*s:c==="ccw"&&r>0&&(r=(r-s*Jo)%s-~~(r/s)*s)),e._pt=u=new jt(e._pt,t,i,n,r,Yy),u.e=o,u.u="deg",e._props.push(i),u},Do=function(e,t){for(var i in t)e[i]=t[i];return e},_y=function(e,t,i){var n=Do({},i._gsap),a="perspective,force3D,transformOrigin,svgOrigin",s=i.style,d,h,r,o,c,u,m,b;n.svg?(r=i.getAttribute("transform"),i.setAttribute("transform",""),s[pt]=t,d=Bl(i,1),zl(i,pt),i.setAttribute("transform",r)):(r=getComputedStyle(i)[pt],s[pt]=t,d=Bl(i,1),s[pt]=r);for(h in ze)r=n[h],o=d[h],r!==o&&a.indexOf(h)<0&&(m=Pt(r),b=Pt(o),c=m!==b?di(i,h,r,b):parseFloat(r),u=parseFloat(o),e._pt=new jt(e._pt,d,h,c,u-c,ud),e._pt.u=b||0,e._props.push(h));Do(d,n)};Qt("padding,margin,Width,Radius",function(l,e){var t="Top",i="Right",n="Bottom",a="Left",s=(e<3?[t,i,n,a]:[t+a,t+i,n+i,n+a]).map(function(d){return e<2?l+d:"border"+d+l});$n[e>1?"border"+l:l]=function(d,h,r,o,c){var u,m;if(arguments.length<4)return u=s.map(function(b){return Be(d,b,r)}),m=u.join(" "),m.split(u[0]).length===5?u[0]:m;u=(o+"").split(" "),m={},s.forEach(function(b,Z){return m[b]=u[Z]=u[Z]||u[(Z-1)/2|0]}),d.init(h,m,c)}});var Oo={name:"css",register:Zd,targetTest:function(e){return e.style&&e.nodeType},init:function(e,t,i,n,a){var s=this._props,d=e.style,h=i.vars.startAt,r,o,c,u,m,b,Z,p,G,X,y,R,V,W,f,x;rd||Zd(),this.styles=this.styles||ko(e),x=this.styles.props,this.tween=i;for(Z in t)if(Z!=="autoRound"&&(o=t[Z],!($t[Z]&&Wo(Z,t,i,n,e,a)))){if(m=typeof o,b=$n[Z],m==="function"&&(o=o.call(i,n,e,a),m=typeof o),m==="string"&&~o.indexOf("random(")&&(o=Nl(o)),b)b(this,e,Z,o,i)&&(f=1);else if(Z.substr(0,2)==="--")r=(getComputedStyle(e).getPropertyValue(Z)+"").trim(),o+="",li.lastIndex=0,li.test(r)||(p=Pt(r),G=Pt(o)),G?p!==G&&(r=di(e,Z,r,G)+G):p&&(o+=p),this.add(d,"setProperty",r,o,n,a,0,0,Z),s.push(Z),x.push(Z,0,d[Z]);else if(m!=="undefined"){if(h&&Z in h?(r=typeof h[Z]=="function"?h[Z].call(i,n,e,a):h[Z],Ft(r)&&~r.indexOf("random(")&&(r=Nl(r)),Pt(r+"")||(r+=At.units[Z]||Pt(Be(e,Z))||""),(r+"").charAt(1)==="="&&(r=Be(e,Z))):r=Be(e,Z),u=parseFloat(r),X=m==="string"&&o.charAt(1)==="="&&o.substr(0,2),X&&(o=o.substr(2)),c=parseFloat(o),Z in Ee&&(Z==="autoAlpha"&&(u===1&&Be(e,"visibility")==="hidden"&&c&&(u=0),x.push("visibility",0,d.visibility),si(this,d,"visibility",u?"inherit":"hidden",c?"inherit":"hidden",!c)),Z!=="scale"&&Z!=="transform"&&(Z=Ee[Z],~Z.indexOf(",")&&(Z=Z.split(",")[0]))),y=Z in ze,y){if(this.styles.save(Z),R||(V=e._gsap,V.renderTransform&&!t.parseTransform||Bl(e,t.parseTransform),W=t.smoothOrigin!==!1&&V.smooth,R=this._pt=new jt(this._pt,d,pt,0,1,V.renderTransform,V,0,-1),R.dep=1),Z==="scale")this._pt=new jt(this._pt,V,"scaleY",V.scaleY,(X?Di(V.scaleY,X+c):c)-V.scaleY||0,ud),this._pt.u=0,s.push("scaleY",Z),Z+="X";else if(Z==="transformOrigin"){x.push(We,0,d[We]),o=Py(o),V.svg?Gd(e,o,0,W,0,this):(G=parseFloat(o.split(" ")[2])||0,G!==V.zOrigin&&si(this,V,"zOrigin",V.zOrigin,G),si(this,d,Z,ta(r),ta(o)));continue}else if(Z==="svgOrigin"){Gd(e,o,1,W,0,this);continue}else if(Z in Bo){Qy(this,V,Z,u,X?Di(u,X+o):o);continue}else if(Z==="smoothOrigin"){si(this,V,"smooth",V.smooth,o);continue}else if(Z==="force3D"){V[Z]=o;continue}else if(Z==="transform"){_y(this,o,e);continue}}else Z in d||(Z=al(Z)||Z);if(y||(c||c===0)&&(u||u===0)&&!Iy.test(o)&&Z in d)p=(r+"").substr((u+"").length),c||(c=0),G=Pt(o)||(Z in At.units?At.units[Z]:p),p!==G&&(u=di(e,Z,r,G)),this._pt=new jt(this._pt,y?V:d,Z,u,(X?Di(u,X+c):c)-u,!y&&(G==="px"||Z==="zIndex")&&t.autoRound!==!1?Ty:ud),this._pt.u=G||0,p!==G&&G!=="%"&&(this._pt.b=r,this._pt.r=gy);else if(Z in d)wy.call(this,e,Z,r,X?X+o:o);else if(Z in e)this.add(e,Z,r||e[Z],X?X+o:o,n,a);else if(Z!=="parseTransform"){Ks(Z,o);continue}y||(Z in d?x.push(Z,0,d[Z]):x.push(Z,1,r||e[Z])),s.push(Z)}}f&&Io(this)},render:function(e,t){if(t.tween._time||!od())for(var i=t._pt;i;)i.r(e,i.d),i=i._next;else t.styles.revert()},get:Be,aliases:Ee,getSetter:function(e,t,i){var n=Ee[t];return n&&n.indexOf(",")<0&&(t=n),t in ze&&t!==We&&(e._gsap.x||Be(e,"x"))?i&&Ho===i?t==="scale"?Fy:Cy:(Ho=i||{})&&(t==="scale"?Uy:ky):e.style&&!Fs(e.style[t])?Hy:~t.indexOf("-")?Jy:nd(e,t)},core:{_removeProperty:zl,_getMatrix:pd}};ee.utils.checkPrefix=al,ee.core.getStyleSaver=ko,function(l,e,t,i){var n=Qt(l+","+e+","+t,function(a){ze[a]=1});Qt(e,function(a){At.units[a]="deg",Bo[a]=1}),Ee[n[13]]=l+","+e,Qt(i,function(a){var s=a.split(":");Ee[s[1]]=n[s[0]]})}("x,y,z,scale,scaleX,scaleY,xPercent,yPercent","rotation,rotationX,rotationY,skewX,skewY","transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective","0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY"),Qt("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",function(l){At.units[l]="px"}),ee.registerPlugin(Oo);var yd=ee.registerPlugin(Oo)||ee;yd.core.Tween;let oe;const jy=({minimumStartTime:l,overallGraphWidth:e,initialOverallTimeSpan:t})=>({dateToX:Oy(l,e,t),xToDate:Ay(l,e,t)}),Dy=({minimumStartTime:l,overallGraphWidth:e,initialOverallTimeSpan:t})=>(oe=jy({minimumStartTime:l,overallGraphWidth:e,initialOverallTimeSpan:t}),oe);function Oy(l,e,t){return function(i){return Math.ceil((i.getTime()-l)*(e/t))}}function Ay(l,e,t){return function(i){return Math.ceil(l+i*(t/e))}}const Ao={fadeIn:.25,move:.5},_l="box";class qy extends xt{constructor({nodeData:t,styles:i,styleNode:n,layoutPosition:a}){super();N(this,"nodeData");N(this,"styles");N(this,"styleNode");N(this,"unwatch");N(this,"label");N(this,"box",new Ve);N(this,"apxLabelWidth",0);N(this,"nodeWidth");N(this,"layoutPositionOffset");N(this,"layoutPosition");N(this,"isLabelInBox",!0);N(this,"selectedRing",new Ve);this.nodeData=t,this.styles=i,this.styleNode=n,this.layoutPosition=a,this.alpha=0,this.nodeWidth=this.getNodeWidth(),this.layoutPositionOffset=this.getLayoutPositionOffset(),this.box.name=_l,this.drawBox(),this.addChild(this.box),this.drawLabel(),this.drawSelectedRing(),this.updatePosition(!0),this.unwatch=tt.watch([i,n],()=>{this.box.clear(),this.drawBox()},{deep:!0}),this.interactive=!0,this.buttonMode=!0,this.animateIn()}getNodeWidth(){return oe.dateToX(this.nodeData.end??new Date)-oe.dateToX(this.nodeData.start)}getLayoutPositionOffset(){const{textLineHeightDefault:t,spacingNodeYPadding:i,spacingNodeMargin:n}=this.styles.value;return t+i*2+n}drawBox(){const{fill:t}=this.styleNode.value(this.nodeData),i=Qe(t),{textLineHeightDefault:n,spacingNodeYPadding:a,borderRadiusNode:s}=this.styles.value,d=this.nodeWidth>=1?this.nodeWidth:1,h=n+a*2;this.box.beginFill(i),this.box.drawRoundedRect(0,0,d,h,s),this.box.endFill()}async drawLabel(){var a;const t=await Hs(this.styles.value),{inverseTextOnFill:i}=this.styleNode.value(this.nodeData),{spacingNodeXPadding:n}=this.styles.value;if(this.apxLabelWidth===0&&(this.apxLabelWidth=Re.measureText(this.nodeData.label,t.nodeTextStyles).width),(a=this.label)==null||a.destroy(),this.apxLabelWidth+n*2>this.nodeWidth)this.isLabelInBox=!1,this.label=new fs(this.nodeData.label,t.nodeTextDefault);else{const s=i?t.nodeTextInverse:t.nodeTextDefault;this.isLabelInBox=!0,this.label=new fs(this.nodeData.label,s)}this.updateLabelPosition(),this.addChild(this.label)}drawSelectedRing(){const{colorNodeSelection:t,spacingNodeSelectionMargin:i,spacingNodeSelectionWidth:n,borderRadiusNode:a}=this.styles.value;this.selectedRing.lineStyle(n,t,1,1),this.selectedRing.drawRoundedRect(-i,-i,this.nodeWidth+i*2,this.box.height+i*2,a),this.selectedRing.alpha=0,this.addChild(this.selectedRing)}animateIn(){yd.to(this,{alpha:1,duration:Ao.fadeIn})}async updatePosition(t){const i=oe.dateToX(this.nodeData.start),n=this.layoutPosition*this.layoutPositionOffset;if(t){this.position.set(i,n);return}await new Promise(a=>{yd.to(this,{x:i,y:n,duration:Ao.move,ease:"power1.out"}).then(()=>{a(null)})})}updateLabelPosition(){var a;const{spacingNodeXPadding:t,spacingNodeYPadding:i,spacingNodeLabelMargin:n}=this.styles.value;(a=this.label)==null||a.position.set(this.isLabelInBox?t:this.nodeWidth+n,i)}async update(t){let i=!1;t&&(i=t.state!==this.nodeData.state,this.nodeData=t);const n=this.getNodeWidth();(i||n!==this.nodeWidth)&&(this.nodeWidth=n,this.box.clear(),this.drawBox(),this.isLabelInBox&&this.apxLabelWidth>this.nodeWidth+2||!this.isLabelInBox&&this.apxLabelWidth<this.nodeWidth-2?this.drawLabel():this.isLabelInBox||this.updateLabelPosition()),await this.updatePosition()}select(){this.selectedRing.alpha=1}deselect(){this.selectedRing.alpha=0}destroy(){this.unwatch(),super.destroy.call(this)}}const ea=40;class $y extends xt{constructor({styles:t,sourceNode:i,targetNode:n}){super();N(this,"styles");N(this,"sourceNode");N(this,"targetNode");N(this,"sourceX",0);N(this,"sourceY",0);N(this,"targetX",0);N(this,"targetY",0);N(this,"directionFromSource","end");N(this,"edge",new Ve);N(this,"arrow",new Ve);N(this,"unwatch");N(this,"getSourcePosition",()=>{const{sourceX:t,sourceY:i}=this,{spacingMinimumNodeEdgeGap:n}=this.styles.value;if(this.directionFromSource==="end")return{sourceX:t,sourceY:i};const a=this.sourceNode.width;return{sourceX:a>n*2?t-n:t-a/2,sourceY:i}});N(this,"getSourceBezier",t=>{const{sourceY:i,targetX:n,directionFromSource:a}=this;if(a==="end"){const s=(n-t)/2;return{sourceBezierX:t+(s>ea?s:ea),sourceBezierY:i}}return{sourceBezierX:t,sourceBezierY:i}});N(this,"getTargetBezier",()=>{const{targetX:t,sourceX:i,targetY:n}=this,a=(t-i)/2;return{targetBezierX:t-(a>ea?a:ea),targetBezierY:n}});this.styles=t,this.sourceNode=i,this.targetNode=n,this.assignStartAndEndPositions(),this.drawEdge(),this.addChild(this.edge),this.drawArrow(),this.addChild(this.arrow),this.unwatch=tt.watch([t],()=>{this.update()},{deep:!0})}assignStartAndEndPositions(){const{spacingMinimumNodeEdgeGap:t}=this.styles.value;if(this.sourceX=this.sourceNode.x+this.sourceNode.getChildByName(_l).getLocalBounds().width,this.sourceY=this.sourceNode.y+this.sourceNode.getChildByName(_l).getLocalBounds().height/2,this.targetX=this.targetNode.x,this.targetY=this.targetNode.y+this.targetNode.getChildByName(_l).getLocalBounds().height/2,this.sourceX>this.targetX-t){if(this.directionFromSource=this.sourceY>this.targetY?"up":"down",this.directionFromSource==="up"){this.sourceY=this.sourceNode.y;return}this.sourceY=this.sourceNode.y+this.sourceNode.getChildByName(_l).getLocalBounds().height}}drawEdge(){const{colorEdge:t,spacingEdgeWidth:i}=this.styles.value,{edge:n,targetX:a,targetY:s}=this,{sourceX:d,sourceY:h}=this.getSourcePosition(),{sourceBezierX:r,sourceBezierY:o}=this.getSourceBezier(d),{targetBezierX:c,targetBezierY:u}=this.getTargetBezier();n.clear(),n.lineStyle(i,t,1,.5),n.moveTo(d,h),n.bezierCurveTo(r,o,c,u,a,s)}drawArrow(){const{colorEdge:t,spacingEdgeWidth:i,spacingNodeEdgeLength:n}=this.styles.value,{arrow:a,targetX:s,targetY:d}=this;a.clear(),a.lineStyle(i,t,1,.5),a.moveTo(s-n,d-n),a.lineTo(s,d),a.lineTo(s-n,d+n)}update(){this.assignStartAndEndPositions(),this.drawEdge(),this.drawArrow()}destroy(){this.unwatch(),super.destroy.call(this)}}class tV extends xt{constructor({labelText:t,styles:i,appHeight:n}){super();N(this,"labelText");N(this,"styles");N(this,"appHeight");N(this,"guideLine");N(this,"label");this.labelText=t,this.styles=i,this.appHeight=n,this.guideLine=new Ve,this.drawGuideLine(),this.addChild(this.guideLine),this.drawLabel(),this.interactive=!1}drawGuideLine(){const{colorGuideLine:t}=this.styles.value;this.guideLine.clear(),this.guideLine.beginFill(t),this.guideLine.drawRect(0,0,1,this.appHeight),this.guideLine.endFill()}async drawLabel(){var t;if(this.labelText){const i=await Hs(this.styles.value),{spacingGuideLabelPadding:n}=this.styles.value;(t=this.label)==null||t.destroy(),this.label=new fs(this.labelText,i.timeMarkerLabel),this.label.position.set(n,n),this.addChild(this.label)}}updateHeight(t){this.appHeight=t,this.drawGuideLine()}}const eV=260,Vd=4e3;class iV extends xt{constructor({viewportRef:t,appRef:i,minimumStartDate:n,maximumEndDate:a,isRunning:s,styles:d,formatDateFns:h}){super();N(this,"viewportRef");N(this,"appRef");N(this,"minimumStartDate");N(this,"maximumEndDate");N(this,"isRunning");N(this,"styles");N(this,"formatDateFns");N(this,"unwatch");N(this,"idealGuideCount",10);N(this,"currentTimeGap",120);N(this,"labelFormatter",t=>t.toLocaleTimeString());N(this,"guides",new Map);this.viewportRef=t,this.appRef=i,this.minimumStartDate=n,this.maximumEndDate=a,this.isRunning=s,this.styles=d,this.formatDateFns=h,this.updateIdealGuideCount(),this.updateCurrentTimeGap(),this.createGuides(),this.unwatch=tt.watch(d,()=>{this.removeChildren(),this.guides.clear(),this.createGuides()},{deep:!0}),this.interactive=!1}updateGuides(){const t=this.currentTimeGap;this.updateCurrentTimeGap(),this.isRedrawRequired(t)?(this.guides.size>0&&(this.removeChildren(),this.guides.clear()),this.createGuides()):this.updateGuidePositions()}updateIdealGuideCount(){this.idealGuideCount=Math.ceil(this.appRef.screen.width/eV)}updateCurrentTimeGap(){const t=Math.ceil((this.viewportRef.right-this.viewportRef.left)/this.idealGuideCount),i=oe.xToDate(t)-this.minimumStartDate.getTime(),n=xd.find(a=>a.ceiling>i)??xd[0];this.currentTimeGap=n.span,this.setLabelFormatter(n.labelFormat)}createGuides(){let t;const i=oe.xToDate(oe.dateToX(this.maximumEndDate.value??new Date)+Vd);let n=new Date(Math.ceil(oe.xToDate(-Vd)/this.currentTimeGap)*this.currentTimeGap);for(this.currentTimeGap>D.hour*6?n=Yc(n):this.currentTimeGap>D.hour&&(n=gc(n)),t=n;t.getTime()<i;){const a=new tV({labelText:this.labelFormatter(t),styles:this.styles,appHeight:this.appRef.screen.height});a.position.set(this.getGuidePosition(t),0),this.guides.set(t,a),this.addChild(a),t=new Date(t.getTime()+this.currentTimeGap)}}getGuidePosition(t){return oe.dateToX(t)*this.viewportRef.scale._x+this.viewportRef.worldTransform.tx}updateGuidePositions(){this.guides.forEach((t,i)=>{this.getGuidePosition(i)!==t.position.x&&t.position.set(this.getGuidePosition(i),0),t.height!==this.appRef.screen.height&&t.updateHeight(this.appRef.screen.height)})}setLabelFormatter(t){switch(t){case It.minutes:this.labelFormatter=this.formatByMinutesWithDates;break;case It.date:this.labelFormatter=this.formatDateFns.value.date;break;default:this.labelFormatter=this.formatDateFns.value.timeBySeconds}}formatByMinutesWithDates(t){return t.getHours()===0&&t.getMinutes()===0?`${this.formatDateFns.value.date(t)}
1061
+ ${this.formatDateFns.value.timeByMinutes(t)}`:this.formatDateFns.value.timeByMinutes(t)}isRedrawRequired(t){return t!==this.currentTimeGap||this.noGuidesExist()||this.isGuideLengthOutdated()}noGuidesExist(){return this.guides.size===0}isGuideLengthOutdated(){var n;if(!this.isRunning)return!1;const t=(n=Array.from(this.guides).pop())==null?void 0:n[1];if(!t||!this.maximumEndDate.value)return!1;const i=this.getGuidePosition(this.maximumEndDate.value)+Vd*this.viewportRef.scale._x-oe.dateToX(new Date(this.minimumStartDate.getTime()+this.currentTimeGap))*this.viewportRef.scale._x;return t.x<i}destroy(){this.removeChildren(),this.guides.clear(),this.unwatch(),super.destroy.call(this)}}const qo="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFVzKHIpe3ZhciBlPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5yZXNvbHZlKHIoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0fSl9LGZ1bmN0aW9uKHQpe3JldHVybiBlLnJlc29sdmUocigpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVqZWN0KHQpfSl9KX1mdW5jdGlvbiBHcyhyKXt2YXIgZT10aGlzO3JldHVybiBuZXcgZShmdW5jdGlvbih0LGkpe2lmKCEociYmdHlwZW9mIHIubGVuZ3RoPCJ1IikpcmV0dXJuIGkobmV3IFR5cGVFcnJvcih0eXBlb2YgcisiICIrcisiIGlzIG5vdCBpdGVyYWJsZShjYW5ub3QgcmVhZCBwcm9wZXJ0eSBTeW1ib2woU3ltYm9sLml0ZXJhdG9yKSkiKSk7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0KFtdKTt2YXIgYT1uLmxlbmd0aDtmdW5jdGlvbiBzKGgsdSl7aWYodSYmKHR5cGVvZiB1PT0ib2JqZWN0Inx8dHlwZW9mIHU9PSJmdW5jdGlvbiIpKXt2YXIgbD11LnRoZW47aWYodHlwZW9mIGw9PSJmdW5jdGlvbiIpe2wuY2FsbCh1LGZ1bmN0aW9uKGMpe3MoaCxjKX0sZnVuY3Rpb24oYyl7bltoXT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOmN9LC0tYT09PTAmJnQobil9KTtyZXR1cm59fW5baF09e3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTp1fSwtLWE9PT0wJiZ0KG4pfWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXMobyxuW29dKX0pfXZhciBrcz1zZXRUaW1lb3V0O2Z1bmN0aW9uIFBuKHIpe3JldHVybiBCb29sZWFuKHImJnR5cGVvZiByLmxlbmd0aDwidSIpfWZ1bmN0aW9uIFhzKCl7fWZ1bmN0aW9uIEhzKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ci5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG90KHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG90KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXciKTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJub3QgYSBmdW5jdGlvbiIpO3RoaXMuX3N0YXRlPTAsdGhpcy5faGFuZGxlZD0hMSx0aGlzLl92YWx1ZT12b2lkIDAsdGhpcy5fZGVmZXJyZWRzPVtdLEFuKHIsdGhpcyl9ZnVuY3Rpb24gUm4ocixlKXtmb3IoO3IuX3N0YXRlPT09Mzspcj1yLl92YWx1ZTtpZihyLl9zdGF0ZT09PTApe3IuX2RlZmVycmVkcy5wdXNoKGUpO3JldHVybn1yLl9oYW5kbGVkPSEwLG90Ll9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3ZhciB0PXIuX3N0YXRlPT09MT9lLm9uRnVsZmlsbGVkOmUub25SZWplY3RlZDtpZih0PT09bnVsbCl7KHIuX3N0YXRlPT09MT90aTpGZSkoZS5wcm9taXNlLHIuX3ZhbHVlKTtyZXR1cm59dmFyIGk7dHJ5e2k9dChyLl92YWx1ZSl9Y2F0Y2gobil7RmUoZS5wcm9taXNlLG4pO3JldHVybn10aShlLnByb21pc2UsaSl9KX1mdW5jdGlvbiB0aShyLGUpe3RyeXtpZihlPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKCJBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLiIpO2lmKGUmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSl7dmFyIHQ9ZS50aGVuO2lmKGUgaW5zdGFuY2VvZiBvdCl7ci5fc3RhdGU9MyxyLl92YWx1ZT1lLGVpKHIpO3JldHVybn1lbHNlIGlmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXtBbihIcyh0LGUpLHIpO3JldHVybn19ci5fc3RhdGU9MSxyLl92YWx1ZT1lLGVpKHIpfWNhdGNoKGkpe0ZlKHIsaSl9fWZ1bmN0aW9uIEZlKHIsZSl7ci5fc3RhdGU9MixyLl92YWx1ZT1lLGVpKHIpfWZ1bmN0aW9uIGVpKHIpe3IuX3N0YXRlPT09MiYmci5fZGVmZXJyZWRzLmxlbmd0aD09PTAmJm90Ll9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3IuX2hhbmRsZWR8fG90Ll91bmhhbmRsZWRSZWplY3Rpb25GbihyLl92YWx1ZSl9KTtmb3IodmFyIGU9MCx0PXIuX2RlZmVycmVkcy5sZW5ndGg7ZTx0O2UrKylSbihyLHIuX2RlZmVycmVkc1tlXSk7ci5fZGVmZXJyZWRzPW51bGx9ZnVuY3Rpb24ganMocixlLHQpe3RoaXMub25GdWxmaWxsZWQ9dHlwZW9mIHI9PSJmdW5jdGlvbiI/cjpudWxsLHRoaXMub25SZWplY3RlZD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOm51bGwsdGhpcy5wcm9taXNlPXR9ZnVuY3Rpb24gQW4ocixlKXt2YXIgdD0hMTt0cnl7cihmdW5jdGlvbihpKXt0fHwodD0hMCx0aShlLGkpKX0sZnVuY3Rpb24oaSl7dHx8KHQ9ITAsRmUoZSxpKSl9KX1jYXRjaChpKXtpZih0KXJldHVybjt0PSEwLEZlKGUsaSl9fW90LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50aGVuKG51bGwscil9LG90LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHIsZSl7dmFyIHQ9bmV3IHRoaXMuY29uc3RydWN0b3IoWHMpO3JldHVybiBSbih0aGlzLG5ldyBqcyhyLGUsdCkpLHR9LG90LnByb3RvdHlwZS5maW5hbGx5PVVzLG90LmFsbD1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IG90KGZ1bmN0aW9uKGUsdCl7aWYoIVBuKHIpKXJldHVybiB0KG5ldyBUeXBlRXJyb3IoIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXkiKSk7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocik7aWYoaS5sZW5ndGg9PT0wKXJldHVybiBlKFtdKTt2YXIgbj1pLmxlbmd0aDtmdW5jdGlvbiBhKG8saCl7dHJ5e2lmKGgmJih0eXBlb2YgaD09Im9iamVjdCJ8fHR5cGVvZiBoPT0iZnVuY3Rpb24iKSl7dmFyIHU9aC50aGVuO2lmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXt1LmNhbGwoaCxmdW5jdGlvbihsKXthKG8sbCl9LHQpO3JldHVybn19aVtvXT1oLC0tbj09PTAmJmUoaSl9Y2F0Y2gobCl7dChsKX19Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspYShzLGlbc10pfSl9LG90LmFsbFNldHRsZWQ9R3Msb3QucmVzb2x2ZT1mdW5jdGlvbihyKXtyZXR1cm4gciYmdHlwZW9mIHI9PSJvYmplY3QiJiZyLmNvbnN0cnVjdG9yPT09b3Q/cjpuZXcgb3QoZnVuY3Rpb24oZSl7ZShyKX0pfSxvdC5yZWplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBvdChmdW5jdGlvbihlLHQpe3Qocil9KX0sb3QucmFjZT1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IG90KGZ1bmN0aW9uKGUsdCl7aWYoIVBuKHIpKXJldHVybiB0KG5ldyBUeXBlRXJyb3IoIlByb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5IikpO2Zvcih2YXIgaT0wLG49ci5sZW5ndGg7aTxuO2krKylvdC5yZXNvbHZlKHJbaV0pLnRoZW4oZSx0KX0pfSxvdC5faW1tZWRpYXRlRm49dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIiYmZnVuY3Rpb24ocil7c2V0SW1tZWRpYXRlKHIpfXx8ZnVuY3Rpb24ocil7a3MociwwKX0sb3QuX3VuaGFuZGxlZFJlamVjdGlvbkZuPWZ1bmN0aW9uKGUpe3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZSYmY29uc29sZS53YXJuKCJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246IixlKX07dmFyIHJpPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307dmFyIENuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVnM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxZcz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIHpzKHIpe2lmKHI9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KHIpfWZ1bmN0aW9uIFdzKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciByPW5ldyBTdHJpbmcoImFiYyIpO2lmKHJbNV09ImRlIixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKVswXT09PSI1IilyZXR1cm4hMTtmb3IodmFyIGU9e30sdD0wO3Q8MTA7dCsrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUodCldPXQ7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBlW2FdfSk7aWYoaS5qb2luKCIiKSE9PSIwMTIzNDU2Nzg5IilyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe25bYV09YX0pLE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpPT09ImFiY2RlZmdoaWprbG1ub3BxcnN0In1jYXRjaHtyZXR1cm4hMX19dmFyIHFzPVdzKCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihyLGUpe2Zvcih2YXIgdCxpPXpzKHIpLG4sYT0xO2E8YXJndW1lbnRzLmxlbmd0aDthKyspe3Q9T2JqZWN0KGFyZ3VtZW50c1thXSk7Zm9yKHZhciBzIGluIHQpVnMuY2FsbCh0LHMpJiYoaVtzXT10W3NdKTtpZihDbil7bj1Dbih0KTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylZcy5jYWxsKHQsbltvXSkmJihpW25bb11dPXRbbltvXV0pfX1yZXR1cm4gaX07dHlwZW9mIGdsb2JhbFRoaXM+InUiJiYodHlwZW9mIHNlbGY8InUiP3NlbGYuZ2xvYmFsVGhpcz1zZWxmOnR5cGVvZiBnbG9iYWw8InUiJiYoZ2xvYmFsLmdsb2JhbFRoaXM9Z2xvYmFsKSksZ2xvYmFsVGhpcy5Qcm9taXNlfHwoZ2xvYmFsVGhpcy5Qcm9taXNlPW90KSxPYmplY3QuYXNzaWdufHwoT2JqZWN0LmFzc2lnbj1xcyk7dmFyICRzPTE2O2lmKERhdGUubm93JiZEYXRlLnByb3RvdHlwZS5nZXRUaW1lfHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCl9KSwhKGdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJmdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KSl7dmFyIEtzPURhdGUubm93KCk7Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZXx8KGdsb2JhbFRoaXMucGVyZm9ybWFuY2U9e30pLGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktS3N9fWZvcih2YXIgaWk9RGF0ZS5ub3coKSxJbj1bIm1zIiwibW96Iiwid2Via2l0IiwibyJdLG5pPTA7bmk8SW4ubGVuZ3RoJiYhZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7KytuaSl7dmFyIGFpPUluW25pXTtnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZT1nbG9iYWxUaGlzW2FpKyJSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXSxnbG9iYWxUaGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lPWdsb2JhbFRoaXNbYWkrIkNhbmNlbEFuaW1hdGlvbkZyYW1lIl18fGdsb2JhbFRoaXNbYWkrIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSJdfWdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24ocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihyKyJpcyBub3QgYSBmdW5jdGlvbiIpO3ZhciBlPURhdGUubm93KCksdD0kcytpaS1lO3JldHVybiB0PDAmJih0PTApLGlpPWUsZ2xvYmFsVGhpcy5zZWxmLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpaT1EYXRlLm5vdygpLHIocGVyZm9ybWFuY2Uubm93KCkpfSx0KX0pLGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fChnbG9iYWxUaGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKHIpe3JldHVybiBjbGVhclRpbWVvdXQocil9KSxNYXRoLnNpZ258fChNYXRoLnNpZ249ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TnVtYmVyKGUpLGU9PT0wfHxpc05hTihlKT9lOmU+MD8xOi0xfSksTnVtYmVyLmlzSW50ZWdlcnx8KE51bWJlci5pc0ludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmaXNGaW5pdGUoZSkmJk1hdGguZmxvb3IoZSk9PT1lfSksZ2xvYmFsVGhpcy5BcnJheUJ1ZmZlcnx8KGdsb2JhbFRoaXMuQXJyYXlCdWZmZXI9QXJyYXkpLGdsb2JhbFRoaXMuRmxvYXQzMkFycmF5fHwoZ2xvYmFsVGhpcy5GbG9hdDMyQXJyYXk9QXJyYXkpLGdsb2JhbFRoaXMuVWludDMyQXJyYXl8fChnbG9iYWxUaGlzLlVpbnQzMkFycmF5PUFycmF5KSxnbG9iYWxUaGlzLlVpbnQxNkFycmF5fHwoZ2xvYmFsVGhpcy5VaW50MTZBcnJheT1BcnJheSksZ2xvYmFsVGhpcy5VaW50OEFycmF5fHwoZ2xvYmFsVGhpcy5VaW50OEFycmF5PUFycmF5KSxnbG9iYWxUaGlzLkludDMyQXJyYXl8fChnbG9iYWxUaGlzLkludDMyQXJyYXk9QXJyYXkpO3ZhciBqdDsoZnVuY3Rpb24ocil7cltyLldFQkdMX0xFR0FDWT0wXT0iV0VCR0xfTEVHQUNZIixyW3IuV0VCR0w9MV09IldFQkdMIixyW3IuV0VCR0wyPTJdPSJXRUJHTDIifSkoanR8fChqdD17fSkpO3ZhciBOZTsoZnVuY3Rpb24ocil7cltyLlVOS05PV049MF09IlVOS05PV04iLHJbci5XRUJHTD0xXT0iV0VCR0wiLHJbci5DQU5WQVM9Ml09IkNBTlZBUyJ9KShOZXx8KE5lPXt9KSk7dmFyIHNyOyhmdW5jdGlvbihyKXtyW3IuQ09MT1I9MTYzODRdPSJDT0xPUiIscltyLkRFUFRIPTI1Nl09IkRFUFRIIixyW3IuU1RFTkNJTD0xMDI0XT0iU1RFTkNJTCJ9KShzcnx8KHNyPXt9KSk7dmFyIE47KGZ1bmN0aW9uKHIpe3Jbci5OT1JNQUw9MF09Ik5PUk1BTCIscltyLkFERD0xXT0iQUREIixyW3IuTVVMVElQTFk9Ml09Ik1VTFRJUExZIixyW3IuU0NSRUVOPTNdPSJTQ1JFRU4iLHJbci5PVkVSTEFZPTRdPSJPVkVSTEFZIixyW3IuREFSS0VOPTVdPSJEQVJLRU4iLHJbci5MSUdIVEVOPTZdPSJMSUdIVEVOIixyW3IuQ09MT1JfRE9ER0U9N109IkNPTE9SX0RPREdFIixyW3IuQ09MT1JfQlVSTj04XT0iQ09MT1JfQlVSTiIscltyLkhBUkRfTElHSFQ9OV09IkhBUkRfTElHSFQiLHJbci5TT0ZUX0xJR0hUPTEwXT0iU09GVF9MSUdIVCIscltyLkRJRkZFUkVOQ0U9MTFdPSJESUZGRVJFTkNFIixyW3IuRVhDTFVTSU9OPTEyXT0iRVhDTFVTSU9OIixyW3IuSFVFPTEzXT0iSFVFIixyW3IuU0FUVVJBVElPTj0xNF09IlNBVFVSQVRJT04iLHJbci5DT0xPUj0xNV09IkNPTE9SIixyW3IuTFVNSU5PU0lUWT0xNl09IkxVTUlOT1NJVFkiLHJbci5OT1JNQUxfTlBNPTE3XT0iTk9STUFMX05QTSIscltyLkFERF9OUE09MThdPSJBRERfTlBNIixyW3IuU0NSRUVOX05QTT0xOV09IlNDUkVFTl9OUE0iLHJbci5OT05FPTIwXT0iTk9ORSIscltyLlNSQ19PVkVSPTBdPSJTUkNfT1ZFUiIscltyLlNSQ19JTj0yMV09IlNSQ19JTiIscltyLlNSQ19PVVQ9MjJdPSJTUkNfT1VUIixyW3IuU1JDX0FUT1A9MjNdPSJTUkNfQVRPUCIscltyLkRTVF9PVkVSPTI0XT0iRFNUX09WRVIiLHJbci5EU1RfSU49MjVdPSJEU1RfSU4iLHJbci5EU1RfT1VUPTI2XT0iRFNUX09VVCIscltyLkRTVF9BVE9QPTI3XT0iRFNUX0FUT1AiLHJbci5FUkFTRT0yNl09IkVSQVNFIixyW3IuU1VCVFJBQ1Q9MjhdPSJTVUJUUkFDVCIscltyLlhPUj0yOV09IlhPUiJ9KShOfHwoTj17fSkpO3ZhciBQdDsoZnVuY3Rpb24ocil7cltyLlBPSU5UUz0wXT0iUE9JTlRTIixyW3IuTElORVM9MV09IkxJTkVTIixyW3IuTElORV9MT09QPTJdPSJMSU5FX0xPT1AiLHJbci5MSU5FX1NUUklQPTNdPSJMSU5FX1NUUklQIixyW3IuVFJJQU5HTEVTPTRdPSJUUklBTkdMRVMiLHJbci5UUklBTkdMRV9TVFJJUD01XT0iVFJJQU5HTEVfU1RSSVAiLHJbci5UUklBTkdMRV9GQU49Nl09IlRSSUFOR0xFX0ZBTiJ9KShQdHx8KFB0PXt9KSk7dmFyIFI7KGZ1bmN0aW9uKHIpe3Jbci5SR0JBPTY0MDhdPSJSR0JBIixyW3IuUkdCPTY0MDddPSJSR0IiLHJbci5SRz0zMzMxOV09IlJHIixyW3IuUkVEPTY0MDNdPSJSRUQiLHJbci5SR0JBX0lOVEVHRVI9MzYyNDldPSJSR0JBX0lOVEVHRVIiLHJbci5SR0JfSU5URUdFUj0zNjI0OF09IlJHQl9JTlRFR0VSIixyW3IuUkdfSU5URUdFUj0zMzMyMF09IlJHX0lOVEVHRVIiLHJbci5SRURfSU5URUdFUj0zNjI0NF09IlJFRF9JTlRFR0VSIixyW3IuQUxQSEE9NjQwNl09IkFMUEhBIixyW3IuTFVNSU5BTkNFPTY0MDldPSJMVU1JTkFOQ0UiLHJbci5MVU1JTkFOQ0VfQUxQSEE9NjQxMF09IkxVTUlOQU5DRV9BTFBIQSIscltyLkRFUFRIX0NPTVBPTkVOVD02NDAyXT0iREVQVEhfQ09NUE9ORU5UIixyW3IuREVQVEhfU1RFTkNJTD0zNDA0MV09IkRFUFRIX1NURU5DSUwifSkoUnx8KFI9e30pKTt2YXIgaWU7KGZ1bmN0aW9uKHIpe3Jbci5URVhUVVJFXzJEPTM1NTNdPSJURVhUVVJFXzJEIixyW3IuVEVYVFVSRV9DVUJFX01BUD0zNDA2N109IlRFWFRVUkVfQ1VCRV9NQVAiLHJbci5URVhUVVJFXzJEX0FSUkFZPTM1ODY2XT0iVEVYVFVSRV8yRF9BUlJBWSIscltyLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWD0zNDA2OV09IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCIscltyLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWD0zNDA3MF09IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCIscltyLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWT0zNDA3MV09IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSIscltyLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWT0zNDA3Ml09IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSIscltyLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWj0zNDA3M109IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiIscltyLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWj0zNDA3NF09IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiJ9KShpZXx8KGllPXt9KSk7dmFyIEY7KGZ1bmN0aW9uKHIpe3Jbci5VTlNJR05FRF9CWVRFPTUxMjFdPSJVTlNJR05FRF9CWVRFIixyW3IuVU5TSUdORURfU0hPUlQ9NTEyM109IlVOU0lHTkVEX1NIT1JUIixyW3IuVU5TSUdORURfU0hPUlRfNV82XzU9MzM2MzVdPSJVTlNJR05FRF9TSE9SVF81XzZfNSIscltyLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ9MzI4MTldPSJVTlNJR05FRF9TSE9SVF80XzRfNF80IixyW3IuVU5TSUdORURfU0hPUlRfNV81XzVfMT0zMjgyMF09IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLHJbci5VTlNJR05FRF9JTlQ9NTEyNV09IlVOU0lHTkVEX0lOVCIscltyLlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY9MzU4OTldPSJVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWIixyW3IuVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWPTMzNjQwXT0iVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWIixyW3IuVU5TSUdORURfSU5UXzI0Xzg9MzQwNDJdPSJVTlNJR05FRF9JTlRfMjRfOCIscltyLlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVj0zNTkwMl09IlVOU0lHTkVEX0lOVF81XzlfOV85X1JFViIscltyLkJZVEU9NTEyMF09IkJZVEUiLHJbci5TSE9SVD01MTIyXT0iU0hPUlQiLHJbci5JTlQ9NTEyNF09IklOVCIscltyLkZMT0FUPTUxMjZdPSJGTE9BVCIscltyLkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVj0zNjI2OV09IkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViIscltyLkhBTEZfRkxPQVQ9MzYxOTNdPSJIQUxGX0ZMT0FUIn0pKEZ8fChGPXt9KSk7dmFyIG9yOyhmdW5jdGlvbihyKXtyW3IuRkxPQVQ9MF09IkZMT0FUIixyW3IuSU5UPTFdPSJJTlQiLHJbci5VSU5UPTJdPSJVSU5UIn0pKG9yfHwob3I9e30pKTt2YXIgQnQ7KGZ1bmN0aW9uKHIpe3Jbci5ORUFSRVNUPTBdPSJORUFSRVNUIixyW3IuTElORUFSPTFdPSJMSU5FQVIifSkoQnR8fChCdD17fSkpO3ZhciBMdDsoZnVuY3Rpb24ocil7cltyLkNMQU1QPTMzMDcxXT0iQ0xBTVAiLHJbci5SRVBFQVQ9MTA0OTddPSJSRVBFQVQiLHJbci5NSVJST1JFRF9SRVBFQVQ9MzM2NDhdPSJNSVJST1JFRF9SRVBFQVQifSkoTHR8fChMdD17fSkpO3ZhciBSdDsoZnVuY3Rpb24ocil7cltyLk9GRj0wXT0iT0ZGIixyW3IuUE9XMj0xXT0iUE9XMiIscltyLk9OPTJdPSJPTiIscltyLk9OX01BTlVBTD0zXT0iT05fTUFOVUFMIn0pKFJ0fHwoUnQ9e30pKTt2YXIgQXQ7KGZ1bmN0aW9uKHIpe3Jbci5OUE09MF09Ik5QTSIscltyLlVOUEFDSz0xXT0iVU5QQUNLIixyW3IuUE1BPTJdPSJQTUEiLHJbci5OT19QUkVNVUxUSVBMSUVEX0FMUEhBPTBdPSJOT19QUkVNVUxUSVBMSUVEX0FMUEhBIixyW3IuUFJFTVVMVElQTFlfT05fVVBMT0FEPTFdPSJQUkVNVUxUSVBMWV9PTl9VUExPQUQiLHJbci5QUkVNVUxUSVBMWV9BTFBIQT0yXT0iUFJFTVVMVElQTFlfQUxQSEEiLHJbci5QUkVNVUxUSVBMSUVEX0FMUEhBPTJdPSJQUkVNVUxUSVBMSUVEX0FMUEhBIn0pKEF0fHwoQXQ9e30pKTt2YXIgQ3Q7KGZ1bmN0aW9uKHIpe3Jbci5OTz0wXT0iTk8iLHJbci5ZRVM9MV09IllFUyIscltyLkFVVE89Ml09IkFVVE8iLHJbci5CTEVORD0wXT0iQkxFTkQiLHJbci5DTEVBUj0xXT0iQ0xFQVIiLHJbci5CTElUPTJdPSJCTElUIn0pKEN0fHwoQ3Q9e30pKTt2YXIgaHI7KGZ1bmN0aW9uKHIpe3Jbci5BVVRPPTBdPSJBVVRPIixyW3IuTUFOVUFMPTFdPSJNQU5VQUwifSkoaHJ8fChocj17fSkpO3ZhciBTdDsoZnVuY3Rpb24ocil7ci5MT1c9Imxvd3AiLHIuTUVESVVNPSJtZWRpdW1wIixyLkhJR0g9ImhpZ2hwIn0pKFN0fHwoU3Q9e30pKTt2YXIgZHQ7KGZ1bmN0aW9uKHIpe3Jbci5OT05FPTBdPSJOT05FIixyW3IuU0NJU1NPUj0xXT0iU0NJU1NPUiIscltyLlNURU5DSUw9Ml09IlNURU5DSUwiLHJbci5TUFJJVEU9M109IlNQUklURSIscltyLkNPTE9SPTRdPSJDT0xPUiJ9KShkdHx8KGR0PXt9KSk7dmFyIE9uOyhmdW5jdGlvbihyKXtyW3IuUkVEPTFdPSJSRUQiLHJbci5HUkVFTj0yXT0iR1JFRU4iLHJbci5CTFVFPTRdPSJCTFVFIixyW3IuQUxQSEE9OF09IkFMUEhBIn0pKE9ufHwoT249e30pKTt2YXIgaHQ7KGZ1bmN0aW9uKHIpe3Jbci5OT05FPTBdPSJOT05FIixyW3IuTE9XPTJdPSJMT1ciLHJbci5NRURJVU09NF09Ik1FRElVTSIscltyLkhJR0g9OF09IkhJR0gifSkoaHR8fChodD17fSkpO3ZhciBVdDsoZnVuY3Rpb24ocil7cltyLkVMRU1FTlRfQVJSQVlfQlVGRkVSPTM0OTYzXT0iRUxFTUVOVF9BUlJBWV9CVUZGRVIiLHJbci5BUlJBWV9CVUZGRVI9MzQ5NjJdPSJBUlJBWV9CVUZGRVIiLHJbci5VTklGT1JNX0JVRkZFUj0zNTM0NV09IlVOSUZPUk1fQlVGRkVSIn0pKFV0fHwoVXQ9e30pKTt2YXIgWnM9e2NyZWF0ZUNhbnZhczpmdW5jdGlvbihyLGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiB0LndpZHRoPXIsdC5oZWlnaHQ9ZSx0fSxnZXRXZWJHTFJlbmRlcmluZ0NvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV2ViR0xSZW5kZXJpbmdDb250ZXh0fSxnZXROYXZpZ2F0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yfSxnZXRCYXNlVXJsOmZ1bmN0aW9uKCl7dmFyIHI7cmV0dXJuKHI9ZG9jdW1lbnQuYmFzZVVSSSkhPT1udWxsJiZyIT09dm9pZCAwP3I6d2luZG93LmxvY2F0aW9uLmhyZWZ9LGZldGNoOmZ1bmN0aW9uKHIsZSl7cmV0dXJuIGZldGNoKHIsZSl9fSxzaT0vaVBob25lL2ksTW49L2lQb2QvaSxEbj0vaVBhZC9pLEZuPS9cYmlPUy11bml2ZXJzYWwoPzouKylNYWNcYi9pLG9pPS9cYkFuZHJvaWQoPzouKylNb2JpbGVcYi9pLE5uPS9BbmRyb2lkL2kseGU9Lyg/OlNENDkzMFVSfFxiU2lsayg/Oi4rKU1vYmlsZVxiKS9pLHVyPS9TaWxrL2ksVnQ9L1dpbmRvd3MgUGhvbmUvaSxCbj0vXGJXaW5kb3dzKD86LispQVJNXGIvaSxMbj0vQmxhY2tCZXJyeS9pLFVuPS9CQjEwL2ksR249L09wZXJhIE1pbmkvaSxrbj0vXGIoQ3JpT1N8Q2hyb21lKSg/Oi4rKU1vYmlsZS9pLFhuPS9Nb2JpbGUoPzouKylGaXJlZm94XGIvaSxIbj1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI8InUiJiZyLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmdHlwZW9mIHIubWF4VG91Y2hQb2ludHM9PSJudW1iZXIiJiZyLm1heFRvdWNoUG9pbnRzPjEmJnR5cGVvZiBNU1N0cmVhbT4idSJ9O2Z1bmN0aW9uIEpzKHIpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXN0KHIpfX1mdW5jdGlvbiBRcyhyKXt2YXIgZT17dXNlckFnZW50OiIiLHBsYXRmb3JtOiIiLG1heFRvdWNoUG9pbnRzOjB9OyFyJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9lPXt1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxwbGF0Zm9ybTpuYXZpZ2F0b3IucGxhdGZvcm0sbWF4VG91Y2hQb2ludHM6bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwwfTp0eXBlb2Ygcj09InN0cmluZyI/ZS51c2VyQWdlbnQ9cjpyJiZyLnVzZXJBZ2VudCYmKGU9e3VzZXJBZ2VudDpyLnVzZXJBZ2VudCxwbGF0Zm9ybTpyLnBsYXRmb3JtLG1heFRvdWNoUG9pbnRzOnIubWF4VG91Y2hQb2ludHN8fDB9KTt2YXIgdD1lLnVzZXJBZ2VudCxpPXQuc3BsaXQoIltGQkFOIik7dHlwZW9mIGlbMV08InUiJiYodD1pWzBdKSxpPXQuc3BsaXQoIlR3aXR0ZXIiKSx0eXBlb2YgaVsxXTwidSImJih0PWlbMF0pO3ZhciBuPUpzKHQpLGE9e2FwcGxlOntwaG9uZTpuKHNpKSYmIW4oVnQpLGlwb2Q6bihNbiksdGFibGV0OiFuKHNpKSYmKG4oRG4pfHxIbihlKSkmJiFuKFZ0KSx1bml2ZXJzYWw6bihGbiksZGV2aWNlOihuKHNpKXx8bihNbil8fG4oRG4pfHxuKEZuKXx8SG4oZSkpJiYhbihWdCl9LGFtYXpvbjp7cGhvbmU6bih4ZSksdGFibGV0OiFuKHhlKSYmbih1ciksZGV2aWNlOm4oeGUpfHxuKHVyKX0sYW5kcm9pZDp7cGhvbmU6IW4oVnQpJiZuKHhlKXx8IW4oVnQpJiZuKG9pKSx0YWJsZXQ6IW4oVnQpJiYhbih4ZSkmJiFuKG9pKSYmKG4odXIpfHxuKE5uKSksZGV2aWNlOiFuKFZ0KSYmKG4oeGUpfHxuKHVyKXx8bihvaSl8fG4oTm4pKXx8bigvXGJva2h0dHBcYi9pKX0sd2luZG93czp7cGhvbmU6bihWdCksdGFibGV0Om4oQm4pLGRldmljZTpuKFZ0KXx8bihCbil9LG90aGVyOntibGFja2JlcnJ5Om4oTG4pLGJsYWNrYmVycnkxMDpuKFVuKSxvcGVyYTpuKEduKSxmaXJlZm94Om4oWG4pLGNocm9tZTpuKGtuKSxkZXZpY2U6bihMbil8fG4oVW4pfHxuKEduKXx8bihYbil8fG4oa24pfSxhbnk6ITEscGhvbmU6ITEsdGFibGV0OiExfTtyZXR1cm4gYS5hbnk9YS5hcHBsZS5kZXZpY2V8fGEuYW5kcm9pZC5kZXZpY2V8fGEud2luZG93cy5kZXZpY2V8fGEub3RoZXIuZGV2aWNlLGEucGhvbmU9YS5hcHBsZS5waG9uZXx8YS5hbmRyb2lkLnBob25lfHxhLndpbmRvd3MucGhvbmUsYS50YWJsZXQ9YS5hcHBsZS50YWJsZXR8fGEuYW5kcm9pZC50YWJsZXR8fGEud2luZG93cy50YWJsZXQsYX12YXIgR3Q9UXMoZ2xvYmFsVGhpcy5uYXZpZ2F0b3IpO2Z1bmN0aW9uIHRvKCl7cmV0dXJuIUd0LmFwcGxlLmRldmljZX1mdW5jdGlvbiBlbyhyKXt2YXIgZT0hMDtpZihHdC50YWJsZXR8fEd0LnBob25lKXtpZihHdC5hcHBsZS5kZXZpY2Upe3ZhciB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIChcZCspXyhcZCspPy8pO2lmKHQpe3ZhciBpPXBhcnNlSW50KHRbMV0sMTApO2k8MTEmJihlPSExKX19aWYoR3QuYW5kcm9pZC5kZXZpY2Upe3ZhciB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWRccyhbMC05Ll0qKS8pO2lmKHQpe3ZhciBpPXBhcnNlSW50KHRbMV0sMTApO2k8NyYmKGU9ITEpfX19cmV0dXJuIGU/cjo0fXZhciBJPXtBREFQVEVSOlpzLE1JUE1BUF9URVhUVVJFUzpSdC5QT1cyLEFOSVNPVFJPUElDX0xFVkVMOjAsUkVTT0xVVElPTjoxLEZJTFRFUl9SRVNPTFVUSU9OOjEsRklMVEVSX01VTFRJU0FNUExFOmh0Lk5PTkUsU1BSSVRFX01BWF9URVhUVVJFUzplbygzMiksU1BSSVRFX0JBVENIX1NJWkU6NDA5NixSRU5ERVJfT1BUSU9OUzp7dmlldzpudWxsLGFudGlhbGlhczohMSxhdXRvRGVuc2l0eTohMSxiYWNrZ3JvdW5kQ29sb3I6MCxiYWNrZ3JvdW5kQWxwaGE6MSx1c2VDb250ZXh0QWxwaGE6ITAsY2xlYXJCZWZvcmVSZW5kZXI6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHdpZHRoOjgwMCxoZWlnaHQ6NjAwLGxlZ2FjeTohMX0sR0NfTU9ERTpoci5BVVRPLEdDX01BWF9JRExFOjYwKjYwLEdDX01BWF9DSEVDS19DT1VOVDo2MCoxMCxXUkFQX01PREU6THQuQ0xBTVAsU0NBTEVfTU9ERTpCdC5MSU5FQVIsUFJFQ0lTSU9OX1ZFUlRFWDpTdC5ISUdILFBSRUNJU0lPTl9GUkFHTUVOVDpHdC5hcHBsZS5kZXZpY2U/U3QuSElHSDpTdC5NRURJVU0sQ0FOX1VQTE9BRF9TQU1FX0JVRkZFUjp0bygpLENSRUFURV9JTUFHRV9CSVRNQVA6ITEsUk9VTkRfUElYRUxTOiExfSxqbj17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKHIpe3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdD0ifiI7ZnVuY3Rpb24gaSgpe31PYmplY3QuY3JlYXRlJiYoaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuZXcgaSgpLl9fcHJvdG9fX3x8KHQ9ITEpKTtmdW5jdGlvbiBuKGgsdSxsKXt0aGlzLmZuPWgsdGhpcy5jb250ZXh0PXUsdGhpcy5vbmNlPWx8fCExfWZ1bmN0aW9uIGEoaCx1LGwsYyxmKXtpZih0eXBlb2YgbCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIGQ9bmV3IG4obCxjfHxoLGYpLHA9dD90K3U6dTtyZXR1cm4gaC5fZXZlbnRzW3BdP2guX2V2ZW50c1twXS5mbj9oLl9ldmVudHNbcF09W2guX2V2ZW50c1twXSxkXTpoLl9ldmVudHNbcF0ucHVzaChkKTooaC5fZXZlbnRzW3BdPWQsaC5fZXZlbnRzQ291bnQrKyksaH1mdW5jdGlvbiBzKGgsdSl7LS1oLl9ldmVudHNDb3VudD09PTA/aC5fZXZlbnRzPW5ldyBpOmRlbGV0ZSBoLl9ldmVudHNbdV19ZnVuY3Rpb24gbygpe3RoaXMuX2V2ZW50cz1uZXcgaSx0aGlzLl9ldmVudHNDb3VudD0wfW8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXt2YXIgdT1bXSxsLGM7aWYodGhpcy5fZXZlbnRzQ291bnQ9PT0wKXJldHVybiB1O2ZvcihjIGluIGw9dGhpcy5fZXZlbnRzKWUuY2FsbChsLGMpJiZ1LnB1c2godD9jLnNsaWNlKDEpOmMpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP3UuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobCkpOnV9LG8ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih1KXt2YXIgbD10P3QrdTp1LGM9dGhpcy5fZXZlbnRzW2xdO2lmKCFjKXJldHVybltdO2lmKGMuZm4pcmV0dXJuW2MuZm5dO2Zvcih2YXIgZj0wLGQ9Yy5sZW5ndGgscD1uZXcgQXJyYXkoZCk7ZjxkO2YrKylwW2ZdPWNbZl0uZm47cmV0dXJuIHB9LG8ucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odSl7dmFyIGw9dD90K3U6dSxjPXRoaXMuX2V2ZW50c1tsXTtyZXR1cm4gYz9jLmZuPzE6Yy5sZW5ndGg6MH0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih1LGwsYyxmLGQscCl7dmFyIHY9dD90K3U6dTtpZighdGhpcy5fZXZlbnRzW3ZdKXJldHVybiExO3ZhciBfPXRoaXMuX2V2ZW50c1t2XSxtPWFyZ3VtZW50cy5sZW5ndGgsZyx5O2lmKF8uZm4pe3N3aXRjaChfLm9uY2UmJnRoaXMucmVtb3ZlTGlzdGVuZXIodSxfLmZuLHZvaWQgMCwhMCksbSl7Y2FzZSAxOnJldHVybiBfLmZuLmNhbGwoXy5jb250ZXh0KSwhMDtjYXNlIDI6cmV0dXJuIF8uZm4uY2FsbChfLmNvbnRleHQsbCksITA7Y2FzZSAzOnJldHVybiBfLmZuLmNhbGwoXy5jb250ZXh0LGwsYyksITA7Y2FzZSA0OnJldHVybiBfLmZuLmNhbGwoXy5jb250ZXh0LGwsYyxmKSwhMDtjYXNlIDU6cmV0dXJuIF8uZm4uY2FsbChfLmNvbnRleHQsbCxjLGYsZCksITA7Y2FzZSA2OnJldHVybiBfLmZuLmNhbGwoXy5jb250ZXh0LGwsYyxmLGQscCksITB9Zm9yKHk9MSxnPW5ldyBBcnJheShtLTEpO3k8bTt5KyspZ1t5LTFdPWFyZ3VtZW50c1t5XTtfLmZuLmFwcGx5KF8uY29udGV4dCxnKX1lbHNle3ZhciBUPV8ubGVuZ3RoLHg7Zm9yKHk9MDt5PFQ7eSsrKXN3aXRjaChfW3ldLm9uY2UmJnRoaXMucmVtb3ZlTGlzdGVuZXIodSxfW3ldLmZuLHZvaWQgMCwhMCksbSl7Y2FzZSAxOl9beV0uZm4uY2FsbChfW3ldLmNvbnRleHQpO2JyZWFrO2Nhc2UgMjpfW3ldLmZuLmNhbGwoX1t5XS5jb250ZXh0LGwpO2JyZWFrO2Nhc2UgMzpfW3ldLmZuLmNhbGwoX1t5XS5jb250ZXh0LGwsYyk7YnJlYWs7Y2FzZSA0Ol9beV0uZm4uY2FsbChfW3ldLmNvbnRleHQsbCxjLGYpO2JyZWFrO2RlZmF1bHQ6aWYoIWcpZm9yKHg9MSxnPW5ldyBBcnJheShtLTEpO3g8bTt4KyspZ1t4LTFdPWFyZ3VtZW50c1t4XTtfW3ldLmZuLmFwcGx5KF9beV0uY29udGV4dCxnKX19cmV0dXJuITB9LG8ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHUsbCxjKXtyZXR1cm4gYSh0aGlzLHUsbCxjLCExKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih1LGwsYyl7cmV0dXJuIGEodGhpcyx1LGwsYywhMCl9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHUsbCxjLGYpe3ZhciBkPXQ/dCt1OnU7aWYoIXRoaXMuX2V2ZW50c1tkXSlyZXR1cm4gdGhpcztpZighbClyZXR1cm4gcyh0aGlzLGQpLHRoaXM7dmFyIHA9dGhpcy5fZXZlbnRzW2RdO2lmKHAuZm4pcC5mbj09PWwmJighZnx8cC5vbmNlKSYmKCFjfHxwLmNvbnRleHQ9PT1jKSYmcyh0aGlzLGQpO2Vsc2V7Zm9yKHZhciB2PTAsXz1bXSxtPXAubGVuZ3RoO3Y8bTt2KyspKHBbdl0uZm4hPT1sfHxmJiYhcFt2XS5vbmNlfHxjJiZwW3ZdLmNvbnRleHQhPT1jKSYmXy5wdXNoKHBbdl0pO18ubGVuZ3RoP3RoaXMuX2V2ZW50c1tkXT1fLmxlbmd0aD09PTE/X1swXTpfOnModGhpcyxkKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHUpe3ZhciBsO3JldHVybiB1PyhsPXQ/dCt1OnUsdGhpcy5fZXZlbnRzW2xdJiZzKHRoaXMsbCkpOih0aGlzLl9ldmVudHM9bmV3IGksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpc30sby5wcm90b3R5cGUub2ZmPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPW8ucHJvdG90eXBlLm9uLG8ucHJlZml4ZWQ9dCxvLkV2ZW50RW1pdHRlcj1vLHIuZXhwb3J0cz1vfSkoam4pO3ZhciBCZT1qbi5leHBvcnRzLGxyPXtleHBvcnRzOnt9fTtsci5leHBvcnRzPWZyLGxyLmV4cG9ydHMuZGVmYXVsdD1mcjtmdW5jdGlvbiBmcihyLGUsdCl7dD10fHwyO3ZhciBpPWUmJmUubGVuZ3RoLG49aT9lWzBdKnQ6ci5sZW5ndGgsYT1WbihyLDAsbix0LCEwKSxzPVtdO2lmKCFhfHxhLm5leHQ9PT1hLnByZXYpcmV0dXJuIHM7dmFyIG8saCx1LGwsYyxmLGQ7aWYoaSYmKGE9c28ocixlLGEsdCkpLHIubGVuZ3RoPjgwKnQpe289dT1yWzBdLGg9bD1yWzFdO2Zvcih2YXIgcD10O3A8bjtwKz10KWM9cltwXSxmPXJbcCsxXSxjPG8mJihvPWMpLGY8aCYmKGg9ZiksYz51JiYodT1jKSxmPmwmJihsPWYpO2Q9TWF0aC5tYXgodS1vLGwtaCksZD1kIT09MD8zMjc2Ny9kOjB9cmV0dXJuIExlKGEscyx0LG8saCxkLDApLHN9ZnVuY3Rpb24gVm4ocixlLHQsaSxuKXt2YXIgYSxzO2lmKG49PT1saShyLGUsdCxpKT4wKWZvcihhPWU7YTx0O2ErPWkpcz1XbihhLHJbYV0sclthKzFdLHMpO2Vsc2UgZm9yKGE9dC1pO2E+PWU7YS09aSlzPVduKGEsclthXSxyW2ErMV0scyk7cmV0dXJuIHMmJmNyKHMscy5uZXh0KSYmKEdlKHMpLHM9cy5uZXh0KSxzfWZ1bmN0aW9uIG5lKHIsZSl7aWYoIXIpcmV0dXJuIHI7ZXx8KGU9cik7dmFyIHQ9cixpO2RvIGlmKGk9ITEsIXQuc3RlaW5lciYmKGNyKHQsdC5uZXh0KXx8YXQodC5wcmV2LHQsdC5uZXh0KT09PTApKXtpZihHZSh0KSx0PWU9dC5wcmV2LHQ9PT10Lm5leHQpYnJlYWs7aT0hMH1lbHNlIHQ9dC5uZXh0O3doaWxlKGl8fHQhPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBMZShyLGUsdCxpLG4sYSxzKXtpZihyKXshcyYmYSYmZm8ocixpLG4sYSk7Zm9yKHZhciBvPXIsaCx1O3IucHJldiE9PXIubmV4dDspe2lmKGg9ci5wcmV2LHU9ci5uZXh0LGE/aW8ocixpLG4sYSk6cm8ocikpe2UucHVzaChoLmkvdHwwKSxlLnB1c2goci5pL3R8MCksZS5wdXNoKHUuaS90fDApLEdlKHIpLHI9dS5uZXh0LG89dS5uZXh0O2NvbnRpbnVlfWlmKHI9dSxyPT09byl7cz9zPT09MT8ocj1ubyhuZShyKSxlLHQpLExlKHIsZSx0LGksbixhLDIpKTpzPT09MiYmYW8ocixlLHQsaSxuLGEpOkxlKG5lKHIpLGUsdCxpLG4sYSwxKTticmVha319fX1mdW5jdGlvbiBybyhyKXt2YXIgZT1yLnByZXYsdD1yLGk9ci5uZXh0O2lmKGF0KGUsdCxpKT49MClyZXR1cm4hMTtmb3IodmFyIG49ZS54LGE9dC54LHM9aS54LG89ZS55LGg9dC55LHU9aS55LGw9bjxhP248cz9uOnM6YTxzP2E6cyxjPW88aD9vPHU/bzp1Omg8dT9oOnUsZj1uPmE/bj5zP246czphPnM/YTpzLGQ9bz5oP28+dT9vOnU6aD51P2g6dSxwPWkubmV4dDtwIT09ZTspe2lmKHAueD49bCYmcC54PD1mJiZwLnk+PWMmJnAueTw9ZCYmYmUobixvLGEsaCxzLHUscC54LHAueSkmJmF0KHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gaW8ocixlLHQsaSl7dmFyIG49ci5wcmV2LGE9cixzPXIubmV4dDtpZihhdChuLGEscyk+PTApcmV0dXJuITE7Zm9yKHZhciBvPW4ueCxoPWEueCx1PXMueCxsPW4ueSxjPWEueSxmPXMueSxkPW88aD9vPHU/bzp1Omg8dT9oOnUscD1sPGM/bDxmP2w6ZjpjPGY/YzpmLHY9bz5oP28+dT9vOnU6aD51P2g6dSxfPWw+Yz9sPmY/bDpmOmM+Zj9jOmYsbT1oaShkLHAsZSx0LGkpLGc9aGkodixfLGUsdCxpKSx5PXIucHJldlosVD1yLm5leHRaO3kmJnkuej49bSYmVCYmVC56PD1nOyl7aWYoeS54Pj1kJiZ5Lng8PXYmJnkueT49cCYmeS55PD1fJiZ5IT09biYmeSE9PXMmJmJlKG8sbCxoLGMsdSxmLHkueCx5LnkpJiZhdCh5LnByZXYseSx5Lm5leHQpPj0wfHwoeT15LnByZXZaLFQueD49ZCYmVC54PD12JiZULnk+PXAmJlQueTw9XyYmVCE9PW4mJlQhPT1zJiZiZShvLGwsaCxjLHUsZixULngsVC55KSYmYXQoVC5wcmV2LFQsVC5uZXh0KT49MCkpcmV0dXJuITE7VD1ULm5leHRafWZvcig7eSYmeS56Pj1tOyl7aWYoeS54Pj1kJiZ5Lng8PXYmJnkueT49cCYmeS55PD1fJiZ5IT09biYmeSE9PXMmJmJlKG8sbCxoLGMsdSxmLHkueCx5LnkpJiZhdCh5LnByZXYseSx5Lm5leHQpPj0wKXJldHVybiExO3k9eS5wcmV2Wn1mb3IoO1QmJlQuejw9Zzspe2lmKFQueD49ZCYmVC54PD12JiZULnk+PXAmJlQueTw9XyYmVCE9PW4mJlQhPT1zJiZiZShvLGwsaCxjLHUsZixULngsVC55KSYmYXQoVC5wcmV2LFQsVC5uZXh0KT49MClyZXR1cm4hMTtUPVQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gbm8ocixlLHQpe3ZhciBpPXI7ZG97dmFyIG49aS5wcmV2LGE9aS5uZXh0Lm5leHQ7IWNyKG4sYSkmJlluKG4saSxpLm5leHQsYSkmJlVlKG4sYSkmJlVlKGEsbikmJihlLnB1c2gobi5pL3R8MCksZS5wdXNoKGkuaS90fDApLGUucHVzaChhLmkvdHwwKSxHZShpKSxHZShpLm5leHQpLGk9cj1hKSxpPWkubmV4dH13aGlsZShpIT09cik7cmV0dXJuIG5lKGkpfWZ1bmN0aW9uIGFvKHIsZSx0LGksbixhKXt2YXIgcz1yO2Rve2Zvcih2YXIgbz1zLm5leHQubmV4dDtvIT09cy5wcmV2Oyl7aWYocy5pIT09by5pJiZ2byhzLG8pKXt2YXIgaD16bihzLG8pO3M9bmUocyxzLm5leHQpLGg9bmUoaCxoLm5leHQpLExlKHMsZSx0LGksbixhLDApLExlKGgsZSx0LGksbixhLDApO3JldHVybn1vPW8ubmV4dH1zPXMubmV4dH13aGlsZShzIT09cil9ZnVuY3Rpb24gc28ocixlLHQsaSl7dmFyIG49W10sYSxzLG8saCx1O2ZvcihhPTAscz1lLmxlbmd0aDthPHM7YSsrKW89ZVthXSppLGg9YTxzLTE/ZVthKzFdKmk6ci5sZW5ndGgsdT1WbihyLG8saCxpLCExKSx1PT09dS5uZXh0JiYodS5zdGVpbmVyPSEwKSxuLnB1c2gocG8odSkpO2ZvcihuLnNvcnQob28pLGE9MDthPG4ubGVuZ3RoO2ErKyl0PWhvKG5bYV0sdCk7cmV0dXJuIHR9ZnVuY3Rpb24gb28ocixlKXtyZXR1cm4gci54LWUueH1mdW5jdGlvbiBobyhyLGUpe3ZhciB0PXVvKHIsZSk7aWYoIXQpcmV0dXJuIGU7dmFyIGk9em4odCxyKTtyZXR1cm4gbmUoaSxpLm5leHQpLG5lKHQsdC5uZXh0KX1mdW5jdGlvbiB1byhyLGUpe3ZhciB0PWUsaT1yLngsbj1yLnksYT0tMS8wLHM7ZG97aWYobjw9dC55JiZuPj10Lm5leHQueSYmdC5uZXh0LnkhPT10Lnkpe3ZhciBvPXQueCsobi10LnkpKih0Lm5leHQueC10LngpLyh0Lm5leHQueS10LnkpO2lmKG88PWkmJm8+YSYmKGE9byxzPXQueDx0Lm5leHQueD90OnQubmV4dCxvPT09aSkpcmV0dXJuIHN9dD10Lm5leHR9d2hpbGUodCE9PWUpO2lmKCFzKXJldHVybiBudWxsO3ZhciBoPXMsdT1zLngsbD1zLnksYz0xLzAsZjt0PXM7ZG8gaT49dC54JiZ0Lng+PXUmJmkhPT10LngmJmJlKG48bD9pOmEsbix1LGwsbjxsP2E6aSxuLHQueCx0LnkpJiYoZj1NYXRoLmFicyhuLXQueSkvKGktdC54KSxVZSh0LHIpJiYoZjxjfHxmPT09YyYmKHQueD5zLnh8fHQueD09PXMueCYmbG8ocyx0KSkpJiYocz10LGM9ZikpLHQ9dC5uZXh0O3doaWxlKHQhPT1oKTtyZXR1cm4gc31mdW5jdGlvbiBsbyhyLGUpe3JldHVybiBhdChyLnByZXYscixlLnByZXYpPDAmJmF0KGUubmV4dCxyLHIubmV4dCk8MH1mdW5jdGlvbiBmbyhyLGUsdCxpKXt2YXIgbj1yO2RvIG4uej09PTAmJihuLno9aGkobi54LG4ueSxlLHQsaSkpLG4ucHJldlo9bi5wcmV2LG4ubmV4dFo9bi5uZXh0LG49bi5uZXh0O3doaWxlKG4hPT1yKTtuLnByZXZaLm5leHRaPW51bGwsbi5wcmV2Wj1udWxsLGNvKG4pfWZ1bmN0aW9uIGNvKHIpe3ZhciBlLHQsaSxuLGEscyxvLGgsdT0xO2Rve2Zvcih0PXIscj1udWxsLGE9bnVsbCxzPTA7dDspe2ZvcihzKyssaT10LG89MCxlPTA7ZTx1JiYobysrLGk9aS5uZXh0WiwhIWkpO2UrKyk7Zm9yKGg9dTtvPjB8fGg+MCYmaTspbyE9PTAmJihoPT09MHx8IWl8fHQuejw9aS56KT8obj10LHQ9dC5uZXh0WixvLS0pOihuPWksaT1pLm5leHRaLGgtLSksYT9hLm5leHRaPW46cj1uLG4ucHJldlo9YSxhPW47dD1pfWEubmV4dFo9bnVsbCx1Kj0yfXdoaWxlKHM+MSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaGkocixlLHQsaSxuKXtyZXR1cm4gcj0oci10KSpufDAsZT0oZS1pKSpufDAscj0ocnxyPDw4KSYxNjcxMTkzNSxyPShyfHI8PDQpJjI1MjY0NTEzNSxyPShyfHI8PDIpJjg1ODk5MzQ1OSxyPShyfHI8PDEpJjE0MzE2NTU3NjUsZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUscnxlPDwxfWZ1bmN0aW9uIHBvKHIpe3ZhciBlPXIsdD1yO2RvKGUueDx0Lnh8fGUueD09PXQueCYmZS55PHQueSkmJih0PWUpLGU9ZS5uZXh0O3doaWxlKGUhPT1yKTtyZXR1cm4gdH1mdW5jdGlvbiBiZShyLGUsdCxpLG4sYSxzLG8pe3JldHVybihuLXMpKihlLW8pPj0oci1zKSooYS1vKSYmKHItcykqKGktbyk+PSh0LXMpKihlLW8pJiYodC1zKSooYS1vKT49KG4tcykqKGktbyl9ZnVuY3Rpb24gdm8ocixlKXtyZXR1cm4gci5uZXh0LmkhPT1lLmkmJnIucHJldi5pIT09ZS5pJiYhX28ocixlKSYmKFVlKHIsZSkmJlVlKGUscikmJm1vKHIsZSkmJihhdChyLnByZXYscixlLnByZXYpfHxhdChyLGUucHJldixlKSl8fGNyKHIsZSkmJmF0KHIucHJldixyLHIubmV4dCk+MCYmYXQoZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBhdChyLGUsdCl7cmV0dXJuKGUueS1yLnkpKih0LngtZS54KS0oZS54LXIueCkqKHQueS1lLnkpfWZ1bmN0aW9uIGNyKHIsZSl7cmV0dXJuIHIueD09PWUueCYmci55PT09ZS55fWZ1bmN0aW9uIFluKHIsZSx0LGkpe3ZhciBuPXByKGF0KHIsZSx0KSksYT1wcihhdChyLGUsaSkpLHM9cHIoYXQodCxpLHIpKSxvPXByKGF0KHQsaSxlKSk7cmV0dXJuISEobiE9PWEmJnMhPT1vfHxuPT09MCYmZHIocix0LGUpfHxhPT09MCYmZHIocixpLGUpfHxzPT09MCYmZHIodCxyLGkpfHxvPT09MCYmZHIodCxlLGkpKX1mdW5jdGlvbiBkcihyLGUsdCl7cmV0dXJuIGUueDw9TWF0aC5tYXgoci54LHQueCkmJmUueD49TWF0aC5taW4oci54LHQueCkmJmUueTw9TWF0aC5tYXgoci55LHQueSkmJmUueT49TWF0aC5taW4oci55LHQueSl9ZnVuY3Rpb24gcHIocil7cmV0dXJuIHI+MD8xOnI8MD8tMTowfWZ1bmN0aW9uIF9vKHIsZSl7dmFyIHQ9cjtkb3tpZih0LmkhPT1yLmkmJnQubmV4dC5pIT09ci5pJiZ0LmkhPT1lLmkmJnQubmV4dC5pIT09ZS5pJiZZbih0LHQubmV4dCxyLGUpKXJldHVybiEwO3Q9dC5uZXh0fXdoaWxlKHQhPT1yKTtyZXR1cm4hMX1mdW5jdGlvbiBVZShyLGUpe3JldHVybiBhdChyLnByZXYscixyLm5leHQpPDA/YXQocixlLHIubmV4dCk+PTAmJmF0KHIsci5wcmV2LGUpPj0wOmF0KHIsZSxyLnByZXYpPDB8fGF0KHIsci5uZXh0LGUpPDB9ZnVuY3Rpb24gbW8ocixlKXt2YXIgdD1yLGk9ITEsbj0oci54K2UueCkvMixhPShyLnkrZS55KS8yO2RvIHQueT5hIT10Lm5leHQueT5hJiZ0Lm5leHQueSE9PXQueSYmbjwodC5uZXh0LngtdC54KSooYS10LnkpLyh0Lm5leHQueS10LnkpK3QueCYmKGk9IWkpLHQ9dC5uZXh0O3doaWxlKHQhPT1yKTtyZXR1cm4gaX1mdW5jdGlvbiB6bihyLGUpe3ZhciB0PW5ldyB1aShyLmksci54LHIueSksaT1uZXcgdWkoZS5pLGUueCxlLnkpLG49ci5uZXh0LGE9ZS5wcmV2O3JldHVybiByLm5leHQ9ZSxlLnByZXY9cix0Lm5leHQ9bixuLnByZXY9dCxpLm5leHQ9dCx0LnByZXY9aSxhLm5leHQ9aSxpLnByZXY9YSxpfWZ1bmN0aW9uIFduKHIsZSx0LGkpe3ZhciBuPW5ldyB1aShyLGUsdCk7cmV0dXJuIGk/KG4ubmV4dD1pLm5leHQsbi5wcmV2PWksaS5uZXh0LnByZXY9bixpLm5leHQ9bik6KG4ucHJldj1uLG4ubmV4dD1uKSxufWZ1bmN0aW9uIEdlKHIpe3IubmV4dC5wcmV2PXIucHJldixyLnByZXYubmV4dD1yLm5leHQsci5wcmV2WiYmKHIucHJldloubmV4dFo9ci5uZXh0Wiksci5uZXh0WiYmKHIubmV4dFoucHJldlo9ci5wcmV2Wil9ZnVuY3Rpb24gdWkocixlLHQpe3RoaXMuaT1yLHRoaXMueD1lLHRoaXMueT10LHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej0wLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZyLmRldmlhdGlvbj1mdW5jdGlvbihyLGUsdCxpKXt2YXIgbj1lJiZlLmxlbmd0aCxhPW4/ZVswXSp0OnIubGVuZ3RoLHM9TWF0aC5hYnMobGkociwwLGEsdCkpO2lmKG4pZm9yKHZhciBvPTAsaD1lLmxlbmd0aDtvPGg7bysrKXt2YXIgdT1lW29dKnQsbD1vPGgtMT9lW28rMV0qdDpyLmxlbmd0aDtzLT1NYXRoLmFicyhsaShyLHUsbCx0KSl9dmFyIGM9MDtmb3Iobz0wO288aS5sZW5ndGg7bys9Myl7dmFyIGY9aVtvXSp0LGQ9aVtvKzFdKnQscD1pW28rMl0qdDtjKz1NYXRoLmFicygocltmXS1yW3BdKSoocltkKzFdLXJbZisxXSktKHJbZl0tcltkXSkqKHJbcCsxXS1yW2YrMV0pKX1yZXR1cm4gcz09PTAmJmM9PT0wPzA6TWF0aC5hYnMoKGMtcykvcyl9O2Z1bmN0aW9uIGxpKHIsZSx0LGkpe2Zvcih2YXIgbj0wLGE9ZSxzPXQtaTthPHQ7YSs9aSluKz0ocltzXS1yW2FdKSooclthKzFdK3JbcysxXSkscz1hO3JldHVybiBufWZyLmZsYXR0ZW49ZnVuY3Rpb24ocil7Zm9yKHZhciBlPXJbMF1bMF0ubGVuZ3RoLHQ9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0saT0wLG49MDtuPHIubGVuZ3RoO24rKyl7Zm9yKHZhciBhPTA7YTxyW25dLmxlbmd0aDthKyspZm9yKHZhciBzPTA7czxlO3MrKyl0LnZlcnRpY2VzLnB1c2gocltuXVthXVtzXSk7bj4wJiYoaSs9cltuLTFdLmxlbmd0aCx0LmhvbGVzLnB1c2goaSkpfXJldHVybiB0fTt2YXIgZmk9e2V4cG9ydHM6e319OyhmdW5jdGlvbihyLGUpeyhmdW5jdGlvbih0KXt2YXIgaT1lJiYhZS5ub2RlVHlwZSYmZSxuPXImJiFyLm5vZGVUeXBlJiZyLGE9dHlwZW9mIHJpPT0ib2JqZWN0IiYmcmk7KGEuZ2xvYmFsPT09YXx8YS53aW5kb3c9PT1hfHxhLnNlbGY9PT1hKSYmKHQ9YSk7dmFyIHMsbz0yMTQ3NDgzNjQ3LGg9MzYsdT0xLGw9MjYsYz0zOCxmPTcwMCxkPTcyLHA9MTI4LHY9Ii0iLF89L154bi0tLyxtPS9bXlx4MjAtXHg3RV0vLGc9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLHk9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFQ9aC11LHg9TWF0aC5mbG9vcixiPVN0cmluZy5mcm9tQ2hhckNvZGUsRTtmdW5jdGlvbiBBKEMpe3Rocm93IFJhbmdlRXJyb3IoeVtDXSl9ZnVuY3Rpb24gdyhDLFApe2Zvcih2YXIgWD1DLmxlbmd0aCx6PVtdO1gtLTspeltYXT1QKENbWF0pO3JldHVybiB6fWZ1bmN0aW9uIFMoQyxQKXt2YXIgWD1DLnNwbGl0KCJAIiksej0iIjtYLmxlbmd0aD4xJiYoej1YWzBdKyJAIixDPVhbMV0pLEM9Qy5yZXBsYWNlKGcsIi4iKTt2YXIgVz1DLnNwbGl0KCIuIiksZnQ9dyhXLFApLmpvaW4oIi4iKTtyZXR1cm4geitmdH1mdW5jdGlvbiBEKEMpe2Zvcih2YXIgUD1bXSxYPTAsej1DLmxlbmd0aCxXLGZ0O1g8ejspVz1DLmNoYXJDb2RlQXQoWCsrKSxXPj01NTI5NiYmVzw9NTYzMTkmJlg8ej8oZnQ9Qy5jaGFyQ29kZUF0KFgrKyksKGZ0JjY0NTEyKT09NTYzMjA/UC5wdXNoKCgoVyYxMDIzKTw8MTApKyhmdCYxMDIzKSs2NTUzNik6KFAucHVzaChXKSxYLS0pKTpQLnB1c2goVyk7cmV0dXJuIFB9ZnVuY3Rpb24gQihDKXtyZXR1cm4gdyhDLGZ1bmN0aW9uKFApe3ZhciBYPSIiO3JldHVybiBQPjY1NTM1JiYoUC09NjU1MzYsWCs9YihQPj4+MTAmMTAyM3w1NTI5NiksUD01NjMyMHxQJjEwMjMpLFgrPWIoUCksWH0pLmpvaW4oIiIpfWZ1bmN0aW9uIEcoQyl7cmV0dXJuIEMtNDg8MTA/Qy0yMjpDLTY1PDI2P0MtNjU6Qy05NzwyNj9DLTk3Omh9ZnVuY3Rpb24gWihDLFApe3JldHVybiBDKzIyKzc1KihDPDI2KS0oKFAhPTApPDw1KX1mdW5jdGlvbiBNKEMsUCxYKXt2YXIgej0wO2ZvcihDPVg/eChDL2YpOkM+PjEsQys9eChDL1ApO0M+VCpsPj4xO3orPWgpQz14KEMvVCk7cmV0dXJuIHgoeisoVCsxKSpDLyhDK2MpKX1mdW5jdGlvbiBPKEMpe3ZhciBQPVtdLFg9Qy5sZW5ndGgseixXPTAsZnQ9cCxydD1kLGl0LHl0LFR0LGN0LEosZXQsbnQsVixFdDtmb3IoaXQ9Qy5sYXN0SW5kZXhPZih2KSxpdDwwJiYoaXQ9MCkseXQ9MDt5dDxpdDsrK3l0KUMuY2hhckNvZGVBdCh5dCk+PTEyOCYmQSgibm90LWJhc2ljIiksUC5wdXNoKEMuY2hhckNvZGVBdCh5dCkpO2ZvcihUdD1pdD4wP2l0KzE6MDtUdDxYOyl7Zm9yKGN0PVcsSj0xLGV0PWg7VHQ+PVgmJkEoImludmFsaWQtaW5wdXQiKSxudD1HKEMuY2hhckNvZGVBdChUdCsrKSksKG50Pj1ofHxudD54KChvLVcpL0opKSYmQSgib3ZlcmZsb3ciKSxXKz1udCpKLFY9ZXQ8PXJ0P3U6ZXQ+PXJ0K2w/bDpldC1ydCwhKG50PFYpO2V0Kz1oKUV0PWgtVixKPngoby9FdCkmJkEoIm92ZXJmbG93IiksSio9RXQ7ej1QLmxlbmd0aCsxLHJ0PU0oVy1jdCx6LGN0PT0wKSx4KFcveik+by1mdCYmQSgib3ZlcmZsb3ciKSxmdCs9eChXL3opLFclPXosUC5zcGxpY2UoVysrLDAsZnQpfXJldHVybiBCKFApfWZ1bmN0aW9uIGsoQyl7dmFyIFAsWCx6LFcsZnQscnQsaXQseXQsVHQsY3QsSixldD1bXSxudCxWLEV0LHd0O2ZvcihDPUQoQyksbnQ9Qy5sZW5ndGgsUD1wLFg9MCxmdD1kLHJ0PTA7cnQ8bnQ7KytydClKPUNbcnRdLEo8MTI4JiZldC5wdXNoKGIoSikpO2Zvcih6PVc9ZXQubGVuZ3RoLFcmJmV0LnB1c2godik7ejxudDspe2ZvcihpdD1vLHJ0PTA7cnQ8bnQ7KytydClKPUNbcnRdLEo+PVAmJko8aXQmJihpdD1KKTtmb3IoVj16KzEsaXQtUD54KChvLVgpL1YpJiZBKCJvdmVyZmxvdyIpLFgrPShpdC1QKSpWLFA9aXQscnQ9MDtydDxudDsrK3J0KWlmKEo9Q1tydF0sSjxQJiYrK1g+byYmQSgib3ZlcmZsb3ciKSxKPT1QKXtmb3IoeXQ9WCxUdD1oO2N0PVR0PD1mdD91OlR0Pj1mdCtsP2w6VHQtZnQsISh5dDxjdCk7VHQrPWgpd3Q9eXQtY3QsRXQ9aC1jdCxldC5wdXNoKGIoWihjdCt3dCVFdCwwKSkpLHl0PXgod3QvRXQpO2V0LnB1c2goYihaKHl0LDApKSksZnQ9TShYLFYsej09VyksWD0wLCsren0rK1gsKytQfXJldHVybiBldC5qb2luKCIiKX1mdW5jdGlvbiBndChDKXtyZXR1cm4gUyhDLGZ1bmN0aW9uKFApe3JldHVybiBfLnRlc3QoUCk/TyhQLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlB9KX1mdW5jdGlvbiBZKEMpe3JldHVybiBTKEMsZnVuY3Rpb24oUCl7cmV0dXJuIG0udGVzdChQKT8ieG4tLSIrayhQKTpQfSl9aWYocz17dmVyc2lvbjoiMS4zLjIiLHVjczI6e2RlY29kZTpELGVuY29kZTpCfSxkZWNvZGU6TyxlbmNvZGU6ayx0b0FTQ0lJOlksdG9Vbmljb2RlOmd0fSxpJiZuKWlmKHIuZXhwb3J0cz09aSluLmV4cG9ydHM9cztlbHNlIGZvcihFIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShFKSYmKGlbRV09c1tFXSk7ZWxzZSB0LnB1bnljb2RlPXN9KShyaSl9KShmaSxmaS5leHBvcnRzKTt2YXIgZ289e2lzU3RyaW5nOmZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9LGlzT2JqZWN0OmZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsfSxpc051bGw6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1udWxsfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbH19LGtlPXt9O2Z1bmN0aW9uIHlvKHIsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUpfXZhciB4bz1mdW5jdGlvbihyLGUsdCxpKXtlPWV8fCImIix0PXR8fCI9Ijt2YXIgbj17fTtpZih0eXBlb2YgciE9InN0cmluZyJ8fHIubGVuZ3RoPT09MClyZXR1cm4gbjt2YXIgYT0vXCsvZztyPXIuc3BsaXQoZSk7dmFyIHM9MWUzO2kmJnR5cGVvZiBpLm1heEtleXM9PSJudW1iZXIiJiYocz1pLm1heEtleXMpO3ZhciBvPXIubGVuZ3RoO3M+MCYmbz5zJiYobz1zKTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgdT1yW2hdLnJlcGxhY2UoYSwiJTIwIiksbD11LmluZGV4T2YodCksYyxmLGQscDtsPj0wPyhjPXUuc3Vic3RyKDAsbCksZj11LnN1YnN0cihsKzEpKTooYz11LGY9IiIpLGQ9ZGVjb2RlVVJJQ29tcG9uZW50KGMpLHA9ZGVjb2RlVVJJQ29tcG9uZW50KGYpLHlvKG4sZCk/QXJyYXkuaXNBcnJheShuW2RdKT9uW2RdLnB1c2gocCk6bltkXT1bbltkXSxwXTpuW2RdPXB9cmV0dXJuIG59LFhlPWZ1bmN0aW9uKHIpe3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJzdHJpbmciOnJldHVybiByO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShyKT9yOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fSxibz1mdW5jdGlvbihyLGUsdCxpKXtyZXR1cm4gZT1lfHwiJiIsdD10fHwiPSIscj09PW51bGwmJihyPXZvaWQgMCksdHlwZW9mIHI9PSJvYmplY3QiP09iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihuKXt2YXIgYT1lbmNvZGVVUklDb21wb25lbnQoWGUobikpK3Q7cmV0dXJuIEFycmF5LmlzQXJyYXkocltuXSk/cltuXS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIGErZW5jb2RlVVJJQ29tcG9uZW50KFhlKHMpKX0pLmpvaW4oZSk6YStlbmNvZGVVUklDb21wb25lbnQoWGUocltuXSkpfSkuam9pbihlKTppP2VuY29kZVVSSUNvbXBvbmVudChYZShpKSkrdCtlbmNvZGVVUklDb21wb25lbnQoWGUocikpOiIifTtrZS5kZWNvZGU9a2UucGFyc2U9eG8sa2UuZW5jb2RlPWtlLnN0cmluZ2lmeT1ibzt2YXIgVG89ZmkuZXhwb3J0cyxrdD1nbyxFbz12cix3bz1ObyxTbz1GbztmdW5jdGlvbiBJdCgpe3RoaXMucHJvdG9jb2w9bnVsbCx0aGlzLnNsYXNoZXM9bnVsbCx0aGlzLmF1dGg9bnVsbCx0aGlzLmhvc3Q9bnVsbCx0aGlzLnBvcnQ9bnVsbCx0aGlzLmhvc3RuYW1lPW51bGwsdGhpcy5oYXNoPW51bGwsdGhpcy5zZWFyY2g9bnVsbCx0aGlzLnF1ZXJ5PW51bGwsdGhpcy5wYXRobmFtZT1udWxsLHRoaXMucGF0aD1udWxsLHRoaXMuaHJlZj1udWxsfXZhciBQbz0vXihbYS16MC05ListXSs6KS9pLFJvPS86WzAtOV0qJC8sQW89L14oXC9cLz8oPyFcLylbXlw/XHNdKikoXD9bXlxzXSopPyQvLENvPVsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsYApgLCIJIl0sSW89WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KENvKSxjaT1bIiciXS5jb25jYXQoSW8pLHFuPVsiJSIsIi8iLCI/IiwiOyIsIiMiXS5jb25jYXQoY2kpLCRuPVsiLyIsIj8iLCIjIl0sT289MjU1LEtuPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxNbz0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sRG89e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sZGk9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sVGU9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSxwaT1rZTtmdW5jdGlvbiB2cihyLGUsdCl7aWYociYma3QuaXNPYmplY3QocikmJnIgaW5zdGFuY2VvZiBJdClyZXR1cm4gcjt2YXIgaT1uZXcgSXQ7cmV0dXJuIGkucGFyc2UocixlLHQpLGl9SXQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHIsZSx0KXtpZigha3QuaXNTdHJpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiByKTt2YXIgaT1yLmluZGV4T2YoIj8iKSxuPWkhPT0tMSYmaTxyLmluZGV4T2YoIiMiKT8iPyI6IiMiLGE9ci5zcGxpdChuKSxzPS9cXC9nO2FbMF09YVswXS5yZXBsYWNlKHMsIi8iKSxyPWEuam9pbihuKTt2YXIgbz1yO2lmKG89by50cmltKCksIXQmJnIuc3BsaXQoIiMiKS5sZW5ndGg9PT0xKXt2YXIgaD1Bby5leGVjKG8pO2lmKGgpcmV0dXJuIHRoaXMucGF0aD1vLHRoaXMuaHJlZj1vLHRoaXMucGF0aG5hbWU9aFsxXSxoWzJdPyh0aGlzLnNlYXJjaD1oWzJdLGU/dGhpcy5xdWVyeT1waS5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOnRoaXMucXVlcnk9dGhpcy5zZWFyY2guc3Vic3RyKDEpKTplJiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgdT1Qby5leGVjKG8pO2lmKHUpe3U9dVswXTt2YXIgbD11LnRvTG93ZXJDYXNlKCk7dGhpcy5wcm90b2NvbD1sLG89by5zdWJzdHIodS5sZW5ndGgpfWlmKHR8fHV8fG8ubWF0Y2goL15cL1wvW15AXC9dK0BbXkBcL10rLykpe3ZhciBjPW8uc3Vic3RyKDAsMik9PT0iLy8iO2MmJiEodSYmZGlbdV0pJiYobz1vLnN1YnN0cigyKSx0aGlzLnNsYXNoZXM9ITApfWlmKCFkaVt1XSYmKGN8fHUmJiFUZVt1XSkpe2Zvcih2YXIgZj0tMSxkPTA7ZDwkbi5sZW5ndGg7ZCsrKXt2YXIgcD1vLmluZGV4T2YoJG5bZF0pO3AhPT0tMSYmKGY9PT0tMXx8cDxmKSYmKGY9cCl9dmFyIHYsXztmPT09LTE/Xz1vLmxhc3RJbmRleE9mKCJAIik6Xz1vLmxhc3RJbmRleE9mKCJAIixmKSxfIT09LTEmJih2PW8uc2xpY2UoMCxfKSxvPW8uc2xpY2UoXysxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KHYpKSxmPS0xO2Zvcih2YXIgZD0wO2Q8cW4ubGVuZ3RoO2QrKyl7dmFyIHA9by5pbmRleE9mKHFuW2RdKTtwIT09LTEmJihmPT09LTF8fHA8ZikmJihmPXApfWY9PT0tMSYmKGY9by5sZW5ndGgpLHRoaXMuaG9zdD1vLnNsaWNlKDAsZiksbz1vLnNsaWNlKGYpLHRoaXMucGFyc2VIb3N0KCksdGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lfHwiIjt2YXIgbT10aGlzLmhvc3RuYW1lWzBdPT09IlsiJiZ0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoLTFdPT09Il0iO2lmKCFtKWZvcih2YXIgZz10aGlzLmhvc3RuYW1lLnNwbGl0KC9cLi8pLGQ9MCx5PWcubGVuZ3RoO2Q8eTtkKyspe3ZhciBUPWdbZF07aWYoVCYmIVQubWF0Y2goS24pKXtmb3IodmFyIHg9IiIsYj0wLEU9VC5sZW5ndGg7YjxFO2IrKylULmNoYXJDb2RlQXQoYik+MTI3P3grPSJ4Ijp4Kz1UW2JdO2lmKCF4Lm1hdGNoKEtuKSl7dmFyIEE9Zy5zbGljZSgwLGQpLHc9Zy5zbGljZShkKzEpLFM9VC5tYXRjaChNbyk7UyYmKEEucHVzaChTWzFdKSx3LnVuc2hpZnQoU1syXSkpLHcubGVuZ3RoJiYobz0iLyIrdy5qb2luKCIuIikrbyksdGhpcy5ob3N0bmFtZT1BLmpvaW4oIi4iKTticmVha319fXRoaXMuaG9zdG5hbWUubGVuZ3RoPk9vP3RoaXMuaG9zdG5hbWU9IiI6dGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksbXx8KHRoaXMuaG9zdG5hbWU9VG8udG9BU0NJSSh0aGlzLmhvc3RuYW1lKSk7dmFyIEQ9dGhpcy5wb3J0PyI6Iit0aGlzLnBvcnQ6IiIsQj10aGlzLmhvc3RuYW1lfHwiIjt0aGlzLmhvc3Q9QitELHRoaXMuaHJlZis9dGhpcy5ob3N0LG0mJih0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsdGhpcy5ob3N0bmFtZS5sZW5ndGgtMiksb1swXSE9PSIvIiYmKG89Ii8iK28pKX1pZighRG9bbF0pZm9yKHZhciBkPTAseT1jaS5sZW5ndGg7ZDx5O2QrKyl7dmFyIEc9Y2lbZF07aWYoby5pbmRleE9mKEcpIT09LTEpe3ZhciBaPWVuY29kZVVSSUNvbXBvbmVudChHKTtaPT09RyYmKFo9ZXNjYXBlKEcpKSxvPW8uc3BsaXQoRykuam9pbihaKX19dmFyIE09by5pbmRleE9mKCIjIik7TSE9PS0xJiYodGhpcy5oYXNoPW8uc3Vic3RyKE0pLG89by5zbGljZSgwLE0pKTt2YXIgTz1vLmluZGV4T2YoIj8iKTtpZihPIT09LTE/KHRoaXMuc2VhcmNoPW8uc3Vic3RyKE8pLHRoaXMucXVlcnk9by5zdWJzdHIoTysxKSxlJiYodGhpcy5xdWVyeT1waS5wYXJzZSh0aGlzLnF1ZXJ5KSksbz1vLnNsaWNlKDAsTykpOmUmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSxvJiYodGhpcy5wYXRobmFtZT1vKSxUZVtsXSYmdGhpcy5ob3N0bmFtZSYmIXRoaXMucGF0aG5hbWUmJih0aGlzLnBhdGhuYW1lPSIvIiksdGhpcy5wYXRobmFtZXx8dGhpcy5zZWFyY2gpe3ZhciBEPXRoaXMucGF0aG5hbWV8fCIiLGs9dGhpcy5zZWFyY2h8fCIiO3RoaXMucGF0aD1EK2t9cmV0dXJuIHRoaXMuaHJlZj10aGlzLmZvcm1hdCgpLHRoaXN9O2Z1bmN0aW9uIEZvKHIpe3JldHVybiBrdC5pc1N0cmluZyhyKSYmKHI9dnIocikpLHIgaW5zdGFuY2VvZiBJdD9yLmZvcm1hdCgpOkl0LnByb3RvdHlwZS5mb3JtYXQuY2FsbChyKX1JdC5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5hdXRofHwiIjtyJiYocj1lbmNvZGVVUklDb21wb25lbnQocikscj1yLnJlcGxhY2UoLyUzQS9pLCI6Iikscis9IkAiKTt2YXIgZT10aGlzLnByb3RvY29sfHwiIix0PXRoaXMucGF0aG5hbWV8fCIiLGk9dGhpcy5oYXNofHwiIixuPSExLGE9IiI7dGhpcy5ob3N0P249cit0aGlzLmhvc3Q6dGhpcy5ob3N0bmFtZSYmKG49cisodGhpcy5ob3N0bmFtZS5pbmRleE9mKCI6Iik9PT0tMT90aGlzLmhvc3RuYW1lOiJbIit0aGlzLmhvc3RuYW1lKyJdIiksdGhpcy5wb3J0JiYobis9IjoiK3RoaXMucG9ydCkpLHRoaXMucXVlcnkmJmt0LmlzT2JqZWN0KHRoaXMucXVlcnkpJiZPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgmJihhPXBpLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIHM9dGhpcy5zZWFyY2h8fGEmJiI/IithfHwiIjtyZXR1cm4gZSYmZS5zdWJzdHIoLTEpIT09IjoiJiYoZSs9IjoiKSx0aGlzLnNsYXNoZXN8fCghZXx8VGVbZV0pJiZuIT09ITE/KG49Ii8vIisobnx8IiIpLHQmJnQuY2hhckF0KDApIT09Ii8iJiYodD0iLyIrdCkpOm58fChuPSIiKSxpJiZpLmNoYXJBdCgwKSE9PSIjIiYmKGk9IiMiK2kpLHMmJnMuY2hhckF0KDApIT09Ij8iJiYocz0iPyIrcyksdD10LnJlcGxhY2UoL1s/I10vZyxmdW5jdGlvbihvKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG8pfSkscz1zLnJlcGxhY2UoIiMiLCIlMjMiKSxlK24rdCtzK2l9O2Z1bmN0aW9uIE5vKHIsZSl7cmV0dXJuIHZyKHIsITEsITApLnJlc29sdmUoZSl9SXQucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh2cihyLCExLCEwKSkuZm9ybWF0KCl9LEl0LnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKHIpe2lmKGt0LmlzU3RyaW5nKHIpKXt2YXIgZT1uZXcgSXQ7ZS5wYXJzZShyLCExLCEwKSxyPWV9Zm9yKHZhciB0PW5ldyBJdCxpPU9iamVjdC5rZXlzKHRoaXMpLG49MDtuPGkubGVuZ3RoO24rKyl7dmFyIGE9aVtuXTt0W2FdPXRoaXNbYV19aWYodC5oYXNoPXIuaGFzaCxyLmhyZWY9PT0iIilyZXR1cm4gdC5ocmVmPXQuZm9ybWF0KCksdDtpZihyLnNsYXNoZXMmJiFyLnByb3RvY29sKXtmb3IodmFyIHM9T2JqZWN0LmtleXMociksbz0wO288cy5sZW5ndGg7bysrKXt2YXIgaD1zW29dO2ghPT0icHJvdG9jb2wiJiYodFtoXT1yW2hdKX1yZXR1cm4gVGVbdC5wcm90b2NvbF0mJnQuaG9zdG5hbWUmJiF0LnBhdGhuYW1lJiYodC5wYXRoPXQucGF0aG5hbWU9Ii8iKSx0LmhyZWY9dC5mb3JtYXQoKSx0fWlmKHIucHJvdG9jb2wmJnIucHJvdG9jb2whPT10LnByb3RvY29sKXtpZighVGVbci5wcm90b2NvbF0pe2Zvcih2YXIgdT1PYmplY3Qua2V5cyhyKSxsPTA7bDx1Lmxlbmd0aDtsKyspe3ZhciBjPXVbbF07dFtjXT1yW2NdfXJldHVybiB0LmhyZWY9dC5mb3JtYXQoKSx0fWlmKHQucHJvdG9jb2w9ci5wcm90b2NvbCwhci5ob3N0JiYhZGlbci5wcm90b2NvbF0pe2Zvcih2YXIgeT0oci5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7eS5sZW5ndGgmJiEoci5ob3N0PXkuc2hpZnQoKSk7KTtyLmhvc3R8fChyLmhvc3Q9IiIpLHIuaG9zdG5hbWV8fChyLmhvc3RuYW1lPSIiKSx5WzBdIT09IiImJnkudW5zaGlmdCgiIikseS5sZW5ndGg8MiYmeS51bnNoaWZ0KCIiKSx0LnBhdGhuYW1lPXkuam9pbigiLyIpfWVsc2UgdC5wYXRobmFtZT1yLnBhdGhuYW1lO2lmKHQuc2VhcmNoPXIuc2VhcmNoLHQucXVlcnk9ci5xdWVyeSx0Lmhvc3Q9ci5ob3N0fHwiIix0LmF1dGg9ci5hdXRoLHQuaG9zdG5hbWU9ci5ob3N0bmFtZXx8ci5ob3N0LHQucG9ydD1yLnBvcnQsdC5wYXRobmFtZXx8dC5zZWFyY2gpe3ZhciBmPXQucGF0aG5hbWV8fCIiLGQ9dC5zZWFyY2h8fCIiO3QucGF0aD1mK2R9cmV0dXJuIHQuc2xhc2hlcz10LnNsYXNoZXN8fHIuc2xhc2hlcyx0LmhyZWY9dC5mb3JtYXQoKSx0fXZhciBwPXQucGF0aG5hbWUmJnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iLHY9ci5ob3N0fHxyLnBhdGhuYW1lJiZyLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIixfPXZ8fHB8fHQuaG9zdCYmci5wYXRobmFtZSxtPV8sZz10LnBhdGhuYW1lJiZ0LnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLHk9ci5wYXRobmFtZSYmci5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxUPXQucHJvdG9jb2wmJiFUZVt0LnByb3RvY29sXTtpZihUJiYodC5ob3N0bmFtZT0iIix0LnBvcnQ9bnVsbCx0Lmhvc3QmJihnWzBdPT09IiI/Z1swXT10Lmhvc3Q6Zy51bnNoaWZ0KHQuaG9zdCkpLHQuaG9zdD0iIixyLnByb3RvY29sJiYoci5ob3N0bmFtZT1udWxsLHIucG9ydD1udWxsLHIuaG9zdCYmKHlbMF09PT0iIj95WzBdPXIuaG9zdDp5LnVuc2hpZnQoci5ob3N0KSksci5ob3N0PW51bGwpLF89XyYmKHlbMF09PT0iInx8Z1swXT09PSIiKSksdil0Lmhvc3Q9ci5ob3N0fHxyLmhvc3Q9PT0iIj9yLmhvc3Q6dC5ob3N0LHQuaG9zdG5hbWU9ci5ob3N0bmFtZXx8ci5ob3N0bmFtZT09PSIiP3IuaG9zdG5hbWU6dC5ob3N0bmFtZSx0LnNlYXJjaD1yLnNlYXJjaCx0LnF1ZXJ5PXIucXVlcnksZz15O2Vsc2UgaWYoeS5sZW5ndGgpZ3x8KGc9W10pLGcucG9wKCksZz1nLmNvbmNhdCh5KSx0LnNlYXJjaD1yLnNlYXJjaCx0LnF1ZXJ5PXIucXVlcnk7ZWxzZSBpZigha3QuaXNOdWxsT3JVbmRlZmluZWQoci5zZWFyY2gpKXtpZihUKXt0Lmhvc3RuYW1lPXQuaG9zdD1nLnNoaWZ0KCk7dmFyIHg9dC5ob3N0JiZ0Lmhvc3QuaW5kZXhPZigiQCIpPjA/dC5ob3N0LnNwbGl0KCJAIik6ITE7eCYmKHQuYXV0aD14LnNoaWZ0KCksdC5ob3N0PXQuaG9zdG5hbWU9eC5zaGlmdCgpKX1yZXR1cm4gdC5zZWFyY2g9ci5zZWFyY2gsdC5xdWVyeT1yLnF1ZXJ5LCgha3QuaXNOdWxsKHQucGF0aG5hbWUpfHwha3QuaXNOdWxsKHQuc2VhcmNoKSkmJih0LnBhdGg9KHQucGF0aG5hbWU/dC5wYXRobmFtZToiIikrKHQuc2VhcmNoP3Quc2VhcmNoOiIiKSksdC5ocmVmPXQuZm9ybWF0KCksdH1pZighZy5sZW5ndGgpcmV0dXJuIHQucGF0aG5hbWU9bnVsbCx0LnNlYXJjaD90LnBhdGg9Ii8iK3Quc2VhcmNoOnQucGF0aD1udWxsLHQuaHJlZj10LmZvcm1hdCgpLHQ7Zm9yKHZhciBiPWcuc2xpY2UoLTEpWzBdLEU9KHQuaG9zdHx8ci5ob3N0fHxnLmxlbmd0aD4xKSYmKGI9PT0iLiJ8fGI9PT0iLi4iKXx8Yj09PSIiLEE9MCx3PWcubGVuZ3RoO3c+PTA7dy0tKWI9Z1t3XSxiPT09Ii4iP2cuc3BsaWNlKHcsMSk6Yj09PSIuLiI/KGcuc3BsaWNlKHcsMSksQSsrKTpBJiYoZy5zcGxpY2UodywxKSxBLS0pO2lmKCFfJiYhbSlmb3IoO0EtLTtBKWcudW5zaGlmdCgiLi4iKTtfJiZnWzBdIT09IiImJighZ1swXXx8Z1swXS5jaGFyQXQoMCkhPT0iLyIpJiZnLnVuc2hpZnQoIiIpLEUmJmcuam9pbigiLyIpLnN1YnN0cigtMSkhPT0iLyImJmcucHVzaCgiIik7dmFyIFM9Z1swXT09PSIifHxnWzBdJiZnWzBdLmNoYXJBdCgwKT09PSIvIjtpZihUKXt0Lmhvc3RuYW1lPXQuaG9zdD1TPyIiOmcubGVuZ3RoP2cuc2hpZnQoKToiIjt2YXIgeD10Lmhvc3QmJnQuaG9zdC5pbmRleE9mKCJAIik+MD90Lmhvc3Quc3BsaXQoIkAiKTohMTt4JiYodC5hdXRoPXguc2hpZnQoKSx0Lmhvc3Q9dC5ob3N0bmFtZT14LnNoaWZ0KCkpfXJldHVybiBfPV98fHQuaG9zdCYmZy5sZW5ndGgsXyYmIVMmJmcudW5zaGlmdCgiIiksZy5sZW5ndGg/dC5wYXRobmFtZT1nLmpvaW4oIi8iKToodC5wYXRobmFtZT1udWxsLHQucGF0aD1udWxsKSwoIWt0LmlzTnVsbCh0LnBhdGhuYW1lKXx8IWt0LmlzTnVsbCh0LnNlYXJjaCkpJiYodC5wYXRoPSh0LnBhdGhuYW1lP3QucGF0aG5hbWU6IiIpKyh0LnNlYXJjaD90LnNlYXJjaDoiIikpLHQuYXV0aD1yLmF1dGh8fHQuYXV0aCx0LnNsYXNoZXM9dC5zbGFzaGVzfHxyLnNsYXNoZXMsdC5ocmVmPXQuZm9ybWF0KCksdH0sSXQucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciByPXRoaXMuaG9zdCxlPVJvLmV4ZWMocik7ZSYmKGU9ZVswXSxlIT09IjoiJiYodGhpcy5wb3J0PWUuc3Vic3RyKDEpKSxyPXIuc3Vic3RyKDAsci5sZW5ndGgtZS5sZW5ndGgpKSxyJiYodGhpcy5ob3N0bmFtZT1yKX07dmFyIEVlPXtwYXJzZTpFbyxmb3JtYXQ6U28scmVzb2x2ZTp3b307SS5SRVRJTkFfUFJFRklYPS9AKFswLTlcLl0rKXgvLEkuRkFJTF9JRl9NQUpPUl9QRVJGT1JNQU5DRV9DQVZFQVQ9ITE7dmFyIFpuPSExLEpuPSI2LjUuOCI7ZnVuY3Rpb24gQm8ocil7dmFyIGU7aWYoIVpuKXtpZihJLkFEQVBURVIuZ2V0TmF2aWdhdG9yKCkudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiY2hyb21lIik+LTEpe3ZhciB0PVtgCiAlYyAlYyAlYyBQaXhpSlMgYCtKbisiIC0g4pywICIrcitgIOKcsCAgJWMgICVjICBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIAoKYCwiYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsiLCJiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOyIsImNvbG9yOiAjZmY2NmE1OyBiYWNrZ3JvdW5kOiAjMDMwMzA3OyBwYWRkaW5nOjVweCAwOyIsImJhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7IiwiYmFja2dyb3VuZDogI2ZmYzNkYzsgcGFkZGluZzo1cHggMDsiLCJiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOyIsImNvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOyIsImNvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOyIsImNvbG9yOiAjZmYyNDI0OyBiYWNrZ3JvdW5kOiAjZmZmOyBwYWRkaW5nOjVweCAwOyJdOyhlPWdsb2JhbFRoaXMuY29uc29sZSkubG9nLmFwcGx5KGUsdCl9ZWxzZSBnbG9iYWxUaGlzLmNvbnNvbGUmJmdsb2JhbFRoaXMuY29uc29sZS5sb2coIlBpeGlKUyAiK0puKyIgLSAiK3IrIiAtIGh0dHA6Ly93d3cucGl4aWpzLmNvbS8iKTtabj0hMH19dmFyIHZpO2Z1bmN0aW9uIExvKCl7cmV0dXJuIHR5cGVvZiB2aT4idSImJih2aT1mdW5jdGlvbigpe3ZhciBlPXtzdGVuY2lsOiEwLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6SS5GQUlMX0lGX01BSk9SX1BFUkZPUk1BTkNFX0NBVkVBVH07dHJ5e2lmKCFJLkFEQVBURVIuZ2V0V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkpcmV0dXJuITE7dmFyIHQ9SS5BREFQVEVSLmNyZWF0ZUNhbnZhcygpLGk9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSl8fHQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixlKSxuPSEhKGkmJmkuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5zdGVuY2lsKTtpZihpKXt2YXIgYT1pLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7YSYmYS5sb3NlQ29udGV4dCgpfXJldHVybiBpPW51bGwsbn1jYXRjaHtyZXR1cm4hMX19KCkpLHZpfXZhciBVbz0iI2YwZjhmZiIsR289IiNmYWViZDciLGtvPSIjMDBmZmZmIixYbz0iIzdmZmZkNCIsSG89IiNmMGZmZmYiLGpvPSIjZjVmNWRjIixWbz0iI2ZmZTRjNCIsWW89IiMwMDAwMDAiLHpvPSIjZmZlYmNkIixXbz0iIzAwMDBmZiIscW89IiM4YTJiZTIiLCRvPSIjYTUyYTJhIixLbz0iI2RlYjg4NyIsWm89IiM1ZjllYTAiLEpvPSIjN2ZmZjAwIixRbz0iI2QyNjkxZSIsdGg9IiNmZjdmNTAiLGVoPSIjNjQ5NWVkIixyaD0iI2ZmZjhkYyIsaWg9IiNkYzE0M2MiLG5oPSIjMDBmZmZmIixhaD0iIzAwMDA4YiIsc2g9IiMwMDhiOGIiLG9oPSIjYjg4NjBiIixoaD0iI2E5YTlhOSIsdWg9IiMwMDY0MDAiLGxoPSIjYTlhOWE5IixmaD0iI2JkYjc2YiIsY2g9IiM4YjAwOGIiLGRoPSIjNTU2YjJmIixwaD0iI2ZmOGMwMCIsdmg9IiM5OTMyY2MiLF9oPSIjOGIwMDAwIixtaD0iI2U5OTY3YSIsZ2g9IiM4ZmJjOGYiLHloPSIjNDgzZDhiIix4aD0iIzJmNGY0ZiIsYmg9IiMyZjRmNGYiLFRoPSIjMDBjZWQxIixFaD0iIzk0MDBkMyIsd2g9IiNmZjE0OTMiLFNoPSIjMDBiZmZmIixQaD0iIzY5Njk2OSIsUmg9IiM2OTY5NjkiLEFoPSIjMWU5MGZmIixDaD0iI2IyMjIyMiIsSWg9IiNmZmZhZjAiLE9oPSIjMjI4YjIyIixNaD0iI2ZmMDBmZiIsRGg9IiNkY2RjZGMiLEZoPSIjZjhmOGZmIixOaD0iI2RhYTUyMCIsQmg9IiNmZmQ3MDAiLExoPSIjODA4MDgwIixVaD0iIzAwODAwMCIsR2g9IiNhZGZmMmYiLGtoPSIjODA4MDgwIixYaD0iI2YwZmZmMCIsSGg9IiNmZjY5YjQiLGpoPSIjY2Q1YzVjIixWaD0iIzRiMDA4MiIsWWg9IiNmZmZmZjAiLHpoPSIjZjBlNjhjIixXaD0iI2ZmZjBmNSIscWg9IiNlNmU2ZmEiLCRoPSIjN2NmYzAwIixLaD0iI2ZmZmFjZCIsWmg9IiNhZGQ4ZTYiLEpoPSIjZjA4MDgwIixRaD0iI2UwZmZmZiIsdHU9IiNmYWZhZDIiLGV1PSIjZDNkM2QzIixydT0iIzkwZWU5MCIsaXU9IiNkM2QzZDMiLG51PSIjZmZiNmMxIixhdT0iI2ZmYTA3YSIsc3U9IiMyMGIyYWEiLG91PSIjODdjZWZhIixodT0iIzc3ODg5OSIsdXU9IiM3Nzg4OTkiLGx1PSIjYjBjNGRlIixmdT0iI2ZmZmZlMCIsY3U9IiMwMGZmMDAiLGR1PSIjMzJjZDMyIixwdT0iI2ZhZjBlNiIsdnU9IiNmZjAwZmYiLF91PSIjODAwMDAwIixtdT0iIzY2Y2RhYSIsZ3U9IiMwMDAwY2QiLHl1PSIjYmE1NWQzIix4dT0iIzkzNzBkYiIsYnU9IiMzY2IzNzEiLFR1PSIjN2I2OGVlIixFdT0iIzAwZmE5YSIsd3U9IiM0OGQxY2MiLFN1PSIjYzcxNTg1IixQdT0iIzE5MTk3MCIsUnU9IiNmNWZmZmEiLEF1PSIjZmZlNGUxIixDdT0iI2ZmZTRiNSIsSXU9IiNmZmRlYWQiLE91PSIjMDAwMDgwIixNdT0iI2ZkZjVlNiIsRHU9IiM4MDgwMDAiLEZ1PSIjNmI4ZTIzIixOdT0iI2ZmYTUwMCIsQnU9IiNmZjQ1MDAiLEx1PSIjZGE3MGQ2IixVdT0iI2VlZThhYSIsR3U9IiM5OGZiOTgiLGt1PSIjYWZlZWVlIixYdT0iI2RiNzA5MyIsSHU9IiNmZmVmZDUiLGp1PSIjZmZkYWI5IixWdT0iI2NkODUzZiIsWXU9IiNmZmMwY2IiLHp1PSIjZGRhMGRkIixXdT0iI2IwZTBlNiIscXU9IiM4MDAwODAiLCR1PSIjNjYzMzk5IixLdT0iI2ZmMDAwMCIsWnU9IiNiYzhmOGYiLEp1PSIjNDE2OWUxIixRdT0iIzhiNDUxMyIsdGw9IiNmYTgwNzIiLGVsPSIjZjRhNDYwIixybD0iIzJlOGI1NyIsaWw9IiNmZmY1ZWUiLG5sPSIjYTA1MjJkIixhbD0iI2MwYzBjMCIsc2w9IiM4N2NlZWIiLG9sPSIjNmE1YWNkIixobD0iIzcwODA5MCIsdWw9IiM3MDgwOTAiLGxsPSIjZmZmYWZhIixmbD0iIzAwZmY3ZiIsY2w9IiM0NjgyYjQiLGRsPSIjZDJiNDhjIixwbD0iIzAwODA4MCIsdmw9IiNkOGJmZDgiLF9sPSIjZmY2MzQ3IixtbD0iIzQwZTBkMCIsZ2w9IiNlZTgyZWUiLHlsPSIjZjVkZWIzIix4bD0iI2ZmZmZmZiIsYmw9IiNmNWY1ZjUiLFRsPSIjZmZmZjAwIixFbD0iIzlhY2QzMiIsd2w9e2FsaWNlYmx1ZTpVbyxhbnRpcXVld2hpdGU6R28sYXF1YTprbyxhcXVhbWFyaW5lOlhvLGF6dXJlOkhvLGJlaWdlOmpvLGJpc3F1ZTpWbyxibGFjazpZbyxibGFuY2hlZGFsbW9uZDp6byxibHVlOldvLGJsdWV2aW9sZXQ6cW8sYnJvd246JG8sYnVybHl3b29kOktvLGNhZGV0Ymx1ZTpabyxjaGFydHJldXNlOkpvLGNob2NvbGF0ZTpRbyxjb3JhbDp0aCxjb3JuZmxvd2VyYmx1ZTplaCxjb3Juc2lsazpyaCxjcmltc29uOmloLGN5YW46bmgsZGFya2JsdWU6YWgsZGFya2N5YW46c2gsZGFya2dvbGRlbnJvZDpvaCxkYXJrZ3JheTpoaCxkYXJrZ3JlZW46dWgsZGFya2dyZXk6bGgsZGFya2toYWtpOmZoLGRhcmttYWdlbnRhOmNoLGRhcmtvbGl2ZWdyZWVuOmRoLGRhcmtvcmFuZ2U6cGgsZGFya29yY2hpZDp2aCxkYXJrcmVkOl9oLGRhcmtzYWxtb246bWgsZGFya3NlYWdyZWVuOmdoLGRhcmtzbGF0ZWJsdWU6eWgsZGFya3NsYXRlZ3JheTp4aCxkYXJrc2xhdGVncmV5OmJoLGRhcmt0dXJxdW9pc2U6VGgsZGFya3Zpb2xldDpFaCxkZWVwcGluazp3aCxkZWVwc2t5Ymx1ZTpTaCxkaW1ncmF5OlBoLGRpbWdyZXk6UmgsZG9kZ2VyYmx1ZTpBaCxmaXJlYnJpY2s6Q2gsZmxvcmFsd2hpdGU6SWgsZm9yZXN0Z3JlZW46T2gsZnVjaHNpYTpNaCxnYWluc2Jvcm86RGgsZ2hvc3R3aGl0ZTpGaCxnb2xkZW5yb2Q6TmgsZ29sZDpCaCxncmF5OkxoLGdyZWVuOlVoLGdyZWVueWVsbG93OkdoLGdyZXk6a2gsaG9uZXlkZXc6WGgsaG90cGluazpIaCxpbmRpYW5yZWQ6amgsaW5kaWdvOlZoLGl2b3J5OlloLGtoYWtpOnpoLGxhdmVuZGVyYmx1c2g6V2gsbGF2ZW5kZXI6cWgsbGF3bmdyZWVuOiRoLGxlbW9uY2hpZmZvbjpLaCxsaWdodGJsdWU6WmgsbGlnaHRjb3JhbDpKaCxsaWdodGN5YW46UWgsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6dHUsbGlnaHRncmF5OmV1LGxpZ2h0Z3JlZW46cnUsbGlnaHRncmV5Oml1LGxpZ2h0cGluazpudSxsaWdodHNhbG1vbjphdSxsaWdodHNlYWdyZWVuOnN1LGxpZ2h0c2t5Ymx1ZTpvdSxsaWdodHNsYXRlZ3JheTpodSxsaWdodHNsYXRlZ3JleTp1dSxsaWdodHN0ZWVsYmx1ZTpsdSxsaWdodHllbGxvdzpmdSxsaW1lOmN1LGxpbWVncmVlbjpkdSxsaW5lbjpwdSxtYWdlbnRhOnZ1LG1hcm9vbjpfdSxtZWRpdW1hcXVhbWFyaW5lOm11LG1lZGl1bWJsdWU6Z3UsbWVkaXVtb3JjaGlkOnl1LG1lZGl1bXB1cnBsZTp4dSxtZWRpdW1zZWFncmVlbjpidSxtZWRpdW1zbGF0ZWJsdWU6VHUsbWVkaXVtc3ByaW5nZ3JlZW46RXUsbWVkaXVtdHVycXVvaXNlOnd1LG1lZGl1bXZpb2xldHJlZDpTdSxtaWRuaWdodGJsdWU6UHUsbWludGNyZWFtOlJ1LG1pc3R5cm9zZTpBdSxtb2NjYXNpbjpDdSxuYXZham93aGl0ZTpJdSxuYXZ5Ok91LG9sZGxhY2U6TXUsb2xpdmU6RHUsb2xpdmVkcmFiOkZ1LG9yYW5nZTpOdSxvcmFuZ2VyZWQ6QnUsb3JjaGlkOkx1LHBhbGVnb2xkZW5yb2Q6VXUscGFsZWdyZWVuOkd1LHBhbGV0dXJxdW9pc2U6a3UscGFsZXZpb2xldHJlZDpYdSxwYXBheWF3aGlwOkh1LHBlYWNocHVmZjpqdSxwZXJ1OlZ1LHBpbms6WXUscGx1bTp6dSxwb3dkZXJibHVlOld1LHB1cnBsZTpxdSxyZWJlY2NhcHVycGxlOiR1LHJlZDpLdSxyb3N5YnJvd246WnUscm95YWxibHVlOkp1LHNhZGRsZWJyb3duOlF1LHNhbG1vbjp0bCxzYW5keWJyb3duOmVsLHNlYWdyZWVuOnJsLHNlYXNoZWxsOmlsLHNpZW5uYTpubCxzaWx2ZXI6YWwsc2t5Ymx1ZTpzbCxzbGF0ZWJsdWU6b2wsc2xhdGVncmF5OmhsLHNsYXRlZ3JleTp1bCxzbm93OmxsLHNwcmluZ2dyZWVuOmZsLHN0ZWVsYmx1ZTpjbCx0YW46ZGwsdGVhbDpwbCx0aGlzdGxlOnZsLHRvbWF0bzpfbCx0dXJxdW9pc2U6bWwsdmlvbGV0OmdsLHdoZWF0OnlsLHdoaXRlOnhsLHdoaXRlc21va2U6YmwseWVsbG93OlRsLHllbGxvd2dyZWVuOkVsfTtmdW5jdGlvbiB3ZShyLGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1bXSksZVswXT0ocj4+MTYmMjU1KS8yNTUsZVsxXT0ocj4+OCYyNTUpLzI1NSxlWzJdPShyJjI1NSkvMjU1LGV9ZnVuY3Rpb24gUW4ocil7dmFyIGU9ci50b1N0cmluZygxNik7cmV0dXJuIGU9IjAwMDAwMCIuc3Vic3RyaW5nKDAsNi1lLmxlbmd0aCkrZSwiIyIrZX1mdW5jdGlvbiB0YShyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiYocj13bFtyLnRvTG93ZXJDYXNlKCldfHxyLHJbMF09PT0iIyImJihyPXIuc2xpY2UoMSkpKSxwYXJzZUludChyLDE2KX1mdW5jdGlvbiBTbCgpe2Zvcih2YXIgcj1bXSxlPVtdLHQ9MDt0PDMyO3QrKylyW3RdPXQsZVt0XT10O3JbTi5OT1JNQUxfTlBNXT1OLk5PUk1BTCxyW04uQUREX05QTV09Ti5BREQscltOLlNDUkVFTl9OUE1dPU4uU0NSRUVOLGVbTi5OT1JNQUxdPU4uTk9STUFMX05QTSxlW04uQUREXT1OLkFERF9OUE0sZVtOLlNDUkVFTl09Ti5TQ1JFRU5fTlBNO3ZhciBpPVtdO3JldHVybiBpLnB1c2goZSksaS5wdXNoKHIpLGl9dmFyIGVhPVNsKCk7ZnVuY3Rpb24gcmEocixlKXtyZXR1cm4gZWFbZT8xOjBdW3JdfWZ1bmN0aW9uIFBsKHIsZSx0LGkpe3JldHVybiB0PXR8fG5ldyBGbG9hdDMyQXJyYXkoNCksaXx8aT09PXZvaWQgMD8odFswXT1yWzBdKmUsdFsxXT1yWzFdKmUsdFsyXT1yWzJdKmUpOih0WzBdPXJbMF0sdFsxXT1yWzFdLHRbMl09clsyXSksdFszXT1lLHR9ZnVuY3Rpb24gX2kocixlKXtpZihlPT09MSlyZXR1cm4oZSoyNTU8PDI0KStyO2lmKGU9PT0wKXJldHVybiAwO3ZhciB0PXI+PjE2JjI1NSxpPXI+PjgmMjU1LG49ciYyNTU7cmV0dXJuIHQ9dCplKy41fDAsaT1pKmUrLjV8MCxuPW4qZSsuNXwwLChlKjI1NTw8MjQpKyh0PDwxNikrKGk8PDgpK259ZnVuY3Rpb24gaWEocixlLHQsaSl7cmV0dXJuIHQ9dHx8bmV3IEZsb2F0MzJBcnJheSg0KSx0WzBdPShyPj4xNiYyNTUpLzI1NSx0WzFdPShyPj44JjI1NSkvMjU1LHRbMl09KHImMjU1KS8yNTUsKGl8fGk9PT12b2lkIDApJiYodFswXSo9ZSx0WzFdKj1lLHRbMl0qPWUpLHRbM109ZSx0fWZ1bmN0aW9uIFJsKHIsZSl7ZT09PXZvaWQgMCYmKGU9bnVsbCk7dmFyIHQ9cio2O2lmKGU9ZXx8bmV3IFVpbnQxNkFycmF5KHQpLGUubGVuZ3RoIT09dCl0aHJvdyBuZXcgRXJyb3IoIk91dCBidWZmZXIgbGVuZ3RoIGlzIGluY29ycmVjdCwgZ290ICIrZS5sZW5ndGgrIiBhbmQgZXhwZWN0ZWQgIit0KTtmb3IodmFyIGk9MCxuPTA7aTx0O2krPTYsbis9NCllW2krMF09biswLGVbaSsxXT1uKzEsZVtpKzJdPW4rMixlW2krM109biswLGVbaSs0XT1uKzIsZVtpKzVdPW4rMztyZXR1cm4gZX1mdW5jdGlvbiBuYShyKXtpZihyLkJZVEVTX1BFUl9FTEVNRU5UPT09NClyZXR1cm4gciBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT8iRmxvYXQzMkFycmF5IjpyIGluc3RhbmNlb2YgVWludDMyQXJyYXk/IlVpbnQzMkFycmF5IjoiSW50MzJBcnJheSI7aWYoci5CWVRFU19QRVJfRUxFTUVOVD09PTIpe2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4iVWludDE2QXJyYXkifWVsc2UgaWYoci5CWVRFU19QRVJfRUxFTUVOVD09PTEmJnIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiJVaW50OEFycmF5IjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBfcihyKXtyZXR1cm4gcis9cj09PTA/MTowLC0tcixyfD1yPj4+MSxyfD1yPj4+MixyfD1yPj4+NCxyfD1yPj4+OCxyfD1yPj4+MTYscisxfWZ1bmN0aW9uIGFhKHIpe3JldHVybiEociZyLTEpJiYhIXJ9ZnVuY3Rpb24gc2Eocil7dmFyIGU9KHI+NjU1MzU/MTowKTw8NDtyPj4+PWU7dmFyIHQ9KHI+MjU1PzE6MCk8PDM7cmV0dXJuIHI+Pj49dCxlfD10LHQ9KHI+MTU/MTowKTw8MixyPj4+PXQsZXw9dCx0PShyPjM/MTowKTw8MSxyPj4+PXQsZXw9dCxlfHI+PjF9ZnVuY3Rpb24gU2UocixlLHQpe3ZhciBpPXIubGVuZ3RoLG47aWYoIShlPj1pfHx0PT09MCkpe3Q9ZSt0Pmk/aS1lOnQ7dmFyIGE9aS10O2ZvcihuPWU7bjxhOysrbilyW25dPXJbbit0XTtyLmxlbmd0aD1hfX1mdW5jdGlvbiBQZShyKXtyZXR1cm4gcj09PTA/MDpyPDA/LTE6MX12YXIgQWw9MDtmdW5jdGlvbiBhZSgpe3JldHVybisrQWx9dmFyIG9hPXt9O2Z1bmN0aW9uIE90KHIsZSx0KXtpZih0PT09dm9pZCAwJiYodD0zKSwhb2FbZV0pe3ZhciBpPW5ldyBFcnJvcigpLnN0YWNrO3R5cGVvZiBpPiJ1Ij9jb25zb2xlLndhcm4oIlBpeGlKUyBEZXByZWNhdGlvbiBXYXJuaW5nOiAiLGUrYApEZXByZWNhdGVkIHNpbmNlIHZgK3IpOihpPWkuc3BsaXQoYApgKS5zcGxpY2UodCkuam9pbihgCmApLGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ/KGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoIiVjUGl4aUpTIERlcHJlY2F0aW9uIFdhcm5pbmc6ICVjJXMiLCJjb2xvcjojNjE0MTA4O2JhY2tncm91bmQ6I2ZmZmJlNiIsImZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNjE0MTA4O2JhY2tncm91bmQ6I2ZmZmJlNiIsZStgCkRlcHJlY2F0ZWQgc2luY2UgdmArciksY29uc29sZS53YXJuKGkpLGNvbnNvbGUuZ3JvdXBFbmQoKSk6KGNvbnNvbGUud2FybigiUGl4aUpTIERlcHJlY2F0aW9uIFdhcm5pbmc6ICIsZStgCkRlcHJlY2F0ZWQgc2luY2UgdmArciksY29uc29sZS53YXJuKGkpKSksb2FbZV09ITB9fXZhciBoYT17fSxZdD1PYmplY3QuY3JlYXRlKG51bGwpLHNlPU9iamVjdC5jcmVhdGUobnVsbCksdWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpKXt0aGlzLmNhbnZhcz1JLkFEQVBURVIuY3JlYXRlQ2FudmFzKCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5yZXNvbHV0aW9uPWl8fEkuUkVTT0xVVElPTix0aGlzLnJlc2l6ZShlLHQpfXJldHVybiByLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCl9LHIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHQpe3RoaXMuY2FudmFzLndpZHRoPU1hdGgucm91bmQoZSp0aGlzLnJlc29sdXRpb24pLHRoaXMuY2FudmFzLmhlaWdodD1NYXRoLnJvdW5kKHQqdGhpcy5yZXNvbHV0aW9uKX0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dD1udWxsLHRoaXMuY2FudmFzPW51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwid2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGh9LHNldDpmdW5jdGlvbihlKXt0aGlzLmNhbnZhcy53aWR0aD1NYXRoLnJvdW5kKGUpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY2FudmFzLmhlaWdodD1NYXRoLnJvdW5kKGUpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHJ9KCk7ZnVuY3Rpb24gQ2wocil7dmFyIGU9ci53aWR0aCx0PXIuaGVpZ2h0LGk9ci5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pLG49aS5nZXRJbWFnZURhdGEoMCwwLGUsdCksYT1uLmRhdGEscz1hLmxlbmd0aCxvPXt0b3A6bnVsbCxsZWZ0Om51bGwscmlnaHQ6bnVsbCxib3R0b206bnVsbH0saD1udWxsLHUsbCxjO2Zvcih1PTA7dTxzO3UrPTQpYVt1KzNdIT09MCYmKGw9dS80JWUsYz1+fih1LzQvZSksby50b3A9PT1udWxsJiYoby50b3A9YyksKG8ubGVmdD09PW51bGx8fGw8by5sZWZ0KSYmKG8ubGVmdD1sKSwoby5yaWdodD09PW51bGx8fG8ucmlnaHQ8bCkmJihvLnJpZ2h0PWwrMSksKG8uYm90dG9tPT09bnVsbHx8by5ib3R0b208YykmJihvLmJvdHRvbT1jKSk7cmV0dXJuIG8udG9wIT09bnVsbCYmKGU9by5yaWdodC1vLmxlZnQsdD1vLmJvdHRvbS1vLnRvcCsxLGg9aS5nZXRJbWFnZURhdGEoby5sZWZ0LG8udG9wLGUsdCkpLHtoZWlnaHQ6dCx3aWR0aDplLGRhdGE6aH19dmFyIG1yO2Z1bmN0aW9uIElsKHIsZSl7aWYoZT09PXZvaWQgMCYmKGU9Z2xvYmFsVGhpcy5sb2NhdGlvbiksci5pbmRleE9mKCJkYXRhOiIpPT09MClyZXR1cm4iIjtlPWV8fGdsb2JhbFRoaXMubG9jYXRpb24sbXJ8fChtcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLG1yLmhyZWY9cjt2YXIgdD1FZS5wYXJzZShtci5ocmVmKSxpPSF0LnBvcnQmJmUucG9ydD09PSIifHx0LnBvcnQ9PT1lLnBvcnQ7cmV0dXJuIHQuaG9zdG5hbWUhPT1lLmhvc3RuYW1lfHwhaXx8dC5wcm90b2NvbCE9PWUucHJvdG9jb2w/ImFub255bW91cyI6IiJ9ZnVuY3Rpb24gZ3IocixlKXt2YXIgdD1JLlJFVElOQV9QUkVGSVguZXhlYyhyKTtyZXR1cm4gdD9wYXJzZUZsb2F0KHRbMV0pOmUhPT12b2lkIDA/ZToxfXZhciB5cj1NYXRoLlBJKjIsT2w9MTgwL01hdGguUEksTWw9TWF0aC5QSS8xODAsbXQ7KGZ1bmN0aW9uKHIpe3Jbci5QT0xZPTBdPSJQT0xZIixyW3IuUkVDVD0xXT0iUkVDVCIscltyLkNJUkM9Ml09IkNJUkMiLHJbci5FTElQPTNdPSJFTElQIixyW3IuUlJFQz00XT0iUlJFQyJ9KShtdHx8KG10PXt9KSk7dmFyIHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2U9PT12b2lkIDAmJihlPTApLHQ9PT12b2lkIDAmJih0PTApLHRoaXMueD0wLHRoaXMueT0wLHRoaXMueD1lLHRoaXMueT10fXJldHVybiByLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLngsdGhpcy55KX0sci5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0KGUueCxlLnkpLHRoaXN9LHIucHJvdG90eXBlLmNvcHlUbz1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZXQodGhpcy54LHRoaXMueSksZX0sci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlLng9PT10aGlzLngmJmUueT09PXRoaXMueX0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLHQ9PT12b2lkIDAmJih0PWUpLHRoaXMueD1lLHRoaXMueT10LHRoaXN9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltAcGl4aS9tYXRoOlBvaW50IHg9Iit0aGlzLngrIiB5PSIrdGhpcy55KyJdIn0scn0oKSx4cj1bbmV3IHR0LG5ldyB0dCxuZXcgdHQsbmV3IHR0XSxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSxuKXtlPT09dm9pZCAwJiYoZT0wKSx0PT09dm9pZCAwJiYodD0wKSxpPT09dm9pZCAwJiYoaT0wKSxuPT09dm9pZCAwJiYobj0wKSx0aGlzLng9TnVtYmVyKGUpLHRoaXMueT1OdW1iZXIodCksdGhpcy53aWR0aD1OdW1iZXIoaSksdGhpcy5oZWlnaHQ9TnVtYmVyKG4pLHRoaXMudHlwZT1tdC5SRUNUfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImxlZnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwicmlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJ0b3AiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiYm90dG9tIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiRU1QVFkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIoMCwwLDAsMCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy54LHRoaXMueSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sci5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpc30sci5wcm90b3R5cGUuY29weVRvPWZ1bmN0aW9uKGUpe3JldHVybiBlLng9dGhpcy54LGUueT10aGlzLnksZS53aWR0aD10aGlzLndpZHRoLGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9LHIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMud2lkdGg8PTB8fHRoaXMuaGVpZ2h0PD0wPyExOmU+PXRoaXMueCYmZTx0aGlzLngrdGhpcy53aWR0aCYmdD49dGhpcy55JiZ0PHRoaXMueSt0aGlzLmhlaWdodH0sci5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihlLHQpe2lmKCF0KXt2YXIgaT10aGlzLng8ZS54P2UueDp0aGlzLngsbj10aGlzLnJpZ2h0PmUucmlnaHQ/ZS5yaWdodDp0aGlzLnJpZ2h0O2lmKG48PWkpcmV0dXJuITE7dmFyIGE9dGhpcy55PGUueT9lLnk6dGhpcy55LHM9dGhpcy5ib3R0b20+ZS5ib3R0b20/ZS5ib3R0b206dGhpcy5ib3R0b207cmV0dXJuIHM+YX12YXIgbz10aGlzLmxlZnQsaD10aGlzLnJpZ2h0LHU9dGhpcy50b3AsbD10aGlzLmJvdHRvbTtpZihoPD1vfHxsPD11KXJldHVybiExO3ZhciBjPXhyWzBdLnNldChlLmxlZnQsZS50b3ApLGY9eHJbMV0uc2V0KGUubGVmdCxlLmJvdHRvbSksZD14clsyXS5zZXQoZS5yaWdodCxlLnRvcCkscD14clszXS5zZXQoZS5yaWdodCxlLmJvdHRvbSk7aWYoZC54PD1jLnh8fGYueTw9Yy55KXJldHVybiExO3ZhciB2PU1hdGguc2lnbih0LmEqdC5kLXQuYip0LmMpO2lmKHY9PT0wfHwodC5hcHBseShjLGMpLHQuYXBwbHkoZixmKSx0LmFwcGx5KGQsZCksdC5hcHBseShwLHApLE1hdGgubWF4KGMueCxmLngsZC54LHAueCk8PW98fE1hdGgubWluKGMueCxmLngsZC54LHAueCk+PWh8fE1hdGgubWF4KGMueSxmLnksZC55LHAueSk8PXV8fE1hdGgubWluKGMueSxmLnksZC55LHAueSk+PWwpKXJldHVybiExO3ZhciBfPXYqKGYueS1jLnkpLG09diooYy54LWYueCksZz1fKm8rbSp1LHk9XypoK20qdSxUPV8qbyttKmwseD1fKmgrbSpsO2lmKE1hdGgubWF4KGcseSxULHgpPD1fKmMueCttKmMueXx8TWF0aC5taW4oZyx5LFQseCk+PV8qcC54K20qcC55KXJldHVybiExO3ZhciBiPXYqKGMueS1kLnkpLEU9diooZC54LWMueCksQT1iKm8rRSp1LHc9YipoK0UqdSxTPWIqbytFKmwsRD1iKmgrRSpsO3JldHVybiEoTWF0aC5tYXgoQSx3LFMsRCk8PWIqYy54K0UqYy55fHxNYXRoLm1pbihBLHcsUyxEKT49YipwLngrRSpwLnkpfSxyLnByb3RvdHlwZS5wYWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksdD09PXZvaWQgMCYmKHQ9ZSksdGhpcy54LT1lLHRoaXMueS09dCx0aGlzLndpZHRoKz1lKjIsdGhpcy5oZWlnaHQrPXQqMix0aGlzfSxyLnByb3RvdHlwZS5maXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5tYXgodGhpcy54LGUueCksaT1NYXRoLm1pbih0aGlzLngrdGhpcy53aWR0aCxlLngrZS53aWR0aCksbj1NYXRoLm1heCh0aGlzLnksZS55KSxhPU1hdGgubWluKHRoaXMueSt0aGlzLmhlaWdodCxlLnkrZS5oZWlnaHQpO3JldHVybiB0aGlzLng9dCx0aGlzLndpZHRoPU1hdGgubWF4KGktdCwwKSx0aGlzLnk9bix0aGlzLmhlaWdodD1NYXRoLm1heChhLW4sMCksdGhpc30sci5wcm90b3R5cGUuY2VpbD1mdW5jdGlvbihlLHQpe2U9PT12b2lkIDAmJihlPTEpLHQ9PT12b2lkIDAmJih0PS4wMDEpO3ZhciBpPU1hdGguY2VpbCgodGhpcy54K3RoaXMud2lkdGgtdCkqZSkvZSxuPU1hdGguY2VpbCgodGhpcy55K3RoaXMuaGVpZ2h0LXQpKmUpL2U7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKCh0aGlzLngrdCkqZSkvZSx0aGlzLnk9TWF0aC5mbG9vcigodGhpcy55K3QpKmUpL2UsdGhpcy53aWR0aD1pLXRoaXMueCx0aGlzLmhlaWdodD1uLXRoaXMueSx0aGlzfSxyLnByb3RvdHlwZS5lbmxhcmdlPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWluKHRoaXMueCxlLngpLGk9TWF0aC5tYXgodGhpcy54K3RoaXMud2lkdGgsZS54K2Uud2lkdGgpLG49TWF0aC5taW4odGhpcy55LGUueSksYT1NYXRoLm1heCh0aGlzLnkrdGhpcy5oZWlnaHQsZS55K2UuaGVpZ2h0KTtyZXR1cm4gdGhpcy54PXQsdGhpcy53aWR0aD1pLXQsdGhpcy55PW4sdGhpcy5oZWlnaHQ9YS1uLHRoaXN9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltAcGl4aS9tYXRoOlJlY3RhbmdsZSB4PSIrdGhpcy54KyIgeT0iK3RoaXMueSsiIHdpZHRoPSIrdGhpcy53aWR0aCsiIGhlaWdodD0iK3RoaXMuaGVpZ2h0KyJdIn0scn0oKSxEbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0LGkpe2U9PT12b2lkIDAmJihlPTApLHQ9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMueD1lLHRoaXMueT10LHRoaXMucmFkaXVzPWksdGhpcy50eXBlPW10LkNJUkN9cmV0dXJuIHIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMueCx0aGlzLnksdGhpcy5yYWRpdXMpfSxyLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucmFkaXVzPD0wKXJldHVybiExO3ZhciBpPXRoaXMucmFkaXVzKnRoaXMucmFkaXVzLG49dGhpcy54LWUsYT10aGlzLnktdDtyZXR1cm4gbio9bixhKj1hLG4rYTw9aX0sci5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIKHRoaXMueC10aGlzLnJhZGl1cyx0aGlzLnktdGhpcy5yYWRpdXMsdGhpcy5yYWRpdXMqMix0aGlzLnJhZGl1cyoyKX0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW0BwaXhpL21hdGg6Q2lyY2xlIHg9Iit0aGlzLngrIiB5PSIrdGhpcy55KyIgcmFkaXVzPSIrdGhpcy5yYWRpdXMrIl0ifSxyfSgpLEZsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSxuKXtlPT09dm9pZCAwJiYoZT0wKSx0PT09dm9pZCAwJiYodD0wKSxpPT09dm9pZCAwJiYoaT0wKSxuPT09dm9pZCAwJiYobj0wKSx0aGlzLng9ZSx0aGlzLnk9dCx0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9bix0aGlzLnR5cGU9bXQuRUxJUH1yZXR1cm4gci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy54LHRoaXMueSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sci5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MClyZXR1cm4hMTt2YXIgaT0oZS10aGlzLngpL3RoaXMud2lkdGgsbj0odC10aGlzLnkpL3RoaXMuaGVpZ2h0O3JldHVybiBpKj1pLG4qPW4saStuPD0xfSxyLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEgodGhpcy54LXRoaXMud2lkdGgsdGhpcy55LXRoaXMuaGVpZ2h0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbQHBpeGkvbWF0aDpFbGxpcHNlIHg9Iit0aGlzLngrIiB5PSIrdGhpcy55KyIgd2lkdGg9Iit0aGlzLndpZHRoKyIgaGVpZ2h0PSIrdGhpcy5oZWlnaHQrIl0ifSxyfSgpLGJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT1hcmd1bWVudHMsdD1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0W2ldPWVbaV07dmFyIG49QXJyYXkuaXNBcnJheSh0WzBdKT90WzBdOnQ7aWYodHlwZW9mIG5bMF0hPSJudW1iZXIiKXtmb3IodmFyIGE9W10scz0wLG89bi5sZW5ndGg7czxvO3MrKylhLnB1c2gobltzXS54LG5bc10ueSk7bj1hfXRoaXMucG9pbnRzPW4sdGhpcy50eXBlPW10LlBPTFksdGhpcy5jbG9zZVN0cm9rZT0hMH1yZXR1cm4gci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvaW50cy5zbGljZSgpLHQ9bmV3IHIoZSk7cmV0dXJuIHQuY2xvc2VTdHJva2U9dGhpcy5jbG9zZVN0cm9rZSx0fSxyLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0hMSxuPXRoaXMucG9pbnRzLmxlbmd0aC8yLGE9MCxzPW4tMTthPG47cz1hKyspe3ZhciBvPXRoaXMucG9pbnRzW2EqMl0saD10aGlzLnBvaW50c1thKjIrMV0sdT10aGlzLnBvaW50c1tzKjJdLGw9dGhpcy5wb2ludHNbcyoyKzFdLGM9aD50IT1sPnQmJmU8KHUtbykqKCh0LWgpLyhsLWgpKStvO2MmJihpPSFpKX1yZXR1cm4gaX0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW0BwaXhpL21hdGg6UG9seWdvbiIrKCJjbG9zZVN0cm9rZT0iK3RoaXMuY2xvc2VTdHJva2UpKygicG9pbnRzPSIrdGhpcy5wb2ludHMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrIiwgIit0fSwiIikrIl0iKX0scn0oKSxObD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0LGksbixhKXtlPT09dm9pZCAwJiYoZT0wKSx0PT09dm9pZCAwJiYodD0wKSxpPT09dm9pZCAwJiYoaT0wKSxuPT09dm9pZCAwJiYobj0wKSxhPT09dm9pZCAwJiYoYT0yMCksdGhpcy54PWUsdGhpcy55PXQsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PW4sdGhpcy5yYWRpdXM9YSx0aGlzLnR5cGU9bXQuUlJFQ31yZXR1cm4gci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy54LHRoaXMueSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LHRoaXMucmFkaXVzKX0sci5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MClyZXR1cm4hMTtpZihlPj10aGlzLngmJmU8PXRoaXMueCt0aGlzLndpZHRoJiZ0Pj10aGlzLnkmJnQ8PXRoaXMueSt0aGlzLmhlaWdodCl7dmFyIGk9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnJhZGl1cyxNYXRoLm1pbih0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KS8yKSk7aWYodD49dGhpcy55K2kmJnQ8PXRoaXMueSt0aGlzLmhlaWdodC1pfHxlPj10aGlzLngraSYmZTw9dGhpcy54K3RoaXMud2lkdGgtaSlyZXR1cm4hMDt2YXIgbj1lLSh0aGlzLngraSksYT10LSh0aGlzLnkraSkscz1pKmk7aWYobipuK2EqYTw9c3x8KG49ZS0odGhpcy54K3RoaXMud2lkdGgtaSksbipuK2EqYTw9cyl8fChhPXQtKHRoaXMueSt0aGlzLmhlaWdodC1pKSxuKm4rYSphPD1zKXx8KG49ZS0odGhpcy54K2kpLG4qbithKmE8PXMpKXJldHVybiEwfXJldHVybiExfSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbQHBpeGkvbWF0aDpSb3VuZGVkUmVjdGFuZ2xlIHg9Iit0aGlzLngrIiB5PSIrdGhpcy55Kygid2lkdGg9Iit0aGlzLndpZHRoKyIgaGVpZ2h0PSIrdGhpcy5oZWlnaHQrIiByYWRpdXM9Iit0aGlzLnJhZGl1cysiXSIpfSxyfSgpLFJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSxuKXtpPT09dm9pZCAwJiYoaT0wKSxuPT09dm9pZCAwJiYobj0wKSx0aGlzLl94PWksdGhpcy5feT1uLHRoaXMuY2I9ZSx0aGlzLnNjb3BlPXR9cmV0dXJuIHIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXRoaXMuY2IpLHQ9PT12b2lkIDAmJih0PXRoaXMuc2NvcGUpLG5ldyByKGUsdCx0aGlzLl94LHRoaXMuX3kpfSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksdD09PXZvaWQgMCYmKHQ9ZSksKHRoaXMuX3ghPT1lfHx0aGlzLl95IT09dCkmJih0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuY2IuY2FsbCh0aGlzLnNjb3BlKSksdGhpc30sci5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX3ghPT1lLnh8fHRoaXMuX3khPT1lLnkpJiYodGhpcy5feD1lLngsdGhpcy5feT1lLnksdGhpcy5jYi5jYWxsKHRoaXMuc2NvcGUpKSx0aGlzfSxyLnByb3RvdHlwZS5jb3B5VG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0KHRoaXMuX3gsdGhpcy5feSksZX0sci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlLng9PT10aGlzLl94JiZlLnk9PT10aGlzLl95fSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbQHBpeGkvbWF0aDpPYnNlcnZhYmxlUG9pbnQgeD0iKzArIiB5PSIrMCsiIHNjb3BlPSIrdGhpcy5zY29wZSsiXSJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5feCE9PWUmJih0aGlzLl94PWUsdGhpcy5jYi5jYWxsKHRoaXMuc2NvcGUpKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3khPT1lJiYodGhpcy5feT1lLHRoaXMuY2IuY2FsbCh0aGlzLnNjb3BlKSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSkscn0oKSx2dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0LGksbixhLHMpe2U9PT12b2lkIDAmJihlPTEpLHQ9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPTApLG49PT12b2lkIDAmJihuPTEpLGE9PT12b2lkIDAmJihhPTApLHM9PT12b2lkIDAmJihzPTApLHRoaXMuYXJyYXk9bnVsbCx0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9aSx0aGlzLmQ9bix0aGlzLnR4PWEsdGhpcy50eT1zfXJldHVybiByLnByb3RvdHlwZS5mcm9tQXJyYXk9ZnVuY3Rpb24oZSl7dGhpcy5hPWVbMF0sdGhpcy5iPWVbMV0sdGhpcy5jPWVbM10sdGhpcy5kPWVbNF0sdGhpcy50eD1lWzJdLHRoaXMudHk9ZVs1XX0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCxpLG4sYSxzKXtyZXR1cm4gdGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPWksdGhpcy5kPW4sdGhpcy50eD1hLHRoaXMudHk9cyx0aGlzfSxyLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7dGhpcy5hcnJheXx8KHRoaXMuYXJyYXk9bmV3IEZsb2F0MzJBcnJheSg5KSk7dmFyIGk9dHx8dGhpcy5hcnJheTtyZXR1cm4gZT8oaVswXT10aGlzLmEsaVsxXT10aGlzLmIsaVsyXT0wLGlbM109dGhpcy5jLGlbNF09dGhpcy5kLGlbNV09MCxpWzZdPXRoaXMudHgsaVs3XT10aGlzLnR5LGlbOF09MSk6KGlbMF09dGhpcy5hLGlbMV09dGhpcy5jLGlbMl09dGhpcy50eCxpWzNdPXRoaXMuYixpWzRdPXRoaXMuZCxpWzVdPXRoaXMudHksaVs2XT0wLGlbN109MCxpWzhdPTEpLGl9LHIucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKGUsdCl7dD10fHxuZXcgdHQ7dmFyIGk9ZS54LG49ZS55O3JldHVybiB0Lng9dGhpcy5hKmkrdGhpcy5jKm4rdGhpcy50eCx0Lnk9dGhpcy5iKmkrdGhpcy5kKm4rdGhpcy50eSx0fSxyLnByb3RvdHlwZS5hcHBseUludmVyc2U9ZnVuY3Rpb24oZSx0KXt0PXR8fG5ldyB0dDt2YXIgaT0xLyh0aGlzLmEqdGhpcy5kK3RoaXMuYyotdGhpcy5iKSxuPWUueCxhPWUueTtyZXR1cm4gdC54PXRoaXMuZCppKm4rLXRoaXMuYyppKmErKHRoaXMudHkqdGhpcy5jLXRoaXMudHgqdGhpcy5kKSppLHQueT10aGlzLmEqaSphKy10aGlzLmIqaSpuKygtdGhpcy50eSp0aGlzLmErdGhpcy50eCp0aGlzLmIpKmksdH0sci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHgrPWUsdGhpcy50eSs9dCx0aGlzfSxyLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmEqPWUsdGhpcy5kKj10LHRoaXMuYyo9ZSx0aGlzLmIqPXQsdGhpcy50eCo9ZSx0aGlzLnR5Kj10LHRoaXN9LHIucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpLG49dGhpcy5hLGE9dGhpcy5jLHM9dGhpcy50eDtyZXR1cm4gdGhpcy5hPW4qdC10aGlzLmIqaSx0aGlzLmI9bippK3RoaXMuYip0LHRoaXMuYz1hKnQtdGhpcy5kKmksdGhpcy5kPWEqaSt0aGlzLmQqdCx0aGlzLnR4PXMqdC10aGlzLnR5KmksdGhpcy50eT1zKmkrdGhpcy50eSp0LHRoaXN9LHIucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmEsaT10aGlzLmIsbj10aGlzLmMsYT10aGlzLmQ7cmV0dXJuIHRoaXMuYT1lLmEqdCtlLmIqbix0aGlzLmI9ZS5hKmkrZS5iKmEsdGhpcy5jPWUuYyp0K2UuZCpuLHRoaXMuZD1lLmMqaStlLmQqYSx0aGlzLnR4PWUudHgqdCtlLnR5Km4rdGhpcy50eCx0aGlzLnR5PWUudHgqaStlLnR5KmErdGhpcy50eSx0aGlzfSxyLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0LGksbixhLHMsbyxoLHUpe3JldHVybiB0aGlzLmE9TWF0aC5jb3Mobyt1KSphLHRoaXMuYj1NYXRoLnNpbihvK3UpKmEsdGhpcy5jPS1NYXRoLnNpbihvLWgpKnMsdGhpcy5kPU1hdGguY29zKG8taCkqcyx0aGlzLnR4PWUtKGkqdGhpcy5hK24qdGhpcy5jKSx0aGlzLnR5PXQtKGkqdGhpcy5iK24qdGhpcy5kKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHg7aWYoZS5hIT09MXx8ZS5iIT09MHx8ZS5jIT09MHx8ZS5kIT09MSl7dmFyIGk9dGhpcy5hLG49dGhpcy5jO3RoaXMuYT1pKmUuYSt0aGlzLmIqZS5jLHRoaXMuYj1pKmUuYit0aGlzLmIqZS5kLHRoaXMuYz1uKmUuYSt0aGlzLmQqZS5jLHRoaXMuZD1uKmUuYit0aGlzLmQqZS5kfXJldHVybiB0aGlzLnR4PXQqZS5hK3RoaXMudHkqZS5jK2UudHgsdGhpcy50eT10KmUuYit0aGlzLnR5KmUuZCtlLnR5LHRoaXN9LHIucHJvdG90eXBlLmRlY29tcG9zZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmEsaT10aGlzLmIsbj10aGlzLmMsYT10aGlzLmQscz1lLnBpdm90LG89LU1hdGguYXRhbjIoLW4sYSksaD1NYXRoLmF0YW4yKGksdCksdT1NYXRoLmFicyhvK2gpO3JldHVybiB1PDFlLTV8fE1hdGguYWJzKHlyLXUpPDFlLTU/KGUucm90YXRpb249aCxlLnNrZXcueD1lLnNrZXcueT0wKTooZS5yb3RhdGlvbj0wLGUuc2tldy54PW8sZS5za2V3Lnk9aCksZS5zY2FsZS54PU1hdGguc3FydCh0KnQraSppKSxlLnNjYWxlLnk9TWF0aC5zcXJ0KG4qbithKmEpLGUucG9zaXRpb24ueD10aGlzLnR4KyhzLngqdCtzLnkqbiksZS5wb3NpdGlvbi55PXRoaXMudHkrKHMueCppK3MueSphKSxlfSxyLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmEsdD10aGlzLmIsaT10aGlzLmMsbj10aGlzLmQsYT10aGlzLnR4LHM9ZSpuLXQqaTtyZXR1cm4gdGhpcy5hPW4vcyx0aGlzLmI9LXQvcyx0aGlzLmM9LWkvcyx0aGlzLmQ9ZS9zLHRoaXMudHg9KGkqdGhpcy50eS1uKmEpL3MsdGhpcy50eT0tKGUqdGhpcy50eS10KmEpL3MsdGhpc30sci5wcm90b3R5cGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hPTEsdGhpcy5iPTAsdGhpcy5jPTAsdGhpcy5kPTEsdGhpcy50eD0wLHRoaXMudHk9MCx0aGlzfSxyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyByO3JldHVybiBlLmE9dGhpcy5hLGUuYj10aGlzLmIsZS5jPXRoaXMuYyxlLmQ9dGhpcy5kLGUudHg9dGhpcy50eCxlLnR5PXRoaXMudHksZX0sci5wcm90b3R5cGUuY29weVRvPWZ1bmN0aW9uKGUpe3JldHVybiBlLmE9dGhpcy5hLGUuYj10aGlzLmIsZS5jPXRoaXMuYyxlLmQ9dGhpcy5kLGUudHg9dGhpcy50eCxlLnR5PXRoaXMudHksZX0sci5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYT1lLmEsdGhpcy5iPWUuYix0aGlzLmM9ZS5jLHRoaXMuZD1lLmQsdGhpcy50eD1lLnR4LHRoaXMudHk9ZS50eSx0aGlzfSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbQHBpeGkvbWF0aDpNYXRyaXggYT0iK3RoaXMuYSsiIGI9Iit0aGlzLmIrIiBjPSIrdGhpcy5jKyIgZD0iK3RoaXMuZCsiIHR4PSIrdGhpcy50eCsiIHR5PSIrdGhpcy50eSsiXSJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJJREVOVElUWSIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiVEVNUF9NQVRSSVgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSkscn0oKSxvZT1bMSwxLDAsLTEsLTEsLTEsMCwxLDEsMSwwLC0xLC0xLC0xLDAsMV0saGU9WzAsMSwxLDEsMCwtMSwtMSwtMSwwLDEsMSwxLDAsLTEsLTEsLTFdLHVlPVswLC0xLC0xLC0xLDAsMSwxLDEsMCwxLDEsMSwwLC0xLC0xLC0xXSxsZT1bMSwxLDAsLTEsLTEsLTEsMCwxLC0xLC0xLDAsMSwxLDEsMCwtMV0sbWk9W10sbGE9W10sVHI9TWF0aC5zaWduO2Z1bmN0aW9uIEJsKCl7Zm9yKHZhciByPTA7cjwxNjtyKyspe3ZhciBlPVtdO21pLnB1c2goZSk7Zm9yKHZhciB0PTA7dDwxNjt0KyspZm9yKHZhciBpPVRyKG9lW3JdKm9lW3RdK3VlW3JdKmhlW3RdKSxuPVRyKGhlW3JdKm9lW3RdK2xlW3JdKmhlW3RdKSxhPVRyKG9lW3JdKnVlW3RdK3VlW3JdKmxlW3RdKSxzPVRyKGhlW3JdKnVlW3RdK2xlW3JdKmxlW3RdKSxvPTA7bzwxNjtvKyspaWYob2Vbb109PT1pJiZoZVtvXT09PW4mJnVlW29dPT09YSYmbGVbb109PT1zKXtlLnB1c2gobyk7YnJlYWt9fWZvcih2YXIgcj0wO3I8MTY7cisrKXt2YXIgaD1uZXcgdnQ7aC5zZXQob2Vbcl0saGVbcl0sdWVbcl0sbGVbcl0sMCwwKSxsYS5wdXNoKGgpfX1CbCgpO3ZhciBzdD17RTowLFNFOjEsUzoyLFNXOjMsVzo0LE5XOjUsTjo2LE5FOjcsTUlSUk9SX1ZFUlRJQ0FMOjgsTUFJTl9ESUFHT05BTDoxMCxNSVJST1JfSE9SSVpPTlRBTDoxMixSRVZFUlNFX0RJQUdPTkFMOjE0LHVYOmZ1bmN0aW9uKHIpe3JldHVybiBvZVtyXX0sdVk6ZnVuY3Rpb24ocil7cmV0dXJuIGhlW3JdfSx2WDpmdW5jdGlvbihyKXtyZXR1cm4gdWVbcl19LHZZOmZ1bmN0aW9uKHIpe3JldHVybiBsZVtyXX0saW52OmZ1bmN0aW9uKHIpe3JldHVybiByJjg/ciYxNTotciY3fSxhZGQ6ZnVuY3Rpb24ocixlKXtyZXR1cm4gbWlbcl1bZV19LHN1YjpmdW5jdGlvbihyLGUpe3JldHVybiBtaVtyXVtzdC5pbnYoZSldfSxyb3RhdGUxODA6ZnVuY3Rpb24ocil7cmV0dXJuIHJeNH0saXNWZXJ0aWNhbDpmdW5jdGlvbihyKXtyZXR1cm4ociYzKT09PTJ9LGJ5RGlyZWN0aW9uOmZ1bmN0aW9uKHIsZSl7cmV0dXJuIE1hdGguYWJzKHIpKjI8PU1hdGguYWJzKGUpP2U+PTA/c3QuUzpzdC5OOk1hdGguYWJzKGUpKjI8PU1hdGguYWJzKHIpP3I+MD9zdC5FOnN0Llc6ZT4wP3I+MD9zdC5TRTpzdC5TVzpyPjA/c3QuTkU6c3QuTld9LG1hdHJpeEFwcGVuZFJvdGF0aW9uSW52OmZ1bmN0aW9uKHIsZSx0LGkpe3Q9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPTApO3ZhciBuPWxhW3N0LmludihlKV07bi50eD10LG4udHk9aSxyLmFwcGVuZChuKX19LGZhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe3RoaXMud29ybGRUcmFuc2Zvcm09bmV3IHZ0LHRoaXMubG9jYWxUcmFuc2Zvcm09bmV3IHZ0LHRoaXMucG9zaXRpb249bmV3IFJlKHRoaXMub25DaGFuZ2UsdGhpcywwLDApLHRoaXMuc2NhbGU9bmV3IFJlKHRoaXMub25DaGFuZ2UsdGhpcywxLDEpLHRoaXMucGl2b3Q9bmV3IFJlKHRoaXMub25DaGFuZ2UsdGhpcywwLDApLHRoaXMuc2tldz1uZXcgUmUodGhpcy51cGRhdGVTa2V3LHRoaXMsMCwwKSx0aGlzLl9yb3RhdGlvbj0wLHRoaXMuX2N4PTEsdGhpcy5fc3g9MCx0aGlzLl9jeT0wLHRoaXMuX3N5PTEsdGhpcy5fbG9jYWxJRD0wLHRoaXMuX2N1cnJlbnRMb2NhbElEPTAsdGhpcy5fd29ybGRJRD0wLHRoaXMuX3BhcmVudElEPTB9cmV0dXJuIHIucHJvdG90eXBlLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5fbG9jYWxJRCsrfSxyLnByb3RvdHlwZS51cGRhdGVTa2V3PWZ1bmN0aW9uKCl7dGhpcy5fY3g9TWF0aC5jb3ModGhpcy5fcm90YXRpb24rdGhpcy5za2V3LnkpLHRoaXMuX3N4PU1hdGguc2luKHRoaXMuX3JvdGF0aW9uK3RoaXMuc2tldy55KSx0aGlzLl9jeT0tTWF0aC5zaW4odGhpcy5fcm90YXRpb24tdGhpcy5za2V3LngpLHRoaXMuX3N5PU1hdGguY29zKHRoaXMuX3JvdGF0aW9uLXRoaXMuc2tldy54KSx0aGlzLl9sb2NhbElEKyt9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltAcGl4aS9tYXRoOlRyYW5zZm9ybSAiKygicG9zaXRpb249KCIrdGhpcy5wb3NpdGlvbi54KyIsICIrdGhpcy5wb3NpdGlvbi55KyIpICIpKygicm90YXRpb249Iit0aGlzLnJvdGF0aW9uKyIgIikrKCJzY2FsZT0oIit0aGlzLnNjYWxlLngrIiwgIit0aGlzLnNjYWxlLnkrIikgIikrKCJza2V3PSgiK3RoaXMuc2tldy54KyIsICIrdGhpcy5za2V3LnkrIikgIikrIl0ifSxyLnByb3RvdHlwZS51cGRhdGVMb2NhbFRyYW5zZm9ybT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubG9jYWxUcmFuc2Zvcm07dGhpcy5fbG9jYWxJRCE9PXRoaXMuX2N1cnJlbnRMb2NhbElEJiYoZS5hPXRoaXMuX2N4KnRoaXMuc2NhbGUueCxlLmI9dGhpcy5fc3gqdGhpcy5zY2FsZS54LGUuYz10aGlzLl9jeSp0aGlzLnNjYWxlLnksZS5kPXRoaXMuX3N5KnRoaXMuc2NhbGUueSxlLnR4PXRoaXMucG9zaXRpb24ueC0odGhpcy5waXZvdC54KmUuYSt0aGlzLnBpdm90LnkqZS5jKSxlLnR5PXRoaXMucG9zaXRpb24ueS0odGhpcy5waXZvdC54KmUuYit0aGlzLnBpdm90LnkqZS5kKSx0aGlzLl9jdXJyZW50TG9jYWxJRD10aGlzLl9sb2NhbElELHRoaXMuX3BhcmVudElEPS0xKX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubG9jYWxUcmFuc2Zvcm07aWYodGhpcy5fbG9jYWxJRCE9PXRoaXMuX2N1cnJlbnRMb2NhbElEJiYodC5hPXRoaXMuX2N4KnRoaXMuc2NhbGUueCx0LmI9dGhpcy5fc3gqdGhpcy5zY2FsZS54LHQuYz10aGlzLl9jeSp0aGlzLnNjYWxlLnksdC5kPXRoaXMuX3N5KnRoaXMuc2NhbGUueSx0LnR4PXRoaXMucG9zaXRpb24ueC0odGhpcy5waXZvdC54KnQuYSt0aGlzLnBpdm90LnkqdC5jKSx0LnR5PXRoaXMucG9zaXRpb24ueS0odGhpcy5waXZvdC54KnQuYit0aGlzLnBpdm90LnkqdC5kKSx0aGlzLl9jdXJyZW50TG9jYWxJRD10aGlzLl9sb2NhbElELHRoaXMuX3BhcmVudElEPS0xKSx0aGlzLl9wYXJlbnRJRCE9PWUuX3dvcmxkSUQpe3ZhciBpPWUud29ybGRUcmFuc2Zvcm0sbj10aGlzLndvcmxkVHJhbnNmb3JtO24uYT10LmEqaS5hK3QuYippLmMsbi5iPXQuYSppLmIrdC5iKmkuZCxuLmM9dC5jKmkuYSt0LmQqaS5jLG4uZD10LmMqaS5iK3QuZCppLmQsbi50eD10LnR4KmkuYSt0LnR5KmkuYytpLnR4LG4udHk9dC50eCppLmIrdC50eSppLmQraS50eSx0aGlzLl9wYXJlbnRJRD1lLl93b3JsZElELHRoaXMuX3dvcmxkSUQrK319LHIucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7ZS5kZWNvbXBvc2UodGhpcyksdGhpcy5fbG9jYWxJRCsrfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInJvdGF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9ufSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcm90YXRpb24hPT1lJiYodGhpcy5fcm90YXRpb249ZSx0aGlzLnVwZGF0ZVNrZXcoKSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5JREVOVElUWT1uZXcgcixyfSgpO0kuU09SVEFCTEVfQ0hJTERSRU49ITE7dmFyIEVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe3RoaXMubWluWD0xLzAsdGhpcy5taW5ZPTEvMCx0aGlzLm1heFg9LTEvMCx0aGlzLm1heFk9LTEvMCx0aGlzLnJlY3Q9bnVsbCx0aGlzLnVwZGF0ZUlEPS0xfXJldHVybiByLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWluWD50aGlzLm1heFh8fHRoaXMubWluWT50aGlzLm1heFl9LHIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0tMS8wLHRoaXMubWF4WT0tMS8wfSxyLnByb3RvdHlwZS5nZXRSZWN0YW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubWluWD50aGlzLm1heFh8fHRoaXMubWluWT50aGlzLm1heFk/SC5FTVBUWTooZT1lfHxuZXcgSCgwLDAsMSwxKSxlLng9dGhpcy5taW5YLGUueT10aGlzLm1pblksZS53aWR0aD10aGlzLm1heFgtdGhpcy5taW5YLGUuaGVpZ2h0PXRoaXMubWF4WS10aGlzLm1pblksZSl9LHIucHJvdG90eXBlLmFkZFBvaW50PWZ1bmN0aW9uKGUpe3RoaXMubWluWD1NYXRoLm1pbih0aGlzLm1pblgsZS54KSx0aGlzLm1heFg9TWF0aC5tYXgodGhpcy5tYXhYLGUueCksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlLnkpLHRoaXMubWF4WT1NYXRoLm1heCh0aGlzLm1heFksZS55KX0sci5wcm90b3R5cGUuYWRkUG9pbnRNYXRyaXg9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmEsbj1lLmIsYT1lLmMscz1lLmQsbz1lLnR4LGg9ZS50eSx1PWkqdC54K2EqdC55K28sbD1uKnQueCtzKnQueStoO3RoaXMubWluWD1NYXRoLm1pbih0aGlzLm1pblgsdSksdGhpcy5tYXhYPU1hdGgubWF4KHRoaXMubWF4WCx1KSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLGwpLHRoaXMubWF4WT1NYXRoLm1heCh0aGlzLm1heFksbCl9LHIucHJvdG90eXBlLmFkZFF1YWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5taW5YLGk9dGhpcy5taW5ZLG49dGhpcy5tYXhYLGE9dGhpcy5tYXhZLHM9ZVswXSxvPWVbMV07dD1zPHQ/czp0LGk9bzxpP286aSxuPXM+bj9zOm4sYT1vPmE/bzphLHM9ZVsyXSxvPWVbM10sdD1zPHQ/czp0LGk9bzxpP286aSxuPXM+bj9zOm4sYT1vPmE/bzphLHM9ZVs0XSxvPWVbNV0sdD1zPHQ/czp0LGk9bzxpP286aSxuPXM+bj9zOm4sYT1vPmE/bzphLHM9ZVs2XSxvPWVbN10sdD1zPHQ/czp0LGk9bzxpP286aSxuPXM+bj9zOm4sYT1vPmE/bzphLHRoaXMubWluWD10LHRoaXMubWluWT1pLHRoaXMubWF4WD1uLHRoaXMubWF4WT1hfSxyLnByb3RvdHlwZS5hZGRGcmFtZT1mdW5jdGlvbihlLHQsaSxuLGEpe3RoaXMuYWRkRnJhbWVNYXRyaXgoZS53b3JsZFRyYW5zZm9ybSx0LGksbixhKX0sci5wcm90b3R5cGUuYWRkRnJhbWVNYXRyaXg9ZnVuY3Rpb24oZSx0LGksbixhKXt2YXIgcz1lLmEsbz1lLmIsaD1lLmMsdT1lLmQsbD1lLnR4LGM9ZS50eSxmPXRoaXMubWluWCxkPXRoaXMubWluWSxwPXRoaXMubWF4WCx2PXRoaXMubWF4WSxfPXMqdCtoKmkrbCxtPW8qdCt1KmkrYztmPV88Zj9fOmYsZD1tPGQ/bTpkLHA9Xz5wP186cCx2PW0+dj9tOnYsXz1zKm4raCppK2wsbT1vKm4rdSppK2MsZj1fPGY/XzpmLGQ9bTxkP206ZCxwPV8+cD9fOnAsdj1tPnY/bTp2LF89cyp0K2gqYStsLG09byp0K3UqYStjLGY9XzxmP186ZixkPW08ZD9tOmQscD1fPnA/XzpwLHY9bT52P206dixfPXMqbitoKmErbCxtPW8qbit1KmErYyxmPV88Zj9fOmYsZD1tPGQ/bTpkLHA9Xz5wP186cCx2PW0+dj9tOnYsdGhpcy5taW5YPWYsdGhpcy5taW5ZPWQsdGhpcy5tYXhYPXAsdGhpcy5tYXhZPXZ9LHIucHJvdG90eXBlLmFkZFZlcnRleERhdGE9ZnVuY3Rpb24oZSx0LGkpe2Zvcih2YXIgbj10aGlzLm1pblgsYT10aGlzLm1pblkscz10aGlzLm1heFgsbz10aGlzLm1heFksaD10O2g8aTtoKz0yKXt2YXIgdT1lW2hdLGw9ZVtoKzFdO249dTxuP3U6bixhPWw8YT9sOmEscz11PnM/dTpzLG89bD5vP2w6b310aGlzLm1pblg9bix0aGlzLm1pblk9YSx0aGlzLm1heFg9cyx0aGlzLm1heFk9b30sci5wcm90b3R5cGUuYWRkVmVydGljZXM9ZnVuY3Rpb24oZSx0LGksbil7dGhpcy5hZGRWZXJ0aWNlc01hdHJpeChlLndvcmxkVHJhbnNmb3JtLHQsaSxuKX0sci5wcm90b3R5cGUuYWRkVmVydGljZXNNYXRyaXg9ZnVuY3Rpb24oZSx0LGksbixhLHMpe2E9PT12b2lkIDAmJihhPTApLHM9PT12b2lkIDAmJihzPWEpO2Zvcih2YXIgbz1lLmEsaD1lLmIsdT1lLmMsbD1lLmQsYz1lLnR4LGY9ZS50eSxkPXRoaXMubWluWCxwPXRoaXMubWluWSx2PXRoaXMubWF4WCxfPXRoaXMubWF4WSxtPWk7bTxuO20rPTIpe3ZhciBnPXRbbV0seT10W20rMV0sVD1vKmcrdSp5K2MseD1sKnkraCpnK2Y7ZD1NYXRoLm1pbihkLFQtYSksdj1NYXRoLm1heCh2LFQrYSkscD1NYXRoLm1pbihwLHgtcyksXz1NYXRoLm1heChfLHgrcyl9dGhpcy5taW5YPWQsdGhpcy5taW5ZPXAsdGhpcy5tYXhYPXYsdGhpcy5tYXhZPV99LHIucHJvdG90eXBlLmFkZEJvdW5kcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1pblgsaT10aGlzLm1pblksbj10aGlzLm1heFgsYT10aGlzLm1heFk7dGhpcy5taW5YPWUubWluWDx0P2UubWluWDp0LHRoaXMubWluWT1lLm1pblk8aT9lLm1pblk6aSx0aGlzLm1heFg9ZS5tYXhYPm4/ZS5tYXhYOm4sdGhpcy5tYXhZPWUubWF4WT5hP2UubWF4WTphfSxyLnByb3RvdHlwZS5hZGRCb3VuZHNNYXNrPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5taW5YPnQubWluWD9lLm1pblg6dC5taW5YLG49ZS5taW5ZPnQubWluWT9lLm1pblk6dC5taW5ZLGE9ZS5tYXhYPHQubWF4WD9lLm1heFg6dC5tYXhYLHM9ZS5tYXhZPHQubWF4WT9lLm1heFk6dC5tYXhZO2lmKGk8PWEmJm48PXMpe3ZhciBvPXRoaXMubWluWCxoPXRoaXMubWluWSx1PXRoaXMubWF4WCxsPXRoaXMubWF4WTt0aGlzLm1pblg9aTxvP2k6byx0aGlzLm1pblk9bjxoP246aCx0aGlzLm1heFg9YT51P2E6dSx0aGlzLm1heFk9cz5sP3M6bH19LHIucHJvdG90eXBlLmFkZEJvdW5kc01hdHJpeD1mdW5jdGlvbihlLHQpe3RoaXMuYWRkRnJhbWVNYXRyaXgodCxlLm1pblgsZS5taW5ZLGUubWF4WCxlLm1heFkpfSxyLnByb3RvdHlwZS5hZGRCb3VuZHNBcmVhPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5taW5YPnQueD9lLm1pblg6dC54LG49ZS5taW5ZPnQueT9lLm1pblk6dC55LGE9ZS5tYXhYPHQueCt0LndpZHRoP2UubWF4WDp0LngrdC53aWR0aCxzPWUubWF4WTx0LnkrdC5oZWlnaHQ/ZS5tYXhZOnQueSt0LmhlaWdodDtpZihpPD1hJiZuPD1zKXt2YXIgbz10aGlzLm1pblgsaD10aGlzLm1pblksdT10aGlzLm1heFgsbD10aGlzLm1heFk7dGhpcy5taW5YPWk8bz9pOm8sdGhpcy5taW5ZPW48aD9uOmgsdGhpcy5tYXhYPWE+dT9hOnUsdGhpcy5tYXhZPXM+bD9zOmx9fSxyLnByb3RvdHlwZS5wYWQ9ZnVuY3Rpb24oZSx0KXtlPT09dm9pZCAwJiYoZT0wKSx0PT09dm9pZCAwJiYodD1lKSx0aGlzLmlzRW1wdHkoKXx8KHRoaXMubWluWC09ZSx0aGlzLm1heFgrPWUsdGhpcy5taW5ZLT10LHRoaXMubWF4WSs9dCl9LHIucHJvdG90eXBlLmFkZEZyYW1lUGFkPWZ1bmN0aW9uKGUsdCxpLG4sYSxzKXtlLT1hLHQtPXMsaSs9YSxuKz1zLHRoaXMubWluWD10aGlzLm1pblg8ZT90aGlzLm1pblg6ZSx0aGlzLm1heFg9dGhpcy5tYXhYPmk/dGhpcy5tYXhYOmksdGhpcy5taW5ZPXRoaXMubWluWTx0P3RoaXMubWluWTp0LHRoaXMubWF4WT10aGlzLm1heFk+bj90aGlzLm1heFk6bn0scn0oKTt2YXIgZ2k9ZnVuY3Rpb24ocixlKXtyZXR1cm4gZ2k9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LGdpKHIsZSl9O2Z1bmN0aW9uIHlpKHIsZSl7Z2kocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX12YXIgbHQ9ZnVuY3Rpb24ocil7eWkoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9ci5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LnRlbXBEaXNwbGF5T2JqZWN0UGFyZW50PW51bGwsdC50cmFuc2Zvcm09bmV3IGZhLHQuYWxwaGE9MSx0LnZpc2libGU9ITAsdC5yZW5kZXJhYmxlPSEwLHQuY3VsbGFibGU9ITEsdC5jdWxsQXJlYT1udWxsLHQucGFyZW50PW51bGwsdC53b3JsZEFscGhhPTEsdC5fbGFzdFNvcnRlZEluZGV4PTAsdC5fekluZGV4PTAsdC5maWx0ZXJBcmVhPW51bGwsdC5maWx0ZXJzPW51bGwsdC5fZW5hYmxlZEZpbHRlcnM9bnVsbCx0Ll9ib3VuZHM9bmV3IEVyLHQuX2xvY2FsQm91bmRzPW51bGwsdC5fYm91bmRzSUQ9MCx0Ll9ib3VuZHNSZWN0PW51bGwsdC5fbG9jYWxCb3VuZHNSZWN0PW51bGwsdC5fbWFzaz1udWxsLHQuX21hc2tSZWZDb3VudD0wLHQuX2Rlc3Ryb3llZD0hMSx0LmlzU3ByaXRlPSExLHQuaXNNYXNrPSExLHR9cmV0dXJuIGUubWl4aW49ZnVuY3Rpb24odCl7Zm9yKHZhciBpPU9iamVjdC5rZXlzKHQpLG49MDtuPGkubGVuZ3RoOysrbil7dmFyIGE9aVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsYSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsYSkpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9yZWN1cnNpdmVQb3N0VXBkYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnQ/KHRoaXMucGFyZW50Ll9yZWN1cnNpdmVQb3N0VXBkYXRlVHJhbnNmb3JtKCksdGhpcy50cmFuc2Zvcm0udXBkYXRlVHJhbnNmb3JtKHRoaXMucGFyZW50LnRyYW5zZm9ybSkpOnRoaXMudHJhbnNmb3JtLnVwZGF0ZVRyYW5zZm9ybSh0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudC50cmFuc2Zvcm0pfSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oKXt0aGlzLl9ib3VuZHNJRCsrLHRoaXMudHJhbnNmb3JtLnVwZGF0ZVRyYW5zZm9ybSh0aGlzLnBhcmVudC50cmFuc2Zvcm0pLHRoaXMud29ybGRBbHBoYT10aGlzLmFscGhhKnRoaXMucGFyZW50LndvcmxkQWxwaGF9LGUucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbih0LGkpe3JldHVybiB0fHwodGhpcy5wYXJlbnQ/KHRoaXMuX3JlY3Vyc2l2ZVBvc3RVcGRhdGVUcmFuc2Zvcm0oKSx0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpKToodGhpcy5wYXJlbnQ9dGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQsdGhpcy51cGRhdGVUcmFuc2Zvcm0oKSx0aGlzLnBhcmVudD1udWxsKSksdGhpcy5fYm91bmRzLnVwZGF0ZUlEIT09dGhpcy5fYm91bmRzSUQmJih0aGlzLmNhbGN1bGF0ZUJvdW5kcygpLHRoaXMuX2JvdW5kcy51cGRhdGVJRD10aGlzLl9ib3VuZHNJRCksaXx8KHRoaXMuX2JvdW5kc1JlY3R8fCh0aGlzLl9ib3VuZHNSZWN0PW5ldyBIKSxpPXRoaXMuX2JvdW5kc1JlY3QpLHRoaXMuX2JvdW5kcy5nZXRSZWN0YW5nbGUoaSl9LGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9sb2NhbEJvdW5kc1JlY3R8fCh0aGlzLl9sb2NhbEJvdW5kc1JlY3Q9bmV3IEgpLHQ9dGhpcy5fbG9jYWxCb3VuZHNSZWN0KSx0aGlzLl9sb2NhbEJvdW5kc3x8KHRoaXMuX2xvY2FsQm91bmRzPW5ldyBFcik7dmFyIGk9dGhpcy50cmFuc2Zvcm0sbj10aGlzLnBhcmVudDt0aGlzLnBhcmVudD1udWxsLHRoaXMudHJhbnNmb3JtPXRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50LnRyYW5zZm9ybTt2YXIgYT10aGlzLl9ib3VuZHMscz10aGlzLl9ib3VuZHNJRDt0aGlzLl9ib3VuZHM9dGhpcy5fbG9jYWxCb3VuZHM7dmFyIG89dGhpcy5nZXRCb3VuZHMoITEsdCk7cmV0dXJuIHRoaXMucGFyZW50PW4sdGhpcy50cmFuc2Zvcm09aSx0aGlzLl9ib3VuZHM9YSx0aGlzLl9ib3VuZHMudXBkYXRlSUQrPXRoaXMuX2JvdW5kc0lELXMsb30sZS5wcm90b3R5cGUudG9HbG9iYWw9ZnVuY3Rpb24odCxpLG4pe3JldHVybiBuPT09dm9pZCAwJiYobj0hMSksbnx8KHRoaXMuX3JlY3Vyc2l2ZVBvc3RVcGRhdGVUcmFuc2Zvcm0oKSx0aGlzLnBhcmVudD90aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKToodGhpcy5wYXJlbnQ9dGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQsdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCksdGhpcy5wYXJlbnQ9bnVsbCkpLHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkodCxpKX0sZS5wcm90b3R5cGUudG9Mb2NhbD1mdW5jdGlvbih0LGksbixhKXtyZXR1cm4gaSYmKHQ9aS50b0dsb2JhbCh0LG4sYSkpLGF8fCh0aGlzLl9yZWN1cnNpdmVQb3N0VXBkYXRlVHJhbnNmb3JtKCksdGhpcy5wYXJlbnQ/dGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk6KHRoaXMucGFyZW50PXRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50LHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMucGFyZW50PW51bGwpKSx0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZSh0LG4pfSxlLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LmFkZENoaWxkKXRocm93IG5ldyBFcnJvcigic2V0UGFyZW50OiBBcmd1bWVudCBtdXN0IGJlIGEgQ29udGFpbmVyIik7cmV0dXJuIHQuYWRkQ2hpbGQodGhpcyksdH0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKHQsaSxuLGEscyxvLGgsdSxsKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MCksaT09PXZvaWQgMCYmKGk9MCksbj09PXZvaWQgMCYmKG49MSksYT09PXZvaWQgMCYmKGE9MSkscz09PXZvaWQgMCYmKHM9MCksbz09PXZvaWQgMCYmKG89MCksaD09PXZvaWQgMCYmKGg9MCksdT09PXZvaWQgMCYmKHU9MCksbD09PXZvaWQgMCYmKGw9MCksdGhpcy5wb3NpdGlvbi54PXQsdGhpcy5wb3NpdGlvbi55PWksdGhpcy5zY2FsZS54PW58fDEsdGhpcy5zY2FsZS55PWF8fDEsdGhpcy5yb3RhdGlvbj1zLHRoaXMuc2tldy54PW8sdGhpcy5za2V3Lnk9aCx0aGlzLnBpdm90Lng9dSx0aGlzLnBpdm90Lnk9bCx0aGlzfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKSx0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy50cmFuc2Zvcm09bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMuX2JvdW5kcz1udWxsLHRoaXMubWFzaz1udWxsLHRoaXMuY3VsbEFyZWE9bnVsbCx0aGlzLmZpbHRlcnM9bnVsbCx0aGlzLmZpbHRlckFyZWE9bnVsbCx0aGlzLmhpdEFyZWE9bnVsbCx0aGlzLmludGVyYWN0aXZlPSExLHRoaXMuaW50ZXJhY3RpdmVDaGlsZHJlbj0hMSx0aGlzLmVtaXQoImRlc3Ryb3llZCIpLHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVtcERpc3BsYXlPYmplY3RQYXJlbnQ9PT1udWxsJiYodGhpcy50ZW1wRGlzcGxheU9iamVjdFBhcmVudD1uZXcgY2EpLHRoaXMudGVtcERpc3BsYXlPYmplY3RQYXJlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5hYmxlVGVtcFBhcmVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50O3JldHVybiB0aGlzLnBhcmVudD10aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCx0fSxlLnByb3RvdHlwZS5kaXNhYmxlVGVtcFBhcmVudD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudD10fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi54fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50cmFuc2Zvcm0ucG9zaXRpb24ueD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLnl9LHNldDpmdW5jdGlvbih0KXt0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbi55PXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3b3JsZFRyYW5zZm9ybSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2FsVHJhbnNmb3JtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2FsVHJhbnNmb3JtfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb259LHNldDpmdW5jdGlvbih0KXt0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbi5jb3B5RnJvbSh0KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjYWxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnNjYWxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50cmFuc2Zvcm0uc2NhbGUuY29weUZyb20odCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwaXZvdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXZvdH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHJhbnNmb3JtLnBpdm90LmNvcHlGcm9tKHQpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2tldyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5za2V3fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50cmFuc2Zvcm0uc2tldy5jb3B5RnJvbSh0KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJvdGF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJvdGF0aW9ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50cmFuc2Zvcm0ucm90YXRpb249dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFuZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJvdGF0aW9uKk9sfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50cmFuc2Zvcm0ucm90YXRpb249dCpNbH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInpJbmRleCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96SW5kZXh9LHNldDpmdW5jdGlvbih0KXt0aGlzLl96SW5kZXg9dCx0aGlzLnBhcmVudCYmKHRoaXMucGFyZW50LnNvcnREaXJ0eT0hMCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3b3JsZFZpc2libGUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2Rve2lmKCF0LnZpc2libGUpcmV0dXJuITE7dD10LnBhcmVudH13aGlsZSh0KTtyZXR1cm4hMH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm1hc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFza30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hc2shPT10KXtpZih0aGlzLl9tYXNrKXt2YXIgaT10aGlzLl9tYXNrLmlzTWFza0RhdGE/dGhpcy5fbWFzay5tYXNrT2JqZWN0OnRoaXMuX21hc2s7aSYmKGkuX21hc2tSZWZDb3VudC0tLGkuX21hc2tSZWZDb3VudD09PTAmJihpLnJlbmRlcmFibGU9ITAsaS5pc01hc2s9ITEpKX1pZih0aGlzLl9tYXNrPXQsdGhpcy5fbWFzayl7dmFyIGk9dGhpcy5fbWFzay5pc01hc2tEYXRhP3RoaXMuX21hc2subWFza09iamVjdDp0aGlzLl9tYXNrO2kmJihpLl9tYXNrUmVmQ291bnQ9PT0wJiYoaS5yZW5kZXJhYmxlPSExLGkuaXNNYXNrPSEwKSxpLl9tYXNrUmVmQ291bnQrKyl9fX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfShCZSksY2E9ZnVuY3Rpb24ocil7eWkoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9ciE9PW51bGwmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnNvcnREaXJ0eT1udWxsLHR9cmV0dXJuIGV9KGx0KTtsdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybT1sdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO2Z1bmN0aW9uIExsKHIsZSl7cmV0dXJuIHIuekluZGV4PT09ZS56SW5kZXg/ci5fbGFzdFNvcnRlZEluZGV4LWUuX2xhc3RTb3J0ZWRJbmRleDpyLnpJbmRleC1lLnpJbmRleH12YXIgWHQ9ZnVuY3Rpb24ocil7eWkoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9ci5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LmNoaWxkcmVuPVtdLHQuc29ydGFibGVDaGlsZHJlbj1JLlNPUlRBQkxFX0NISUxEUkVOLHQuc29ydERpcnR5PSExLHR9cmV0dXJuIGUucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2U9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMsaT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKylpW25dPXRbbl07aWYoaS5sZW5ndGg+MSlmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGlbYV0pO2Vsc2V7dmFyIHM9aVswXTtzLnBhcmVudCYmcy5wYXJlbnQucmVtb3ZlQ2hpbGQocykscy5wYXJlbnQ9dGhpcyx0aGlzLnNvcnREaXJ0eT0hMCxzLnRyYW5zZm9ybS5fcGFyZW50SUQ9LTEsdGhpcy5jaGlsZHJlbi5wdXNoKHMpLHRoaXMuX2JvdW5kc0lEKyssdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpLHRoaXMuZW1pdCgiY2hpbGRBZGRlZCIscyx0aGlzLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpLHMuZW1pdCgiYWRkZWQiLHRoaXMpfXJldHVybiBpWzBdfSxlLnByb3RvdHlwZS5hZGRDaGlsZEF0PWZ1bmN0aW9uKHQsaSl7aWYoaTwwfHxpPnRoaXMuY2hpbGRyZW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcih0KyJhZGRDaGlsZEF0OiBUaGUgaW5kZXggIitpKyIgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAiK3RoaXMuY2hpbGRyZW4ubGVuZ3RoKTtyZXR1cm4gdC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZUNoaWxkKHQpLHQucGFyZW50PXRoaXMsdGhpcy5zb3J0RGlydHk9ITAsdC50cmFuc2Zvcm0uX3BhcmVudElEPS0xLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksMCx0KSx0aGlzLl9ib3VuZHNJRCsrLHRoaXMub25DaGlsZHJlbkNoYW5nZShpKSx0LmVtaXQoImFkZGVkIix0aGlzKSx0aGlzLmVtaXQoImNoaWxkQWRkZWQiLHQsdGhpcyxpKSx0fSxlLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW49ZnVuY3Rpb24odCxpKXtpZih0IT09aSl7dmFyIG49dGhpcy5nZXRDaGlsZEluZGV4KHQpLGE9dGhpcy5nZXRDaGlsZEluZGV4KGkpO3RoaXMuY2hpbGRyZW5bbl09aSx0aGlzLmNoaWxkcmVuW2FdPXQsdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKG48YT9uOmEpfX0sZS5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleD1mdW5jdGlvbih0KXt2YXIgaT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7aWYoaT09PS0xKXRocm93IG5ldyBFcnJvcigiVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXIiKTtyZXR1cm4gaX0sZS5wcm90b3R5cGUuc2V0Q2hpbGRJbmRleD1mdW5jdGlvbih0LGkpe2lmKGk8MHx8aT49dGhpcy5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgaW5kZXggIitpKyIgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAiK3RoaXMuY2hpbGRyZW4ubGVuZ3RoKTt2YXIgbj10aGlzLmdldENoaWxkSW5kZXgodCk7U2UodGhpcy5jaGlsZHJlbixuLDEpLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksMCx0KSx0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaSl9LGUucHJvdG90eXBlLmdldENoaWxkQXQ9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLmNoaWxkcmVuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdldENoaWxkQXQ6IEluZGV4ICgiK3QrIikgZG9lcyBub3QgZXhpc3QuIik7cmV0dXJuIHRoaXMuY2hpbGRyZW5bdF19LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxpPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWlbbl09dFtuXTtpZihpLmxlbmd0aD4xKWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXRoaXMucmVtb3ZlQ2hpbGQoaVthXSk7ZWxzZXt2YXIgcz1pWzBdLG89dGhpcy5jaGlsZHJlbi5pbmRleE9mKHMpO2lmKG89PT0tMSlyZXR1cm4gbnVsbDtzLnBhcmVudD1udWxsLHMudHJhbnNmb3JtLl9wYXJlbnRJRD0tMSxTZSh0aGlzLmNoaWxkcmVuLG8sMSksdGhpcy5fYm91bmRzSUQrKyx0aGlzLm9uQ2hpbGRyZW5DaGFuZ2Uobykscy5lbWl0KCJyZW1vdmVkIix0aGlzKSx0aGlzLmVtaXQoImNoaWxkUmVtb3ZlZCIscyx0aGlzLG8pfXJldHVybiBpWzBdfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0PWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0Q2hpbGRBdCh0KTtyZXR1cm4gaS5wYXJlbnQ9bnVsbCxpLnRyYW5zZm9ybS5fcGFyZW50SUQ9LTEsU2UodGhpcy5jaGlsZHJlbix0LDEpLHRoaXMuX2JvdW5kc0lEKyssdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHQpLGkuZW1pdCgicmVtb3ZlZCIsdGhpcyksdGhpcy5lbWl0KCJjaGlsZFJlbW92ZWQiLGksdGhpcyx0KSxpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbj1mdW5jdGlvbih0LGkpe3Q9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoKTt2YXIgbj10LGE9aSxzPWEtbixvO2lmKHM+MCYmczw9YSl7bz10aGlzLmNoaWxkcmVuLnNwbGljZShuLHMpO2Zvcih2YXIgaD0wO2g8by5sZW5ndGg7KytoKW9baF0ucGFyZW50PW51bGwsb1toXS50cmFuc2Zvcm0mJihvW2hdLnRyYW5zZm9ybS5fcGFyZW50SUQ9LTEpO3RoaXMuX2JvdW5kc0lEKyssdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKHQpO2Zvcih2YXIgaD0wO2g8by5sZW5ndGg7KytoKW9baF0uZW1pdCgicmVtb3ZlZCIsdGhpcyksdGhpcy5lbWl0KCJjaGlsZFJlbW92ZWQiLG9baF0sdGhpcyxoKTtyZXR1cm4gb31lbHNlIGlmKHM9PT0wJiZ0aGlzLmNoaWxkcmVuLmxlbmd0aD09PTApcmV0dXJuW107dGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4iKX0sZS5wcm90b3R5cGUuc29ydENoaWxkcmVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSExLGk9MCxuPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8bjsrK2kpe3ZhciBhPXRoaXMuY2hpbGRyZW5baV07YS5fbGFzdFNvcnRlZEluZGV4PWksIXQmJmEuekluZGV4IT09MCYmKHQ9ITApfXQmJnRoaXMuY2hpbGRyZW4ubGVuZ3RoPjEmJnRoaXMuY2hpbGRyZW4uc29ydChMbCksdGhpcy5zb3J0RGlydHk9ITF9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybT1mdW5jdGlvbigpe3RoaXMuc29ydGFibGVDaGlsZHJlbiYmdGhpcy5zb3J0RGlydHkmJnRoaXMuc29ydENoaWxkcmVuKCksdGhpcy5fYm91bmRzSUQrKyx0aGlzLnRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0odGhpcy5wYXJlbnQudHJhbnNmb3JtKSx0aGlzLndvcmxkQWxwaGE9dGhpcy5hbHBoYSp0aGlzLnBhcmVudC53b3JsZEFscGhhO2Zvcih2YXIgdD0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7dDxpOysrdCl7dmFyIG49dGhpcy5jaGlsZHJlblt0XTtuLnZpc2libGUmJm4udXBkYXRlVHJhbnNmb3JtKCl9fSxlLnByb3RvdHlwZS5jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLl9ib3VuZHMuY2xlYXIoKSx0aGlzLl9jYWxjdWxhdGVCb3VuZHMoKTtmb3IodmFyIHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7dmFyIGk9dGhpcy5jaGlsZHJlblt0XTtpZighKCFpLnZpc2libGV8fCFpLnJlbmRlcmFibGUpKWlmKGkuY2FsY3VsYXRlQm91bmRzKCksaS5fbWFzayl7dmFyIG49aS5fbWFzay5pc01hc2tEYXRhP2kuX21hc2subWFza09iamVjdDppLl9tYXNrO24/KG4uY2FsY3VsYXRlQm91bmRzKCksdGhpcy5fYm91bmRzLmFkZEJvdW5kc01hc2soaS5fYm91bmRzLG4uX2JvdW5kcykpOnRoaXMuX2JvdW5kcy5hZGRCb3VuZHMoaS5fYm91bmRzKX1lbHNlIGkuZmlsdGVyQXJlYT90aGlzLl9ib3VuZHMuYWRkQm91bmRzQXJlYShpLl9ib3VuZHMsaS5maWx0ZXJBcmVhKTp0aGlzLl9ib3VuZHMuYWRkQm91bmRzKGkuX2JvdW5kcyl9dGhpcy5fYm91bmRzLnVwZGF0ZUlEPXRoaXMuX2JvdW5kc0lEfSxlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcz1mdW5jdGlvbih0LGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbj1yLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMsdCk7aWYoIWkpZm9yKHZhciBhPTAscz10aGlzLmNoaWxkcmVuLmxlbmd0aDthPHM7KythKXt2YXIgbz10aGlzLmNoaWxkcmVuW2FdO28udmlzaWJsZSYmby51cGRhdGVUcmFuc2Zvcm0oKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX3JlbmRlcldpdGhDdWxsaW5nPWZ1bmN0aW9uKHQpe3ZhciBpPXQucmVuZGVyVGV4dHVyZS5zb3VyY2VGcmFtZTtpZihpLndpZHRoPjAmJmkuaGVpZ2h0PjApe3ZhciBuLGE7aWYodGhpcy5jdWxsQXJlYT8obj10aGlzLmN1bGxBcmVhLGE9dGhpcy53b3JsZFRyYW5zZm9ybSk6dGhpcy5fcmVuZGVyIT09ZS5wcm90b3R5cGUuX3JlbmRlciYmKG49dGhpcy5nZXRCb3VuZHMoITApKSxuJiZpLmludGVyc2VjdHMobixhKSl0aGlzLl9yZW5kZXIodCk7ZWxzZSBpZih0aGlzLmN1bGxBcmVhKXJldHVybjtmb3IodmFyIHM9MCxvPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO3M8bzsrK3Mpe3ZhciBoPXRoaXMuY2hpbGRyZW5bc10sdT1oLmN1bGxhYmxlO2guY3VsbGFibGU9dXx8IXRoaXMuY3VsbEFyZWEsaC5yZW5kZXIodCksaC5jdWxsYWJsZT11fX19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbih0KXtpZighKCF0aGlzLnZpc2libGV8fHRoaXMud29ybGRBbHBoYTw9MHx8IXRoaXMucmVuZGVyYWJsZSkpaWYodGhpcy5fbWFza3x8dGhpcy5maWx0ZXJzJiZ0aGlzLmZpbHRlcnMubGVuZ3RoKXRoaXMucmVuZGVyQWR2YW5jZWQodCk7ZWxzZSBpZih0aGlzLmN1bGxhYmxlKXRoaXMuX3JlbmRlcldpdGhDdWxsaW5nKHQpO2Vsc2V7dGhpcy5fcmVuZGVyKHQpO2Zvcih2YXIgaT0wLG49dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxuOysraSl0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcih0KX19LGUucHJvdG90eXBlLnJlbmRlckFkdmFuY2VkPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZmlsdGVycyxuPXRoaXMuX21hc2s7aWYoaSl7dGhpcy5fZW5hYmxlZEZpbHRlcnN8fCh0aGlzLl9lbmFibGVkRmlsdGVycz1bXSksdGhpcy5fZW5hYmxlZEZpbHRlcnMubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspaVthXS5lbmFibGVkJiZ0aGlzLl9lbmFibGVkRmlsdGVycy5wdXNoKGlbYV0pfXZhciBzPWkmJnRoaXMuX2VuYWJsZWRGaWx0ZXJzJiZ0aGlzLl9lbmFibGVkRmlsdGVycy5sZW5ndGh8fG4mJighbi5pc01hc2tEYXRhfHxuLmVuYWJsZWQmJihuLmF1dG9EZXRlY3R8fG4udHlwZSE9PWR0Lk5PTkUpKTtpZihzJiZ0LmJhdGNoLmZsdXNoKCksaSYmdGhpcy5fZW5hYmxlZEZpbHRlcnMmJnRoaXMuX2VuYWJsZWRGaWx0ZXJzLmxlbmd0aCYmdC5maWx0ZXIucHVzaCh0aGlzLHRoaXMuX2VuYWJsZWRGaWx0ZXJzKSxuJiZ0Lm1hc2sucHVzaCh0aGlzLHRoaXMuX21hc2spLHRoaXMuY3VsbGFibGUpdGhpcy5fcmVuZGVyV2l0aEN1bGxpbmcodCk7ZWxzZXt0aGlzLl9yZW5kZXIodCk7Zm9yKHZhciBhPTAsbz10aGlzLmNoaWxkcmVuLmxlbmd0aDthPG87KythKXRoaXMuY2hpbGRyZW5bYV0ucmVuZGVyKHQpfXMmJnQuYmF0Y2guZmx1c2goKSxuJiZ0Lm1hc2sucG9wKHRoaXMpLGkmJnRoaXMuX2VuYWJsZWRGaWx0ZXJzJiZ0aGlzLl9lbmFibGVkRmlsdGVycy5sZW5ndGgmJnQuZmlsdGVyLnBvcCgpfSxlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXtyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5zb3J0RGlydHk9ITE7dmFyIGk9dHlwZW9mIHQ9PSJib29sZWFuIj90OnQmJnQuY2hpbGRyZW4sbj10aGlzLnJlbW92ZUNoaWxkcmVuKDAsdGhpcy5jaGlsZHJlbi5sZW5ndGgpO2lmKGkpZm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpblthXS5kZXN0cm95KHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NhbGUueCp0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGh9LHNldDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7aSE9PTA/dGhpcy5zY2FsZS54PXQvaTp0aGlzLnNjYWxlLng9MSx0aGlzLl93aWR0aD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NhbGUueSp0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0fSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtpIT09MD90aGlzLnNjYWxlLnk9dC9pOnRoaXMuc2NhbGUueT0xLHRoaXMuX2hlaWdodD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGx0KTtYdC5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtPVh0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07dmFyIEhlPWZ1bmN0aW9uKCl7cmV0dXJuIEhlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMsaSxuPTEsYT1hcmd1bWVudHMubGVuZ3RoO248YTtuKyspe2k9dFtuXTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmKGVbc109aVtzXSl9cmV0dXJuIGV9LEhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSzsoZnVuY3Rpb24ocil7ci5BcHBsaWNhdGlvbj0iYXBwbGljYXRpb24iLHIuUmVuZGVyZXJQbHVnaW49InJlbmRlcmVyLXdlYmdsLXBsdWdpbiIsci5DYW52YXNSZW5kZXJlclBsdWdpbj0icmVuZGVyZXItY2FudmFzLXBsdWdpbiIsci5Mb2FkZXI9ImxvYWRlciIsci5Mb2FkUGFyc2VyPSJsb2FkLXBhcnNlciIsci5SZXNvbHZlUGFyc2VyPSJyZXNvbHZlLXBhcnNlciIsci5DYWNoZVBhcnNlcj0iY2FjaGUtcGFyc2VyIixyLkRldGVjdGlvblBhcnNlcj0iZGV0ZWN0aW9uLXBhcnNlciJ9KShLfHwoSz17fSkpO3ZhciBkYT1mdW5jdGlvbihyKXtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uInx8dHlwZW9mIHI9PSJvYmplY3QiJiZyLmV4dGVuc2lvbil7aWYoIXIuZXh0ZW5zaW9uKXRocm93IG5ldyBFcnJvcigiRXh0ZW5zaW9uIGNsYXNzIG11c3QgaGF2ZSBhbiBleHRlbnNpb24gb2JqZWN0Iik7dmFyIGU9dHlwZW9mIHIuZXh0ZW5zaW9uIT0ib2JqZWN0Ij97dHlwZTpyLmV4dGVuc2lvbn06ci5leHRlbnNpb247cj1IZShIZSh7fSxlKSx7cmVmOnJ9KX1pZih0eXBlb2Ygcj09Im9iamVjdCIpcj1IZSh7fSxyKTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBleHRlbnNpb24gdHlwZSIpO3JldHVybiB0eXBlb2Ygci50eXBlPT0ic3RyaW5nIiYmKHIudHlwZT1bci50eXBlXSkscn0senQ9e19hZGRIYW5kbGVyczpudWxsLF9yZW1vdmVIYW5kbGVyczpudWxsLF9xdWV1ZTp7fSxyZW1vdmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLGU9dGhpcyx0PVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRbaV09cltpXTtyZXR1cm4gdC5tYXAoZGEpLmZvckVhY2goZnVuY3Rpb24obil7bi50eXBlLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHMsbztyZXR1cm4obz0ocz1lLl9yZW1vdmVIYW5kbGVycylbYV0pPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by5jYWxsKHMsbil9KX0pLHRoaXN9LGFkZDpmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMsZT10aGlzLHQ9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdFtpXT1yW2ldO3JldHVybiB0Lm1hcChkYSkuZm9yRWFjaChmdW5jdGlvbihuKXtuLnR5cGUuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcz1lLl9hZGRIYW5kbGVycyxvPWUuX3F1ZXVlO3NbYV0/c1thXShuKToob1thXT1vW2FdfHxbXSxvW2FdLnB1c2gobikpfSl9KSx0aGlzfSxoYW5kbGU6ZnVuY3Rpb24ocixlLHQpe3ZhciBpPXRoaXMuX2FkZEhhbmRsZXJzPXRoaXMuX2FkZEhhbmRsZXJzfHx7fSxuPXRoaXMuX3JlbW92ZUhhbmRsZXJzPXRoaXMuX3JlbW92ZUhhbmRsZXJzfHx7fTtpZihpW3JdfHxuW3JdKXRocm93IG5ldyBFcnJvcigiRXh0ZW5zaW9uIHR5cGUgIityKyIgYWxyZWFkeSBoYXMgYSBoYW5kbGVyIik7aVtyXT1lLG5bcl09dDt2YXIgYT10aGlzLl9xdWV1ZTtyZXR1cm4gYVtyXSYmKGFbcl0uZm9yRWFjaChmdW5jdGlvbihzKXtyZXR1cm4gZShzKX0pLGRlbGV0ZSBhW3JdKSx0aGlzfSxoYW5kbGVCeU1hcDpmdW5jdGlvbihyLGUpe3JldHVybiB0aGlzLmhhbmRsZShyLGZ1bmN0aW9uKHQpe2VbdC5uYW1lXT10LnJlZn0sZnVuY3Rpb24odCl7ZGVsZXRlIGVbdC5uYW1lXX0pfSxoYW5kbGVCeUxpc3Q6ZnVuY3Rpb24ocixlKXtyZXR1cm4gdGhpcy5oYW5kbGUocixmdW5jdGlvbih0KXt2YXIgaSxuO2UucHVzaCh0LnJlZikscj09PUsuTG9hZGVyJiYoKG49KGk9dC5yZWYpLmFkZCk9PT1udWxsfHxuPT09dm9pZCAwfHxuLmNhbGwoaSkpfSxmdW5jdGlvbih0KXt2YXIgaT1lLmluZGV4T2YodC5yZWYpO2khPT0tMSYmZS5zcGxpY2UoaSwxKX0pfX07dmFyIHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLml0ZW1zPVtdLHRoaXMuX25hbWU9ZSx0aGlzLl9hbGlhc0NvdW50PTB9cmV0dXJuIHIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSx0LGksbixhLHMsbyxoKXtpZihhcmd1bWVudHMubGVuZ3RoPjgpdGhyb3cgbmV3IEVycm9yKCJtYXggYXJndW1lbnRzIHJlYWNoZWQiKTt2YXIgdT10aGlzLGw9dS5uYW1lLGM9dS5pdGVtczt0aGlzLl9hbGlhc0NvdW50Kys7Zm9yKHZhciBmPTAsZD1jLmxlbmd0aDtmPGQ7ZisrKWNbZl1bbF0oZSx0LGksbixhLHMsbyxoKTtyZXR1cm4gYz09PXRoaXMuaXRlbXMmJnRoaXMuX2FsaWFzQ291bnQtLSx0aGlzfSxyLnByb3RvdHlwZS5lbnN1cmVOb25BbGlhc2VkSXRlbXM9ZnVuY3Rpb24oKXt0aGlzLl9hbGlhc0NvdW50PjAmJnRoaXMuaXRlbXMubGVuZ3RoPjEmJih0aGlzLl9hbGlhc0NvdW50PTAsdGhpcy5pdGVtcz10aGlzLml0ZW1zLnNsaWNlKDApKX0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiBlW3RoaXMuX25hbWVdJiYodGhpcy5lbnN1cmVOb25BbGlhc2VkSXRlbXMoKSx0aGlzLnJlbW92ZShlKSx0aGlzLml0ZW1zLnB1c2goZSkpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLml0ZW1zLmluZGV4T2YoZSk7cmV0dXJuIHQhPT0tMSYmKHRoaXMuZW5zdXJlTm9uQWxpYXNlZEl0ZW1zKCksdGhpcy5pdGVtcy5zcGxpY2UodCwxKSksdGhpc30sci5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXRlbXMuaW5kZXhPZihlKSE9PS0xfSxyLnByb3RvdHlwZS5yZW1vdmVBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVOb25BbGlhc2VkSXRlbXMoKSx0aGlzLml0ZW1zLmxlbmd0aD0wLHRoaXN9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUFsbCgpLHRoaXMuaXRlbXM9bnVsbCx0aGlzLl9uYW1lPW51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGg9PT0wfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHJ9KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeHQucHJvdG90eXBlLHtkaXNwYXRjaDp7dmFsdWU6eHQucHJvdG90eXBlLmVtaXR9LHJ1bjp7dmFsdWU6eHQucHJvdG90eXBlLmVtaXR9fSk7SS5UQVJHRVRfRlBNUz0uMDY7dmFyIFd0OyhmdW5jdGlvbihyKXtyW3IuSU5URVJBQ1RJT049NTBdPSJJTlRFUkFDVElPTiIscltyLkhJR0g9MjVdPSJISUdIIixyW3IuTk9STUFMPTBdPSJOT1JNQUwiLHJbci5MT1c9LTI1XT0iTE9XIixyW3IuVVRJTElUWT0tNTBdPSJVVElMSVRZIn0pKFd0fHwoV3Q9e30pKTt2YXIgeGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpLG4pe3Q9PT12b2lkIDAmJih0PW51bGwpLGk9PT12b2lkIDAmJihpPTApLG49PT12b2lkIDAmJihuPSExKSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGwsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuZm49ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnByaW9yaXR5PWksdGhpcy5vbmNlPW59cmV0dXJuIHIucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PW51bGwpLHRoaXMuZm49PT1lJiZ0aGlzLmNvbnRleHQ9PT10fSxyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3RoaXMuZm4mJih0aGlzLmNvbnRleHQ/dGhpcy5mbi5jYWxsKHRoaXMuY29udGV4dCxlKTp0aGlzLmZuKGUpKTt2YXIgdD10aGlzLm5leHQ7cmV0dXJuIHRoaXMub25jZSYmdGhpcy5kZXN0cm95KCEwKSx0aGlzLl9kZXN0cm95ZWQmJih0aGlzLm5leHQ9bnVsbCksdH0sci5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzPWUsZS5uZXh0JiYoZS5uZXh0LnByZXZpb3VzPXRoaXMpLHRoaXMubmV4dD1lLm5leHQsZS5uZXh0PXRoaXN9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSl7ZT09PXZvaWQgMCYmKGU9ITEpLHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmZuPW51bGwsdGhpcy5jb250ZXh0PW51bGwsdGhpcy5wcmV2aW91cyYmKHRoaXMucHJldmlvdXMubmV4dD10aGlzLm5leHQpLHRoaXMubmV4dCYmKHRoaXMubmV4dC5wcmV2aW91cz10aGlzLnByZXZpb3VzKTt2YXIgdD10aGlzLm5leHQ7cmV0dXJuIHRoaXMubmV4dD1lP251bGw6dCx0aGlzLnByZXZpb3VzPW51bGwsdH0scn0oKSxidD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt2YXIgZT10aGlzO3RoaXMuYXV0b1N0YXJ0PSExLHRoaXMuZGVsdGFUaW1lPTEsdGhpcy5sYXN0VGltZT0tMSx0aGlzLnNwZWVkPTEsdGhpcy5zdGFydGVkPSExLHRoaXMuX3JlcXVlc3RJZD1udWxsLHRoaXMuX21heEVsYXBzZWRNUz0xMDAsdGhpcy5fbWluRWxhcHNlZE1TPTAsdGhpcy5fcHJvdGVjdGVkPSExLHRoaXMuX2xhc3RGcmFtZT0tMSx0aGlzLl9oZWFkPW5ldyB4aShudWxsLG51bGwsMS8wKSx0aGlzLmRlbHRhTVM9MS9JLlRBUkdFVF9GUE1TLHRoaXMuZWxhcHNlZE1TPTEvSS5UQVJHRVRfRlBNUyx0aGlzLl90aWNrPWZ1bmN0aW9uKHQpe2UuX3JlcXVlc3RJZD1udWxsLGUuc3RhcnRlZCYmKGUudXBkYXRlKHQpLGUuc3RhcnRlZCYmZS5fcmVxdWVzdElkPT09bnVsbCYmZS5faGVhZC5uZXh0JiYoZS5fcmVxdWVzdElkPXJlcXVlc3RBbmltYXRpb25GcmFtZShlLl90aWNrKSkpfX1yZXR1cm4gci5wcm90b3R5cGUuX3JlcXVlc3RJZk5lZWRlZD1mdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RJZD09PW51bGwmJnRoaXMuX2hlYWQubmV4dCYmKHRoaXMubGFzdFRpbWU9cGVyZm9ybWFuY2Uubm93KCksdGhpcy5fbGFzdEZyYW1lPXRoaXMubGFzdFRpbWUsdGhpcy5fcmVxdWVzdElkPXJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKSl9LHIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZD1mdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RJZCE9PW51bGwmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0SWQpLHRoaXMuX3JlcXVlc3RJZD1udWxsKX0sci5wcm90b3R5cGUuX3N0YXJ0SWZQb3NzaWJsZT1mdW5jdGlvbigpe3RoaXMuc3RhcnRlZD90aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKTp0aGlzLmF1dG9TdGFydCYmdGhpcy5zdGFydCgpfSxyLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT1XdC5OT1JNQUwpLHRoaXMuX2FkZExpc3RlbmVyKG5ldyB4aShlLHQsaSkpfSxyLnByb3RvdHlwZS5hZGRPbmNlPWZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9V3QuTk9STUFMKSx0aGlzLl9hZGRMaXN0ZW5lcihuZXcgeGkoZSx0LGksITApKX0sci5wcm90b3R5cGUuX2FkZExpc3RlbmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2hlYWQubmV4dCxpPXRoaXMuX2hlYWQ7aWYoIXQpZS5jb25uZWN0KGkpO2Vsc2V7Zm9yKDt0Oyl7aWYoZS5wcmlvcml0eT50LnByaW9yaXR5KXtlLmNvbm5lY3QoaSk7YnJlYWt9aT10LHQ9dC5uZXh0fWUucHJldmlvdXN8fGUuY29ubmVjdChpKX1yZXR1cm4gdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCksdGhpc30sci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPXRoaXMuX2hlYWQubmV4dDtpOylpLm1hdGNoKGUsdCk/aT1pLmRlc3Ryb3koKTppPWkubmV4dDtyZXR1cm4gdGhpcy5faGVhZC5uZXh0fHx0aGlzLl9jYW5jZWxJZk5lZWRlZCgpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiY291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5faGVhZClyZXR1cm4gMDtmb3IodmFyIGU9MCx0PXRoaXMuX2hlYWQ7dD10Lm5leHQ7KWUrKztyZXR1cm4gZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuc3RhcnRlZHx8KHRoaXMuc3RhcnRlZD0hMCx0aGlzLl9yZXF1ZXN0SWZOZWVkZWQoKSl9LHIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0ZWQmJih0aGlzLnN0YXJ0ZWQ9ITEsdGhpcy5fY2FuY2VsSWZOZWVkZWQoKSl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJvdGVjdGVkKXt0aGlzLnN0b3AoKTtmb3IodmFyIGU9dGhpcy5faGVhZC5uZXh0O2U7KWU9ZS5kZXN0cm95KCEwKTt0aGlzLl9oZWFkLmRlc3Ryb3koKSx0aGlzLl9oZWFkPW51bGx9fSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7ZT09PXZvaWQgMCYmKGU9cGVyZm9ybWFuY2Uubm93KCkpO3ZhciB0O2lmKGU+dGhpcy5sYXN0VGltZSl7aWYodD10aGlzLmVsYXBzZWRNUz1lLXRoaXMubGFzdFRpbWUsdD50aGlzLl9tYXhFbGFwc2VkTVMmJih0PXRoaXMuX21heEVsYXBzZWRNUyksdCo9dGhpcy5zcGVlZCx0aGlzLl9taW5FbGFwc2VkTVMpe3ZhciBpPWUtdGhpcy5fbGFzdEZyYW1lfDA7aWYoaTx0aGlzLl9taW5FbGFwc2VkTVMpcmV0dXJuO3RoaXMuX2xhc3RGcmFtZT1lLWkldGhpcy5fbWluRWxhcHNlZE1TfXRoaXMuZGVsdGFNUz10LHRoaXMuZGVsdGFUaW1lPXRoaXMuZGVsdGFNUypJLlRBUkdFVF9GUE1TO2Zvcih2YXIgbj10aGlzLl9oZWFkLGE9bi5uZXh0O2E7KWE9YS5lbWl0KHRoaXMuZGVsdGFUaW1lKTtuLm5leHR8fHRoaXMuX2NhbmNlbElmTmVlZGVkKCl9ZWxzZSB0aGlzLmRlbHRhVGltZT10aGlzLmRlbHRhTVM9dGhpcy5lbGFwc2VkTVM9MDt0aGlzLmxhc3RUaW1lPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiRlBTIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDFlMy90aGlzLmVsYXBzZWRNU30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIm1pbkZQUyIse2dldDpmdW5jdGlvbigpe3JldHVybiAxZTMvdGhpcy5fbWF4RWxhcHNlZE1TfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5taW4odGhpcy5tYXhGUFMsZSksaT1NYXRoLm1pbihNYXRoLm1heCgwLHQpLzFlMyxJLlRBUkdFVF9GUE1TKTt0aGlzLl9tYXhFbGFwc2VkTVM9MS9pfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibWF4RlBTIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkVsYXBzZWRNUz9NYXRoLnJvdW5kKDFlMy90aGlzLl9taW5FbGFwc2VkTVMpOjB9LHNldDpmdW5jdGlvbihlKXtpZihlPT09MCl0aGlzLl9taW5FbGFwc2VkTVM9MDtlbHNle3ZhciB0PU1hdGgubWF4KHRoaXMubWluRlBTLGUpO3RoaXMuX21pbkVsYXBzZWRNUz0xLyh0LzFlMyl9fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJzaGFyZWQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighci5fc2hhcmVkKXt2YXIgZT1yLl9zaGFyZWQ9bmV3IHI7ZS5hdXRvU3RhcnQ9ITAsZS5fcHJvdGVjdGVkPSEwfXJldHVybiByLl9zaGFyZWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInN5c3RlbSIse2dldDpmdW5jdGlvbigpe2lmKCFyLl9zeXN0ZW0pe3ZhciBlPXIuX3N5c3RlbT1uZXcgcjtlLmF1dG9TdGFydD0hMCxlLl9wcm90ZWN0ZWQ9ITB9cmV0dXJuIHIuX3N5c3RlbX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyfSgpLFVsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe31yZXR1cm4gci5pbml0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT1PYmplY3QuYXNzaWduKHthdXRvU3RhcnQ6ITAsc2hhcmVkVGlja2VyOiExfSxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidGlja2VyIix7c2V0OmZ1bmN0aW9uKGkpe3RoaXMuX3RpY2tlciYmdGhpcy5fdGlja2VyLnJlbW92ZSh0aGlzLnJlbmRlcix0aGlzKSx0aGlzLl90aWNrZXI9aSxpJiZpLmFkZCh0aGlzLnJlbmRlcix0aGlzLFd0LkxPVyl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrZXJ9fSksdGhpcy5zdG9wPWZ1bmN0aW9uKCl7dC5fdGlja2VyLnN0b3AoKX0sdGhpcy5zdGFydD1mdW5jdGlvbigpe3QuX3RpY2tlci5zdGFydCgpfSx0aGlzLl90aWNrZXI9bnVsbCx0aGlzLnRpY2tlcj1lLnNoYXJlZFRpY2tlcj9idC5zaGFyZWQ6bmV3IGJ0LGUuYXV0b1N0YXJ0JiZ0aGlzLnN0YXJ0KCl9LHIuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX3RpY2tlcil7dmFyIGU9dGhpcy5fdGlja2VyO3RoaXMudGlja2VyPW51bGwsZS5kZXN0cm95KCl9fSxyLmV4dGVuc2lvbj1LLkFwcGxpY2F0aW9uLHJ9KCk7SS5QUkVGRVJfRU5WPUd0LmFueT9qdC5XRUJHTDpqdC5XRUJHTDIsSS5TVFJJQ1RfVEVYVFVSRV9DQUNIRT0hMTt2YXIgYmk9W107ZnVuY3Rpb24gcGEocixlKXtpZighcilyZXR1cm4gbnVsbDt2YXIgdD0iIjtpZih0eXBlb2Ygcj09InN0cmluZyIpe3ZhciBpPS9cLihcd3szLDR9KSg/OiR8XD98IykvaS5leGVjKHIpO2kmJih0PWlbMV0udG9Mb3dlckNhc2UoKSl9Zm9yKHZhciBuPWJpLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT1iaVtuXTtpZihhLnRlc3QmJmEudGVzdChyLHQpKXJldHVybiBuZXcgYShyLGUpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNvdXJjZSB0eXBlIHRvIGF1dG8tZGV0ZWN0IFJlc291cmNlIil9dmFyIFRpPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIFRpPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGkpe3QuX19wcm90b19fPWl9fHxmdW5jdGlvbih0LGkpe2Zvcih2YXIgbiBpbiBpKWkuaGFzT3duUHJvcGVydHkobikmJih0W25dPWlbbl0pfSxUaShyLGUpfTtmdW5jdGlvbiBRKHIsZSl7VGkocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX12YXIgRWk9ZnVuY3Rpb24oKXtyZXR1cm4gRWk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cyxpLG49MSxhPWFyZ3VtZW50cy5sZW5ndGg7bjxhO24rKyl7aT10W25dO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYoZVtzXT1pW3NdKX1yZXR1cm4gZX0sRWkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBHbChyLGUpe3ZhciB0PXt9O2Zvcih2YXIgaSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGkpJiZlLmluZGV4T2YoaSk8MCYmKHRbaV09cltpXSk7aWYociE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBuPTAsaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpO248aS5sZW5ndGg7bisrKWUuaW5kZXhPZihpW25dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocixpW25dKSYmKHRbaVtuXV09cltpW25dXSk7cmV0dXJuIHR9dmFyIGplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2U9PT12b2lkIDAmJihlPTApLHQ9PT12b2lkIDAmJih0PTApLHRoaXMuX3dpZHRoPWUsdGhpcy5faGVpZ2h0PXQsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5pbnRlcm5hbD0hMSx0aGlzLm9uUmVzaXplPW5ldyB4dCgic2V0UmVhbFNpemUiKSx0aGlzLm9uVXBkYXRlPW5ldyB4dCgidXBkYXRlIiksdGhpcy5vbkVycm9yPW5ldyB4dCgib25FcnJvciIpfXJldHVybiByLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUpe3RoaXMub25SZXNpemUuYWRkKGUpLHRoaXMub25VcGRhdGUuYWRkKGUpLHRoaXMub25FcnJvci5hZGQoZSksKHRoaXMuX3dpZHRofHx0aGlzLl9oZWlnaHQpJiZ0aGlzLm9uUmVzaXplLmVtaXQodGhpcy5fd2lkdGgsdGhpcy5faGVpZ2h0KX0sci5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKGUpe3RoaXMub25SZXNpemUucmVtb3ZlKGUpLHRoaXMub25VcGRhdGUucmVtb3ZlKGUpLHRoaXMub25FcnJvci5yZW1vdmUoZSl9LHIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHQpeyhlIT09dGhpcy5fd2lkdGh8fHQhPT10aGlzLl9oZWlnaHQpJiYodGhpcy5fd2lkdGg9ZSx0aGlzLl9oZWlnaHQ9dCx0aGlzLm9uUmVzaXplLmVtaXQoZSx0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3dpZHRoJiYhIXRoaXMuX2hlaWdodH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZHx8dGhpcy5vblVwZGF0ZS5lbWl0KCl9LHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpZHRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlaWdodH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS5zdHlsZT1mdW5jdGlvbihlLHQsaSl7cmV0dXJuITF9LHIucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZHx8KHRoaXMuZGVzdHJveWVkPSEwLHRoaXMuZGlzcG9zZSgpLHRoaXMub25FcnJvci5yZW1vdmVBbGwoKSx0aGlzLm9uRXJyb3I9bnVsbCx0aGlzLm9uUmVzaXplLnJlbW92ZUFsbCgpLHRoaXMub25SZXNpemU9bnVsbCx0aGlzLm9uVXBkYXRlLnJlbW92ZUFsbCgpLHRoaXMub25VcGRhdGU9bnVsbCl9LHIudGVzdD1mdW5jdGlvbihlLHQpe3JldHVybiExfSxyfSgpLFZlPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49dGhpcyxhPWl8fHt9LHM9YS53aWR0aCxvPWEuaGVpZ2h0O2lmKCFzfHwhbyl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlclJlc291cmNlIHdpZHRoIG9yIGhlaWdodCBpbnZhbGlkIik7cmV0dXJuIG49ci5jYWxsKHRoaXMscyxvKXx8dGhpcyxuLmRhdGE9dCxufXJldHVybiBlLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCxpLG4pe3ZhciBhPXQuZ2w7YS5waXhlbFN0b3JlaShhLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCxpLmFscGhhTW9kZT09PUF0LlVOUEFDSyk7dmFyIHM9aS5yZWFsV2lkdGgsbz1pLnJlYWxIZWlnaHQ7cmV0dXJuIG4ud2lkdGg9PT1zJiZuLmhlaWdodD09PW8/YS50ZXhTdWJJbWFnZTJEKGkudGFyZ2V0LDAsMCwwLHMsbyxpLmZvcm1hdCxuLnR5cGUsdGhpcy5kYXRhKToobi53aWR0aD1zLG4uaGVpZ2h0PW8sYS50ZXhJbWFnZTJEKGkudGFyZ2V0LDAsbi5pbnRlcm5hbEZvcm1hdCxzLG8sMCxpLmZvcm1hdCxuLnR5cGUsdGhpcy5kYXRhKSksITB9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9bnVsbH0sZS50ZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fSxlfShqZSksa2w9e3NjYWxlTW9kZTpCdC5ORUFSRVNULGZvcm1hdDpSLlJHQkEsYWxwaGFNb2RlOkF0Lk5QTX0saj1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0LGkpe3Q9PT12b2lkIDAmJih0PW51bGwpLGk9PT12b2lkIDAmJihpPW51bGwpO3ZhciBuPXIuY2FsbCh0aGlzKXx8dGhpcztpPWl8fHt9O3ZhciBhPWkuYWxwaGFNb2RlLHM9aS5taXBtYXAsbz1pLmFuaXNvdHJvcGljTGV2ZWwsaD1pLnNjYWxlTW9kZSx1PWkud2lkdGgsbD1pLmhlaWdodCxjPWkud3JhcE1vZGUsZj1pLmZvcm1hdCxkPWkudHlwZSxwPWkudGFyZ2V0LHY9aS5yZXNvbHV0aW9uLF89aS5yZXNvdXJjZU9wdGlvbnM7cmV0dXJuIHQmJiEodCBpbnN0YW5jZW9mIGplKSYmKHQ9cGEodCxfKSx0LmludGVybmFsPSEwKSxuLnJlc29sdXRpb249dnx8SS5SRVNPTFVUSU9OLG4ud2lkdGg9TWF0aC5yb3VuZCgodXx8MCkqbi5yZXNvbHV0aW9uKS9uLnJlc29sdXRpb24sbi5oZWlnaHQ9TWF0aC5yb3VuZCgobHx8MCkqbi5yZXNvbHV0aW9uKS9uLnJlc29sdXRpb24sbi5fbWlwbWFwPXMhPT12b2lkIDA/czpJLk1JUE1BUF9URVhUVVJFUyxuLmFuaXNvdHJvcGljTGV2ZWw9byE9PXZvaWQgMD9vOkkuQU5JU09UUk9QSUNfTEVWRUwsbi5fd3JhcE1vZGU9Y3x8SS5XUkFQX01PREUsbi5fc2NhbGVNb2RlPWghPT12b2lkIDA/aDpJLlNDQUxFX01PREUsbi5mb3JtYXQ9Znx8Ui5SR0JBLG4udHlwZT1kfHxGLlVOU0lHTkVEX0JZVEUsbi50YXJnZXQ9cHx8aWUuVEVYVFVSRV8yRCxuLmFscGhhTW9kZT1hIT09dm9pZCAwP2E6QXQuVU5QQUNLLG4udWlkPWFlKCksbi50b3VjaGVkPTAsbi5pc1Bvd2VyT2ZUd289ITEsbi5fcmVmcmVzaFBPVCgpLG4uX2dsVGV4dHVyZXM9e30sbi5kaXJ0eUlkPTAsbi5kaXJ0eVN0eWxlSWQ9MCxuLmNhY2hlSWQ9bnVsbCxuLnZhbGlkPXU+MCYmbD4wLG4udGV4dHVyZUNhY2hlSWRzPVtdLG4uZGVzdHJveWVkPSExLG4ucmVzb3VyY2U9bnVsbCxuLl9iYXRjaEVuYWJsZWQ9MCxuLl9iYXRjaExvY2F0aW9uPTAsbi5wYXJlbnRUZXh0dXJlQXJyYXk9bnVsbCxuLnNldFJlc291cmNlKHQpLG59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVhbFdpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQodGhpcy53aWR0aCp0aGlzLnJlc29sdXRpb24pfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVhbEhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0KnRoaXMucmVzb2x1dGlvbil9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtaXBtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWlwbWFwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWlwbWFwIT09dCYmKHRoaXMuX21pcG1hcD10LHRoaXMuZGlydHlTdHlsZUlkKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2NhbGVNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlTW9kZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3NjYWxlTW9kZSE9PXQmJih0aGlzLl9zY2FsZU1vZGU9dCx0aGlzLmRpcnR5U3R5bGVJZCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIndyYXBNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBNb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fd3JhcE1vZGUhPT10JiYodGhpcy5fd3JhcE1vZGU9dCx0aGlzLmRpcnR5U3R5bGVJZCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGkpe3ZhciBuO3JldHVybiB0IT09dm9pZCAwJiZ0IT09dGhpcy5zY2FsZU1vZGUmJih0aGlzLnNjYWxlTW9kZT10LG49ITApLGkhPT12b2lkIDAmJmkhPT10aGlzLm1pcG1hcCYmKHRoaXMubWlwbWFwPWksbj0hMCksbiYmdGhpcy5kaXJ0eVN0eWxlSWQrKyx0aGlzfSxlLnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKHQsaSxuKXtyZXR1cm4gbj1ufHx0aGlzLnJlc29sdXRpb24sdGhpcy5zZXRSZWFsU2l6ZSh0Km4saSpuLG4pfSxlLnByb3RvdHlwZS5zZXRSZWFsU2l6ZT1mdW5jdGlvbih0LGksbil7cmV0dXJuIHRoaXMucmVzb2x1dGlvbj1ufHx0aGlzLnJlc29sdXRpb24sdGhpcy53aWR0aD1NYXRoLnJvdW5kKHQpL3RoaXMucmVzb2x1dGlvbix0aGlzLmhlaWdodD1NYXRoLnJvdW5kKGkpL3RoaXMucmVzb2x1dGlvbix0aGlzLl9yZWZyZXNoUE9UKCksdGhpcy51cGRhdGUoKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVmcmVzaFBPVD1mdW5jdGlvbigpe3RoaXMuaXNQb3dlck9mVHdvPWFhKHRoaXMucmVhbFdpZHRoKSYmYWEodGhpcy5yZWFsSGVpZ2h0KX0sZS5wcm90b3R5cGUuc2V0UmVzb2x1dGlvbj1mdW5jdGlvbih0KXt2YXIgaT10aGlzLnJlc29sdXRpb247cmV0dXJuIGk9PT10P3RoaXM6KHRoaXMucmVzb2x1dGlvbj10LHRoaXMudmFsaWQmJih0aGlzLndpZHRoPU1hdGgucm91bmQodGhpcy53aWR0aCppKS90LHRoaXMuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5oZWlnaHQqaSkvdCx0aGlzLmVtaXQoInVwZGF0ZSIsdGhpcykpLHRoaXMuX3JlZnJlc2hQT1QoKSx0aGlzKX0sZS5wcm90b3R5cGUuc2V0UmVzb3VyY2U9ZnVuY3Rpb24odCl7aWYodGhpcy5yZXNvdXJjZT09PXQpcmV0dXJuIHRoaXM7aWYodGhpcy5yZXNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoIlJlc291cmNlIGNhbiBiZSBzZXQgb25seSBvbmNlIik7cmV0dXJuIHQuYmluZCh0aGlzKSx0aGlzLnJlc291cmNlPXQsdGhpc30sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy52YWxpZD8odGhpcy5kaXJ0eUlkKyssdGhpcy5kaXJ0eVN0eWxlSWQrKyx0aGlzLmVtaXQoInVwZGF0ZSIsdGhpcykpOnRoaXMud2lkdGg+MCYmdGhpcy5oZWlnaHQ+MCYmKHRoaXMudmFsaWQ9ITAsdGhpcy5lbWl0KCJsb2FkZWQiLHRoaXMpLHRoaXMuZW1pdCgidXBkYXRlIix0aGlzKSl9LGUucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5lbWl0KCJlcnJvciIsdGhpcyx0KX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVzb3VyY2UmJih0aGlzLnJlc291cmNlLnVuYmluZCh0aGlzKSx0aGlzLnJlc291cmNlLmludGVybmFsJiZ0aGlzLnJlc291cmNlLmRlc3Ryb3koKSx0aGlzLnJlc291cmNlPW51bGwpLHRoaXMuY2FjaGVJZCYmKGRlbGV0ZSBzZVt0aGlzLmNhY2hlSWRdLGRlbGV0ZSBZdFt0aGlzLmNhY2hlSWRdLHRoaXMuY2FjaGVJZD1udWxsKSx0aGlzLmRpc3Bvc2UoKSxlLnJlbW92ZUZyb21DYWNoZSh0aGlzKSx0aGlzLnRleHR1cmVDYWNoZUlkcz1udWxsLHRoaXMuZGVzdHJveWVkPSEwfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJkaXNwb3NlIix0aGlzKX0sZS5wcm90b3R5cGUuY2FzdFRvQmFzZVRleHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5mcm9tPWZ1bmN0aW9uKHQsaSxuKXtuPT09dm9pZCAwJiYobj1JLlNUUklDVF9URVhUVVJFX0NBQ0hFKTt2YXIgYT10eXBlb2YgdD09InN0cmluZyIscz1udWxsO2lmKGEpcz10O2Vsc2V7aWYoIXQuX3BpeGlJZCl7dmFyIG89aSYmaS5waXhpSWRQcmVmaXh8fCJwaXhpaWQiO3QuX3BpeGlJZD1vKyJfIithZSgpfXM9dC5fcGl4aUlkfXZhciBoPXNlW3NdO2lmKGEmJm4mJiFoKXRocm93IG5ldyBFcnJvcignVGhlIGNhY2hlSWQgIicrcysnIiBkb2VzIG5vdCBleGlzdCBpbiBCYXNlVGV4dHVyZUNhY2hlLicpO3JldHVybiBofHwoaD1uZXcgZSh0LGkpLGguY2FjaGVJZD1zLGUuYWRkVG9DYWNoZShoLHMpKSxofSxlLmZyb21CdWZmZXI9ZnVuY3Rpb24odCxpLG4sYSl7dD10fHxuZXcgRmxvYXQzMkFycmF5KGkqbio0KTt2YXIgcz1uZXcgVmUodCx7d2lkdGg6aSxoZWlnaHQ6bn0pLG89dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9GLkZMT0FUOkYuVU5TSUdORURfQllURTtyZXR1cm4gbmV3IGUocyxPYmplY3QuYXNzaWduKHt9LGtsLGF8fHt3aWR0aDppLGhlaWdodDpuLHR5cGU6b30pKX0sZS5hZGRUb0NhY2hlPWZ1bmN0aW9uKHQsaSl7aSYmKHQudGV4dHVyZUNhY2hlSWRzLmluZGV4T2YoaSk9PT0tMSYmdC50ZXh0dXJlQ2FjaGVJZHMucHVzaChpKSxzZVtpXSYmY29uc29sZS53YXJuKCJCYXNlVGV4dHVyZSBhZGRlZCB0byB0aGUgY2FjaGUgd2l0aCBhbiBpZCBbIitpKyJdIHRoYXQgYWxyZWFkeSBoYWQgYW4gZW50cnkiKSxzZVtpXT10KX0sZS5yZW1vdmVGcm9tQ2FjaGU9ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgaT1zZVt0XTtpZihpKXt2YXIgbj1pLnRleHR1cmVDYWNoZUlkcy5pbmRleE9mKHQpO3JldHVybiBuPi0xJiZpLnRleHR1cmVDYWNoZUlkcy5zcGxpY2UobiwxKSxkZWxldGUgc2VbdF0saX19ZWxzZSBpZih0JiZ0LnRleHR1cmVDYWNoZUlkcyl7Zm9yKHZhciBhPTA7YTx0LnRleHR1cmVDYWNoZUlkcy5sZW5ndGg7KythKWRlbGV0ZSBzZVt0LnRleHR1cmVDYWNoZUlkc1thXV07cmV0dXJuIHQudGV4dHVyZUNhY2hlSWRzLmxlbmd0aD0wLHR9cmV0dXJuIG51bGx9LGUuX2dsb2JhbEJhdGNoPTAsZX0oQmUpLHZhPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49dGhpcyxhPWl8fHt9LHM9YS53aWR0aCxvPWEuaGVpZ2h0O249ci5jYWxsKHRoaXMscyxvKXx8dGhpcyxuLml0ZW1zPVtdLG4uaXRlbURpcnR5SWRzPVtdO2Zvcih2YXIgaD0wO2g8dDtoKyspe3ZhciB1PW5ldyBqO24uaXRlbXMucHVzaCh1KSxuLml0ZW1EaXJ0eUlkcy5wdXNoKC0yKX1yZXR1cm4gbi5sZW5ndGg9dCxuLl9sb2FkPW51bGwsbi5iYXNlVGV4dHVyZT1udWxsLG59cmV0dXJuIGUucHJvdG90eXBlLmluaXRGcm9tQXJyYXk9ZnVuY3Rpb24odCxpKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl0W25dJiYodFtuXS5jYXN0VG9CYXNlVGV4dHVyZT90aGlzLmFkZEJhc2VUZXh0dXJlQXQodFtuXS5jYXN0VG9CYXNlVGV4dHVyZSgpLG4pOnRbbl1pbnN0YW5jZW9mIGplP3RoaXMuYWRkUmVzb3VyY2VBdCh0W25dLG4pOnRoaXMuYWRkUmVzb3VyY2VBdChwYSh0W25dLGkpLG4pKX0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGk9dGhpcy5sZW5ndGg7dDxpO3QrKyl0aGlzLml0ZW1zW3RdLmRlc3Ryb3koKTt0aGlzLml0ZW1zPW51bGwsdGhpcy5pdGVtRGlydHlJZHM9bnVsbCx0aGlzLl9sb2FkPW51bGx9LGUucHJvdG90eXBlLmFkZFJlc291cmNlQXQ9ZnVuY3Rpb24odCxpKXtpZighdGhpcy5pdGVtc1tpXSl0aHJvdyBuZXcgRXJyb3IoIkluZGV4ICIraSsiIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gdC52YWxpZCYmIXRoaXMudmFsaWQmJnRoaXMucmVzaXplKHQud2lkdGgsdC5oZWlnaHQpLHRoaXMuaXRlbXNbaV0uc2V0UmVzb3VyY2UodCksdGhpc30sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtpZih0aGlzLmJhc2VUZXh0dXJlIT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgb25lIGJhc2UgdGV4dHVyZSBwZXIgVGV4dHVyZUFycmF5IGlzIGFsbG93ZWQiKTtyLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcyx0KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLml0ZW1zW2ldLnBhcmVudFRleHR1cmVBcnJheT10LHRoaXMuaXRlbXNbaV0ub24oInVwZGF0ZSIsdC51cGRhdGUsdCl9LGUucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbih0KXtyLnByb3RvdHlwZS51bmJpbmQuY2FsbCh0aGlzLHQpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMuaXRlbXNbaV0ucGFyZW50VGV4dHVyZUFycmF5PW51bGwsdGhpcy5pdGVtc1tpXS5vZmYoInVwZGF0ZSIsdC51cGRhdGUsdCl9LGUucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX2xvYWQpcmV0dXJuIHRoaXMuX2xvYWQ7dmFyIGk9dGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVzb3VyY2V9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSxuPWkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxvYWQoKX0pO3JldHVybiB0aGlzLl9sb2FkPVByb21pc2UuYWxsKG4pLnRoZW4oZnVuY3Rpb24oKXt2YXIgYT10Lml0ZW1zWzBdLHM9YS5yZWFsV2lkdGgsbz1hLnJlYWxIZWlnaHQ7cmV0dXJuIHQucmVzaXplKHMsbyksUHJvbWlzZS5yZXNvbHZlKHQpfSksdGhpcy5fbG9hZH0sZX0oamUpLFhsPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49dGhpcyxhPWl8fHt9LHM9YS53aWR0aCxvPWEuaGVpZ2h0LGgsdTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaD10LHU9dC5sZW5ndGgpOnU9dCxuPXIuY2FsbCh0aGlzLHUse3dpZHRoOnMsaGVpZ2h0Om99KXx8dGhpcyxoJiZuLmluaXRGcm9tQXJyYXkoaCxpKSxufXJldHVybiBlLnByb3RvdHlwZS5hZGRCYXNlVGV4dHVyZUF0PWZ1bmN0aW9uKHQsaSl7aWYodC5yZXNvdXJjZSl0aGlzLmFkZFJlc291cmNlQXQodC5yZXNvdXJjZSxpKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQXJyYXlSZXNvdXJjZSBkb2VzIG5vdCBzdXBwb3J0IFJlbmRlclRleHR1cmUiKTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtyLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcyx0KSx0LnRhcmdldD1pZS5URVhUVVJFXzJEX0FSUkFZfSxlLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCxpLG4pe3ZhciBhPXRoaXMscz1hLmxlbmd0aCxvPWEuaXRlbURpcnR5SWRzLGg9YS5pdGVtcyx1PXQuZ2w7bi5kaXJ0eUlkPDAmJnUudGV4SW1hZ2UzRCh1LlRFWFRVUkVfMkRfQVJSQVksMCxuLmludGVybmFsRm9ybWF0LHRoaXMuX3dpZHRoLHRoaXMuX2hlaWdodCxzLDAsaS5mb3JtYXQsbi50eXBlLG51bGwpO2Zvcih2YXIgbD0wO2w8cztsKyspe3ZhciBjPWhbbF07b1tsXTxjLmRpcnR5SWQmJihvW2xdPWMuZGlydHlJZCxjLnZhbGlkJiZ1LnRleFN1YkltYWdlM0QodS5URVhUVVJFXzJEX0FSUkFZLDAsMCwwLGwsYy5yZXNvdXJjZS53aWR0aCxjLnJlc291cmNlLmhlaWdodCwxLGkuZm9ybWF0LG4udHlwZSxjLnJlc291cmNlLnNvdXJjZSkpfXJldHVybiEwfSxlfSh2YSksWnQ9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCl7dmFyIGk9dGhpcyxuPXQsYT1uLm5hdHVyYWxXaWR0aHx8bi52aWRlb1dpZHRofHxuLndpZHRoLHM9bi5uYXR1cmFsSGVpZ2h0fHxuLnZpZGVvSGVpZ2h0fHxuLmhlaWdodDtyZXR1cm4gaT1yLmNhbGwodGhpcyxhLHMpfHx0aGlzLGkuc291cmNlPXQsaS5ub1N1YkltYWdlPSExLGl9cmV0dXJuIGUuY3Jvc3NPcmlnaW49ZnVuY3Rpb24odCxpLG4pe249PT12b2lkIDAmJmkuaW5kZXhPZigiZGF0YToiKSE9PTA/dC5jcm9zc09yaWdpbj1JbChpKTpuIT09ITEmJih0LmNyb3NzT3JpZ2luPXR5cGVvZiBuPT0ic3RyaW5nIj9uOiJhbm9ueW1vdXMiKX0sZS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsaSxuLGEpe3ZhciBzPXQuZ2wsbz1pLnJlYWxXaWR0aCxoPWkucmVhbEhlaWdodDtpZihhPWF8fHRoaXMuc291cmNlLGEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KXtpZighYS5jb21wbGV0ZXx8YS5uYXR1cmFsV2lkdGg9PT0wKXJldHVybiExfWVsc2UgaWYoYSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQmJmEucmVhZHlTdGF0ZTw9MSlyZXR1cm4hMTtyZXR1cm4gcy5waXhlbFN0b3JlaShzLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCxpLmFscGhhTW9kZT09PUF0LlVOUEFDSyksIXRoaXMubm9TdWJJbWFnZSYmaS50YXJnZXQ9PT1zLlRFWFRVUkVfMkQmJm4ud2lkdGg9PT1vJiZuLmhlaWdodD09PWg/cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLDAsMCxpLmZvcm1hdCxuLnR5cGUsYSk6KG4ud2lkdGg9byxuLmhlaWdodD1oLHMudGV4SW1hZ2UyRChpLnRhcmdldCwwLG4uaW50ZXJuYWxGb3JtYXQsaS5mb3JtYXQsbi50eXBlLGEpKSwhMH0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVzdHJveWVkKXt2YXIgdD10aGlzLnNvdXJjZSxpPXQubmF0dXJhbFdpZHRofHx0LnZpZGVvV2lkdGh8fHQud2lkdGgsbj10Lm5hdHVyYWxIZWlnaHR8fHQudmlkZW9IZWlnaHR8fHQuaGVpZ2h0O3RoaXMucmVzaXplKGksbiksci5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcyl9fSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zb3VyY2U9bnVsbH0sZX0oamUpLEhsPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQpe3JldHVybiByLmNhbGwodGhpcyx0KXx8dGhpc31yZXR1cm4gZS50ZXN0PWZ1bmN0aW9uKHQpe3ZhciBpPWdsb2JhbFRoaXMuT2Zmc2NyZWVuQ2FudmFzO3JldHVybiBpJiZ0IGluc3RhbmNlb2YgaT8hMDpnbG9iYWxUaGlzLkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR9LGV9KFp0KSxqbD1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0LGkpe3ZhciBuPXRoaXMsYT1pfHx7fSxzPWEud2lkdGgsbz1hLmhlaWdodCxoPWEuYXV0b0xvYWQsdT1hLmxpbmtCYXNlVGV4dHVyZTtpZih0JiZ0Lmxlbmd0aCE9PWUuU0lERVMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxlbmd0aC4gR290ICIrdC5sZW5ndGgrIiwgZXhwZWN0ZWQgNiIpO249ci5jYWxsKHRoaXMsNix7d2lkdGg6cyxoZWlnaHQ6b30pfHx0aGlzO2Zvcih2YXIgbD0wO2w8ZS5TSURFUztsKyspbi5pdGVtc1tsXS50YXJnZXQ9aWUuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YK2w7cmV0dXJuIG4ubGlua0Jhc2VUZXh0dXJlPXUhPT0hMSx0JiZuLmluaXRGcm9tQXJyYXkodCxpKSxoIT09ITEmJm4ubG9hZCgpLG59cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7ci5wcm90b3R5cGUuYmluZC5jYWxsKHRoaXMsdCksdC50YXJnZXQ9aWUuVEVYVFVSRV9DVUJFX01BUH0sZS5wcm90b3R5cGUuYWRkQmFzZVRleHR1cmVBdD1mdW5jdGlvbih0LGksbil7aWYoIXRoaXMuaXRlbXNbaV0pdGhyb3cgbmV3IEVycm9yKCJJbmRleCAiK2krIiBpcyBvdXQgb2YgYm91bmRzIik7aWYoIXRoaXMubGlua0Jhc2VUZXh0dXJlfHx0LnBhcmVudFRleHR1cmVBcnJheXx8T2JqZWN0LmtleXModC5fZ2xUZXh0dXJlcykubGVuZ3RoPjApaWYodC5yZXNvdXJjZSl0aGlzLmFkZFJlc291cmNlQXQodC5yZXNvdXJjZSxpKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ3ViZVJlc291cmNlIGRvZXMgbm90IHN1cHBvcnQgY29weWluZyBvZiByZW5kZXJUZXh0dXJlLiIpO2Vsc2UgdC50YXJnZXQ9aWUuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YK2ksdC5wYXJlbnRUZXh0dXJlQXJyYXk9dGhpcy5iYXNlVGV4dHVyZSx0aGlzLml0ZW1zW2ldPXQ7cmV0dXJuIHQudmFsaWQmJiF0aGlzLnZhbGlkJiZ0aGlzLnJlc2l6ZSh0LnJlYWxXaWR0aCx0LnJlYWxIZWlnaHQpLHRoaXMuaXRlbXNbaV09dCx0aGlzfSxlLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCxpLG4pe2Zvcih2YXIgYT10aGlzLml0ZW1EaXJ0eUlkcyxzPTA7czxlLlNJREVTO3MrKyl7dmFyIG89dGhpcy5pdGVtc1tzXTsoYVtzXTxvLmRpcnR5SWR8fG4uZGlydHlJZDxpLmRpcnR5SWQpJiYoby52YWxpZCYmby5yZXNvdXJjZT8oby5yZXNvdXJjZS51cGxvYWQodCxvLG4pLGFbc109by5kaXJ0eUlkKTphW3NdPC0xJiYodC5nbC50ZXhJbWFnZTJEKG8udGFyZ2V0LDAsbi5pbnRlcm5hbEZvcm1hdCxpLnJlYWxXaWR0aCxpLnJlYWxIZWlnaHQsMCxpLmZvcm1hdCxuLnR5cGUsbnVsbCksYVtzXT0tMSkpfXJldHVybiEwfSxlLnRlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPT09ZS5TSURFU30sZS5TSURFUz02LGV9KHZhKSxfYT1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0LGkpe3ZhciBuPXRoaXM7aWYoaT1pfHx7fSwhKHQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSl7dmFyIGE9bmV3IEltYWdlO1p0LmNyb3NzT3JpZ2luKGEsdCxpLmNyb3Nzb3JpZ2luKSxhLnNyYz10LHQ9YX1yZXR1cm4gbj1yLmNhbGwodGhpcyx0KXx8dGhpcywhdC5jb21wbGV0ZSYmbi5fd2lkdGgmJm4uX2hlaWdodCYmKG4uX3dpZHRoPTAsbi5faGVpZ2h0PTApLG4udXJsPXQuc3JjLG4uX3Byb2Nlc3M9bnVsbCxuLnByZXNlcnZlQml0bWFwPSExLG4uY3JlYXRlQml0bWFwPShpLmNyZWF0ZUJpdG1hcCE9PXZvaWQgMD9pLmNyZWF0ZUJpdG1hcDpJLkNSRUFURV9JTUFHRV9CSVRNQVApJiYhIWdsb2JhbFRoaXMuY3JlYXRlSW1hZ2VCaXRtYXAsbi5hbHBoYU1vZGU9dHlwZW9mIGkuYWxwaGFNb2RlPT0ibnVtYmVyIj9pLmFscGhhTW9kZTpudWxsLG4uYml0bWFwPW51bGwsbi5fbG9hZD1udWxsLGkuYXV0b0xvYWQhPT0hMSYmbi5sb2FkKCksbn1yZXR1cm4gZS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXt2YXIgaT10aGlzO3JldHVybiB0aGlzLl9sb2FkP3RoaXMuX2xvYWQ6KHQhPT12b2lkIDAmJih0aGlzLmNyZWF0ZUJpdG1hcD10KSx0aGlzLl9sb2FkPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sYSl7dmFyIHM9aS5zb3VyY2U7aS51cmw9cy5zcmM7dmFyIG89ZnVuY3Rpb24oKXtpLmRlc3Ryb3llZHx8KHMub25sb2FkPW51bGwscy5vbmVycm9yPW51bGwsaS5yZXNpemUocy53aWR0aCxzLmhlaWdodCksaS5fbG9hZD1udWxsLGkuY3JlYXRlQml0bWFwP24oaS5wcm9jZXNzKCkpOm4oaSkpfTtzLmNvbXBsZXRlJiZzLnNyYz9vKCk6KHMub25sb2FkPW8scy5vbmVycm9yPWZ1bmN0aW9uKGgpe2EoaCksaS5vbkVycm9yLmVtaXQoaCl9KX0pLHRoaXMuX2xvYWQpfSxlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPXRoaXMuc291cmNlO2lmKHRoaXMuX3Byb2Nlc3MhPT1udWxsKXJldHVybiB0aGlzLl9wcm9jZXNzO2lmKHRoaXMuYml0bWFwIT09bnVsbHx8IWdsb2JhbFRoaXMuY3JlYXRlSW1hZ2VCaXRtYXApcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTt2YXIgbj1nbG9iYWxUaGlzLmNyZWF0ZUltYWdlQml0bWFwLGE9IWkuY3Jvc3NPcmlnaW58fGkuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIjtyZXR1cm4gdGhpcy5fcHJvY2Vzcz1mZXRjaChpLnNyYyx7bW9kZTphPyJjb3JzIjoibm8tY29ycyJ9KS50aGVuKGZ1bmN0aW9uKHMpe3JldHVybiBzLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24ocyl7cmV0dXJuIG4ocywwLDAsaS53aWR0aCxpLmhlaWdodCx7cHJlbXVsdGlwbHlBbHBoYTp0LmFscGhhTW9kZT09PW51bGx8fHQuYWxwaGFNb2RlPT09QXQuVU5QQUNLPyJwcmVtdWx0aXBseSI6Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHMpe3JldHVybiB0LmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdCgpOih0LmJpdG1hcD1zLHQudXBkYXRlKCksdC5fcHJvY2Vzcz1udWxsLFByb21pc2UucmVzb2x2ZSh0KSl9KSx0aGlzLl9wcm9jZXNzfSxlLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCxpLG4pe2lmKHR5cGVvZiB0aGlzLmFscGhhTW9kZT09Im51bWJlciImJihpLmFscGhhTW9kZT10aGlzLmFscGhhTW9kZSksIXRoaXMuY3JlYXRlQml0bWFwKXJldHVybiByLnByb3RvdHlwZS51cGxvYWQuY2FsbCh0aGlzLHQsaSxuKTtpZighdGhpcy5iaXRtYXAmJih0aGlzLnByb2Nlc3MoKSwhdGhpcy5iaXRtYXApKXJldHVybiExO2lmKHIucHJvdG90eXBlLnVwbG9hZC5jYWxsKHRoaXMsdCxpLG4sdGhpcy5iaXRtYXApLCF0aGlzLnByZXNlcnZlQml0bWFwKXt2YXIgYT0hMCxzPWkuX2dsVGV4dHVyZXM7Zm9yKHZhciBvIGluIHMpe3ZhciBoPXNbb107aWYoaCE9PW4mJmguZGlydHlJZCE9PWkuZGlydHlJZCl7YT0hMTticmVha319YSYmKHRoaXMuYml0bWFwLmNsb3NlJiZ0aGlzLmJpdG1hcC5jbG9zZSgpLHRoaXMuYml0bWFwPW51bGwpfXJldHVybiEwfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zb3VyY2Uub25sb2FkPW51bGwsdGhpcy5zb3VyY2Uub25lcnJvcj1udWxsLHIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx0aGlzLmJpdG1hcCYmKHRoaXMuYml0bWFwLmNsb3NlKCksdGhpcy5iaXRtYXA9bnVsbCksdGhpcy5fcHJvY2Vzcz1udWxsLHRoaXMuX2xvYWQ9bnVsbH0sZS50ZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fHQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fSxlfShadCksVmw9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCxpKXt2YXIgbj10aGlzO3JldHVybiBpPWl8fHt9LG49ci5jYWxsKHRoaXMsSS5BREFQVEVSLmNyZWF0ZUNhbnZhcygpKXx8dGhpcyxuLl93aWR0aD0wLG4uX2hlaWdodD0wLG4uc3ZnPXQsbi5zY2FsZT1pLnNjYWxlfHwxLG4uX292ZXJyaWRlV2lkdGg9aS53aWR0aCxuLl9vdmVycmlkZUhlaWdodD1pLmhlaWdodCxuLl9yZXNvbHZlPW51bGwsbi5fY3Jvc3NvcmlnaW49aS5jcm9zc29yaWdpbixuLl9sb2FkPW51bGwsaS5hdXRvTG9hZCE9PSExJiZuLmxvYWQoKSxufXJldHVybiBlLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5fbG9hZD90aGlzLl9sb2FkOih0aGlzLl9sb2FkPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe2lmKHQuX3Jlc29sdmU9ZnVuY3Rpb24oKXt0LnJlc2l6ZSh0LnNvdXJjZS53aWR0aCx0LnNvdXJjZS5oZWlnaHQpLGkodCl9LGUuU1ZHX1hNTC50ZXN0KHQuc3ZnLnRyaW0oKSkpe2lmKCFidG9hKXRocm93IG5ldyBFcnJvcigiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBiYXNlNjQgY29udmVyc2lvbnMuIik7dC5zdmc9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0LnN2ZykpKX10Ll9sb2FkU3ZnKCl9KSx0aGlzLl9sb2FkKX0sZS5wcm90b3R5cGUuX2xvYWRTdmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9bmV3IEltYWdlO1p0LmNyb3NzT3JpZ2luKGksdGhpcy5zdmcsdGhpcy5fY3Jvc3NvcmlnaW4pLGkuc3JjPXRoaXMuc3ZnLGkub25lcnJvcj1mdW5jdGlvbihuKXt0Ll9yZXNvbHZlJiYoaS5vbmVycm9yPW51bGwsdC5vbkVycm9yLmVtaXQobikpfSxpLm9ubG9hZD1mdW5jdGlvbigpe2lmKHQuX3Jlc29sdmUpe3ZhciBuPWkud2lkdGgsYT1pLmhlaWdodDtpZighbnx8IWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgU1ZHIGltYWdlIG11c3QgaGF2ZSB3aWR0aCBhbmQgaGVpZ2h0IGRlZmluZWQgKGluIHBpeGVscyksIGNhbnZhcyBBUEkgbmVlZHMgdGhlbS4iKTt2YXIgcz1uKnQuc2NhbGUsbz1hKnQuc2NhbGU7KHQuX292ZXJyaWRlV2lkdGh8fHQuX292ZXJyaWRlSGVpZ2h0KSYmKHM9dC5fb3ZlcnJpZGVXaWR0aHx8dC5fb3ZlcnJpZGVIZWlnaHQvYSpuLG89dC5fb3ZlcnJpZGVIZWlnaHR8fHQuX292ZXJyaWRlV2lkdGgvbiphKSxzPU1hdGgucm91bmQocyksbz1NYXRoLnJvdW5kKG8pO3ZhciBoPXQuc291cmNlO2gud2lkdGg9cyxoLmhlaWdodD1vLGguX3BpeGlJZD0iY2FudmFzXyIrYWUoKSxoLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGksMCwwLG4sYSwwLDAscyxvKSx0Ll9yZXNvbHZlKCksdC5fcmVzb2x2ZT1udWxsfX19LGUuZ2V0U2l6ZT1mdW5jdGlvbih0KXt2YXIgaT1lLlNWR19TSVpFLmV4ZWModCksbj17fTtyZXR1cm4gaSYmKG5baVsxXV09TWF0aC5yb3VuZChwYXJzZUZsb2F0KGlbM10pKSxuW2lbNV1dPU1hdGgucm91bmQocGFyc2VGbG9hdChpWzddKSkpLG59LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fcmVzb2x2ZT1udWxsLHRoaXMuX2Nyb3Nzb3JpZ2luPW51bGx9LGUudGVzdD1mdW5jdGlvbih0LGkpe3JldHVybiBpPT09InN2ZyJ8fHR5cGVvZiB0PT0ic3RyaW5nIiYmdC5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3N2Zyt4bWwiKXx8dHlwZW9mIHQ9PSJzdHJpbmciJiZlLlNWR19YTUwudGVzdCh0KX0sZS5TVkdfWE1MPS9eKDxcP3htbFteP10rXD8+KT9ccyooPCEtLVteKC0tPildKi0tPik/XHMqXDxzdmcvbSxlLlNWR19TSVpFPS88c3ZnW14+XSooPzpccyh3aWR0aHxoZWlnaHQpPSgnfCIpKFxkKig/OlwuXGQrKT8pKD86cHgpPygnfCIpKVtePl0qKD86XHMod2lkdGh8aGVpZ2h0KT0oJ3wiKShcZCooPzpcLlxkKyk/KSg/OnB4KT8oJ3wiKSlbXj5dKj4vaSxlfShadCksWWw9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCxpKXt2YXIgbj10aGlzO2lmKGk9aXx8e30sISh0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7YS5zZXRBdHRyaWJ1dGUoInByZWxvYWQiLCJhdXRvIiksYS5zZXRBdHRyaWJ1dGUoIndlYmtpdC1wbGF5c2lubGluZSIsIiIpLGEuc2V0QXR0cmlidXRlKCJwbGF5c2lubGluZSIsIiIpLHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9W3RdKTt2YXIgcz10WzBdLnNyY3x8dFswXTtadC5jcm9zc09yaWdpbihhLHMsaS5jcm9zc29yaWdpbik7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpLHU9dFtvXSxsPXUuc3JjLGM9dS5taW1lO2w9bHx8dFtvXTt2YXIgZj1sLnNwbGl0KCI/Iikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpLGQ9Zi5zbGljZShmLmxhc3RJbmRleE9mKCIuIikrMSk7Yz1jfHxlLk1JTUVfVFlQRVNbZF18fCJ2aWRlby8iK2QsaC5zcmM9bCxoLnR5cGU9YyxhLmFwcGVuZENoaWxkKGgpfXQ9YX1yZXR1cm4gbj1yLmNhbGwodGhpcyx0KXx8dGhpcyxuLm5vU3ViSW1hZ2U9ITAsbi5fYXV0b1VwZGF0ZT0hMCxuLl9pc0Nvbm5lY3RlZFRvVGlja2VyPSExLG4uX3VwZGF0ZUZQUz1pLnVwZGF0ZUZQU3x8MCxuLl9tc1RvTmV4dFVwZGF0ZT0wLG4uYXV0b1BsYXk9aS5hdXRvUGxheSE9PSExLG4uX2xvYWQ9bnVsbCxuLl9yZXNvbHZlPW51bGwsbi5fb25DYW5QbGF5PW4uX29uQ2FuUGxheS5iaW5kKG4pLG4uX29uRXJyb3I9bi5fb25FcnJvci5iaW5kKG4pLGkuYXV0b0xvYWQhPT0hMSYmbi5sb2FkKCksbn1yZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmRlc3Ryb3llZCl7dmFyIGk9YnQuc2hhcmVkLmVsYXBzZWRNUyp0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGU7dGhpcy5fbXNUb05leHRVcGRhdGU9TWF0aC5mbG9vcih0aGlzLl9tc1RvTmV4dFVwZGF0ZS1pKSwoIXRoaXMuX3VwZGF0ZUZQU3x8dGhpcy5fbXNUb05leHRVcGRhdGU8PTApJiYoci5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcyksdGhpcy5fbXNUb05leHRVcGRhdGU9dGhpcy5fdXBkYXRlRlBTP01hdGguZmxvb3IoMWUzL3RoaXMuX3VwZGF0ZUZQUyk6MCl9fSxlLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9sb2FkKXJldHVybiB0aGlzLl9sb2FkO3ZhciBpPXRoaXMuc291cmNlO3JldHVybihpLnJlYWR5U3RhdGU9PT1pLkhBVkVfRU5PVUdIX0RBVEF8fGkucmVhZHlTdGF0ZT09PWkuSEFWRV9GVVRVUkVfREFUQSkmJmkud2lkdGgmJmkuaGVpZ2h0JiYoaS5jb21wbGV0ZT0hMCksaS5hZGRFdmVudExpc3RlbmVyKCJwbGF5Iix0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKSxpLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIix0aGlzLl9vblBsYXlTdG9wLmJpbmQodGhpcykpLHRoaXMuX2lzU291cmNlUmVhZHkoKT90aGlzLl9vbkNhblBsYXkoKTooaS5hZGRFdmVudExpc3RlbmVyKCJjYW5wbGF5Iix0aGlzLl9vbkNhblBsYXkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2FucGxheXRocm91Z2giLHRoaXMuX29uQ2FuUGxheSksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5fb25FcnJvciwhMCkpLHRoaXMuX2xvYWQ9bmV3IFByb21pc2UoZnVuY3Rpb24obil7dC52YWxpZD9uKHQpOih0Ll9yZXNvbHZlPW4saS5sb2FkKCkpfSksdGhpcy5fbG9hZH0sZS5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuX29uRXJyb3IsITApLHRoaXMub25FcnJvci5lbWl0KHQpfSxlLnByb3RvdHlwZS5faXNTb3VyY2VQbGF5aW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zb3VyY2U7cmV0dXJuIXQucGF1c2VkJiYhdC5lbmRlZCYmdGhpcy5faXNTb3VyY2VSZWFkeSgpfSxlLnByb3RvdHlwZS5faXNTb3VyY2VSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc291cmNlO3JldHVybiB0LnJlYWR5U3RhdGU+Mn0sZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy52YWxpZHx8dGhpcy5fb25DYW5QbGF5KCksdGhpcy5hdXRvVXBkYXRlJiYhdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlciYmKGJ0LnNoYXJlZC5hZGQodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMCl9LGUucHJvdG90eXBlLl9vblBsYXlTdG9wPWZ1bmN0aW9uKCl7dGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlciYmKGJ0LnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMSl9LGUucHJvdG90eXBlLl9vbkNhblBsYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNvdXJjZTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNhbnBsYXkiLHRoaXMuX29uQ2FuUGxheSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjYW5wbGF5dGhyb3VnaCIsdGhpcy5fb25DYW5QbGF5KTt2YXIgaT10aGlzLnZhbGlkO3RoaXMucmVzaXplKHQudmlkZW9XaWR0aCx0LnZpZGVvSGVpZ2h0KSwhaSYmdGhpcy5fcmVzb2x2ZSYmKHRoaXMuX3Jlc29sdmUodGhpcyksdGhpcy5fcmVzb2x2ZT1udWxsKSx0aGlzLl9pc1NvdXJjZVBsYXlpbmcoKT90aGlzLl9vblBsYXlTdGFydCgpOnRoaXMuYXV0b1BsYXkmJnQucGxheSgpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlciYmKGJ0LnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMSk7dmFyIHQ9dGhpcy5zb3VyY2U7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuX29uRXJyb3IsITApLHQucGF1c2UoKSx0LnNyYz0iIix0LmxvYWQoKSksci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF1dG9VcGRhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b1VwZGF0ZX0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLl9hdXRvVXBkYXRlJiYodGhpcy5fYXV0b1VwZGF0ZT10LCF0aGlzLl9hdXRvVXBkYXRlJiZ0aGlzLl9pc0Nvbm5lY3RlZFRvVGlja2VyPyhidC5zaGFyZWQucmVtb3ZlKHRoaXMudXBkYXRlLHRoaXMpLHRoaXMuX2lzQ29ubmVjdGVkVG9UaWNrZXI9ITEpOnRoaXMuX2F1dG9VcGRhdGUmJiF0aGlzLl9pc0Nvbm5lY3RlZFRvVGlja2VyJiZ0aGlzLl9pc1NvdXJjZVBsYXlpbmcoKSYmKGJ0LnNoYXJlZC5hZGQodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMCkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXBkYXRlRlBTIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZUZQU30sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLl91cGRhdGVGUFMmJih0aGlzLl91cGRhdGVGUFM9dCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS50ZXN0PWZ1bmN0aW9uKHQsaSl7cmV0dXJuIGdsb2JhbFRoaXMuSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fGUuVFlQRVMuaW5kZXhPZihpKT4tMX0sZS5UWVBFUz1bIm1wNCIsIm00diIsIndlYm0iLCJvZ2ciLCJvZ3YiLCJoMjY0IiwiYXZpIiwibW92Il0sZS5NSU1FX1RZUEVTPXtvZ3Y6InZpZGVvL29nZyIsbW92OiJ2aWRlby9xdWlja3RpbWUiLG00djoidmlkZW8vbXA0In0sZX0oWnQpLHpsPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQpe3JldHVybiByLmNhbGwodGhpcyx0KXx8dGhpc31yZXR1cm4gZS50ZXN0PWZ1bmN0aW9uKHQpe3JldHVybiEhZ2xvYmFsVGhpcy5jcmVhdGVJbWFnZUJpdG1hcCYmdHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwfSxlfShadCk7YmkucHVzaChfYSx6bCxIbCxZbCxWbCxWZSxqbCxYbCk7dmFyIFdsPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKCl7cmV0dXJuIHIhPT1udWxsJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gZS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsaSxuKXt2YXIgYT10LmdsO2EucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsaS5hbHBoYU1vZGU9PT1BdC5VTlBBQ0spO3ZhciBzPWkucmVhbFdpZHRoLG89aS5yZWFsSGVpZ2h0O3JldHVybiBuLndpZHRoPT09cyYmbi5oZWlnaHQ9PT1vP2EudGV4U3ViSW1hZ2UyRChpLnRhcmdldCwwLDAsMCxzLG8saS5mb3JtYXQsbi50eXBlLHRoaXMuZGF0YSk6KG4ud2lkdGg9cyxuLmhlaWdodD1vLGEudGV4SW1hZ2UyRChpLnRhcmdldCwwLG4uaW50ZXJuYWxGb3JtYXQscyxvLDAsaS5mb3JtYXQsbi50eXBlLHRoaXMuZGF0YSkpLCEwfSxlfShWZSksd2k9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7dGhpcy53aWR0aD1NYXRoLnJvdW5kKGV8fDEwMCksdGhpcy5oZWlnaHQ9TWF0aC5yb3VuZCh0fHwxMDApLHRoaXMuc3RlbmNpbD0hMSx0aGlzLmRlcHRoPSExLHRoaXMuZGlydHlJZD0wLHRoaXMuZGlydHlGb3JtYXQ9MCx0aGlzLmRpcnR5U2l6ZT0wLHRoaXMuZGVwdGhUZXh0dXJlPW51bGwsdGhpcy5jb2xvclRleHR1cmVzPVtdLHRoaXMuZ2xGcmFtZWJ1ZmZlcnM9e30sdGhpcy5kaXNwb3NlUnVubmVyPW5ldyB4dCgiZGlzcG9zZUZyYW1lYnVmZmVyIiksdGhpcy5tdWx0aXNhbXBsZT1odC5OT05FfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImNvbG9yVGV4dHVyZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yVGV4dHVyZXNbMF19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUuYWRkQ29sb3JUZXh0dXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLHRoaXMuY29sb3JUZXh0dXJlc1tlXT10fHxuZXcgaihudWxsLHtzY2FsZU1vZGU6QnQuTkVBUkVTVCxyZXNvbHV0aW9uOjEsbWlwbWFwOlJ0Lk9GRix3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pLHRoaXMuZGlydHlJZCsrLHRoaXMuZGlydHlGb3JtYXQrKyx0aGlzfSxyLnByb3RvdHlwZS5hZGREZXB0aFRleHR1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVwdGhUZXh0dXJlPWV8fG5ldyBqKG5ldyBXbChudWxsLHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pLHtzY2FsZU1vZGU6QnQuTkVBUkVTVCxyZXNvbHV0aW9uOjEsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsbWlwbWFwOlJ0Lk9GRixmb3JtYXQ6Ui5ERVBUSF9DT01QT05FTlQsdHlwZTpGLlVOU0lHTkVEX1NIT1JUfSksdGhpcy5kaXJ0eUlkKyssdGhpcy5kaXJ0eUZvcm1hdCsrLHRoaXN9LHIucHJvdG90eXBlLmVuYWJsZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVwdGg9ITAsdGhpcy5kaXJ0eUlkKyssdGhpcy5kaXJ0eUZvcm1hdCsrLHRoaXN9LHIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVuY2lsPSEwLHRoaXMuZGlydHlJZCsrLHRoaXMuZGlydHlGb3JtYXQrKyx0aGlzfSxyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXtpZihlPU1hdGgucm91bmQoZSksdD1NYXRoLnJvdW5kKHQpLCEoZT09PXRoaXMud2lkdGgmJnQ9PT10aGlzLmhlaWdodCkpe3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMuZGlydHlJZCsrLHRoaXMuZGlydHlTaXplKys7Zm9yKHZhciBpPTA7aTx0aGlzLmNvbG9yVGV4dHVyZXMubGVuZ3RoO2krKyl7dmFyIG49dGhpcy5jb2xvclRleHR1cmVzW2ldLGE9bi5yZXNvbHV0aW9uO24uc2V0U2l6ZShlL2EsdC9hKX1pZih0aGlzLmRlcHRoVGV4dHVyZSl7dmFyIGE9dGhpcy5kZXB0aFRleHR1cmUucmVzb2x1dGlvbjt0aGlzLmRlcHRoVGV4dHVyZS5zZXRTaXplKGUvYSx0L2EpfX19LHIucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc3Bvc2VSdW5uZXIuZW1pdCh0aGlzLCExKX0sci5wcm90b3R5cGUuZGVzdHJveURlcHRoVGV4dHVyZT1mdW5jdGlvbigpe3RoaXMuZGVwdGhUZXh0dXJlJiYodGhpcy5kZXB0aFRleHR1cmUuZGVzdHJveSgpLHRoaXMuZGVwdGhUZXh0dXJlPW51bGwsKyt0aGlzLmRpcnR5SWQsKyt0aGlzLmRpcnR5Rm9ybWF0KX0scn0oKSxtYT1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGk9dGhpcztpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciBuPWFyZ3VtZW50c1swXSxhPWFyZ3VtZW50c1sxXSxzPWFyZ3VtZW50c1syXSxvPWFyZ3VtZW50c1szXTt0PXt3aWR0aDpuLGhlaWdodDphLHNjYWxlTW9kZTpzLHJlc29sdXRpb246b319cmV0dXJuIHQud2lkdGg9dC53aWR0aHx8MTAwLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxMDAsdC5tdWx0aXNhbXBsZT10Lm11bHRpc2FtcGxlIT09dm9pZCAwP3QubXVsdGlzYW1wbGU6aHQuTk9ORSxpPXIuY2FsbCh0aGlzLG51bGwsdCl8fHRoaXMsaS5taXBtYXA9UnQuT0ZGLGkudmFsaWQ9ITAsaS5jbGVhckNvbG9yPVswLDAsMCwwXSxpLmZyYW1lYnVmZmVyPW5ldyB3aShpLnJlYWxXaWR0aCxpLnJlYWxIZWlnaHQpLmFkZENvbG9yVGV4dHVyZSgwLGkpLGkuZnJhbWVidWZmZXIubXVsdGlzYW1wbGU9dC5tdWx0aXNhbXBsZSxpLm1hc2tTdGFjaz1bXSxpLmZpbHRlclN0YWNrPVt7fV0saX1yZXR1cm4gZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsaSl7dGhpcy5mcmFtZWJ1ZmZlci5yZXNpemUodCp0aGlzLnJlc29sdXRpb24saSp0aGlzLnJlc29sdXRpb24pLHRoaXMuc2V0UmVhbFNpemUodGhpcy5mcmFtZWJ1ZmZlci53aWR0aCx0aGlzLmZyYW1lYnVmZmVyLmhlaWdodCl9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmZyYW1lYnVmZmVyLmRpc3Bvc2UoKSxyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5mcmFtZWJ1ZmZlci5kZXN0cm95RGVwdGhUZXh0dXJlKCksdGhpcy5mcmFtZWJ1ZmZlcj1udWxsfSxlfShqKSxnYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLngwPTAsdGhpcy55MD0wLHRoaXMueDE9MSx0aGlzLnkxPTAsdGhpcy54Mj0xLHRoaXMueTI9MSx0aGlzLngzPTAsdGhpcy55Mz0xLHRoaXMudXZzRmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KDgpfXJldHVybiByLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXQud2lkdGgsYT10LmhlaWdodDtpZihpKXt2YXIgcz1lLndpZHRoLzIvbixvPWUuaGVpZ2h0LzIvYSxoPWUueC9uK3MsdT1lLnkvYStvO2k9c3QuYWRkKGksc3QuTlcpLHRoaXMueDA9aCtzKnN0LnVYKGkpLHRoaXMueTA9dStvKnN0LnVZKGkpLGk9c3QuYWRkKGksMiksdGhpcy54MT1oK3Mqc3QudVgoaSksdGhpcy55MT11K28qc3QudVkoaSksaT1zdC5hZGQoaSwyKSx0aGlzLngyPWgrcypzdC51WChpKSx0aGlzLnkyPXUrbypzdC51WShpKSxpPXN0LmFkZChpLDIpLHRoaXMueDM9aCtzKnN0LnVYKGkpLHRoaXMueTM9dStvKnN0LnVZKGkpfWVsc2UgdGhpcy54MD1lLngvbix0aGlzLnkwPWUueS9hLHRoaXMueDE9KGUueCtlLndpZHRoKS9uLHRoaXMueTE9ZS55L2EsdGhpcy54Mj0oZS54K2Uud2lkdGgpL24sdGhpcy55Mj0oZS55K2UuaGVpZ2h0KS9hLHRoaXMueDM9ZS54L24sdGhpcy55Mz0oZS55K2UuaGVpZ2h0KS9hO3RoaXMudXZzRmxvYXQzMlswXT10aGlzLngwLHRoaXMudXZzRmxvYXQzMlsxXT10aGlzLnkwLHRoaXMudXZzRmxvYXQzMlsyXT10aGlzLngxLHRoaXMudXZzRmxvYXQzMlszXT10aGlzLnkxLHRoaXMudXZzRmxvYXQzMls0XT10aGlzLngyLHRoaXMudXZzRmxvYXQzMls1XT10aGlzLnkyLHRoaXMudXZzRmxvYXQzMls2XT10aGlzLngzLHRoaXMudXZzRmxvYXQzMls3XT10aGlzLnkzfSxyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbQHBpeGkvY29yZTpUZXh0dXJlVXZzICIrKCJ4MD0iK3RoaXMueDArIiB5MD0iK3RoaXMueTArIiAiKSsoIngxPSIrdGhpcy54MSsiIHkxPSIrdGhpcy55MSsiIHgyPSIrdGhpcy54MisiICIpKygieTI9Iit0aGlzLnkyKyIgeDM9Iit0aGlzLngzKyIgeTM9Iit0aGlzLnkzKSsiXSJ9LHJ9KCkseWE9bmV3IGdhO2Z1bmN0aW9uIHdyKHIpe3IuZGVzdHJveT1mdW5jdGlvbigpe30sci5vbj1mdW5jdGlvbigpe30sci5vbmNlPWZ1bmN0aW9uKCl7fSxyLmVtaXQ9ZnVuY3Rpb24oKXt9fXZhciBMPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSxuLGEscyxvKXt2YXIgaD1yLmNhbGwodGhpcyl8fHRoaXM7aWYoaC5ub0ZyYW1lPSExLGl8fChoLm5vRnJhbWU9ITAsaT1uZXcgSCgwLDAsMSwxKSksdCBpbnN0YW5jZW9mIGUmJih0PXQuYmFzZVRleHR1cmUpLGguYmFzZVRleHR1cmU9dCxoLl9mcmFtZT1pLGgudHJpbT1hLGgudmFsaWQ9ITEsaC5fdXZzPXlhLGgudXZNYXRyaXg9bnVsbCxoLm9yaWc9bnx8aSxoLl9yb3RhdGU9TnVtYmVyKHN8fDApLHM9PT0hMCloLl9yb3RhdGU9MjtlbHNlIGlmKGguX3JvdGF0ZSUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHQgdG8gdXNlIGRpYW1vbmQtc2hhcGVkIFVWcy4gSWYgeW91IGFyZSBzdXJlLCBzZXQgcm90YXRpb24gbWFudWFsbHkiKTtyZXR1cm4gaC5kZWZhdWx0QW5jaG9yPW8/bmV3IHR0KG8ueCxvLnkpOm5ldyB0dCgwLDApLGguX3VwZGF0ZUlEPTAsaC50ZXh0dXJlQ2FjaGVJZHM9W10sdC52YWxpZD9oLm5vRnJhbWU/dC52YWxpZCYmaC5vbkJhc2VUZXh0dXJlVXBkYXRlZCh0KTpoLmZyYW1lPWk6dC5vbmNlKCJsb2FkZWQiLGgub25CYXNlVGV4dHVyZVVwZGF0ZWQsaCksaC5ub0ZyYW1lJiZ0Lm9uKCJ1cGRhdGUiLGgub25CYXNlVGV4dHVyZVVwZGF0ZWQsaCksaH1yZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5iYXNlVGV4dHVyZS5yZXNvdXJjZSYmdGhpcy5iYXNlVGV4dHVyZS5yZXNvdXJjZS51cGRhdGUoKX0sZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5ub0ZyYW1lKXtpZighdGhpcy5iYXNlVGV4dHVyZS52YWxpZClyZXR1cm47dGhpcy5fZnJhbWUud2lkdGg9dC53aWR0aCx0aGlzLl9mcmFtZS5oZWlnaHQ9dC5oZWlnaHQsdGhpcy52YWxpZD0hMCx0aGlzLnVwZGF0ZVV2cygpfWVsc2UgdGhpcy5mcmFtZT10aGlzLl9mcmFtZTt0aGlzLmVtaXQoInVwZGF0ZSIsdGhpcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7aWYodGhpcy5iYXNlVGV4dHVyZSl7aWYodCl7dmFyIGk9dGhpcy5iYXNlVGV4dHVyZS5yZXNvdXJjZTtpJiZpLnVybCYmWXRbaS51cmxdJiZlLnJlbW92ZUZyb21DYWNoZShpLnVybCksdGhpcy5iYXNlVGV4dHVyZS5kZXN0cm95KCl9dGhpcy5iYXNlVGV4dHVyZS5vZmYoImxvYWRlZCIsdGhpcy5vbkJhc2VUZXh0dXJlVXBkYXRlZCx0aGlzKSx0aGlzLmJhc2VUZXh0dXJlLm9mZigidXBkYXRlIix0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLHRoaXMpLHRoaXMuYmFzZVRleHR1cmU9bnVsbH10aGlzLl9mcmFtZT1udWxsLHRoaXMuX3V2cz1udWxsLHRoaXMudHJpbT1udWxsLHRoaXMub3JpZz1udWxsLHRoaXMudmFsaWQ9ITEsZS5yZW1vdmVGcm9tQ2FjaGUodGhpcyksdGhpcy50ZXh0dXJlQ2FjaGVJZHM9bnVsbH0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mcmFtZS5jbG9uZSgpLGk9dGhpcy5fZnJhbWU9PT10aGlzLm9yaWc/dDp0aGlzLm9yaWcuY2xvbmUoKSxuPW5ldyBlKHRoaXMuYmFzZVRleHR1cmUsIXRoaXMubm9GcmFtZSYmdCxpLHRoaXMudHJpbSYmdGhpcy50cmltLmNsb25lKCksdGhpcy5yb3RhdGUsdGhpcy5kZWZhdWx0QW5jaG9yKTtyZXR1cm4gdGhpcy5ub0ZyYW1lJiYobi5fZnJhbWU9dCksbn0sZS5wcm90b3R5cGUudXBkYXRlVXZzPWZ1bmN0aW9uKCl7dGhpcy5fdXZzPT09eWEmJih0aGlzLl91dnM9bmV3IGdhKSx0aGlzLl91dnMuc2V0KHRoaXMuX2ZyYW1lLHRoaXMuYmFzZVRleHR1cmUsdGhpcy5yb3RhdGUpLHRoaXMuX3VwZGF0ZUlEKyt9LGUuZnJvbT1mdW5jdGlvbih0LGksbil7aT09PXZvaWQgMCYmKGk9e30pLG49PT12b2lkIDAmJihuPUkuU1RSSUNUX1RFWFRVUkVfQ0FDSEUpO3ZhciBhPXR5cGVvZiB0PT0ic3RyaW5nIixzPW51bGw7aWYoYSlzPXQ7ZWxzZSBpZih0IGluc3RhbmNlb2Ygail7aWYoIXQuY2FjaGVJZCl7dmFyIG89aSYmaS5waXhpSWRQcmVmaXh8fCJwaXhpaWQiO3QuY2FjaGVJZD1vKyItIithZSgpLGouYWRkVG9DYWNoZSh0LHQuY2FjaGVJZCl9cz10LmNhY2hlSWR9ZWxzZXtpZighdC5fcGl4aUlkKXt2YXIgbz1pJiZpLnBpeGlJZFByZWZpeHx8InBpeGlpZCI7dC5fcGl4aUlkPW8rIl8iK2FlKCl9cz10Ll9waXhpSWR9dmFyIGg9WXRbc107aWYoYSYmbiYmIWgpdGhyb3cgbmV3IEVycm9yKCdUaGUgY2FjaGVJZCAiJytzKyciIGRvZXMgbm90IGV4aXN0IGluIFRleHR1cmVDYWNoZS4nKTtyZXR1cm4haCYmISh0IGluc3RhbmNlb2Ygaik/KGkucmVzb2x1dGlvbnx8KGkucmVzb2x1dGlvbj1ncih0KSksaD1uZXcgZShuZXcgaih0LGkpKSxoLmJhc2VUZXh0dXJlLmNhY2hlSWQ9cyxqLmFkZFRvQ2FjaGUoaC5iYXNlVGV4dHVyZSxzKSxlLmFkZFRvQ2FjaGUoaCxzKSk6IWgmJnQgaW5zdGFuY2VvZiBqJiYoaD1uZXcgZSh0KSxlLmFkZFRvQ2FjaGUoaCxzKSksaH0sZS5mcm9tVVJMPWZ1bmN0aW9uKHQsaSl7dmFyIG49T2JqZWN0LmFzc2lnbih7YXV0b0xvYWQ6ITF9LGk9PW51bGw/dm9pZCAwOmkucmVzb3VyY2VPcHRpb25zKSxhPWUuZnJvbSh0LE9iamVjdC5hc3NpZ24oe3Jlc291cmNlT3B0aW9uczpufSxpKSwhMSkscz1hLmJhc2VUZXh0dXJlLnJlc291cmNlO3JldHVybiBhLmJhc2VUZXh0dXJlLnZhbGlkP1Byb21pc2UucmVzb2x2ZShhKTpzLmxvYWQoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX0pfSxlLmZyb21CdWZmZXI9ZnVuY3Rpb24odCxpLG4sYSl7cmV0dXJuIG5ldyBlKGouZnJvbUJ1ZmZlcih0LGksbixhKSl9LGUuZnJvbUxvYWRlcj1mdW5jdGlvbih0LGksbixhKXt2YXIgcz1uZXcgaih0LE9iamVjdC5hc3NpZ24oe3NjYWxlTW9kZTpJLlNDQUxFX01PREUscmVzb2x1dGlvbjpncihpKX0sYSkpLG89cy5yZXNvdXJjZTtvIGluc3RhbmNlb2YgX2EmJihvLnVybD1pKTt2YXIgaD1uZXcgZShzKTtyZXR1cm4gbnx8KG49aSksai5hZGRUb0NhY2hlKGguYmFzZVRleHR1cmUsbiksZS5hZGRUb0NhY2hlKGgsbiksbiE9PWkmJihqLmFkZFRvQ2FjaGUoaC5iYXNlVGV4dHVyZSxpKSxlLmFkZFRvQ2FjaGUoaCxpKSksaC5iYXNlVGV4dHVyZS52YWxpZD9Qcm9taXNlLnJlc29sdmUoaCk6bmV3IFByb21pc2UoZnVuY3Rpb24odSl7aC5iYXNlVGV4dHVyZS5vbmNlKCJsb2FkZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHUoaCl9KX0pfSxlLmFkZFRvQ2FjaGU9ZnVuY3Rpb24odCxpKXtpJiYodC50ZXh0dXJlQ2FjaGVJZHMuaW5kZXhPZihpKT09PS0xJiZ0LnRleHR1cmVDYWNoZUlkcy5wdXNoKGkpLFl0W2ldJiZjb25zb2xlLndhcm4oIlRleHR1cmUgYWRkZWQgdG8gdGhlIGNhY2hlIHdpdGggYW4gaWQgWyIraSsiXSB0aGF0IGFscmVhZHkgaGFkIGFuIGVudHJ5IiksWXRbaV09dCl9LGUucmVtb3ZlRnJvbUNhY2hlPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIGk9WXRbdF07aWYoaSl7dmFyIG49aS50ZXh0dXJlQ2FjaGVJZHMuaW5kZXhPZih0KTtyZXR1cm4gbj4tMSYmaS50ZXh0dXJlQ2FjaGVJZHMuc3BsaWNlKG4sMSksZGVsZXRlIFl0W3RdLGl9fWVsc2UgaWYodCYmdC50ZXh0dXJlQ2FjaGVJZHMpe2Zvcih2YXIgYT0wO2E8dC50ZXh0dXJlQ2FjaGVJZHMubGVuZ3RoOysrYSlZdFt0LnRleHR1cmVDYWNoZUlkc1thXV09PT10JiZkZWxldGUgWXRbdC50ZXh0dXJlQ2FjaGVJZHNbYV1dO3JldHVybiB0LnRleHR1cmVDYWNoZUlkcy5sZW5ndGg9MCx0fXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlc29sdXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlVGV4dHVyZS5yZXNvbHV0aW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnJhbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnJhbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mcmFtZT10LHRoaXMubm9GcmFtZT0hMTt2YXIgaT10Lngsbj10LnksYT10LndpZHRoLHM9dC5oZWlnaHQsbz1pK2E+dGhpcy5iYXNlVGV4dHVyZS53aWR0aCxoPW4rcz50aGlzLmJhc2VUZXh0dXJlLmhlaWdodDtpZihvfHxoKXt2YXIgdT1vJiZoPyJhbmQiOiJvciIsbD0iWDogIitpKyIgKyAiK2ErIiA9ICIrKGkrYSkrIiA+ICIrdGhpcy5iYXNlVGV4dHVyZS53aWR0aCxjPSJZOiAiK24rIiArICIrcysiID0gIisobitzKSsiID4gIit0aGlzLmJhc2VUZXh0dXJlLmhlaWdodDt0aHJvdyBuZXcgRXJyb3IoIlRleHR1cmUgRXJyb3I6IGZyYW1lIGRvZXMgbm90IGZpdCBpbnNpZGUgdGhlIGJhc2UgVGV4dHVyZSBkaW1lbnNpb25zOiAiKyhsKyIgIit1KyIgIitjKSl9dGhpcy52YWxpZD1hJiZzJiZ0aGlzLmJhc2VUZXh0dXJlLnZhbGlkLCF0aGlzLnRyaW0mJiF0aGlzLnJvdGF0ZSYmKHRoaXMub3JpZz10KSx0aGlzLnZhbGlkJiZ0aGlzLnVwZGF0ZVV2cygpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicm90YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JvdGF0ZT10LHRoaXMudmFsaWQmJnRoaXMudXBkYXRlVXZzKCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9yaWcud2lkdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmlnLmhlaWdodH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jYXN0VG9CYXNlVGV4dHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJhc2VUZXh0dXJlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRU1QVFkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fRU1QVFl8fChlLl9FTVBUWT1uZXcgZShuZXcgaiksd3IoZS5fRU1QVFkpLHdyKGUuX0VNUFRZLmJhc2VUZXh0dXJlKSksZS5fRU1QVFl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIldISVRFIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIWUuX1dISVRFKXt2YXIgdD1JLkFEQVBURVIuY3JlYXRlQ2FudmFzKDE2LDE2KSxpPXQuZ2V0Q29udGV4dCgiMmQiKTt0LndpZHRoPTE2LHQuaGVpZ2h0PTE2LGkuZmlsbFN0eWxlPSJ3aGl0ZSIsaS5maWxsUmVjdCgwLDAsMTYsMTYpLGUuX1dISVRFPW5ldyBlKGouZnJvbSh0KSksd3IoZS5fV0hJVEUpLHdyKGUuX1dISVRFLmJhc2VUZXh0dXJlKX1yZXR1cm4gZS5fV0hJVEV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oQmUpLGZlPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49ci5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gbi52YWxpZD0hMCxuLmZpbHRlckZyYW1lPW51bGwsbi5maWx0ZXJQb29sS2V5PW51bGwsbi51cGRhdGVVdnMoKSxufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZyYW1lYnVmZmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmFzZVRleHR1cmUuZnJhbWVidWZmZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtdWx0aXNhbXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lYnVmZmVyLm11bHRpc2FtcGxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5mcmFtZWJ1ZmZlci5tdWx0aXNhbXBsZT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGksbil7bj09PXZvaWQgMCYmKG49ITApO3ZhciBhPXRoaXMuYmFzZVRleHR1cmUucmVzb2x1dGlvbixzPU1hdGgucm91bmQodCphKS9hLG89TWF0aC5yb3VuZChpKmEpL2E7dGhpcy52YWxpZD1zPjAmJm8+MCx0aGlzLl9mcmFtZS53aWR0aD10aGlzLm9yaWcud2lkdGg9cyx0aGlzLl9mcmFtZS5oZWlnaHQ9dGhpcy5vcmlnLmhlaWdodD1vLG4mJnRoaXMuYmFzZVRleHR1cmUucmVzaXplKHMsbyksdGhpcy51cGRhdGVVdnMoKX0sZS5wcm90b3R5cGUuc2V0UmVzb2x1dGlvbj1mdW5jdGlvbih0KXt2YXIgaT10aGlzLmJhc2VUZXh0dXJlO2kucmVzb2x1dGlvbiE9PXQmJihpLnNldFJlc29sdXRpb24odCksdGhpcy5yZXNpemUoaS53aWR0aCxpLmhlaWdodCwhMSkpfSxlLmNyZWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGk9YXJndW1lbnRzLG49W10sYT0xO2E8YXJndW1lbnRzLmxlbmd0aDthKyspblthLTFdPWlbYV07cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIiYmKE90KCI2LjAuMCIsIkFyZ3VtZW50cyAod2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKSBoYXZlIGJlZW4gZGVwcmVjYXRlZC4iKSx0PXt3aWR0aDp0LGhlaWdodDpuWzBdLHNjYWxlTW9kZTpuWzFdLHJlc29sdXRpb246blsyXX0pLG5ldyBlKG5ldyBtYSh0KSl9LGV9KEwpLHFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLnRleHR1cmVQb29sPXt9LHRoaXMudGV4dHVyZU9wdGlvbnM9ZXx8e30sdGhpcy5lbmFibGVGdWxsU2NyZWVuPSExLHRoaXMuX3BpeGVsc1dpZHRoPTAsdGhpcy5fcGl4ZWxzSGVpZ2h0PTB9cmV0dXJuIHIucHJvdG90eXBlLmNyZWF0ZVRleHR1cmU9ZnVuY3Rpb24oZSx0LGkpe2k9PT12b2lkIDAmJihpPWh0Lk5PTkUpO3ZhciBuPW5ldyBtYShPYmplY3QuYXNzaWduKHt3aWR0aDplLGhlaWdodDp0LHJlc29sdXRpb246MSxtdWx0aXNhbXBsZTppfSx0aGlzLnRleHR1cmVPcHRpb25zKSk7cmV0dXJuIG5ldyBmZShuKX0sci5wcm90b3R5cGUuZ2V0T3B0aW1hbFRleHR1cmU9ZnVuY3Rpb24oZSx0LGksbil7aT09PXZvaWQgMCYmKGk9MSksbj09PXZvaWQgMCYmKG49aHQuTk9ORSk7dmFyIGE7ZT1NYXRoLmNlaWwoZSppLTFlLTYpLHQ9TWF0aC5jZWlsKHQqaS0xZS02KSwhdGhpcy5lbmFibGVGdWxsU2NyZWVufHxlIT09dGhpcy5fcGl4ZWxzV2lkdGh8fHQhPT10aGlzLl9waXhlbHNIZWlnaHQ/KGU9X3IoZSksdD1fcih0KSxhPSgoZSY2NTUzNSk8PDE2fHQmNjU1MzUpPj4+MCxuPjEmJihhKz1uKjQyOTQ5NjcyOTYpKTphPW4+MT8tbjotMSx0aGlzLnRleHR1cmVQb29sW2FdfHwodGhpcy50ZXh0dXJlUG9vbFthXT1bXSk7dmFyIHM9dGhpcy50ZXh0dXJlUG9vbFthXS5wb3AoKTtyZXR1cm4gc3x8KHM9dGhpcy5jcmVhdGVUZXh0dXJlKGUsdCxuKSkscy5maWx0ZXJQb29sS2V5PWEscy5zZXRSZXNvbHV0aW9uKGkpLHN9LHIucHJvdG90eXBlLmdldEZpbHRlclRleHR1cmU9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXRoaXMuZ2V0T3B0aW1hbFRleHR1cmUoZS53aWR0aCxlLmhlaWdodCx0fHxlLnJlc29sdXRpb24saXx8aHQuTk9ORSk7cmV0dXJuIG4uZmlsdGVyRnJhbWU9ZS5maWx0ZXJGcmFtZSxufSxyLnByb3RvdHlwZS5yZXR1cm5UZXh0dXJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlsdGVyUG9vbEtleTtlLmZpbHRlckZyYW1lPW51bGwsdGhpcy50ZXh0dXJlUG9vbFt0XS5wdXNoKGUpfSxyLnByb3RvdHlwZS5yZXR1cm5GaWx0ZXJUZXh0dXJlPWZ1bmN0aW9uKGUpe3RoaXMucmV0dXJuVGV4dHVyZShlKX0sci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oZSl7aWYoZT1lIT09ITEsZSlmb3IodmFyIHQgaW4gdGhpcy50ZXh0dXJlUG9vbCl7dmFyIGk9dGhpcy50ZXh0dXJlUG9vbFt0XTtpZihpKWZvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKWlbbl0uZGVzdHJveSghMCl9dGhpcy50ZXh0dXJlUG9vbD17fX0sci5wcm90b3R5cGUuc2V0U2NyZWVuU2l6ZT1mdW5jdGlvbihlKXtpZighKGUud2lkdGg9PT10aGlzLl9waXhlbHNXaWR0aCYmZS5oZWlnaHQ9PT10aGlzLl9waXhlbHNIZWlnaHQpKXt0aGlzLmVuYWJsZUZ1bGxTY3JlZW49ZS53aWR0aD4wJiZlLmhlaWdodD4wO2Zvcih2YXIgdCBpbiB0aGlzLnRleHR1cmVQb29sKWlmKE51bWJlcih0KTwwKXt2YXIgaT10aGlzLnRleHR1cmVQb29sW3RdO2lmKGkpZm9yKHZhciBuPTA7bjxpLmxlbmd0aDtuKyspaVtuXS5kZXN0cm95KCEwKTt0aGlzLnRleHR1cmVQb29sW3RdPVtdfXRoaXMuX3BpeGVsc1dpZHRoPWUud2lkdGgsdGhpcy5fcGl4ZWxzSGVpZ2h0PWUuaGVpZ2h0fX0sci5TQ1JFRU5fS0VZPS0xLHJ9KCkseGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpLG4sYSxzLG8pe3Q9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPSExKSxuPT09dm9pZCAwJiYobj1GLkZMT0FUKSx0aGlzLmJ1ZmZlcj1lLHRoaXMuc2l6ZT10LHRoaXMubm9ybWFsaXplZD1pLHRoaXMudHlwZT1uLHRoaXMuc3RyaWRlPWEsdGhpcy5zdGFydD1zLHRoaXMuaW5zdGFuY2U9b31yZXR1cm4gci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuYnVmZmVyPW51bGx9LHIuZnJvbT1mdW5jdGlvbihlLHQsaSxuLGEpe3JldHVybiBuZXcgcihlLHQsaSxuLGEpfSxyfSgpLCRsPTAsX3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpKXt0PT09dm9pZCAwJiYodD0hMCksaT09PXZvaWQgMCYmKGk9ITEpLHRoaXMuZGF0YT1lfHxuZXcgRmxvYXQzMkFycmF5KDEpLHRoaXMuX2dsQnVmZmVycz17fSx0aGlzLl91cGRhdGVJRD0wLHRoaXMuaW5kZXg9aSx0aGlzLnN0YXRpYz10LHRoaXMuaWQ9JGwrKyx0aGlzLmRpc3Bvc2VSdW5uZXI9bmV3IHh0KCJkaXNwb3NlQnVmZmVyIil9cmV0dXJuIHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgQXJyYXkmJihlPW5ldyBGbG9hdDMyQXJyYXkoZSkpLHRoaXMuZGF0YT1lfHx0aGlzLmRhdGEsdGhpcy5fdXBkYXRlSUQrK30sci5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZVJ1bm5lci5lbWl0KHRoaXMsITEpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCksdGhpcy5kYXRhPW51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlPT09VXQuRUxFTUVOVF9BUlJBWV9CVUZGRVJ9LHNldDpmdW5jdGlvbihlKXt0aGlzLnR5cGU9ZT9VdC5FTEVNRU5UX0FSUkFZX0JVRkZFUjpVdC5BUlJBWV9CVUZGRVJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXkmJihlPW5ldyBGbG9hdDMyQXJyYXkoZSkpLG5ldyByKGUpfSxyfSgpLEtsPXtGbG9hdDMyQXJyYXksVWludDMyQXJyYXksSW50MzJBcnJheSxVaW50OEFycmF5fTtmdW5jdGlvbiBabChyLGUpe2Zvcih2YXIgdD0wLGk9MCxuPXt9LGE9MDthPHIubGVuZ3RoO2ErKylpKz1lW2FdLHQrPXJbYV0ubGVuZ3RoO2Zvcih2YXIgcz1uZXcgQXJyYXlCdWZmZXIodCo0KSxvPW51bGwsaD0wLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHU9ZVthXSxsPXJbYV0sYz1uYShsKTtuW2NdfHwobltjXT1uZXcgS2xbY10ocykpLG89bltjXTtmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGQ9KGYvdXwwKSppK2gscD1mJXU7b1tkK3BdPWxbZl19aCs9dX1yZXR1cm4gbmV3IEZsb2F0MzJBcnJheShzKX12YXIgYmE9ezUxMjY6NCw1MTIzOjIsNTEyMToxfSxKbD0wLFFsPXtGbG9hdDMyQXJyYXksVWludDMyQXJyYXksSW50MzJBcnJheSxVaW50OEFycmF5LFVpbnQxNkFycmF5fSxZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtlPT09dm9pZCAwJiYoZT1bXSksdD09PXZvaWQgMCYmKHQ9e30pLHRoaXMuYnVmZmVycz1lLHRoaXMuaW5kZXhCdWZmZXI9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9dCx0aGlzLmdsVmVydGV4QXJyYXlPYmplY3RzPXt9LHRoaXMuaWQ9SmwrKyx0aGlzLmluc3RhbmNlZD0hMSx0aGlzLmluc3RhbmNlQ291bnQ9MSx0aGlzLmRpc3Bvc2VSdW5uZXI9bmV3IHh0KCJkaXNwb3NlR2VvbWV0cnkiKSx0aGlzLnJlZkNvdW50PTB9cmV0dXJuIHIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsaSxuLGEscyxvLGgpe2lmKGk9PT12b2lkIDAmJihpPTApLG49PT12b2lkIDAmJihuPSExKSxoPT09dm9pZCAwJiYoaD0hMSksIXQpdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwYXNzIGEgYnVmZmVyIHdoZW4gY3JlYXRpbmcgYW4gYXR0cmlidXRlIik7dCBpbnN0YW5jZW9mIF90fHwodCBpbnN0YW5jZW9mIEFycmF5JiYodD1uZXcgRmxvYXQzMkFycmF5KHQpKSx0PW5ldyBfdCh0KSk7dmFyIHU9ZS5zcGxpdCgifCIpO2lmKHUubGVuZ3RoPjEpe2Zvcih2YXIgbD0wO2w8dS5sZW5ndGg7bCsrKXRoaXMuYWRkQXR0cmlidXRlKHVbbF0sdCxpLG4sYSk7cmV0dXJuIHRoaXN9dmFyIGM9dGhpcy5idWZmZXJzLmluZGV4T2YodCk7cmV0dXJuIGM9PT0tMSYmKHRoaXMuYnVmZmVycy5wdXNoKHQpLGM9dGhpcy5idWZmZXJzLmxlbmd0aC0xKSx0aGlzLmF0dHJpYnV0ZXNbZV09bmV3IHhhKGMsaSxuLGEscyxvLGgpLHRoaXMuaW5zdGFuY2VkPXRoaXMuaW5zdGFuY2VkfHxoLHRoaXN9LHIucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2VdfSxyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYnVmZmVyc1t0aGlzLmdldEF0dHJpYnV0ZShlKS5idWZmZXJdfSxyLnByb3RvdHlwZS5hZGRJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIF90fHwoZSBpbnN0YW5jZW9mIEFycmF5JiYoZT1uZXcgVWludDE2QXJyYXkoZSkpLGU9bmV3IF90KGUpKSxlLnR5cGU9VXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdGhpcy5pbmRleEJ1ZmZlcj1lLHRoaXMuYnVmZmVycy5pbmRleE9mKGUpPT09LTEmJnRoaXMuYnVmZmVycy5wdXNoKGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXhCdWZmZXJ9LHIucHJvdG90eXBlLmludGVybGVhdmU9ZnVuY3Rpb24oKXtpZih0aGlzLmJ1ZmZlcnMubGVuZ3RoPT09MXx8dGhpcy5idWZmZXJzLmxlbmd0aD09PTImJnRoaXMuaW5kZXhCdWZmZXIpcmV0dXJuIHRoaXM7dmFyIGU9W10sdD1bXSxpPW5ldyBfdCxuO2ZvcihuIGluIHRoaXMuYXR0cmlidXRlcyl7dmFyIGE9dGhpcy5hdHRyaWJ1dGVzW25dLHM9dGhpcy5idWZmZXJzW2EuYnVmZmVyXTtlLnB1c2gocy5kYXRhKSx0LnB1c2goYS5zaXplKmJhW2EudHlwZV0vNCksYS5idWZmZXI9MH1mb3IoaS5kYXRhPVpsKGUsdCksbj0wO248dGhpcy5idWZmZXJzLmxlbmd0aDtuKyspdGhpcy5idWZmZXJzW25dIT09dGhpcy5pbmRleEJ1ZmZlciYmdGhpcy5idWZmZXJzW25dLmRlc3Ryb3koKTtyZXR1cm4gdGhpcy5idWZmZXJzPVtpXSx0aGlzLmluZGV4QnVmZmVyJiZ0aGlzLmJ1ZmZlcnMucHVzaCh0aGlzLmluZGV4QnVmZmVyKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuYXR0cmlidXRlcyl7dmFyIHQ9dGhpcy5hdHRyaWJ1dGVzW2VdLGk9dGhpcy5idWZmZXJzW3QuYnVmZmVyXTtyZXR1cm4gaS5kYXRhLmxlbmd0aC8odC5zdHJpZGUvNHx8dC5zaXplKX1yZXR1cm4gMH0sci5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZVJ1bm5lci5lbWl0KHRoaXMsITEpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCksdGhpcy5idWZmZXJzPW51bGwsdGhpcy5pbmRleEJ1ZmZlcj1udWxsLHRoaXMuYXR0cmlidXRlcz1udWxsfSxyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgcix0PTA7dDx0aGlzLmJ1ZmZlcnMubGVuZ3RoO3QrKyllLmJ1ZmZlcnNbdF09bmV3IF90KHRoaXMuYnVmZmVyc1t0XS5kYXRhLnNsaWNlKDApKTtmb3IodmFyIHQgaW4gdGhpcy5hdHRyaWJ1dGVzKXt2YXIgaT10aGlzLmF0dHJpYnV0ZXNbdF07ZS5hdHRyaWJ1dGVzW3RdPW5ldyB4YShpLmJ1ZmZlcixpLnNpemUsaS5ub3JtYWxpemVkLGkudHlwZSxpLnN0cmlkZSxpLnN0YXJ0LGkuaW5zdGFuY2UpfXJldHVybiB0aGlzLmluZGV4QnVmZmVyJiYoZS5pbmRleEJ1ZmZlcj1lLmJ1ZmZlcnNbdGhpcy5idWZmZXJzLmluZGV4T2YodGhpcy5pbmRleEJ1ZmZlcildLGUuaW5kZXhCdWZmZXIudHlwZT1VdC5FTEVNRU5UX0FSUkFZX0JVRkZFUiksZX0sci5tZXJnZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IHIsaT1bXSxuPVtdLGE9W10scyxvPTA7bzxlLmxlbmd0aDtvKyspe3M9ZVtvXTtmb3IodmFyIGg9MDtoPHMuYnVmZmVycy5sZW5ndGg7aCsrKW5baF09bltoXXx8MCxuW2hdKz1zLmJ1ZmZlcnNbaF0uZGF0YS5sZW5ndGgsYVtoXT0wfWZvcih2YXIgbz0wO288cy5idWZmZXJzLmxlbmd0aDtvKyspaVtvXT1uZXcgUWxbbmEocy5idWZmZXJzW29dLmRhdGEpXShuW29dKSx0LmJ1ZmZlcnNbb109bmV3IF90KGlbb10pO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXtzPWVbb107Zm9yKHZhciBoPTA7aDxzLmJ1ZmZlcnMubGVuZ3RoO2grKylpW2hdLnNldChzLmJ1ZmZlcnNbaF0uZGF0YSxhW2hdKSxhW2hdKz1zLmJ1ZmZlcnNbaF0uZGF0YS5sZW5ndGh9aWYodC5hdHRyaWJ1dGVzPXMuYXR0cmlidXRlcyxzLmluZGV4QnVmZmVyKXt0LmluZGV4QnVmZmVyPXQuYnVmZmVyc1tzLmJ1ZmZlcnMuaW5kZXhPZihzLmluZGV4QnVmZmVyKV0sdC5pbmRleEJ1ZmZlci50eXBlPVV0LkVMRU1FTlRfQVJSQVlfQlVGRkVSO2Zvcih2YXIgdT0wLGw9MCxjPTAsZj0wLG89MDtvPHMuYnVmZmVycy5sZW5ndGg7bysrKWlmKHMuYnVmZmVyc1tvXSE9PXMuaW5kZXhCdWZmZXIpe2Y9bzticmVha31mb3IodmFyIG8gaW4gcy5hdHRyaWJ1dGVzKXt2YXIgZD1zLmF0dHJpYnV0ZXNbb107KGQuYnVmZmVyfDApPT09ZiYmKGwrPWQuc2l6ZSpiYVtkLnR5cGVdLzQpfWZvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXtmb3IodmFyIHA9ZVtvXS5pbmRleEJ1ZmZlci5kYXRhLGg9MDtoPHAubGVuZ3RoO2grKyl0LmluZGV4QnVmZmVyLmRhdGFbaCtjXSs9dTt1Kz1lW29dLmJ1ZmZlcnNbZl0uZGF0YS5sZW5ndGgvbCxjKz1wLmxlbmd0aH19cmV0dXJuIHR9LHJ9KCksdGY9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUoKXt2YXIgdD1yLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHQuYWRkQXR0cmlidXRlKCJhVmVydGV4UG9zaXRpb24iLG5ldyBGbG9hdDMyQXJyYXkoWzAsMCwxLDAsMSwxLDAsMV0pKS5hZGRJbmRleChbMCwxLDMsMl0pLHR9cmV0dXJuIGV9KFllKSxUYT1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSgpe3ZhciB0PXIuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gdC52ZXJ0aWNlcz1uZXcgRmxvYXQzMkFycmF5KFstMSwtMSwxLC0xLDEsMSwtMSwxXSksdC51dnM9bmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwxLDEsMCwxXSksdC52ZXJ0ZXhCdWZmZXI9bmV3IF90KHQudmVydGljZXMpLHQudXZCdWZmZXI9bmV3IF90KHQudXZzKSx0LmFkZEF0dHJpYnV0ZSgiYVZlcnRleFBvc2l0aW9uIix0LnZlcnRleEJ1ZmZlcikuYWRkQXR0cmlidXRlKCJhVGV4dHVyZUNvb3JkIix0LnV2QnVmZmVyKS5hZGRJbmRleChbMCwxLDIsMCwyLDNdKSx0fXJldHVybiBlLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCxpKXt2YXIgbj0wLGE9MDtyZXR1cm4gdGhpcy51dnNbMF09bix0aGlzLnV2c1sxXT1hLHRoaXMudXZzWzJdPW4raS53aWR0aC90LndpZHRoLHRoaXMudXZzWzNdPWEsdGhpcy51dnNbNF09bitpLndpZHRoL3Qud2lkdGgsdGhpcy51dnNbNV09YStpLmhlaWdodC90LmhlaWdodCx0aGlzLnV2c1s2XT1uLHRoaXMudXZzWzddPWEraS5oZWlnaHQvdC5oZWlnaHQsbj1pLngsYT1pLnksdGhpcy52ZXJ0aWNlc1swXT1uLHRoaXMudmVydGljZXNbMV09YSx0aGlzLnZlcnRpY2VzWzJdPW4raS53aWR0aCx0aGlzLnZlcnRpY2VzWzNdPWEsdGhpcy52ZXJ0aWNlc1s0XT1uK2kud2lkdGgsdGhpcy52ZXJ0aWNlc1s1XT1hK2kuaGVpZ2h0LHRoaXMudmVydGljZXNbNl09bix0aGlzLnZlcnRpY2VzWzddPWEraS5oZWlnaHQsdGhpcy5pbnZhbGlkYXRlKCksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRleEJ1ZmZlci5fdXBkYXRlSUQrKyx0aGlzLnV2QnVmZmVyLl91cGRhdGVJRCsrLHRoaXN9LGV9KFllKSxlZj0wLGNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSl7dGhpcy5ncm91cD0hMCx0aGlzLnN5bmNVbmlmb3Jtcz17fSx0aGlzLmRpcnR5SWQ9MCx0aGlzLmlkPWVmKyssdGhpcy5zdGF0aWM9ISF0LHRoaXMudWJvPSEhaSxlIGluc3RhbmNlb2YgX3Q/KHRoaXMuYnVmZmVyPWUsdGhpcy5idWZmZXIudHlwZT1VdC5VTklGT1JNX0JVRkZFUix0aGlzLmF1dG9NYW5hZ2U9ITEsdGhpcy51Ym89ITApOih0aGlzLnVuaWZvcm1zPWUsdGhpcy51Ym8mJih0aGlzLmJ1ZmZlcj1uZXcgX3QobmV3IEZsb2F0MzJBcnJheSgxKSksdGhpcy5idWZmZXIudHlwZT1VdC5VTklGT1JNX0JVRkZFUix0aGlzLmF1dG9NYW5hZ2U9ITApKX1yZXR1cm4gci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUlkKyssIXRoaXMuYXV0b01hbmFnZSYmdGhpcy5idWZmZXImJnRoaXMuYnVmZmVyLnVwZGF0ZSgpfSxyLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LGkpe2lmKCF0aGlzLnVibyl0aGlzLnVuaWZvcm1zW2VdPW5ldyByKHQsaSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIltVbmlmb3JtR3JvdXBdIHVuaWZvcm0gZ3JvdXBzIGluIHVibyBtb2RlIGNhbm5vdCBiZSBtb2RpZmllZCwgb3IgaGF2ZSB1bmlmb3JtIGdyb3VwcyBuZXN0ZWQgaW4gdGhlbSIpfSxyLmZyb209ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBuZXcgcihlLHQsaSl9LHIudWJvRnJvbT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcihlLHQ/PyEwLCEwKX0scn0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlbmRlclRleHR1cmU9bnVsbCx0aGlzLnRhcmdldD1udWxsLHRoaXMubGVnYWN5PSExLHRoaXMucmVzb2x1dGlvbj0xLHRoaXMubXVsdGlzYW1wbGU9aHQuTk9ORSx0aGlzLnNvdXJjZUZyYW1lPW5ldyBILHRoaXMuZGVzdGluYXRpb25GcmFtZT1uZXcgSCx0aGlzLmJpbmRpbmdTb3VyY2VGcmFtZT1uZXcgSCx0aGlzLmJpbmRpbmdEZXN0aW5hdGlvbkZyYW1lPW5ldyBILHRoaXMuZmlsdGVycz1bXSx0aGlzLnRyYW5zZm9ybT1udWxsfXJldHVybiByLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMudGFyZ2V0PW51bGwsdGhpcy5maWx0ZXJzPW51bGwsdGhpcy5yZW5kZXJUZXh0dXJlPW51bGx9LHJ9KCksU3I9W25ldyB0dCxuZXcgdHQsbmV3IHR0LG5ldyB0dF0sU2k9bmV3IHZ0LG5mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLnJlbmRlcmVyPWUsdGhpcy5kZWZhdWx0RmlsdGVyU3RhY2s9W3t9XSx0aGlzLnRleHR1cmVQb29sPW5ldyBxbCx0aGlzLnRleHR1cmVQb29sLnNldFNjcmVlblNpemUoZS52aWV3KSx0aGlzLnN0YXRlUG9vbD1bXSx0aGlzLnF1YWQ9bmV3IHRmLHRoaXMucXVhZFV2PW5ldyBUYSx0aGlzLnRlbXBSZWN0PW5ldyBILHRoaXMuYWN0aXZlU3RhdGU9e30sdGhpcy5nbG9iYWxVbmlmb3Jtcz1uZXcgY2Uoe291dHB1dEZyYW1lOm5ldyBILGlucHV0U2l6ZTpuZXcgRmxvYXQzMkFycmF5KDQpLGlucHV0UGl4ZWw6bmV3IEZsb2F0MzJBcnJheSg0KSxpbnB1dENsYW1wOm5ldyBGbG9hdDMyQXJyYXkoNCkscmVzb2x1dGlvbjoxLGZpbHRlckFyZWE6bmV3IEZsb2F0MzJBcnJheSg0KSxmaWx0ZXJDbGFtcDpuZXcgRmxvYXQzMkFycmF5KDQpfSwhMCksdGhpcy5mb3JjZUNsZWFyPSExLHRoaXMudXNlTWF4UGFkZGluZz0hMX1yZXR1cm4gci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaSxuLGE9dGhpcy5yZW5kZXJlcixzPXRoaXMuZGVmYXVsdEZpbHRlclN0YWNrLG89dGhpcy5zdGF0ZVBvb2wucG9wKCl8fG5ldyByZixoPXRoaXMucmVuZGVyZXIucmVuZGVyVGV4dHVyZSx1PXRbMF0ucmVzb2x1dGlvbixsPXRbMF0ubXVsdGlzYW1wbGUsYz10WzBdLnBhZGRpbmcsZj10WzBdLmF1dG9GaXQsZD0oaT10WzBdLmxlZ2FjeSkhPT1udWxsJiZpIT09dm9pZCAwP2k6ITAscD0xO3A8dC5sZW5ndGg7cCsrKXt2YXIgdj10W3BdO3U9TWF0aC5taW4odSx2LnJlc29sdXRpb24pLGw9TWF0aC5taW4obCx2Lm11bHRpc2FtcGxlKSxjPXRoaXMudXNlTWF4UGFkZGluZz9NYXRoLm1heChjLHYucGFkZGluZyk6Yyt2LnBhZGRpbmcsZj1mJiZ2LmF1dG9GaXQsZD1kfHwoKG49di5sZWdhY3kpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiEwKX1zLmxlbmd0aD09PTEmJih0aGlzLmRlZmF1bHRGaWx0ZXJTdGFja1swXS5yZW5kZXJUZXh0dXJlPWguY3VycmVudCkscy5wdXNoKG8pLG8ucmVzb2x1dGlvbj11LG8ubXVsdGlzYW1wbGU9bCxvLmxlZ2FjeT1kLG8udGFyZ2V0PWUsby5zb3VyY2VGcmFtZS5jb3B5RnJvbShlLmZpbHRlckFyZWF8fGUuZ2V0Qm91bmRzKCEwKSksby5zb3VyY2VGcmFtZS5wYWQoYyk7dmFyIF89dGhpcy50ZW1wUmVjdC5jb3B5RnJvbShoLnNvdXJjZUZyYW1lKTthLnByb2plY3Rpb24udHJhbnNmb3JtJiZ0aGlzLnRyYW5zZm9ybUFBQkIoU2kuY29weUZyb20oYS5wcm9qZWN0aW9uLnRyYW5zZm9ybSkuaW52ZXJ0KCksXyksZj8oby5zb3VyY2VGcmFtZS5maXQoXyksKG8uc291cmNlRnJhbWUud2lkdGg8PTB8fG8uc291cmNlRnJhbWUuaGVpZ2h0PD0wKSYmKG8uc291cmNlRnJhbWUud2lkdGg9MCxvLnNvdXJjZUZyYW1lLmhlaWdodD0wKSk6by5zb3VyY2VGcmFtZS5pbnRlcnNlY3RzKF8pfHwoby5zb3VyY2VGcmFtZS53aWR0aD0wLG8uc291cmNlRnJhbWUuaGVpZ2h0PTApLHRoaXMucm91bmRGcmFtZShvLnNvdXJjZUZyYW1lLGguY3VycmVudD9oLmN1cnJlbnQucmVzb2x1dGlvbjphLnJlc29sdXRpb24saC5zb3VyY2VGcmFtZSxoLmRlc3RpbmF0aW9uRnJhbWUsYS5wcm9qZWN0aW9uLnRyYW5zZm9ybSksby5yZW5kZXJUZXh0dXJlPXRoaXMuZ2V0T3B0aW1hbEZpbHRlclRleHR1cmUoby5zb3VyY2VGcmFtZS53aWR0aCxvLnNvdXJjZUZyYW1lLmhlaWdodCx1LGwpLG8uZmlsdGVycz10LG8uZGVzdGluYXRpb25GcmFtZS53aWR0aD1vLnJlbmRlclRleHR1cmUud2lkdGgsby5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodD1vLnJlbmRlclRleHR1cmUuaGVpZ2h0O3ZhciBtPXRoaXMudGVtcFJlY3Q7bS54PTAsbS55PTAsbS53aWR0aD1vLnNvdXJjZUZyYW1lLndpZHRoLG0uaGVpZ2h0PW8uc291cmNlRnJhbWUuaGVpZ2h0LG8ucmVuZGVyVGV4dHVyZS5maWx0ZXJGcmFtZT1vLnNvdXJjZUZyYW1lLG8uYmluZGluZ1NvdXJjZUZyYW1lLmNvcHlGcm9tKGguc291cmNlRnJhbWUpLG8uYmluZGluZ0Rlc3RpbmF0aW9uRnJhbWUuY29weUZyb20oaC5kZXN0aW5hdGlvbkZyYW1lKSxvLnRyYW5zZm9ybT1hLnByb2plY3Rpb24udHJhbnNmb3JtLGEucHJvamVjdGlvbi50cmFuc2Zvcm09bnVsbCxoLmJpbmQoby5yZW5kZXJUZXh0dXJlLG8uc291cmNlRnJhbWUsbSksYS5mcmFtZWJ1ZmZlci5jbGVhcigwLDAsMCwwKX0sci5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kZWZhdWx0RmlsdGVyU3RhY2ssdD1lLnBvcCgpLGk9dC5maWx0ZXJzO3RoaXMuYWN0aXZlU3RhdGU9dDt2YXIgbj10aGlzLmdsb2JhbFVuaWZvcm1zLnVuaWZvcm1zO24ub3V0cHV0RnJhbWU9dC5zb3VyY2VGcmFtZSxuLnJlc29sdXRpb249dC5yZXNvbHV0aW9uO3ZhciBhPW4uaW5wdXRTaXplLHM9bi5pbnB1dFBpeGVsLG89bi5pbnB1dENsYW1wO2lmKGFbMF09dC5kZXN0aW5hdGlvbkZyYW1lLndpZHRoLGFbMV09dC5kZXN0aW5hdGlvbkZyYW1lLmhlaWdodCxhWzJdPTEvYVswXSxhWzNdPTEvYVsxXSxzWzBdPU1hdGgucm91bmQoYVswXSp0LnJlc29sdXRpb24pLHNbMV09TWF0aC5yb3VuZChhWzFdKnQucmVzb2x1dGlvbiksc1syXT0xL3NbMF0sc1szXT0xL3NbMV0sb1swXT0uNSpzWzJdLG9bMV09LjUqc1szXSxvWzJdPXQuc291cmNlRnJhbWUud2lkdGgqYVsyXS0uNSpzWzJdLG9bM109dC5zb3VyY2VGcmFtZS5oZWlnaHQqYVszXS0uNSpzWzNdLHQubGVnYWN5KXt2YXIgaD1uLmZpbHRlckFyZWE7aFswXT10LmRlc3RpbmF0aW9uRnJhbWUud2lkdGgsaFsxXT10LmRlc3RpbmF0aW9uRnJhbWUuaGVpZ2h0LGhbMl09dC5zb3VyY2VGcmFtZS54LGhbM109dC5zb3VyY2VGcmFtZS55LG4uZmlsdGVyQ2xhbXA9bi5pbnB1dENsYW1wfXRoaXMuZ2xvYmFsVW5pZm9ybXMudXBkYXRlKCk7dmFyIHU9ZVtlLmxlbmd0aC0xXTtpZih0aGlzLnJlbmRlcmVyLmZyYW1lYnVmZmVyLmJsaXQoKSxpLmxlbmd0aD09PTEpaVswXS5hcHBseSh0aGlzLHQucmVuZGVyVGV4dHVyZSx1LnJlbmRlclRleHR1cmUsQ3QuQkxFTkQsdCksdGhpcy5yZXR1cm5GaWx0ZXJUZXh0dXJlKHQucmVuZGVyVGV4dHVyZSk7ZWxzZXt2YXIgbD10LnJlbmRlclRleHR1cmUsYz10aGlzLmdldE9wdGltYWxGaWx0ZXJUZXh0dXJlKGwud2lkdGgsbC5oZWlnaHQsdC5yZXNvbHV0aW9uKTtjLmZpbHRlckZyYW1lPWwuZmlsdGVyRnJhbWU7dmFyIGY9MDtmb3IoZj0wO2Y8aS5sZW5ndGgtMTsrK2Ype2Y9PT0xJiZ0Lm11bHRpc2FtcGxlPjEmJihjPXRoaXMuZ2V0T3B0aW1hbEZpbHRlclRleHR1cmUobC53aWR0aCxsLmhlaWdodCx0LnJlc29sdXRpb24pLGMuZmlsdGVyRnJhbWU9bC5maWx0ZXJGcmFtZSksaVtmXS5hcHBseSh0aGlzLGwsYyxDdC5DTEVBUix0KTt2YXIgZD1sO2w9YyxjPWR9aVtmXS5hcHBseSh0aGlzLGwsdS5yZW5kZXJUZXh0dXJlLEN0LkJMRU5ELHQpLGY+MSYmdC5tdWx0aXNhbXBsZT4xJiZ0aGlzLnJldHVybkZpbHRlclRleHR1cmUodC5yZW5kZXJUZXh0dXJlKSx0aGlzLnJldHVybkZpbHRlclRleHR1cmUobCksdGhpcy5yZXR1cm5GaWx0ZXJUZXh0dXJlKGMpfXQuY2xlYXIoKSx0aGlzLnN0YXRlUG9vbC5wdXNoKHQpfSxyLnByb3RvdHlwZS5iaW5kQW5kQ2xlYXI9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD1DdC5DTEVBUik7dmFyIGk9dGhpcy5yZW5kZXJlcixuPWkucmVuZGVyVGV4dHVyZSxhPWkuc3RhdGU7aWYoZT09PXRoaXMuZGVmYXVsdEZpbHRlclN0YWNrW3RoaXMuZGVmYXVsdEZpbHRlclN0YWNrLmxlbmd0aC0xXS5yZW5kZXJUZXh0dXJlP3RoaXMucmVuZGVyZXIucHJvamVjdGlvbi50cmFuc2Zvcm09dGhpcy5hY3RpdmVTdGF0ZS50cmFuc2Zvcm06dGhpcy5yZW5kZXJlci5wcm9qZWN0aW9uLnRyYW5zZm9ybT1udWxsLGUmJmUuZmlsdGVyRnJhbWUpe3ZhciBzPXRoaXMudGVtcFJlY3Q7cy54PTAscy55PTAscy53aWR0aD1lLmZpbHRlckZyYW1lLndpZHRoLHMuaGVpZ2h0PWUuZmlsdGVyRnJhbWUuaGVpZ2h0LG4uYmluZChlLGUuZmlsdGVyRnJhbWUscyl9ZWxzZSBlIT09dGhpcy5kZWZhdWx0RmlsdGVyU3RhY2tbdGhpcy5kZWZhdWx0RmlsdGVyU3RhY2subGVuZ3RoLTFdLnJlbmRlclRleHR1cmU/bi5iaW5kKGUpOnRoaXMucmVuZGVyZXIucmVuZGVyVGV4dHVyZS5iaW5kKGUsdGhpcy5hY3RpdmVTdGF0ZS5iaW5kaW5nU291cmNlRnJhbWUsdGhpcy5hY3RpdmVTdGF0ZS5iaW5kaW5nRGVzdGluYXRpb25GcmFtZSk7dmFyIG89YS5zdGF0ZUlkJjF8fHRoaXMuZm9yY2VDbGVhcjsodD09PUN0LkNMRUFSfHx0PT09Q3QuQkxJVCYmbykmJnRoaXMucmVuZGVyZXIuZnJhbWVidWZmZXIuY2xlYXIoMCwwLDAsMCl9LHIucHJvdG90eXBlLmFwcGx5RmlsdGVyPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBhPXRoaXMucmVuZGVyZXI7YS5zdGF0ZS5zZXQoZS5zdGF0ZSksdGhpcy5iaW5kQW5kQ2xlYXIoaSxuKSxlLnVuaWZvcm1zLnVTYW1wbGVyPXQsZS51bmlmb3Jtcy5maWx0ZXJHbG9iYWxzPXRoaXMuZ2xvYmFsVW5pZm9ybXMsYS5zaGFkZXIuYmluZChlKSxlLmxlZ2FjeT0hIWUucHJvZ3JhbS5hdHRyaWJ1dGVEYXRhLmFUZXh0dXJlQ29vcmQsZS5sZWdhY3k/KHRoaXMucXVhZFV2Lm1hcCh0Ll9mcmFtZSx0LmZpbHRlckZyYW1lKSxhLmdlb21ldHJ5LmJpbmQodGhpcy5xdWFkVXYpLGEuZ2VvbWV0cnkuZHJhdyhQdC5UUklBTkdMRVMpKTooYS5nZW9tZXRyeS5iaW5kKHRoaXMucXVhZCksYS5nZW9tZXRyeS5kcmF3KFB0LlRSSUFOR0xFX1NUUklQKSl9LHIucHJvdG90eXBlLmNhbGN1bGF0ZVNwcml0ZU1hdHJpeD1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuYWN0aXZlU3RhdGUsbj1pLnNvdXJjZUZyYW1lLGE9aS5kZXN0aW5hdGlvbkZyYW1lLHM9dC5fdGV4dHVyZS5vcmlnLG89ZS5zZXQoYS53aWR0aCwwLDAsYS5oZWlnaHQsbi54LG4ueSksaD10LndvcmxkVHJhbnNmb3JtLmNvcHlUbyh2dC5URU1QX01BVFJJWCk7cmV0dXJuIGguaW52ZXJ0KCksby5wcmVwZW5kKGgpLG8uc2NhbGUoMS9zLndpZHRoLDEvcy5oZWlnaHQpLG8udHJhbnNsYXRlKHQuYW5jaG9yLngsdC5hbmNob3IueSksb30sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXI9bnVsbCx0aGlzLnRleHR1cmVQb29sLmNsZWFyKCExKX0sci5wcm90b3R5cGUuZ2V0T3B0aW1hbEZpbHRlclRleHR1cmU9ZnVuY3Rpb24oZSx0LGksbil7cmV0dXJuIGk9PT12b2lkIDAmJihpPTEpLG49PT12b2lkIDAmJihuPWh0Lk5PTkUpLHRoaXMudGV4dHVyZVBvb2wuZ2V0T3B0aW1hbFRleHR1cmUoZSx0LGksbil9LHIucHJvdG90eXBlLmdldEZpbHRlclRleHR1cmU9ZnVuY3Rpb24oZSx0LGkpe2lmKHR5cGVvZiBlPT0ibnVtYmVyIil7dmFyIG49ZTtlPXQsdD1ufWU9ZXx8dGhpcy5hY3RpdmVTdGF0ZS5yZW5kZXJUZXh0dXJlO3ZhciBhPXRoaXMudGV4dHVyZVBvb2wuZ2V0T3B0aW1hbFRleHR1cmUoZS53aWR0aCxlLmhlaWdodCx0fHxlLnJlc29sdXRpb24saXx8aHQuTk9ORSk7cmV0dXJuIGEuZmlsdGVyRnJhbWU9ZS5maWx0ZXJGcmFtZSxhfSxyLnByb3RvdHlwZS5yZXR1cm5GaWx0ZXJUZXh0dXJlPWZ1bmN0aW9uKGUpe3RoaXMudGV4dHVyZVBvb2wucmV0dXJuVGV4dHVyZShlKX0sci5wcm90b3R5cGUuZW1wdHlQb29sPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlUG9vbC5jbGVhcighMCl9LHIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZVBvb2wuc2V0U2NyZWVuU2l6ZSh0aGlzLnJlbmRlcmVyLnZpZXcpfSxyLnByb3RvdHlwZS50cmFuc2Zvcm1BQUJCPWZ1bmN0aW9uKGUsdCl7dmFyIGk9U3JbMF0sbj1TclsxXSxhPVNyWzJdLHM9U3JbM107aS5zZXQodC5sZWZ0LHQudG9wKSxuLnNldCh0LmxlZnQsdC5ib3R0b20pLGEuc2V0KHQucmlnaHQsdC50b3ApLHMuc2V0KHQucmlnaHQsdC5ib3R0b20pLGUuYXBwbHkoaSxpKSxlLmFwcGx5KG4sbiksZS5hcHBseShhLGEpLGUuYXBwbHkocyxzKTt2YXIgbz1NYXRoLm1pbihpLngsbi54LGEueCxzLngpLGg9TWF0aC5taW4oaS55LG4ueSxhLnkscy55KSx1PU1hdGgubWF4KGkueCxuLngsYS54LHMueCksbD1NYXRoLm1heChpLnksbi55LGEueSxzLnkpO3QueD1vLHQueT1oLHQud2lkdGg9dS1vLHQuaGVpZ2h0PWwtaH0sci5wcm90b3R5cGUucm91bmRGcmFtZT1mdW5jdGlvbihlLHQsaSxuLGEpe2lmKCEoZS53aWR0aDw9MHx8ZS5oZWlnaHQ8PTB8fGkud2lkdGg8PTB8fGkuaGVpZ2h0PD0wKSl7aWYoYSl7dmFyIHM9YS5hLG89YS5iLGg9YS5jLHU9YS5kO2lmKChNYXRoLmFicyhvKT4xZS00fHxNYXRoLmFicyhoKT4xZS00KSYmKE1hdGguYWJzKHMpPjFlLTR8fE1hdGguYWJzKHUpPjFlLTQpKXJldHVybn1hPWE/U2kuY29weUZyb20oYSk6U2kuaWRlbnRpdHkoKSxhLnRyYW5zbGF0ZSgtaS54LC1pLnkpLnNjYWxlKG4ud2lkdGgvaS53aWR0aCxuLmhlaWdodC9pLmhlaWdodCkudHJhbnNsYXRlKG4ueCxuLnkpLHRoaXMudHJhbnNmb3JtQUFCQihhLGUpLGUuY2VpbCh0KSx0aGlzLnRyYW5zZm9ybUFBQkIoYS5pbnZlcnQoKSxlKX19LHJ9KCksUHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZX1yZXR1cm4gci5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHIucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7fSxyLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5mbHVzaCgpfSxyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7fSxyfSgpLGFmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLnJlbmRlcmVyPWUsdGhpcy5lbXB0eVJlbmRlcmVyPW5ldyBQcihlKSx0aGlzLmN1cnJlbnRSZW5kZXJlcj10aGlzLmVtcHR5UmVuZGVyZXJ9cmV0dXJuIHIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyPWZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFJlbmRlcmVyIT09ZSYmKHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKSx0aGlzLmN1cnJlbnRSZW5kZXJlcj1lLHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCkpfSxyLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5lbXB0eVJlbmRlcmVyKX0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNldE9iamVjdFJlbmRlcmVyKHRoaXMuZW1wdHlSZW5kZXJlcil9LHIucHJvdG90eXBlLmNvcHlCb3VuZFRleHR1cmVzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPXRoaXMucmVuZGVyZXIudGV4dHVyZS5ib3VuZFRleHR1cmVzLG49dC0xO24+PTA7LS1uKWVbbl09aVtuXXx8bnVsbCxlW25dJiYoZVtuXS5fYmF0Y2hMb2NhdGlvbj1uKX0sci5wcm90b3R5cGUuYm91bmRBcnJheT1mdW5jdGlvbihlLHQsaSxuKXtmb3IodmFyIGE9ZS5lbGVtZW50cyxzPWUuaWRzLG89ZS5jb3VudCxoPTAsdT0wO3U8bzt1Kyspe3ZhciBsPWFbdV0sYz1sLl9iYXRjaExvY2F0aW9uO2lmKGM+PTAmJmM8biYmdFtjXT09PWwpe3NbdV09Yztjb250aW51ZX1mb3IoO2g8bjspe3ZhciBmPXRbaF07aWYoZiYmZi5fYmF0Y2hFbmFibGVkPT09aSYmZi5fYmF0Y2hMb2NhdGlvbj09PWgpe2grKztjb250aW51ZX1zW3VdPWgsbC5fYmF0Y2hMb2NhdGlvbj1oLHRbaF09bDticmVha319fSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlcj1udWxsfSxyfSgpLEVhPTAsc2Y9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLndlYkdMVmVyc2lvbj0xLHRoaXMuZXh0ZW5zaW9ucz17fSx0aGlzLnN1cHBvcnRzPXt1aW50MzJJbmRpY2VzOiExfSx0aGlzLmhhbmRsZUNvbnRleHRMb3N0PXRoaXMuaGFuZGxlQ29udGV4dExvc3QuYmluZCh0aGlzKSx0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZD10aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpLGUudmlldy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCExKSxlLnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCExKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJpc0xvc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5nbHx8dGhpcy5nbC5pc0NvbnRleHRMb3N0KCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUuY29udGV4dENoYW5nZT1mdW5jdGlvbihlKXt0aGlzLmdsPWUsdGhpcy5yZW5kZXJlci5nbD1lLHRoaXMucmVuZGVyZXIuQ09OVEVYVF9VSUQ9RWErKyxlLmlzQ29udGV4dExvc3QoKSYmZS5nZXRFeHRlbnNpb24oIldFQkdMX2xvc2VfY29udGV4dCIpJiZlLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0IikucmVzdG9yZUNvbnRleHQoKX0sci5wcm90b3R5cGUuaW5pdEZyb21Db250ZXh0PWZ1bmN0aW9uKGUpe3RoaXMuZ2w9ZSx0aGlzLnZhbGlkYXRlQ29udGV4dChlKSx0aGlzLnJlbmRlcmVyLmdsPWUsdGhpcy5yZW5kZXJlci5DT05URVhUX1VJRD1FYSsrLHRoaXMucmVuZGVyZXIucnVubmVycy5jb250ZXh0Q2hhbmdlLmVtaXQoZSl9LHIucHJvdG90eXBlLmluaXRGcm9tT3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZUNvbnRleHQodGhpcy5yZW5kZXJlci52aWV3LGUpO3RoaXMuaW5pdEZyb21Db250ZXh0KHQpfSxyLnByb3RvdHlwZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIGk7aWYoSS5QUkVGRVJfRU5WPj1qdC5XRUJHTDImJihpPWUuZ2V0Q29udGV4dCgid2ViZ2wyIix0KSksaSl0aGlzLndlYkdMVmVyc2lvbj0yO2Vsc2UgaWYodGhpcy53ZWJHTFZlcnNpb249MSxpPWUuZ2V0Q29udGV4dCgid2ViZ2wiLHQpfHxlLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsdCksIWkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIiKTtyZXR1cm4gdGhpcy5nbD1pLHRoaXMuZ2V0RXh0ZW5zaW9ucygpLHRoaXMuZ2x9LHIucHJvdG90eXBlLmdldEV4dGVuc2lvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdsLHQ9e2FuaXNvdHJvcGljRmlsdGVyaW5nOmUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSxmbG9hdFRleHR1cmVMaW5lYXI6ZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLHMzdGM6ZS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksczN0Y19zUkdCOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIiksZXRjOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksZXRjMTplLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxwdnJ0YzplLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksYXRjOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIiksYXN0YzplLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKX07dGhpcy53ZWJHTFZlcnNpb249PT0xP09iamVjdC5hc3NpZ24odGhpcy5leHRlbnNpb25zLHQse2RyYXdCdWZmZXJzOmUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxkZXB0aFRleHR1cmU6ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKSxsb3NlQ29udGV4dDplLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0IiksdmVydGV4QXJyYXlPYmplY3Q6ZS5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHVpbnQzMkVsZW1lbnRJbmRleDplLmdldEV4dGVuc2lvbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLGZsb2F0VGV4dHVyZTplLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKSxmbG9hdFRleHR1cmVMaW5lYXI6ZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLHRleHR1cmVIYWxmRmxvYXQ6ZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSx0ZXh0dXJlSGFsZkZsb2F0TGluZWFyOmUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpfSk6dGhpcy53ZWJHTFZlcnNpb249PT0yJiZPYmplY3QuYXNzaWduKHRoaXMuZXh0ZW5zaW9ucyx0LHtjb2xvckJ1ZmZlckZsb2F0OmUuZ2V0RXh0ZW5zaW9uKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iil9KX0sci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSxyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0UmVzdG9yZWQ9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnJ1bm5lcnMuY29udGV4dENoYW5nZS5lbWl0KHRoaXMuZ2wpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZW5kZXJlci52aWV3O3RoaXMucmVuZGVyZXI9bnVsbCxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHRoaXMuaGFuZGxlQ29udGV4dExvc3QpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKSx0aGlzLmdsLnVzZVByb2dyYW0obnVsbCksdGhpcy5leHRlbnNpb25zLmxvc2VDb250ZXh0JiZ0aGlzLmV4dGVuc2lvbnMubG9zZUNvbnRleHQubG9zZUNvbnRleHQoKX0sci5wcm90b3R5cGUucG9zdHJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIucmVuZGVyaW5nVG9TY3JlZW4mJnRoaXMuZ2wuZmx1c2goKX0sci5wcm90b3R5cGUudmFsaWRhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSxpPSJXZWJHTDJSZW5kZXJpbmdDb250ZXh0ImluIGdsb2JhbFRoaXMmJmUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLldlYkdMMlJlbmRlcmluZ0NvbnRleHQ7aSYmKHRoaXMud2ViR0xWZXJzaW9uPTIpLHQmJiF0LnN0ZW5jaWwmJmNvbnNvbGUud2FybigiUHJvdmlkZWQgV2ViR0wgY29udGV4dCBkb2VzIG5vdCBoYXZlIGEgc3RlbmNpbCBidWZmZXIsIG1hc2tzIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseSIpO3ZhciBuPWl8fCEhZS5nZXRFeHRlbnNpb24oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKTt0aGlzLnN1cHBvcnRzLnVpbnQzMkluZGljZXM9bixufHxjb25zb2xlLndhcm4oIlByb3ZpZGVkIFdlYkdMIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAzMiBpbmRleCBidWZmZXIsIGNvbXBsZXggZ3JhcGhpY3MgbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5Iil9LHJ9KCksb2Y9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMuZnJhbWVidWZmZXI9ZSx0aGlzLnN0ZW5jaWw9bnVsbCx0aGlzLmRpcnR5SWQ9LTEsdGhpcy5kaXJ0eUZvcm1hdD0tMSx0aGlzLmRpcnR5U2l6ZT0tMSx0aGlzLm11bHRpc2FtcGxlPWh0Lk5PTkUsdGhpcy5tc2FhQnVmZmVyPW51bGwsdGhpcy5ibGl0RnJhbWVidWZmZXI9bnVsbCx0aGlzLm1pcExldmVsPTB9cmV0dXJuIHJ9KCksaGY9bmV3IEgsdWY9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLm1hbmFnZWRGcmFtZWJ1ZmZlcnM9W10sdGhpcy51bmtub3duRnJhbWVidWZmZXI9bmV3IHdpKDEwLDEwKSx0aGlzLm1zYWFTYW1wbGVzPW51bGx9cmV0dXJuIHIucHJvdG90eXBlLmNvbnRleHRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdsPXRoaXMucmVuZGVyZXIuZ2w7aWYodGhpcy5DT05URVhUX1VJRD10aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlELHRoaXMuY3VycmVudD10aGlzLnVua25vd25GcmFtZWJ1ZmZlcix0aGlzLnZpZXdwb3J0PW5ldyBILHRoaXMuaGFzTVJUPSEwLHRoaXMud3JpdGVEZXB0aFRleHR1cmU9ITAsdGhpcy5kaXNwb3NlQWxsKCEwKSx0aGlzLnJlbmRlcmVyLmNvbnRleHQud2ViR0xWZXJzaW9uPT09MSl7dmFyIHQ9dGhpcy5yZW5kZXJlci5jb250ZXh0LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsaT10aGlzLnJlbmRlcmVyLmNvbnRleHQuZXh0ZW5zaW9ucy5kZXB0aFRleHR1cmU7SS5QUkVGRVJfRU5WPT09anQuV0VCR0xfTEVHQUNZJiYodD1udWxsLGk9bnVsbCksdD9lLmRyYXdCdWZmZXJzPWZ1bmN0aW9uKG4pe3JldHVybiB0LmRyYXdCdWZmZXJzV0VCR0wobil9Oih0aGlzLmhhc01SVD0hMSxlLmRyYXdCdWZmZXJzPWZ1bmN0aW9uKCl7fSksaXx8KHRoaXMud3JpdGVEZXB0aFRleHR1cmU9ITEpfWVsc2UgdGhpcy5tc2FhU2FtcGxlcz1lLmdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyKGUuUkVOREVSQlVGRkVSLGUuUkdCQTgsZS5TQU1QTEVTKX0sci5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsaSl7aT09PXZvaWQgMCYmKGk9MCk7dmFyIG49dGhpcy5nbDtpZihlKXt2YXIgYT1lLmdsRnJhbWVidWZmZXJzW3RoaXMuQ09OVEVYVF9VSURdfHx0aGlzLmluaXRGcmFtZWJ1ZmZlcihlKTt0aGlzLmN1cnJlbnQhPT1lJiYodGhpcy5jdXJyZW50PWUsbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixhLmZyYW1lYnVmZmVyKSksYS5taXBMZXZlbCE9PWkmJihlLmRpcnR5SWQrKyxlLmRpcnR5Rm9ybWF0KyssYS5taXBMZXZlbD1pKSxhLmRpcnR5SWQhPT1lLmRpcnR5SWQmJihhLmRpcnR5SWQ9ZS5kaXJ0eUlkLGEuZGlydHlGb3JtYXQhPT1lLmRpcnR5Rm9ybWF0PyhhLmRpcnR5Rm9ybWF0PWUuZGlydHlGb3JtYXQsYS5kaXJ0eVNpemU9ZS5kaXJ0eVNpemUsdGhpcy51cGRhdGVGcmFtZWJ1ZmZlcihlLGkpKTphLmRpcnR5U2l6ZSE9PWUuZGlydHlTaXplJiYoYS5kaXJ0eVNpemU9ZS5kaXJ0eVNpemUsdGhpcy5yZXNpemVGcmFtZWJ1ZmZlcihlKSkpO2Zvcih2YXIgcz0wO3M8ZS5jb2xvclRleHR1cmVzLmxlbmd0aDtzKyspe3ZhciBvPWUuY29sb3JUZXh0dXJlc1tzXTt0aGlzLnJlbmRlcmVyLnRleHR1cmUudW5iaW5kKG8ucGFyZW50VGV4dHVyZUFycmF5fHxvKX1pZihlLmRlcHRoVGV4dHVyZSYmdGhpcy5yZW5kZXJlci50ZXh0dXJlLnVuYmluZChlLmRlcHRoVGV4dHVyZSksdCl7dmFyIGg9dC53aWR0aD4+aSx1PXQuaGVpZ2h0Pj5pLGw9aC90LndpZHRoO3RoaXMuc2V0Vmlld3BvcnQodC54KmwsdC55KmwsaCx1KX1lbHNle3ZhciBoPWUud2lkdGg+PmksdT1lLmhlaWdodD4+aTt0aGlzLnNldFZpZXdwb3J0KDAsMCxoLHUpfX1lbHNlIHRoaXMuY3VycmVudCYmKHRoaXMuY3VycmVudD1udWxsLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsbnVsbCkpLHQ/dGhpcy5zZXRWaWV3cG9ydCh0LngsdC55LHQud2lkdGgsdC5oZWlnaHQpOnRoaXMuc2V0Vmlld3BvcnQoMCwwLHRoaXMucmVuZGVyZXIud2lkdGgsdGhpcy5yZW5kZXJlci5oZWlnaHQpfSxyLnByb3RvdHlwZS5zZXRWaWV3cG9ydD1mdW5jdGlvbihlLHQsaSxuKXt2YXIgYT10aGlzLnZpZXdwb3J0O2U9TWF0aC5yb3VuZChlKSx0PU1hdGgucm91bmQodCksaT1NYXRoLnJvdW5kKGkpLG49TWF0aC5yb3VuZChuKSwoYS53aWR0aCE9PWl8fGEuaGVpZ2h0IT09bnx8YS54IT09ZXx8YS55IT09dCkmJihhLng9ZSxhLnk9dCxhLndpZHRoPWksYS5oZWlnaHQ9bix0aGlzLmdsLnZpZXdwb3J0KGUsdCxpLG4pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudD97eDowLHk6MCx3aWR0aDp0aGlzLmN1cnJlbnQud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudC5oZWlnaHR9Ont4OjAseTowLHdpZHRoOnRoaXMucmVuZGVyZXIud2lkdGgsaGVpZ2h0OnRoaXMucmVuZGVyZXIuaGVpZ2h0fX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQsaSxuLGEpe2E9PT12b2lkIDAmJihhPXNyLkNPTE9SfHNyLkRFUFRIKTt2YXIgcz10aGlzLmdsO3MuY2xlYXJDb2xvcihlLHQsaSxuKSxzLmNsZWFyKGEpfSxyLnByb3RvdHlwZS5pbml0RnJhbWVidWZmZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nbCxpPW5ldyBvZih0LmNyZWF0ZUZyYW1lYnVmZmVyKCkpO3JldHVybiBpLm11bHRpc2FtcGxlPXRoaXMuZGV0ZWN0U2FtcGxlcyhlLm11bHRpc2FtcGxlKSxlLmdsRnJhbWVidWZmZXJzW3RoaXMuQ09OVEVYVF9VSURdPWksdGhpcy5tYW5hZ2VkRnJhbWVidWZmZXJzLnB1c2goZSksZS5kaXNwb3NlUnVubmVyLmFkZCh0aGlzKSxpfSxyLnByb3RvdHlwZS5yZXNpemVGcmFtZWJ1ZmZlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdsLGk9ZS5nbEZyYW1lYnVmZmVyc1t0aGlzLkNPTlRFWFRfVUlEXTtpLm1zYWFCdWZmZXImJih0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsaS5tc2FhQnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0LlJFTkRFUkJVRkZFUixpLm11bHRpc2FtcGxlLHQuUkdCQTgsZS53aWR0aCxlLmhlaWdodCkpLGkuc3RlbmNpbCYmKHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixpLnN0ZW5jaWwpLGkubXNhYUJ1ZmZlcj90LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0LlJFTkRFUkJVRkZFUixpLm11bHRpc2FtcGxlLHQuREVQVEgyNF9TVEVOQ0lMOCxlLndpZHRoLGUuaGVpZ2h0KTp0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsdC5ERVBUSF9TVEVOQ0lMLGUud2lkdGgsZS5oZWlnaHQpKTt2YXIgbj1lLmNvbG9yVGV4dHVyZXMsYT1uLmxlbmd0aDt0LmRyYXdCdWZmZXJzfHwoYT1NYXRoLm1pbihhLDEpKTtmb3IodmFyIHM9MDtzPGE7cysrKXt2YXIgbz1uW3NdLGg9by5wYXJlbnRUZXh0dXJlQXJyYXl8fG87dGhpcy5yZW5kZXJlci50ZXh0dXJlLmJpbmQoaCwwKX1lLmRlcHRoVGV4dHVyZSYmdGhpcy53cml0ZURlcHRoVGV4dHVyZSYmdGhpcy5yZW5kZXJlci50ZXh0dXJlLmJpbmQoZS5kZXB0aFRleHR1cmUsMCl9LHIucHJvdG90eXBlLnVwZGF0ZUZyYW1lYnVmZmVyPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nbCxuPWUuZ2xGcmFtZWJ1ZmZlcnNbdGhpcy5DT05URVhUX1VJRF0sYT1lLmNvbG9yVGV4dHVyZXMscz1hLmxlbmd0aDtpLmRyYXdCdWZmZXJzfHwocz1NYXRoLm1pbihzLDEpKSxuLm11bHRpc2FtcGxlPjEmJnRoaXMuY2FuTXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcihlKT8obi5tc2FhQnVmZmVyPW4ubXNhYUJ1ZmZlcnx8aS5jcmVhdGVSZW5kZXJidWZmZXIoKSxpLmJpbmRSZW5kZXJidWZmZXIoaS5SRU5ERVJCVUZGRVIsbi5tc2FhQnVmZmVyKSxpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShpLlJFTkRFUkJVRkZFUixuLm11bHRpc2FtcGxlLGkuUkdCQTgsZS53aWR0aCxlLmhlaWdodCksaS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihpLkZSQU1FQlVGRkVSLGkuQ09MT1JfQVRUQUNITUVOVDAsaS5SRU5ERVJCVUZGRVIsbi5tc2FhQnVmZmVyKSk6bi5tc2FhQnVmZmVyJiYoaS5kZWxldGVSZW5kZXJidWZmZXIobi5tc2FhQnVmZmVyKSxuLm1zYWFCdWZmZXI9bnVsbCxuLmJsaXRGcmFtZWJ1ZmZlciYmKG4uYmxpdEZyYW1lYnVmZmVyLmRpc3Bvc2UoKSxuLmJsaXRGcmFtZWJ1ZmZlcj1udWxsKSk7Zm9yKHZhciBvPVtdLGg9MDtoPHM7aCsrKXt2YXIgdT1hW2hdLGw9dS5wYXJlbnRUZXh0dXJlQXJyYXl8fHU7dGhpcy5yZW5kZXJlci50ZXh0dXJlLmJpbmQobCwwKSwhKGg9PT0wJiZuLm1zYWFCdWZmZXIpJiYoaS5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLkZSQU1FQlVGRkVSLGkuQ09MT1JfQVRUQUNITUVOVDAraCx1LnRhcmdldCxsLl9nbFRleHR1cmVzW3RoaXMuQ09OVEVYVF9VSURdLnRleHR1cmUsdCksby5wdXNoKGkuQ09MT1JfQVRUQUNITUVOVDAraCkpfWlmKG8ubGVuZ3RoPjEmJmkuZHJhd0J1ZmZlcnMobyksZS5kZXB0aFRleHR1cmUpe3ZhciBjPXRoaXMud3JpdGVEZXB0aFRleHR1cmU7aWYoYyl7dmFyIGY9ZS5kZXB0aFRleHR1cmU7dGhpcy5yZW5kZXJlci50ZXh0dXJlLmJpbmQoZiwwKSxpLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGkuRlJBTUVCVUZGRVIsaS5ERVBUSF9BVFRBQ0hNRU5ULGkuVEVYVFVSRV8yRCxmLl9nbFRleHR1cmVzW3RoaXMuQ09OVEVYVF9VSURdLnRleHR1cmUsdCl9fShlLnN0ZW5jaWx8fGUuZGVwdGgpJiYhKGUuZGVwdGhUZXh0dXJlJiZ0aGlzLndyaXRlRGVwdGhUZXh0dXJlKT8obi5zdGVuY2lsPW4uc3RlbmNpbHx8aS5jcmVhdGVSZW5kZXJidWZmZXIoKSxpLmJpbmRSZW5kZXJidWZmZXIoaS5SRU5ERVJCVUZGRVIsbi5zdGVuY2lsKSxuLm1zYWFCdWZmZXI/aS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoaS5SRU5ERVJCVUZGRVIsbi5tdWx0aXNhbXBsZSxpLkRFUFRIMjRfU1RFTkNJTDgsZS53aWR0aCxlLmhlaWdodCk6aS5yZW5kZXJidWZmZXJTdG9yYWdlKGkuUkVOREVSQlVGRkVSLGkuREVQVEhfU1RFTkNJTCxlLndpZHRoLGUuaGVpZ2h0KSxpLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGkuRlJBTUVCVUZGRVIsaS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsaS5SRU5ERVJCVUZGRVIsbi5zdGVuY2lsKSk6bi5zdGVuY2lsJiYoaS5kZWxldGVSZW5kZXJidWZmZXIobi5zdGVuY2lsKSxuLnN0ZW5jaWw9bnVsbCl9LHIucHJvdG90eXBlLmNhbk11bHRpc2FtcGxlRnJhbWVidWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuY29udGV4dC53ZWJHTFZlcnNpb24hPT0xJiZlLmNvbG9yVGV4dHVyZXMubGVuZ3RoPD0xJiYhZS5kZXB0aFRleHR1cmV9LHIucHJvdG90eXBlLmRldGVjdFNhbXBsZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tc2FhU2FtcGxlcyxpPWh0Lk5PTkU7aWYoZTw9MXx8dD09PW51bGwpcmV0dXJuIGk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXTw9ZSl7aT10W25dO2JyZWFrfXJldHVybiBpPT09MSYmKGk9aHQuTk9ORSksaX0sci5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcyxhPW4uY3VycmVudCxzPW4ucmVuZGVyZXIsbz1uLmdsLGg9bi5DT05URVhUX1VJRDtpZihzLmNvbnRleHQud2ViR0xWZXJzaW9uPT09MiYmYSl7dmFyIHU9YS5nbEZyYW1lYnVmZmVyc1toXTtpZih1KXtpZighZSl7aWYoIXUubXNhYUJ1ZmZlcilyZXR1cm47dmFyIGw9YS5jb2xvclRleHR1cmVzWzBdO2lmKCFsKXJldHVybjt1LmJsaXRGcmFtZWJ1ZmZlcnx8KHUuYmxpdEZyYW1lYnVmZmVyPW5ldyB3aShhLndpZHRoLGEuaGVpZ2h0KSx1LmJsaXRGcmFtZWJ1ZmZlci5hZGRDb2xvclRleHR1cmUoMCxsKSksZT11LmJsaXRGcmFtZWJ1ZmZlcixlLmNvbG9yVGV4dHVyZXNbMF0hPT1sJiYoZS5jb2xvclRleHR1cmVzWzBdPWwsZS5kaXJ0eUlkKyssZS5kaXJ0eUZvcm1hdCsrKSwoZS53aWR0aCE9PWEud2lkdGh8fGUuaGVpZ2h0IT09YS5oZWlnaHQpJiYoZS53aWR0aD1hLndpZHRoLGUuaGVpZ2h0PWEuaGVpZ2h0LGUuZGlydHlJZCsrLGUuZGlydHlTaXplKyspfXR8fCh0PWhmLHQud2lkdGg9YS53aWR0aCx0LmhlaWdodD1hLmhlaWdodCksaXx8KGk9dCk7dmFyIGM9dC53aWR0aD09PWkud2lkdGgmJnQuaGVpZ2h0PT09aS5oZWlnaHQ7dGhpcy5iaW5kKGUpLG8uYmluZEZyYW1lYnVmZmVyKG8uUkVBRF9GUkFNRUJVRkZFUix1LmZyYW1lYnVmZmVyKSxvLmJsaXRGcmFtZWJ1ZmZlcih0LmxlZnQsdC50b3AsdC5yaWdodCx0LmJvdHRvbSxpLmxlZnQsaS50b3AsaS5yaWdodCxpLmJvdHRvbSxvLkNPTE9SX0JVRkZFUl9CSVQsYz9vLk5FQVJFU1Q6by5MSU5FQVIpfX19LHIucHJvdG90eXBlLmRpc3Bvc2VGcmFtZWJ1ZmZlcj1mdW5jdGlvbihlLHQpe3ZhciBpPWUuZ2xGcmFtZWJ1ZmZlcnNbdGhpcy5DT05URVhUX1VJRF0sbj10aGlzLmdsO2lmKGkpe2RlbGV0ZSBlLmdsRnJhbWVidWZmZXJzW3RoaXMuQ09OVEVYVF9VSURdO3ZhciBhPXRoaXMubWFuYWdlZEZyYW1lYnVmZmVycy5pbmRleE9mKGUpO2E+PTAmJnRoaXMubWFuYWdlZEZyYW1lYnVmZmVycy5zcGxpY2UoYSwxKSxlLmRpc3Bvc2VSdW5uZXIucmVtb3ZlKHRoaXMpLHR8fChuLmRlbGV0ZUZyYW1lYnVmZmVyKGkuZnJhbWVidWZmZXIpLGkubXNhYUJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoaS5tc2FhQnVmZmVyKSxpLnN0ZW5jaWwmJm4uZGVsZXRlUmVuZGVyYnVmZmVyKGkuc3RlbmNpbCkpLGkuYmxpdEZyYW1lYnVmZmVyJiZpLmJsaXRGcmFtZWJ1ZmZlci5kaXNwb3NlKCl9fSxyLnByb3RvdHlwZS5kaXNwb3NlQWxsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWFuYWdlZEZyYW1lYnVmZmVyczt0aGlzLm1hbmFnZWRGcmFtZWJ1ZmZlcnM9W107Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdGhpcy5kaXNwb3NlRnJhbWVidWZmZXIodFtpXSxlKX0sci5wcm90b3R5cGUuZm9yY2VTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2lmKGUpe3ZhciB0PWUuZ2xGcmFtZWJ1ZmZlcnNbdGhpcy5DT05URVhUX1VJRF07aWYoISghdHx8dC5zdGVuY2lsKSl7ZS5zdGVuY2lsPSEwO3ZhciBpPWUud2lkdGgsbj1lLmhlaWdodCxhPXRoaXMuZ2wscz1hLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO2EuYmluZFJlbmRlcmJ1ZmZlcihhLlJFTkRFUkJVRkZFUixzKSx0Lm1zYWFCdWZmZXI/YS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoYS5SRU5ERVJCVUZGRVIsdC5tdWx0aXNhbXBsZSxhLkRFUFRIMjRfU1RFTkNJTDgsaSxuKTphLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMLGksbiksdC5zdGVuY2lsPXMsYS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihhLkZSQU1FQlVGRkVSLGEuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULGEuUkVOREVSQlVGRkVSLHMpfX19LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50PXRoaXMudW5rbm93bkZyYW1lYnVmZmVyLHRoaXMudmlld3BvcnQ9bmV3IEh9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCksUGk9ezUxMjY6NCw1MTIzOjIsNTEyMToxfSxsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMuX2FjdGl2ZUdlb21ldHJ5PW51bGwsdGhpcy5fYWN0aXZlVmFvPW51bGwsdGhpcy5oYXNWYW89ITAsdGhpcy5oYXNJbnN0YW5jZT0hMCx0aGlzLmNhblVzZVVJbnQzMkVsZW1lbnRJbmRleD0hMSx0aGlzLm1hbmFnZWRHZW9tZXRyaWVzPXt9fXJldHVybiByLnByb3RvdHlwZS5jb250ZXh0Q2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlQWxsKCEwKTt2YXIgZT10aGlzLmdsPXRoaXMucmVuZGVyZXIuZ2wsdD10aGlzLnJlbmRlcmVyLmNvbnRleHQ7aWYodGhpcy5DT05URVhUX1VJRD10aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlELHQud2ViR0xWZXJzaW9uIT09Mil7dmFyIGk9dGhpcy5yZW5kZXJlci5jb250ZXh0LmV4dGVuc2lvbnMudmVydGV4QXJyYXlPYmplY3Q7SS5QUkVGRVJfRU5WPT09anQuV0VCR0xfTEVHQUNZJiYoaT1udWxsKSxpPyhlLmNyZWF0ZVZlcnRleEFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKX0sZS5iaW5kVmVydGV4QXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuYmluZFZlcnRleEFycmF5T0VTKGEpfSxlLmRlbGV0ZVZlcnRleEFycmF5PWZ1bmN0aW9uKGEpe3JldHVybiBpLmRlbGV0ZVZlcnRleEFycmF5T0VTKGEpfSk6KHRoaXMuaGFzVmFvPSExLGUuY3JlYXRlVmVydGV4QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5iaW5kVmVydGV4QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5kZWxldGVWZXJ0ZXhBcnJheT1mdW5jdGlvbigpe3JldHVybiBudWxsfSl9aWYodC53ZWJHTFZlcnNpb24hPT0yKXt2YXIgbj1lLmdldEV4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpO24/KGUudmVydGV4QXR0cmliRGl2aXNvcj1mdW5jdGlvbihhLHMpe3JldHVybiBuLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShhLHMpfSxlLmRyYXdFbGVtZW50c0luc3RhbmNlZD1mdW5jdGlvbihhLHMsbyxoLHUpe3JldHVybiBuLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKGEscyxvLGgsdSl9LGUuZHJhd0FycmF5c0luc3RhbmNlZD1mdW5jdGlvbihhLHMsbyxoKXtyZXR1cm4gbi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoYSxzLG8saCl9KTp0aGlzLmhhc0luc3RhbmNlPSExfXRoaXMuY2FuVXNlVUludDMyRWxlbWVudEluZGV4PXQud2ViR0xWZXJzaW9uPT09Mnx8ISF0LmV4dGVuc2lvbnMudWludDMyRWxlbWVudEluZGV4fSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCl7dD10fHx0aGlzLnJlbmRlcmVyLnNoYWRlci5zaGFkZXI7dmFyIGk9dGhpcy5nbCxuPWUuZ2xWZXJ0ZXhBcnJheU9iamVjdHNbdGhpcy5DT05URVhUX1VJRF0sYT0hMTtufHwodGhpcy5tYW5hZ2VkR2VvbWV0cmllc1tlLmlkXT1lLGUuZGlzcG9zZVJ1bm5lci5hZGQodGhpcyksZS5nbFZlcnRleEFycmF5T2JqZWN0c1t0aGlzLkNPTlRFWFRfVUlEXT1uPXt9LGE9ITApO3ZhciBzPW5bdC5wcm9ncmFtLmlkXXx8dGhpcy5pbml0R2VvbWV0cnlWYW8oZSx0LGEpO3RoaXMuX2FjdGl2ZUdlb21ldHJ5PWUsdGhpcy5fYWN0aXZlVmFvIT09cyYmKHRoaXMuX2FjdGl2ZVZhbz1zLHRoaXMuaGFzVmFvP2kuYmluZFZlcnRleEFycmF5KHMpOnRoaXMuYWN0aXZhdGVWYW8oZSx0LnByb2dyYW0pKSx0aGlzLnVwZGF0ZUJ1ZmZlcnMoKX0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnVuYmluZCgpfSxyLnByb3RvdHlwZS51cGRhdGVCdWZmZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2FjdGl2ZUdlb21ldHJ5LHQ9dGhpcy5yZW5kZXJlci5idWZmZXIsaT0wO2k8ZS5idWZmZXJzLmxlbmd0aDtpKyspe3ZhciBuPWUuYnVmZmVyc1tpXTt0LnVwZGF0ZShuKX19LHIucHJvdG90eXBlLmNoZWNrQ29tcGF0aWJpbGl0eT1mdW5jdGlvbihlLHQpe3ZhciBpPWUuYXR0cmlidXRlcyxuPXQuYXR0cmlidXRlRGF0YTtmb3IodmFyIGEgaW4gbilpZighaVthXSl0aHJvdyBuZXcgRXJyb3IoJ3NoYWRlciBhbmQgZ2VvbWV0cnkgaW5jb21wYXRpYmxlLCBnZW9tZXRyeSBtaXNzaW5nIHRoZSAiJythKyciIGF0dHJpYnV0ZScpfSxyLnByb3RvdHlwZS5nZXRTaWduYXR1cmU9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmF0dHJpYnV0ZXMsbj10LmF0dHJpYnV0ZURhdGEsYT1bImciLGUuaWRdO2Zvcih2YXIgcyBpbiBpKW5bc10mJmEucHVzaChzLG5bc10ubG9jYXRpb24pO3JldHVybiBhLmpvaW4oIi0iKX0sci5wcm90b3R5cGUuaW5pdEdlb21ldHJ5VmFvPWZ1bmN0aW9uKGUsdCxpKXtpPT09dm9pZCAwJiYoaT0hMCk7dmFyIG49dGhpcy5nbCxhPXRoaXMuQ09OVEVYVF9VSUQscz10aGlzLnJlbmRlcmVyLmJ1ZmZlcixvPXQucHJvZ3JhbTtvLmdsUHJvZ3JhbXNbYV18fHRoaXMucmVuZGVyZXIuc2hhZGVyLmdlbmVyYXRlUHJvZ3JhbSh0KSx0aGlzLmNoZWNrQ29tcGF0aWJpbGl0eShlLG8pO3ZhciBoPXRoaXMuZ2V0U2lnbmF0dXJlKGUsbyksdT1lLmdsVmVydGV4QXJyYXlPYmplY3RzW3RoaXMuQ09OVEVYVF9VSURdLGw9dVtoXTtpZihsKXJldHVybiB1W28uaWRdPWwsbDt2YXIgYz1lLmJ1ZmZlcnMsZj1lLmF0dHJpYnV0ZXMsZD17fSxwPXt9O2Zvcih2YXIgdiBpbiBjKWRbdl09MCxwW3ZdPTA7Zm9yKHZhciB2IGluIGYpIWZbdl0uc2l6ZSYmby5hdHRyaWJ1dGVEYXRhW3ZdP2Zbdl0uc2l6ZT1vLmF0dHJpYnV0ZURhdGFbdl0uc2l6ZTpmW3ZdLnNpemV8fGNvbnNvbGUud2FybigiUElYSSBHZW9tZXRyeSBhdHRyaWJ1dGUgJyIrdisiJyBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChsaWtlbHkgdGhlIGJvdW5kIHNoYWRlciBkb2VzIG5vdCBoYXZlIHRoZSBhdHRyaWJ1dGUpIiksZFtmW3ZdLmJ1ZmZlcl0rPWZbdl0uc2l6ZSpQaVtmW3ZdLnR5cGVdO2Zvcih2YXIgdiBpbiBmKXt2YXIgXz1mW3ZdLG09Xy5zaXplO18uc3RyaWRlPT09dm9pZCAwJiYoZFtfLmJ1ZmZlcl09PT1tKlBpW18udHlwZV0/Xy5zdHJpZGU9MDpfLnN0cmlkZT1kW18uYnVmZmVyXSksXy5zdGFydD09PXZvaWQgMCYmKF8uc3RhcnQ9cFtfLmJ1ZmZlcl0scFtfLmJ1ZmZlcl0rPW0qUGlbXy50eXBlXSl9bD1uLmNyZWF0ZVZlcnRleEFycmF5KCksbi5iaW5kVmVydGV4QXJyYXkobCk7Zm9yKHZhciBnPTA7ZzxjLmxlbmd0aDtnKyspe3ZhciB5PWNbZ107cy5iaW5kKHkpLGkmJnkuX2dsQnVmZmVyc1thXS5yZWZDb3VudCsrfXJldHVybiB0aGlzLmFjdGl2YXRlVmFvKGUsbyksdGhpcy5fYWN0aXZlVmFvPWwsdVtvLmlkXT1sLHVbaF09bCxsfSxyLnByb3RvdHlwZS5kaXNwb3NlR2VvbWV0cnk9ZnVuY3Rpb24oZSx0KXt2YXIgaTtpZih0aGlzLm1hbmFnZWRHZW9tZXRyaWVzW2UuaWRdKXtkZWxldGUgdGhpcy5tYW5hZ2VkR2VvbWV0cmllc1tlLmlkXTt2YXIgbj1lLmdsVmVydGV4QXJyYXlPYmplY3RzW3RoaXMuQ09OVEVYVF9VSURdLGE9dGhpcy5nbCxzPWUuYnVmZmVycyxvPShpPXRoaXMucmVuZGVyZXIpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5idWZmZXI7aWYoZS5kaXNwb3NlUnVubmVyLnJlbW92ZSh0aGlzKSwhIW4pe2lmKG8pZm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspe3ZhciB1PXNbaF0uX2dsQnVmZmVyc1t0aGlzLkNPTlRFWFRfVUlEXTt1JiYodS5yZWZDb3VudC0tLHUucmVmQ291bnQ9PT0wJiYhdCYmby5kaXNwb3NlKHNbaF0sdCkpfWlmKCF0KXtmb3IodmFyIGwgaW4gbilpZihsWzBdPT09ImciKXt2YXIgYz1uW2xdO3RoaXMuX2FjdGl2ZVZhbz09PWMmJnRoaXMudW5iaW5kKCksYS5kZWxldGVWZXJ0ZXhBcnJheShjKX19ZGVsZXRlIGUuZ2xWZXJ0ZXhBcnJheU9iamVjdHNbdGhpcy5DT05URVhUX1VJRF19fX0sci5wcm90b3R5cGUuZGlzcG9zZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXModGhpcy5tYW5hZ2VkR2VvbWV0cmllcyksaT0wO2k8dC5sZW5ndGg7aSsrKXRoaXMuZGlzcG9zZUdlb21ldHJ5KHRoaXMubWFuYWdlZEdlb21ldHJpZXNbdFtpXV0sZSl9LHIucHJvdG90eXBlLmFjdGl2YXRlVmFvPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nbCxuPXRoaXMuQ09OVEVYVF9VSUQsYT10aGlzLnJlbmRlcmVyLmJ1ZmZlcixzPWUuYnVmZmVycyxvPWUuYXR0cmlidXRlcztlLmluZGV4QnVmZmVyJiZhLmJpbmQoZS5pbmRleEJ1ZmZlcik7dmFyIGg9bnVsbDtmb3IodmFyIHUgaW4gbyl7dmFyIGw9b1t1XSxjPXNbbC5idWZmZXJdLGY9Yy5fZ2xCdWZmZXJzW25dO2lmKHQuYXR0cmlidXRlRGF0YVt1XSl7aCE9PWYmJihhLmJpbmQoYyksaD1mKTt2YXIgZD10LmF0dHJpYnV0ZURhdGFbdV0ubG9jYXRpb247aWYoaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShkKSxpLnZlcnRleEF0dHJpYlBvaW50ZXIoZCxsLnNpemUsbC50eXBlfHxpLkZMT0FULGwubm9ybWFsaXplZCxsLnN0cmlkZSxsLnN0YXJ0KSxsLmluc3RhbmNlKWlmKHRoaXMuaGFzSW5zdGFuY2UpaS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGQsMSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImdlb21ldHJ5IGVycm9yLCBHUFUgSW5zdGFuY2luZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlIil9fX0sci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihlLHQsaSxuKXt2YXIgYT10aGlzLmdsLHM9dGhpcy5fYWN0aXZlR2VvbWV0cnk7aWYocy5pbmRleEJ1ZmZlcil7dmFyIG89cy5pbmRleEJ1ZmZlci5kYXRhLkJZVEVTX1BFUl9FTEVNRU5ULGg9bz09PTI/YS5VTlNJR05FRF9TSE9SVDphLlVOU0lHTkVEX0lOVDtvPT09Mnx8bz09PTQmJnRoaXMuY2FuVXNlVUludDMyRWxlbWVudEluZGV4P3MuaW5zdGFuY2VkP2EuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGUsdHx8cy5pbmRleEJ1ZmZlci5kYXRhLmxlbmd0aCxoLChpfHwwKSpvLG58fDEpOmEuZHJhd0VsZW1lbnRzKGUsdHx8cy5pbmRleEJ1ZmZlci5kYXRhLmxlbmd0aCxoLChpfHwwKSpvKTpjb25zb2xlLndhcm4oInVuc3VwcG9ydGVkIGluZGV4IGJ1ZmZlciB0eXBlOiB1aW50MzIiKX1lbHNlIHMuaW5zdGFuY2VkP2EuZHJhd0FycmF5c0luc3RhbmNlZChlLGksdHx8cy5nZXRTaXplKCksbnx8MSk6YS5kcmF3QXJyYXlzKGUsaSx0fHxzLmdldFNpemUoKSk7cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuZ2wuYmluZFZlcnRleEFycmF5KG51bGwpLHRoaXMuX2FjdGl2ZVZhbz1udWxsLHRoaXMuX2FjdGl2ZUdlb21ldHJ5PW51bGx9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCksZmY9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe2U9PT12b2lkIDAmJihlPW51bGwpLHRoaXMudHlwZT1kdC5OT05FLHRoaXMuYXV0b0RldGVjdD0hMCx0aGlzLm1hc2tPYmplY3Q9ZXx8bnVsbCx0aGlzLnBvb2xlZD0hMSx0aGlzLmlzTWFza0RhdGE9ITAsdGhpcy5yZXNvbHV0aW9uPW51bGwsdGhpcy5tdWx0aXNhbXBsZT1JLkZJTFRFUl9NVUxUSVNBTVBMRSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jb2xvck1hc2s9MTUsdGhpcy5fZmlsdGVycz1udWxsLHRoaXMuX3N0ZW5jaWxDb3VudGVyPTAsdGhpcy5fc2Npc3NvckNvdW50ZXI9MCx0aGlzLl9zY2lzc29yUmVjdD1udWxsLHRoaXMuX3NjaXNzb3JSZWN0TG9jYWw9bnVsbCx0aGlzLl9jb2xvck1hc2s9MTUsdGhpcy5fdGFyZ2V0PW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZmlsdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlcnM/dGhpcy5fZmlsdGVyc1swXTpudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7ZT90aGlzLl9maWx0ZXJzP3RoaXMuX2ZpbHRlcnNbMF09ZTp0aGlzLl9maWx0ZXJzPVtlXTp0aGlzLl9maWx0ZXJzPW51bGx9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnBvb2xlZCYmKHRoaXMubWFza09iamVjdD1udWxsLHRoaXMudHlwZT1kdC5OT05FLHRoaXMuYXV0b0RldGVjdD0hMCksdGhpcy5fdGFyZ2V0PW51bGwsdGhpcy5fc2Npc3NvclJlY3RMb2NhbD1udWxsfSxyLnByb3RvdHlwZS5jb3B5Q291bnRlcnNPclJlc2V0PWZ1bmN0aW9uKGUpe2U/KHRoaXMuX3N0ZW5jaWxDb3VudGVyPWUuX3N0ZW5jaWxDb3VudGVyLHRoaXMuX3NjaXNzb3JDb3VudGVyPWUuX3NjaXNzb3JDb3VudGVyLHRoaXMuX3NjaXNzb3JSZWN0PWUuX3NjaXNzb3JSZWN0KToodGhpcy5fc3RlbmNpbENvdW50ZXI9MCx0aGlzLl9zY2lzc29yQ291bnRlcj0wLHRoaXMuX3NjaXNzb3JSZWN0PW51bGwpfSxyfSgpO2Z1bmN0aW9uIHdhKHIsZSx0KXt2YXIgaT1yLmNyZWF0ZVNoYWRlcihlKTtyZXR1cm4gci5zaGFkZXJTb3VyY2UoaSx0KSxyLmNvbXBpbGVTaGFkZXIoaSksaX1mdW5jdGlvbiBTYShyLGUpe3ZhciB0PXIuZ2V0U2hhZGVyU291cmNlKGUpLnNwbGl0KGAKYCkubWFwKGZ1bmN0aW9uKHUsbCl7cmV0dXJuIGwrIjogIit1fSksaT1yLmdldFNoYWRlckluZm9Mb2coZSksbj1pLnNwbGl0KGAKYCksYT17fSxzPW4ubWFwKGZ1bmN0aW9uKHUpe3JldHVybiBwYXJzZUZsb2F0KHUucmVwbGFjZSgvXkVSUk9SXDogMFw6KFtcZF0rKVw6LiokLywiJDEiKSl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUmJiFhW3VdPyhhW3VdPSEwLCEwKTohMX0pLG89WyIiXTtzLmZvckVhY2goZnVuY3Rpb24odSl7dFt1LTFdPSIlYyIrdFt1LTFdKyIlYyIsby5wdXNoKCJiYWNrZ3JvdW5kOiAjRkYwMDAwOyBjb2xvcjojRkZGRkZGOyBmb250LXNpemU6IDEwcHgiLCJmb250LXNpemU6IDEwcHgiKX0pO3ZhciBoPXQuam9pbihgCmApO29bMF09aCxjb25zb2xlLmVycm9yKGkpLGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoImNsaWNrIHRvIHZpZXcgZnVsbCBzaGFkZXIgY29kZSIpLGNvbnNvbGUud2Fybi5hcHBseShjb25zb2xlLG8pLGNvbnNvbGUuZ3JvdXBFbmQoKX1mdW5jdGlvbiBjZihyLGUsdCxpKXtyLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxyLkxJTktfU1RBVFVTKXx8KHIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsci5DT01QSUxFX1NUQVRVUyl8fFNhKHIsdCksci5nZXRTaGFkZXJQYXJhbWV0ZXIoaSxyLkNPTVBJTEVfU1RBVFVTKXx8U2EocixpKSxjb25zb2xlLmVycm9yKCJQaXhpSlMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4iKSxyLmdldFByb2dyYW1JbmZvTG9nKGUpIT09IiImJmNvbnNvbGUud2FybigiUGl4aUpTIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLHIuZ2V0UHJvZ3JhbUluZm9Mb2coZSkpKX1mdW5jdGlvbiBSaShyKXtmb3IodmFyIGU9bmV3IEFycmF5KHIpLHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdPSExO3JldHVybiBlfWZ1bmN0aW9uIFBhKHIsZSl7c3dpdGNoKHIpe2Nhc2UiZmxvYXQiOnJldHVybiAwO2Nhc2UidmVjMiI6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiplKTtjYXNlInZlYzMiOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KDMqZSk7Y2FzZSJ2ZWM0IjpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0KmUpO2Nhc2UiaW50IjpjYXNlInVpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXIyREFycmF5IjpyZXR1cm4gMDtjYXNlIml2ZWMyIjpyZXR1cm4gbmV3IEludDMyQXJyYXkoMiplKTtjYXNlIml2ZWMzIjpyZXR1cm4gbmV3IEludDMyQXJyYXkoMyplKTtjYXNlIml2ZWM0IjpyZXR1cm4gbmV3IEludDMyQXJyYXkoNCplKTtjYXNlInV2ZWMyIjpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KDIqZSk7Y2FzZSJ1dmVjMyI6cmV0dXJuIG5ldyBVaW50MzJBcnJheSgzKmUpO2Nhc2UidXZlYzQiOnJldHVybiBuZXcgVWludDMyQXJyYXkoNCplKTtjYXNlImJvb2wiOnJldHVybiExO2Nhc2UiYnZlYzIiOnJldHVybiBSaSgyKmUpO2Nhc2UiYnZlYzMiOnJldHVybiBSaSgzKmUpO2Nhc2UiYnZlYzQiOnJldHVybiBSaSg0KmUpO2Nhc2UibWF0MiI6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDFdKTtjYXNlIm1hdDMiOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDEsMCwwLDAsMV0pO2Nhc2UibWF0NCI6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX1yZXR1cm4gbnVsbH12YXIgUmE9e30semU9UmE7ZnVuY3Rpb24gZGYoKXtpZih6ZT09PVJhfHx6ZSYmemUuaXNDb250ZXh0TG9zdCgpKXt2YXIgcj1JLkFEQVBURVIuY3JlYXRlQ2FudmFzKCksZT12b2lkIDA7SS5QUkVGRVJfRU5WPj1qdC5XRUJHTDImJihlPXIuZ2V0Q29udGV4dCgid2ViZ2wyIix7fSkpLGV8fChlPXIuZ2V0Q29udGV4dCgid2ViZ2wiLHt9KXx8ci5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHt9KSxlP2UuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTplPW51bGwpLHplPWV9cmV0dXJuIHplfXZhciBScjtmdW5jdGlvbiBwZigpe2lmKCFScil7UnI9U3QuTUVESVVNO3ZhciByPWRmKCk7aWYociYmci5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpe3ZhciBlPXIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHIuRlJBR01FTlRfU0hBREVSLHIuSElHSF9GTE9BVCk7UnI9ZS5wcmVjaXNpb24/U3QuSElHSDpTdC5NRURJVU19fXJldHVybiBScn1mdW5jdGlvbiBBYShyLGUsdCl7aWYoci5zdWJzdHJpbmcoMCw5KSE9PSJwcmVjaXNpb24iKXt2YXIgaT1lO3JldHVybiBlPT09U3QuSElHSCYmdCE9PVN0LkhJR0gmJihpPVN0Lk1FRElVTSksInByZWNpc2lvbiAiK2krYCBmbG9hdDsKYCtyfWVsc2UgaWYodCE9PVN0LkhJR0gmJnIuc3Vic3RyaW5nKDAsMTUpPT09InByZWNpc2lvbiBoaWdocCIpcmV0dXJuIHIucmVwbGFjZSgicHJlY2lzaW9uIGhpZ2hwIiwicHJlY2lzaW9uIG1lZGl1bXAiKTtyZXR1cm4gcn12YXIgdmY9e2Zsb2F0OjEsdmVjMjoyLHZlYzM6Myx2ZWM0OjQsaW50OjEsaXZlYzI6MixpdmVjMzozLGl2ZWM0OjQsdWludDoxLHV2ZWMyOjIsdXZlYzM6Myx1dmVjNDo0LGJvb2w6MSxidmVjMjoyLGJ2ZWMzOjMsYnZlYzQ6NCxtYXQyOjQsbWF0Mzo5LG1hdDQ6MTYsc2FtcGxlcjJEOjF9O2Z1bmN0aW9uIENhKHIpe3JldHVybiB2ZltyXX12YXIgQXI9bnVsbCxJYT17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsVU5TSUdORURfSU5UOiJ1aW50IixVTlNJR05FRF9JTlRfVkVDMjoidXZlYzIiLFVOU0lHTkVEX0lOVF9WRUMzOiJ1dmVjMyIsVU5TSUdORURfSU5UX1ZFQzQ6InV2ZWM0IixCT09MOiJib29sIixCT09MX1ZFQzI6ImJ2ZWMyIixCT09MX1ZFQzM6ImJ2ZWMzIixCT09MX1ZFQzQ6ImJ2ZWM0IixGTE9BVF9NQVQyOiJtYXQyIixGTE9BVF9NQVQzOiJtYXQzIixGTE9BVF9NQVQ0OiJtYXQ0IixTQU1QTEVSXzJEOiJzYW1wbGVyMkQiLElOVF9TQU1QTEVSXzJEOiJzYW1wbGVyMkQiLFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOiJzYW1wbGVyMkQiLFNBTVBMRVJfQ1VCRToic2FtcGxlckN1YmUiLElOVF9TQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIixVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOiJzYW1wbGVyQ3ViZSIsU0FNUExFUl8yRF9BUlJBWToic2FtcGxlcjJEQXJyYXkiLElOVF9TQU1QTEVSXzJEX0FSUkFZOiJzYW1wbGVyMkRBcnJheSIsVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6InNhbXBsZXIyREFycmF5In07ZnVuY3Rpb24gT2EocixlKXtpZighQXIpe3ZhciB0PU9iamVjdC5rZXlzKElhKTtBcj17fTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG49dFtpXTtBcltyW25dXT1JYVtuXX19cmV0dXJuIEFyW2VdfXZhciBBZT1be3Rlc3Q6ZnVuY3Rpb24ocil7cmV0dXJuIHIudHlwZT09PSJmbG9hdCImJnIuc2l6ZT09PTEmJiFyLmlzQXJyYXl9LGNvZGU6ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICBpZih1dlsiYCtyKyciXSAhPT0gdWRbIicrcitgIl0udmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVkWyJgK3IrJyJdLnZhbHVlID0gdXZbIicrcitgIl0KICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZih1ZFsiYCtyKyciXS5sb2NhdGlvbiwgdXZbIicrcitgIl0pCiAgICAgICAgICAgIH0KICAgICAgICAgICAgYH19LHt0ZXN0OmZ1bmN0aW9uKHIsZSl7cmV0dXJuKHIudHlwZT09PSJzYW1wbGVyMkQifHxyLnR5cGU9PT0ic2FtcGxlckN1YmUifHxyLnR5cGU9PT0ic2FtcGxlcjJEQXJyYXkiKSYmci5zaXplPT09MSYmIXIuaXNBcnJheSYmKGU9PW51bGx8fGUuY2FzdFRvQmFzZVRleHR1cmUhPT12b2lkIDApfSxjb2RlOmZ1bmN0aW9uKHIpe3JldHVybmB0ID0gc3luY0RhdGEudGV4dHVyZUNvdW50Kys7CgogICAgICAgICAgICByZW5kZXJlci50ZXh0dXJlLmJpbmQodXZbImArcitgIl0sIHQpOwoKICAgICAgICAgICAgaWYodWRbImArcitgIl0udmFsdWUgIT09IHQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHVkWyJgK3IrYCJdLnZhbHVlID0gdDsKICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xaSh1ZFsiYCtyK2AiXS5sb2NhdGlvbiwgdCk7CjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuCiAgICAgICAgICAgIH1gfX0se3Rlc3Q6ZnVuY3Rpb24ocixlKXtyZXR1cm4gci50eXBlPT09Im1hdDMiJiZyLnNpemU9PT0xJiYhci5pc0FycmF5JiZlLmEhPT12b2lkIDB9LGNvZGU6ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHVkWyJgK3IrJyJdLmxvY2F0aW9uLCBmYWxzZSwgdXZbIicrcitgIl0udG9BcnJheSh0cnVlKSk7CiAgICAgICAgICAgIGB9LGNvZGVVYm86ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICAgICAgdmFyIGArcisiX21hdHJpeCA9IHV2LiIrcitgLnRvQXJyYXkodHJ1ZSk7CgogICAgICAgICAgICAgICAgZGF0YVtvZmZzZXRdID0gYCtyK2BfbWF0cml4WzBdOwogICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQrMV0gPSBgK3IrYF9tYXRyaXhbMV07CiAgICAgICAgICAgICAgICBkYXRhW29mZnNldCsyXSA9IGArcitgX21hdHJpeFsyXTsKICAgICAgICAKICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgNF0gPSBgK3IrYF9tYXRyaXhbM107CiAgICAgICAgICAgICAgICBkYXRhW29mZnNldCArIDVdID0gYCtyK2BfbWF0cml4WzRdOwogICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyA2XSA9IGArcitgX21hdHJpeFs1XTsKICAgICAgICAKICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgOF0gPSBgK3IrYF9tYXRyaXhbNl07CiAgICAgICAgICAgICAgICBkYXRhW29mZnNldCArIDldID0gYCtyK2BfbWF0cml4WzddOwogICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAxMF0gPSBgK3IrYF9tYXRyaXhbOF07CiAgICAgICAgICAgIGB9fSx7dGVzdDpmdW5jdGlvbihyLGUpe3JldHVybiByLnR5cGU9PT0idmVjMiImJnIuc2l6ZT09PTEmJiFyLmlzQXJyYXkmJmUueCE9PXZvaWQgMH0sY29kZTpmdW5jdGlvbihyKXtyZXR1cm5gCiAgICAgICAgICAgICAgICBjdiA9IHVkWyJgK3IrYCJdLnZhbHVlOwogICAgICAgICAgICAgICAgdiA9IHV2WyJgK3IrYCJdOwoKICAgICAgICAgICAgICAgIGlmKGN2WzBdICE9PSB2LnggfHwgY3ZbMV0gIT09IHYueSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjdlswXSA9IHYueDsKICAgICAgICAgICAgICAgICAgICBjdlsxXSA9IHYueTsKICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYodWRbImArcitgIl0ubG9jYXRpb24sIHYueCwgdi55KTsKICAgICAgICAgICAgICAgIH1gfSxjb2RlVWJvOmZ1bmN0aW9uKHIpe3JldHVybmAKICAgICAgICAgICAgICAgIHYgPSB1di5gK3IrYDsKCiAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2Lng7CiAgICAgICAgICAgICAgICBkYXRhW29mZnNldCsxXSA9IHYueTsKICAgICAgICAgICAgYH19LHt0ZXN0OmZ1bmN0aW9uKHIpe3JldHVybiByLnR5cGU9PT0idmVjMiImJnIuc2l6ZT09PTEmJiFyLmlzQXJyYXl9LGNvZGU6ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICAgICAgY3YgPSB1ZFsiYCtyK2AiXS52YWx1ZTsKICAgICAgICAgICAgICAgIHYgPSB1dlsiYCtyK2AiXTsKCiAgICAgICAgICAgICAgICBpZihjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgICAgICAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZih1ZFsiYCtyK2AiXS5sb2NhdGlvbiwgdlswXSwgdlsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGB9fSx7dGVzdDpmdW5jdGlvbihyLGUpe3JldHVybiByLnR5cGU9PT0idmVjNCImJnIuc2l6ZT09PTEmJiFyLmlzQXJyYXkmJmUud2lkdGghPT12b2lkIDB9LGNvZGU6ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICAgICAgY3YgPSB1ZFsiYCtyK2AiXS52YWx1ZTsKICAgICAgICAgICAgICAgIHYgPSB1dlsiYCtyK2AiXTsKCiAgICAgICAgICAgICAgICBpZihjdlswXSAhPT0gdi54IHx8IGN2WzFdICE9PSB2LnkgfHwgY3ZbMl0gIT09IHYud2lkdGggfHwgY3ZbM10gIT09IHYuaGVpZ2h0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGN2WzBdID0gdi54OwogICAgICAgICAgICAgICAgICAgIGN2WzFdID0gdi55OwogICAgICAgICAgICAgICAgICAgIGN2WzJdID0gdi53aWR0aDsKICAgICAgICAgICAgICAgICAgICBjdlszXSA9IHYuaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm00Zih1ZFsiYCtyK2AiXS5sb2NhdGlvbiwgdi54LCB2LnksIHYud2lkdGgsIHYuaGVpZ2h0KQogICAgICAgICAgICAgICAgfWB9LGNvZGVVYm86ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICAgICAgICAgIHYgPSB1di5gK3IrYDsKCiAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXRdID0gdi54OwogICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KzFdID0gdi55OwogICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KzJdID0gdi53aWR0aDsKICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCszXSA9IHYuaGVpZ2h0OwogICAgICAgICAgICAgICAgYH19LHt0ZXN0OmZ1bmN0aW9uKHIpe3JldHVybiByLnR5cGU9PT0idmVjNCImJnIuc2l6ZT09PTEmJiFyLmlzQXJyYXl9LGNvZGU6ZnVuY3Rpb24ocil7cmV0dXJuYAogICAgICAgICAgICAgICAgY3YgPSB1ZFsiYCtyK2AiXS52YWx1ZTsKICAgICAgICAgICAgICAgIHYgPSB1dlsiYCtyK2AiXTsKCiAgICAgICAgICAgICAgICBpZihjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSB8fCBjdlsyXSAhPT0gdlsyXSB8fCBjdlszXSAhPT0gdlszXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgICAgICAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgICAgICAgICAgICAgIGN2WzJdID0gdlsyXTsKICAgICAgICAgICAgICAgICAgICBjdlszXSA9IHZbM107CgogICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm00Zih1ZFsiYCtyK2AiXS5sb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSwgdlszXSkKICAgICAgICAgICAgICAgIH1gfX1dLF9mPXtmbG9hdDpgCiAgICBpZiAoY3YgIT09IHYpCiAgICB7CiAgICAgICAgY3UudmFsdWUgPSB2OwogICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdik7CiAgICB9YCx2ZWMyOmAKICAgIGlmIChjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSkKICAgIHsKICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgY3ZbMV0gPSB2WzFdOwoKICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZbMF0sIHZbMV0pCiAgICB9YCx2ZWMzOmAKICAgIGlmIChjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSB8fCBjdlsyXSAhPT0gdlsyXSkKICAgIHsKICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgIGN2WzJdID0gdlsyXTsKCiAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKQogICAgfWAsdmVjNDpgCiAgICBpZiAoY3ZbMF0gIT09IHZbMF0gfHwgY3ZbMV0gIT09IHZbMV0gfHwgY3ZbMl0gIT09IHZbMl0gfHwgY3ZbM10gIT09IHZbM10pCiAgICB7CiAgICAgICAgY3ZbMF0gPSB2WzBdOwogICAgICAgIGN2WzFdID0gdlsxXTsKICAgICAgICBjdlsyXSA9IHZbMl07CiAgICAgICAgY3ZbM10gPSB2WzNdOwoKICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pOwogICAgfWAsaW50OmAKICAgIGlmIChjdiAhPT0gdikKICAgIHsKICAgICAgICBjdS52YWx1ZSA9IHY7CgogICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdik7CiAgICB9YCxpdmVjMjpgCiAgICBpZiAoY3ZbMF0gIT09IHZbMF0gfHwgY3ZbMV0gIT09IHZbMV0pCiAgICB7CiAgICAgICAgY3ZbMF0gPSB2WzBdOwogICAgICAgIGN2WzFdID0gdlsxXTsKCiAgICAgICAgZ2wudW5pZm9ybTJpKGxvY2F0aW9uLCB2WzBdLCB2WzFdKTsKICAgIH1gLGl2ZWMzOmAKICAgIGlmIChjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSB8fCBjdlsyXSAhPT0gdlsyXSkKICAgIHsKICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgIGN2WzJdID0gdlsyXTsKCiAgICAgICAgZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKTsKICAgIH1gLGl2ZWM0OmAKICAgIGlmIChjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSB8fCBjdlsyXSAhPT0gdlsyXSB8fCBjdlszXSAhPT0gdlszXSkKICAgIHsKICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgIGN2WzJdID0gdlsyXTsKICAgICAgICBjdlszXSA9IHZbM107CgogICAgICAgIGdsLnVuaWZvcm00aShsb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSwgdlszXSk7CiAgICB9YCx1aW50OmAKICAgIGlmIChjdiAhPT0gdikKICAgIHsKICAgICAgICBjdS52YWx1ZSA9IHY7CgogICAgICAgIGdsLnVuaWZvcm0xdWkobG9jYXRpb24sIHYpOwogICAgfWAsdXZlYzI6YAogICAgaWYgKGN2WzBdICE9PSB2WzBdIHx8IGN2WzFdICE9PSB2WzFdKQogICAgewogICAgICAgIGN2WzBdID0gdlswXTsKICAgICAgICBjdlsxXSA9IHZbMV07CgogICAgICAgIGdsLnVuaWZvcm0ydWkobG9jYXRpb24sIHZbMF0sIHZbMV0pOwogICAgfWAsdXZlYzM6YAogICAgaWYgKGN2WzBdICE9PSB2WzBdIHx8IGN2WzFdICE9PSB2WzFdIHx8IGN2WzJdICE9PSB2WzJdKQogICAgewogICAgICAgIGN2WzBdID0gdlswXTsKICAgICAgICBjdlsxXSA9IHZbMV07CiAgICAgICAgY3ZbMl0gPSB2WzJdOwoKICAgICAgICBnbC51bmlmb3JtM3VpKGxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKTsKICAgIH1gLHV2ZWM0OmAKICAgIGlmIChjdlswXSAhPT0gdlswXSB8fCBjdlsxXSAhPT0gdlsxXSB8fCBjdlsyXSAhPT0gdlsyXSB8fCBjdlszXSAhPT0gdlszXSkKICAgIHsKICAgICAgICBjdlswXSA9IHZbMF07CiAgICAgICAgY3ZbMV0gPSB2WzFdOwogICAgICAgIGN2WzJdID0gdlsyXTsKICAgICAgICBjdlszXSA9IHZbM107CgogICAgICAgIGdsLnVuaWZvcm00dWkobG9jYXRpb24sIHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pOwogICAgfWAsYm9vbDpgCiAgICBpZiAoY3YgIT09IHYpCiAgICB7CiAgICAgICAgY3UudmFsdWUgPSB2OwogICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdik7CiAgICB9YCxidmVjMjpgCiAgICBpZiAoY3ZbMF0gIT0gdlswXSB8fCBjdlsxXSAhPSB2WzFdKQogICAgewogICAgICAgIGN2WzBdID0gdlswXTsKICAgICAgICBjdlsxXSA9IHZbMV07CgogICAgICAgIGdsLnVuaWZvcm0yaShsb2NhdGlvbiwgdlswXSwgdlsxXSk7CiAgICB9YCxidmVjMzpgCiAgICBpZiAoY3ZbMF0gIT09IHZbMF0gfHwgY3ZbMV0gIT09IHZbMV0gfHwgY3ZbMl0gIT09IHZbMl0pCiAgICB7CiAgICAgICAgY3ZbMF0gPSB2WzBdOwogICAgICAgIGN2WzFdID0gdlsxXTsKICAgICAgICBjdlsyXSA9IHZbMl07CgogICAgICAgIGdsLnVuaWZvcm0zaShsb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSk7CiAgICB9YCxidmVjNDpgCiAgICBpZiAoY3ZbMF0gIT09IHZbMF0gfHwgY3ZbMV0gIT09IHZbMV0gfHwgY3ZbMl0gIT09IHZbMl0gfHwgY3ZbM10gIT09IHZbM10pCiAgICB7CiAgICAgICAgY3ZbMF0gPSB2WzBdOwogICAgICAgIGN2WzFdID0gdlsxXTsKICAgICAgICBjdlsyXSA9IHZbMl07CiAgICAgICAgY3ZbM10gPSB2WzNdOwoKICAgICAgICBnbC51bmlmb3JtNGkobG9jYXRpb24sIHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pOwogICAgfWAsbWF0MjoiZ2wudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgZmFsc2UsIHYpIixtYXQzOiJnbC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdikiLG1hdDQ6ImdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2KSIsc2FtcGxlcjJEOmAKICAgIGlmIChjdiAhPT0gdikKICAgIHsKICAgICAgICBjdS52YWx1ZSA9IHY7CgogICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdik7CiAgICB9YCxzYW1wbGVyQ3ViZTpgCiAgICBpZiAoY3YgIT09IHYpCiAgICB7CiAgICAgICAgY3UudmFsdWUgPSB2OwoKICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHYpOwogICAgfWAsc2FtcGxlcjJEQXJyYXk6YAogICAgaWYgKGN2ICE9PSB2KQogICAgewogICAgICAgIGN1LnZhbHVlID0gdjsKCiAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2KTsKICAgIH1gfSxtZj17ZmxvYXQ6ImdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHYpIix2ZWMyOiJnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2KSIsdmVjMzoiZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdikiLHZlYzQ6ImdsLnVuaWZvcm00ZnYobG9jYXRpb24sIHYpIixtYXQ0OiJnbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdikiLG1hdDM6ImdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGZhbHNlLCB2KSIsbWF0MjoiZ2wudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgZmFsc2UsIHYpIixpbnQ6ImdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHYpIixpdmVjMjoiZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdikiLGl2ZWMzOiJnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2KSIsaXZlYzQ6ImdsLnVuaWZvcm00aXYobG9jYXRpb24sIHYpIix1aW50OiJnbC51bmlmb3JtMXVpdihsb2NhdGlvbiwgdikiLHV2ZWMyOiJnbC51bmlmb3JtMnVpdihsb2NhdGlvbiwgdikiLHV2ZWMzOiJnbC51bmlmb3JtM3Vpdihsb2NhdGlvbiwgdikiLHV2ZWM0OiJnbC51bmlmb3JtNHVpdihsb2NhdGlvbiwgdikiLGJvb2w6ImdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHYpIixidmVjMjoiZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdikiLGJ2ZWMzOiJnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2KSIsYnZlYzQ6ImdsLnVuaWZvcm00aXYobG9jYXRpb24sIHYpIixzYW1wbGVyMkQ6ImdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHYpIixzYW1wbGVyQ3ViZToiZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdikiLHNhbXBsZXIyREFycmF5OiJnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2KSJ9O2Z1bmN0aW9uIGdmKHIsZSl7dmFyIHQsaT1bYAogICAgICAgIHZhciB2ID0gbnVsbDsKICAgICAgICB2YXIgY3YgPSBudWxsOwogICAgICAgIHZhciBjdSA9IG51bGw7CiAgICAgICAgdmFyIHQgPSAwOwogICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsOwogICAgYF07Zm9yKHZhciBuIGluIHIudW5pZm9ybXMpe3ZhciBhPWVbbl07aWYoIWEpeyEoKHQ9ci51bmlmb3Jtc1tuXSk9PT1udWxsfHx0PT09dm9pZCAwKSYmdC5ncm91cCYmKHIudW5pZm9ybXNbbl0udWJvP2kucHVzaChgCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNoYWRlci5zeW5jVW5pZm9ybUJ1ZmZlckdyb3VwKHV2LmArbisiLCAnIituK2AnKTsKICAgICAgICAgICAgICAgICAgICBgKTppLnB1c2goYAogICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5zaGFkZXIuc3luY1VuaWZvcm1Hcm91cCh1di5gK24rYCwgc3luY0RhdGEpOwogICAgICAgICAgICAgICAgICAgIGApKTtjb250aW51ZX1mb3IodmFyIHM9ci51bmlmb3Jtc1tuXSxvPSExLGg9MDtoPEFlLmxlbmd0aDtoKyspaWYoQWVbaF0udGVzdChhLHMpKXtpLnB1c2goQWVbaF0uY29kZShuLHMpKSxvPSEwO2JyZWFrfWlmKCFvKXt2YXIgdT1hLnNpemU9PT0xJiYhYS5pc0FycmF5P19mOm1mLGw9dVthLnR5cGVdLnJlcGxhY2UoImxvY2F0aW9uIiwndWRbIicrbisnIl0ubG9jYXRpb24nKTtpLnB1c2goYAogICAgICAgICAgICBjdSA9IHVkWyJgK24rYCJdOwogICAgICAgICAgICBjdiA9IGN1LnZhbHVlOwogICAgICAgICAgICB2ID0gdXZbImArbitgIl07CiAgICAgICAgICAgIGArbCsiOyIpfX1yZXR1cm4gbmV3IEZ1bmN0aW9uKCJ1ZCIsInV2IiwicmVuZGVyZXIiLCJzeW5jRGF0YSIsaS5qb2luKGAKYCkpfXZhciB5Zj1bInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIsInZvaWQgbWFpbih2b2lkKXsiLCJmbG9hdCB0ZXN0ID0gMC4xOyIsIiVmb3Jsb29wJSIsImdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTsiLCJ9Il0uam9pbihgCmApO2Z1bmN0aW9uIHhmKHIpe2Zvcih2YXIgZT0iIix0PTA7dDxyOysrdCl0PjAmJihlKz1gCmVsc2UgYCksdDxyLTEmJihlKz0iaWYodGVzdCA9PSAiK3QrIi4wKXt9Iik7cmV0dXJuIGV9ZnVuY3Rpb24gYmYocixlKXtpZihyPT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWUgb2YgYDBgIHBhc3NlZCB0byBgY2hlY2tNYXhJZlN0YXRlbWVudHNJblNoYWRlcmAiKTtmb3IodmFyIHQ9ZS5jcmVhdGVTaGFkZXIoZS5GUkFHTUVOVF9TSEFERVIpOzspe3ZhciBpPXlmLnJlcGxhY2UoLyVmb3Jsb29wJS9naSx4ZihyKSk7aWYoZS5zaGFkZXJTb3VyY2UodCxpKSxlLmNvbXBpbGVTaGFkZXIodCksIWUuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsZS5DT01QSUxFX1NUQVRVUykpcj1yLzJ8MDtlbHNlIGJyZWFrfXJldHVybiByfXZhciBXZTtmdW5jdGlvbiBUZigpe2lmKHR5cGVvZiBXZT09ImJvb2xlYW4iKXJldHVybiBXZTt0cnl7dmFyIHI9bmV3IEZ1bmN0aW9uKCJwYXJhbTEiLCJwYXJhbTIiLCJwYXJhbTMiLCJyZXR1cm4gcGFyYW0xW3BhcmFtMl0gPT09IHBhcmFtMzsiKTtXZT1yKHthOiJiIn0sImEiLCJiIik9PT0hMH1jYXRjaHtXZT0hMX1yZXR1cm4gV2V9dmFyIEVmPWB2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwoKdm9pZCBtYWluKHZvaWQpewogICBnbF9GcmFnQ29sb3IgKj0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsKfWAsd2Y9YGF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OwoKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7Cgp2b2lkIG1haW4odm9pZCl7CiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOwogICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsKfQpgLFNmPTAsQ3I9e30scWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpKXtpPT09dm9pZCAwJiYoaT0icGl4aS1zaGFkZXIiKSx0aGlzLmlkPVNmKyssdGhpcy52ZXJ0ZXhTcmM9ZXx8ci5kZWZhdWx0VmVydGV4U3JjLHRoaXMuZnJhZ21lbnRTcmM9dHx8ci5kZWZhdWx0RnJhZ21lbnRTcmMsdGhpcy52ZXJ0ZXhTcmM9dGhpcy52ZXJ0ZXhTcmMudHJpbSgpLHRoaXMuZnJhZ21lbnRTcmM9dGhpcy5mcmFnbWVudFNyYy50cmltKCksdGhpcy52ZXJ0ZXhTcmMuc3Vic3RyaW5nKDAsOCkhPT0iI3ZlcnNpb24iJiYoaT1pLnJlcGxhY2UoL1xzKy9nLCItIiksQ3JbaV0/KENyW2ldKyssaSs9Ii0iK0NyW2ldKTpDcltpXT0xLHRoaXMudmVydGV4U3JjPSIjZGVmaW5lIFNIQURFUl9OQU1FICIraStgCmArdGhpcy52ZXJ0ZXhTcmMsdGhpcy5mcmFnbWVudFNyYz0iI2RlZmluZSBTSEFERVJfTkFNRSAiK2krYApgK3RoaXMuZnJhZ21lbnRTcmMsdGhpcy52ZXJ0ZXhTcmM9QWEodGhpcy52ZXJ0ZXhTcmMsSS5QUkVDSVNJT05fVkVSVEVYLFN0LkhJR0gpLHRoaXMuZnJhZ21lbnRTcmM9QWEodGhpcy5mcmFnbWVudFNyYyxJLlBSRUNJU0lPTl9GUkFHTUVOVCxwZigpKSksdGhpcy5nbFByb2dyYW1zPXt9LHRoaXMuc3luY1VuaWZvcm1zPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0VmVydGV4U3JjIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHdmfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0RnJhZ21lbnRTcmMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRWZ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5mcm9tPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1lK3QsYT1oYVtuXTtyZXR1cm4gYXx8KGhhW25dPWE9bmV3IHIoZSx0LGkpKSxhfSxyfSgpLEp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe3RoaXMudW5pZm9ybUJpbmRDb3VudD0wLHRoaXMucHJvZ3JhbT1lLHQ/dCBpbnN0YW5jZW9mIGNlP3RoaXMudW5pZm9ybUdyb3VwPXQ6dGhpcy51bmlmb3JtR3JvdXA9bmV3IGNlKHQpOnRoaXMudW5pZm9ybUdyb3VwPW5ldyBjZSh7fSksdGhpcy5kaXNwb3NlUnVubmVyPW5ldyB4dCgiZGlzcG9zZVNoYWRlciIpfXJldHVybiByLnByb3RvdHlwZS5jaGVja1VuaWZvcm1FeGlzdHM9ZnVuY3Rpb24oZSx0KXtpZih0LnVuaWZvcm1zW2VdKXJldHVybiEwO2Zvcih2YXIgaSBpbiB0LnVuaWZvcm1zKXt2YXIgbj10LnVuaWZvcm1zW2ldO2lmKG4uZ3JvdXAmJnRoaXMuY2hlY2tVbmlmb3JtRXhpc3RzKGUsbikpcmV0dXJuITB9cmV0dXJuITF9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVuaWZvcm1Hcm91cD1udWxsLHRoaXMuZGlzcG9zZVJ1bm5lci5lbWl0KHRoaXMpLHRoaXMuZGlzcG9zZVJ1bm5lci5kZXN0cm95KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwidW5pZm9ybXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3JtR3JvdXAudW5pZm9ybXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5mcm9tPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1xZS5mcm9tKGUsdCk7cmV0dXJuIG5ldyByKG4saSl9LHJ9KCksQWk9MCxDaT0xLElpPTIsT2k9MyxNaT00LERpPTUsZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7dGhpcy5kYXRhPTAsdGhpcy5ibGVuZE1vZGU9Ti5OT1JNQUwsdGhpcy5wb2x5Z29uT2Zmc2V0PTAsdGhpcy5ibGVuZD0hMCx0aGlzLmRlcHRoTWFzaz0hMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJibGVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMuZGF0YSYxPDxBaSl9LHNldDpmdW5jdGlvbihlKXshISh0aGlzLmRhdGEmMTw8QWkpIT09ZSYmKHRoaXMuZGF0YV49MTw8QWkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwib2Zmc2V0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMuZGF0YSYxPDxDaSl9LHNldDpmdW5jdGlvbihlKXshISh0aGlzLmRhdGEmMTw8Q2kpIT09ZSYmKHRoaXMuZGF0YV49MTw8Q2kpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiY3VsbGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMuZGF0YSYxPDxJaSl9LHNldDpmdW5jdGlvbihlKXshISh0aGlzLmRhdGEmMTw8SWkpIT09ZSYmKHRoaXMuZGF0YV49MTw8SWkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZGVwdGhUZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5kYXRhJjE8PE9pKX0sc2V0OmZ1bmN0aW9uKGUpeyEhKHRoaXMuZGF0YSYxPDxPaSkhPT1lJiYodGhpcy5kYXRhXj0xPDxPaSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJkZXB0aE1hc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmRhdGEmMTw8RGkpfSxzZXQ6ZnVuY3Rpb24oZSl7ISEodGhpcy5kYXRhJjE8PERpKSE9PWUmJih0aGlzLmRhdGFePTE8PERpKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImNsb2Nrd2lzZUZyb250RmFjZSIse2dldDpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMuZGF0YSYxPDxNaSl9LHNldDpmdW5jdGlvbihlKXshISh0aGlzLmRhdGEmMTw8TWkpIT09ZSYmKHRoaXMuZGF0YV49MTw8TWkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiYmxlbmRNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JsZW5kTW9kZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuYmxlbmQ9ZSE9PU4uTk9ORSx0aGlzLl9ibGVuZE1vZGU9ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInBvbHlnb25PZmZzZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9seWdvbk9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0cz0hIWUsdGhpcy5fcG9seWdvbk9mZnNldD1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltAcGl4aS9jb3JlOlN0YXRlICIrKCJibGVuZE1vZGU9Iit0aGlzLmJsZW5kTW9kZSsiICIpKygiY2xvY2t3aXNlRnJvbnRGYWNlPSIrdGhpcy5jbG9ja3dpc2VGcm9udEZhY2UrIiAiKSsoImN1bGxpbmc9Iit0aGlzLmN1bGxpbmcrIiAiKSsoImRlcHRoTWFzaz0iK3RoaXMuZGVwdGhNYXNrKyIgIikrKCJwb2x5Z29uT2Zmc2V0PSIrdGhpcy5wb2x5Z29uT2Zmc2V0KSsiXSJ9LHIuZm9yMmQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcjtyZXR1cm4gZS5kZXB0aFRlc3Q9ITEsZS5ibGVuZD0hMCxlfSxyfSgpLFBmPWB2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwoKdm9pZCBtYWluKHZvaWQpewogICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOwp9CmAsUmY9YGF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OwoKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7Cgp1bmlmb3JtIHZlYzQgaW5wdXRTaXplOwp1bmlmb3JtIHZlYzQgb3V0cHV0RnJhbWU7Cgp2ZWM0IGZpbHRlclZlcnRleFBvc2l0aW9uKCB2b2lkICkKewogICAgdmVjMiBwb3NpdGlvbiA9IGFWZXJ0ZXhQb3NpdGlvbiAqIG1heChvdXRwdXRGcmFtZS56dywgdmVjMigwLikpICsgb3V0cHV0RnJhbWUueHk7CgogICAgcmV0dXJuIHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOwp9Cgp2ZWMyIGZpbHRlclRleHR1cmVDb29yZCggdm9pZCApCnsKICAgIHJldHVybiBhVmVydGV4UG9zaXRpb24gKiAob3V0cHV0RnJhbWUuencgKiBpbnB1dFNpemUuencpOwp9Cgp2b2lkIG1haW4odm9pZCkKewogICAgZ2xfUG9zaXRpb24gPSBmaWx0ZXJWZXJ0ZXhQb3NpdGlvbigpOwogICAgdlRleHR1cmVDb29yZCA9IGZpbHRlclRleHR1cmVDb29yZCgpOwp9CmAsUXQ9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCxpLG4pe3ZhciBhPXRoaXMscz1xZS5mcm9tKHR8fGUuZGVmYXVsdFZlcnRleFNyYyxpfHxlLmRlZmF1bHRGcmFnbWVudFNyYyk7cmV0dXJuIGE9ci5jYWxsKHRoaXMscyxuKXx8dGhpcyxhLnBhZGRpbmc9MCxhLnJlc29sdXRpb249SS5GSUxURVJfUkVTT0xVVElPTixhLm11bHRpc2FtcGxlPUkuRklMVEVSX01VTFRJU0FNUExFLGEuZW5hYmxlZD0hMCxhLmF1dG9GaXQ9ITAsYS5zdGF0ZT1uZXcgZGUsYX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24odCxpLG4sYSxzKXt0LmFwcGx5RmlsdGVyKHRoaXMsaSxuLGEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImJsZW5kTW9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmJsZW5kTW9kZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuc3RhdGUuYmxlbmRNb2RlPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXNvbHV0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdXRpb259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9yZXNvbHV0aW9uPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHRWZXJ0ZXhTcmMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmZ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHRGcmFnbWVudFNyYyIse2dldDpmdW5jdGlvbigpe3JldHVybiBQZn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfShKdCksQWY9YGF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4Owp1bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7Cgp2YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDsKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7Cgp2b2lkIG1haW4odm9pZCkKewogICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7CgogICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7CiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7CnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7CnVuaWZvcm0gZmxvYXQgYWxwaGE7CnVuaWZvcm0gZmxvYXQgbnBtQWxwaGE7CnVuaWZvcm0gdmVjNCBtYXNrQ2xhbXA7Cgp2b2lkIG1haW4odm9pZCkKewogICAgZmxvYXQgY2xpcCA9IHN0ZXAoMy41LAogICAgICAgIHN0ZXAobWFza0NsYW1wLngsIHZNYXNrQ29vcmQueCkgKwogICAgICAgIHN0ZXAobWFza0NsYW1wLnksIHZNYXNrQ29vcmQueSkgKwogICAgICAgIHN0ZXAodk1hc2tDb29yZC54LCBtYXNrQ2xhbXAueikgKwogICAgICAgIHN0ZXAodk1hc2tDb29yZC55LCBtYXNrQ2xhbXAudykpOwoKICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOwogICAgdmVjNCBtYXNreSA9IHRleHR1cmUyRChtYXNrLCB2TWFza0Nvb3JkKTsKICAgIGZsb2F0IGFscGhhTXVsID0gMS4wIC0gbnBtQWxwaGEgKiAoMS4wIC0gbWFza3kuYSk7CgogICAgb3JpZ2luYWwgKj0gKGFscGhhTXVsICogbWFza3kuciAqIGFscGhhICogY2xpcCk7CgogICAgZ2xfRnJhZ0NvbG9yID0gb3JpZ2luYWw7Cn0KYCxNYT1uZXcgdnQsRmk9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7dGhpcy5fdGV4dHVyZT1lLHRoaXMubWFwQ29vcmQ9bmV3IHZ0LHRoaXMudUNsYW1wRnJhbWU9bmV3IEZsb2F0MzJBcnJheSg0KSx0aGlzLnVDbGFtcE9mZnNldD1uZXcgRmxvYXQzMkFycmF5KDIpLHRoaXMuX3RleHR1cmVJRD0tMSx0aGlzLl91cGRhdGVJRD0wLHRoaXMuY2xhbXBPZmZzZXQ9MCx0aGlzLmNsYW1wTWFyZ2luPXR5cGVvZiB0PiJ1Ij8uNTp0LHRoaXMuaXNTaW1wbGU9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwidGV4dHVyZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXh0dXJlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fdGV4dHVyZT1lLHRoaXMuX3RleHR1cmVJRD0tMX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS5tdWx0aXBseVV2cz1mdW5jdGlvbihlLHQpe3Q9PT12b2lkIDAmJih0PWUpO2Zvcih2YXIgaT10aGlzLm1hcENvb3JkLG49MDtuPGUubGVuZ3RoO24rPTIpe3ZhciBhPWVbbl0scz1lW24rMV07dFtuXT1hKmkuYStzKmkuYytpLnR4LHRbbisxXT1hKmkuYitzKmkuZCtpLnR5fXJldHVybiB0fSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdGV4dHVyZTtpZighdHx8IXQudmFsaWR8fCFlJiZ0aGlzLl90ZXh0dXJlSUQ9PT10Ll91cGRhdGVJRClyZXR1cm4hMTt0aGlzLl90ZXh0dXJlSUQ9dC5fdXBkYXRlSUQsdGhpcy5fdXBkYXRlSUQrKzt2YXIgaT10Ll91dnM7dGhpcy5tYXBDb29yZC5zZXQoaS54MS1pLngwLGkueTEtaS55MCxpLngzLWkueDAsaS55My1pLnkwLGkueDAsaS55MCk7dmFyIG49dC5vcmlnLGE9dC50cmltO2EmJihNYS5zZXQobi53aWR0aC9hLndpZHRoLDAsMCxuLmhlaWdodC9hLmhlaWdodCwtYS54L2Eud2lkdGgsLWEueS9hLmhlaWdodCksdGhpcy5tYXBDb29yZC5hcHBlbmQoTWEpKTt2YXIgcz10LmJhc2VUZXh0dXJlLG89dGhpcy51Q2xhbXBGcmFtZSxoPXRoaXMuY2xhbXBNYXJnaW4vcy5yZXNvbHV0aW9uLHU9dGhpcy5jbGFtcE9mZnNldDtyZXR1cm4gb1swXT0odC5fZnJhbWUueCtoK3UpL3Mud2lkdGgsb1sxXT0odC5fZnJhbWUueStoK3UpL3MuaGVpZ2h0LG9bMl09KHQuX2ZyYW1lLngrdC5fZnJhbWUud2lkdGgtaCt1KS9zLndpZHRoLG9bM109KHQuX2ZyYW1lLnkrdC5fZnJhbWUuaGVpZ2h0LWgrdSkvcy5oZWlnaHQsdGhpcy51Q2xhbXBPZmZzZXRbMF09dS9zLnJlYWxXaWR0aCx0aGlzLnVDbGFtcE9mZnNldFsxXT11L3MucmVhbEhlaWdodCx0aGlzLmlzU2ltcGxlPXQuX2ZyYW1lLndpZHRoPT09cy53aWR0aCYmdC5fZnJhbWUuaGVpZ2h0PT09cy5oZWlnaHQmJnQucm90YXRlPT09MCwhMH0scn0oKSxJZj1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0LGksbil7dmFyIGE9dGhpcyxzPW51bGw7cmV0dXJuIHR5cGVvZiB0IT0ic3RyaW5nIiYmaT09PXZvaWQgMCYmbj09PXZvaWQgMCYmKHM9dCx0PXZvaWQgMCxpPXZvaWQgMCxuPXZvaWQgMCksYT1yLmNhbGwodGhpcyx0fHxBZixpfHxDZixuKXx8dGhpcyxhLm1hc2tTcHJpdGU9cyxhLm1hc2tNYXRyaXg9bmV3IHZ0LGF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibWFza1Nwcml0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXNrU3ByaXRlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFza1Nwcml0ZT10LHRoaXMuX21hc2tTcHJpdGUmJih0aGlzLl9tYXNrU3ByaXRlLnJlbmRlcmFibGU9ITEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKHQsaSxuLGEpe3ZhciBzPXRoaXMuX21hc2tTcHJpdGUsbz1zLl90ZXh0dXJlO28udmFsaWQmJihvLnV2TWF0cml4fHwoby51dk1hdHJpeD1uZXcgRmkobywwKSksby51dk1hdHJpeC51cGRhdGUoKSx0aGlzLnVuaWZvcm1zLm5wbUFscGhhPW8uYmFzZVRleHR1cmUuYWxwaGFNb2RlPzA6MSx0aGlzLnVuaWZvcm1zLm1hc2s9byx0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4PXQuY2FsY3VsYXRlU3ByaXRlTWF0cml4KHRoaXMubWFza01hdHJpeCxzKS5wcmVwZW5kKG8udXZNYXRyaXgubWFwQ29vcmQpLHRoaXMudW5pZm9ybXMuYWxwaGE9cy53b3JsZEFscGhhLHRoaXMudW5pZm9ybXMubWFza0NsYW1wPW8udXZNYXRyaXgudUNsYW1wRnJhbWUsdC5hcHBseUZpbHRlcih0aGlzLGksbixhKSl9LGV9KFF0KSxPZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMuZW5hYmxlU2Npc3Nvcj0hMCx0aGlzLmFscGhhTWFza1Bvb2w9W10sdGhpcy5tYXNrRGF0YVBvb2w9W10sdGhpcy5tYXNrU3RhY2s9W10sdGhpcy5hbHBoYU1hc2tJbmRleD0wfXJldHVybiByLnByb3RvdHlwZS5zZXRNYXNrU3RhY2s9ZnVuY3Rpb24oZSl7dGhpcy5tYXNrU3RhY2s9ZSx0aGlzLnJlbmRlcmVyLnNjaXNzb3Iuc2V0TWFza1N0YWNrKGUpLHRoaXMucmVuZGVyZXIuc3RlbmNpbC5zZXRNYXNrU3RhY2soZSl9LHIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgaT10O2lmKCFpLmlzTWFza0RhdGEpe3ZhciBuPXRoaXMubWFza0RhdGFQb29sLnBvcCgpfHxuZXcgZmY7bi5wb29sZWQ9ITAsbi5tYXNrT2JqZWN0PXQsaT1ufXZhciBhPXRoaXMubWFza1N0YWNrLmxlbmd0aCE9PTA/dGhpcy5tYXNrU3RhY2tbdGhpcy5tYXNrU3RhY2subGVuZ3RoLTFdOm51bGw7aWYoaS5jb3B5Q291bnRlcnNPclJlc2V0KGEpLGkuX2NvbG9yTWFzaz1hP2EuX2NvbG9yTWFzazoxNSxpLmF1dG9EZXRlY3QmJnRoaXMuZGV0ZWN0KGkpLGkuX3RhcmdldD1lLGkudHlwZSE9PWR0LlNQUklURSYmdGhpcy5tYXNrU3RhY2sucHVzaChpKSxpLmVuYWJsZWQpc3dpdGNoKGkudHlwZSl7Y2FzZSBkdC5TQ0lTU09SOnRoaXMucmVuZGVyZXIuc2Npc3Nvci5wdXNoKGkpO2JyZWFrO2Nhc2UgZHQuU1RFTkNJTDp0aGlzLnJlbmRlcmVyLnN0ZW5jaWwucHVzaChpKTticmVhaztjYXNlIGR0LlNQUklURTppLmNvcHlDb3VudGVyc09yUmVzZXQobnVsbCksdGhpcy5wdXNoU3ByaXRlTWFzayhpKTticmVhaztjYXNlIGR0LkNPTE9SOnRoaXMucHVzaENvbG9yTWFzayhpKTticmVha31pLnR5cGU9PT1kdC5TUFJJVEUmJnRoaXMubWFza1N0YWNrLnB1c2goaSl9LHIucHJvdG90eXBlLnBvcD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hc2tTdGFjay5wb3AoKTtpZighKCF0fHx0Ll90YXJnZXQhPT1lKSl7aWYodC5lbmFibGVkKXN3aXRjaCh0LnR5cGUpe2Nhc2UgZHQuU0NJU1NPUjp0aGlzLnJlbmRlcmVyLnNjaXNzb3IucG9wKHQpO2JyZWFrO2Nhc2UgZHQuU1RFTkNJTDp0aGlzLnJlbmRlcmVyLnN0ZW5jaWwucG9wKHQubWFza09iamVjdCk7YnJlYWs7Y2FzZSBkdC5TUFJJVEU6dGhpcy5wb3BTcHJpdGVNYXNrKHQpO2JyZWFrO2Nhc2UgZHQuQ09MT1I6dGhpcy5wb3BDb2xvck1hc2sodCk7YnJlYWt9aWYodC5yZXNldCgpLHQucG9vbGVkJiZ0aGlzLm1hc2tEYXRhUG9vbC5wdXNoKHQpLHRoaXMubWFza1N0YWNrLmxlbmd0aCE9PTApe3ZhciBpPXRoaXMubWFza1N0YWNrW3RoaXMubWFza1N0YWNrLmxlbmd0aC0xXTtpLnR5cGU9PT1kdC5TUFJJVEUmJmkuX2ZpbHRlcnMmJihpLl9maWx0ZXJzWzBdLm1hc2tTcHJpdGU9aS5tYXNrT2JqZWN0KX19fSxyLnByb3RvdHlwZS5kZXRlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXNrT2JqZWN0O3Q/dC5pc1Nwcml0ZT9lLnR5cGU9ZHQuU1BSSVRFOnRoaXMuZW5hYmxlU2Npc3NvciYmdGhpcy5yZW5kZXJlci5zY2lzc29yLnRlc3RTY2lzc29yKGUpP2UudHlwZT1kdC5TQ0lTU09SOmUudHlwZT1kdC5TVEVOQ0lMOmUudHlwZT1kdC5DT0xPUn0sci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2s9ZnVuY3Rpb24oZSl7dmFyIHQsaSxuPWUubWFza09iamVjdCxhPWUuX3RhcmdldCxzPWUuX2ZpbHRlcnM7c3x8KHM9dGhpcy5hbHBoYU1hc2tQb29sW3RoaXMuYWxwaGFNYXNrSW5kZXhdLHN8fChzPXRoaXMuYWxwaGFNYXNrUG9vbFt0aGlzLmFscGhhTWFza0luZGV4XT1bbmV3IElmXSkpO3ZhciBvPXRoaXMucmVuZGVyZXIsaD1vLnJlbmRlclRleHR1cmUsdSxsO2lmKGguY3VycmVudCl7dmFyIGM9aC5jdXJyZW50O3U9ZS5yZXNvbHV0aW9ufHxjLnJlc29sdXRpb24sbD0odD1lLm11bHRpc2FtcGxlKSE9PW51bGwmJnQhPT12b2lkIDA/dDpjLm11bHRpc2FtcGxlfWVsc2UgdT1lLnJlc29sdXRpb258fG8ucmVzb2x1dGlvbixsPShpPWUubXVsdGlzYW1wbGUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOm8ubXVsdGlzYW1wbGU7c1swXS5yZXNvbHV0aW9uPXUsc1swXS5tdWx0aXNhbXBsZT1sLHNbMF0ubWFza1Nwcml0ZT1uO3ZhciBmPWEuZmlsdGVyQXJlYTthLmZpbHRlckFyZWE9bi5nZXRCb3VuZHMoITApLG8uZmlsdGVyLnB1c2goYSxzKSxhLmZpbHRlckFyZWE9ZixlLl9maWx0ZXJzfHx0aGlzLmFscGhhTWFza0luZGV4Kyt9LHIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2s9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5maWx0ZXIucG9wKCksZS5fZmlsdGVycz9lLl9maWx0ZXJzWzBdLm1hc2tTcHJpdGU9bnVsbDoodGhpcy5hbHBoYU1hc2tJbmRleC0tLHRoaXMuYWxwaGFNYXNrUG9vbFt0aGlzLmFscGhhTWFza0luZGV4XVswXS5tYXNrU3ByaXRlPW51bGwpfSxyLnByb3RvdHlwZS5wdXNoQ29sb3JNYXNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2NvbG9yTWFzayxpPWUuX2NvbG9yTWFzaz10JmUuY29sb3JNYXNrO2khPT10JiZ0aGlzLnJlbmRlcmVyLmdsLmNvbG9yTWFzaygoaSYxKSE9PTAsKGkmMikhPT0wLChpJjQpIT09MCwoaSY4KSE9PTApfSxyLnByb3RvdHlwZS5wb3BDb2xvck1hc2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29sb3JNYXNrLGk9dGhpcy5tYXNrU3RhY2subGVuZ3RoPjA/dGhpcy5tYXNrU3RhY2tbdGhpcy5tYXNrU3RhY2subGVuZ3RoLTFdLl9jb2xvck1hc2s6MTU7aSE9PXQmJnRoaXMucmVuZGVyZXIuZ2wuY29sb3JNYXNrKChpJjEpIT09MCwoaSYyKSE9PTAsKGkmNCkhPT0wLChpJjgpIT09MCl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCksRGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLm1hc2tTdGFjaz1bXSx0aGlzLmdsQ29uc3Q9MH1yZXR1cm4gci5wcm90b3R5cGUuZ2V0U3RhY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXNrU3RhY2subGVuZ3RofSxyLnByb3RvdHlwZS5zZXRNYXNrU3RhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yZW5kZXJlci5nbCxpPXRoaXMuZ2V0U3RhY2tMZW5ndGgoKTt0aGlzLm1hc2tTdGFjaz1lO3ZhciBuPXRoaXMuZ2V0U3RhY2tMZW5ndGgoKTtuIT09aSYmKG49PT0wP3QuZGlzYWJsZSh0aGlzLmdsQ29uc3QpOih0LmVuYWJsZSh0aGlzLmdsQ29uc3QpLHRoaXMuX3VzZUN1cnJlbnQoKSkpfSxyLnByb3RvdHlwZS5fdXNlQ3VycmVudD1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXI9bnVsbCx0aGlzLm1hc2tTdGFjaz1udWxsfSxyfSgpLEZhPW5ldyB2dCxOYT1bXSxNZj1mdW5jdGlvbihyKXtRKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaT1yLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gaS5nbENvbnN0PUkuQURBUFRFUi5nZXRXZWJHTFJlbmRlcmluZ0NvbnRleHQoKS5TQ0lTU09SX1RFU1QsaX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0U3RhY2tMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hc2tTdGFja1t0aGlzLm1hc2tTdGFjay5sZW5ndGgtMV07cmV0dXJuIHQ/dC5fc2Npc3NvckNvdW50ZXI6MH0sZS5wcm90b3R5cGUuY2FsY1NjaXNzb3JSZWN0PWZ1bmN0aW9uKHQpe3ZhciBpO2lmKCF0Ll9zY2lzc29yUmVjdExvY2FsKXt2YXIgbj10Ll9zY2lzc29yUmVjdCxhPXQubWFza09iamVjdCxzPXRoaXMucmVuZGVyZXIsbz1zLnJlbmRlclRleHR1cmUsaD1hLmdldEJvdW5kcyghMCwoaT1OYS5wb3AoKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6bmV3IEgpO3RoaXMucm91bmRGcmFtZVRvUGl4ZWxzKGgsby5jdXJyZW50P28uY3VycmVudC5yZXNvbHV0aW9uOnMucmVzb2x1dGlvbixvLnNvdXJjZUZyYW1lLG8uZGVzdGluYXRpb25GcmFtZSxzLnByb2plY3Rpb24udHJhbnNmb3JtKSxuJiZoLmZpdChuKSx0Ll9zY2lzc29yUmVjdExvY2FsPWh9fSxlLmlzTWF0cml4Um90YXRlZD1mdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTt2YXIgaT10LmEsbj10LmIsYT10LmMscz10LmQ7cmV0dXJuKE1hdGguYWJzKG4pPjFlLTR8fE1hdGguYWJzKGEpPjFlLTQpJiYoTWF0aC5hYnMoaSk+MWUtNHx8TWF0aC5hYnMocyk+MWUtNCl9LGUucHJvdG90eXBlLnRlc3RTY2lzc29yPWZ1bmN0aW9uKHQpe3ZhciBpPXQubWFza09iamVjdDtpZighaS5pc0Zhc3RSZWN0fHwhaS5pc0Zhc3RSZWN0KCl8fGUuaXNNYXRyaXhSb3RhdGVkKGkud29ybGRUcmFuc2Zvcm0pfHxlLmlzTWF0cml4Um90YXRlZCh0aGlzLnJlbmRlcmVyLnByb2plY3Rpb24udHJhbnNmb3JtKSlyZXR1cm4hMTt0aGlzLmNhbGNTY2lzc29yUmVjdCh0KTt2YXIgbj10Ll9zY2lzc29yUmVjdExvY2FsO3JldHVybiBuLndpZHRoPjAmJm4uaGVpZ2h0PjB9LGUucHJvdG90eXBlLnJvdW5kRnJhbWVUb1BpeGVscz1mdW5jdGlvbih0LGksbixhLHMpe2UuaXNNYXRyaXhSb3RhdGVkKHMpfHwocz1zP0ZhLmNvcHlGcm9tKHMpOkZhLmlkZW50aXR5KCkscy50cmFuc2xhdGUoLW4ueCwtbi55KS5zY2FsZShhLndpZHRoL24ud2lkdGgsYS5oZWlnaHQvbi5oZWlnaHQpLnRyYW5zbGF0ZShhLngsYS55KSx0aGlzLnJlbmRlcmVyLmZpbHRlci50cmFuc2Zvcm1BQUJCKHMsdCksdC5maXQoYSksdC54PU1hdGgucm91bmQodC54KmkpLHQueT1NYXRoLnJvdW5kKHQueSppKSx0LndpZHRoPU1hdGgucm91bmQodC53aWR0aCppKSx0LmhlaWdodD1NYXRoLnJvdW5kKHQuaGVpZ2h0KmkpKX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0Ll9zY2lzc29yUmVjdExvY2FsfHx0aGlzLmNhbGNTY2lzc29yUmVjdCh0KTt2YXIgaT10aGlzLnJlbmRlcmVyLmdsO3QuX3NjaXNzb3JSZWN0fHxpLmVuYWJsZShpLlNDSVNTT1JfVEVTVCksdC5fc2Npc3NvckNvdW50ZXIrKyx0Ll9zY2lzc29yUmVjdD10Ll9zY2lzc29yUmVjdExvY2FsLHRoaXMuX3VzZUN1cnJlbnQoKX0sZS5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMucmVuZGVyZXIuZ2w7dCYmTmEucHVzaCh0Ll9zY2lzc29yUmVjdExvY2FsKSx0aGlzLmdldFN0YWNrTGVuZ3RoKCk+MD90aGlzLl91c2VDdXJyZW50KCk6aS5kaXNhYmxlKGkuU0NJU1NPUl9URVNUKX0sZS5wcm90b3R5cGUuX3VzZUN1cnJlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hc2tTdGFja1t0aGlzLm1hc2tTdGFjay5sZW5ndGgtMV0uX3NjaXNzb3JSZWN0LGk7dGhpcy5yZW5kZXJlci5yZW5kZXJUZXh0dXJlLmN1cnJlbnQ/aT10Lnk6aT10aGlzLnJlbmRlcmVyLmhlaWdodC10LmhlaWdodC10LnksdGhpcy5yZW5kZXJlci5nbC5zY2lzc29yKHQueCxpLHQud2lkdGgsdC5oZWlnaHQpfSxlfShEYSksRGY9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCl7dmFyIGk9ci5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIGkuZ2xDb25zdD1JLkFEQVBURVIuZ2V0V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkuU1RFTkNJTF9URVNULGl9cmV0dXJuIGUucHJvdG90eXBlLmdldFN0YWNrTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXNrU3RhY2tbdGhpcy5tYXNrU3RhY2subGVuZ3RoLTFdO3JldHVybiB0P3QuX3N0ZW5jaWxDb3VudGVyOjB9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGk9dC5tYXNrT2JqZWN0LG49dGhpcy5yZW5kZXJlci5nbCxhPXQuX3N0ZW5jaWxDb3VudGVyO2E9PT0wJiYodGhpcy5yZW5kZXJlci5mcmFtZWJ1ZmZlci5mb3JjZVN0ZW5jaWwoKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmNsZWFyKG4uU1RFTkNJTF9CVUZGRVJfQklUKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCkpLHQuX3N0ZW5jaWxDb3VudGVyKys7dmFyIHM9dC5fY29sb3JNYXNrO3MhPT0wJiYodC5fY29sb3JNYXNrPTAsbi5jb2xvck1hc2soITEsITEsITEsITEpKSxuLnN0ZW5jaWxGdW5jKG4uRVFVQUwsYSw0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxPcChuLktFRVAsbi5LRUVQLG4uSU5DUiksaS5yZW5kZXJhYmxlPSEwLGkucmVuZGVyKHRoaXMucmVuZGVyZXIpLHRoaXMucmVuZGVyZXIuYmF0Y2guZmx1c2goKSxpLnJlbmRlcmFibGU9ITEscyE9PTAmJih0Ll9jb2xvck1hc2s9cyxuLmNvbG9yTWFzaygocyYxKSE9PTAsKHMmMikhPT0wLChzJjQpIT09MCwocyY4KSE9PTApKSx0aGlzLl91c2VDdXJyZW50KCl9LGUucHJvdG90eXBlLnBvcD1mdW5jdGlvbih0KXt2YXIgaT10aGlzLnJlbmRlcmVyLmdsO2lmKHRoaXMuZ2V0U3RhY2tMZW5ndGgoKT09PTApaS5kaXNhYmxlKGkuU1RFTkNJTF9URVNUKTtlbHNle3ZhciBuPXRoaXMubWFza1N0YWNrLmxlbmd0aCE9PTA/dGhpcy5tYXNrU3RhY2tbdGhpcy5tYXNrU3RhY2subGVuZ3RoLTFdOm51bGwsYT1uP24uX2NvbG9yTWFzazoxNTthIT09MCYmKG4uX2NvbG9yTWFzaz0wLGkuY29sb3JNYXNrKCExLCExLCExLCExKSksaS5zdGVuY2lsT3AoaS5LRUVQLGkuS0VFUCxpLkRFQ1IpLHQucmVuZGVyYWJsZT0hMCx0LnJlbmRlcih0aGlzLnJlbmRlcmVyKSx0aGlzLnJlbmRlcmVyLmJhdGNoLmZsdXNoKCksdC5yZW5kZXJhYmxlPSExLGEhPT0wJiYobi5fY29sb3JNYXNrPWEsaS5jb2xvck1hc2soKGEmMSkhPT0wLChhJjIpIT09MCwoYSY0KSE9PTAsKGEmOCkhPT0wKSksdGhpcy5fdXNlQ3VycmVudCgpfX0sZS5wcm90b3R5cGUuX3VzZUN1cnJlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlbmRlcmVyLmdsO3Quc3RlbmNpbEZ1bmModC5FUVVBTCx0aGlzLmdldFN0YWNrTGVuZ3RoKCksNDI5NDk2NzI5NSksdC5zdGVuY2lsT3AodC5LRUVQLHQuS0VFUCx0LktFRVApfSxlfShEYSksRmY9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLmRlc3RpbmF0aW9uRnJhbWU9bnVsbCx0aGlzLnNvdXJjZUZyYW1lPW51bGwsdGhpcy5kZWZhdWx0RnJhbWU9bnVsbCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHZ0LHRoaXMudHJhbnNmb3JtPW51bGx9cmV0dXJuIHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsaSxuKXt0aGlzLmRlc3RpbmF0aW9uRnJhbWU9ZXx8dGhpcy5kZXN0aW5hdGlvbkZyYW1lfHx0aGlzLmRlZmF1bHRGcmFtZSx0aGlzLnNvdXJjZUZyYW1lPXR8fHRoaXMuc291cmNlRnJhbWV8fGUsdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKHRoaXMuZGVzdGluYXRpb25GcmFtZSx0aGlzLnNvdXJjZUZyYW1lLGksbiksdGhpcy50cmFuc2Zvcm0mJnRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO3ZhciBhPXRoaXMucmVuZGVyZXI7YS5nbG9iYWxVbmlmb3Jtcy51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4PXRoaXMucHJvamVjdGlvbk1hdHJpeCxhLmdsb2JhbFVuaWZvcm1zLnVwZGF0ZSgpLGEuc2hhZGVyLnNoYWRlciYmYS5zaGFkZXIuc3luY1VuaWZvcm1Hcm91cChhLnNoYWRlci5zaGFkZXIudW5pZm9ybXMuZ2xvYmFscyl9LHIucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb249ZnVuY3Rpb24oZSx0LGksbil7dmFyIGE9dGhpcy5wcm9qZWN0aW9uTWF0cml4LHM9bj8tMToxO2EuaWRlbnRpdHkoKSxhLmE9MS90LndpZHRoKjIsYS5kPXMqKDEvdC5oZWlnaHQqMiksYS50eD0tMS10LngqYS5hLGEudHk9LXMtdC55KmEuZH0sci5wcm90b3R5cGUuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKGUpe30sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXI9bnVsbH0scn0oKSxwZT1uZXcgSCwkZT1uZXcgSCxOZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMuY2xlYXJDb2xvcj1lLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhLHRoaXMuZGVmYXVsdE1hc2tTdGFjaz1bXSx0aGlzLmN1cnJlbnQ9bnVsbCx0aGlzLnNvdXJjZUZyYW1lPW5ldyBILHRoaXMuZGVzdGluYXRpb25GcmFtZT1uZXcgSCx0aGlzLnZpZXdwb3J0RnJhbWU9bmV3IEh9cmV0dXJuIHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LGkpe2U9PT12b2lkIDAmJihlPW51bGwpO3ZhciBuPXRoaXMucmVuZGVyZXI7dGhpcy5jdXJyZW50PWU7dmFyIGEscyxvO2U/KGE9ZS5iYXNlVGV4dHVyZSxvPWEucmVzb2x1dGlvbix0fHwocGUud2lkdGg9ZS5mcmFtZS53aWR0aCxwZS5oZWlnaHQ9ZS5mcmFtZS5oZWlnaHQsdD1wZSksaXx8KCRlLng9ZS5mcmFtZS54LCRlLnk9ZS5mcmFtZS55LCRlLndpZHRoPXQud2lkdGgsJGUuaGVpZ2h0PXQuaGVpZ2h0LGk9JGUpLHM9YS5mcmFtZWJ1ZmZlcik6KG89bi5yZXNvbHV0aW9uLHR8fChwZS53aWR0aD1uLnNjcmVlbi53aWR0aCxwZS5oZWlnaHQ9bi5zY3JlZW4uaGVpZ2h0LHQ9cGUpLGl8fChpPXBlLGkud2lkdGg9dC53aWR0aCxpLmhlaWdodD10LmhlaWdodCkpO3ZhciBoPXRoaXMudmlld3BvcnRGcmFtZTtoLng9aS54Km8saC55PWkueSpvLGgud2lkdGg9aS53aWR0aCpvLGguaGVpZ2h0PWkuaGVpZ2h0Km8sZXx8KGgueT1uLnZpZXcuaGVpZ2h0LShoLnkraC5oZWlnaHQpKSxoLmNlaWwoKSx0aGlzLnJlbmRlcmVyLmZyYW1lYnVmZmVyLmJpbmQocyxoKSx0aGlzLnJlbmRlcmVyLnByb2plY3Rpb24udXBkYXRlKGksdCxvLCFzKSxlP3RoaXMucmVuZGVyZXIubWFzay5zZXRNYXNrU3RhY2soYS5tYXNrU3RhY2spOnRoaXMucmVuZGVyZXIubWFzay5zZXRNYXNrU3RhY2sodGhpcy5kZWZhdWx0TWFza1N0YWNrKSx0aGlzLnNvdXJjZUZyYW1lLmNvcHlGcm9tKHQpLHRoaXMuZGVzdGluYXRpb25GcmFtZS5jb3B5RnJvbShpKX0sci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oZSx0KXt0aGlzLmN1cnJlbnQ/ZT1lfHx0aGlzLmN1cnJlbnQuYmFzZVRleHR1cmUuY2xlYXJDb2xvcjplPWV8fHRoaXMuY2xlYXJDb2xvcjt2YXIgaT10aGlzLmRlc3RpbmF0aW9uRnJhbWUsbj10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmJhc2VUZXh0dXJlOnRoaXMucmVuZGVyZXIuc2NyZWVuLGE9aS53aWR0aCE9PW4ud2lkdGh8fGkuaGVpZ2h0IT09bi5oZWlnaHQ7aWYoYSl7dmFyIHM9dGhpcy52aWV3cG9ydEZyYW1lLG89cy54LGg9cy55LHU9cy53aWR0aCxsPXMuaGVpZ2h0O289TWF0aC5yb3VuZChvKSxoPU1hdGgucm91bmQoaCksdT1NYXRoLnJvdW5kKHUpLGw9TWF0aC5yb3VuZChsKSx0aGlzLnJlbmRlcmVyLmdsLmVuYWJsZSh0aGlzLnJlbmRlcmVyLmdsLlNDSVNTT1JfVEVTVCksdGhpcy5yZW5kZXJlci5nbC5zY2lzc29yKG8saCx1LGwpfXRoaXMucmVuZGVyZXIuZnJhbWVidWZmZXIuY2xlYXIoZVswXSxlWzFdLGVbMl0sZVszXSx0KSxhJiZ0aGlzLnJlbmRlcmVyLnNjaXNzb3IucG9wKCl9LHIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuYmluZChudWxsKX0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmJpbmQobnVsbCl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCk7ZnVuY3Rpb24gQmYocixlLHQsaSxuKXt0LmJ1ZmZlci51cGRhdGUobil9dmFyIExmPXtmbG9hdDpgCiAgICAgICAgZGF0YVtvZmZzZXRdID0gdjsKICAgIGAsdmVjMjpgCiAgICAgICAgZGF0YVtvZmZzZXRdID0gdlswXTsKICAgICAgICBkYXRhW29mZnNldCsxXSA9IHZbMV07CiAgICBgLHZlYzM6YAogICAgICAgIGRhdGFbb2Zmc2V0XSA9IHZbMF07CiAgICAgICAgZGF0YVtvZmZzZXQrMV0gPSB2WzFdOwogICAgICAgIGRhdGFbb2Zmc2V0KzJdID0gdlsyXTsKCiAgICBgLHZlYzQ6YAogICAgICAgIGRhdGFbb2Zmc2V0XSA9IHZbMF07CiAgICAgICAgZGF0YVtvZmZzZXQrMV0gPSB2WzFdOwogICAgICAgIGRhdGFbb2Zmc2V0KzJdID0gdlsyXTsKICAgICAgICBkYXRhW29mZnNldCszXSA9IHZbM107CiAgICBgLG1hdDI6YAogICAgICAgIGRhdGFbb2Zmc2V0XSA9IHZbMF07CiAgICAgICAgZGF0YVtvZmZzZXQrMV0gPSB2WzFdOwoKICAgICAgICBkYXRhW29mZnNldCs0XSA9IHZbMl07CiAgICAgICAgZGF0YVtvZmZzZXQrNV0gPSB2WzNdOwogICAgYCxtYXQzOmAKICAgICAgICBkYXRhW29mZnNldF0gPSB2WzBdOwogICAgICAgIGRhdGFbb2Zmc2V0KzFdID0gdlsxXTsKICAgICAgICBkYXRhW29mZnNldCsyXSA9IHZbMl07CgogICAgICAgIGRhdGFbb2Zmc2V0ICsgNF0gPSB2WzNdOwogICAgICAgIGRhdGFbb2Zmc2V0ICsgNV0gPSB2WzRdOwogICAgICAgIGRhdGFbb2Zmc2V0ICsgNl0gPSB2WzVdOwoKICAgICAgICBkYXRhW29mZnNldCArIDhdID0gdls2XTsKICAgICAgICBkYXRhW29mZnNldCArIDldID0gdls3XTsKICAgICAgICBkYXRhW29mZnNldCArIDEwXSA9IHZbOF07CiAgICBgLG1hdDQ6YAogICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyBpXSA9IHZbaV07CiAgICAgICAgfQogICAgYH0sQmE9e2Zsb2F0OjQsdmVjMjo4LHZlYzM6MTIsdmVjNDoxNixpbnQ6NCxpdmVjMjo4LGl2ZWMzOjEyLGl2ZWM0OjE2LHVpbnQ6NCx1dmVjMjo4LHV2ZWMzOjEyLHV2ZWM0OjE2LGJvb2w6NCxidmVjMjo4LGJ2ZWMzOjEyLGJ2ZWM0OjE2LG1hdDI6MTYqMixtYXQzOjE2KjMsbWF0NDoxNio0fTtmdW5jdGlvbiBVZihyKXtmb3IodmFyIGU9ci5tYXAoZnVuY3Rpb24oaCl7cmV0dXJue2RhdGE6aCxvZmZzZXQ6MCxkYXRhTGVuOjAsZGlydHk6MH19KSx0PTAsaT0wLG49MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07aWYodD1CYVtzLmRhdGEudHlwZV0scy5kYXRhLnNpemU+MSYmKHQ9TWF0aC5tYXgodCwxNikqcy5kYXRhLnNpemUpLHMuZGF0YUxlbj10LGkldCE9PTAmJmk8MTYpe3ZhciBvPWkldCUxNjtpKz1vLG4rPW99aSt0PjE2PyhuPU1hdGguY2VpbChuLzE2KSoxNixzLm9mZnNldD1uLG4rPXQsaT10KToocy5vZmZzZXQ9bixpKz10LG4rPXQpfXJldHVybiBuPU1hdGguY2VpbChuLzE2KSoxNix7dWJvRWxlbWVudHM6ZSxzaXplOm59fWZ1bmN0aW9uIEdmKHIsZSl7dmFyIHQ9W107Zm9yKHZhciBpIGluIHIpZVtpXSYmdC5wdXNoKGVbaV0pO3JldHVybiB0LnNvcnQoZnVuY3Rpb24obixhKXtyZXR1cm4gbi5pbmRleC1hLmluZGV4fSksdH1mdW5jdGlvbiBrZihyLGUpe2lmKCFyLmF1dG9NYW5hZ2UpcmV0dXJue3NpemU6MCxzeW5jRnVuYzpCZn07Zm9yKHZhciB0PUdmKHIudW5pZm9ybXMsZSksaT1VZih0KSxuPWkudWJvRWxlbWVudHMsYT1pLnNpemUscz1bYAogICAgdmFyIHYgPSBudWxsOwogICAgdmFyIHYyID0gbnVsbDsKICAgIHZhciBjdiA9IG51bGw7CiAgICB2YXIgdCA9IDA7CiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbAogICAgdmFyIGluZGV4ID0gMDsKICAgIHZhciBkYXRhID0gYnVmZmVyLmRhdGE7CiAgICBgXSxvPTA7bzxuLmxlbmd0aDtvKyspe2Zvcih2YXIgaD1uW29dLHU9ci51bmlmb3Jtc1toLmRhdGEubmFtZV0sbD1oLmRhdGEubmFtZSxjPSExLGY9MDtmPEFlLmxlbmd0aDtmKyspe3ZhciBkPUFlW2ZdO2lmKGQuY29kZVVibyYmZC50ZXN0KGguZGF0YSx1KSl7cy5wdXNoKCJvZmZzZXQgPSAiK2gub2Zmc2V0LzQrIjsiLEFlW2ZdLmNvZGVVYm8oaC5kYXRhLm5hbWUsdSkpLGM9ITA7YnJlYWt9fWlmKCFjKWlmKGguZGF0YS5zaXplPjEpe3ZhciBwPUNhKGguZGF0YS50eXBlKSx2PU1hdGgubWF4KEJhW2guZGF0YS50eXBlXS8xNiwxKSxfPXAvdixtPSg0LV8lNCklNDtzLnB1c2goYAogICAgICAgICAgICAgICAgY3YgPSB1ZC5gK2wrYC52YWx1ZTsKICAgICAgICAgICAgICAgIHYgPSB1di5gK2wrYDsKICAgICAgICAgICAgICAgIG9mZnNldCA9IGAraC5vZmZzZXQvNCtgOwoKICAgICAgICAgICAgICAgIHQgPSAwOwoKICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpIDwgYCtoLmRhdGEuc2l6ZSp2K2A7IGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgYCtfK2A7IGorKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gdlt0KytdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYCttK2A7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYCl9ZWxzZXt2YXIgZz1MZltoLmRhdGEudHlwZV07cy5wdXNoKGAKICAgICAgICAgICAgICAgIGN2ID0gdWQuYCtsK2AudmFsdWU7CiAgICAgICAgICAgICAgICB2ID0gdXYuYCtsK2A7CiAgICAgICAgICAgICAgICBvZmZzZXQgPSBgK2gub2Zmc2V0LzQrYDsKICAgICAgICAgICAgICAgIGArZytgOwogICAgICAgICAgICAgICAgYCl9fXJldHVybiBzLnB1c2goYAogICAgICAgcmVuZGVyZXIuYnVmZmVyLnVwZGF0ZShidWZmZXIpOwogICAgYCkse3NpemU6YSxzeW5jRnVuYzpuZXcgRnVuY3Rpb24oInVkIiwidXYiLCJyZW5kZXJlciIsInN5bmNEYXRhIiwiYnVmZmVyIixzLmpvaW4oYApgKSl9fXZhciBYZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXt0aGlzLnByb2dyYW09ZSx0aGlzLnVuaWZvcm1EYXRhPXQsdGhpcy51bmlmb3JtR3JvdXBzPXt9LHRoaXMudW5pZm9ybURpcnR5R3JvdXBzPXt9LHRoaXMudW5pZm9ybUJ1ZmZlckJpbmRpbmdzPXt9fXJldHVybiByLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy51bmlmb3JtRGF0YT1udWxsLHRoaXMudW5pZm9ybUdyb3Vwcz1udWxsLHRoaXMudW5pZm9ybURpcnR5R3JvdXBzPW51bGwsdGhpcy51bmlmb3JtQnVmZmVyQmluZGluZ3M9bnVsbCx0aGlzLnByb2dyYW09bnVsbH0scn0oKTtmdW5jdGlvbiBIZihyLGUpe2Zvcih2YXIgdD17fSxpPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihyLGUuQUNUSVZFX0FUVFJJQlVURVMpLG49MDtuPGk7bisrKXt2YXIgYT1lLmdldEFjdGl2ZUF0dHJpYihyLG4pO2lmKGEubmFtZS5pbmRleE9mKCJnbF8iKSE9PTApe3ZhciBzPU9hKGUsYS50eXBlKSxvPXt0eXBlOnMsbmFtZTphLm5hbWUsc2l6ZTpDYShzKSxsb2NhdGlvbjplLmdldEF0dHJpYkxvY2F0aW9uKHIsYS5uYW1lKX07dFthLm5hbWVdPW99fXJldHVybiB0fWZ1bmN0aW9uIGpmKHIsZSl7Zm9yKHZhciB0PXt9LGk9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHIsZS5BQ1RJVkVfVU5JRk9STVMpLG49MDtuPGk7bisrKXt2YXIgYT1lLmdldEFjdGl2ZVVuaWZvcm0ocixuKSxzPWEubmFtZS5yZXBsYWNlKC9cWy4qP1xdJC8sIiIpLG89ISFhLm5hbWUubWF0Y2goL1xbLio/XF0kLyksaD1PYShlLGEudHlwZSk7dFtzXT17bmFtZTpzLGluZGV4Om4sdHlwZTpoLHNpemU6YS5zaXplLGlzQXJyYXk6byx2YWx1ZTpQYShoLGEuc2l6ZSl9fXJldHVybiB0fWZ1bmN0aW9uIFZmKHIsZSl7dmFyIHQ9d2EocixyLlZFUlRFWF9TSEFERVIsZS52ZXJ0ZXhTcmMpLGk9d2EocixyLkZSQUdNRU5UX1NIQURFUixlLmZyYWdtZW50U3JjKSxuPXIuY3JlYXRlUHJvZ3JhbSgpO2lmKHIuYXR0YWNoU2hhZGVyKG4sdCksci5hdHRhY2hTaGFkZXIobixpKSxyLmxpbmtQcm9ncmFtKG4pLHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihuLHIuTElOS19TVEFUVVMpfHxjZihyLG4sdCxpKSxlLmF0dHJpYnV0ZURhdGE9SGYobixyKSxlLnVuaWZvcm1EYXRhPWpmKG4sciksIS9eWyBcdF0qI1sgXHRdKnZlcnNpb25bIFx0XSszMDBbIFx0XStlc1sgXHRdKiQvbS50ZXN0KGUudmVydGV4U3JjKSl7dmFyIGE9T2JqZWN0LmtleXMoZS5hdHRyaWJ1dGVEYXRhKTthLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbD5jPzE6LTF9KTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyllLmF0dHJpYnV0ZURhdGFbYVtzXV0ubG9jYXRpb249cyxyLmJpbmRBdHRyaWJMb2NhdGlvbihuLHMsYVtzXSk7ci5saW5rUHJvZ3JhbShuKX1yLmRlbGV0ZVNoYWRlcih0KSxyLmRlbGV0ZVNoYWRlcihpKTt2YXIgbz17fTtmb3IodmFyIHMgaW4gZS51bmlmb3JtRGF0YSl7dmFyIGg9ZS51bmlmb3JtRGF0YVtzXTtvW3NdPXtsb2NhdGlvbjpyLmdldFVuaWZvcm1Mb2NhdGlvbihuLHMpLHZhbHVlOlBhKGgudHlwZSxoLnNpemUpfX12YXIgdT1uZXcgWGYobixvKTtyZXR1cm4gdX12YXIgWWY9MCxJcj17dGV4dHVyZUNvdW50OjAsdWJvQ291bnQ6MH0semY9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMuZGVzdHJveWVkPSExLHRoaXMucmVuZGVyZXI9ZSx0aGlzLnN5c3RlbUNoZWNrKCksdGhpcy5nbD1udWxsLHRoaXMuc2hhZGVyPW51bGwsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy5jYWNoZT17fSx0aGlzLl91Ym9DYWNoZT17fSx0aGlzLmlkPVlmKyt9cmV0dXJuIHIucHJvdG90eXBlLnN5c3RlbUNoZWNrPWZ1bmN0aW9uKCl7aWYoIVRmKCkpdGhyb3cgbmV3IEVycm9yKCJDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IGFsbG93IHVuc2FmZS1ldmFsLCBwbGVhc2UgdXNlIEBwaXhpL3Vuc2FmZS1ldmFsIG1vZHVsZSB0byBlbmFibGUgc3VwcG9ydC4iKX0sci5wcm90b3R5cGUuY29udGV4dENoYW5nZT1mdW5jdGlvbihlKXt0aGlzLmdsPWUsdGhpcy5yZXNldCgpfSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCl7ZS5kaXNwb3NlUnVubmVyLmFkZCh0aGlzKSxlLnVuaWZvcm1zLmdsb2JhbHM9dGhpcy5yZW5kZXJlci5nbG9iYWxVbmlmb3Jtczt2YXIgaT1lLnByb2dyYW0sbj1pLmdsUHJvZ3JhbXNbdGhpcy5yZW5kZXJlci5DT05URVhUX1VJRF18fHRoaXMuZ2VuZXJhdGVQcm9ncmFtKGUpO3JldHVybiB0aGlzLnNoYWRlcj1lLHRoaXMucHJvZ3JhbSE9PWkmJih0aGlzLnByb2dyYW09aSx0aGlzLmdsLnVzZVByb2dyYW0obi5wcm9ncmFtKSksdHx8KElyLnRleHR1cmVDb3VudD0wLElyLnVib0NvdW50PTAsdGhpcy5zeW5jVW5pZm9ybUdyb3VwKGUudW5pZm9ybUdyb3VwLElyKSksbn0sci5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zaGFkZXIucHJvZ3JhbSxpPXQuZ2xQcm9ncmFtc1t0aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlEXTt0LnN5bmNVbmlmb3JtcyhpLnVuaWZvcm1EYXRhLGUsdGhpcy5yZW5kZXJlcil9LHIucHJvdG90eXBlLnN5bmNVbmlmb3JtR3JvdXA9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmdldEdsUHJvZ3JhbSgpOyghZS5zdGF0aWN8fGUuZGlydHlJZCE9PWkudW5pZm9ybURpcnR5R3JvdXBzW2UuaWRdKSYmKGkudW5pZm9ybURpcnR5R3JvdXBzW2UuaWRdPWUuZGlydHlJZCx0aGlzLnN5bmNVbmlmb3JtcyhlLGksdCkpfSxyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXM9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWUuc3luY1VuaWZvcm1zW3RoaXMuc2hhZGVyLnByb2dyYW0uaWRdfHx0aGlzLmNyZWF0ZVN5bmNHcm91cHMoZSk7bih0LnVuaWZvcm1EYXRhLGUudW5pZm9ybXMsdGhpcy5yZW5kZXJlcixpKX0sci5wcm90b3R5cGUuY3JlYXRlU3luY0dyb3Vwcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNpZ25hdHVyZShlLHRoaXMuc2hhZGVyLnByb2dyYW0udW5pZm9ybURhdGEsInUiKTtyZXR1cm4gdGhpcy5jYWNoZVt0XXx8KHRoaXMuY2FjaGVbdF09Z2YoZSx0aGlzLnNoYWRlci5wcm9ncmFtLnVuaWZvcm1EYXRhKSksZS5zeW5jVW5pZm9ybXNbdGhpcy5zaGFkZXIucHJvZ3JhbS5pZF09dGhpcy5jYWNoZVt0XSxlLnN5bmNVbmlmb3Jtc1t0aGlzLnNoYWRlci5wcm9ncmFtLmlkXX0sci5wcm90b3R5cGUuc3luY1VuaWZvcm1CdWZmZXJHcm91cD1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0R2xQcm9ncmFtKCk7aWYoIWUuc3RhdGljfHxlLmRpcnR5SWQhPT0wfHwhaS51bmlmb3JtR3JvdXBzW2UuaWRdKXtlLmRpcnR5SWQ9MDt2YXIgbj1pLnVuaWZvcm1Hcm91cHNbZS5pZF18fHRoaXMuY3JlYXRlU3luY0J1ZmZlckdyb3VwKGUsaSx0KTtlLmJ1ZmZlci51cGRhdGUoKSxuKGkudW5pZm9ybURhdGEsZS51bmlmb3Jtcyx0aGlzLnJlbmRlcmVyLElyLGUuYnVmZmVyKX10aGlzLnJlbmRlcmVyLmJ1ZmZlci5iaW5kQnVmZmVyQmFzZShlLmJ1ZmZlcixpLnVuaWZvcm1CdWZmZXJCaW5kaW5nc1t0XSl9LHIucHJvdG90eXBlLmNyZWF0ZVN5bmNCdWZmZXJHcm91cD1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5yZW5kZXJlci5nbDt0aGlzLnJlbmRlcmVyLmJ1ZmZlci5iaW5kKGUuYnVmZmVyKTt2YXIgYT10aGlzLmdsLmdldFVuaWZvcm1CbG9ja0luZGV4KHQucHJvZ3JhbSxpKTt0LnVuaWZvcm1CdWZmZXJCaW5kaW5nc1tpXT10aGlzLnNoYWRlci51bmlmb3JtQmluZENvdW50LG4udW5pZm9ybUJsb2NrQmluZGluZyh0LnByb2dyYW0sYSx0aGlzLnNoYWRlci51bmlmb3JtQmluZENvdW50KSx0aGlzLnNoYWRlci51bmlmb3JtQmluZENvdW50Kys7dmFyIHM9dGhpcy5nZXRTaWduYXR1cmUoZSx0aGlzLnNoYWRlci5wcm9ncmFtLnVuaWZvcm1EYXRhLCJ1Ym8iKSxvPXRoaXMuX3Vib0NhY2hlW3NdO2lmKG98fChvPXRoaXMuX3Vib0NhY2hlW3NdPWtmKGUsdGhpcy5zaGFkZXIucHJvZ3JhbS51bmlmb3JtRGF0YSkpLGUuYXV0b01hbmFnZSl7dmFyIGg9bmV3IEZsb2F0MzJBcnJheShvLnNpemUvNCk7ZS5idWZmZXIudXBkYXRlKGgpfXJldHVybiB0LnVuaWZvcm1Hcm91cHNbZS5pZF09by5zeW5jRnVuYyx0LnVuaWZvcm1Hcm91cHNbZS5pZF19LHIucHJvdG90eXBlLmdldFNpZ25hdHVyZT1mdW5jdGlvbihlLHQsaSl7dmFyIG49ZS51bmlmb3JtcyxhPVtpKyItIl07Zm9yKHZhciBzIGluIG4pYS5wdXNoKHMpLHRbc10mJmEucHVzaCh0W3NdLnR5cGUpO3JldHVybiBhLmpvaW4oIi0iKX0sci5wcm90b3R5cGUuZ2V0R2xQcm9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZGVyP3RoaXMuc2hhZGVyLnByb2dyYW0uZ2xQcm9ncmFtc1t0aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlEXTpudWxsfSxyLnByb3RvdHlwZS5nZW5lcmF0ZVByb2dyYW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nbCxpPWUucHJvZ3JhbSxuPVZmKHQsaSk7cmV0dXJuIGkuZ2xQcm9ncmFtc1t0aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlEXT1uLG59LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5wcm9ncmFtPW51bGwsdGhpcy5zaGFkZXI9bnVsbH0sci5wcm90b3R5cGUuZGlzcG9zZVNoYWRlcj1mdW5jdGlvbihlKXt0aGlzLnNoYWRlcj09PWUmJih0aGlzLnNoYWRlcj1udWxsKX0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXI9bnVsbCx0aGlzLmRlc3Ryb3llZD0hMH0scn0oKTtmdW5jdGlvbiBXZihyLGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1bXSksZVtOLk5PUk1BTF09W3IuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLkFERF09W3IuT05FLHIuT05FXSxlW04uTVVMVElQTFldPVtyLkRTVF9DT0xPUixyLk9ORV9NSU5VU19TUkNfQUxQSEEsci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uU0NSRUVOXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0NPTE9SLHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLk9WRVJMQVldPVtyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5EQVJLRU5dPVtyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5MSUdIVEVOXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uQ09MT1JfRE9ER0VdPVtyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5DT0xPUl9CVVJOXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uSEFSRF9MSUdIVF09W3IuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLlNPRlRfTElHSFRdPVtyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5ESUZGRVJFTkNFXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uRVhDTFVTSU9OXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uSFVFXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uU0FUVVJBVElPTl09W3IuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLkNPTE9SXT1bci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uTFVNSU5PU0lUWV09W3IuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLk5PTkVdPVswLDBdLGVbTi5OT1JNQUxfTlBNXT1bci5TUkNfQUxQSEEsci5PTkVfTUlOVVNfU1JDX0FMUEhBLHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLkFERF9OUE1dPVtyLlNSQ19BTFBIQSxyLk9ORSxyLk9ORSxyLk9ORV0sZVtOLlNDUkVFTl9OUE1dPVtyLlNSQ19BTFBIQSxyLk9ORV9NSU5VU19TUkNfQ09MT1Isci5PTkUsci5PTkVfTUlOVVNfU1JDX0FMUEhBXSxlW04uU1JDX0lOXT1bci5EU1RfQUxQSEEsci5aRVJPXSxlW04uU1JDX09VVF09W3IuT05FX01JTlVTX0RTVF9BTFBIQSxyLlpFUk9dLGVbTi5TUkNfQVRPUF09W3IuRFNUX0FMUEhBLHIuT05FX01JTlVTX1NSQ19BTFBIQV0sZVtOLkRTVF9PVkVSXT1bci5PTkVfTUlOVVNfRFNUX0FMUEhBLHIuT05FXSxlW04uRFNUX0lOXT1bci5aRVJPLHIuU1JDX0FMUEhBXSxlW04uRFNUX09VVF09W3IuWkVSTyxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5EU1RfQVRPUF09W3IuT05FX01JTlVTX0RTVF9BTFBIQSxyLlNSQ19BTFBIQV0sZVtOLlhPUl09W3IuT05FX01JTlVTX0RTVF9BTFBIQSxyLk9ORV9NSU5VU19TUkNfQUxQSEFdLGVbTi5TVUJUUkFDVF09W3IuT05FLHIuT05FLHIuT05FLHIuT05FLHIuRlVOQ19SRVZFUlNFX1NVQlRSQUNULHIuRlVOQ19BRERdLGV9dmFyIHFmPTAsJGY9MSxLZj0yLFpmPTMsSmY9NCxRZj01LHRjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe3RoaXMuZ2w9bnVsbCx0aGlzLnN0YXRlSWQ9MCx0aGlzLnBvbHlnb25PZmZzZXQ9MCx0aGlzLmJsZW5kTW9kZT1OLk5PTkUsdGhpcy5fYmxlbmRFcT0hMSx0aGlzLm1hcD1bXSx0aGlzLm1hcFtxZl09dGhpcy5zZXRCbGVuZCx0aGlzLm1hcFskZl09dGhpcy5zZXRPZmZzZXQsdGhpcy5tYXBbS2ZdPXRoaXMuc2V0Q3VsbEZhY2UsdGhpcy5tYXBbWmZdPXRoaXMuc2V0RGVwdGhUZXN0LHRoaXMubWFwW0pmXT10aGlzLnNldEZyb250RmFjZSx0aGlzLm1hcFtRZl09dGhpcy5zZXREZXB0aE1hc2ssdGhpcy5jaGVja3M9W10sdGhpcy5kZWZhdWx0U3RhdGU9bmV3IGRlLHRoaXMuZGVmYXVsdFN0YXRlLmJsZW5kPSEwfXJldHVybiByLnByb3RvdHlwZS5jb250ZXh0Q2hhbmdlPWZ1bmN0aW9uKGUpe3RoaXMuZ2w9ZSx0aGlzLmJsZW5kTW9kZXM9V2YoZSksdGhpcy5zZXQodGhpcy5kZWZhdWx0U3RhdGUpLHRoaXMucmVzZXQoKX0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8dGhpcy5kZWZhdWx0U3RhdGUsdGhpcy5zdGF0ZUlkIT09ZS5kYXRhKXtmb3IodmFyIHQ9dGhpcy5zdGF0ZUlkXmUuZGF0YSxpPTA7dDspdCYxJiZ0aGlzLm1hcFtpXS5jYWxsKHRoaXMsISEoZS5kYXRhJjE8PGkpKSx0PXQ+PjEsaSsrO3RoaXMuc3RhdGVJZD1lLmRhdGF9Zm9yKHZhciBpPTA7aTx0aGlzLmNoZWNrcy5sZW5ndGg7aSsrKXRoaXMuY2hlY2tzW2ldKHRoaXMsZSl9LHIucHJvdG90eXBlLmZvcmNlU3RhdGU9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLmRlZmF1bHRTdGF0ZTtmb3IodmFyIHQ9MDt0PHRoaXMubWFwLmxlbmd0aDt0KyspdGhpcy5tYXBbdF0uY2FsbCh0aGlzLCEhKGUuZGF0YSYxPDx0KSk7Zm9yKHZhciB0PTA7dDx0aGlzLmNoZWNrcy5sZW5ndGg7dCsrKXRoaXMuY2hlY2tzW3RdKHRoaXMsZSk7dGhpcy5zdGF0ZUlkPWUuZGF0YX0sci5wcm90b3R5cGUuc2V0QmxlbmQ9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVDaGVjayhyLmNoZWNrQmxlbmRNb2RlLGUpLHRoaXMuZ2xbZT8iZW5hYmxlIjoiZGlzYWJsZSJdKHRoaXMuZ2wuQkxFTkQpfSxyLnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVDaGVjayhyLmNoZWNrUG9seWdvbk9mZnNldCxlKSx0aGlzLmdsW2U/ImVuYWJsZSI6ImRpc2FibGUiXSh0aGlzLmdsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfSxyLnByb3RvdHlwZS5zZXREZXB0aFRlc3Q9ZnVuY3Rpb24oZSl7dGhpcy5nbFtlPyJlbmFibGUiOiJkaXNhYmxlIl0odGhpcy5nbC5ERVBUSF9URVNUKX0sci5wcm90b3R5cGUuc2V0RGVwdGhNYXNrPWZ1bmN0aW9uKGUpe3RoaXMuZ2wuZGVwdGhNYXNrKGUpfSxyLnByb3RvdHlwZS5zZXRDdWxsRmFjZT1mdW5jdGlvbihlKXt0aGlzLmdsW2U/ImVuYWJsZSI6ImRpc2FibGUiXSh0aGlzLmdsLkNVTExfRkFDRSl9LHIucHJvdG90eXBlLnNldEZyb250RmFjZT1mdW5jdGlvbihlKXt0aGlzLmdsLmZyb250RmFjZSh0aGlzLmdsW2U/IkNXIjoiQ0NXIl0pfSxyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGU9ZnVuY3Rpb24oZSl7aWYoZSE9PXRoaXMuYmxlbmRNb2RlKXt0aGlzLmJsZW5kTW9kZT1lO3ZhciB0PXRoaXMuYmxlbmRNb2Rlc1tlXSxpPXRoaXMuZ2w7dC5sZW5ndGg9PT0yP2kuYmxlbmRGdW5jKHRbMF0sdFsxXSk6aS5ibGVuZEZ1bmNTZXBhcmF0ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0Lmxlbmd0aD09PTY/KHRoaXMuX2JsZW5kRXE9ITAsaS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodFs0XSx0WzVdKSk6dGhpcy5fYmxlbmRFcSYmKHRoaXMuX2JsZW5kRXE9ITEsaS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoaS5GVU5DX0FERCxpLkZVTkNfQUREKSl9fSxyLnByb3RvdHlwZS5zZXRQb2x5Z29uT2Zmc2V0PWZ1bmN0aW9uKGUsdCl7dGhpcy5nbC5wb2x5Z29uT2Zmc2V0KGUsdCl9LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5nbC5waXhlbFN0b3JlaSh0aGlzLmdsLlVOUEFDS19GTElQX1lfV0VCR0wsITEpLHRoaXMuZm9yY2VTdGF0ZSh0aGlzLmRlZmF1bHRTdGF0ZSksdGhpcy5fYmxlbmRFcT0hMCx0aGlzLmJsZW5kTW9kZT0tMSx0aGlzLnNldEJsZW5kTW9kZSgwKX0sci5wcm90b3R5cGUudXBkYXRlQ2hlY2s9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmNoZWNrcy5pbmRleE9mKGUpO3QmJmk9PT0tMT90aGlzLmNoZWNrcy5wdXNoKGUpOiF0JiZpIT09LTEmJnRoaXMuY2hlY2tzLnNwbGljZShpLDEpfSxyLmNoZWNrQmxlbmRNb2RlPWZ1bmN0aW9uKGUsdCl7ZS5zZXRCbGVuZE1vZGUodC5ibGVuZE1vZGUpfSxyLmNoZWNrUG9seWdvbk9mZnNldD1mdW5jdGlvbihlLHQpe2Uuc2V0UG9seWdvbk9mZnNldCgxLHQucG9seWdvbk9mZnNldCl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdsPW51bGx9LHJ9KCksZWM9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLmNvdW50PTAsdGhpcy5jaGVja0NvdW50PTAsdGhpcy5tYXhJZGxlPUkuR0NfTUFYX0lETEUsdGhpcy5jaGVja0NvdW50TWF4PUkuR0NfTUFYX0NIRUNLX0NPVU5ULHRoaXMubW9kZT1JLkdDX01PREV9cmV0dXJuIHIucHJvdG90eXBlLnBvc3RyZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ1RvU2NyZWVuJiYodGhpcy5jb3VudCsrLHRoaXMubW9kZSE9PWhyLk1BTlVBTCYmKHRoaXMuY2hlY2tDb3VudCsrLHRoaXMuY2hlY2tDb3VudD50aGlzLmNoZWNrQ291bnRNYXgmJih0aGlzLmNoZWNrQ291bnQ9MCx0aGlzLnJ1bigpKSkpfSxyLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5yZW5kZXJlci50ZXh0dXJlLHQ9ZS5tYW5hZ2VkVGV4dHVyZXMsaT0hMSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPXRbbl07IWEuZnJhbWVidWZmZXImJnRoaXMuY291bnQtYS50b3VjaGVkPnRoaXMubWF4SWRsZSYmKGUuZGVzdHJveVRleHR1cmUoYSwhMCksdFtuXT1udWxsLGk9ITApfWlmKGkpe2Zvcih2YXIgcz0wLG49MDtuPHQubGVuZ3RoO24rKyl0W25dIT09bnVsbCYmKHRbcysrXT10W25dKTt0Lmxlbmd0aD1zfX0sci5wcm90b3R5cGUudW5sb2FkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVuZGVyZXIudGV4dHVyZSxpPWUuX3RleHR1cmU7aSYmIWkuZnJhbWVidWZmZXImJnQuZGVzdHJveVRleHR1cmUoaSk7Zm9yKHZhciBuPWUuY2hpbGRyZW4ubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy51bmxvYWQoZS5jaGlsZHJlbltuXSl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCk7ZnVuY3Rpb24gcmMocil7dmFyIGUsdCxpLG4sYSxzLG8saCx1LGwsYyxmLGQscCx2LF8sbSxnLHksVCx4LGIsRTtyZXR1cm4iV2ViR0wyUmVuZGVyaW5nQ29udGV4dCJpbiBnbG9iYWxUaGlzJiZyIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWJHTDJSZW5kZXJpbmdDb250ZXh0P0U9KGU9e30sZVtGLlVOU0lHTkVEX0JZVEVdPSh0PXt9LHRbUi5SR0JBXT1yLlJHQkE4LHRbUi5SR0JdPXIuUkdCOCx0W1IuUkddPXIuUkc4LHRbUi5SRURdPXIuUjgsdFtSLlJHQkFfSU5URUdFUl09ci5SR0JBOFVJLHRbUi5SR0JfSU5URUdFUl09ci5SR0I4VUksdFtSLlJHX0lOVEVHRVJdPXIuUkc4VUksdFtSLlJFRF9JTlRFR0VSXT1yLlI4VUksdFtSLkFMUEhBXT1yLkFMUEhBLHRbUi5MVU1JTkFOQ0VdPXIuTFVNSU5BTkNFLHRbUi5MVU1JTkFOQ0VfQUxQSEFdPXIuTFVNSU5BTkNFX0FMUEhBLHQpLGVbRi5CWVRFXT0oaT17fSxpW1IuUkdCQV09ci5SR0JBOF9TTk9STSxpW1IuUkdCXT1yLlJHQjhfU05PUk0saVtSLlJHXT1yLlJHOF9TTk9STSxpW1IuUkVEXT1yLlI4X1NOT1JNLGlbUi5SR0JBX0lOVEVHRVJdPXIuUkdCQThJLGlbUi5SR0JfSU5URUdFUl09ci5SR0I4SSxpW1IuUkdfSU5URUdFUl09ci5SRzhJLGlbUi5SRURfSU5URUdFUl09ci5SOEksaSksZVtGLlVOU0lHTkVEX1NIT1JUXT0obj17fSxuW1IuUkdCQV9JTlRFR0VSXT1yLlJHQkExNlVJLG5bUi5SR0JfSU5URUdFUl09ci5SR0IxNlVJLG5bUi5SR19JTlRFR0VSXT1yLlJHMTZVSSxuW1IuUkVEX0lOVEVHRVJdPXIuUjE2VUksbltSLkRFUFRIX0NPTVBPTkVOVF09ci5ERVBUSF9DT01QT05FTlQxNixuKSxlW0YuU0hPUlRdPShhPXt9LGFbUi5SR0JBX0lOVEVHRVJdPXIuUkdCQTE2SSxhW1IuUkdCX0lOVEVHRVJdPXIuUkdCMTZJLGFbUi5SR19JTlRFR0VSXT1yLlJHMTZJLGFbUi5SRURfSU5URUdFUl09ci5SMTZJLGEpLGVbRi5VTlNJR05FRF9JTlRdPShzPXt9LHNbUi5SR0JBX0lOVEVHRVJdPXIuUkdCQTMyVUksc1tSLlJHQl9JTlRFR0VSXT1yLlJHQjMyVUksc1tSLlJHX0lOVEVHRVJdPXIuUkczMlVJLHNbUi5SRURfSU5URUdFUl09ci5SMzJVSSxzW1IuREVQVEhfQ09NUE9ORU5UXT1yLkRFUFRIX0NPTVBPTkVOVDI0LHMpLGVbRi5JTlRdPShvPXt9LG9bUi5SR0JBX0lOVEVHRVJdPXIuUkdCQTMySSxvW1IuUkdCX0lOVEVHRVJdPXIuUkdCMzJJLG9bUi5SR19JTlRFR0VSXT1yLlJHMzJJLG9bUi5SRURfSU5URUdFUl09ci5SMzJJLG8pLGVbRi5GTE9BVF09KGg9e30saFtSLlJHQkFdPXIuUkdCQTMyRixoW1IuUkdCXT1yLlJHQjMyRixoW1IuUkddPXIuUkczMkYsaFtSLlJFRF09ci5SMzJGLGhbUi5ERVBUSF9DT01QT05FTlRdPXIuREVQVEhfQ09NUE9ORU5UMzJGLGgpLGVbRi5IQUxGX0ZMT0FUXT0odT17fSx1W1IuUkdCQV09ci5SR0JBMTZGLHVbUi5SR0JdPXIuUkdCMTZGLHVbUi5SR109ci5SRzE2Rix1W1IuUkVEXT1yLlIxNkYsdSksZVtGLlVOU0lHTkVEX1NIT1JUXzVfNl81XT0obD17fSxsW1IuUkdCXT1yLlJHQjU2NSxsKSxlW0YuVU5TSUdORURfU0hPUlRfNF80XzRfNF09KGM9e30sY1tSLlJHQkFdPXIuUkdCQTQsYyksZVtGLlVOU0lHTkVEX1NIT1JUXzVfNV81XzFdPShmPXt9LGZbUi5SR0JBXT1yLlJHQjVfQTEsZiksZVtGLlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVl09KGQ9e30sZFtSLlJHQkFdPXIuUkdCMTBfQTIsZFtSLlJHQkFfSU5URUdFUl09ci5SR0IxMF9BMlVJLGQpLGVbRi5VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWXT0ocD17fSxwW1IuUkdCXT1yLlIxMUZfRzExRl9CMTBGLHApLGVbRi5VTlNJR05FRF9JTlRfNV85XzlfOV9SRVZdPSh2PXt9LHZbUi5SR0JdPXIuUkdCOV9FNSx2KSxlW0YuVU5TSUdORURfSU5UXzI0XzhdPShfPXt9LF9bUi5ERVBUSF9TVEVOQ0lMXT1yLkRFUFRIMjRfU1RFTkNJTDgsXyksZVtGLkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVl09KG09e30sbVtSLkRFUFRIX1NURU5DSUxdPXIuREVQVEgzMkZfU1RFTkNJTDgsbSksZSk6RT0oZz17fSxnW0YuVU5TSUdORURfQllURV09KHk9e30seVtSLlJHQkFdPXIuUkdCQSx5W1IuUkdCXT1yLlJHQix5W1IuQUxQSEFdPXIuQUxQSEEseVtSLkxVTUlOQU5DRV09ci5MVU1JTkFOQ0UseVtSLkxVTUlOQU5DRV9BTFBIQV09ci5MVU1JTkFOQ0VfQUxQSEEseSksZ1tGLlVOU0lHTkVEX1NIT1JUXzVfNl81XT0oVD17fSxUW1IuUkdCXT1yLlJHQixUKSxnW0YuVU5TSUdORURfU0hPUlRfNF80XzRfNF09KHg9e30seFtSLlJHQkFdPXIuUkdCQSx4KSxnW0YuVU5TSUdORURfU0hPUlRfNV81XzVfMV09KGI9e30sYltSLlJHQkFdPXIuUkdCQSxiKSxnKSxFfXZhciBOaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy50ZXh0dXJlPWUsdGhpcy53aWR0aD0tMSx0aGlzLmhlaWdodD0tMSx0aGlzLmRpcnR5SWQ9LTEsdGhpcy5kaXJ0eVN0eWxlSWQ9LTEsdGhpcy5taXBtYXA9ITEsdGhpcy53cmFwTW9kZT0zMzA3MSx0aGlzLnR5cGU9Ri5VTlNJR05FRF9CWVRFLHRoaXMuaW50ZXJuYWxGb3JtYXQ9Ui5SR0JBLHRoaXMuc2FtcGxlclR5cGU9MH1yZXR1cm4gcn0oKSxpYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMuYm91bmRUZXh0dXJlcz1bXSx0aGlzLmN1cnJlbnRMb2NhdGlvbj0tMSx0aGlzLm1hbmFnZWRUZXh0dXJlcz1bXSx0aGlzLl91bmtub3duQm91bmRUZXh0dXJlcz0hMSx0aGlzLnVua25vd25UZXh0dXJlPW5ldyBqLHRoaXMuaGFzSW50ZWdlclRleHR1cmVzPSExfXJldHVybiByLnByb3RvdHlwZS5jb250ZXh0Q2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nbD10aGlzLnJlbmRlcmVyLmdsO3RoaXMuQ09OVEVYVF9VSUQ9dGhpcy5yZW5kZXJlci5DT05URVhUX1VJRCx0aGlzLndlYkdMVmVyc2lvbj10aGlzLnJlbmRlcmVyLmNvbnRleHQud2ViR0xWZXJzaW9uLHRoaXMuaW50ZXJuYWxGb3JtYXRzPXJjKGUpO3ZhciB0PWUuZ2V0UGFyYW1ldGVyKGUuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO3RoaXMuYm91bmRUZXh0dXJlcy5sZW5ndGg9dDtmb3IodmFyIGk9MDtpPHQ7aSsrKXRoaXMuYm91bmRUZXh0dXJlc1tpXT1udWxsO3RoaXMuZW1wdHlUZXh0dXJlcz17fTt2YXIgbj1uZXcgTmkoZS5jcmVhdGVUZXh0dXJlKCkpO2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELG4udGV4dHVyZSksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuUkdCQSwxLDEsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLG5ldyBVaW50OEFycmF5KDQpKSx0aGlzLmVtcHR5VGV4dHVyZXNbZS5URVhUVVJFXzJEXT1uLHRoaXMuZW1wdHlUZXh0dXJlc1tlLlRFWFRVUkVfQ1VCRV9NQVBdPW5ldyBOaShlLmNyZWF0ZVRleHR1cmUoKSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfQ1VCRV9NQVAsdGhpcy5lbXB0eVRleHR1cmVzW2UuVEVYVFVSRV9DVUJFX01BUF0udGV4dHVyZSk7Zm9yKHZhciBpPTA7aTw2O2krKyllLnRleEltYWdlMkQoZS5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1graSwwLGUuUkdCQSwxLDEsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLG51bGwpO2UudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfQ1VCRV9NQVAsZS5URVhUVVJFX01BR19GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfQ1VCRV9NQVAsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpO2Zvcih2YXIgaT0wO2k8dGhpcy5ib3VuZFRleHR1cmVzLmxlbmd0aDtpKyspdGhpcy5iaW5kKG51bGwsaSl9LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD0wKTt2YXIgaT10aGlzLmdsO2lmKGU9ZT09bnVsbD92b2lkIDA6ZS5jYXN0VG9CYXNlVGV4dHVyZSgpLGUmJmUudmFsaWQmJiFlLnBhcmVudFRleHR1cmVBcnJheSl7ZS50b3VjaGVkPXRoaXMucmVuZGVyZXIudGV4dHVyZUdDLmNvdW50O3ZhciBuPWUuX2dsVGV4dHVyZXNbdGhpcy5DT05URVhUX1VJRF18fHRoaXMuaW5pdFRleHR1cmUoZSk7dGhpcy5ib3VuZFRleHR1cmVzW3RdIT09ZSYmKHRoaXMuY3VycmVudExvY2F0aW9uIT09dCYmKHRoaXMuY3VycmVudExvY2F0aW9uPXQsaS5hY3RpdmVUZXh0dXJlKGkuVEVYVFVSRTArdCkpLGkuYmluZFRleHR1cmUoZS50YXJnZXQsbi50ZXh0dXJlKSksbi5kaXJ0eUlkIT09ZS5kaXJ0eUlkPyh0aGlzLmN1cnJlbnRMb2NhdGlvbiE9PXQmJih0aGlzLmN1cnJlbnRMb2NhdGlvbj10LGkuYWN0aXZlVGV4dHVyZShpLlRFWFRVUkUwK3QpKSx0aGlzLnVwZGF0ZVRleHR1cmUoZSkpOm4uZGlydHlTdHlsZUlkIT09ZS5kaXJ0eVN0eWxlSWQmJnRoaXMudXBkYXRlVGV4dHVyZVN0eWxlKGUpLHRoaXMuYm91bmRUZXh0dXJlc1t0XT1lfWVsc2UgdGhpcy5jdXJyZW50TG9jYXRpb24hPT10JiYodGhpcy5jdXJyZW50TG9jYXRpb249dCxpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMCt0KSksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsdGhpcy5lbXB0eVRleHR1cmVzW2kuVEVYVFVSRV8yRF0udGV4dHVyZSksdGhpcy5ib3VuZFRleHR1cmVzW3RdPW51bGx9LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fdW5rbm93bkJvdW5kVGV4dHVyZXM9ITAsdGhpcy5oYXNJbnRlZ2VyVGV4dHVyZXM9ITEsdGhpcy5jdXJyZW50TG9jYXRpb249LTE7Zm9yKHZhciBlPTA7ZTx0aGlzLmJvdW5kVGV4dHVyZXMubGVuZ3RoO2UrKyl0aGlzLmJvdW5kVGV4dHVyZXNbZV09dGhpcy51bmtub3duVGV4dHVyZX0sci5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10LmdsLG49dC5ib3VuZFRleHR1cmVzO2lmKHRoaXMuX3Vua25vd25Cb3VuZFRleHR1cmVzKXt0aGlzLl91bmtub3duQm91bmRUZXh0dXJlcz0hMTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPT09dGhpcy51bmtub3duVGV4dHVyZSYmdGhpcy5iaW5kKG51bGwsYSl9Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspblthXT09PWUmJih0aGlzLmN1cnJlbnRMb2NhdGlvbiE9PWEmJihpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMCthKSx0aGlzLmN1cnJlbnRMb2NhdGlvbj1hKSxpLmJpbmRUZXh0dXJlKGUudGFyZ2V0LHRoaXMuZW1wdHlUZXh0dXJlc1tlLnRhcmdldF0udGV4dHVyZSksblthXT1udWxsKX0sci5wcm90b3R5cGUuZW5zdXJlU2FtcGxlclR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPXQuYm91bmRUZXh0dXJlcyxuPXQuaGFzSW50ZWdlclRleHR1cmVzLGE9dC5DT05URVhUX1VJRDtpZihuKWZvcih2YXIgcz1lLTE7cz49MDstLXMpe3ZhciBvPWlbc107aWYobyl7dmFyIGg9by5fZ2xUZXh0dXJlc1thXTtoLnNhbXBsZXJUeXBlIT09b3IuRkxPQVQmJnRoaXMucmVuZGVyZXIudGV4dHVyZS51bmJpbmQobyl9fX0sci5wcm90b3R5cGUuaW5pdFRleHR1cmU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE5pKHRoaXMuZ2wuY3JlYXRlVGV4dHVyZSgpKTtyZXR1cm4gdC5kaXJ0eUlkPS0xLGUuX2dsVGV4dHVyZXNbdGhpcy5DT05URVhUX1VJRF09dCx0aGlzLm1hbmFnZWRUZXh0dXJlcy5wdXNoKGUpLGUub24oImRpc3Bvc2UiLHRoaXMuZGVzdHJveVRleHR1cmUsdGhpcyksdH0sci5wcm90b3R5cGUuaW5pdFRleHR1cmVUeXBlPWZ1bmN0aW9uKGUsdCl7dmFyIGksbjt0LmludGVybmFsRm9ybWF0PShuPShpPXRoaXMuaW50ZXJuYWxGb3JtYXRzW2UudHlwZV0pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aVtlLmZvcm1hdF0pIT09bnVsbCYmbiE9PXZvaWQgMD9uOmUuZm9ybWF0LHRoaXMud2ViR0xWZXJzaW9uPT09MiYmZS50eXBlPT09Ri5IQUxGX0ZMT0FUP3QudHlwZT10aGlzLmdsLkhBTEZfRkxPQVQ6dC50eXBlPWUudHlwZX0sci5wcm90b3R5cGUudXBkYXRlVGV4dHVyZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9nbFRleHR1cmVzW3RoaXMuQ09OVEVYVF9VSURdO2lmKHQpe3ZhciBpPXRoaXMucmVuZGVyZXI7aWYodGhpcy5pbml0VGV4dHVyZVR5cGUoZSx0KSxlLnJlc291cmNlJiZlLnJlc291cmNlLnVwbG9hZChpLGUsdCkpdC5zYW1wbGVyVHlwZSE9PW9yLkZMT0FUJiYodGhpcy5oYXNJbnRlZ2VyVGV4dHVyZXM9ITApO2Vsc2V7dmFyIG49ZS5yZWFsV2lkdGgsYT1lLnJlYWxIZWlnaHQscz1pLmdsOyh0LndpZHRoIT09bnx8dC5oZWlnaHQhPT1hfHx0LmRpcnR5SWQ8MCkmJih0LndpZHRoPW4sdC5oZWlnaHQ9YSxzLnRleEltYWdlMkQoZS50YXJnZXQsMCx0LmludGVybmFsRm9ybWF0LG4sYSwwLGUuZm9ybWF0LHQudHlwZSxudWxsKSl9ZS5kaXJ0eVN0eWxlSWQhPT10LmRpcnR5U3R5bGVJZCYmdGhpcy51cGRhdGVUZXh0dXJlU3R5bGUoZSksdC5kaXJ0eUlkPWUuZGlydHlJZH19LHIucHJvdG90eXBlLmRlc3Ryb3lUZXh0dXJlPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nbDtpZihlPWUuY2FzdFRvQmFzZVRleHR1cmUoKSxlLl9nbFRleHR1cmVzW3RoaXMuQ09OVEVYVF9VSURdJiYodGhpcy51bmJpbmQoZSksaS5kZWxldGVUZXh0dXJlKGUuX2dsVGV4dHVyZXNbdGhpcy5DT05URVhUX1VJRF0udGV4dHVyZSksZS5vZmYoImRpc3Bvc2UiLHRoaXMuZGVzdHJveVRleHR1cmUsdGhpcyksZGVsZXRlIGUuX2dsVGV4dHVyZXNbdGhpcy5DT05URVhUX1VJRF0sIXQpKXt2YXIgbj10aGlzLm1hbmFnZWRUZXh0dXJlcy5pbmRleE9mKGUpO24hPT0tMSYmU2UodGhpcy5tYW5hZ2VkVGV4dHVyZXMsbiwxKX19LHIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9nbFRleHR1cmVzW3RoaXMuQ09OVEVYVF9VSURdO3QmJigoZS5taXBtYXA9PT1SdC5QT1cyfHx0aGlzLndlYkdMVmVyc2lvbiE9PTIpJiYhZS5pc1Bvd2VyT2ZUd28/dC5taXBtYXA9ITE6dC5taXBtYXA9ZS5taXBtYXA+PTEsdGhpcy53ZWJHTFZlcnNpb24hPT0yJiYhZS5pc1Bvd2VyT2ZUd28/dC53cmFwTW9kZT1MdC5DTEFNUDp0LndyYXBNb2RlPWUud3JhcE1vZGUsZS5yZXNvdXJjZSYmZS5yZXNvdXJjZS5zdHlsZSh0aGlzLnJlbmRlcmVyLGUsdCl8fHRoaXMuc2V0U3R5bGUoZSx0KSx0LmRpcnR5U3R5bGVJZD1lLmRpcnR5U3R5bGVJZCl9LHIucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nbDtpZih0Lm1pcG1hcCYmZS5taXBtYXAhPT1SdC5PTl9NQU5VQUwmJmkuZ2VuZXJhdGVNaXBtYXAoZS50YXJnZXQpLGkudGV4UGFyYW1ldGVyaShlLnRhcmdldCxpLlRFWFRVUkVfV1JBUF9TLHQud3JhcE1vZGUpLGkudGV4UGFyYW1ldGVyaShlLnRhcmdldCxpLlRFWFRVUkVfV1JBUF9ULHQud3JhcE1vZGUpLHQubWlwbWFwKXtpLnRleFBhcmFtZXRlcmkoZS50YXJnZXQsaS5URVhUVVJFX01JTl9GSUxURVIsZS5zY2FsZU1vZGU9PT1CdC5MSU5FQVI/aS5MSU5FQVJfTUlQTUFQX0xJTkVBUjppLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QpO3ZhciBuPXRoaXMucmVuZGVyZXIuY29udGV4dC5leHRlbnNpb25zLmFuaXNvdHJvcGljRmlsdGVyaW5nO2lmKG4mJmUuYW5pc290cm9waWNMZXZlbD4wJiZlLnNjYWxlTW9kZT09PUJ0LkxJTkVBUil7dmFyIGE9TWF0aC5taW4oZS5hbmlzb3Ryb3BpY0xldmVsLGkuZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSk7aS50ZXhQYXJhbWV0ZXJmKGUudGFyZ2V0LG4uVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsYSl9fWVsc2UgaS50ZXhQYXJhbWV0ZXJpKGUudGFyZ2V0LGkuVEVYVFVSRV9NSU5fRklMVEVSLGUuc2NhbGVNb2RlPT09QnQuTElORUFSP2kuTElORUFSOmkuTkVBUkVTVCk7aS50ZXhQYXJhbWV0ZXJpKGUudGFyZ2V0LGkuVEVYVFVSRV9NQUdfRklMVEVSLGUuc2NhbGVNb2RlPT09QnQuTElORUFSP2kuTElORUFSOmkuTkVBUkVTVCl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyPW51bGx9LHJ9KCksQmk9bmV3IHZ0LG5jPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dD09PXZvaWQgMCYmKHQ9TmUuVU5LTk9XTik7dmFyIG49ci5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpPU9iamVjdC5hc3NpZ24oe30sSS5SRU5ERVJfT1BUSU9OUyxpKSxuLm9wdGlvbnM9aSxuLnR5cGU9dCxuLnNjcmVlbj1uZXcgSCgwLDAsaS53aWR0aCxpLmhlaWdodCksbi52aWV3PWkudmlld3x8SS5BREFQVEVSLmNyZWF0ZUNhbnZhcygpLG4ucmVzb2x1dGlvbj1pLnJlc29sdXRpb258fEkuUkVTT0xVVElPTixuLnVzZUNvbnRleHRBbHBoYT1pLnVzZUNvbnRleHRBbHBoYSxuLmF1dG9EZW5zaXR5PSEhaS5hdXRvRGVuc2l0eSxuLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1pLnByZXNlcnZlRHJhd2luZ0J1ZmZlcixuLmNsZWFyQmVmb3JlUmVuZGVyPWkuY2xlYXJCZWZvcmVSZW5kZXIsbi5fYmFja2dyb3VuZENvbG9yPTAsbi5fYmFja2dyb3VuZENvbG9yUmdiYT1bMCwwLDAsMV0sbi5fYmFja2dyb3VuZENvbG9yU3RyaW5nPSIjMDAwMDAwIixuLmJhY2tncm91bmRDb2xvcj1pLmJhY2tncm91bmRDb2xvcnx8bi5fYmFja2dyb3VuZENvbG9yLG4uYmFja2dyb3VuZEFscGhhPWkuYmFja2dyb3VuZEFscGhhLGkudHJhbnNwYXJlbnQhPT12b2lkIDAmJihPdCgiNi4wLjAiLCJPcHRpb24gdHJhbnNwYXJlbnQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBiYWNrZ3JvdW5kQWxwaGEgaW5zdGVhZC4iKSxuLnVzZUNvbnRleHRBbHBoYT1pLnRyYW5zcGFyZW50LG4uYmFja2dyb3VuZEFscGhhPWkudHJhbnNwYXJlbnQ/MDoxKSxuLl9sYXN0T2JqZWN0UmVuZGVyZWQ9bnVsbCxuLnBsdWdpbnM9e30sbn1yZXR1cm4gZS5wcm90b3R5cGUuaW5pdFBsdWdpbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHQpdGhpcy5wbHVnaW5zW2ldPW5ldyB0W2ldKHRoaXMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy53aWR0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuaGVpZ2h0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGkpe3RoaXMudmlldy53aWR0aD1NYXRoLnJvdW5kKHQqdGhpcy5yZXNvbHV0aW9uKSx0aGlzLnZpZXcuaGVpZ2h0PU1hdGgucm91bmQoaSp0aGlzLnJlc29sdXRpb24pO3ZhciBuPXRoaXMudmlldy53aWR0aC90aGlzLnJlc29sdXRpb24sYT10aGlzLnZpZXcuaGVpZ2h0L3RoaXMucmVzb2x1dGlvbjt0aGlzLnNjcmVlbi53aWR0aD1uLHRoaXMuc2NyZWVuLmhlaWdodD1hLHRoaXMuYXV0b0RlbnNpdHkmJih0aGlzLnZpZXcuc3R5bGUud2lkdGg9bisicHgiLHRoaXMudmlldy5zdHlsZS5oZWlnaHQ9YSsicHgiKSx0aGlzLmVtaXQoInJlc2l6ZSIsbixhKX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlPWZ1bmN0aW9uKHQsaSxuLGEpe2k9PT12b2lkIDAmJihpPXt9KSx0eXBlb2YgaT09Im51bWJlciImJihPdCgiNi4xLjAiLCJnZW5lcmF0ZVRleHR1cmUgb3B0aW9ucyAoc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByZWdpb24pIGFyZSBub3cgb2JqZWN0IG9wdGlvbnMuIiksaT17c2NhbGVNb2RlOmkscmVzb2x1dGlvbjpuLHJlZ2lvbjphfSk7dmFyIHM9aS5yZWdpb24sbz1HbChpLFsicmVnaW9uIl0pO2E9c3x8dC5nZXRMb2NhbEJvdW5kcyhudWxsLCEwKSxhLndpZHRoPT09MCYmKGEud2lkdGg9MSksYS5oZWlnaHQ9PT0wJiYoYS5oZWlnaHQ9MSk7dmFyIGg9ZmUuY3JlYXRlKEVpKHt3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodH0sbykpO3JldHVybiBCaS50eD0tYS54LEJpLnR5PS1hLnksdGhpcy5yZW5kZXIodCx7cmVuZGVyVGV4dHVyZTpoLGNsZWFyOiExLHRyYW5zZm9ybTpCaSxza2lwVXBkYXRlVHJhbnNmb3JtOiEhdC5wYXJlbnR9KSxofSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbiB0aGlzLnBsdWdpbnMpdGhpcy5wbHVnaW5zW2ldLmRlc3Ryb3koKSx0aGlzLnBsdWdpbnNbaV09bnVsbDt0JiZ0aGlzLnZpZXcucGFyZW50Tm9kZSYmdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTt2YXIgbj10aGlzO24ucGx1Z2lucz1udWxsLG4udHlwZT1OZS5VTktOT1dOLG4udmlldz1udWxsLG4uc2NyZWVuPW51bGwsbi5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ9bnVsbCxuLm9wdGlvbnM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhPW51bGwsdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nPW51bGwsdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkPW51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYmFja2dyb3VuZENvbG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JhY2tncm91bmRDb2xvcj10LHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZz1Rbih0KSx3ZSh0LHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYmFja2dyb3VuZEFscGhhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmFbM119LHNldDpmdW5jdGlvbih0KXt0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oQmUpLGFjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLmJ1ZmZlcj1lfHxudWxsLHRoaXMudXBkYXRlSUQ9LTEsdGhpcy5ieXRlTGVuZ3RoPS0xLHRoaXMucmVmQ291bnQ9MH1yZXR1cm4gcn0oKSxzYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMubWFuYWdlZEJ1ZmZlcnM9e30sdGhpcy5ib3VuZEJ1ZmZlckJhc2VzPXt9fXJldHVybiByLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlcj1udWxsfSxyLnByb3RvdHlwZS5jb250ZXh0Q2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlQWxsKCEwKSx0aGlzLmdsPXRoaXMucmVuZGVyZXIuZ2wsdGhpcy5DT05URVhUX1VJRD10aGlzLnJlbmRlcmVyLkNPTlRFWFRfVUlEfSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10LmdsLG49dC5DT05URVhUX1VJRCxhPWUuX2dsQnVmZmVyc1tuXXx8dGhpcy5jcmVhdGVHTEJ1ZmZlcihlKTtpLmJpbmRCdWZmZXIoZS50eXBlLGEuYnVmZmVyKX0sci5wcm90b3R5cGUuYmluZEJ1ZmZlckJhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLG49aS5nbCxhPWkuQ09OVEVYVF9VSUQ7aWYodGhpcy5ib3VuZEJ1ZmZlckJhc2VzW3RdIT09ZSl7dmFyIHM9ZS5fZ2xCdWZmZXJzW2FdfHx0aGlzLmNyZWF0ZUdMQnVmZmVyKGUpO3RoaXMuYm91bmRCdWZmZXJCYXNlc1t0XT1lLG4uYmluZEJ1ZmZlckJhc2Uobi5VTklGT1JNX0JVRkZFUix0LHMuYnVmZmVyKX19LHIucHJvdG90eXBlLmJpbmRCdWZmZXJSYW5nZT1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcyxhPW4uZ2wscz1uLkNPTlRFWFRfVUlEO2k9aXx8MDt2YXIgbz1lLl9nbEJ1ZmZlcnNbc118fHRoaXMuY3JlYXRlR0xCdWZmZXIoZSk7YS5iaW5kQnVmZmVyUmFuZ2UoYS5VTklGT1JNX0JVRkZFUix0fHwwLG8uYnVmZmVyLGkqMjU2LDI1Nil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dC5nbCxuPXQuQ09OVEVYVF9VSUQsYT1lLl9nbEJ1ZmZlcnNbbl07aWYoZS5fdXBkYXRlSUQhPT1hLnVwZGF0ZUlEKWlmKGEudXBkYXRlSUQ9ZS5fdXBkYXRlSUQsaS5iaW5kQnVmZmVyKGUudHlwZSxhLmJ1ZmZlciksYS5ieXRlTGVuZ3RoPj1lLmRhdGEuYnl0ZUxlbmd0aClpLmJ1ZmZlclN1YkRhdGEoZS50eXBlLDAsZS5kYXRhKTtlbHNle3ZhciBzPWUuc3RhdGljP2kuU1RBVElDX0RSQVc6aS5EWU5BTUlDX0RSQVc7YS5ieXRlTGVuZ3RoPWUuZGF0YS5ieXRlTGVuZ3RoLGkuYnVmZmVyRGF0YShlLnR5cGUsZS5kYXRhLHMpfX0sci5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbihlLHQpe2lmKHRoaXMubWFuYWdlZEJ1ZmZlcnNbZS5pZF0pe2RlbGV0ZSB0aGlzLm1hbmFnZWRCdWZmZXJzW2UuaWRdO3ZhciBpPWUuX2dsQnVmZmVyc1t0aGlzLkNPTlRFWFRfVUlEXSxuPXRoaXMuZ2w7ZS5kaXNwb3NlUnVubmVyLnJlbW92ZSh0aGlzKSxpJiYodHx8bi5kZWxldGVCdWZmZXIoaS5idWZmZXIpLGRlbGV0ZSBlLl9nbEJ1ZmZlcnNbdGhpcy5DT05URVhUX1VJRF0pfX0sci5wcm90b3R5cGUuZGlzcG9zZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXModGhpcy5tYW5hZ2VkQnVmZmVycyksaT0wO2k8dC5sZW5ndGg7aSsrKXRoaXMuZGlzcG9zZSh0aGlzLm1hbmFnZWRCdWZmZXJzW3RbaV1dLGUpfSxyLnByb3RvdHlwZS5jcmVhdGVHTEJ1ZmZlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dC5DT05URVhUX1VJRCxuPXQuZ2w7cmV0dXJuIGUuX2dsQnVmZmVyc1tpXT1uZXcgYWMobi5jcmVhdGVCdWZmZXIoKSksdGhpcy5tYW5hZ2VkQnVmZmVyc1tlLmlkXT1lLGUuZGlzcG9zZVJ1bm5lci5hZGQodGhpcyksZS5fZ2xCdWZmZXJzW2ldfSxyfSgpLExhPWZ1bmN0aW9uKHIpe1EoZSxyKTtmdW5jdGlvbiBlKHQpe3ZhciBpPXIuY2FsbCh0aGlzLE5lLldFQkdMLHQpfHx0aGlzO3JldHVybiB0PWkub3B0aW9ucyxpLmdsPW51bGwsaS5DT05URVhUX1VJRD0wLGkucnVubmVycz17ZGVzdHJveTpuZXcgeHQoImRlc3Ryb3kiKSxjb250ZXh0Q2hhbmdlOm5ldyB4dCgiY29udGV4dENoYW5nZSIpLHJlc2V0Om5ldyB4dCgicmVzZXQiKSx1cGRhdGU6bmV3IHh0KCJ1cGRhdGUiKSxwb3N0cmVuZGVyOm5ldyB4dCgicG9zdHJlbmRlciIpLHByZXJlbmRlcjpuZXcgeHQoInByZXJlbmRlciIpLHJlc2l6ZTpuZXcgeHQoInJlc2l6ZSIpfSxpLnJ1bm5lcnMuY29udGV4dENoYW5nZS5hZGQoaSksaS5nbG9iYWxVbmlmb3Jtcz1uZXcgY2Uoe3Byb2plY3Rpb25NYXRyaXg6bmV3IHZ0fSwhMCksaS5hZGRTeXN0ZW0oT2YsIm1hc2siKS5hZGRTeXN0ZW0oc2YsImNvbnRleHQiKS5hZGRTeXN0ZW0odGMsInN0YXRlIikuYWRkU3lzdGVtKHpmLCJzaGFkZXIiKS5hZGRTeXN0ZW0oaWMsInRleHR1cmUiKS5hZGRTeXN0ZW0oc2MsImJ1ZmZlciIpLmFkZFN5c3RlbShsZiwiZ2VvbWV0cnkiKS5hZGRTeXN0ZW0odWYsImZyYW1lYnVmZmVyIikuYWRkU3lzdGVtKE1mLCJzY2lzc29yIikuYWRkU3lzdGVtKERmLCJzdGVuY2lsIikuYWRkU3lzdGVtKEZmLCJwcm9qZWN0aW9uIikuYWRkU3lzdGVtKGVjLCJ0ZXh0dXJlR0MiKS5hZGRTeXN0ZW0obmYsImZpbHRlciIpLmFkZFN5c3RlbShOZiwicmVuZGVyVGV4dHVyZSIpLmFkZFN5c3RlbShhZiwiYmF0Y2giKSxpLmluaXRQbHVnaW5zKGUuX19wbHVnaW5zKSxpLm11bHRpc2FtcGxlPXZvaWQgMCx0LmNvbnRleHQ/aS5jb250ZXh0LmluaXRGcm9tQ29udGV4dCh0LmNvbnRleHQpOmkuY29udGV4dC5pbml0RnJvbU9wdGlvbnMoe2FscGhhOiEhaS51c2VDb250ZXh0QWxwaGEsYW50aWFsaWFzOnQuYW50aWFsaWFzLHByZW11bHRpcGxpZWRBbHBoYTppLnVzZUNvbnRleHRBbHBoYSYmaS51c2VDb250ZXh0QWxwaGEhPT0ibm90TXVsdGlwbGllZCIsc3RlbmNpbDohMCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIscG93ZXJQcmVmZXJlbmNlOmkub3B0aW9ucy5wb3dlclByZWZlcmVuY2V9KSxpLnJlbmRlcmluZ1RvU2NyZWVuPSEwLEJvKGkuY29udGV4dC53ZWJHTFZlcnNpb249PT0yPyJXZWJHTCAyIjoiV2ViR0wgMSIpLGkucmVzaXplKGkub3B0aW9ucy53aWR0aCxpLm9wdGlvbnMuaGVpZ2h0KSxpfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbih0KXtpZihMbygpKXJldHVybiBuZXcgZSh0KTt0aHJvdyBuZXcgRXJyb3IoJ1dlYkdMIHVuc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciwgdXNlICJwaXhpLmpzLWxlZ2FjeSIgZm9yIGZhbGxiYWNrIGNhbnZhczJkIHN1cHBvcnQuJyl9LGUucHJvdG90eXBlLmNvbnRleHRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGk7aWYodGhpcy5jb250ZXh0LndlYkdMVmVyc2lvbj09PTEpe3ZhciBuPXQuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyk7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSxpPXQuZ2V0UGFyYW1ldGVyKHQuU0FNUExFUyksdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixuKX1lbHNle3ZhciBuPXQuZ2V0UGFyYW1ldGVyKHQuRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HKTt0LmJpbmRGcmFtZWJ1ZmZlcih0LkRSQVdfRlJBTUVCVUZGRVIsbnVsbCksaT10LmdldFBhcmFtZXRlcih0LlNBTVBMRVMpLHQuYmluZEZyYW1lYnVmZmVyKHQuRFJBV19GUkFNRUJVRkZFUixuKX1pPj1odC5ISUdIP3RoaXMubXVsdGlzYW1wbGU9aHQuSElHSDppPj1odC5NRURJVU0/dGhpcy5tdWx0aXNhbXBsZT1odC5NRURJVU06aT49aHQuTE9XP3RoaXMubXVsdGlzYW1wbGU9aHQuTE9XOnRoaXMubXVsdGlzYW1wbGU9aHQuTk9ORX0sZS5wcm90b3R5cGUuYWRkU3lzdGVtPWZ1bmN0aW9uKHQsaSl7dmFyIG49bmV3IHQodGhpcyk7aWYodGhpc1tpXSl0aHJvdyBuZXcgRXJyb3IoJ1dob29wcyEgVGhlIG5hbWUgIicraSsnIiBpcyBhbHJlYWR5IGluIHVzZScpO3RoaXNbaV09bjtmb3IodmFyIGEgaW4gdGhpcy5ydW5uZXJzKXRoaXMucnVubmVyc1thXS5hZGQobik7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbih0LGkpe3ZhciBuLGEscyxvO2lmKGkmJihpIGluc3RhbmNlb2YgZmU/KE90KCI2LjAuMCIsIlJlbmRlcmVyI3JlbmRlciBhcmd1bWVudHMgY2hhbmdlZCwgdXNlIG9wdGlvbnMgaW5zdGVhZC4iKSxuPWksYT1hcmd1bWVudHNbMl0scz1hcmd1bWVudHNbM10sbz1hcmd1bWVudHNbNF0pOihuPWkucmVuZGVyVGV4dHVyZSxhPWkuY2xlYXIscz1pLnRyYW5zZm9ybSxvPWkuc2tpcFVwZGF0ZVRyYW5zZm9ybSkpLHRoaXMucmVuZGVyaW5nVG9TY3JlZW49IW4sdGhpcy5ydW5uZXJzLnByZXJlbmRlci5lbWl0KCksdGhpcy5lbWl0KCJwcmVyZW5kZXIiKSx0aGlzLnByb2plY3Rpb24udHJhbnNmb3JtPXMsIXRoaXMuY29udGV4dC5pc0xvc3Qpe2lmKG58fCh0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQ9dCksIW8pe3ZhciBoPXQuZW5hYmxlVGVtcFBhcmVudCgpO3QudXBkYXRlVHJhbnNmb3JtKCksdC5kaXNhYmxlVGVtcFBhcmVudChoKX10aGlzLnJlbmRlclRleHR1cmUuYmluZChuKSx0aGlzLmJhdGNoLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpLChhIT09dm9pZCAwP2E6dGhpcy5jbGVhckJlZm9yZVJlbmRlcikmJnRoaXMucmVuZGVyVGV4dHVyZS5jbGVhcigpLHQucmVuZGVyKHRoaXMpLHRoaXMuYmF0Y2guY3VycmVudFJlbmRlcmVyLmZsdXNoKCksbiYmbi5iYXNlVGV4dHVyZS51cGRhdGUoKSx0aGlzLnJ1bm5lcnMucG9zdHJlbmRlci5lbWl0KCksdGhpcy5wcm9qZWN0aW9uLnRyYW5zZm9ybT1udWxsLHRoaXMuZW1pdCgicG9zdHJlbmRlciIpfX0sZS5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlPWZ1bmN0aW9uKHQsaSxuLGEpe2k9PT12b2lkIDAmJihpPXt9KTt2YXIgcz1yLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUuY2FsbCh0aGlzLHQsaSxuLGEpO3JldHVybiB0aGlzLmZyYW1lYnVmZmVyLmJsaXQoKSxzfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxpKXtyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLHQsaSksdGhpcy5ydW5uZXJzLnJlc2l6ZS5lbWl0KHRoaXMuc2NyZWVuLmhlaWdodCx0aGlzLnNjcmVlbi53aWR0aCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucnVubmVycy5yZXNldC5lbWl0KCksdGhpc30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclRleHR1cmUuYmluZCgpLHRoaXMucmVuZGVyVGV4dHVyZS5jbGVhcigpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucnVubmVycy5kZXN0cm95LmVtaXQoKTtmb3IodmFyIGkgaW4gdGhpcy5ydW5uZXJzKXRoaXMucnVubmVyc1tpXS5kZXN0cm95KCk7ci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsdCksdGhpcy5nbD1udWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImV4dHJhY3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT3QoIjYuMC4wIiwiUmVuZGVyZXIjZXh0cmFjdCBoYXMgYmVlbiBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFJlbmRlcmVyI3BsdWdpbnMuZXh0cmFjdCBpbnN0ZWFkLiIpLHRoaXMucGx1Z2lucy5leHRyYWN0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucmVnaXN0ZXJQbHVnaW49ZnVuY3Rpb24odCxpKXtPdCgiNi41LjAiLCJSZW5kZXJlci5yZWdpc3RlclBsdWdpbigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZXh0ZW5zaW9ucy5hZGQoKSBpbnN0ZWFkLiIpLHp0LmFkZCh7bmFtZTp0LHR5cGU6Sy5SZW5kZXJlclBsdWdpbixyZWY6aX0pfSxlLl9fcGx1Z2lucz17fSxlfShuYyk7enQuaGFuZGxlQnlNYXAoSy5SZW5kZXJlclBsdWdpbixMYS5fX3BsdWdpbnMpO2Z1bmN0aW9uIG9jKHIpe3JldHVybiBMYS5jcmVhdGUocil9dmFyIGhjPWBhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7Cgp1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsKCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwoKdm9pZCBtYWluKHZvaWQpCnsKICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOwogICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7Cn1gLHVjPWBhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247Cgp1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsKCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwoKdW5pZm9ybSB2ZWM0IGlucHV0U2l6ZTsKdW5pZm9ybSB2ZWM0IG91dHB1dEZyYW1lOwoKdmVjNCBmaWx0ZXJWZXJ0ZXhQb3NpdGlvbiggdm9pZCApCnsKICAgIHZlYzIgcG9zaXRpb24gPSBhVmVydGV4UG9zaXRpb24gKiBtYXgob3V0cHV0RnJhbWUuencsIHZlYzIoMC4pKSArIG91dHB1dEZyYW1lLnh5OwoKICAgIHJldHVybiB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsKfQoKdmVjMiBmaWx0ZXJUZXh0dXJlQ29vcmQoIHZvaWQgKQp7CiAgICByZXR1cm4gYVZlcnRleFBvc2l0aW9uICogKG91dHB1dEZyYW1lLnp3ICogaW5wdXRTaXplLnp3KTsKfQoKdm9pZCBtYWluKHZvaWQpCnsKICAgIGdsX1Bvc2l0aW9uID0gZmlsdGVyVmVydGV4UG9zaXRpb24oKTsKICAgIHZUZXh0dXJlQ29vcmQgPSBmaWx0ZXJUZXh0dXJlQ29vcmQoKTsKfQpgLGxjPWhjLFVhPXVjLExpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe3RoaXMudGV4QXJyYXk9bnVsbCx0aGlzLmJsZW5kPTAsdGhpcy50eXBlPVB0LlRSSUFOR0xFUyx0aGlzLnN0YXJ0PTAsdGhpcy5zaXplPTAsdGhpcy5kYXRhPW51bGx9cmV0dXJuIHJ9KCksVWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7dGhpcy5lbGVtZW50cz1bXSx0aGlzLmlkcz1bXSx0aGlzLmNvdW50PTB9cmV0dXJuIHIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvdW50O2UrKyl0aGlzLmVsZW1lbnRzW2VdPW51bGw7dGhpcy5jb3VudD0wfSxyfSgpLEdpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0eXBlb2YgZT09Im51bWJlciI/dGhpcy5yYXdCaW5hcnlEYXRhPW5ldyBBcnJheUJ1ZmZlcihlKTplIGluc3RhbmNlb2YgVWludDhBcnJheT90aGlzLnJhd0JpbmFyeURhdGE9ZS5idWZmZXI6dGhpcy5yYXdCaW5hcnlEYXRhPWUsdGhpcy51aW50MzJWaWV3PW5ldyBVaW50MzJBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpLHRoaXMuZmxvYXQzMlZpZXc9bmV3IEZsb2F0MzJBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImludDhWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludDhWaWV3fHwodGhpcy5faW50OFZpZXc9bmV3IEludDhBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpKSx0aGlzLl9pbnQ4Vmlld30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInVpbnQ4VmlldyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91aW50OFZpZXd8fCh0aGlzLl91aW50OFZpZXc9bmV3IFVpbnQ4QXJyYXkodGhpcy5yYXdCaW5hcnlEYXRhKSksdGhpcy5fdWludDhWaWV3fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaW50MTZWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludDE2Vmlld3x8KHRoaXMuX2ludDE2Vmlldz1uZXcgSW50MTZBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpKSx0aGlzLl9pbnQxNlZpZXd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJ1aW50MTZWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpbnQxNlZpZXd8fCh0aGlzLl91aW50MTZWaWV3PW5ldyBVaW50MTZBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpKSx0aGlzLl91aW50MTZWaWV3fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaW50MzJWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludDMyVmlld3x8KHRoaXMuX2ludDMyVmlldz1uZXcgSW50MzJBcnJheSh0aGlzLnJhd0JpbmFyeURhdGEpKSx0aGlzLl9pbnQzMlZpZXd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUudmlldz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tlKyJWaWV3Il19LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJhd0JpbmFyeURhdGE9bnVsbCx0aGlzLl9pbnQ4Vmlldz1udWxsLHRoaXMuX3VpbnQ4Vmlldz1udWxsLHRoaXMuX2ludDE2Vmlldz1udWxsLHRoaXMuX3VpbnQxNlZpZXc9bnVsbCx0aGlzLl9pbnQzMlZpZXc9bnVsbCx0aGlzLnVpbnQzMlZpZXc9bnVsbCx0aGlzLmZsb2F0MzJWaWV3PW51bGx9LHIuc2l6ZU9mPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlImludDgiOmNhc2UidWludDgiOnJldHVybiAxO2Nhc2UiaW50MTYiOmNhc2UidWludDE2IjpyZXR1cm4gMjtjYXNlImludDMyIjpjYXNlInVpbnQzMiI6Y2FzZSJmbG9hdDMyIjpyZXR1cm4gNDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihlKyIgaXNuJ3QgYSB2YWxpZCB2aWV3IHR5cGUiKX19LHJ9KCksZmM9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCl7dmFyIGk9ci5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIGkuc2hhZGVyR2VuZXJhdG9yPW51bGwsaS5nZW9tZXRyeUNsYXNzPW51bGwsaS52ZXJ0ZXhTaXplPW51bGwsaS5zdGF0ZT1kZS5mb3IyZCgpLGkuc2l6ZT1JLlNQUklURV9CQVRDSF9TSVpFKjQsaS5fdmVydGV4Q291bnQ9MCxpLl9pbmRleENvdW50PTAsaS5fYnVmZmVyZWRFbGVtZW50cz1bXSxpLl9idWZmZXJlZFRleHR1cmVzPVtdLGkuX2J1ZmZlclNpemU9MCxpLl9zaGFkZXI9bnVsbCxpLl9wYWNrZWRHZW9tZXRyaWVzPVtdLGkuX3BhY2tlZEdlb21ldHJ5UG9vbFNpemU9MixpLl9mbHVzaElkPTAsaS5fYUJ1ZmZlcnM9e30saS5faUJ1ZmZlcnM9e30saS5NQVhfVEVYVFVSRVM9MSxpLnJlbmRlcmVyLm9uKCJwcmVyZW5kZXIiLGkub25QcmVyZW5kZXIsaSksdC5ydW5uZXJzLmNvbnRleHRDaGFuZ2UuYWRkKGkpLGkuX2RjSW5kZXg9MCxpLl9hSW5kZXg9MCxpLl9pSW5kZXg9MCxpLl9hdHRyaWJ1dGVCdWZmZXI9bnVsbCxpLl9pbmRleEJ1ZmZlcj1udWxsLGkuX3RlbXBCb3VuZFRleHR1cmVzPVtdLGl9cmV0dXJuIGUucHJvdG90eXBlLmNvbnRleHRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlbmRlcmVyLmdsO0kuUFJFRkVSX0VOVj09PWp0LldFQkdMX0xFR0FDWT90aGlzLk1BWF9URVhUVVJFUz0xOih0aGlzLk1BWF9URVhUVVJFUz1NYXRoLm1pbih0LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSxJLlNQUklURV9NQVhfVEVYVFVSRVMpLHRoaXMuTUFYX1RFWFRVUkVTPWJmKHRoaXMuTUFYX1RFWFRVUkVTLHQpKSx0aGlzLl9zaGFkZXI9dGhpcy5zaGFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVTaGFkZXIodGhpcy5NQVhfVEVYVFVSRVMpO2Zvcih2YXIgaT0wO2k8dGhpcy5fcGFja2VkR2VvbWV0cnlQb29sU2l6ZTtpKyspdGhpcy5fcGFja2VkR2VvbWV0cmllc1tpXT1uZXcgdGhpcy5nZW9tZXRyeUNsYXNzO3RoaXMuaW5pdEZsdXNoQnVmZmVycygpfSxlLnByb3RvdHlwZS5pbml0Rmx1c2hCdWZmZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWUuX2RyYXdDYWxsUG9vbCxpPWUuX3RleHR1cmVBcnJheVBvb2wsbj10aGlzLnNpemUvNCxhPU1hdGguZmxvb3Iobi90aGlzLk1BWF9URVhUVVJFUykrMTt0Lmxlbmd0aDxuOyl0LnB1c2gobmV3IExpKTtmb3IoO2kubGVuZ3RoPGE7KWkucHVzaChuZXcgVWkpO2Zvcih2YXIgcz0wO3M8dGhpcy5NQVhfVEVYVFVSRVM7cysrKXRoaXMuX3RlbXBCb3VuZFRleHR1cmVzW3NdPW51bGx9LGUucHJvdG90eXBlLm9uUHJlcmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5fZmx1c2hJZD0wfSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24odCl7dC5fdGV4dHVyZS52YWxpZCYmKHRoaXMuX3ZlcnRleENvdW50K3QudmVydGV4RGF0YS5sZW5ndGgvMj50aGlzLnNpemUmJnRoaXMuZmx1c2goKSx0aGlzLl92ZXJ0ZXhDb3VudCs9dC52ZXJ0ZXhEYXRhLmxlbmd0aC8yLHRoaXMuX2luZGV4Q291bnQrPXQuaW5kaWNlcy5sZW5ndGgsdGhpcy5fYnVmZmVyZWRUZXh0dXJlc1t0aGlzLl9idWZmZXJTaXplXT10Ll90ZXh0dXJlLmJhc2VUZXh0dXJlLHRoaXMuX2J1ZmZlcmVkRWxlbWVudHNbdGhpcy5fYnVmZmVyU2l6ZSsrXT10KX0sZS5wcm90b3R5cGUuYnVpbGRUZXh0dXJlc0FuZERyYXdDYWxscz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10Ll9idWZmZXJlZFRleHR1cmVzLG49dC5NQVhfVEVYVFVSRVMsYT1lLl90ZXh0dXJlQXJyYXlQb29sLHM9dGhpcy5yZW5kZXJlci5iYXRjaCxvPXRoaXMuX3RlbXBCb3VuZFRleHR1cmVzLGg9dGhpcy5yZW5kZXJlci50ZXh0dXJlR0MuY291bnQsdT0rK2ouX2dsb2JhbEJhdGNoLGw9MCxjPWFbMF0sZj0wO3MuY29weUJvdW5kVGV4dHVyZXMobyxuKTtmb3IodmFyIGQ9MDtkPHRoaXMuX2J1ZmZlclNpemU7KytkKXt2YXIgcD1pW2RdO2lbZF09bnVsbCxwLl9iYXRjaEVuYWJsZWQhPT11JiYoYy5jb3VudD49biYmKHMuYm91bmRBcnJheShjLG8sdSxuKSx0aGlzLmJ1aWxkRHJhd0NhbGxzKGMsZixkKSxmPWQsYz1hWysrbF0sKyt1KSxwLl9iYXRjaEVuYWJsZWQ9dSxwLnRvdWNoZWQ9aCxjLmVsZW1lbnRzW2MuY291bnQrK109cCl9Yy5jb3VudD4wJiYocy5ib3VuZEFycmF5KGMsbyx1LG4pLHRoaXMuYnVpbGREcmF3Q2FsbHMoYyxmLHRoaXMuX2J1ZmZlclNpemUpLCsrbCwrK3UpO2Zvcih2YXIgZD0wO2Q8by5sZW5ndGg7ZCsrKW9bZF09bnVsbDtqLl9nbG9iYWxCYXRjaD11fSxlLnByb3RvdHlwZS5idWlsZERyYXdDYWxscz1mdW5jdGlvbih0LGksbil7dmFyIGE9dGhpcyxzPWEuX2J1ZmZlcmVkRWxlbWVudHMsbz1hLl9hdHRyaWJ1dGVCdWZmZXIsaD1hLl9pbmRleEJ1ZmZlcix1PWEudmVydGV4U2l6ZSxsPWUuX2RyYXdDYWxsUG9vbCxjPXRoaXMuX2RjSW5kZXgsZj10aGlzLl9hSW5kZXgsZD10aGlzLl9pSW5kZXgscD1sW2NdO3Auc3RhcnQ9dGhpcy5faUluZGV4LHAudGV4QXJyYXk9dDtmb3IodmFyIHY9aTt2PG47Kyt2KXt2YXIgXz1zW3ZdLG09Xy5fdGV4dHVyZS5iYXNlVGV4dHVyZSxnPWVhW20uYWxwaGFNb2RlPzE6MF1bXy5ibGVuZE1vZGVdO3Nbdl09bnVsbCxpPHYmJnAuYmxlbmQhPT1nJiYocC5zaXplPWQtcC5zdGFydCxpPXYscD1sWysrY10scC50ZXhBcnJheT10LHAuc3RhcnQ9ZCksdGhpcy5wYWNrSW50ZXJsZWF2ZWRHZW9tZXRyeShfLG8saCxmLGQpLGYrPV8udmVydGV4RGF0YS5sZW5ndGgvMip1LGQrPV8uaW5kaWNlcy5sZW5ndGgscC5ibGVuZD1nfWk8biYmKHAuc2l6ZT1kLXAuc3RhcnQsKytjKSx0aGlzLl9kY0luZGV4PWMsdGhpcy5fYUluZGV4PWYsdGhpcy5faUluZGV4PWR9LGUucHJvdG90eXBlLmJpbmRBbmRDbGVhclRleEFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgaT10aGlzLnJlbmRlcmVyLnRleHR1cmUsbj0wO248dC5jb3VudDtuKyspaS5iaW5kKHQuZWxlbWVudHNbbl0sdC5pZHNbbl0pLHQuZWxlbWVudHNbbl09bnVsbDt0LmNvdW50PTB9LGUucHJvdG90eXBlLnVwZGF0ZUdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPXQuX3BhY2tlZEdlb21ldHJpZXMsbj10Ll9hdHRyaWJ1dGVCdWZmZXIsYT10Ll9pbmRleEJ1ZmZlcjtJLkNBTl9VUExPQURfU0FNRV9CVUZGRVI/KGlbdGhpcy5fZmx1c2hJZF0uX2J1ZmZlci51cGRhdGUobi5yYXdCaW5hcnlEYXRhKSxpW3RoaXMuX2ZsdXNoSWRdLl9pbmRleEJ1ZmZlci51cGRhdGUoYSksdGhpcy5yZW5kZXJlci5nZW9tZXRyeS51cGRhdGVCdWZmZXJzKCkpOih0aGlzLl9wYWNrZWRHZW9tZXRyeVBvb2xTaXplPD10aGlzLl9mbHVzaElkJiYodGhpcy5fcGFja2VkR2VvbWV0cnlQb29sU2l6ZSsrLGlbdGhpcy5fZmx1c2hJZF09bmV3IHRoaXMuZ2VvbWV0cnlDbGFzcyksaVt0aGlzLl9mbHVzaElkXS5fYnVmZmVyLnVwZGF0ZShuLnJhd0JpbmFyeURhdGEpLGlbdGhpcy5fZmx1c2hJZF0uX2luZGV4QnVmZmVyLnVwZGF0ZShhKSx0aGlzLnJlbmRlcmVyLmdlb21ldHJ5LmJpbmQoaVt0aGlzLl9mbHVzaElkXSksdGhpcy5yZW5kZXJlci5nZW9tZXRyeS51cGRhdGVCdWZmZXJzKCksdGhpcy5fZmx1c2hJZCsrKX0sZS5wcm90b3R5cGUuZHJhd0JhdGNoZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZGNJbmRleCxpPXRoaXMucmVuZGVyZXIsbj1pLmdsLGE9aS5zdGF0ZSxzPWUuX2RyYXdDYWxsUG9vbCxvPW51bGwsaD0wO2g8dDtoKyspe3ZhciB1PXNbaF0sbD11LnRleEFycmF5LGM9dS50eXBlLGY9dS5zaXplLGQ9dS5zdGFydCxwPXUuYmxlbmQ7byE9PWwmJihvPWwsdGhpcy5iaW5kQW5kQ2xlYXJUZXhBcnJheShsKSksdGhpcy5zdGF0ZS5ibGVuZE1vZGU9cCxhLnNldCh0aGlzLnN0YXRlKSxuLmRyYXdFbGVtZW50cyhjLGYsbi5VTlNJR05FRF9TSE9SVCxkKjIpfX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLl92ZXJ0ZXhDb3VudCE9PTAmJih0aGlzLl9hdHRyaWJ1dGVCdWZmZXI9dGhpcy5nZXRBdHRyaWJ1dGVCdWZmZXIodGhpcy5fdmVydGV4Q291bnQpLHRoaXMuX2luZGV4QnVmZmVyPXRoaXMuZ2V0SW5kZXhCdWZmZXIodGhpcy5faW5kZXhDb3VudCksdGhpcy5fYUluZGV4PTAsdGhpcy5faUluZGV4PTAsdGhpcy5fZGNJbmRleD0wLHRoaXMuYnVpbGRUZXh0dXJlc0FuZERyYXdDYWxscygpLHRoaXMudXBkYXRlR2VvbWV0cnkoKSx0aGlzLmRyYXdCYXRjaGVzKCksdGhpcy5fYnVmZmVyU2l6ZT0wLHRoaXMuX3ZlcnRleENvdW50PTAsdGhpcy5faW5kZXhDb3VudD0wKX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnN0YXRlLnNldCh0aGlzLnN0YXRlKSx0aGlzLnJlbmRlcmVyLnRleHR1cmUuZW5zdXJlU2FtcGxlclR5cGUodGhpcy5NQVhfVEVYVFVSRVMpLHRoaXMucmVuZGVyZXIuc2hhZGVyLmJpbmQodGhpcy5fc2hhZGVyKSxJLkNBTl9VUExPQURfU0FNRV9CVUZGRVImJnRoaXMucmVuZGVyZXIuZ2VvbWV0cnkuYmluZCh0aGlzLl9wYWNrZWRHZW9tZXRyaWVzW3RoaXMuX2ZsdXNoSWRdKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3RoaXMuZmx1c2goKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fcGFja2VkR2VvbWV0cnlQb29sU2l6ZTt0KyspdGhpcy5fcGFja2VkR2VvbWV0cmllc1t0XSYmdGhpcy5fcGFja2VkR2VvbWV0cmllc1t0XS5kZXN0cm95KCk7dGhpcy5yZW5kZXJlci5vZmYoInByZXJlbmRlciIsdGhpcy5vblByZXJlbmRlcix0aGlzKSx0aGlzLl9hQnVmZmVycz1udWxsLHRoaXMuX2lCdWZmZXJzPW51bGwsdGhpcy5fcGFja2VkR2VvbWV0cmllcz1udWxsLHRoaXMuX2F0dHJpYnV0ZUJ1ZmZlcj1udWxsLHRoaXMuX2luZGV4QnVmZmVyPW51bGwsdGhpcy5fc2hhZGVyJiYodGhpcy5fc2hhZGVyLmRlc3Ryb3koKSx0aGlzLl9zaGFkZXI9bnVsbCksci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVCdWZmZXI9ZnVuY3Rpb24odCl7dmFyIGk9X3IoTWF0aC5jZWlsKHQvOCkpLG49c2EoaSksYT1pKjg7dGhpcy5fYUJ1ZmZlcnMubGVuZ3RoPD1uJiYodGhpcy5faUJ1ZmZlcnMubGVuZ3RoPW4rMSk7dmFyIHM9dGhpcy5fYUJ1ZmZlcnNbYV07cmV0dXJuIHN8fCh0aGlzLl9hQnVmZmVyc1thXT1zPW5ldyBHaShhKnRoaXMudmVydGV4U2l6ZSo0KSksc30sZS5wcm90b3R5cGUuZ2V0SW5kZXhCdWZmZXI9ZnVuY3Rpb24odCl7dmFyIGk9X3IoTWF0aC5jZWlsKHQvMTIpKSxuPXNhKGkpLGE9aSoxMjt0aGlzLl9pQnVmZmVycy5sZW5ndGg8PW4mJih0aGlzLl9pQnVmZmVycy5sZW5ndGg9bisxKTt2YXIgcz10aGlzLl9pQnVmZmVyc1tuXTtyZXR1cm4gc3x8KHRoaXMuX2lCdWZmZXJzW25dPXM9bmV3IFVpbnQxNkFycmF5KGEpKSxzfSxlLnByb3RvdHlwZS5wYWNrSW50ZXJsZWF2ZWRHZW9tZXRyeT1mdW5jdGlvbih0LGksbixhLHMpe2Zvcih2YXIgbz1pLnVpbnQzMlZpZXcsaD1pLmZsb2F0MzJWaWV3LHU9YS90aGlzLnZlcnRleFNpemUsbD10LnV2cyxjPXQuaW5kaWNlcyxmPXQudmVydGV4RGF0YSxkPXQuX3RleHR1cmUuYmFzZVRleHR1cmUuX2JhdGNoTG9jYXRpb24scD1NYXRoLm1pbih0LndvcmxkQWxwaGEsMSksdj1wPDEmJnQuX3RleHR1cmUuYmFzZVRleHR1cmUuYWxwaGFNb2RlP19pKHQuX3RpbnRSR0IscCk6dC5fdGludFJHQisocCoyNTU8PDI0KSxfPTA7XzxmLmxlbmd0aDtfKz0yKWhbYSsrXT1mW19dLGhbYSsrXT1mW18rMV0saFthKytdPWxbX10saFthKytdPWxbXysxXSxvW2ErK109dixoW2ErK109ZDtmb3IodmFyIF89MDtfPGMubGVuZ3RoO18rKyluW3MrK109dStjW19dfSxlLl9kcmF3Q2FsbFBvb2w9W10sZS5fdGV4dHVyZUFycmF5UG9vbD1bXSxlfShQciksY2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7aWYodGhpcy52ZXJ0ZXhTcmM9ZSx0aGlzLmZyYWdUZW1wbGF0ZT10LHRoaXMucHJvZ3JhbUNhY2hlPXt9LHRoaXMuZGVmYXVsdEdyb3VwQ2FjaGU9e30sdC5pbmRleE9mKCIlY291bnQlIik8MCl0aHJvdyBuZXcgRXJyb3IoJ0ZyYWdtZW50IHRlbXBsYXRlIG11c3QgY29udGFpbiAiJWNvdW50JSIuJyk7aWYodC5pbmRleE9mKCIlZm9ybG9vcCUiKTwwKXRocm93IG5ldyBFcnJvcignRnJhZ21lbnQgdGVtcGxhdGUgbXVzdCBjb250YWluICIlZm9ybG9vcCUiLicpfXJldHVybiByLnByb3RvdHlwZS5nZW5lcmF0ZVNoYWRlcj1mdW5jdGlvbihlKXtpZighdGhpcy5wcm9ncmFtQ2FjaGVbZV0pe2Zvcih2YXIgdD1uZXcgSW50MzJBcnJheShlKSxpPTA7aTxlO2krKyl0W2ldPWk7dGhpcy5kZWZhdWx0R3JvdXBDYWNoZVtlXT1jZS5mcm9tKHt1U2FtcGxlcnM6dH0sITApO3ZhciBuPXRoaXMuZnJhZ1RlbXBsYXRlO249bi5yZXBsYWNlKC8lY291bnQlL2dpLCIiK2UpLG49bi5yZXBsYWNlKC8lZm9ybG9vcCUvZ2ksdGhpcy5nZW5lcmF0ZVNhbXBsZVNyYyhlKSksdGhpcy5wcm9ncmFtQ2FjaGVbZV09bmV3IHFlKHRoaXMudmVydGV4U3JjLG4pfXZhciBhPXt0aW50Om5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxLDFdKSx0cmFuc2xhdGlvbk1hdHJpeDpuZXcgdnQsZGVmYXVsdDp0aGlzLmRlZmF1bHRHcm91cENhY2hlW2VdfTtyZXR1cm4gbmV3IEp0KHRoaXMucHJvZ3JhbUNhY2hlW2VdLGEpfSxyLnByb3RvdHlwZS5nZW5lcmF0ZVNhbXBsZVNyYz1mdW5jdGlvbihlKXt2YXIgdD0iIjt0Kz1gCmAsdCs9YApgO2Zvcih2YXIgaT0wO2k8ZTtpKyspaT4wJiYodCs9YAplbHNlIGApLGk8ZS0xJiYodCs9ImlmKHZUZXh0dXJlSWQgPCAiK2krIi41KSIpLHQrPWAKe2AsdCs9YAoJY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXJzW2AraSsiXSwgdlRleHR1cmVDb29yZCk7Iix0Kz1gCn1gO3JldHVybiB0Kz1gCmAsdCs9YApgLHR9LHJ9KCksR2E9ZnVuY3Rpb24ocil7UShlLHIpO2Z1bmN0aW9uIGUodCl7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBpPXIuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fYnVmZmVyPW5ldyBfdChudWxsLHQsITEpLGkuX2luZGV4QnVmZmVyPW5ldyBfdChudWxsLHQsITApLGkuYWRkQXR0cmlidXRlKCJhVmVydGV4UG9zaXRpb24iLGkuX2J1ZmZlciwyLCExLEYuRkxPQVQpLmFkZEF0dHJpYnV0ZSgiYVRleHR1cmVDb29yZCIsaS5fYnVmZmVyLDIsITEsRi5GTE9BVCkuYWRkQXR0cmlidXRlKCJhQ29sb3IiLGkuX2J1ZmZlciw0LCEwLEYuVU5TSUdORURfQllURSkuYWRkQXR0cmlidXRlKCJhVGV4dHVyZUlkIixpLl9idWZmZXIsMSwhMCxGLkZMT0FUKS5hZGRJbmRleChpLl9pbmRleEJ1ZmZlciksaX1yZXR1cm4gZX0oWWUpLGthPWBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsKYXR0cmlidXRlIHZlYzQgYUNvbG9yOwphdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4Owp1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7CnVuaWZvcm0gdmVjNCB0aW50OwoKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7CnZhcnlpbmcgdmVjNCB2Q29sb3I7CnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsKCnZvaWQgbWFpbih2b2lkKXsKICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7CgogICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7CiAgICB2VGV4dHVyZUlkID0gYVRleHR1cmVJZDsKICAgIHZDb2xvciA9IGFDb2xvciAqIHRpbnQ7Cn0KYCxYYT1gdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7CnZhcnlpbmcgdmVjNCB2Q29sb3I7CnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsKdW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJzWyVjb3VudCVdOwoKdm9pZCBtYWluKHZvaWQpewogICAgdmVjNCBjb2xvcjsKICAgICVmb3Jsb29wJQogICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiB2Q29sb3I7Cn0KYCxkYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuY3JlYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe3ZlcnRleDprYSxmcmFnbWVudDpYYSxnZW9tZXRyeUNsYXNzOkdhLHZlcnRleFNpemU6Nn0sZSksaT10LnZlcnRleCxuPXQuZnJhZ21lbnQsYT10LnZlcnRleFNpemUscz10Lmdlb21ldHJ5Q2xhc3M7cmV0dXJuIGZ1bmN0aW9uKG8pe1EoaCxvKTtmdW5jdGlvbiBoKHUpe3ZhciBsPW8uY2FsbCh0aGlzLHUpfHx0aGlzO3JldHVybiBsLnNoYWRlckdlbmVyYXRvcj1uZXcgY2MoaSxuKSxsLmdlb21ldHJ5Q2xhc3M9cyxsLnZlcnRleFNpemU9YSxsfXJldHVybiBofShmYyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0VmVydGV4U3JjIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGthfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0RnJhZ21lbnRUZW1wbGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBYYX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyfSgpLEhhPWRjLmNyZWF0ZSgpO09iamVjdC5hc3NpZ24oSGEse2V4dGVuc2lvbjp7bmFtZToiYmF0Y2giLHR5cGU6Sy5SZW5kZXJlclBsdWdpbn19KTt2YXIgcGM9e2FjY2Vzc2libGU6ITEsYWNjZXNzaWJsZVRpdGxlOm51bGwsYWNjZXNzaWJsZUhpbnQ6bnVsbCx0YWJJbmRleDowLF9hY2Nlc3NpYmxlQWN0aXZlOiExLF9hY2Nlc3NpYmxlRGl2Om51bGwsYWNjZXNzaWJsZVR5cGU6ImJ1dHRvbiIsYWNjZXNzaWJsZVBvaW50ZXJFdmVudHM6ImF1dG8iLGFjY2Vzc2libGVDaGlsZHJlbjohMCxyZW5kZXJJZDotMX07bHQubWl4aW4ocGMpO3ZhciB2Yz05LE9yPTEwMCxfYz0wLG1jPTAsamE9MixWYT0xLGdjPS0xZTMseWM9LTFlMyx4Yz0yLGJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt0aGlzLmRlYnVnPSExLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuX2lzTW9iaWxlQWNjZXNzaWJpbGl0eT0hMSx0aGlzLnBvb2w9W10sdGhpcy5yZW5kZXJJZD0wLHRoaXMuY2hpbGRyZW49W10sdGhpcy5hbmRyb2lkVXBkYXRlQ291bnQ9MCx0aGlzLmFuZHJvaWRVcGRhdGVGcmVxdWVuY3k9NTAwLHRoaXMuX2hvb2tEaXY9bnVsbCwoR3QudGFibGV0fHxHdC5waG9uZSkmJnRoaXMuY3JlYXRlVG91Y2hIb29rKCk7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5zdHlsZS53aWR0aD1PcisicHgiLHQuc3R5bGUuaGVpZ2h0PU9yKyJweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPV9jKyJweCIsdC5zdHlsZS5sZWZ0PW1jKyJweCIsdC5zdHlsZS56SW5kZXg9amEudG9TdHJpbmcoKSx0aGlzLmRpdj10LHRoaXMucmVuZGVyZXI9ZSx0aGlzLl9vbktleURvd249dGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdGhpcy5fb25Nb3VzZU1vdmU9dGhpcy5fb25Nb3VzZU1vdmUuYmluZCh0aGlzKSxnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaXNBY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJpc01vYmlsZUFjY2Vzc2liaWxpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNb2JpbGVBY2Nlc3NpYmlsaXR5fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHIucHJvdG90eXBlLmNyZWF0ZVRvdWNoSG9vaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTt0LnN0eWxlLndpZHRoPVZhKyJweCIsdC5zdHlsZS5oZWlnaHQ9VmErInB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Z2MrInB4Iix0LnN0eWxlLmxlZnQ9eWMrInB4Iix0LnN0eWxlLnpJbmRleD14Yy50b1N0cmluZygpLHQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjRkYwMDAwIix0LnRpdGxlPSJzZWxlY3QgdG8gZW5hYmxlIGFjY2Vzc2liaWxpdHkgZm9yIHRoaXMgY29udGVudCIsdC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXtlLl9pc01vYmlsZUFjY2Vzc2liaWxpdHk9ITAsZS5hY3RpdmF0ZSgpLGUuZGVzdHJveVRvdWNoSG9vaygpfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9ob29rRGl2PXR9LHIucHJvdG90eXBlLmRlc3Ryb3lUb3VjaEhvb2s9ZnVuY3Rpb24oKXt0aGlzLl9ob29rRGl2JiYoZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9ob29rRGl2KSx0aGlzLl9ob29rRGl2PW51bGwpfSxyLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBlO3RoaXMuX2lzQWN0aXZlfHwodGhpcy5faXNBY3RpdmU9ITAsZ2xvYmFsVGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlLCEwKSxnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5yZW5kZXJlci5vbigicG9zdHJlbmRlciIsdGhpcy51cGRhdGUsdGhpcyksKGU9dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMHx8ZS5hcHBlbmRDaGlsZCh0aGlzLmRpdikpfSxyLnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGU7IXRoaXMuX2lzQWN0aXZlfHx0aGlzLl9pc01vYmlsZUFjY2Vzc2liaWxpdHl8fCh0aGlzLl9pc0FjdGl2ZT0hMSxnbG9iYWxUaGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITApLGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0aGlzLnJlbmRlcmVyLm9mZigicG9zdHJlbmRlciIsdGhpcy51cGRhdGUpLChlPXRoaXMuZGl2LnBhcmVudE5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMHx8ZS5yZW1vdmVDaGlsZCh0aGlzLmRpdikpfSxyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cz1mdW5jdGlvbihlKXtpZighKCFlLnZpc2libGV8fCFlLmFjY2Vzc2libGVDaGlsZHJlbikpe2UuYWNjZXNzaWJsZSYmZS5pbnRlcmFjdGl2ZSYmKGUuX2FjY2Vzc2libGVBY3RpdmV8fHRoaXMuYWRkQ2hpbGQoZSksZS5yZW5kZXJJZD10aGlzLnJlbmRlcklkKTt2YXIgdD1lLmNoaWxkcmVuO2lmKHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0W2ldKX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXBlcmZvcm1hbmNlLm5vdygpO2lmKCEoR3QuYW5kcm9pZC5kZXZpY2UmJmU8dGhpcy5hbmRyb2lkVXBkYXRlQ291bnQpJiYodGhpcy5hbmRyb2lkVXBkYXRlQ291bnQ9ZSt0aGlzLmFuZHJvaWRVcGRhdGVGcmVxdWVuY3ksISF0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ1RvU2NyZWVuKSl7dGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkJiZ0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCk7dmFyIHQ9dGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5sZWZ0LG49dC50b3AsYT10LndpZHRoLHM9dC5oZWlnaHQsbz10aGlzLnJlbmRlcmVyLGg9by53aWR0aCx1PW8uaGVpZ2h0LGw9by5yZXNvbHV0aW9uLGM9YS9oKmwsZj1zL3UqbCxkPXRoaXMuZGl2O2Quc3R5bGUubGVmdD1pKyJweCIsZC5zdHlsZS50b3A9bisicHgiLGQuc3R5bGUud2lkdGg9aCsicHgiLGQuc3R5bGUuaGVpZ2h0PXUrInB4Ijtmb3IodmFyIHA9MDtwPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3ArKyl7dmFyIHY9dGhpcy5jaGlsZHJlbltwXTtpZih2LnJlbmRlcklkIT09dGhpcy5yZW5kZXJJZCl2Ll9hY2Nlc3NpYmxlQWN0aXZlPSExLFNlKHRoaXMuY2hpbGRyZW4scCwxKSx0aGlzLmRpdi5yZW1vdmVDaGlsZCh2Ll9hY2Nlc3NpYmxlRGl2KSx0aGlzLnBvb2wucHVzaCh2Ll9hY2Nlc3NpYmxlRGl2KSx2Ll9hY2Nlc3NpYmxlRGl2PW51bGwscC0tO2Vsc2V7ZD12Ll9hY2Nlc3NpYmxlRGl2O3ZhciBfPXYuaGl0QXJlYSxtPXYud29ybGRUcmFuc2Zvcm07di5oaXRBcmVhPyhkLnN0eWxlLmxlZnQ9KG0udHgrXy54Km0uYSkqYysicHgiLGQuc3R5bGUudG9wPShtLnR5K18ueSptLmQpKmYrInB4IixkLnN0eWxlLndpZHRoPV8ud2lkdGgqbS5hKmMrInB4IixkLnN0eWxlLmhlaWdodD1fLmhlaWdodCptLmQqZisicHgiKTooXz12LmdldEJvdW5kcygpLHRoaXMuY2FwSGl0QXJlYShfKSxkLnN0eWxlLmxlZnQ9Xy54KmMrInB4IixkLnN0eWxlLnRvcD1fLnkqZisicHgiLGQuc3R5bGUud2lkdGg9Xy53aWR0aCpjKyJweCIsZC5zdHlsZS5oZWlnaHQ9Xy5oZWlnaHQqZisicHgiLGQudGl0bGUhPT12LmFjY2Vzc2libGVUaXRsZSYmdi5hY2Nlc3NpYmxlVGl0bGUhPT1udWxsJiYoZC50aXRsZT12LmFjY2Vzc2libGVUaXRsZSksZC5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKSE9PXYuYWNjZXNzaWJsZUhpbnQmJnYuYWNjZXNzaWJsZUhpbnQhPT1udWxsJiZkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdi5hY2Nlc3NpYmxlSGludCkpLCh2LmFjY2Vzc2libGVUaXRsZSE9PWQudGl0bGV8fHYudGFiSW5kZXghPT1kLnRhYkluZGV4KSYmKGQudGl0bGU9di5hY2Nlc3NpYmxlVGl0bGUsZC50YWJJbmRleD12LnRhYkluZGV4LHRoaXMuZGVidWcmJnRoaXMudXBkYXRlRGVidWdIVE1MKGQpKX19dGhpcy5yZW5kZXJJZCsrfX0sci5wcm90b3R5cGUudXBkYXRlRGVidWdIVE1MPWZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSJ0eXBlOiAiK2UudHlwZSsiPC9icj4gdGl0bGUgOiAiK2UudGl0bGUrIjwvYnI+IHRhYkluZGV4OiAiK2UudGFiSW5kZXh9LHIucHJvdG90eXBlLmNhcEhpdEFyZWE9ZnVuY3Rpb24oZSl7ZS54PDAmJihlLndpZHRoKz1lLngsZS54PTApLGUueTwwJiYoZS5oZWlnaHQrPWUueSxlLnk9MCk7dmFyIHQ9dGhpcy5yZW5kZXJlcixpPXQud2lkdGgsbj10LmhlaWdodDtlLngrZS53aWR0aD5pJiYoZS53aWR0aD1pLWUueCksZS55K2UuaGVpZ2h0Pm4mJihlLmhlaWdodD1uLWUueSl9LHIucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucG9vbC5wb3AoKTt0fHwodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSx0LnN0eWxlLndpZHRoPU9yKyJweCIsdC5zdHlsZS5oZWlnaHQ9T3IrInB4Iix0LnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmRlYnVnPyJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiOiJ0cmFuc3BhcmVudCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUuekluZGV4PWphLnRvU3RyaW5nKCksdC5zdHlsZS5ib3JkZXJTdHlsZT0ibm9uZSIsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImNocm9tZSIpPi0xP3Quc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLCJvZmYiKTp0LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvcnY6LipHZWNrb1wvLyk/dC5zZXRBdHRyaWJ1dGUoImFyaWEtcmVsZXZhbnQiLCJhZGRpdGlvbnMiKTp0LnNldEF0dHJpYnV0ZSgiYXJpYS1yZWxldmFudCIsInRleHQiKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKSksdC5zdHlsZS5wb2ludGVyRXZlbnRzPWUuYWNjZXNzaWJsZVBvaW50ZXJFdmVudHMsdC50eXBlPWUuYWNjZXNzaWJsZVR5cGUsZS5hY2Nlc3NpYmxlVGl0bGUmJmUuYWNjZXNzaWJsZVRpdGxlIT09bnVsbD90LnRpdGxlPWUuYWNjZXNzaWJsZVRpdGxlOighZS5hY2Nlc3NpYmxlSGludHx8ZS5hY2Nlc3NpYmxlSGludD09PW51bGwpJiYodC50aXRsZT0iZGlzcGxheU9iamVjdCAiK2UudGFiSW5kZXgpLGUuYWNjZXNzaWJsZUhpbnQmJmUuYWNjZXNzaWJsZUhpbnQhPT1udWxsJiZ0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsZS5hY2Nlc3NpYmxlSGludCksdGhpcy5kZWJ1ZyYmdGhpcy51cGRhdGVEZWJ1Z0hUTUwodCksZS5fYWNjZXNzaWJsZUFjdGl2ZT0hMCxlLl9hY2Nlc3NpYmxlRGl2PXQsdC5kaXNwbGF5T2JqZWN0PWUsdGhpcy5jaGlsZHJlbi5wdXNoKGUpLHRoaXMuZGl2LmFwcGVuZENoaWxkKGUuX2FjY2Vzc2libGVEaXYpLGUuX2FjY2Vzc2libGVEaXYudGFiSW5kZXg9ZS50YWJJbmRleH0sci5wcm90b3R5cGUuX29uQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uLGk9ZS50YXJnZXQuZGlzcGxheU9iamVjdCxuPXQuZXZlbnREYXRhO3QuZGlzcGF0Y2hFdmVudChpLCJjbGljayIsbiksdC5kaXNwYXRjaEV2ZW50KGksInBvaW50ZXJ0YXAiLG4pLHQuZGlzcGF0Y2hFdmVudChpLCJ0YXAiLG4pfSxyLnByb3RvdHlwZS5fb25Gb2N1cz1mdW5jdGlvbihlKXtlLnRhcmdldC5nZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpfHxlLnRhcmdldC5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsImFzc2VydGl2ZSIpO3ZhciB0PXRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbixpPWUudGFyZ2V0LmRpc3BsYXlPYmplY3Qsbj10LmV2ZW50RGF0YTt0LmRpc3BhdGNoRXZlbnQoaSwibW91c2VvdmVyIixuKX0sci5wcm90b3R5cGUuX29uRm9jdXNPdXQ9ZnVuY3Rpb24oZSl7ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiKXx8ZS50YXJnZXQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLCJwb2xpdGUiKTt2YXIgdD10aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb24saT1lLnRhcmdldC5kaXNwbGF5T2JqZWN0LG49dC5ldmVudERhdGE7dC5kaXNwYXRjaEV2ZW50KGksIm1vdXNlb3V0IixuKX0sci5wcm90b3R5cGUuX29uS2V5RG93bj1mdW5jdGlvbihlKXtlLmtleUNvZGU9PT12YyYmdGhpcy5hY3RpdmF0ZSgpfSxyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24oZSl7ZS5tb3ZlbWVudFg9PT0wJiZlLm1vdmVtZW50WT09PTB8fHRoaXMuZGVhY3RpdmF0ZSgpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95VG91Y2hIb29rKCksdGhpcy5kaXY9bnVsbCxnbG9iYWxUaGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITApLGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLnBvb2w9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5yZW5kZXJlcj1udWxsfSxyLmV4dGVuc2lvbj17bmFtZToiYWNjZXNzaWJpbGl0eSIsdHlwZTpbSy5SZW5kZXJlclBsdWdpbixLLkNhbnZhc1JlbmRlcmVyUGx1Z2luXX0scn0oKTt2YXIgWWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7dGhpcy5wcmVzc3VyZT0wLHRoaXMucm90YXRpb25BbmdsZT0wLHRoaXMudHdpc3Q9MCx0aGlzLnRhbmdlbnRpYWxQcmVzc3VyZT0wLHRoaXMuZ2xvYmFsPW5ldyB0dCx0aGlzLnRhcmdldD1udWxsLHRoaXMub3JpZ2luYWxFdmVudD1udWxsLHRoaXMuaWRlbnRpZmllcj1udWxsLHRoaXMuaXNQcmltYXJ5PSExLHRoaXMuYnV0dG9uPTAsdGhpcy5idXR0b25zPTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy50aWx0WD0wLHRoaXMudGlsdFk9MCx0aGlzLnBvaW50ZXJUeXBlPW51bGwsdGhpcy5wcmVzc3VyZT0wLHRoaXMucm90YXRpb25BbmdsZT0wLHRoaXMudHdpc3Q9MCx0aGlzLnRhbmdlbnRpYWxQcmVzc3VyZT0wfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInBvaW50ZXJJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkZW50aWZpZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbj1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKGl8fHRoaXMuZ2xvYmFsLHQpfSxyLnByb3RvdHlwZS5jb3B5RXZlbnQ9ZnVuY3Rpb24oZSl7ImlzUHJpbWFyeSJpbiBlJiZlLmlzUHJpbWFyeSYmKHRoaXMuaXNQcmltYXJ5PSEwKSx0aGlzLmJ1dHRvbj0iYnV0dG9uImluIGUmJmUuYnV0dG9uO3ZhciB0PSJidXR0b25zImluIGUmJmUuYnV0dG9uczt0aGlzLmJ1dHRvbnM9TnVtYmVyLmlzSW50ZWdlcih0KT90OiJ3aGljaCJpbiBlJiZlLndoaWNoLHRoaXMud2lkdGg9IndpZHRoImluIGUmJmUud2lkdGgsdGhpcy5oZWlnaHQ9ImhlaWdodCJpbiBlJiZlLmhlaWdodCx0aGlzLnRpbHRYPSJ0aWx0WCJpbiBlJiZlLnRpbHRYLHRoaXMudGlsdFk9InRpbHRZImluIGUmJmUudGlsdFksdGhpcy5wb2ludGVyVHlwZT0icG9pbnRlclR5cGUiaW4gZSYmZS5wb2ludGVyVHlwZSx0aGlzLnByZXNzdXJlPSJwcmVzc3VyZSJpbiBlJiZlLnByZXNzdXJlLHRoaXMucm90YXRpb25BbmdsZT0icm90YXRpb25BbmdsZSJpbiBlJiZlLnJvdGF0aW9uQW5nbGUsdGhpcy50d2lzdD0idHdpc3QiaW4gZSYmZS50d2lzdHx8MCx0aGlzLnRhbmdlbnRpYWxQcmVzc3VyZT0idGFuZ2VudGlhbFByZXNzdXJlImluIGUmJmUudGFuZ2VudGlhbFByZXNzdXJlfHwwfSxyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuaXNQcmltYXJ5PSExfSxyfSgpO3ZhciBraT1mdW5jdGlvbihyLGUpe3JldHVybiBraT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sa2kocixlKX07ZnVuY3Rpb24gVGMocixlKXtraShyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBFYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLnN0b3BwZWQ9ITEsdGhpcy5zdG9wc1Byb3BhZ2F0aW5nQXQ9bnVsbCx0aGlzLnN0b3BQcm9wYWdhdGlvbkhpbnQ9ITEsdGhpcy50YXJnZXQ9bnVsbCx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLmRhdGE9bnVsbH1yZXR1cm4gci5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zdG9wcGVkPSEwLHRoaXMuc3RvcFByb3BhZ2F0aW9uSGludD0hMCx0aGlzLnN0b3BzUHJvcGFnYXRpbmdBdD10aGlzLmN1cnJlbnRUYXJnZXR9LHIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zdG9wcGVkPSExLHRoaXMuc3RvcHNQcm9wYWdhdGluZ0F0PW51bGwsdGhpcy5zdG9wUHJvcGFnYXRpb25IaW50PSExLHRoaXMuY3VycmVudFRhcmdldD1udWxsLHRoaXMudGFyZ2V0PW51bGx9LHJ9KCksWGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMuX3BvaW50ZXJJZD1lLHRoaXMuX2ZsYWdzPXIuRkxBR1MuTk9ORX1yZXR1cm4gci5wcm90b3R5cGUuX2RvU2V0PWZ1bmN0aW9uKGUsdCl7dD90aGlzLl9mbGFncz10aGlzLl9mbGFnc3xlOnRoaXMuX2ZsYWdzPXRoaXMuX2ZsYWdzJn5lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInBvaW50ZXJJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb2ludGVySWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJmbGFncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mbGFnc30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2ZsYWdzPWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJub25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZsYWdzPT09ci5GTEFHUy5OT05FfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwib3ZlciIse2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLl9mbGFncyZyLkZMQUdTLk9WRVIpIT09MH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2RvU2V0KHIuRkxBR1MuT1ZFUixlKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInJpZ2h0RG93biIse2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLl9mbGFncyZyLkZMQUdTLlJJR0hUX0RPV04pIT09MH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2RvU2V0KHIuRkxBR1MuUklHSFRfRE9XTixlKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImxlZnREb3duIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuX2ZsYWdzJnIuRkxBR1MuTEVGVF9ET1dOKSE9PTB9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9kb1NldChyLkZMQUdTLkxFRlRfRE9XTixlKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLkZMQUdTPU9iamVjdC5mcmVlemUoe05PTkU6MCxPVkVSOjE8PDAsTEVGVF9ET1dOOjE8PDEsUklHSFRfRE9XTjoxPDwyfSkscn0oKSx3Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLl90ZW1wUG9pbnQ9bmV3IHR0fXJldHVybiByLnByb3RvdHlwZS5yZWN1cnNpdmVGaW5kSGl0PWZ1bmN0aW9uKGUsdCxpLG4sYSl7dmFyIHM7aWYoIXR8fCF0LnZpc2libGUpcmV0dXJuITE7dmFyIG89ZS5kYXRhLmdsb2JhbDthPXQuaW50ZXJhY3RpdmV8fGE7dmFyIGg9ITEsdT1hLGw9ITA7aWYodC5oaXRBcmVhKW4mJih0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShvLHRoaXMuX3RlbXBQb2ludCksdC5oaXRBcmVhLmNvbnRhaW5zKHRoaXMuX3RlbXBQb2ludC54LHRoaXMuX3RlbXBQb2ludC55KT9oPSEwOihuPSExLGw9ITEpKSx1PSExO2Vsc2UgaWYodC5fbWFzayYmbil7dmFyIGM9dC5fbWFzay5pc01hc2tEYXRhP3QuX21hc2subWFza09iamVjdDp0Ll9tYXNrO2MmJiEoISgocz1jLmNvbnRhaW5zUG9pbnQpPT09bnVsbHx8cz09PXZvaWQgMCkmJnMuY2FsbChjLG8pKSYmKG49ITEpfWlmKGwmJnQuaW50ZXJhY3RpdmVDaGlsZHJlbiYmdC5jaGlsZHJlbilmb3IodmFyIGY9dC5jaGlsZHJlbixkPWYubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBwPWZbZF0sdj10aGlzLnJlY3Vyc2l2ZUZpbmRIaXQoZSxwLGksbix1KTtpZih2KXtpZighcC5wYXJlbnQpY29udGludWU7dT0hMSx2JiYoZS50YXJnZXQmJihuPSExKSxoPSEwKX19cmV0dXJuIGEmJihuJiYhZS50YXJnZXQmJiF0LmhpdEFyZWEmJnQuY29udGFpbnNQb2ludCYmdC5jb250YWluc1BvaW50KG8pJiYoaD0hMCksdC5pbnRlcmFjdGl2ZSYmKGgmJiFlLnRhcmdldCYmKGUudGFyZ2V0PXQpLGkmJmkoZSx0LCEhaCkpKSxofSxyLnByb3RvdHlwZS5maW5kSGl0PWZ1bmN0aW9uKGUsdCxpLG4pe3RoaXMucmVjdXJzaXZlRmluZEhpdChlLHQsaSxuLCExKX0scn0oKSxTYz17aW50ZXJhY3RpdmU6ITEsaW50ZXJhY3RpdmVDaGlsZHJlbjohMCxoaXRBcmVhOm51bGwsZ2V0IGJ1dHRvbk1vZGUoKXtyZXR1cm4gdGhpcy5jdXJzb3I9PT0icG9pbnRlciJ9LHNldCBidXR0b25Nb2RlKHIpe3I/dGhpcy5jdXJzb3I9InBvaW50ZXIiOnRoaXMuY3Vyc29yPT09InBvaW50ZXIiJiYodGhpcy5jdXJzb3I9bnVsbCl9LGN1cnNvcjpudWxsLGdldCB0cmFja2VkUG9pbnRlcnMoKXtyZXR1cm4gdGhpcy5fdHJhY2tlZFBvaW50ZXJzPT09dm9pZCAwJiYodGhpcy5fdHJhY2tlZFBvaW50ZXJzPXt9KSx0aGlzLl90cmFja2VkUG9pbnRlcnN9LF90cmFja2VkUG9pbnRlcnM6dm9pZCAwfTtsdC5taXhpbihTYyk7dmFyIE1yPTEsRHI9e3RhcmdldDpudWxsLGRhdGE6e2dsb2JhbDpudWxsfX0sUGM9ZnVuY3Rpb24ocil7VGMoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49ci5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpPWl8fHt9LG4ucmVuZGVyZXI9dCxuLmF1dG9QcmV2ZW50RGVmYXVsdD1pLmF1dG9QcmV2ZW50RGVmYXVsdCE9PXZvaWQgMD9pLmF1dG9QcmV2ZW50RGVmYXVsdDohMCxuLmludGVyYWN0aW9uRnJlcXVlbmN5PWkuaW50ZXJhY3Rpb25GcmVxdWVuY3l8fDEwLG4ubW91c2U9bmV3IFlhLG4ubW91c2UuaWRlbnRpZmllcj1NcixuLm1vdXNlLmdsb2JhbC5zZXQoLTk5OTk5OSksbi5hY3RpdmVJbnRlcmFjdGlvbkRhdGE9e30sbi5hY3RpdmVJbnRlcmFjdGlvbkRhdGFbTXJdPW4ubW91c2Usbi5pbnRlcmFjdGlvbkRhdGFQb29sPVtdLG4uZXZlbnREYXRhPW5ldyBFYyxuLmludGVyYWN0aW9uRE9NRWxlbWVudD1udWxsLG4ubW92ZVdoZW5JbnNpZGU9ITEsbi5ldmVudHNBZGRlZD0hMSxuLnRpY2tlckFkZGVkPSExLG4ubW91c2VPdmVyUmVuZGVyZXI9ISgiUG9pbnRlckV2ZW50ImluIGdsb2JhbFRoaXMpLG4uc3VwcG9ydHNUb3VjaEV2ZW50cz0ib250b3VjaHN0YXJ0ImluIGdsb2JhbFRoaXMsbi5zdXBwb3J0c1BvaW50ZXJFdmVudHM9ISFnbG9iYWxUaGlzLlBvaW50ZXJFdmVudCxuLm9uUG9pbnRlclVwPW4ub25Qb2ludGVyVXAuYmluZChuKSxuLnByb2Nlc3NQb2ludGVyVXA9bi5wcm9jZXNzUG9pbnRlclVwLmJpbmQobiksbi5vblBvaW50ZXJDYW5jZWw9bi5vblBvaW50ZXJDYW5jZWwuYmluZChuKSxuLnByb2Nlc3NQb2ludGVyQ2FuY2VsPW4ucHJvY2Vzc1BvaW50ZXJDYW5jZWwuYmluZChuKSxuLm9uUG9pbnRlckRvd249bi5vblBvaW50ZXJEb3duLmJpbmQobiksbi5wcm9jZXNzUG9pbnRlckRvd249bi5wcm9jZXNzUG9pbnRlckRvd24uYmluZChuKSxuLm9uUG9pbnRlck1vdmU9bi5vblBvaW50ZXJNb3ZlLmJpbmQobiksbi5wcm9jZXNzUG9pbnRlck1vdmU9bi5wcm9jZXNzUG9pbnRlck1vdmUuYmluZChuKSxuLm9uUG9pbnRlck91dD1uLm9uUG9pbnRlck91dC5iaW5kKG4pLG4ucHJvY2Vzc1BvaW50ZXJPdmVyT3V0PW4ucHJvY2Vzc1BvaW50ZXJPdmVyT3V0LmJpbmQobiksbi5vblBvaW50ZXJPdmVyPW4ub25Qb2ludGVyT3Zlci5iaW5kKG4pLG4uY3Vyc29yU3R5bGVzPXtkZWZhdWx0OiJpbmhlcml0Iixwb2ludGVyOiJwb2ludGVyIn0sbi5jdXJyZW50Q3Vyc29yTW9kZT1udWxsLG4uY3Vyc29yPW51bGwsbi5yZXNvbHV0aW9uPTEsbi5kZWxheWVkRXZlbnRzPVtdLG4uc2VhcmNoPW5ldyB3YyxuLl90ZW1wRGlzcGxheU9iamVjdD1uZXcgY2Esbi5fZXZlbnRMaXN0ZW5lck9wdGlvbnM9e2NhcHR1cmU6ITAscGFzc2l2ZTohMX0sbi5fdXNlU3lzdGVtVGlja2VyPWkudXNlU3lzdGVtVGlja2VyIT09dm9pZCAwP2kudXNlU3lzdGVtVGlja2VyOiEwLG4uc2V0VGFyZ2V0RWxlbWVudChuLnJlbmRlcmVyLnZpZXcsbi5yZW5kZXJlci5yZXNvbHV0aW9uKSxufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInVzZVN5c3RlbVRpY2tlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91c2VTeXN0ZW1UaWNrZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLl91c2VTeXN0ZW1UaWNrZXI9dCx0P3RoaXMuYWRkVGlja2VyTGlzdGVuZXIoKTp0aGlzLnJlbW92ZVRpY2tlckxpc3RlbmVyKCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXN0T2JqZWN0UmVuZGVyZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkfHx0aGlzLl90ZW1wRGlzcGxheU9iamVjdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsaSl7cmV0dXJuIERyLnRhcmdldD1udWxsLERyLmRhdGEuZ2xvYmFsPXQsaXx8KGk9dGhpcy5sYXN0T2JqZWN0UmVuZGVyZWQpLHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKERyLGksbnVsbCwhMCksRHIudGFyZ2V0fSxlLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50PWZ1bmN0aW9uKHQsaSl7aT09PXZvaWQgMCYmKGk9MSksdGhpcy5yZW1vdmVUaWNrZXJMaXN0ZW5lcigpLHRoaXMucmVtb3ZlRXZlbnRzKCksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQ9dCx0aGlzLnJlc29sdXRpb249aSx0aGlzLmFkZEV2ZW50cygpLHRoaXMuYWRkVGlja2VyTGlzdGVuZXIoKX0sZS5wcm90b3R5cGUuYWRkVGlja2VyTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLnRpY2tlckFkZGVkfHwhdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnR8fCF0aGlzLl91c2VTeXN0ZW1UaWNrZXJ8fChidC5zeXN0ZW0uYWRkKHRoaXMudGlja2VyVXBkYXRlLHRoaXMsV3QuSU5URVJBQ1RJT04pLHRoaXMudGlja2VyQWRkZWQ9ITApfSxlLnByb3RvdHlwZS5yZW1vdmVUaWNrZXJMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMudGlja2VyQWRkZWQmJihidC5zeXN0ZW0ucmVtb3ZlKHRoaXMudGlja2VyVXBkYXRlLHRoaXMpLHRoaXMudGlja2VyQWRkZWQ9ITEpfSxlLnByb3RvdHlwZS5hZGRFdmVudHM9ZnVuY3Rpb24oKXtpZighKHRoaXMuZXZlbnRzQWRkZWR8fCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCkpe3ZhciB0PXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlO2dsb2JhbFRoaXMubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQ/KHQubXNDb250ZW50Wm9vbWluZz0ibm9uZSIsdC5tc1RvdWNoQWN0aW9uPSJub25lIik6dGhpcy5zdXBwb3J0c1BvaW50ZXJFdmVudHMmJih0LnRvdWNoQWN0aW9uPSJub25lIiksdGhpcy5zdXBwb3J0c1BvaW50ZXJFdmVudHM/KGdsb2JhbFRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMub25Qb2ludGVyTW92ZSx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMub25Qb2ludGVyRG93bix0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix0aGlzLm9uUG9pbnRlck91dCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm92ZXIiLHRoaXMub25Qb2ludGVyT3Zlcix0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIix0aGlzLm9uUG9pbnRlckNhbmNlbCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMub25Qb2ludGVyVXAsdGhpcy5fZXZlbnRMaXN0ZW5lck9wdGlvbnMpKTooZ2xvYmFsVGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMub25Qb2ludGVyTW92ZSx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLm9uUG9pbnRlckRvd24sdGhpcy5fZXZlbnRMaXN0ZW5lck9wdGlvbnMpLHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix0aGlzLm9uUG9pbnRlck91dCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzLm9uUG9pbnRlck92ZXIsdGhpcy5fZXZlbnRMaXN0ZW5lck9wdGlvbnMpLGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5vblBvaW50ZXJVcCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucykpLHRoaXMuc3VwcG9ydHNUb3VjaEV2ZW50cyYmKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMub25Qb2ludGVyRG93bix0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMub25Qb2ludGVyQ2FuY2VsLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uUG9pbnRlck1vdmUsdGhpcy5fZXZlbnRMaXN0ZW5lck9wdGlvbnMpKSx0aGlzLmV2ZW50c0FkZGVkPSEwfX0sZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRzPWZ1bmN0aW9uKCl7aWYoISghdGhpcy5ldmVudHNBZGRlZHx8IXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KSl7dmFyIHQ9dGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGU7Z2xvYmFsVGhpcy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZD8odC5tc0NvbnRlbnRab29taW5nPSIiLHQubXNUb3VjaEFjdGlvbj0iIik6dGhpcy5zdXBwb3J0c1BvaW50ZXJFdmVudHMmJih0LnRvdWNoQWN0aW9uPSIiKSx0aGlzLnN1cHBvcnRzUG9pbnRlckV2ZW50cz8oZ2xvYmFsVGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdGhpcy5vblBvaW50ZXJNb3ZlLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5vblBvaW50ZXJEb3duLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLHRoaXMub25Qb2ludGVyT3V0LHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyb3ZlciIsdGhpcy5vblBvaW50ZXJPdmVyLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSxnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLHRoaXMub25Qb2ludGVyQ2FuY2VsLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSxnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdGhpcy5vblBvaW50ZXJVcCx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucykpOihnbG9iYWxUaGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5vblBvaW50ZXJNb3ZlLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMub25Qb2ludGVyRG93bix0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRoaXMub25Qb2ludGVyT3V0LHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMub25Qb2ludGVyT3Zlcix0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucyksZ2xvYmFsVGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLm9uUG9pbnRlclVwLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSksdGhpcy5zdXBwb3J0c1RvdWNoRXZlbnRzJiYodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5vblBvaW50ZXJEb3duLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5vblBvaW50ZXJDYW5jZWwsdGhpcy5fZXZlbnRMaXN0ZW5lck9wdGlvbnMpLHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLm9uUG9pbnRlclVwLHRoaXMuX2V2ZW50TGlzdGVuZXJPcHRpb25zKSx0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMub25Qb2ludGVyTW92ZSx0aGlzLl9ldmVudExpc3RlbmVyT3B0aW9ucykpLHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50PW51bGwsdGhpcy5ldmVudHNBZGRlZD0hMX19LGUucHJvdG90eXBlLnRpY2tlclVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9kZWx0YVRpbWUrPXQsISh0aGlzLl9kZWx0YVRpbWU8dGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSkmJih0aGlzLl9kZWx0YVRpbWU9MCx0aGlzLnVwZGF0ZSgpKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpe2lmKHRoaXMuX2RpZE1vdmUpe3RoaXMuX2RpZE1vdmU9ITE7cmV0dXJufXRoaXMuY3Vyc29yPW51bGw7Zm9yKHZhciB0IGluIHRoaXMuYWN0aXZlSW50ZXJhY3Rpb25EYXRhKWlmKHRoaXMuYWN0aXZlSW50ZXJhY3Rpb25EYXRhLmhhc093blByb3BlcnR5KHQpKXt2YXIgaT10aGlzLmFjdGl2ZUludGVyYWN0aW9uRGF0YVt0XTtpZihpLm9yaWdpbmFsRXZlbnQmJmkucG9pbnRlclR5cGUhPT0idG91Y2giKXt2YXIgbj10aGlzLmNvbmZpZ3VyZUludGVyYWN0aW9uRXZlbnRGb3JET01FdmVudCh0aGlzLmV2ZW50RGF0YSxpLm9yaWdpbmFsRXZlbnQsaSk7dGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUobix0aGlzLmxhc3RPYmplY3RSZW5kZXJlZCx0aGlzLnByb2Nlc3NQb2ludGVyT3Zlck91dCwhMCl9fXRoaXMuc2V0Q3Vyc29yTW9kZSh0aGlzLmN1cnNvcil9fSxlLnByb3RvdHlwZS5zZXRDdXJzb3JNb2RlPWZ1bmN0aW9uKHQpe3Q9dHx8ImRlZmF1bHQiO3ZhciBpPSEwO2lmKGdsb2JhbFRoaXMuT2Zmc2NyZWVuQ2FudmFzJiZ0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcyYmKGk9ITEpLHRoaXMuY3VycmVudEN1cnNvck1vZGUhPT10KXt0aGlzLmN1cnJlbnRDdXJzb3JNb2RlPXQ7dmFyIG49dGhpcy5jdXJzb3JTdHlsZXNbdF07aWYobilzd2l0Y2godHlwZW9mIG4pe2Nhc2Uic3RyaW5nIjppJiYodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yPW4pO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOm4odCk7YnJlYWs7Y2FzZSJvYmplY3QiOmkmJk9iamVjdC5hc3NpZ24odGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUsbik7YnJlYWt9ZWxzZSBpJiZ0eXBlb2YgdD09InN0cmluZyImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jdXJzb3JTdHlsZXMsdCkmJih0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3I9dCl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsaSxuKXsoIW4uc3RvcFByb3BhZ2F0aW9uSGludHx8dD09PW4uc3RvcHNQcm9wYWdhdGluZ0F0KSYmKG4uY3VycmVudFRhcmdldD10LG4udHlwZT1pLHQuZW1pdChpLG4pLHRbaV0mJnRbaV0obikpfSxlLnByb3RvdHlwZS5kZWxheURpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCxpLG4pe3RoaXMuZGVsYXllZEV2ZW50cy5wdXNoKHtkaXNwbGF5T2JqZWN0OnQsZXZlbnRTdHJpbmc6aSxldmVudERhdGE6bn0pfSxlLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQ9ZnVuY3Rpb24odCxpLG4pe3ZhciBhO3RoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnBhcmVudEVsZW1lbnQ/YT10aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTphPXt4OjAseTowLHdpZHRoOnRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoLGhlaWdodDp0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQsbGVmdDowLHRvcDowfTt2YXIgcz0xL3RoaXMucmVzb2x1dGlvbjt0Lng9KGktYS5sZWZ0KSoodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQud2lkdGgvYS53aWR0aCkqcyx0Lnk9KG4tYS50b3ApKih0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQvYS5oZWlnaHQpKnN9LGUucHJvdG90eXBlLnByb2Nlc3NJbnRlcmFjdGl2ZT1mdW5jdGlvbih0LGksbixhKXt2YXIgcz10aGlzLnNlYXJjaC5maW5kSGl0KHQsaSxuLGEpLG89dGhpcy5kZWxheWVkRXZlbnRzO2lmKCFvLmxlbmd0aClyZXR1cm4gczt0LnN0b3BQcm9wYWdhdGlvbkhpbnQ9ITE7dmFyIGg9by5sZW5ndGg7dGhpcy5kZWxheWVkRXZlbnRzPVtdO2Zvcih2YXIgdT0wO3U8aDt1Kyspe3ZhciBsPW9bdV0sYz1sLmRpc3BsYXlPYmplY3QsZj1sLmV2ZW50U3RyaW5nLGQ9bC5ldmVudERhdGE7ZC5zdG9wc1Byb3BhZ2F0aW5nQXQ9PT1jJiYoZC5zdG9wUHJvcGFnYXRpb25IaW50PSEwKSx0aGlzLmRpc3BhdGNoRXZlbnQoYyxmLGQpfXJldHVybiBzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJEb3duPWZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdXBwb3J0c1RvdWNoRXZlbnRzJiZ0LnBvaW50ZXJUeXBlPT09InRvdWNoIikpe3ZhciBpPXRoaXMubm9ybWFsaXplVG9Qb2ludGVyRGF0YSh0KTtpZih0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdCYmaVswXS5pc05vcm1hbGl6ZWQpe3ZhciBuPXQuY2FuY2VsYWJsZXx8ISgiY2FuY2VsYWJsZSJpbiB0KTtuJiZ0LnByZXZlbnREZWZhdWx0KCl9Zm9yKHZhciBhPWkubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbz1pW3NdLGg9dGhpcy5nZXRJbnRlcmFjdGlvbkRhdGFGb3JQb2ludGVySWQobyksdT10aGlzLmNvbmZpZ3VyZUludGVyYWN0aW9uRXZlbnRGb3JET01FdmVudCh0aGlzLmV2ZW50RGF0YSxvLGgpO2lmKHUuZGF0YS5vcmlnaW5hbEV2ZW50PXQsdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodSx0aGlzLmxhc3RPYmplY3RSZW5kZXJlZCx0aGlzLnByb2Nlc3NQb2ludGVyRG93biwhMCksdGhpcy5lbWl0KCJwb2ludGVyZG93biIsdSksby5wb2ludGVyVHlwZT09PSJ0b3VjaCIpdGhpcy5lbWl0KCJ0b3VjaHN0YXJ0Iix1KTtlbHNlIGlmKG8ucG9pbnRlclR5cGU9PT0ibW91c2UifHxvLnBvaW50ZXJUeXBlPT09InBlbiIpe3ZhciBsPW8uYnV0dG9uPT09Mjt0aGlzLmVtaXQobD8icmlnaHRkb3duIjoibW91c2Vkb3duIix0aGlzLmV2ZW50RGF0YSl9fX19LGUucHJvdG90eXBlLnByb2Nlc3NQb2ludGVyRG93bj1mdW5jdGlvbih0LGksbil7dmFyIGE9dC5kYXRhLHM9dC5kYXRhLmlkZW50aWZpZXI7aWYobil7aWYoaS50cmFja2VkUG9pbnRlcnNbc118fChpLnRyYWNrZWRQb2ludGVyc1tzXT1uZXcgWGkocykpLHRoaXMuZGlzcGF0Y2hFdmVudChpLCJwb2ludGVyZG93biIsdCksYS5wb2ludGVyVHlwZT09PSJ0b3VjaCIpdGhpcy5kaXNwYXRjaEV2ZW50KGksInRvdWNoc3RhcnQiLHQpO2Vsc2UgaWYoYS5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fGEucG9pbnRlclR5cGU9PT0icGVuIil7dmFyIG89YS5idXR0b249PT0yO28/aS50cmFja2VkUG9pbnRlcnNbc10ucmlnaHREb3duPSEwOmkudHJhY2tlZFBvaW50ZXJzW3NdLmxlZnREb3duPSEwLHRoaXMuZGlzcGF0Y2hFdmVudChpLG8/InJpZ2h0ZG93biI6Im1vdXNlZG93biIsdCl9fX0sZS5wcm90b3R5cGUub25Qb2ludGVyQ29tcGxldGU9ZnVuY3Rpb24odCxpLG4pe3ZhciBhPXRoaXMubm9ybWFsaXplVG9Qb2ludGVyRGF0YSh0KSxzPWEubGVuZ3RoLG89dC50YXJnZXQ7dC5jb21wb3NlZFBhdGgmJnQuY29tcG9zZWRQYXRoKCkubGVuZ3RoPjAmJihvPXQuY29tcG9zZWRQYXRoKClbMF0pO2Zvcih2YXIgaD1vIT09dGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQ/Im91dHNpZGUiOiIiLHU9MDt1PHM7dSsrKXt2YXIgbD1hW3VdLGM9dGhpcy5nZXRJbnRlcmFjdGlvbkRhdGFGb3JQb2ludGVySWQobCksZj10aGlzLmNvbmZpZ3VyZUludGVyYWN0aW9uRXZlbnRGb3JET01FdmVudCh0aGlzLmV2ZW50RGF0YSxsLGMpO2lmKGYuZGF0YS5vcmlnaW5hbEV2ZW50PXQsdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoZix0aGlzLmxhc3RPYmplY3RSZW5kZXJlZCxuLGl8fCFoKSx0aGlzLmVtaXQoaT8icG9pbnRlcmNhbmNlbCI6InBvaW50ZXJ1cCIraCxmKSxsLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8bC5wb2ludGVyVHlwZT09PSJwZW4iKXt2YXIgZD1sLmJ1dHRvbj09PTI7dGhpcy5lbWl0KGQ/InJpZ2h0dXAiK2g6Im1vdXNldXAiK2gsZil9ZWxzZSBsLnBvaW50ZXJUeXBlPT09InRvdWNoIiYmKHRoaXMuZW1pdChpPyJ0b3VjaGNhbmNlbCI6InRvdWNoZW5kIitoLGYpLHRoaXMucmVsZWFzZUludGVyYWN0aW9uRGF0YUZvclBvaW50ZXJJZChsLnBvaW50ZXJJZCkpfX0sZS5wcm90b3R5cGUub25Qb2ludGVyQ2FuY2VsPWZ1bmN0aW9uKHQpe3RoaXMuc3VwcG9ydHNUb3VjaEV2ZW50cyYmdC5wb2ludGVyVHlwZT09PSJ0b3VjaCJ8fHRoaXMub25Qb2ludGVyQ29tcGxldGUodCwhMCx0aGlzLnByb2Nlc3NQb2ludGVyQ2FuY2VsKX0sZS5wcm90b3R5cGUucHJvY2Vzc1BvaW50ZXJDYW5jZWw9ZnVuY3Rpb24odCxpKXt2YXIgbj10LmRhdGEsYT10LmRhdGEuaWRlbnRpZmllcjtpLnRyYWNrZWRQb2ludGVyc1thXSE9PXZvaWQgMCYmKGRlbGV0ZSBpLnRyYWNrZWRQb2ludGVyc1thXSx0aGlzLmRpc3BhdGNoRXZlbnQoaSwicG9pbnRlcmNhbmNlbCIsdCksbi5wb2ludGVyVHlwZT09PSJ0b3VjaCImJnRoaXMuZGlzcGF0Y2hFdmVudChpLCJ0b3VjaGNhbmNlbCIsdCkpfSxlLnByb3RvdHlwZS5vblBvaW50ZXJVcD1mdW5jdGlvbih0KXt0aGlzLnN1cHBvcnRzVG91Y2hFdmVudHMmJnQucG9pbnRlclR5cGU9PT0idG91Y2gifHx0aGlzLm9uUG9pbnRlckNvbXBsZXRlKHQsITEsdGhpcy5wcm9jZXNzUG9pbnRlclVwKX0sZS5wcm90b3R5cGUucHJvY2Vzc1BvaW50ZXJVcD1mdW5jdGlvbih0LGksbil7dmFyIGE9dC5kYXRhLHM9dC5kYXRhLmlkZW50aWZpZXIsbz1pLnRyYWNrZWRQb2ludGVyc1tzXSxoPWEucG9pbnRlclR5cGU9PT0idG91Y2giLHU9YS5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fGEucG9pbnRlclR5cGU9PT0icGVuIixsPSExO2lmKHUpe3ZhciBjPWEuYnV0dG9uPT09MixmPVhpLkZMQUdTLGQ9Yz9mLlJJR0hUX0RPV046Zi5MRUZUX0RPV04scD1vIT09dm9pZCAwJiZvLmZsYWdzJmQ7bj8odGhpcy5kaXNwYXRjaEV2ZW50KGksYz8icmlnaHR1cCI6Im1vdXNldXAiLHQpLHAmJih0aGlzLmRpc3BhdGNoRXZlbnQoaSxjPyJyaWdodGNsaWNrIjoiY2xpY2siLHQpLGw9ITApKTpwJiZ0aGlzLmRpc3BhdGNoRXZlbnQoaSxjPyJyaWdodHVwb3V0c2lkZSI6Im1vdXNldXBvdXRzaWRlIix0KSxvJiYoYz9vLnJpZ2h0RG93bj0hMTpvLmxlZnREb3duPSExKX1uPyh0aGlzLmRpc3BhdGNoRXZlbnQoaSwicG9pbnRlcnVwIix0KSxoJiZ0aGlzLmRpc3BhdGNoRXZlbnQoaSwidG91Y2hlbmQiLHQpLG8mJigoIXV8fGwpJiZ0aGlzLmRpc3BhdGNoRXZlbnQoaSwicG9pbnRlcnRhcCIsdCksaCYmKHRoaXMuZGlzcGF0Y2hFdmVudChpLCJ0YXAiLHQpLG8ub3Zlcj0hMSkpKTpvJiYodGhpcy5kaXNwYXRjaEV2ZW50KGksInBvaW50ZXJ1cG91dHNpZGUiLHQpLGgmJnRoaXMuZGlzcGF0Y2hFdmVudChpLCJ0b3VjaGVuZG91dHNpZGUiLHQpKSxvJiZvLm5vbmUmJmRlbGV0ZSBpLnRyYWNrZWRQb2ludGVyc1tzXX0sZS5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbih0KXtpZighKHRoaXMuc3VwcG9ydHNUb3VjaEV2ZW50cyYmdC5wb2ludGVyVHlwZT09PSJ0b3VjaCIpKXt2YXIgaT10aGlzLm5vcm1hbGl6ZVRvUG9pbnRlckRhdGEodCk7KGlbMF0ucG9pbnRlclR5cGU9PT0ibW91c2UifHxpWzBdLnBvaW50ZXJUeXBlPT09InBlbiIpJiYodGhpcy5fZGlkTW92ZT0hMCx0aGlzLmN1cnNvcj1udWxsKTtmb3IodmFyIG49aS5sZW5ndGgsYT0wO2E8bjthKyspe3ZhciBzPWlbYV0sbz10aGlzLmdldEludGVyYWN0aW9uRGF0YUZvclBvaW50ZXJJZChzKSxoPXRoaXMuY29uZmlndXJlSW50ZXJhY3Rpb25FdmVudEZvckRPTUV2ZW50KHRoaXMuZXZlbnREYXRhLHMsbyk7aC5kYXRhLm9yaWdpbmFsRXZlbnQ9dCx0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZShoLHRoaXMubGFzdE9iamVjdFJlbmRlcmVkLHRoaXMucHJvY2Vzc1BvaW50ZXJNb3ZlLCEwKSx0aGlzLmVtaXQoInBvaW50ZXJtb3ZlIixoKSxzLnBvaW50ZXJUeXBlPT09InRvdWNoIiYmdGhpcy5lbWl0KCJ0b3VjaG1vdmUiLGgpLChzLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8cy5wb2ludGVyVHlwZT09PSJwZW4iKSYmdGhpcy5lbWl0KCJtb3VzZW1vdmUiLGgpfWlbMF0ucG9pbnRlclR5cGU9PT0ibW91c2UiJiZ0aGlzLnNldEN1cnNvck1vZGUodGhpcy5jdXJzb3IpfX0sZS5wcm90b3R5cGUucHJvY2Vzc1BvaW50ZXJNb3ZlPWZ1bmN0aW9uKHQsaSxuKXt2YXIgYT10LmRhdGEscz1hLnBvaW50ZXJUeXBlPT09InRvdWNoIixvPWEucG9pbnRlclR5cGU9PT0ibW91c2UifHxhLnBvaW50ZXJUeXBlPT09InBlbiI7byYmdGhpcy5wcm9jZXNzUG9pbnRlck92ZXJPdXQodCxpLG4pLCghdGhpcy5tb3ZlV2hlbkluc2lkZXx8bikmJih0aGlzLmRpc3BhdGNoRXZlbnQoaSwicG9pbnRlcm1vdmUiLHQpLHMmJnRoaXMuZGlzcGF0Y2hFdmVudChpLCJ0b3VjaG1vdmUiLHQpLG8mJnRoaXMuZGlzcGF0Y2hFdmVudChpLCJtb3VzZW1vdmUiLHQpKX0sZS5wcm90b3R5cGUub25Qb2ludGVyT3V0PWZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdXBwb3J0c1RvdWNoRXZlbnRzJiZ0LnBvaW50ZXJUeXBlPT09InRvdWNoIikpe3ZhciBpPXRoaXMubm9ybWFsaXplVG9Qb2ludGVyRGF0YSh0KSxuPWlbMF07bi5wb2ludGVyVHlwZT09PSJtb3VzZSImJih0aGlzLm1vdXNlT3ZlclJlbmRlcmVyPSExLHRoaXMuc2V0Q3Vyc29yTW9kZShudWxsKSk7dmFyIGE9dGhpcy5nZXRJbnRlcmFjdGlvbkRhdGFGb3JQb2ludGVySWQobikscz10aGlzLmNvbmZpZ3VyZUludGVyYWN0aW9uRXZlbnRGb3JET01FdmVudCh0aGlzLmV2ZW50RGF0YSxuLGEpO3MuZGF0YS5vcmlnaW5hbEV2ZW50PW4sdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocyx0aGlzLmxhc3RPYmplY3RSZW5kZXJlZCx0aGlzLnByb2Nlc3NQb2ludGVyT3Zlck91dCwhMSksdGhpcy5lbWl0KCJwb2ludGVyb3V0IixzKSxuLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8bi5wb2ludGVyVHlwZT09PSJwZW4iP3RoaXMuZW1pdCgibW91c2VvdXQiLHMpOnRoaXMucmVsZWFzZUludGVyYWN0aW9uRGF0YUZvclBvaW50ZXJJZChhLmlkZW50aWZpZXIpfX0sZS5wcm90b3R5cGUucHJvY2Vzc1BvaW50ZXJPdmVyT3V0PWZ1bmN0aW9uKHQsaSxuKXt2YXIgYT10LmRhdGEscz10LmRhdGEuaWRlbnRpZmllcixvPWEucG9pbnRlclR5cGU9PT0ibW91c2UifHxhLnBvaW50ZXJUeXBlPT09InBlbiIsaD1pLnRyYWNrZWRQb2ludGVyc1tzXTtuJiYhaCYmKGg9aS50cmFja2VkUG9pbnRlcnNbc109bmV3IFhpKHMpKSxoIT09dm9pZCAwJiYobiYmdGhpcy5tb3VzZU92ZXJSZW5kZXJlcj8oaC5vdmVyfHwoaC5vdmVyPSEwLHRoaXMuZGVsYXlEaXNwYXRjaEV2ZW50KGksInBvaW50ZXJvdmVyIix0KSxvJiZ0aGlzLmRlbGF5RGlzcGF0Y2hFdmVudChpLCJtb3VzZW92ZXIiLHQpKSxvJiZ0aGlzLmN1cnNvcj09PW51bGwmJih0aGlzLmN1cnNvcj1pLmN1cnNvcikpOmgub3ZlciYmKGgub3Zlcj0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoaSwicG9pbnRlcm91dCIsdGhpcy5ldmVudERhdGEpLG8mJnRoaXMuZGlzcGF0Y2hFdmVudChpLCJtb3VzZW91dCIsdCksaC5ub25lJiZkZWxldGUgaS50cmFja2VkUG9pbnRlcnNbc10pKX0sZS5wcm90b3R5cGUub25Qb2ludGVyT3Zlcj1mdW5jdGlvbih0KXtpZighKHRoaXMuc3VwcG9ydHNUb3VjaEV2ZW50cyYmdC5wb2ludGVyVHlwZT09PSJ0b3VjaCIpKXt2YXIgaT10aGlzLm5vcm1hbGl6ZVRvUG9pbnRlckRhdGEodCksbj1pWzBdLGE9dGhpcy5nZXRJbnRlcmFjdGlvbkRhdGFGb3JQb2ludGVySWQobikscz10aGlzLmNvbmZpZ3VyZUludGVyYWN0aW9uRXZlbnRGb3JET01FdmVudCh0aGlzLmV2ZW50RGF0YSxuLGEpO3MuZGF0YS5vcmlnaW5hbEV2ZW50PW4sbi5wb2ludGVyVHlwZT09PSJtb3VzZSImJih0aGlzLm1vdXNlT3ZlclJlbmRlcmVyPSEwKSx0aGlzLmVtaXQoInBvaW50ZXJvdmVyIixzKSwobi5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fG4ucG9pbnRlclR5cGU9PT0icGVuIikmJnRoaXMuZW1pdCgibW91c2VvdmVyIixzKX19LGUucHJvdG90eXBlLmdldEludGVyYWN0aW9uRGF0YUZvclBvaW50ZXJJZD1mdW5jdGlvbih0KXt2YXIgaT10LnBvaW50ZXJJZCxuO3JldHVybiBpPT09TXJ8fHQucG9pbnRlclR5cGU9PT0ibW91c2UiP249dGhpcy5tb3VzZTp0aGlzLmFjdGl2ZUludGVyYWN0aW9uRGF0YVtpXT9uPXRoaXMuYWN0aXZlSW50ZXJhY3Rpb25EYXRhW2ldOihuPXRoaXMuaW50ZXJhY3Rpb25EYXRhUG9vbC5wb3AoKXx8bmV3IFlhLG4uaWRlbnRpZmllcj1pLHRoaXMuYWN0aXZlSW50ZXJhY3Rpb25EYXRhW2ldPW4pLG4uY29weUV2ZW50KHQpLG59LGUucHJvdG90eXBlLnJlbGVhc2VJbnRlcmFjdGlvbkRhdGFGb3JQb2ludGVySWQ9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5hY3RpdmVJbnRlcmFjdGlvbkRhdGFbdF07aSYmKGRlbGV0ZSB0aGlzLmFjdGl2ZUludGVyYWN0aW9uRGF0YVt0XSxpLnJlc2V0KCksdGhpcy5pbnRlcmFjdGlvbkRhdGFQb29sLnB1c2goaSkpfSxlLnByb3RvdHlwZS5jb25maWd1cmVJbnRlcmFjdGlvbkV2ZW50Rm9yRE9NRXZlbnQ9ZnVuY3Rpb24odCxpLG4pe3JldHVybiB0LmRhdGE9bix0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludChuLmdsb2JhbCxpLmNsaWVudFgsaS5jbGllbnRZKSxpLnBvaW50ZXJUeXBlPT09InRvdWNoIiYmKGkuZ2xvYmFsWD1uLmdsb2JhbC54LGkuZ2xvYmFsWT1uLmdsb2JhbC55KSxuLm9yaWdpbmFsRXZlbnQ9aSx0LnJlc2V0KCksdH0sZS5wcm90b3R5cGUubm9ybWFsaXplVG9Qb2ludGVyRGF0YT1mdW5jdGlvbih0KXt2YXIgaT1bXTtpZih0aGlzLnN1cHBvcnRzVG91Y2hFdmVudHMmJnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KWZvcih2YXIgbj0wLGE9dC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7bjxhO24rKyl7dmFyIHM9dC5jaGFuZ2VkVG91Y2hlc1tuXTt0eXBlb2Ygcy5idXR0b24+InUiJiYocy5idXR0b249dC50b3VjaGVzLmxlbmd0aD8xOjApLHR5cGVvZiBzLmJ1dHRvbnM+InUiJiYocy5idXR0b25zPXQudG91Y2hlcy5sZW5ndGg/MTowKSx0eXBlb2Ygcy5pc1ByaW1hcnk+InUiJiYocy5pc1ByaW1hcnk9dC50b3VjaGVzLmxlbmd0aD09PTEmJnQudHlwZT09PSJ0b3VjaHN0YXJ0IiksdHlwZW9mIHMud2lkdGg+InUiJiYocy53aWR0aD1zLnJhZGl1c1h8fDEpLHR5cGVvZiBzLmhlaWdodD4idSImJihzLmhlaWdodD1zLnJhZGl1c1l8fDEpLHR5cGVvZiBzLnRpbHRYPiJ1IiYmKHMudGlsdFg9MCksdHlwZW9mIHMudGlsdFk+InUiJiYocy50aWx0WT0wKSx0eXBlb2Ygcy5wb2ludGVyVHlwZT4idSImJihzLnBvaW50ZXJUeXBlPSJ0b3VjaCIpLHR5cGVvZiBzLnBvaW50ZXJJZD4idSImJihzLnBvaW50ZXJJZD1zLmlkZW50aWZpZXJ8fDApLHR5cGVvZiBzLnByZXNzdXJlPiJ1IiYmKHMucHJlc3N1cmU9cy5mb3JjZXx8LjUpLHR5cGVvZiBzLnR3aXN0PiJ1IiYmKHMudHdpc3Q9MCksdHlwZW9mIHMudGFuZ2VudGlhbFByZXNzdXJlPiJ1IiYmKHMudGFuZ2VudGlhbFByZXNzdXJlPTApLHR5cGVvZiBzLmxheWVyWD4idSImJihzLmxheWVyWD1zLm9mZnNldFg9cy5jbGllbnRYKSx0eXBlb2Ygcy5sYXllclk+InUiJiYocy5sYXllclk9cy5vZmZzZXRZPXMuY2xpZW50WSkscy5pc05vcm1hbGl6ZWQ9ITAsaS5wdXNoKHMpfWVsc2UgaWYoIWdsb2JhbFRoaXMuTW91c2VFdmVudHx8dCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJighdGhpcy5zdXBwb3J0c1BvaW50ZXJFdmVudHN8fCEodCBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuUG9pbnRlckV2ZW50KSkpe3ZhciBvPXQ7dHlwZW9mIG8uaXNQcmltYXJ5PiJ1IiYmKG8uaXNQcmltYXJ5PSEwKSx0eXBlb2Ygby53aWR0aD4idSImJihvLndpZHRoPTEpLHR5cGVvZiBvLmhlaWdodD4idSImJihvLmhlaWdodD0xKSx0eXBlb2Ygby50aWx0WD4idSImJihvLnRpbHRYPTApLHR5cGVvZiBvLnRpbHRZPiJ1IiYmKG8udGlsdFk9MCksdHlwZW9mIG8ucG9pbnRlclR5cGU+InUiJiYoby5wb2ludGVyVHlwZT0ibW91c2UiKSx0eXBlb2Ygby5wb2ludGVySWQ+InUiJiYoby5wb2ludGVySWQ9TXIpLHR5cGVvZiBvLnByZXNzdXJlPiJ1IiYmKG8ucHJlc3N1cmU9LjUpLHR5cGVvZiBvLnR3aXN0PiJ1IiYmKG8udHdpc3Q9MCksdHlwZW9mIG8udGFuZ2VudGlhbFByZXNzdXJlPiJ1IiYmKG8udGFuZ2VudGlhbFByZXNzdXJlPTApLG8uaXNOb3JtYWxpemVkPSEwLGkucHVzaChvKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRzKCksdGhpcy5yZW1vdmVUaWNrZXJMaXN0ZW5lcigpLHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5yZW5kZXJlcj1udWxsLHRoaXMubW91c2U9bnVsbCx0aGlzLmV2ZW50RGF0YT1udWxsLHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50PW51bGwsdGhpcy5vblBvaW50ZXJEb3duPW51bGwsdGhpcy5wcm9jZXNzUG9pbnRlckRvd249bnVsbCx0aGlzLm9uUG9pbnRlclVwPW51bGwsdGhpcy5wcm9jZXNzUG9pbnRlclVwPW51bGwsdGhpcy5vblBvaW50ZXJDYW5jZWw9bnVsbCx0aGlzLnByb2Nlc3NQb2ludGVyQ2FuY2VsPW51bGwsdGhpcy5vblBvaW50ZXJNb3ZlPW51bGwsdGhpcy5wcm9jZXNzUG9pbnRlck1vdmU9bnVsbCx0aGlzLm9uUG9pbnRlck91dD1udWxsLHRoaXMucHJvY2Vzc1BvaW50ZXJPdmVyT3V0PW51bGwsdGhpcy5vblBvaW50ZXJPdmVyPW51bGwsdGhpcy5zZWFyY2g9bnVsbH0sZS5leHRlbnNpb249e25hbWU6ImludGVyYWN0aW9uIix0eXBlOltLLlJlbmRlcmVyUGx1Z2luLEsuQ2FudmFzUmVuZGVyZXJQbHVnaW5dfSxlfShCZSk7dmFyIHphPW5ldyBILFdhPTQsUmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RoaXMucmVuZGVyZXI9ZX1yZXR1cm4gci5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPW5ldyBJbWFnZTtyZXR1cm4gbi5zcmM9dGhpcy5iYXNlNjQoZSx0LGkpLG59LHIucHJvdG90eXBlLmJhc2U2ND1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIHRoaXMuY2FudmFzKGUpLnRvRGF0YVVSTCh0LGkpfSxyLnByb3RvdHlwZS5jYW52YXM9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLnJlbmRlcmVyLG4sYT0hMSxzLG89ITE7ZSYmKGUgaW5zdGFuY2VvZiBmZT9zPWU6KHM9dGhpcy5yZW5kZXJlci5nZW5lcmF0ZVRleHR1cmUoZSksbz0hMCkpLHM/KG49cy5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uLHQ9dD8/cy5mcmFtZSxhPSExLGkucmVuZGVyVGV4dHVyZS5iaW5kKHMpKToobj1pLnJlc29sdXRpb24sdHx8KHQ9emEsdC53aWR0aD1pLndpZHRoLHQuaGVpZ2h0PWkuaGVpZ2h0KSxhPSEwLGkucmVuZGVyVGV4dHVyZS5iaW5kKG51bGwpKTt2YXIgaD1NYXRoLnJvdW5kKHQud2lkdGgqbiksdT1NYXRoLnJvdW5kKHQuaGVpZ2h0Km4pLGw9bmV3IHVhKGgsdSwxKSxjPW5ldyBVaW50OEFycmF5KFdhKmgqdSksZj1pLmdsO2YucmVhZFBpeGVscyhNYXRoLnJvdW5kKHQueCpuKSxNYXRoLnJvdW5kKHQueSpuKSxoLHUsZi5SR0JBLGYuVU5TSUdORURfQllURSxjKTt2YXIgZD1sLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCxoLHUpO2lmKHIuYXJyYXlQb3N0RGl2aWRlKGMsZC5kYXRhKSxsLmNvbnRleHQucHV0SW1hZ2VEYXRhKGQsMCwwKSxhKXt2YXIgcD1uZXcgdWEobC53aWR0aCxsLmhlaWdodCwxKTtwLmNvbnRleHQuc2NhbGUoMSwtMSkscC5jb250ZXh0LmRyYXdJbWFnZShsLmNhbnZhcywwLC11KSxsLmRlc3Ryb3koKSxsPXB9cmV0dXJuIG8mJnMuZGVzdHJveSghMCksbC5jYW52YXN9LHIucHJvdG90eXBlLnBpeGVscz1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMucmVuZGVyZXIsbixhLHM9ITE7ZSYmKGUgaW5zdGFuY2VvZiBmZT9hPWU6KGE9dGhpcy5yZW5kZXJlci5nZW5lcmF0ZVRleHR1cmUoZSkscz0hMCkpLGE/KG49YS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uLHQ9dD8/YS5mcmFtZSxpLnJlbmRlclRleHR1cmUuYmluZChhKSk6KG49aS5yZXNvbHV0aW9uLHR8fCh0PXphLHQud2lkdGg9aS53aWR0aCx0LmhlaWdodD1pLmhlaWdodCksaS5yZW5kZXJUZXh0dXJlLmJpbmQobnVsbCkpO3ZhciBvPU1hdGgucm91bmQodC53aWR0aCpuKSxoPU1hdGgucm91bmQodC5oZWlnaHQqbiksdT1uZXcgVWludDhBcnJheShXYSpvKmgpLGw9aS5nbDtyZXR1cm4gbC5yZWFkUGl4ZWxzKE1hdGgucm91bmQodC54Km4pLE1hdGgucm91bmQodC55Km4pLG8saCxsLlJHQkEsbC5VTlNJR05FRF9CWVRFLHUpLHMmJmEuZGVzdHJveSghMCksci5hcnJheVBvc3REaXZpZGUodSx1KSx1fSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlcj1udWxsfSxyLmFycmF5UG9zdERpdmlkZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSs9NCl7dmFyIG49dFtpKzNdPWVbaSszXTtuIT09MD8odFtpXT1NYXRoLnJvdW5kKE1hdGgubWluKGVbaV0qMjU1L24sMjU1KSksdFtpKzFdPU1hdGgucm91bmQoTWF0aC5taW4oZVtpKzFdKjI1NS9uLDI1NSkpLHRbaSsyXT1NYXRoLnJvdW5kKE1hdGgubWluKGVbaSsyXSoyNTUvbiwyNTUpKSk6KHRbaV09ZVtpXSx0W2krMV09ZVtpKzFdLHRbaSsyXT1lW2krMl0pfX0sci5leHRlbnNpb249e25hbWU6ImV4dHJhY3QiLHR5cGU6Sy5SZW5kZXJlclBsdWdpbn0scn0oKTt2YXIgRnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpKXt0PT09dm9pZCAwJiYodD0hMSksdGhpcy5fZm49ZSx0aGlzLl9vbmNlPXQsdGhpcy5fdGhpc0FyZz1pLHRoaXMuX25leHQ9dGhpcy5fcHJldj10aGlzLl9vd25lcj1udWxsfXJldHVybiByLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3duZXI9PT1udWxsPyExOih0aGlzLl9vd25lci5kZXRhY2godGhpcyksITApfSxyfSgpO2Z1bmN0aW9uIHFhKHIsZSl7cmV0dXJuIHIuX2hlYWQ/KHIuX3RhaWwuX25leHQ9ZSxlLl9wcmV2PXIuX3RhaWwsci5fdGFpbD1lKTooci5faGVhZD1lLHIuX3RhaWw9ZSksZS5fb3duZXI9cixlfXZhciBxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dm9pZCAwfXJldHVybiByLnByb3RvdHlwZS5oYW5kbGVycz1mdW5jdGlvbihlKXtlPT09dm9pZCAwJiYoZT0hMSk7dmFyIHQ9dGhpcy5faGVhZDtpZihlKXJldHVybiEhdDtmb3IodmFyIGk9W107dDspaS5wdXNoKHQpLHQ9dC5fbmV4dDtyZXR1cm4gaX0sci5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEZyKSl0aHJvdyBuZXcgRXJyb3IoIk1pbmlTaWduYWwjaGFzKCk6IEZpcnN0IGFyZyBtdXN0IGJlIGEgU2lnbmFsQmluZGluZyBvYmplY3QuIik7cmV0dXJuIGUuX293bmVyPT09dGhpc30sci5wcm90b3R5cGUuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLHQ9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdFtpXT1lW2ldO3ZhciBuPXRoaXMuX2hlYWQ7aWYoIW4pcmV0dXJuITE7Zm9yKDtuOyluLl9vbmNlJiZ0aGlzLmRldGFjaChuKSxuLl9mbi5hcHBseShuLl90aGlzQXJnLHQpLG49bi5fbmV4dDtyZXR1cm4hMH0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7aWYodD09PXZvaWQgMCYmKHQ9bnVsbCksdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJNaW5pU2lnbmFsI2FkZCgpOiBGaXJzdCBhcmcgbXVzdCBiZSBhIEZ1bmN0aW9uLiIpO3JldHVybiBxYSh0aGlzLG5ldyBGcihlLCExLHQpKX0sci5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe2lmKHQ9PT12b2lkIDAmJih0PW51bGwpLHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiTWluaVNpZ25hbCNvbmNlKCk6IEZpcnN0IGFyZyBtdXN0IGJlIGEgRnVuY3Rpb24uIik7cmV0dXJuIHFhKHRoaXMsbmV3IEZyKGUsITAsdCkpfSxyLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgRnIpKXRocm93IG5ldyBFcnJvcigiTWluaVNpZ25hbCNkZXRhY2goKTogRmlyc3QgYXJnIG11c3QgYmUgYSBTaWduYWxCaW5kaW5nIG9iamVjdC4iKTtyZXR1cm4gZS5fb3duZXIhPT10aGlzP3RoaXM6KGUuX3ByZXYmJihlLl9wcmV2Ll9uZXh0PWUuX25leHQpLGUuX25leHQmJihlLl9uZXh0Ll9wcmV2PWUuX3ByZXYpLGU9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPWUuX25leHQsZS5fbmV4dD09PW51bGwmJih0aGlzLl90YWlsPW51bGwpKTplPT09dGhpcy5fdGFpbCYmKHRoaXMuX3RhaWw9ZS5fcHJldix0aGlzLl90YWlsLl9uZXh0PW51bGwpLGUuX293bmVyPW51bGwsdGhpcyl9LHIucHJvdG90eXBlLmRldGFjaEFsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2hlYWQ7aWYoIWUpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1udWxsO2U7KWUuX293bmVyPW51bGwsZT1lLl9uZXh0O3JldHVybiB0aGlzfSxyfSgpO2Z1bmN0aW9uICRhKHIsZSl7ZT1lfHx7fTtmb3IodmFyIHQ9e2tleTpbInNvdXJjZSIsInByb3RvY29sIiwiYXV0aG9yaXR5IiwidXNlckluZm8iLCJ1c2VyIiwicGFzc3dvcmQiLCJob3N0IiwicG9ydCIsInJlbGF0aXZlIiwicGF0aCIsImRpcmVjdG9yeSIsImZpbGUiLCJxdWVyeSIsImFuY2hvciJdLHE6e25hbWU6InF1ZXJ5S2V5IixwYXJzZXI6Lyg/Ol58JikoW14mPV0qKT0/KFteJl0qKS9nfSxwYXJzZXI6e3N0cmljdDovXig/OihbXjpcLz8jXSspOik/KD86XC9cLygoPzooKFteOkBdKikoPzo6KFteOkBdKikpPyk/QCk/KFteOlwvPyNdKikoPzo6KFxkKikpPykpPygoKCg/OltePyNcL10qXC8pKikoW14/I10qKSkoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8pLyxsb29zZTovXig/Oig/IVteOkBdKzpbXjpAXC9dKkApKFteOlwvPyMuXSspOik/KD86XC9cLyk/KCg/OigoW146QF0qKSg/OjooW146QF0qKSk/KT9AKT8oW146XC8/I10qKSg/OjooXGQqKSk/KSgoKFwvKD86W14/I10oPyFbXj8jXC9dKlwuW14/I1wvLl0rKD86Wz8jXXwkKSkpKlwvPyk/KFtePyNcL10qKSkoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8pL319LGk9dC5wYXJzZXJbZS5zdHJpY3RNb2RlPyJzdHJpY3QiOiJsb29zZSJdLmV4ZWMociksbj17fSxhPTE0O2EtLTspblt0LmtleVthXV09aVthXXx8IiI7cmV0dXJuIG5bdC5xLm5hbWVdPXt9LG5bdC5rZXlbMTJdXS5yZXBsYWNlKHQucS5wYXJzZXIsZnVuY3Rpb24ocyxvLGgpe28mJihuW3QucS5uYW1lXVtvXT1oKX0pLG59dmFyIEhpLE5yPW51bGwsQWM9MCxLYT0yMDAsQ2M9MjA0LEljPTEyMjMsT2M9MjtmdW5jdGlvbiBaYSgpe31mdW5jdGlvbiBKYShyLGUsdCl7ZSYmZS5pbmRleE9mKCIuIik9PT0wJiYoZT1lLnN1YnN0cmluZygxKSksZSYmKHJbZV09dCl9ZnVuY3Rpb24gamkocil7cmV0dXJuIHIudG9TdHJpbmcoKS5yZXBsYWNlKCJvYmplY3QgIiwiIil9dmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSl7aWYodGhpcy5fZGVxdWV1ZT1aYSx0aGlzLl9vbkxvYWRCaW5kaW5nPW51bGwsdGhpcy5fZWxlbWVudFRpbWVyPTAsdGhpcy5fYm91bmRDb21wbGV0ZT1udWxsLHRoaXMuX2JvdW5kT25FcnJvcj1udWxsLHRoaXMuX2JvdW5kT25Qcm9ncmVzcz1udWxsLHRoaXMuX2JvdW5kT25UaW1lb3V0PW51bGwsdGhpcy5fYm91bmRYaHJPbkVycm9yPW51bGwsdGhpcy5fYm91bmRYaHJPblRpbWVvdXQ9bnVsbCx0aGlzLl9ib3VuZFhock9uQWJvcnQ9bnVsbCx0aGlzLl9ib3VuZFhock9uTG9hZD1udWxsLHR5cGVvZiBlIT0ic3RyaW5nInx8dHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4iKTtpPWl8fHt9LHRoaXMuX2ZsYWdzPTAsdGhpcy5fc2V0RmxhZyhyLlNUQVRVU19GTEFHUy5EQVRBX1VSTCx0LmluZGV4T2YoImRhdGE6Iik9PT0wKSx0aGlzLm5hbWU9ZSx0aGlzLnVybD10LHRoaXMuZXh0ZW5zaW9uPXRoaXMuX2dldEV4dGVuc2lvbigpLHRoaXMuZGF0YT1udWxsLHRoaXMuY3Jvc3NPcmlnaW49aS5jcm9zc09yaWdpbj09PSEwPyJhbm9ueW1vdXMiOmkuY3Jvc3NPcmlnaW4sdGhpcy50aW1lb3V0PWkudGltZW91dHx8MCx0aGlzLmxvYWRUeXBlPWkubG9hZFR5cGV8fHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCksdGhpcy54aHJUeXBlPWkueGhyVHlwZSx0aGlzLm1ldGFkYXRhPWkubWV0YWRhdGF8fHt9LHRoaXMuZXJyb3I9bnVsbCx0aGlzLnhocj1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy50eXBlPXIuVFlQRS5VTktOT1dOLHRoaXMucHJvZ3Jlc3NDaHVuaz0wLHRoaXMuX2RlcXVldWU9WmEsdGhpcy5fb25Mb2FkQmluZGluZz1udWxsLHRoaXMuX2VsZW1lbnRUaW1lcj0wLHRoaXMuX2JvdW5kQ29tcGxldGU9dGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpLHRoaXMuX2JvdW5kT25FcnJvcj10aGlzLl9vbkVycm9yLmJpbmQodGhpcyksdGhpcy5fYm91bmRPblByb2dyZXNzPXRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKSx0aGlzLl9ib3VuZE9uVGltZW91dD10aGlzLl9vblRpbWVvdXQuYmluZCh0aGlzKSx0aGlzLl9ib3VuZFhock9uRXJyb3I9dGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpLHRoaXMuX2JvdW5kWGhyT25UaW1lb3V0PXRoaXMuX3hock9uVGltZW91dC5iaW5kKHRoaXMpLHRoaXMuX2JvdW5kWGhyT25BYm9ydD10aGlzLl94aHJPbkFib3J0LmJpbmQodGhpcyksdGhpcy5fYm91bmRYaHJPbkxvYWQ9dGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyksdGhpcy5vblN0YXJ0PW5ldyBxdCx0aGlzLm9uUHJvZ3Jlc3M9bmV3IHF0LHRoaXMub25Db21wbGV0ZT1uZXcgcXQsdGhpcy5vbkFmdGVyTWlkZGxld2FyZT1uZXcgcXR9cmV0dXJuIHIuc2V0RXh0ZW5zaW9uTG9hZFR5cGU9ZnVuY3Rpb24oZSx0KXtKYShyLl9sb2FkVHlwZU1hcCxlLHQpfSxyLnNldEV4dGVuc2lvblhoclR5cGU9ZnVuY3Rpb24oZSx0KXtKYShyLl94aHJUeXBlTWFwLGUsdCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaXNEYXRhVXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcoci5TVEFUVVNfRkxBR1MuREFUQV9VUkwpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiaXNDb21wbGV0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNGbGFnKHIuU1RBVFVTX0ZMQUdTLkNPTVBMRVRFKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImlzTG9hZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNGbGFnKHIuU1RBVFVTX0ZMQUdTLkxPQURJTkcpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHIucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJFdmVudHMoKSx0aGlzLl9maW5pc2goKX0sci5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZXJyb3Ipe2lmKHRoaXMuZXJyb3I9bmV3IEVycm9yKGUpLHRoaXMuX2NsZWFyRXZlbnRzKCksdGhpcy54aHIpdGhpcy54aHIuYWJvcnQoKTtlbHNlIGlmKHRoaXMueGRyKXRoaXMueGRyLmFib3J0KCk7ZWxzZSBpZih0aGlzLmRhdGEpaWYodGhpcy5kYXRhLnNyYyl0aGlzLmRhdGEuc3JjPXIuRU1QVFlfR0lGO2Vsc2UgZm9yKDt0aGlzLmRhdGEuZmlyc3RDaGlsZDspdGhpcy5kYXRhLnJlbW92ZUNoaWxkKHRoaXMuZGF0YS5maXJzdENoaWxkKTt0aGlzLl9maW5pc2goKX19LHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZighdGhpcy5pc0xvYWRpbmcpe2lmKHRoaXMuaXNDb21wbGV0ZSl7ZSYmc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlKHQpfSwxKTtyZXR1cm59ZWxzZSBlJiZ0aGlzLm9uQ29tcGxldGUub25jZShlKTtzd2l0Y2godGhpcy5fc2V0RmxhZyhyLlNUQVRVU19GTEFHUy5MT0FESU5HLCEwKSx0aGlzLm9uU3RhcnQuZGlzcGF0Y2godGhpcyksKHRoaXMuY3Jvc3NPcmlnaW49PT0hMXx8dHlwZW9mIHRoaXMuY3Jvc3NPcmlnaW4hPSJzdHJpbmciKSYmKHRoaXMuY3Jvc3NPcmlnaW49dGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpKSx0aGlzLmxvYWRUeXBlKXtjYXNlIHIuTE9BRF9UWVBFLklNQUdFOnRoaXMudHlwZT1yLlRZUEUuSU1BR0UsdGhpcy5fbG9hZEVsZW1lbnQoImltYWdlIik7YnJlYWs7Y2FzZSByLkxPQURfVFlQRS5BVURJTzp0aGlzLnR5cGU9ci5UWVBFLkFVRElPLHRoaXMuX2xvYWRTb3VyY2VFbGVtZW50KCJhdWRpbyIpO2JyZWFrO2Nhc2Ugci5MT0FEX1RZUEUuVklERU86dGhpcy50eXBlPXIuVFlQRS5WSURFTyx0aGlzLl9sb2FkU291cmNlRWxlbWVudCgidmlkZW8iKTticmVhaztjYXNlIHIuTE9BRF9UWVBFLlhIUjpkZWZhdWx0OnR5cGVvZiBIaT4idSImJihIaT0hIShnbG9iYWxUaGlzLlhEb21haW5SZXF1ZXN0JiYhKCJ3aXRoQ3JlZGVudGlhbHMiaW4gbmV3IFhNTEh0dHBSZXF1ZXN0KSkpLEhpJiZ0aGlzLmNyb3NzT3JpZ2luP3RoaXMuX2xvYWRYZHIoKTp0aGlzLl9sb2FkWGhyKCk7YnJlYWt9fX0sci5wcm90b3R5cGUuX2hhc0ZsYWc9ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2ZsYWdzJmUpIT09MH0sci5wcm90b3R5cGUuX3NldEZsYWc9ZnVuY3Rpb24oZSx0KXt0aGlzLl9mbGFncz10P3RoaXMuX2ZsYWdzfGU6dGhpcy5fZmxhZ3MmfmV9LHIucHJvdG90eXBlLl9jbGVhckV2ZW50cz1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl9lbGVtZW50VGltZXIpLHRoaXMuZGF0YSYmdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXImJih0aGlzLmRhdGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuX2JvdW5kT25FcnJvciwhMSksdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuX2JvdW5kQ29tcGxldGUsITEpLHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdGhpcy5fYm91bmRPblByb2dyZXNzLCExKSx0aGlzLmRhdGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2FucGxheXRocm91Z2giLHRoaXMuX2JvdW5kQ29tcGxldGUsITEpKSx0aGlzLnhociYmKHRoaXMueGhyLnJlbW92ZUV2ZW50TGlzdGVuZXI/KHRoaXMueGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLl9ib3VuZFhock9uRXJyb3IsITEpLHRoaXMueGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHRoaXMuX2JvdW5kWGhyT25UaW1lb3V0LCExKSx0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsdGhpcy5fYm91bmRYaHJPbkFib3J0LCExKSx0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdGhpcy5fYm91bmRPblByb2dyZXNzLCExKSx0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLl9ib3VuZFhock9uTG9hZCwhMSkpOih0aGlzLnhoci5vbmVycm9yPW51bGwsdGhpcy54aHIub250aW1lb3V0PW51bGwsdGhpcy54aHIub25wcm9ncmVzcz1udWxsLHRoaXMueGhyLm9ubG9hZD1udWxsKSl9LHIucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZih0aGlzLmlzQ29tcGxldGUpdGhyb3cgbmV3IEVycm9yKCJDb21wbGV0ZSBjYWxsZWQgYWdhaW4gZm9yIGFuIGFscmVhZHkgY29tcGxldGVkIHJlc291cmNlLiIpO3RoaXMuX3NldEZsYWcoci5TVEFUVVNfRkxBR1MuQ09NUExFVEUsITApLHRoaXMuX3NldEZsYWcoci5TVEFUVVNfRkxBR1MuTE9BRElORywhMSksdGhpcy5vbkNvbXBsZXRlLmRpc3BhdGNoKHRoaXMpfSxyLnByb3RvdHlwZS5fbG9hZEVsZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5tZXRhZGF0YS5sb2FkRWxlbWVudD90aGlzLmRhdGE9dGhpcy5tZXRhZGF0YS5sb2FkRWxlbWVudDplPT09ImltYWdlIiYmdHlwZW9mIGdsb2JhbFRoaXMuSW1hZ2U8InUiP3RoaXMuZGF0YT1uZXcgSW1hZ2U6dGhpcy5kYXRhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSksdGhpcy5jcm9zc09yaWdpbiYmKHRoaXMuZGF0YS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSx0aGlzLm1ldGFkYXRhLnNraXBTb3VyY2V8fCh0aGlzLmRhdGEuc3JjPXRoaXMudXJsKSx0aGlzLmRhdGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuX2JvdW5kT25FcnJvciwhMSksdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuX2JvdW5kQ29tcGxldGUsITEpLHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdGhpcy5fYm91bmRPblByb2dyZXNzLCExKSx0aGlzLnRpbWVvdXQmJih0aGlzLl9lbGVtZW50VGltZXI9c2V0VGltZW91dCh0aGlzLl9ib3VuZE9uVGltZW91dCx0aGlzLnRpbWVvdXQpKX0sci5wcm90b3R5cGUuX2xvYWRTb3VyY2VFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMubWV0YWRhdGEubG9hZEVsZW1lbnQ/dGhpcy5kYXRhPXRoaXMubWV0YWRhdGEubG9hZEVsZW1lbnQ6ZT09PSJhdWRpbyImJnR5cGVvZiBnbG9iYWxUaGlzLkF1ZGlvPCJ1Ij90aGlzLmRhdGE9bmV3IEF1ZGlvOnRoaXMuZGF0YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpLHRoaXMuZGF0YT09PW51bGwpe3RoaXMuYWJvcnQoIlVuc3VwcG9ydGVkIGVsZW1lbnQ6ICIrZSk7cmV0dXJufWlmKHRoaXMuY3Jvc3NPcmlnaW4mJih0aGlzLmRhdGEuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksIXRoaXMubWV0YWRhdGEuc2tpcFNvdXJjZSlpZihuYXZpZ2F0b3IuaXNDb2Nvb25KUyl0aGlzLmRhdGEuc3JjPUFycmF5LmlzQXJyYXkodGhpcy51cmwpP3RoaXMudXJsWzBdOnRoaXMudXJsO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpZm9yKHZhciB0PXRoaXMubWV0YWRhdGEubWltZVR5cGUsaT0wO2k8dGhpcy51cmwubGVuZ3RoOysraSl0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKGUsdGhpcy51cmxbaV0sQXJyYXkuaXNBcnJheSh0KT90W2ldOnQpKTtlbHNle3ZhciB0PXRoaXMubWV0YWRhdGEubWltZVR5cGU7dGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZShlLHRoaXMudXJsLEFycmF5LmlzQXJyYXkodCk/dFswXTp0KSl9dGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLl9ib3VuZE9uRXJyb3IsITEpLHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLl9ib3VuZENvbXBsZXRlLCExKSx0aGlzLmRhdGEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHRoaXMuX2JvdW5kT25Qcm9ncmVzcywhMSksdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoImNhbnBsYXl0aHJvdWdoIix0aGlzLl9ib3VuZENvbXBsZXRlLCExKSx0aGlzLmRhdGEubG9hZCgpLHRoaXMudGltZW91dCYmKHRoaXMuX2VsZW1lbnRUaW1lcj1zZXRUaW1lb3V0KHRoaXMuX2JvdW5kT25UaW1lb3V0LHRoaXMudGltZW91dCkpfSxyLnByb3RvdHlwZS5fbG9hZFhocj1mdW5jdGlvbigpe3R5cGVvZiB0aGlzLnhoclR5cGUhPSJzdHJpbmciJiYodGhpcy54aHJUeXBlPXRoaXMuX2RldGVybWluZVhoclR5cGUoKSk7dmFyIGU9dGhpcy54aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3RoaXMuY3Jvc3NPcmlnaW49PT0idXNlLWNyZWRlbnRpYWxzIiYmKGUud2l0aENyZWRlbnRpYWxzPSEwKSxlLm9wZW4oIkdFVCIsdGhpcy51cmwsITApLGUudGltZW91dD10aGlzLnRpbWVvdXQsdGhpcy54aHJUeXBlPT09ci5YSFJfUkVTUE9OU0VfVFlQRS5KU09OfHx0aGlzLnhoclR5cGU9PT1yLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UP2UucmVzcG9uc2VUeXBlPXIuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDplLnJlc3BvbnNlVHlwZT10aGlzLnhoclR5cGUsZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5fYm91bmRYaHJPbkVycm9yLCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHRoaXMuX2JvdW5kWGhyT25UaW1lb3V0LCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix0aGlzLl9ib3VuZFhock9uQWJvcnQsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHRoaXMuX2JvdW5kT25Qcm9ncmVzcywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLl9ib3VuZFhock9uTG9hZCwhMSksZS5zZW5kKCl9LHIucHJvdG90eXBlLl9sb2FkWGRyPWZ1bmN0aW9uKCl7dHlwZW9mIHRoaXMueGhyVHlwZSE9InN0cmluZyImJih0aGlzLnhoclR5cGU9dGhpcy5fZGV0ZXJtaW5lWGhyVHlwZSgpKTt2YXIgZT10aGlzLnhocj1uZXcgZ2xvYmFsVGhpcy5YRG9tYWluUmVxdWVzdDtlLnRpbWVvdXQ9dGhpcy50aW1lb3V0fHw1ZTMsZS5vbmVycm9yPXRoaXMuX2JvdW5kWGhyT25FcnJvcixlLm9udGltZW91dD10aGlzLl9ib3VuZFhock9uVGltZW91dCxlLm9ucHJvZ3Jlc3M9dGhpcy5fYm91bmRPblByb2dyZXNzLGUub25sb2FkPXRoaXMuX2JvdW5kWGhyT25Mb2FkLGUub3BlbigiR0VUIix0aGlzLnVybCwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLnNlbmQoKX0sMSl9LHIucHJvdG90eXBlLl9jcmVhdGVTb3VyY2U9ZnVuY3Rpb24oZSx0LGkpe2l8fChpPWUrIi8iK3RoaXMuX2dldEV4dGVuc2lvbih0KSk7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7cmV0dXJuIG4uc3JjPXQsbi50eXBlPWksbn0sci5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydCgiRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZzogIitlLnRhcmdldC5ub2RlTmFtZSl9LHIucHJvdG90eXBlLl9vblByb2dyZXNzPWZ1bmN0aW9uKGUpe2UmJmUubGVuZ3RoQ29tcHV0YWJsZSYmdGhpcy5vblByb2dyZXNzLmRpc3BhdGNoKHRoaXMsZS5sb2FkZWQvZS50b3RhbCl9LHIucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24oKXt0aGlzLmFib3J0KCJMb2FkIHRpbWVkIG91dC4iKX0sci5wcm90b3R5cGUuX3hock9uRXJyb3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnhocjt0aGlzLmFib3J0KGppKGUpKyIgUmVxdWVzdCBmYWlsZWQuIFN0YXR1czogIitlLnN0YXR1cysnLCB0ZXh0OiAiJytlLnN0YXR1c1RleHQrJyInKX0sci5wcm90b3R5cGUuX3hock9uVGltZW91dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyO3RoaXMuYWJvcnQoamkoZSkrIiBSZXF1ZXN0IHRpbWVkIG91dC4iKX0sci5wcm90b3R5cGUuX3hock9uQWJvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnhocjt0aGlzLmFib3J0KGppKGUpKyIgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4iKX0sci5wcm90b3R5cGUuX3hock9uTG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyLHQ9IiIsaT10eXBlb2YgZS5zdGF0dXM+InUiP0thOmUuc3RhdHVzOyhlLnJlc3BvbnNlVHlwZT09PSIifHxlLnJlc3BvbnNlVHlwZT09PSJ0ZXh0Inx8dHlwZW9mIGUucmVzcG9uc2VUeXBlPiJ1IikmJih0PWUucmVzcG9uc2VUZXh0KSxpPT09QWMmJih0Lmxlbmd0aD4wfHxlLnJlc3BvbnNlVHlwZT09PXIuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSKT9pPUthOmk9PT1JYyYmKGk9Q2MpO3ZhciBuPWkvMTAwfDA7aWYobj09PU9jKWlmKHRoaXMueGhyVHlwZT09PXIuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCl0aGlzLmRhdGE9dCx0aGlzLnR5cGU9ci5UWVBFLlRFWFQ7ZWxzZSBpZih0aGlzLnhoclR5cGU9PT1yLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pdHJ5e3RoaXMuZGF0YT1KU09OLnBhcnNlKHQpLHRoaXMudHlwZT1yLlRZUEUuSlNPTn1jYXRjaChvKXt0aGlzLmFib3J0KCJFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246ICIrbyk7cmV0dXJufWVsc2UgaWYodGhpcy54aHJUeXBlPT09ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCl0cnl7aWYoZ2xvYmFsVGhpcy5ET01QYXJzZXIpe3ZhciBhPW5ldyBET01QYXJzZXI7dGhpcy5kYXRhPWEucGFyc2VGcm9tU3RyaW5nKHQsInRleHQveG1sIil9ZWxzZXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtzLmlubmVySFRNTD10LHRoaXMuZGF0YT1zfXRoaXMudHlwZT1yLlRZUEUuWE1MfWNhdGNoKG8pe3RoaXMuYWJvcnQoIkVycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOiAiK28pO3JldHVybn1lbHNlIHRoaXMuZGF0YT1lLnJlc3BvbnNlfHx0O2Vsc2V7dGhpcy5hYm9ydCgiWyIrZS5zdGF0dXMrIl0gIitlLnN0YXR1c1RleHQrIjogIitlLnJlc3BvbnNlVVJMKTtyZXR1cm59dGhpcy5jb21wbGV0ZSgpfSxyLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW49ZnVuY3Rpb24oZSx0KXtpZihlLmluZGV4T2YoImRhdGE6Iik9PT0wKXJldHVybiIiO2lmKGdsb2JhbFRoaXMub3JpZ2luIT09Z2xvYmFsVGhpcy5sb2NhdGlvbi5vcmlnaW4pcmV0dXJuImFub255bW91cyI7dD10fHxnbG9iYWxUaGlzLmxvY2F0aW9uLE5yfHwoTnI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxOci5ocmVmPWU7dmFyIGk9JGEoTnIuaHJlZix7c3RyaWN0TW9kZTohMH0pLG49IWkucG9ydCYmdC5wb3J0PT09IiJ8fGkucG9ydD09PXQucG9ydCxhPWkucHJvdG9jb2w/aS5wcm90b2NvbCsiOiI6IiI7cmV0dXJuIGkuaG9zdCE9PXQuaG9zdG5hbWV8fCFufHxhIT09dC5wcm90b2NvbD8iYW5vbnltb3VzIjoiIn0sci5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5feGhyVHlwZU1hcFt0aGlzLmV4dGVuc2lvbl18fHIuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVH0sci5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2xvYWRUeXBlTWFwW3RoaXMuZXh0ZW5zaW9uXXx8ci5MT0FEX1RZUEUuWEhSfSxyLnByb3RvdHlwZS5fZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUpe2U9PT12b2lkIDAmJihlPXRoaXMudXJsKTt2YXIgdD0iIjtpZih0aGlzLmlzRGF0YVVybCl7dmFyIGk9ZS5pbmRleE9mKCIvIik7dD1lLnN1YnN0cmluZyhpKzEsZS5pbmRleE9mKCI7IixpKSl9ZWxzZXt2YXIgbj1lLmluZGV4T2YoIj8iKSxhPWUuaW5kZXhPZigiIyIpLHM9TWF0aC5taW4obj4tMT9uOmUubGVuZ3RoLGE+LTE/YTplLmxlbmd0aCk7ZT1lLnN1YnN0cmluZygwLHMpLHQ9ZS5zdWJzdHJpbmcoZS5sYXN0SW5kZXhPZigiLiIpKzEpfXJldHVybiB0LnRvTG93ZXJDYXNlKCl9LHIucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugci5YSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVI6cmV0dXJuImFwcGxpY2F0aW9uL29jdGV0LWJpbmFyeSI7Y2FzZSByLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6cmV0dXJuImFwcGxpY2F0aW9uL2Jsb2IiO2Nhc2Ugci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpyZXR1cm4iYXBwbGljYXRpb24veG1sIjtjYXNlIHIuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTjpyZXR1cm4iYXBwbGljYXRpb24vanNvbiI7Y2FzZSByLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6Y2FzZSByLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ6ZGVmYXVsdDpyZXR1cm4idGV4dC9wbGFpbiJ9fSxyfSgpOyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EQVRBX1VSTD0xXT0iREFUQV9VUkwiLGVbZS5DT01QTEVURT0yXT0iQ09NUExFVEUiLGVbZS5MT0FESU5HPTRdPSJMT0FESU5HIn0pKHIuU1RBVFVTX0ZMQUdTfHwoci5TVEFUVVNfRkxBR1M9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLkpTT049MV09IkpTT04iLGVbZS5YTUw9Ml09IlhNTCIsZVtlLklNQUdFPTNdPSJJTUFHRSIsZVtlLkFVRElPPTRdPSJBVURJTyIsZVtlLlZJREVPPTVdPSJWSURFTyIsZVtlLlRFWFQ9Nl09IlRFWFQifShyLlRZUEV8fChyLlRZUEU9e30pKSxmdW5jdGlvbihlKXtlW2UuWEhSPTFdPSJYSFIiLGVbZS5JTUFHRT0yXT0iSU1BR0UiLGVbZS5BVURJTz0zXT0iQVVESU8iLGVbZS5WSURFTz00XT0iVklERU8ifShyLkxPQURfVFlQRXx8KHIuTE9BRF9UWVBFPXt9KSksZnVuY3Rpb24oZSl7ZS5ERUZBVUxUPSJ0ZXh0IixlLkJVRkZFUj0iYXJyYXlidWZmZXIiLGUuQkxPQj0iYmxvYiIsZS5ET0NVTUVOVD0iZG9jdW1lbnQiLGUuSlNPTj0ianNvbiIsZS5URVhUPSJ0ZXh0In0oci5YSFJfUkVTUE9OU0VfVFlQRXx8KHIuWEhSX1JFU1BPTlNFX1RZUEU9e30pKSxyLl9sb2FkVHlwZU1hcD17Z2lmOnIuTE9BRF9UWVBFLklNQUdFLHBuZzpyLkxPQURfVFlQRS5JTUFHRSxibXA6ci5MT0FEX1RZUEUuSU1BR0UsanBnOnIuTE9BRF9UWVBFLklNQUdFLGpwZWc6ci5MT0FEX1RZUEUuSU1BR0UsdGlmOnIuTE9BRF9UWVBFLklNQUdFLHRpZmY6ci5MT0FEX1RZUEUuSU1BR0Usd2VicDpyLkxPQURfVFlQRS5JTUFHRSx0Z2E6ci5MT0FEX1RZUEUuSU1BR0UsYXZpZjpyLkxPQURfVFlQRS5JTUFHRSxzdmc6ci5MT0FEX1RZUEUuSU1BR0UsInN2Zyt4bWwiOnIuTE9BRF9UWVBFLklNQUdFLG1wMzpyLkxPQURfVFlQRS5BVURJTyxvZ2c6ci5MT0FEX1RZUEUuQVVESU8sd2F2OnIuTE9BRF9UWVBFLkFVRElPLG1wNDpyLkxPQURfVFlQRS5WSURFTyx3ZWJtOnIuTE9BRF9UWVBFLlZJREVPfSxyLl94aHJUeXBlTWFwPXt4aHRtbDpyLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULGh0bWw6ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCxodG06ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCx4bWw6ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCx0bXg6ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCxzdmc6ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCx0c3g6ci5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCxnaWY6ci5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLHBuZzpyLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsYm1wOnIuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixqcGc6ci5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLGpwZWc6ci5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLHRpZjpyLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsdGlmZjpyLlhIUl9SRVNQT05TRV9UWVBFLkJMT0Isd2VicDpyLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsdGdhOnIuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixhdmlmOnIuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixqc29uOnIuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTix0ZXh0OnIuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCx0eHQ6ci5YSFJfUkVTUE9OU0VfVFlQRS5URVhULHR0ZjpyLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUixvdGY6ci5YSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVJ9LHIuRU1QVFlfR0lGPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09In0pKHV0fHwodXQ9e30pKTtmdW5jdGlvbiB2ZSgpe31mdW5jdGlvbiBNYyhyKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLGk9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspaVtuXT10W25dO2lmKHI9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLiIpO3ZhciBhPXI7cj1udWxsLGEuYXBwbHkodGhpcyxpKX19dmFyIERjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe3RoaXMuZGF0YT1lLHRoaXMuY2FsbGJhY2s9dH1yZXR1cm4gcn0oKSxWaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXt2YXIgaT10aGlzO2lmKHQ9PT12b2lkIDAmJih0PTEpLHRoaXMud29ya2Vycz0wLHRoaXMuc2F0dXJhdGVkPXZlLHRoaXMudW5zYXR1cmF0ZWQ9dmUsdGhpcy5lbXB0eT12ZSx0aGlzLmRyYWluPXZlLHRoaXMuZXJyb3I9dmUsdGhpcy5zdGFydGVkPSExLHRoaXMucGF1c2VkPSExLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2luc2VydD1mdW5jdGlvbihuLGEscyl7aWYocyYmdHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJ0YXNrIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO2lmKGkuc3RhcnRlZD0hMCxuPT1udWxsJiZpLmlkbGUoKSl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpLmRyYWluKCl9LDEpO3JldHVybn12YXIgbz1uZXcgRGMobix0eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnZlKTthP2kuX3Rhc2tzLnVuc2hpZnQobyk6aS5fdGFza3MucHVzaChvKSxzZXRUaW1lb3V0KGkucHJvY2VzcywxKX0sdGhpcy5wcm9jZXNzPWZ1bmN0aW9uKCl7Zm9yKDshaS5wYXVzZWQmJmkud29ya2VyczxpLmNvbmN1cnJlbmN5JiZpLl90YXNrcy5sZW5ndGg7KXt2YXIgbj1pLl90YXNrcy5zaGlmdCgpO2kuX3Rhc2tzLmxlbmd0aD09PTAmJmkuZW1wdHkoKSxpLndvcmtlcnMrPTEsaS53b3JrZXJzPT09aS5jb25jdXJyZW5jeSYmaS5zYXR1cmF0ZWQoKSxpLl93b3JrZXIobi5kYXRhLE1jKGkuX25leHQobikpKX19LHRoaXMuX3dvcmtlcj1lLHQ9PT0wKXRocm93IG5ldyBFcnJvcigiQ29uY3VycmVuY3kgbXVzdCBub3QgYmUgemVybyIpO3RoaXMuY29uY3VycmVuY3k9dCx0aGlzLmJ1ZmZlcj10LzR9cmV0dXJuIHIucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cyxuPVtdLGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKW5bYV09aVthXTt0LndvcmtlcnMtPTEsZS5jYWxsYmFjay5hcHBseShlLG4pLG5bMF0hPW51bGwmJnQuZXJyb3IoblswXSxlLmRhdGEpLHQud29ya2Vyczw9dC5jb25jdXJyZW5jeS10LmJ1ZmZlciYmdC51bnNhdHVyYXRlZCgpLHQuaWRsZSgpJiZ0LmRyYWluKCksdC5wcm9jZXNzKCl9fSxyLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dGhpcy5faW5zZXJ0KGUsITEsdCl9LHIucHJvdG90eXBlLmtpbGw9ZnVuY3Rpb24oKXt0aGlzLndvcmtlcnM9MCx0aGlzLmRyYWluPXZlLHRoaXMuc3RhcnRlZD0hMSx0aGlzLl90YXNrcz1bXX0sci5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlLHQpe3RoaXMuX2luc2VydChlLCEwLHQpfSxyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGFza3MubGVuZ3RofSxyLnByb3RvdHlwZS5ydW5uaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2Vyc30sci5wcm90b3R5cGUuaWRsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YXNrcy5sZW5ndGgrdGhpcy53b3JrZXJzPT09MH0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZCE9PSEwJiYodGhpcy5wYXVzZWQ9ITApfSxyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLnBhdXNlZCE9PSExKXt0aGlzLnBhdXNlZD0hMTtmb3IodmFyIGU9MTtlPD10aGlzLmNvbmN1cnJlbmN5O2UrKyl0aGlzLnByb2Nlc3MoKX19LHIuZWFjaFNlcmllcz1mdW5jdGlvbihlLHQsaSxuKXt2YXIgYT0wLHM9ZS5sZW5ndGg7ZnVuY3Rpb24gbyhoKXtpZihofHxhPT09cyl7aSYmaShoKTtyZXR1cm59bj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChlW2ErK10sbyl9LDEpOnQoZVthKytdLG8pfW8oKX0sci5xdWV1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcihlLHQpfSxyfSgpLFlpPTEwMCxGYz0vKCNbXHctXSspPyQvLEJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe3ZhciBpPXRoaXM7ZT09PXZvaWQgMCYmKGU9IiIpLHQ9PT12b2lkIDAmJih0PTEwKSx0aGlzLnByb2dyZXNzPTAsdGhpcy5sb2FkaW5nPSExLHRoaXMuZGVmYXVsdFF1ZXJ5U3RyaW5nPSIiLHRoaXMuX2JlZm9yZU1pZGRsZXdhcmU9W10sdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlPVtdLHRoaXMuX3Jlc291cmNlc1BhcnNpbmc9W10sdGhpcy5fYm91bmRMb2FkUmVzb3VyY2U9ZnVuY3Rpb24oaCx1KXtyZXR1cm4gaS5fbG9hZFJlc291cmNlKGgsdSl9LHRoaXMucmVzb3VyY2VzPXt9LHRoaXMuYmFzZVVybD1lLHRoaXMuX2JlZm9yZU1pZGRsZXdhcmU9W10sdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlPVtdLHRoaXMuX3Jlc291cmNlc1BhcnNpbmc9W10sdGhpcy5fYm91bmRMb2FkUmVzb3VyY2U9ZnVuY3Rpb24oaCx1KXtyZXR1cm4gaS5fbG9hZFJlc291cmNlKGgsdSl9LHRoaXMuX3F1ZXVlPVZpLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLHQpLHRoaXMuX3F1ZXVlLnBhdXNlKCksdGhpcy5yZXNvdXJjZXM9e30sdGhpcy5vblByb2dyZXNzPW5ldyBxdCx0aGlzLm9uRXJyb3I9bmV3IHF0LHRoaXMub25Mb2FkPW5ldyBxdCx0aGlzLm9uU3RhcnQ9bmV3IHF0LHRoaXMub25Db21wbGV0ZT1uZXcgcXQ7Zm9yKHZhciBuPTA7bjxyLl9wbHVnaW5zLmxlbmd0aDsrK24pe3ZhciBhPXIuX3BsdWdpbnNbbl0scz1hLnByZSxvPWEudXNlO3MmJnRoaXMucHJlKHMpLG8mJnRoaXMudXNlKG8pfXRoaXMuX3Byb3RlY3RlZD0hMX1yZXR1cm4gci5wcm90b3R5cGUuX2FkZD1mdW5jdGlvbihlLHQsaSxuKXtpZih0aGlzLmxvYWRpbmcmJighaXx8IWkucGFyZW50UmVzb3VyY2UpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFkZCByZXNvdXJjZXMgd2hpbGUgdGhlIGxvYWRlciBpcyBydW5uaW5nLiIpO2lmKHRoaXMucmVzb3VyY2VzW2VdKXRocm93IG5ldyBFcnJvcignUmVzb3VyY2UgbmFtZWQgIicrZSsnIiBhbHJlYWR5IGV4aXN0cy4nKTtpZih0PXRoaXMuX3ByZXBhcmVVcmwodCksdGhpcy5yZXNvdXJjZXNbZV09bmV3IHV0KGUsdCxpKSx0eXBlb2Ygbj09ImZ1bmN0aW9uIiYmdGhpcy5yZXNvdXJjZXNbZV0ub25BZnRlck1pZGRsZXdhcmUub25jZShuKSx0aGlzLmxvYWRpbmcpe2Zvcih2YXIgYT1pLnBhcmVudFJlc291cmNlLHM9W10sbz0wO288YS5jaGlsZHJlbi5sZW5ndGg7KytvKWEuY2hpbGRyZW5bb10uaXNDb21wbGV0ZXx8cy5wdXNoKGEuY2hpbGRyZW5bb10pO3ZhciBoPWEucHJvZ3Jlc3NDaHVuayoocy5sZW5ndGgrMSksdT1oLyhzLmxlbmd0aCsyKTthLmNoaWxkcmVuLnB1c2godGhpcy5yZXNvdXJjZXNbZV0pLGEucHJvZ3Jlc3NDaHVuaz11O2Zvcih2YXIgbz0wO288cy5sZW5ndGg7KytvKXNbb10ucHJvZ3Jlc3NDaHVuaz11O3RoaXMucmVzb3VyY2VzW2VdLnByb2dyZXNzQ2h1bms9dX1yZXR1cm4gdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tlXSksdGhpc30sci5wcm90b3R5cGUucHJlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZSksdGhpc30sci5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChlKSx0aGlzfSxyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucHJvZ3Jlc3M9MCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5fcXVldWUua2lsbCgpLHRoaXMuX3F1ZXVlLnBhdXNlKCk7Zm9yKHZhciBlIGluIHRoaXMucmVzb3VyY2VzKXt2YXIgdD10aGlzLnJlc291cmNlc1tlXTt0Ll9vbkxvYWRCaW5kaW5nJiZ0Ll9vbkxvYWRCaW5kaW5nLmRldGFjaCgpLHQuaXNMb2FkaW5nJiZ0LmFib3J0KCJsb2FkZXIgcmVzZXQiKX1yZXR1cm4gdGhpcy5yZXNvdXJjZXM9e30sdGhpc30sci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtpZihPdCgiNi41LjAiLCJAcGl4aS9sb2FkZXJzIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggQHBpeGkvYXNzZXRzIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIiksdHlwZW9mIGU9PSJmdW5jdGlvbiImJnRoaXMub25Db21wbGV0ZS5vbmNlKGUpLHRoaXMubG9hZGluZylyZXR1cm4gdGhpcztpZih0aGlzLl9xdWV1ZS5pZGxlKCkpdGhpcy5fb25TdGFydCgpLHRoaXMuX29uQ29tcGxldGUoKTtlbHNle2Zvcih2YXIgdD10aGlzLl9xdWV1ZS5fdGFza3MubGVuZ3RoLGk9WWkvdCxuPTA7bjx0aGlzLl9xdWV1ZS5fdGFza3MubGVuZ3RoOysrbil0aGlzLl9xdWV1ZS5fdGFza3Nbbl0uZGF0YS5wcm9ncmVzc0NodW5rPWk7dGhpcy5fb25TdGFydCgpLHRoaXMuX3F1ZXVlLnJlc3VtZSgpfXJldHVybiB0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImNvbmN1cnJlbmN5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXVlLmNvbmN1cnJlbmN5fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcXVldWUuY29uY3VycmVuY3k9ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS5fcHJlcGFyZVVybD1mdW5jdGlvbihlKXt2YXIgdD0kYShlLHtzdHJpY3RNb2RlOiEwfSksaTtpZih0LnByb3RvY29sfHwhdC5wYXRofHxlLmluZGV4T2YoIi8vIik9PT0wP2k9ZTp0aGlzLmJhc2VVcmwubGVuZ3RoJiZ0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoIi8iKSE9PXRoaXMuYmFzZVVybC5sZW5ndGgtMSYmZS5jaGFyQXQoMCkhPT0iLyI/aT10aGlzLmJhc2VVcmwrIi8iK2U6aT10aGlzLmJhc2VVcmwrZSx0aGlzLmRlZmF1bHRRdWVyeVN0cmluZyl7dmFyIG49RmMuZXhlYyhpKVswXTtpPWkuc2xpY2UoMCxpLmxlbmd0aC1uLmxlbmd0aCksaS5pbmRleE9mKCI/IikhPT0tMT9pKz0iJiIrdGhpcy5kZWZhdWx0UXVlcnlTdHJpbmc6aSs9Ij8iK3RoaXMuZGVmYXVsdFF1ZXJ5U3RyaW5nLGkrPW59cmV0dXJuIGl9LHIucHJvdG90eXBlLl9sb2FkUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO2UuX2RlcXVldWU9dCxWaS5lYWNoU2VyaWVzKHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsZnVuY3Rpb24obixhKXtuLmNhbGwoaSxlLGZ1bmN0aW9uKCl7YShlLmlzQ29tcGxldGU/e306bnVsbCl9KX0sZnVuY3Rpb24oKXtlLmlzQ29tcGxldGU/aS5fb25Mb2FkKGUpOihlLl9vbkxvYWRCaW5kaW5nPWUub25Db21wbGV0ZS5vbmNlKGkuX29uTG9hZCxpKSxlLmxvYWQoKSl9LCEwKX0sci5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnByb2dyZXNzPTAsdGhpcy5sb2FkaW5nPSEwLHRoaXMub25TdGFydC5kaXNwYXRjaCh0aGlzKX0sci5wcm90b3R5cGUuX29uQ29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnByb2dyZXNzPVlpLHRoaXMubG9hZGluZz0hMSx0aGlzLm9uQ29tcGxldGUuZGlzcGF0Y2godGhpcyx0aGlzLnJlc291cmNlcyl9LHIucHJvdG90eXBlLl9vbkxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlLl9vbkxvYWRCaW5kaW5nPW51bGwsdGhpcy5fcmVzb3VyY2VzUGFyc2luZy5wdXNoKGUpLGUuX2RlcXVldWUoKSxWaS5lYWNoU2VyaWVzKHRoaXMuX2FmdGVyTWlkZGxld2FyZSxmdW5jdGlvbihpLG4pe2kuY2FsbCh0LGUsbil9LGZ1bmN0aW9uKCl7ZS5vbkFmdGVyTWlkZGxld2FyZS5kaXNwYXRjaChlKSx0LnByb2dyZXNzPU1hdGgubWluKFlpLHQucHJvZ3Jlc3MrZS5wcm9ncmVzc0NodW5rKSx0Lm9uUHJvZ3Jlc3MuZGlzcGF0Y2godCxlKSxlLmVycm9yP3Qub25FcnJvci5kaXNwYXRjaChlLmVycm9yLHQsZSk6dC5vbkxvYWQuZGlzcGF0Y2godCxlKSx0Ll9yZXNvdXJjZXNQYXJzaW5nLnNwbGljZSh0Ll9yZXNvdXJjZXNQYXJzaW5nLmluZGV4T2YoZSksMSksdC5fcXVldWUuaWRsZSgpJiZ0Ll9yZXNvdXJjZXNQYXJzaW5nLmxlbmd0aD09PTAmJnQuX29uQ29tcGxldGUoKX0sITApfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcHJvdGVjdGVkfHx0aGlzLnJlc2V0KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJzaGFyZWQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1yLl9zaGFyZWQ7cmV0dXJuIGV8fChlPW5ldyByLGUuX3Byb3RlY3RlZD0hMCxyLl9zaGFyZWQ9ZSksZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKGUpe3JldHVybiBPdCgiNi41LjAiLCJMb2FkZXIucmVnaXN0ZXJQbHVnaW4oKSBpcyBkZXByZWNhdGVkLCB1c2UgZXh0ZW5zaW9ucy5hZGQoKSBpbnN0ZWFkLiIpLHp0LmFkZCh7dHlwZTpLLkxvYWRlcixyZWY6ZX0pLHJ9LHIuX3BsdWdpbnM9W10scn0oKTt6dC5oYW5kbGVCeUxpc3QoSy5Mb2FkZXIsQnIuX3BsdWdpbnMpLEJyLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0LGksbil7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpdGhpcy5hZGQoZVthXSk7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGU9PSJvYmplY3QiJiYoaT1lLG49dHx8aS5jYWxsYmFja3x8aS5vbkNvbXBsZXRlLHQ9aS51cmwsZT1pLm5hbWV8fGkua2V5fHxpLnVybCksdHlwZW9mIHQhPSJzdHJpbmciJiYobj1pLGk9dCx0PWUpLHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIk5vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4iKTtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiImJihuPWksaT1udWxsKSx0aGlzLl9hZGQoZSx0LGksbil9O3ZhciBOYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuaW5pdD1mdW5jdGlvbihlKXtlPU9iamVjdC5hc3NpZ24oe3NoYXJlZExvYWRlcjohMX0sZSksdGhpcy5sb2FkZXI9ZS5zaGFyZWRMb2FkZXI/QnIuc2hhcmVkOm5ldyBCcn0sci5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sb2FkZXImJih0aGlzLmxvYWRlci5kZXN0cm95KCksdGhpcy5sb2FkZXI9bnVsbCl9LHIuZXh0ZW5zaW9uPUsuQXBwbGljYXRpb24scn0oKSxCYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuYWRkPWZ1bmN0aW9uKCl7dXQuc2V0RXh0ZW5zaW9uTG9hZFR5cGUoInN2ZyIsdXQuTE9BRF9UWVBFLlhIUiksdXQuc2V0RXh0ZW5zaW9uWGhyVHlwZSgic3ZnIix1dC5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKX0sci51c2U9ZnVuY3Rpb24oZSx0KXtpZihlLmRhdGEmJihlLnR5cGU9PT11dC5UWVBFLklNQUdFfHxlLmV4dGVuc2lvbj09PSJzdmciKSl7dmFyIGk9ZS5kYXRhLG49ZS51cmwsYT1lLm5hbWUscz1lLm1ldGFkYXRhO0wuZnJvbUxvYWRlcihpLG4sYSxzKS50aGVuKGZ1bmN0aW9uKG8pe2UudGV4dHVyZT1vLHQoKX0pLmNhdGNoKHQpfWVsc2UgdCgpfSxyLmV4dGVuc2lvbj1LLkxvYWRlcixyfSgpLExjPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gVWMocil7Zm9yKHZhciBlPSIiLHQ9MDt0PHIubGVuZ3RoOyl7Zm9yKHZhciBpPVswLDAsMF0sbj1bMCwwLDAsMF0sYT0wO2E8aS5sZW5ndGg7KythKXQ8ci5sZW5ndGg/aVthXT1yLmNoYXJDb2RlQXQodCsrKSYyNTU6aVthXT0wO25bMF09aVswXT4+MixuWzFdPShpWzBdJjMpPDw0fGlbMV0+PjQsblsyXT0oaVsxXSYxNSk8PDJ8aVsyXT4+NixuWzNdPWlbMl0mNjM7dmFyIHM9dC0oci5sZW5ndGgtMSk7c3dpdGNoKHMpe2Nhc2UgMjpuWzNdPTY0LG5bMl09NjQ7YnJlYWs7Y2FzZSAxOm5bM109NjQ7YnJlYWt9Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpZSs9TGMuY2hhckF0KG5bYV0pfXJldHVybiBlfWZ1bmN0aW9uIEdjKHIsZSl7aWYoIXIuZGF0YSl7ZSgpO3JldHVybn1pZihyLnhociYmci54aHJUeXBlPT09dXQuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQil7aWYoIXNlbGYuQmxvYnx8dHlwZW9mIHIuZGF0YT09InN0cmluZyIpe3ZhciB0PXIueGhyLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKTtpZih0JiZ0LmluZGV4T2YoImltYWdlIik9PT0wKXtyLmRhdGE9bmV3IEltYWdlLHIuZGF0YS5zcmM9ImRhdGE6Iit0KyI7YmFzZTY0LCIrVWMoci54aHIucmVzcG9uc2VUZXh0KSxyLnR5cGU9dXQuVFlQRS5JTUFHRSxyLmRhdGEub25sb2FkPWZ1bmN0aW9uKCl7ci5kYXRhLm9ubG9hZD1udWxsLGUoKX07cmV0dXJufX1lbHNlIGlmKHIuZGF0YS50eXBlLmluZGV4T2YoImltYWdlIik9PT0wKXt2YXIgaT1nbG9iYWxUaGlzLlVSTHx8Z2xvYmFsVGhpcy53ZWJraXRVUkwsbj1pLmNyZWF0ZU9iamVjdFVSTChyLmRhdGEpO3IuYmxvYj1yLmRhdGEsci5kYXRhPW5ldyBJbWFnZSxyLmRhdGEuc3JjPW4sci50eXBlPXV0LlRZUEUuSU1BR0Usci5kYXRhLm9ubG9hZD1mdW5jdGlvbigpe2kucmV2b2tlT2JqZWN0VVJMKG4pLHIuZGF0YS5vbmxvYWQ9bnVsbCxlKCl9O3JldHVybn19ZSgpfXZhciBrYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuZXh0ZW5zaW9uPUsuTG9hZGVyLHIudXNlPUdjLHJ9KCk7enQuYWRkKEJjLGtjKTt2YXIgJCxVOyhmdW5jdGlvbihyKXtyW3IuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVD0zMzc3Nl09IkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQiLHJbci5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVD0zMzc3N109IkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIixyW3IuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ9MzM3NzhdPSJDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCIscltyLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUPTMzNzc5XT0iQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQiLHJbci5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVD0zNTkxN109IkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUIixyW3IuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ9MzU5MThdPSJDT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVCIscltyLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUPTM1OTE5XT0iQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFQiLHJbci5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVD0zNTkxNl09IkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUIixyW3IuQ09NUFJFU1NFRF9SMTFfRUFDPTM3NDg4XT0iQ09NUFJFU1NFRF9SMTFfRUFDIixyW3IuQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQz0zNzQ4OV09IkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMiLHJbci5DT01QUkVTU0VEX1JHMTFfRUFDPTM3NDkwXT0iQ09NUFJFU1NFRF9SRzExX0VBQyIscltyLkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDPTM3NDkxXT0iQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMiLHJbci5DT01QUkVTU0VEX1JHQjhfRVRDMj0zNzQ5Ml09IkNPTVBSRVNTRURfUkdCOF9FVEMyIixyW3IuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQz0zNzQ5Nl09IkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMiLHJbci5DT01QUkVTU0VEX1NSR0I4X0VUQzI9Mzc0OTNdPSJDT01QUkVTU0VEX1NSR0I4X0VUQzIiLHJbci5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQz0zNzQ5N109IkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDIixyW3IuQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMj0zNzQ5NF09IkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIiLHJbci5DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMj0zNzQ5NV09IkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyIixyW3IuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRz0zNTg0MF09IkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUciLHJbci5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRz0zNTg0Ml09IkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HIixyW3IuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRz0zNTg0MV09IkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUciLHJbci5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRz0zNTg0M109IkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HIixyW3IuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTD0zNjE5Nl09IkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wiLHJbci5DT01QUkVTU0VEX1JHQl9BVENfV0VCR0w9MzU5ODZdPSJDT01QUkVTU0VEX1JHQl9BVENfV0VCR0wiLHJbci5DT01QUkVTU0VEX1JHQkFfQVRDX0VYUExJQ0lUX0FMUEhBX1dFQkdMPTM1OTg2XT0iQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTCIscltyLkNPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMPTM0Nzk4XT0iQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0wiLHJbci5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSPTM3ODA4XT0iQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiJ9KShVfHwoVT17fSkpO3ZhciBMcj0oJD17fSwkW1UuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVF09LjUsJFtVLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUXT0uNSwkW1UuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFRdPTEsJFtVLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXT0xLCRbVS5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVF09LjUsJFtVLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUXT0uNSwkW1UuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFRdPTEsJFtVLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUXT0xLCRbVS5DT01QUkVTU0VEX1IxMV9FQUNdPS41LCRbVS5DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDXT0uNSwkW1UuQ09NUFJFU1NFRF9SRzExX0VBQ109MSwkW1UuQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUNdPTEsJFtVLkNPTVBSRVNTRURfUkdCOF9FVEMyXT0uNSwkW1UuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ109MSwkW1UuQ09NUFJFU1NFRF9TUkdCOF9FVEMyXT0uNSwkW1UuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUNdPTEsJFtVLkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJdPS41LCRbVS5DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl09LjUsJFtVLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUddPS41LCRbVS5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNR109LjUsJFtVLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUddPS4yNSwkW1UuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUddPS4yNSwkW1UuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTF09LjUsJFtVLkNPTVBSRVNTRURfUkdCX0FUQ19XRUJHTF09LjUsJFtVLkNPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0xdPTEsJFtVLkNPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMXT0xLCRbVS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSXT0xLCQpO3ZhciB6aT1mdW5jdGlvbihyLGUpe3JldHVybiB6aT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0semkocixlKX07ZnVuY3Rpb24gUWEocixlKXt6aShyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfWZ1bmN0aW9uIFhjKHIsZSx0LGkpe2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiB0P2E6bmV3IHQoZnVuY3Rpb24ocyl7cyhhKX0pfXJldHVybiBuZXcodHx8KHQ9UHJvbWlzZSkpKGZ1bmN0aW9uKGEscyl7ZnVuY3Rpb24gbyhsKXt0cnl7dShpLm5leHQobCkpfWNhdGNoKGMpe3MoYyl9fWZ1bmN0aW9uIGgobCl7dHJ5e3UoaS50aHJvdyhsKSl9Y2F0Y2goYyl7cyhjKX19ZnVuY3Rpb24gdShsKXtsLmRvbmU/YShsLnZhbHVlKTpuKGwudmFsdWUpLnRoZW4obyxoKX11KChpPWkuYXBwbHkocixlfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBIYyhyLGUpe3ZhciB0PXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihhWzBdJjEpdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119LGksbixhLHM7cmV0dXJuIHM9e25leHQ6bygwKSx0aHJvdzpvKDEpLHJldHVybjpvKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzO2Z1bmN0aW9uIG8odSl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBoKFt1LGxdKX19ZnVuY3Rpb24gaCh1KXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3Q7KXRyeXtpZihpPTEsbiYmKGE9dVswXSYyP24ucmV0dXJuOnVbMF0/bi50aHJvd3x8KChhPW4ucmV0dXJuKSYmYS5jYWxsKG4pLDApOm4ubmV4dCkmJiEoYT1hLmNhbGwobix1WzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gobj0wLGEmJih1PVt1WzBdJjIsYS52YWx1ZV0pLHVbMF0pe2Nhc2UgMDpjYXNlIDE6YT11O2JyZWFrO2Nhc2UgNDpyZXR1cm4gdC5sYWJlbCsrLHt2YWx1ZTp1WzFdLGRvbmU6ITF9O2Nhc2UgNTp0LmxhYmVsKyssbj11WzFdLHU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1PXQub3BzLnBvcCgpLHQudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9dC50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKHVbMF09PT02fHx1WzBdPT09Mikpe3Q9MDtjb250aW51ZX1pZih1WzBdPT09MyYmKCFhfHx1WzFdPmFbMF0mJnVbMV08YVszXSkpe3QubGFiZWw9dVsxXTticmVha31pZih1WzBdPT09NiYmdC5sYWJlbDxhWzFdKXt0LmxhYmVsPWFbMV0sYT11O2JyZWFrfWlmKGEmJnQubGFiZWw8YVsyXSl7dC5sYWJlbD1hWzJdLHQub3BzLnB1c2godSk7YnJlYWt9YVsyXSYmdC5vcHMucG9wKCksdC50cnlzLnBvcCgpO2NvbnRpbnVlfXU9ZS5jYWxsKHIsdCl9Y2F0Y2gobCl7dT1bNixsXSxuPTB9ZmluYWxseXtpPWE9MH1pZih1WzBdJjUpdGhyb3cgdVsxXTtyZXR1cm57dmFsdWU6dVswXT91WzFdOnZvaWQgMCxkb25lOiEwfX19dmFyIGpjPWZ1bmN0aW9uKHIpe1FhKGUscik7ZnVuY3Rpb24gZSh0LGkpe2k9PT12b2lkIDAmJihpPXt3aWR0aDoxLGhlaWdodDoxLGF1dG9Mb2FkOiEwfSk7dmFyIG49dGhpcyxhLHM7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj8oYT10LHM9bmV3IFVpbnQ4QXJyYXkpOihhPW51bGwscz10KSxuPXIuY2FsbCh0aGlzLHMsaSl8fHRoaXMsbi5vcmlnaW49YSxuLmJ1ZmZlcj1zP25ldyBHaShzKTpudWxsLG4ub3JpZ2luJiZpLmF1dG9Mb2FkIT09ITEmJm4ubG9hZCgpLHMmJnMubGVuZ3RoJiYobi5sb2FkZWQ9ITAsbi5vbkJsb2JMb2FkZWQobi5idWZmZXIucmF3QmluYXJ5RGF0YSkpLG59cmV0dXJuIGUucHJvdG90eXBlLm9uQmxvYkxvYWRlZD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gWGModGhpcyx2b2lkIDAsUHJvbWlzZSxmdW5jdGlvbigpe3ZhciB0LGksbjtyZXR1cm4gSGModGhpcyxmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGZldGNoKHRoaXMub3JpZ2luKV07Y2FzZSAxOnJldHVybiB0PWEuc2VudCgpLFs0LHQuYmxvYigpXTtjYXNlIDI6cmV0dXJuIGk9YS5zZW50KCksWzQsaS5hcnJheUJ1ZmZlcigpXTtjYXNlIDM6cmV0dXJuIG49YS5zZW50KCksdGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheShuKSx0aGlzLmJ1ZmZlcj1uZXcgR2kobiksdGhpcy5sb2FkZWQ9ITAsdGhpcy5vbkJsb2JMb2FkZWQobiksdGhpcy51cGRhdGUoKSxbMix0aGlzXX19KX0pfSxlfShWZSksV2k9ZnVuY3Rpb24ocil7UWEoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49ci5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gbi5mb3JtYXQ9aS5mb3JtYXQsbi5sZXZlbHM9aS5sZXZlbHN8fDEsbi5fd2lkdGg9aS53aWR0aCxuLl9oZWlnaHQ9aS5oZWlnaHQsbi5fZXh0ZW5zaW9uPWUuX2Zvcm1hdFRvRXh0ZW5zaW9uKG4uZm9ybWF0KSwoaS5sZXZlbEJ1ZmZlcnN8fG4uYnVmZmVyKSYmKG4uX2xldmVsQnVmZmVycz1pLmxldmVsQnVmZmVyc3x8ZS5fY3JlYXRlTGV2ZWxCdWZmZXJzKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5P3Q6bi5idWZmZXIudWludDhWaWV3LG4uZm9ybWF0LG4ubGV2ZWxzLDQsNCxuLndpZHRoLG4uaGVpZ2h0KSksbn1yZXR1cm4gZS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsaSxuKXt2YXIgYT10LmdsLHM9dC5jb250ZXh0LmV4dGVuc2lvbnNbdGhpcy5fZXh0ZW5zaW9uXTtpZighcyl0aHJvdyBuZXcgRXJyb3IodGhpcy5fZXh0ZW5zaW9uKyIgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgbWFjaGluZSIpO2lmKCF0aGlzLl9sZXZlbEJ1ZmZlcnMpcmV0dXJuITE7Zm9yKHZhciBvPTAsaD10aGlzLmxldmVscztvPGg7bysrKXt2YXIgdT10aGlzLl9sZXZlbEJ1ZmZlcnNbb10sbD11LmxldmVsSUQsYz11LmxldmVsV2lkdGgsZj11LmxldmVsSGVpZ2h0LGQ9dS5sZXZlbEJ1ZmZlcjthLmNvbXByZXNzZWRUZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCxsLHRoaXMuZm9ybWF0LGMsZiwwLGQpfXJldHVybiEwfSxlLnByb3RvdHlwZS5vbkJsb2JMb2FkZWQ9ZnVuY3Rpb24oKXt0aGlzLl9sZXZlbEJ1ZmZlcnM9ZS5fY3JlYXRlTGV2ZWxCdWZmZXJzKHRoaXMuYnVmZmVyLnVpbnQ4Vmlldyx0aGlzLmZvcm1hdCx0aGlzLmxldmVscyw0LDQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LGUuX2Zvcm1hdFRvRXh0ZW5zaW9uPWZ1bmN0aW9uKHQpe2lmKHQ+PTMzNzc2JiZ0PD0zMzc3OSlyZXR1cm4iczN0YyI7aWYodD49Mzc0ODgmJnQ8PTM3NDk3KXJldHVybiJldGMiO2lmKHQ+PTM1ODQwJiZ0PD0zNTg0MylyZXR1cm4icHZydGMiO2lmKHQ+PTM2MTk2KXJldHVybiJldGMxIjtpZih0Pj0zNTk4NiYmdDw9MzQ3OTgpcmV0dXJuImF0YyI7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIChjb21wcmVzc2VkKSB0ZXh0dXJlIGZvcm1hdCBnaXZlbiEiKX0sZS5fY3JlYXRlTGV2ZWxCdWZmZXJzPWZ1bmN0aW9uKHQsaSxuLGEscyxvLGgpe2Zvcih2YXIgdT1uZXcgQXJyYXkobiksbD10LmJ5dGVPZmZzZXQsYz1vLGY9aCxkPWMrYS0xJn4oYS0xKSxwPWYrcy0xJn4ocy0xKSx2PWQqcCpMcltpXSxfPTA7XzxuO18rKyl1W19dPXtsZXZlbElEOl8sbGV2ZWxXaWR0aDpuPjE/YzpkLGxldmVsSGVpZ2h0Om4+MT9mOnAsbGV2ZWxCdWZmZXI6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsbCx2KX0sbCs9dixjPWM+PjF8fDEsZj1mPj4xfHwxLGQ9YythLTEmfihhLTEpLHA9ZitzLTEmfihzLTEpLHY9ZCpwKkxyW2ldO3JldHVybiB1fSxlfShqYyksVmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnVzZT1mdW5jdGlvbihlLHQpe3ZhciBpPWUuZGF0YSxuPXRoaXM7aWYoZS50eXBlPT09dXQuVFlQRS5KU09OJiZpJiZpLmNhY2hlSUQmJmkudGV4dHVyZXMpe2Zvcih2YXIgYT1pLnRleHR1cmVzLHM9dm9pZCAwLG89dm9pZCAwLGg9MCx1PWEubGVuZ3RoO2g8dTtoKyspe3ZhciBsPWFbaF0sYz1sLnNyYyxmPWwuZm9ybWF0O2lmKGZ8fChvPWMpLHIudGV4dHVyZUZvcm1hdHNbZl0pe3M9YzticmVha319aWYocz1zfHxvLCFzKXt0KG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgY29tcHJlc3NlZC10ZXh0dXJlcyBpbiAiK2UudXJsKyIsIG1ha2Ugc3VyZSB5b3UgcHJvdmlkZSBhIGZhbGxiYWNrIikpO3JldHVybn1pZihzPT09ZS51cmwpe3QobmV3IEVycm9yKCJVUkwgb2YgY29tcHJlc3NlZCB0ZXh0dXJlIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbWFuaWZlc3QncyBVUkwiKSk7cmV0dXJufXZhciBkPXtjcm9zc09yaWdpbjplLmNyb3NzT3JpZ2luLG1ldGFkYXRhOmUubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YSxwYXJlbnRSZXNvdXJjZTplfSxwPUVlLnJlc29sdmUoZS51cmwucmVwbGFjZShuLmJhc2VVcmwsIiIpLHMpLHY9aS5jYWNoZUlEO24uYWRkKHYscCxkLGZ1bmN0aW9uKF8pe2lmKF8uZXJyb3Ipe3QoXy5lcnJvcik7cmV0dXJufXZhciBtPV8udGV4dHVyZSxnPW09PT12b2lkIDA/bnVsbDptLHk9Xy50ZXh0dXJlcyxUPXk9PT12b2lkIDA/e306eTtPYmplY3QuYXNzaWduKGUse3RleHR1cmU6Zyx0ZXh0dXJlczpUfSksdCgpfSl9ZWxzZSB0KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJ0ZXh0dXJlRXh0ZW5zaW9ucyIse2dldDpmdW5jdGlvbigpe2lmKCFyLl90ZXh0dXJlRXh0ZW5zaW9ucyl7dmFyIGU9SS5BREFQVEVSLmNyZWF0ZUNhbnZhcygpLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbCIpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIldlYkdMIG5vdCBhdmFpbGFibGUgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMuIFNpbGVudGx5IGZhaWxpbmcuIikse307dmFyIGk9e3MzdGM6dC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksczN0Y19zUkdCOnQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIiksZXRjOnQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksZXRjMTp0LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxwdnJ0Yzp0LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksYXRjOnQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIiksYXN0Yzp0LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKX07ci5fdGV4dHVyZUV4dGVuc2lvbnM9aX1yZXR1cm4gci5fdGV4dHVyZUV4dGVuc2lvbnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInRleHR1cmVGb3JtYXRzIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXIuX3RleHR1cmVGb3JtYXRzKXt2YXIgZT1yLnRleHR1cmVFeHRlbnNpb25zO3IuX3RleHR1cmVGb3JtYXRzPXt9O2Zvcih2YXIgdCBpbiBlKXt2YXIgaT1lW3RdO2kmJk9iamVjdC5hc3NpZ24oci5fdGV4dHVyZUZvcm1hdHMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGkpKX19cmV0dXJuIHIuX3RleHR1cmVGb3JtYXRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHIuZXh0ZW5zaW9uPUsuTG9hZGVyLHJ9KCk7ZnVuY3Rpb24gdHMocixlLHQpe3ZhciBpPXt0ZXh0dXJlczp7fSx0ZXh0dXJlOm51bGx9O2lmKCFlKXJldHVybiBpO3ZhciBuPWUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgTChuZXcgaihhLE9iamVjdC5hc3NpZ24oe21pcG1hcDpSdC5PRkYsYWxwaGFNb2RlOkF0Lk5PX1BSRU1VTFRJUExJRURfQUxQSEF9LHQpKSl9KTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7dmFyIG89YS5iYXNlVGV4dHVyZSxoPXIrIi0iKyhzKzEpO2ouYWRkVG9DYWNoZShvLGgpLEwuYWRkVG9DYWNoZShhLGgpLHM9PT0wJiYoai5hZGRUb0NhY2hlKG8sciksTC5hZGRUb0NhY2hlKGEsciksaS50ZXh0dXJlPWEpLGkudGV4dHVyZXNbaF09YX0pLGl9dmFyIEtlLE10LHFpPTQsVXI9MTI0LFljPTMyLGVzPTIwLHpjPTU0MjMyNzg3NixHcj17U0laRToxLEZMQUdTOjIsSEVJR0hUOjMsV0lEVEg6NCxNSVBNQVBfQ09VTlQ6NyxQSVhFTF9GT1JNQVQ6MTl9LFdjPXtTSVpFOjAsRkxBR1M6MSxGT1VSQ0M6MixSR0JfQklUQ09VTlQ6MyxSX0JJVF9NQVNLOjQsR19CSVRfTUFTSzo1LEJfQklUX01BU0s6NixBX0JJVF9NQVNLOjd9LGtyPXtEWEdJX0ZPUk1BVDowLFJFU09VUkNFX0RJTUVOU0lPTjoxLE1JU0NfRkxBRzoyLEFSUkFZX1NJWkU6MyxNSVNDX0ZMQUdTMjo0fSxEdDsoZnVuY3Rpb24ocil7cltyLkRYR0lfRk9STUFUX1VOS05PV049MF09IkRYR0lfRk9STUFUX1VOS05PV04iLHJbci5EWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVFlQRUxFU1M9MV09IkRYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVD0yXT0iRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIixyW3IuRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQ9M109IkRYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ9NF09IkRYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UIixyW3IuRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1RZUEVMRVNTPTVdPSJEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ9Nl09IkRYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCIscltyLkRYR0lfRk9STUFUX1IzMkczMkIzMl9VSU5UPTddPSJEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVCIscltyLkRYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UPThdPSJEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVCIscltyLkRYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUz05XT0iRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUPTEwXT0iRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUIixyW3IuRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNPTExXT0iRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ9MTJdPSJEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVCIscltyLkRYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STT0xM109IkRYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSIscltyLkRYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TSU5UPTE0XT0iRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQiLHJbci5EWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M9MTVdPSJEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ9MTZdPSJEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQiLHJbci5EWEdJX0ZPUk1BVF9SMzJHMzJfVUlOVD0xN109IkRYR0lfRk9STUFUX1IzMkczMl9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjMyRzMyX1NJTlQ9MThdPSJEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVCIscltyLkRYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTPTE5XT0iRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVD0yMF09IkRYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTPTIxXT0iRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ9MjJdPSJEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVCIscltyLkRYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTPTIzXT0iRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STT0yNF09IkRYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVUlOVD0yNV09IkRYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQiLHJbci5EWEdJX0ZPUk1BVF9SMTFHMTFCMTBfRkxPQVQ9MjZdPSJEWEdJX0ZPUk1BVF9SMTFHMTFCMTBfRkxPQVQiLHJbci5EWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUz0yN109IkRYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk09MjhdPSJEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSIscltyLkRYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I9MjldPSJEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STV9TUkdCIixyW3IuRFhHSV9GT1JNQVRfUjhHOEI4QThfVUlOVD0zMF09IkRYR0lfRk9STUFUX1I4RzhCOEE4X1VJTlQiLHJbci5EWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STT0zMV09IkRYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVD0zMl09IkRYR0lfRk9STUFUX1I4RzhCOEE4X1NJTlQiLHJbci5EWEdJX0ZPUk1BVF9SMTZHMTZfVFlQRUxFU1M9MzNdPSJEWEdJX0ZPUk1BVF9SMTZHMTZfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ9MzRdPSJEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQiLHJbci5EWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk09MzVdPSJEWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVD0zNl09IkRYR0lfRk9STUFUX1IxNkcxNl9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNPTM3XT0iRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ9MzhdPSJEWEdJX0ZPUk1BVF9SMTZHMTZfU0lOVCIscltyLkRYR0lfRk9STUFUX1IzMl9UWVBFTEVTUz0zOV09IkRYR0lfRk9STUFUX1IzMl9UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX0QzMl9GTE9BVD00MF09IkRYR0lfRk9STUFUX0QzMl9GTE9BVCIscltyLkRYR0lfRk9STUFUX1IzMl9GTE9BVD00MV09IkRYR0lfRk9STUFUX1IzMl9GTE9BVCIscltyLkRYR0lfRk9STUFUX1IzMl9VSU5UPTQyXT0iRFhHSV9GT1JNQVRfUjMyX1VJTlQiLHJbci5EWEdJX0ZPUk1BVF9SMzJfU0lOVD00M109IkRYR0lfRk9STUFUX1IzMl9TSU5UIixyW3IuRFhHSV9GT1JNQVRfUjI0RzhfVFlQRUxFU1M9NDRdPSJEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UPTQ1XT0iRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQiLHJbci5EWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M9NDZdPSJEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVD00N109IkRYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUz00OF09IkRYR0lfRk9STUFUX1I4RzhfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9SOEc4X1VOT1JNPTQ5XT0iRFhHSV9GT1JNQVRfUjhHOF9VTk9STSIscltyLkRYR0lfRk9STUFUX1I4RzhfVUlOVD01MF09IkRYR0lfRk9STUFUX1I4RzhfVUlOVCIscltyLkRYR0lfRk9STUFUX1I4RzhfU05PUk09NTFdPSJEWEdJX0ZPUk1BVF9SOEc4X1NOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjhHOF9TSU5UPTUyXT0iRFhHSV9GT1JNQVRfUjhHOF9TSU5UIixyW3IuRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTPTUzXT0iRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfUjE2X0ZMT0FUPTU0XT0iRFhHSV9GT1JNQVRfUjE2X0ZMT0FUIixyW3IuRFhHSV9GT1JNQVRfRDE2X1VOT1JNPTU1XT0iRFhHSV9GT1JNQVRfRDE2X1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjE2X1VOT1JNPTU2XT0iRFhHSV9GT1JNQVRfUjE2X1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfUjE2X1VJTlQ9NTddPSJEWEdJX0ZPUk1BVF9SMTZfVUlOVCIscltyLkRYR0lfRk9STUFUX1IxNl9TTk9STT01OF09IkRYR0lfRk9STUFUX1IxNl9TTk9STSIscltyLkRYR0lfRk9STUFUX1IxNl9TSU5UPTU5XT0iRFhHSV9GT1JNQVRfUjE2X1NJTlQiLHJbci5EWEdJX0ZPUk1BVF9SOF9UWVBFTEVTUz02MF09IkRYR0lfRk9STUFUX1I4X1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfUjhfVU5PUk09NjFdPSJEWEdJX0ZPUk1BVF9SOF9VTk9STSIscltyLkRYR0lfRk9STUFUX1I4X1VJTlQ9NjJdPSJEWEdJX0ZPUk1BVF9SOF9VSU5UIixyW3IuRFhHSV9GT1JNQVRfUjhfU05PUk09NjNdPSJEWEdJX0ZPUk1BVF9SOF9TTk9STSIscltyLkRYR0lfRk9STUFUX1I4X1NJTlQ9NjRdPSJEWEdJX0ZPUk1BVF9SOF9TSU5UIixyW3IuRFhHSV9GT1JNQVRfQThfVU5PUk09NjVdPSJEWEdJX0ZPUk1BVF9BOF9VTk9STSIscltyLkRYR0lfRk9STUFUX1IxX1VOT1JNPTY2XT0iRFhHSV9GT1JNQVRfUjFfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURFWFA9NjddPSJEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURFWFAiLHJbci5EWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk09NjhdPSJEWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk09NjldPSJEWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M9NzBdPSJEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9CQzFfVU5PUk09NzFdPSJEWEdJX0ZPUk1BVF9CQzFfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQj03Ml09IkRYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCIixyW3IuRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTPTczXT0iRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTIixyW3IuRFhHSV9GT1JNQVRfQkMyX1VOT1JNPTc0XT0iRFhHSV9GT1JNQVRfQkMyX1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I9NzVdPSJEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQiIscltyLkRYR0lfRk9STUFUX0JDM19UWVBFTEVTUz03Nl09IkRYR0lfRk9STUFUX0JDM19UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX0JDM19VTk9STT03N109IkRYR0lfRk9STUFUX0JDM19VTk9STSIscltyLkRYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCPTc4XT0iRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0IiLHJbci5EWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M9NzldPSJEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9CQzRfVU5PUk09ODBdPSJEWEdJX0ZPUk1BVF9CQzRfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzRfU05PUk09ODFdPSJEWEdJX0ZPUk1BVF9CQzRfU05PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M9ODJdPSJEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9CQzVfVU5PUk09ODNdPSJEWEdJX0ZPUk1BVF9CQzVfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzVfU05PUk09ODRdPSJEWEdJX0ZPUk1BVF9CQzVfU05PUk0iLHJbci5EWEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk09ODVdPSJEWEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CNUc1UjVBMV9VTk9STT04Nl09IkRYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk09ODddPSJEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSIscltyLkRYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNPTg4XT0iRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19BMl9VTk9STT04OV09IkRYR0lfRk9STUFUX1IxMEcxMEIxMF9YUl9CSUFTX0EyX1VOT1JNIixyW3IuRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M9OTBdPSJEWEdJX0ZPUk1BVF9COEc4UjhBOF9UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNX1NSR0I9OTFdPSJEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STV9TUkdCIixyW3IuRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M9OTJdPSJEWEdJX0ZPUk1BVF9COEc4UjhYOF9UWVBFTEVTUyIscltyLkRYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNX1NSR0I9OTNdPSJEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9STV9TUkdCIixyW3IuRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUz05NF09IkRYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9CQzZIX1VGMTY9OTVdPSJEWEdJX0ZPUk1BVF9CQzZIX1VGMTYiLHJbci5EWEdJX0ZPUk1BVF9CQzZIX1NGMTY9OTZdPSJEWEdJX0ZPUk1BVF9CQzZIX1NGMTYiLHJbci5EWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M9OTddPSJEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1MiLHJbci5EWEdJX0ZPUk1BVF9CQzdfVU5PUk09OThdPSJEWEdJX0ZPUk1BVF9CQzdfVU5PUk0iLHJbci5EWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQj05OV09IkRYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCIixyW3IuRFhHSV9GT1JNQVRfQVlVVj0xMDBdPSJEWEdJX0ZPUk1BVF9BWVVWIixyW3IuRFhHSV9GT1JNQVRfWTQxMD0xMDFdPSJEWEdJX0ZPUk1BVF9ZNDEwIixyW3IuRFhHSV9GT1JNQVRfWTQxNj0xMDJdPSJEWEdJX0ZPUk1BVF9ZNDE2IixyW3IuRFhHSV9GT1JNQVRfTlYxMj0xMDNdPSJEWEdJX0ZPUk1BVF9OVjEyIixyW3IuRFhHSV9GT1JNQVRfUDAxMD0xMDRdPSJEWEdJX0ZPUk1BVF9QMDEwIixyW3IuRFhHSV9GT1JNQVRfUDAxNj0xMDVdPSJEWEdJX0ZPUk1BVF9QMDE2IixyW3IuRFhHSV9GT1JNQVRfNDIwX09QQVFVRT0xMDZdPSJEWEdJX0ZPUk1BVF80MjBfT1BBUVVFIixyW3IuRFhHSV9GT1JNQVRfWVVZMj0xMDddPSJEWEdJX0ZPUk1BVF9ZVVkyIixyW3IuRFhHSV9GT1JNQVRfWTIxMD0xMDhdPSJEWEdJX0ZPUk1BVF9ZMjEwIixyW3IuRFhHSV9GT1JNQVRfWTIxNj0xMDldPSJEWEdJX0ZPUk1BVF9ZMjE2IixyW3IuRFhHSV9GT1JNQVRfTlYxMT0xMTBdPSJEWEdJX0ZPUk1BVF9OVjExIixyW3IuRFhHSV9GT1JNQVRfQUk0ND0xMTFdPSJEWEdJX0ZPUk1BVF9BSTQ0IixyW3IuRFhHSV9GT1JNQVRfSUE0ND0xMTJdPSJEWEdJX0ZPUk1BVF9JQTQ0IixyW3IuRFhHSV9GT1JNQVRfUDg9MTEzXT0iRFhHSV9GT1JNQVRfUDgiLHJbci5EWEdJX0ZPUk1BVF9BOFA4PTExNF09IkRYR0lfRk9STUFUX0E4UDgiLHJbci5EWEdJX0ZPUk1BVF9CNEc0UjRBNF9VTk9STT0xMTVdPSJEWEdJX0ZPUk1BVF9CNEc0UjRBNF9VTk9STSIscltyLkRYR0lfRk9STUFUX1AyMDg9MTE2XT0iRFhHSV9GT1JNQVRfUDIwOCIscltyLkRYR0lfRk9STUFUX1YyMDg9MTE3XT0iRFhHSV9GT1JNQVRfVjIwOCIscltyLkRYR0lfRk9STUFUX1Y0MDg9MTE4XT0iRFhHSV9GT1JNQVRfVjQwOCIscltyLkRYR0lfRk9STUFUX1NBTVBMRVJfRkVFREJBQ0tfTUlOX01JUF9PUEFRVUU9MTE5XT0iRFhHSV9GT1JNQVRfU0FNUExFUl9GRUVEQkFDS19NSU5fTUlQX09QQVFVRSIscltyLkRYR0lfRk9STUFUX1NBTVBMRVJfRkVFREJBQ0tfTUlQX1JFR0lPTl9VU0VEX09QQVFVRT0xMjBdPSJEWEdJX0ZPUk1BVF9TQU1QTEVSX0ZFRURCQUNLX01JUF9SRUdJT05fVVNFRF9PUEFRVUUiLHJbci5EWEdJX0ZPUk1BVF9GT1JDRV9VSU5UPTEyMV09IkRYR0lfRk9STUFUX0ZPUkNFX1VJTlQifSkoRHR8fChEdD17fSkpO3ZhciAkaTsoZnVuY3Rpb24ocil7cltyLkREU19ESU1FTlNJT05fVEVYVFVSRTFEPTJdPSJERFNfRElNRU5TSU9OX1RFWFRVUkUxRCIscltyLkREU19ESU1FTlNJT05fVEVYVFVSRTJEPTNdPSJERFNfRElNRU5TSU9OX1RFWFRVUkUyRCIscltyLkREU19ESU1FTlNJT05fVEVYVFVSRTNEPTZdPSJERFNfRElNRU5TSU9OX1RFWFRVUkUzRCJ9KSgkaXx8KCRpPXt9KSk7dmFyIHFjPTEsJGM9MixLYz00LFpjPTY0LEpjPTUxMixRYz0xMzEwNzIsdGQ9ODI3NjExMjA0LGVkPTg2MTE2NTYzNixyZD04OTQ3MjAwNjgsaWQ9ODA4NTQwMjI4LG5kPTQsYWQ9KEtlPXt9LEtlW3RkXT1VLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULEtlW2VkXT1VLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhULEtlW3JkXT1VLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhULEtlKSxzZD0oTXQ9e30sTXRbRHQuRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTXT1VLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULE10W0R0LkRYR0lfRk9STUFUX0JDMV9VTk9STV09VS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCxNdFtEdC5EWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1NdPVUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQsTXRbRHQuRFhHSV9GT1JNQVRfQkMyX1VOT1JNXT1VLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhULE10W0R0LkRYR0lfRk9STUFUX0JDM19UWVBFTEVTU109VS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCxNdFtEdC5EWEdJX0ZPUk1BVF9CQzNfVU5PUk1dPVUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQsTXRbRHQuRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0JdPVUuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQsTXRbRHQuRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0JdPVUuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQsTXRbRHQuRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0JdPVUuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFQsTXQpO2Z1bmN0aW9uIG9kKHIpe3ZhciBlPW5ldyBVaW50MzJBcnJheShyKSx0PWVbMF07aWYodCE9PXpjKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBERFMgZmlsZSBtYWdpYyB3b3JkIik7dmFyIGk9bmV3IFVpbnQzMkFycmF5KHIsMCxVci9VaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksbj1pW0dyLkhFSUdIVF0sYT1pW0dyLldJRFRIXSxzPWlbR3IuTUlQTUFQX0NPVU5UXSxvPW5ldyBVaW50MzJBcnJheShyLEdyLlBJWEVMX0ZPUk1BVCpVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxZYy9VaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksaD1vW3FjXTtpZihoJktjKXt2YXIgdT1vW1djLkZPVVJDQ107aWYodSE9PWlkKXt2YXIgbD1hZFt1XSxjPXFpK1VyLGY9bmV3IFVpbnQ4QXJyYXkocixjKSxkPW5ldyBXaShmLHtmb3JtYXQ6bCx3aWR0aDphLGhlaWdodDpuLGxldmVsczpzfSk7cmV0dXJuW2RdfXZhciBwPXFpK1VyLHY9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLHAsZXMvVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpLF89dltrci5EWEdJX0ZPUk1BVF0sbT12W2tyLlJFU09VUkNFX0RJTUVOU0lPTl0sZz12W2tyLk1JU0NfRkxBR10seT12W2tyLkFSUkFZX1NJWkVdLFQ9c2RbX107aWYoVD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkREU1BhcnNlciBjYW5ub3QgcGFyc2UgdGV4dHVyZSBkYXRhIHdpdGggRFhHSSBmb3JtYXQgIitfKTtpZihnPT09bmQpdGhyb3cgbmV3IEVycm9yKCJERFNQYXJzZXIgZG9lcyBub3Qgc3VwcG9ydCBjdWJlbWFwIHRleHR1cmVzIik7aWYobT09PSRpLkREU19ESU1FTlNJT05fVEVYVFVSRTNEKXRocm93IG5ldyBFcnJvcigiRERTUGFyc2VyIGRvZXMgbm90IHN1cHBvcnRlZCAzRCB0ZXh0dXJlIGRhdGEiKTt2YXIgeD1uZXcgQXJyYXksYj1xaStVcitlcztpZih5PT09MSl4LnB1c2gobmV3IFVpbnQ4QXJyYXkocixiKSk7ZWxzZXtmb3IodmFyIEU9THJbVF0sQT0wLHc9YSxTPW4sRD0wO0Q8cztEKyspe3ZhciBCPU1hdGgubWF4KDEsdyszJi00KSxHPU1hdGgubWF4KDEsUyszJi00KSxaPUIqRypFO0ErPVosdz13Pj4+MSxTPVM+Pj4xfWZvcih2YXIgTT1iLEQ9MDtEPHk7RCsrKXgucHVzaChuZXcgVWludDhBcnJheShyLE0sQSkpLE0rPUF9cmV0dXJuIHgubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBuZXcgV2koTyx7Zm9ybWF0OlQsd2lkdGg6YSxoZWlnaHQ6bixsZXZlbHM6c30pfSl9dGhyb3cgaCZaYz9uZXcgRXJyb3IoIkREU1BhcnNlciBkb2VzIG5vdCBzdXBwb3J0IHVuY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEuIik6aCZKYz9uZXcgRXJyb3IoIkREU1BhcnNlciBkb2VzIG5vdCBzdXBwb3J0ZWQgWVVWIHVuY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEuIik6aCZRYz9uZXcgRXJyb3IoIkREU1BhcnNlciBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1jaGFubmVsIChsdW1uaW5hbmNlKSB0ZXh0dXJlIGRhdGEhIik6aCYkYz9uZXcgRXJyb3IoIkREU1BhcnNlciBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1jaGFubmVsIChhbHBoYSkgdGV4dHVyZSBkYXRhISIpOm5ldyBFcnJvcigiRERTUGFyc2VyIGZhaWxlZCB0byBsb2FkIGEgdGV4dHVyZSBmaWxlIGR1ZSB0byBhbiB1bmtub3duIHJlYXNvbiEiKX12YXIgdGUsJHQsWmUscnM9WzE3MSw3NSw4NCw4OCwzMiw0OSw0OSwxODcsMTMsMTAsMjYsMTBdLGhkPTY3MzA1OTg1LEZ0PXtGSUxFX0lERU5USUZJRVI6MCxFTkRJQU5ORVNTOjEyLEdMX1RZUEU6MTYsR0xfVFlQRV9TSVpFOjIwLEdMX0ZPUk1BVDoyNCxHTF9JTlRFUk5BTF9GT1JNQVQ6MjgsR0xfQkFTRV9JTlRFUk5BTF9GT1JNQVQ6MzIsUElYRUxfV0lEVEg6MzYsUElYRUxfSEVJR0hUOjQwLFBJWEVMX0RFUFRIOjQ0LE5VTUJFUl9PRl9BUlJBWV9FTEVNRU5UUzo0OCxOVU1CRVJfT0ZfRkFDRVM6NTIsTlVNQkVSX09GX01JUE1BUF9MRVZFTFM6NTYsQllURVNfT0ZfS0VZX1ZBTFVFX0RBVEE6NjB9LEtpPTY0LGlzPSh0ZT17fSx0ZVtGLlVOU0lHTkVEX0JZVEVdPTEsdGVbRi5VTlNJR05FRF9TSE9SVF09Mix0ZVtGLklOVF09NCx0ZVtGLlVOU0lHTkVEX0lOVF09NCx0ZVtGLkZMT0FUXT00LHRlW0YuSEFMRl9GTE9BVF09OCx0ZSksdWQ9KCR0PXt9LCR0W1IuUkdCQV09NCwkdFtSLlJHQl09MywkdFtSLlJHXT0yLCR0W1IuUkVEXT0xLCR0W1IuTFVNSU5BTkNFXT0xLCR0W1IuTFVNSU5BTkNFX0FMUEhBXT0yLCR0W1IuQUxQSEFdPTEsJHQpLGxkPShaZT17fSxaZVtGLlVOU0lHTkVEX1NIT1JUXzRfNF80XzRdPTIsWmVbRi5VTlNJR05FRF9TSE9SVF81XzVfNV8xXT0yLFplW0YuVU5TSUdORURfU0hPUlRfNV82XzVdPTIsWmUpO2Z1bmN0aW9uIGZkKHIsZSx0KXt0PT09dm9pZCAwJiYodD0hMSk7dmFyIGk9bmV3IERhdGFWaWV3KGUpO2lmKCFjZChyLGkpKXJldHVybiBudWxsO3ZhciBuPWkuZ2V0VWludDMyKEZ0LkVORElBTk5FU1MsITApPT09aGQsYT1pLmdldFVpbnQzMihGdC5HTF9UWVBFLG4pLHM9aS5nZXRVaW50MzIoRnQuR0xfRk9STUFULG4pLG89aS5nZXRVaW50MzIoRnQuR0xfSU5URVJOQUxfRk9STUFULG4pLGg9aS5nZXRVaW50MzIoRnQuUElYRUxfV0lEVEgsbiksdT1pLmdldFVpbnQzMihGdC5QSVhFTF9IRUlHSFQsbil8fDEsbD1pLmdldFVpbnQzMihGdC5QSVhFTF9ERVBUSCxuKXx8MSxjPWkuZ2V0VWludDMyKEZ0Lk5VTUJFUl9PRl9BUlJBWV9FTEVNRU5UUyxuKXx8MSxmPWkuZ2V0VWludDMyKEZ0Lk5VTUJFUl9PRl9GQUNFUyxuKSxkPWkuZ2V0VWludDMyKEZ0Lk5VTUJFUl9PRl9NSVBNQVBfTEVWRUxTLG4pLHA9aS5nZXRVaW50MzIoRnQuQllURVNfT0ZfS0VZX1ZBTFVFX0RBVEEsbik7aWYodT09PTB8fGwhPT0xKXRocm93IG5ldyBFcnJvcigiT25seSAyRCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkIik7aWYoZiE9PTEpdGhyb3cgbmV3IEVycm9yKCJDdWJlVGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgS1RYTG9hZGVyIHlldCEiKTtpZihjIT09MSl0aHJvdyBuZXcgRXJyb3IoIldlYkdMIGRvZXMgbm90IHN1cHBvcnQgYXJyYXkgdGV4dHVyZXMiKTt2YXIgdj00LF89NCxtPWgrMyYtNCxnPXUrMyYtNCx5PW5ldyBBcnJheShjKSxUPWgqdTthPT09MCYmKFQ9bSpnKTt2YXIgeDtpZihhIT09MD9pc1thXT94PWlzW2FdKnVkW3NdOng9bGRbYV06eD1McltvXSx4PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBpeGVsIGZvcm1hdCBzdG9yZWQgaW4gdGhlICoua3R4IGZpbGUhIik7Zm9yKHZhciBiPXQ/cGQoaSxwLG4pOm51bGwsRT1UKngsQT1FLHc9aCxTPXUsRD1tLEI9ZyxHPUtpK3AsWj0wO1o8ZDtaKyspe2Zvcih2YXIgTT1pLmdldFVpbnQzMihHLG4pLE89Rys0LGs9MDtrPGM7aysrKXt2YXIgZ3Q9eVtrXTtndHx8KGd0PXlba109bmV3IEFycmF5KGQpKSxndFtaXT17bGV2ZWxJRDpaLGxldmVsV2lkdGg6ZD4xfHxhIT09MD93OkQsbGV2ZWxIZWlnaHQ6ZD4xfHxhIT09MD9TOkIsbGV2ZWxCdWZmZXI6bmV3IFVpbnQ4QXJyYXkoZSxPLEEpfSxPKz1BfUcrPU0rNCxHPUclNCE9PTA/Rys0LUclNDpHLHc9dz4+MXx8MSxTPVM+PjF8fDEsRD13K3YtMSZ+KHYtMSksQj1TK18tMSZ+KF8tMSksQT1EKkIqeH1yZXR1cm4gYSE9PTA/e3VuY29tcHJlc3NlZDp5Lm1hcChmdW5jdGlvbihZKXt2YXIgQz1ZWzBdLmxldmVsQnVmZmVyLFA9ITE7cmV0dXJuIGE9PT1GLkZMT0FUP0M9bmV3IEZsb2F0MzJBcnJheShZWzBdLmxldmVsQnVmZmVyLmJ1ZmZlcixZWzBdLmxldmVsQnVmZmVyLmJ5dGVPZmZzZXQsWVswXS5sZXZlbEJ1ZmZlci5ieXRlTGVuZ3RoLzQpOmE9PT1GLlVOU0lHTkVEX0lOVD8oUD0hMCxDPW5ldyBVaW50MzJBcnJheShZWzBdLmxldmVsQnVmZmVyLmJ1ZmZlcixZWzBdLmxldmVsQnVmZmVyLmJ5dGVPZmZzZXQsWVswXS5sZXZlbEJ1ZmZlci5ieXRlTGVuZ3RoLzQpKTphPT09Ri5JTlQmJihQPSEwLEM9bmV3IEludDMyQXJyYXkoWVswXS5sZXZlbEJ1ZmZlci5idWZmZXIsWVswXS5sZXZlbEJ1ZmZlci5ieXRlT2Zmc2V0LFlbMF0ubGV2ZWxCdWZmZXIuYnl0ZUxlbmd0aC80KSkse3Jlc291cmNlOm5ldyBWZShDLHt3aWR0aDpZWzBdLmxldmVsV2lkdGgsaGVpZ2h0OllbMF0ubGV2ZWxIZWlnaHR9KSx0eXBlOmEsZm9ybWF0OlA/ZGQocyk6c319KSxrdkRhdGE6Yn06e2NvbXByZXNzZWQ6eS5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBXaShudWxsLHtmb3JtYXQ6byx3aWR0aDpoLGhlaWdodDp1LGxldmVsczpkLGxldmVsQnVmZmVyczpZfSl9KSxrdkRhdGE6Yn19ZnVuY3Rpb24gY2QocixlKXtmb3IodmFyIHQ9MDt0PHJzLmxlbmd0aDt0KyspaWYoZS5nZXRVaW50OCh0KSE9PXJzW3RdKXJldHVybiBjb25zb2xlLmVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCAqLmt0eCBmaWxlISIpLCExO3JldHVybiEwfWZ1bmN0aW9uIGRkKHIpe3N3aXRjaChyKXtjYXNlIFIuUkdCQTpyZXR1cm4gUi5SR0JBX0lOVEVHRVI7Y2FzZSBSLlJHQjpyZXR1cm4gUi5SR0JfSU5URUdFUjtjYXNlIFIuUkc6cmV0dXJuIFIuUkdfSU5URUdFUjtjYXNlIFIuUkVEOnJldHVybiBSLlJFRF9JTlRFR0VSO2RlZmF1bHQ6cmV0dXJuIHJ9fWZ1bmN0aW9uIHBkKHIsZSx0KXtmb3IodmFyIGk9bmV3IE1hcCxuPTA7bjxlOyl7dmFyIGE9ci5nZXRVaW50MzIoS2krbix0KSxzPUtpK24rNCxvPTMtKGErMyklNDtpZihhPT09MHx8YT5lLW4pe2NvbnNvbGUuZXJyb3IoIktUWExvYWRlcjoga2V5QW5kVmFsdWVCeXRlU2l6ZSBvdXQgb2YgYm91bmRzIik7YnJlYWt9Zm9yKHZhciBoPTA7aDxhJiZyLmdldFVpbnQ4KHMraCkhPT0wO2grKyk7aWYoaD09PS0xKXtjb25zb2xlLmVycm9yKCJLVFhMb2FkZXI6IEZhaWxlZCB0byBmaW5kIG51bGwgYnl0ZSB0ZXJtaW5hdGluZyBrdkRhdGEga2V5Iik7YnJlYWt9dmFyIHU9bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuYnVmZmVyLHMsaCkpLGw9bmV3IERhdGFWaWV3KHIuYnVmZmVyLHMraCsxLGEtaC0xKTtpLnNldCh1LGwpLG4rPTQrYStvfXJldHVybiBpfXV0LnNldEV4dGVuc2lvblhoclR5cGUoImRkcyIsdXQuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSKTt2YXIgdmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnVzZT1mdW5jdGlvbihlLHQpe2lmKGUuZXh0ZW5zaW9uPT09ImRkcyImJmUuZGF0YSl0cnl7T2JqZWN0LmFzc2lnbihlLHRzKGUubmFtZXx8ZS51cmwsb2QoZS5kYXRhKSxlLm1ldGFkYXRhKSl9Y2F0Y2goaSl7dChpKTtyZXR1cm59dCgpfSxyLmV4dGVuc2lvbj1LLkxvYWRlcixyfSgpO3V0LnNldEV4dGVuc2lvblhoclR5cGUoImt0eCIsdXQuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSKTt2YXIgX2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnVzZT1mdW5jdGlvbihlLHQpe2lmKGUuZXh0ZW5zaW9uPT09Imt0eCImJmUuZGF0YSl0cnl7dmFyIGk9ZS5uYW1lfHxlLnVybCxuPWZkKGksZS5kYXRhLHRoaXMubG9hZEtleVZhbHVlRGF0YSksYT1uLmNvbXByZXNzZWQscz1uLnVuY29tcHJlc3NlZCxvPW4ua3ZEYXRhO2lmKGEpe3ZhciBoPXRzKGksYSxlLm1ldGFkYXRhKTtpZihvJiZoLnRleHR1cmVzKWZvcih2YXIgdSBpbiBoLnRleHR1cmVzKWgudGV4dHVyZXNbdV0uYmFzZVRleHR1cmUua3R4S2V5VmFsdWVEYXRhPW87T2JqZWN0LmFzc2lnbihlLGgpfWVsc2UgaWYocyl7dmFyIGw9e307cy5mb3JFYWNoKGZ1bmN0aW9uKGMsZil7dmFyIGQ9bmV3IEwobmV3IGooYy5yZXNvdXJjZSx7bWlwbWFwOlJ0Lk9GRixhbHBoYU1vZGU6QXQuTk9fUFJFTVVMVElQTElFRF9BTFBIQSx0eXBlOmMudHlwZSxmb3JtYXQ6Yy5mb3JtYXR9KSkscD1pKyItIisoZisxKTtvJiYoZC5iYXNlVGV4dHVyZS5rdHhLZXlWYWx1ZURhdGE9byksai5hZGRUb0NhY2hlKGQuYmFzZVRleHR1cmUscCksTC5hZGRUb0NhY2hlKGQscCksZj09PTAmJihsW2ldPWQsai5hZGRUb0NhY2hlKGQuYmFzZVRleHR1cmUsaSksTC5hZGRUb0NhY2hlKGQsaSkpLGxbcF09ZH0pLE9iamVjdC5hc3NpZ24oZSx7dGV4dHVyZXM6bH0pfX1jYXRjaChjKXt0KGMpO3JldHVybn10KCl9LHIuZXh0ZW5zaW9uPUsuTG9hZGVyLHIubG9hZEtleVZhbHVlRGF0YT0hMSxyfSgpO3ZhciBaaT1mdW5jdGlvbihyLGUpe3JldHVybiBaaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sWmkocixlKX07ZnVuY3Rpb24gbnMocixlKXtaaShyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfShmdW5jdGlvbihyKXtucyhlLHIpO2Z1bmN0aW9uIGUodCxpLG4sYSl7dD09PXZvaWQgMCYmKHQ9MTUwMCksbj09PXZvaWQgMCYmKG49MTYzODQpLGE9PT12b2lkIDAmJihhPSExKTt2YXIgcz1yLmNhbGwodGhpcyl8fHRoaXMsbz0xNjM4NDtyZXR1cm4gbj5vJiYobj1vKSxzLl9wcm9wZXJ0aWVzPVshMSwhMCwhMSwhMSwhMV0scy5fbWF4U2l6ZT10LHMuX2JhdGNoU2l6ZT1uLHMuX2J1ZmZlcnM9bnVsbCxzLl9idWZmZXJVcGRhdGVJRHM9W10scy5fdXBkYXRlSUQ9MCxzLmludGVyYWN0aXZlQ2hpbGRyZW49ITEscy5ibGVuZE1vZGU9Ti5OT1JNQUwscy5hdXRvUmVzaXplPWEscy5yb3VuZFBpeGVscz0hMCxzLmJhc2VUZXh0dXJlPW51bGwscy5zZXRQcm9wZXJ0aWVzKGkpLHMuX3RpbnQ9MCxzLnRpbnRSZ2I9bmV3IEZsb2F0MzJBcnJheSg0KSxzLnRpbnQ9MTY3NzcyMTUsc31yZXR1cm4gZS5wcm90b3R5cGUuc2V0UHJvcGVydGllcz1mdW5jdGlvbih0KXt0JiYodGhpcy5fcHJvcGVydGllc1swXT0idmVydGljZXMiaW4gdHx8InNjYWxlImluIHQ/ISF0LnZlcnRpY2VzfHwhIXQuc2NhbGU6dGhpcy5fcHJvcGVydGllc1swXSx0aGlzLl9wcm9wZXJ0aWVzWzFdPSJwb3NpdGlvbiJpbiB0PyEhdC5wb3NpdGlvbjp0aGlzLl9wcm9wZXJ0aWVzWzFdLHRoaXMuX3Byb3BlcnRpZXNbMl09InJvdGF0aW9uImluIHQ/ISF0LnJvdGF0aW9uOnRoaXMuX3Byb3BlcnRpZXNbMl0sdGhpcy5fcHJvcGVydGllc1szXT0idXZzImluIHQ/ISF0LnV2czp0aGlzLl9wcm9wZXJ0aWVzWzNdLHRoaXMuX3Byb3BlcnRpZXNbNF09InRpbnQiaW4gdHx8ImFscGhhImluIHQ/ISF0LnRpbnR8fCEhdC5hbHBoYTp0aGlzLl9wcm9wZXJ0aWVzWzRdKX0sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGludCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdGludD10LHdlKHQsdGhpcy50aW50UmdiKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGk9dGhpczshdGhpcy52aXNpYmxlfHx0aGlzLndvcmxkQWxwaGE8PTB8fCF0aGlzLmNoaWxkcmVuLmxlbmd0aHx8IXRoaXMucmVuZGVyYWJsZXx8KHRoaXMuYmFzZVRleHR1cmV8fCh0aGlzLmJhc2VUZXh0dXJlPXRoaXMuY2hpbGRyZW5bMF0uX3RleHR1cmUuYmFzZVRleHR1cmUsdGhpcy5iYXNlVGV4dHVyZS52YWxpZHx8dGhpcy5iYXNlVGV4dHVyZS5vbmNlKCJ1cGRhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DaGlsZHJlbkNoYW5nZSgwKX0pKSx0LmJhdGNoLnNldE9iamVjdFJlbmRlcmVyKHQucGx1Z2lucy5wYXJ0aWNsZSksdC5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlcih0aGlzKSl9LGUucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBpPU1hdGguZmxvb3IodC90aGlzLl9iYXRjaFNpemUpO3RoaXMuX2J1ZmZlclVwZGF0ZUlEcy5sZW5ndGg8aTspdGhpcy5fYnVmZmVyVXBkYXRlSURzLnB1c2goMCk7dGhpcy5fYnVmZmVyVXBkYXRlSURzW2ldPSsrdGhpcy5fdXBkYXRlSUR9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9idWZmZXJzKXtmb3IodmFyIHQ9MDt0PHRoaXMuX2J1ZmZlcnMubGVuZ3RoOysrdCl0aGlzLl9idWZmZXJzW3RdLmRlc3Ryb3koKTt0aGlzLl9idWZmZXJzPW51bGx9fSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3IucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLHQpLHRoaXMuZGlzcG9zZSgpLHRoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9idWZmZXJzPW51bGwsdGhpcy5fYnVmZmVyVXBkYXRlSURzPW51bGx9LGV9KShYdCk7dmFyIGFzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSl7dGhpcy5nZW9tZXRyeT1uZXcgWWUsdGhpcy5pbmRleEJ1ZmZlcj1udWxsLHRoaXMuc2l6ZT1pLHRoaXMuZHluYW1pY1Byb3BlcnRpZXM9W10sdGhpcy5zdGF0aWNQcm9wZXJ0aWVzPVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgYT1lW25dO2E9e2F0dHJpYnV0ZU5hbWU6YS5hdHRyaWJ1dGVOYW1lLHNpemU6YS5zaXplLHVwbG9hZEZ1bmN0aW9uOmEudXBsb2FkRnVuY3Rpb24sdHlwZTphLnR5cGV8fEYuRkxPQVQsb2Zmc2V0OmEub2Zmc2V0fSx0W25dP3RoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChhKTp0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChhKX10aGlzLnN0YXRpY1N0cmlkZT0wLHRoaXMuc3RhdGljQnVmZmVyPW51bGwsdGhpcy5zdGF0aWNEYXRhPW51bGwsdGhpcy5zdGF0aWNEYXRhVWludDMyPW51bGwsdGhpcy5keW5hbWljU3RyaWRlPTAsdGhpcy5keW5hbWljQnVmZmVyPW51bGwsdGhpcy5keW5hbWljRGF0YT1udWxsLHRoaXMuZHluYW1pY0RhdGFVaW50MzI9bnVsbCx0aGlzLl91cGRhdGVJRD0wLHRoaXMuaW5pdEJ1ZmZlcnMoKX1yZXR1cm4gci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdlb21ldHJ5LHQ9MDt0aGlzLmluZGV4QnVmZmVyPW5ldyBfdChSbCh0aGlzLnNpemUpLCEwLCEwKSxlLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpLHRoaXMuZHluYW1pY1N0cmlkZT0wO2Zvcih2YXIgaT0wO2k8dGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7KytpKXt2YXIgbj10aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO24ub2Zmc2V0PXQsdCs9bi5zaXplLHRoaXMuZHluYW1pY1N0cmlkZSs9bi5zaXplfXZhciBhPW5ldyBBcnJheUJ1ZmZlcih0aGlzLnNpemUqdGhpcy5keW5hbWljU3RyaWRlKjQqNCk7dGhpcy5keW5hbWljRGF0YT1uZXcgRmxvYXQzMkFycmF5KGEpLHRoaXMuZHluYW1pY0RhdGFVaW50MzI9bmV3IFVpbnQzMkFycmF5KGEpLHRoaXMuZHluYW1pY0J1ZmZlcj1uZXcgX3QodGhpcy5keW5hbWljRGF0YSwhMSwhMSk7dmFyIHM9MDt0aGlzLnN0YXRpY1N0cmlkZT0wO2Zvcih2YXIgaT0wO2k8dGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsrK2kpe3ZhciBuPXRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtuLm9mZnNldD1zLHMrPW4uc2l6ZSx0aGlzLnN0YXRpY1N0cmlkZSs9bi5zaXplfXZhciBvPW5ldyBBcnJheUJ1ZmZlcih0aGlzLnNpemUqdGhpcy5zdGF0aWNTdHJpZGUqNCo0KTt0aGlzLnN0YXRpY0RhdGE9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLnN0YXRpY0RhdGFVaW50MzI9bmV3IFVpbnQzMkFycmF5KG8pLHRoaXMuc3RhdGljQnVmZmVyPW5ldyBfdCh0aGlzLnN0YXRpY0RhdGEsITAsITEpO2Zvcih2YXIgaT0wO2k8dGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7KytpKXt2YXIgbj10aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO2UuYWRkQXR0cmlidXRlKG4uYXR0cmlidXRlTmFtZSx0aGlzLmR5bmFtaWNCdWZmZXIsMCxuLnR5cGU9PT1GLlVOU0lHTkVEX0JZVEUsbi50eXBlLHRoaXMuZHluYW1pY1N0cmlkZSo0LG4ub2Zmc2V0KjQpfWZvcih2YXIgaT0wO2k8dGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsrK2kpe3ZhciBuPXRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtlLmFkZEF0dHJpYnV0ZShuLmF0dHJpYnV0ZU5hbWUsdGhpcy5zdGF0aWNCdWZmZXIsMCxuLnR5cGU9PT1GLlVOU0lHTkVEX0JZVEUsbi50eXBlLHRoaXMuc3RhdGljU3RyaWRlKjQsbi5vZmZzZXQqNCl9fSxyLnByb3RvdHlwZS51cGxvYWREeW5hbWljPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIG49MDtuPHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGE9dGhpcy5keW5hbWljUHJvcGVydGllc1tuXTthLnVwbG9hZEZ1bmN0aW9uKGUsdCxpLGEudHlwZT09PUYuVU5TSUdORURfQllURT90aGlzLmR5bmFtaWNEYXRhVWludDMyOnRoaXMuZHluYW1pY0RhdGEsdGhpcy5keW5hbWljU3RyaWRlLGEub2Zmc2V0KX10aGlzLmR5bmFtaWNCdWZmZXIuX3VwZGF0ZUlEKyt9LHIucHJvdG90eXBlLnVwbG9hZFN0YXRpYz1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPTA7bjx0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGE9dGhpcy5zdGF0aWNQcm9wZXJ0aWVzW25dO2EudXBsb2FkRnVuY3Rpb24oZSx0LGksYS50eXBlPT09Ri5VTlNJR05FRF9CWVRFP3RoaXMuc3RhdGljRGF0YVVpbnQzMjp0aGlzLnN0YXRpY0RhdGEsdGhpcy5zdGF0aWNTdHJpZGUsYS5vZmZzZXQpfXRoaXMuc3RhdGljQnVmZmVyLl91cGRhdGVJRCsrfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5pbmRleEJ1ZmZlcj1udWxsLHRoaXMuZHluYW1pY1Byb3BlcnRpZXM9bnVsbCx0aGlzLmR5bmFtaWNCdWZmZXI9bnVsbCx0aGlzLmR5bmFtaWNEYXRhPW51bGwsdGhpcy5keW5hbWljRGF0YVVpbnQzMj1udWxsLHRoaXMuc3RhdGljUHJvcGVydGllcz1udWxsLHRoaXMuc3RhdGljQnVmZmVyPW51bGwsdGhpcy5zdGF0aWNEYXRhPW51bGwsdGhpcy5zdGF0aWNEYXRhVWludDMyPW51bGwsdGhpcy5nZW9tZXRyeS5kZXN0cm95KCl9LHJ9KCksbWQ9YHZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwp2YXJ5aW5nIHZlYzQgdkNvbG9yOwoKdW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7Cgp2b2lkIG1haW4odm9pZCl7CiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvcjsKICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9YCxnZD1gYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOwphdHRyaWJ1dGUgdmVjNCBhQ29sb3I7CgphdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsKYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsKCnVuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsKdW5pZm9ybSB2ZWM0IHVDb2xvcjsKCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwp2YXJ5aW5nIHZlYzQgdkNvbG9yOwoKdm9pZCBtYWluKHZvaWQpewogICAgZmxvYXQgeCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsKICAgIGZsb2F0IHkgPSAoYVZlcnRleFBvc2l0aW9uLngpICogc2luKGFSb3RhdGlvbikgKyAoYVZlcnRleFBvc2l0aW9uLnkpICogY29zKGFSb3RhdGlvbik7CgogICAgdmVjMiB2ID0gdmVjMih4LCB5KTsKICAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7CgogICAgZ2xfUG9zaXRpb24gPSB2ZWM0KCh0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsKCiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsKICAgIHZDb2xvciA9IGFDb2xvciAqIHVDb2xvcjsKfQpgLHlkPWZ1bmN0aW9uKHIpe25zKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaT1yLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gaS5zaGFkZXI9bnVsbCxpLnByb3BlcnRpZXM9bnVsbCxpLnRlbXBNYXRyaXg9bmV3IHZ0LGkucHJvcGVydGllcz1be2F0dHJpYnV0ZU5hbWU6ImFWZXJ0ZXhQb3NpdGlvbiIsc2l6ZToyLHVwbG9hZEZ1bmN0aW9uOmkudXBsb2FkVmVydGljZXMsb2Zmc2V0OjB9LHthdHRyaWJ1dGVOYW1lOiJhUG9zaXRpb25Db29yZCIsc2l6ZToyLHVwbG9hZEZ1bmN0aW9uOmkudXBsb2FkUG9zaXRpb24sb2Zmc2V0OjB9LHthdHRyaWJ1dGVOYW1lOiJhUm90YXRpb24iLHNpemU6MSx1cGxvYWRGdW5jdGlvbjppLnVwbG9hZFJvdGF0aW9uLG9mZnNldDowfSx7YXR0cmlidXRlTmFtZToiYVRleHR1cmVDb29yZCIsc2l6ZToyLHVwbG9hZEZ1bmN0aW9uOmkudXBsb2FkVXZzLG9mZnNldDowfSx7YXR0cmlidXRlTmFtZToiYUNvbG9yIixzaXplOjEsdHlwZTpGLlVOU0lHTkVEX0JZVEUsdXBsb2FkRnVuY3Rpb246aS51cGxvYWRUaW50LG9mZnNldDowfV0saS5zaGFkZXI9SnQuZnJvbShnZCxtZCx7fSksaS5zdGF0ZT1kZS5mb3IyZCgpLGl9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbih0KXt2YXIgaT10LmNoaWxkcmVuLG49dC5fbWF4U2l6ZSxhPXQuX2JhdGNoU2l6ZSxzPXRoaXMucmVuZGVyZXIsbz1pLmxlbmd0aDtpZihvIT09MCl7bz5uJiYhdC5hdXRvUmVzaXplJiYobz1uKTt2YXIgaD10Ll9idWZmZXJzO2h8fChoPXQuX2J1ZmZlcnM9dGhpcy5nZW5lcmF0ZUJ1ZmZlcnModCkpO3ZhciB1PWlbMF0uX3RleHR1cmUuYmFzZVRleHR1cmUsbD11LmFscGhhTW9kZT4wO3RoaXMuc3RhdGUuYmxlbmRNb2RlPXJhKHQuYmxlbmRNb2RlLGwpLHMuc3RhdGUuc2V0KHRoaXMuc3RhdGUpO3ZhciBjPXMuZ2wsZj10LndvcmxkVHJhbnNmb3JtLmNvcHlUbyh0aGlzLnRlbXBNYXRyaXgpO2YucHJlcGVuZChzLmdsb2JhbFVuaWZvcm1zLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4PWYudG9BcnJheSghMCksdGhpcy5zaGFkZXIudW5pZm9ybXMudUNvbG9yPVBsKHQudGludFJnYix0LndvcmxkQWxwaGEsdGhpcy5zaGFkZXIudW5pZm9ybXMudUNvbG9yLGwpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVyPXUsdGhpcy5yZW5kZXJlci5zaGFkZXIuYmluZCh0aGlzLnNoYWRlcik7Zm9yKHZhciBkPSExLHA9MCx2PTA7cDxvO3ArPWEsdis9MSl7dmFyIF89by1wO18+YSYmKF89YSksdj49aC5sZW5ndGgmJmgucHVzaCh0aGlzLl9nZW5lcmF0ZU9uZU1vcmVCdWZmZXIodCkpO3ZhciBtPWhbdl07bS51cGxvYWREeW5hbWljKGkscCxfKTt2YXIgZz10Ll9idWZmZXJVcGRhdGVJRHNbdl18fDA7ZD1kfHxtLl91cGRhdGVJRDxnLGQmJihtLl91cGRhdGVJRD10Ll91cGRhdGVJRCxtLnVwbG9hZFN0YXRpYyhpLHAsXykpLHMuZ2VvbWV0cnkuYmluZChtLmdlb21ldHJ5KSxjLmRyYXdFbGVtZW50cyhjLlRSSUFOR0xFUyxfKjYsYy5VTlNJR05FRF9TSE9SVCwwKX19fSxlLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBpPVtdLG49dC5fbWF4U2l6ZSxhPXQuX2JhdGNoU2l6ZSxzPXQuX3Byb3BlcnRpZXMsbz0wO288bjtvKz1hKWkucHVzaChuZXcgYXModGhpcy5wcm9wZXJ0aWVzLHMsYSkpO3JldHVybiBpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVPbmVNb3JlQnVmZmVyPWZ1bmN0aW9uKHQpe3ZhciBpPXQuX2JhdGNoU2l6ZSxuPXQuX3Byb3BlcnRpZXM7cmV0dXJuIG5ldyBhcyh0aGlzLnByb3BlcnRpZXMsbixpKX0sZS5wcm90b3R5cGUudXBsb2FkVmVydGljZXM9ZnVuY3Rpb24odCxpLG4sYSxzLG8pe2Zvcih2YXIgaD0wLHU9MCxsPTAsYz0wLGY9MDtmPG47KytmKXt2YXIgZD10W2krZl0scD1kLl90ZXh0dXJlLHY9ZC5zY2FsZS54LF89ZC5zY2FsZS55LG09cC50cmltLGc9cC5vcmlnO20/KHU9bS54LWQuYW5jaG9yLngqZy53aWR0aCxoPXUrbS53aWR0aCxjPW0ueS1kLmFuY2hvci55KmcuaGVpZ2h0LGw9YyttLmhlaWdodCk6KGg9Zy53aWR0aCooMS1kLmFuY2hvci54KSx1PWcud2lkdGgqLWQuYW5jaG9yLngsbD1nLmhlaWdodCooMS1kLmFuY2hvci55KSxjPWcuaGVpZ2h0Ki1kLmFuY2hvci55KSxhW29dPXUqdixhW28rMV09YypfLGFbbytzXT1oKnYsYVtvK3MrMV09YypfLGFbbytzKjJdPWgqdixhW28rcyoyKzFdPWwqXyxhW28rcyozXT11KnYsYVtvK3MqMysxXT1sKl8sbys9cyo0fX0sZS5wcm90b3R5cGUudXBsb2FkUG9zaXRpb249ZnVuY3Rpb24odCxpLG4sYSxzLG8pe2Zvcih2YXIgaD0wO2g8bjtoKyspe3ZhciB1PXRbaStoXS5wb3NpdGlvbjthW29dPXUueCxhW28rMV09dS55LGFbbytzXT11LngsYVtvK3MrMV09dS55LGFbbytzKjJdPXUueCxhW28rcyoyKzFdPXUueSxhW28rcyozXT11LngsYVtvK3MqMysxXT11Lnksbys9cyo0fX0sZS5wcm90b3R5cGUudXBsb2FkUm90YXRpb249ZnVuY3Rpb24odCxpLG4sYSxzLG8pe2Zvcih2YXIgaD0wO2g8bjtoKyspe3ZhciB1PXRbaStoXS5yb3RhdGlvbjthW29dPXUsYVtvK3NdPXUsYVtvK3MqMl09dSxhW28rcyozXT11LG8rPXMqNH19LGUucHJvdG90eXBlLnVwbG9hZFV2cz1mdW5jdGlvbih0LGksbixhLHMsbyl7Zm9yKHZhciBoPTA7aDxuOysraCl7dmFyIHU9dFtpK2hdLl90ZXh0dXJlLl91dnM7dT8oYVtvXT11LngwLGFbbysxXT11LnkwLGFbbytzXT11LngxLGFbbytzKzFdPXUueTEsYVtvK3MqMl09dS54MixhW28rcyoyKzFdPXUueTIsYVtvK3MqM109dS54MyxhW28rcyozKzFdPXUueTMsbys9cyo0KTooYVtvXT0wLGFbbysxXT0wLGFbbytzXT0wLGFbbytzKzFdPTAsYVtvK3MqMl09MCxhW28rcyoyKzFdPTAsYVtvK3MqM109MCxhW28rcyozKzFdPTAsbys9cyo0KX19LGUucHJvdG90eXBlLnVwbG9hZFRpbnQ9ZnVuY3Rpb24odCxpLG4sYSxzLG8pe2Zvcih2YXIgaD0wO2g8bjsrK2gpe3ZhciB1PXRbaStoXSxsPXUuX3RleHR1cmUuYmFzZVRleHR1cmUuYWxwaGFNb2RlPjAsYz11LmFscGhhLGY9YzwxJiZsP19pKHUuX3RpbnRSR0IsYyk6dS5fdGludFJHQisoYyoyNTU8PDI0KTthW29dPWYsYVtvK3NdPWYsYVtvK3MqMl09ZixhW28rcyozXT1mLG8rPXMqNH19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5zaGFkZXImJih0aGlzLnNoYWRlci5kZXN0cm95KCksdGhpcy5zaGFkZXI9bnVsbCksdGhpcy50ZW1wTWF0cml4PW51bGx9LGUuZXh0ZW5zaW9uPXtuYW1lOiJwYXJ0aWNsZSIsdHlwZTpLLlJlbmRlcmVyUGx1Z2lufSxlfShQcik7dmFyIEt0OyhmdW5jdGlvbihyKXtyLk1JVEVSPSJtaXRlciIsci5CRVZFTD0iYmV2ZWwiLHIuUk9VTkQ9InJvdW5kIn0pKEt0fHwoS3Q9e30pKTt2YXIgZWU7KGZ1bmN0aW9uKHIpe3IuQlVUVD0iYnV0dCIsci5ST1VORD0icm91bmQiLHIuU1FVQVJFPSJzcXVhcmUifSkoZWV8fChlZT17fSkpO3ZhciBKZT17YWRhcHRpdmU6ITAsbWF4TGVuZ3RoOjEwLG1pblNlZ21lbnRzOjgsbWF4U2VnbWVudHM6MjA0OCxlcHNpbG9uOjFlLTQsX3NlZ21lbnRzQ291bnQ6ZnVuY3Rpb24ocixlKXtpZihlPT09dm9pZCAwJiYoZT0yMCksIXRoaXMuYWRhcHRpdmV8fCFyfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgdD1NYXRoLmNlaWwoci90aGlzLm1heExlbmd0aCk7cmV0dXJuIHQ8dGhpcy5taW5TZWdtZW50cz90PXRoaXMubWluU2VnbWVudHM6dD50aGlzLm1heFNlZ21lbnRzJiYodD10aGlzLm1heFNlZ21lbnRzKSx0fX0sc3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7dGhpcy5jb2xvcj0xNjc3NzIxNSx0aGlzLmFscGhhPTEsdGhpcy50ZXh0dXJlPUwuV0hJVEUsdGhpcy5tYXRyaXg9bnVsbCx0aGlzLnZpc2libGU9ITEsdGhpcy5yZXNldCgpfXJldHVybiByLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyByO3JldHVybiBlLmNvbG9yPXRoaXMuY29sb3IsZS5hbHBoYT10aGlzLmFscGhhLGUudGV4dHVyZT10aGlzLnRleHR1cmUsZS5tYXRyaXg9dGhpcy5tYXRyaXgsZS52aXNpYmxlPXRoaXMudmlzaWJsZSxlfSxyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY29sb3I9MTY3NzcyMTUsdGhpcy5hbHBoYT0xLHRoaXMudGV4dHVyZT1MLldISVRFLHRoaXMubWF0cml4PW51bGwsdGhpcy52aXNpYmxlPSExfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlPW51bGwsdGhpcy5tYXRyaXg9bnVsbH0scn0oKTt2YXIgSmk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gSmk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LEppKHIsZSl9O2Z1bmN0aW9uIFFpKHIsZSl7SmkocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX1mdW5jdGlvbiBvcyhyLGUpe3ZhciB0LGk7ZT09PXZvaWQgMCYmKGU9ITEpO3ZhciBuPXIubGVuZ3RoO2lmKCEobjw2KSl7Zm9yKHZhciBhPTAscz0wLG89cltuLTJdLGg9cltuLTFdO3M8bjtzKz0yKXt2YXIgdT1yW3NdLGw9cltzKzFdO2ErPSh1LW8pKihsK2gpLG89dSxoPWx9aWYoIWUmJmE+MHx8ZSYmYTw9MClmb3IodmFyIGM9bi8yLHM9YytjJTI7czxuO3MrPTIpe3ZhciBmPW4tcy0yLGQ9bi1zLTEscD1zLHY9cysxO3Q9W3JbcF0scltmXV0scltmXT10WzBdLHJbcF09dFsxXSxpPVtyW3ZdLHJbZF1dLHJbZF09aVswXSxyW3ZdPWlbMV19fX12YXIgaHM9e2J1aWxkOmZ1bmN0aW9uKHIpe3IucG9pbnRzPXIuc2hhcGUucG9pbnRzLnNsaWNlKCl9LHRyaWFuZ3VsYXRlOmZ1bmN0aW9uKHIsZSl7dmFyIHQ9ci5wb2ludHMsaT1yLmhvbGVzLG49ZS5wb2ludHMsYT1lLmluZGljZXM7aWYodC5sZW5ndGg+PTYpe29zKHQsITEpO2Zvcih2YXIgcz1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBoPWlbb107b3MoaC5wb2ludHMsITApLHMucHVzaCh0Lmxlbmd0aC8yKSx0PXQuY29uY2F0KGgucG9pbnRzKX12YXIgdT1sci5leHBvcnRzKHQscywyKTtpZighdSlyZXR1cm47Zm9yKHZhciBsPW4ubGVuZ3RoLzIsbz0wO288dS5sZW5ndGg7bys9MylhLnB1c2godVtvXStsKSxhLnB1c2godVtvKzFdK2wpLGEucHVzaCh1W28rMl0rbCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspbi5wdXNoKHRbb10pfX19LFhyPXtidWlsZDpmdW5jdGlvbihyKXt2YXIgZT1yLnBvaW50cyx0LGksbixhLHMsbztpZihyLnR5cGU9PT1tdC5DSVJDKXt2YXIgaD1yLnNoYXBlO3Q9aC54LGk9aC55LHM9bz1oLnJhZGl1cyxuPWE9MH1lbHNlIGlmKHIudHlwZT09PW10LkVMSVApe3ZhciB1PXIuc2hhcGU7dD11LngsaT11Lnkscz11LndpZHRoLG89dS5oZWlnaHQsbj1hPTB9ZWxzZXt2YXIgbD1yLnNoYXBlLGM9bC53aWR0aC8yLGY9bC5oZWlnaHQvMjt0PWwueCtjLGk9bC55K2Yscz1vPU1hdGgubWF4KDAsTWF0aC5taW4obC5yYWRpdXMsTWF0aC5taW4oYyxmKSkpLG49Yy1zLGE9Zi1vfWlmKCEocz49MCYmbz49MCYmbj49MCYmYT49MCkpe2UubGVuZ3RoPTA7cmV0dXJufXZhciBkPU1hdGguY2VpbCgyLjMqTWF0aC5zcXJ0KHMrbykpLHA9ZCo4KyhuPzQ6MCkrKGE/NDowKTtpZihlLmxlbmd0aD1wLHAhPT0wKXtpZihkPT09MCl7ZS5sZW5ndGg9OCxlWzBdPWVbNl09dCtuLGVbMV09ZVszXT1pK2EsZVsyXT1lWzRdPXQtbixlWzVdPWVbN109aS1hO3JldHVybn12YXIgdj0wLF89ZCo0KyhuPzI6MCkrMixtPV8sZz1wO3t2YXIgeT1uK3MsVD1hLHg9dCt5LGI9dC15LEU9aStUO2lmKGVbdisrXT14LGVbdisrXT1FLGVbLS1fXT1FLGVbLS1fXT1iLGEpe3ZhciBBPWktVDtlW20rK109YixlW20rK109QSxlWy0tZ109QSxlWy0tZ109eH19Zm9yKHZhciB3PTE7dzxkO3crKyl7dmFyIFM9TWF0aC5QSS8yKih3L2QpLHk9bitNYXRoLmNvcyhTKSpzLFQ9YStNYXRoLnNpbihTKSpvLHg9dCt5LGI9dC15LEU9aStULEE9aS1UO2VbdisrXT14LGVbdisrXT1FLGVbLS1fXT1FLGVbLS1fXT1iLGVbbSsrXT1iLGVbbSsrXT1BLGVbLS1nXT1BLGVbLS1nXT14fXt2YXIgeT1uLFQ9YStvLHg9dCt5LGI9dC15LEU9aStULEE9aS1UO2VbdisrXT14LGVbdisrXT1FLGVbLS1nXT1BLGVbLS1nXT14LG4mJihlW3YrK109YixlW3YrK109RSxlWy0tZ109QSxlWy0tZ109Yil9fX0sdHJpYW5ndWxhdGU6ZnVuY3Rpb24ocixlKXt2YXIgdD1yLnBvaW50cyxpPWUucG9pbnRzLG49ZS5pbmRpY2VzO2lmKHQubGVuZ3RoIT09MCl7dmFyIGE9aS5sZW5ndGgvMixzPWEsbyxoO2lmKHIudHlwZSE9PW10LlJSRUMpe3ZhciB1PXIuc2hhcGU7bz11LngsaD11Lnl9ZWxzZXt2YXIgbD1yLnNoYXBlO289bC54K2wud2lkdGgvMixoPWwueStsLmhlaWdodC8yfXZhciBjPXIubWF0cml4O2kucHVzaChyLm1hdHJpeD9jLmEqbytjLmMqaCtjLnR4Om8sci5tYXRyaXg/Yy5iKm8rYy5kKmgrYy50eTpoKSxhKyssaS5wdXNoKHRbMF0sdFsxXSk7Zm9yKHZhciBmPTI7Zjx0Lmxlbmd0aDtmKz0yKWkucHVzaCh0W2ZdLHRbZisxXSksbi5wdXNoKGErKyxzLGEpO24ucHVzaChzKzEscyxhKX19fSx4ZD17YnVpbGQ6ZnVuY3Rpb24ocil7dmFyIGU9ci5zaGFwZSx0PWUueCxpPWUueSxuPWUud2lkdGgsYT1lLmhlaWdodCxzPXIucG9pbnRzO3MubGVuZ3RoPTAscy5wdXNoKHQsaSx0K24saSx0K24saSthLHQsaSthKX0sdHJpYW5ndWxhdGU6ZnVuY3Rpb24ocixlKXt2YXIgdD1yLnBvaW50cyxpPWUucG9pbnRzLG49aS5sZW5ndGgvMjtpLnB1c2godFswXSx0WzFdLHRbMl0sdFszXSx0WzZdLHRbN10sdFs0XSx0WzVdKSxlLmluZGljZXMucHVzaChuLG4rMSxuKzIsbisxLG4rMixuKzMpfX07ZnVuY3Rpb24gQ2UocixlLHQpe3ZhciBpPWUtcjtyZXR1cm4gcitpKnR9ZnVuY3Rpb24gSHIocixlLHQsaSxuLGEscyl7cz09PXZvaWQgMCYmKHM9W10pO2Zvcih2YXIgbz0yMCxoPXMsdT0wLGw9MCxjPTAsZj0wLGQ9MCxwPTAsdj0wLF89MDt2PD1vOysrdilfPXYvbyx1PUNlKHIsdCxfKSxsPUNlKGUsaSxfKSxjPUNlKHQsbixfKSxmPUNlKGksYSxfKSxkPUNlKHUsYyxfKSxwPUNlKGwsZixfKSwhKHY9PT0wJiZoW2gubGVuZ3RoLTJdPT09ZCYmaFtoLmxlbmd0aC0xXT09PXApJiZoLnB1c2goZCxwKTtyZXR1cm4gaH12YXIgYmQ9e2J1aWxkOmZ1bmN0aW9uKHIpe2lmKFZyLm5leHRSb3VuZGVkUmVjdEJlaGF2aW9yKXtYci5idWlsZChyKTtyZXR1cm59dmFyIGU9ci5zaGFwZSx0PXIucG9pbnRzLGk9ZS54LG49ZS55LGE9ZS53aWR0aCxzPWUuaGVpZ2h0LG89TWF0aC5tYXgoMCxNYXRoLm1pbihlLnJhZGl1cyxNYXRoLm1pbihhLHMpLzIpKTt0Lmxlbmd0aD0wLG8/KEhyKGksbitvLGksbixpK28sbix0KSxIcihpK2EtbyxuLGkrYSxuLGkrYSxuK28sdCksSHIoaSthLG4rcy1vLGkrYSxuK3MsaSthLW8sbitzLHQpLEhyKGkrbyxuK3MsaSxuK3MsaSxuK3Mtbyx0KSk6dC5wdXNoKGksbixpK2EsbixpK2EsbitzLGksbitzKX0sdHJpYW5ndWxhdGU6ZnVuY3Rpb24ocixlKXtpZihWci5uZXh0Um91bmRlZFJlY3RCZWhhdmlvcil7WHIudHJpYW5ndWxhdGUocixlKTtyZXR1cm59Zm9yKHZhciB0PXIucG9pbnRzLGk9ZS5wb2ludHMsbj1lLmluZGljZXMsYT1pLmxlbmd0aC8yLHM9bHIuZXhwb3J0cyh0LG51bGwsMiksbz0wLGg9cy5sZW5ndGg7bzxoO28rPTMpbi5wdXNoKHNbb10rYSksbi5wdXNoKHNbbysxXSthKSxuLnB1c2goc1tvKzJdK2EpO2Zvcih2YXIgbz0wLGg9dC5sZW5ndGg7bzxoO28rKylpLnB1c2godFtvXSx0Wysrb10pfX07ZnVuY3Rpb24gdXMocixlLHQsaSxuLGEscyxvKXt2YXIgaD1yLXQqbix1PWUtaSpuLGw9cit0KmEsYz1lK2kqYSxmLGQ7cz8oZj1pLGQ9LXQpOihmPS1pLGQ9dCk7dmFyIHA9aCtmLHY9dStkLF89bCtmLG09YytkO3JldHVybiBvLnB1c2gocCx2KSxvLnB1c2goXyxtKSwyfWZ1bmN0aW9uIF9lKHIsZSx0LGksbixhLHMsbyl7dmFyIGg9dC1yLHU9aS1lLGw9TWF0aC5hdGFuMihoLHUpLGM9TWF0aC5hdGFuMihuLXIsYS1lKTtvJiZsPGM/bCs9TWF0aC5QSSoyOiFvJiZsPmMmJihjKz1NYXRoLlBJKjIpO3ZhciBmPWwsZD1jLWwscD1NYXRoLmFicyhkKSx2PU1hdGguc3FydChoKmgrdSp1KSxfPSgxNSpwKk1hdGguc3FydCh2KS9NYXRoLlBJPj4wKSsxLG09ZC9fO2lmKGYrPW0sbyl7cy5wdXNoKHIsZSkscy5wdXNoKHQsaSk7Zm9yKHZhciBnPTEseT1mO2c8XztnKysseSs9bSlzLnB1c2gocixlKSxzLnB1c2gocitNYXRoLnNpbih5KSp2LGUrTWF0aC5jb3MoeSkqdik7cy5wdXNoKHIsZSkscy5wdXNoKG4sYSl9ZWxzZXtzLnB1c2godCxpKSxzLnB1c2gocixlKTtmb3IodmFyIGc9MSx5PWY7ZzxfO2crKyx5Kz1tKXMucHVzaChyK01hdGguc2luKHkpKnYsZStNYXRoLmNvcyh5KSp2KSxzLnB1c2gocixlKTtzLnB1c2gobixhKSxzLnB1c2gocixlKX1yZXR1cm4gXyoyfWZ1bmN0aW9uIFRkKHIsZSl7dmFyIHQ9ci5zaGFwZSxpPXIucG9pbnRzfHx0LnBvaW50cy5zbGljZSgpLG49ZS5jbG9zZVBvaW50RXBzO2lmKGkubGVuZ3RoIT09MCl7dmFyIGE9ci5saW5lU3R5bGUscz1uZXcgdHQoaVswXSxpWzFdKSxvPW5ldyB0dChpW2kubGVuZ3RoLTJdLGlbaS5sZW5ndGgtMV0pLGg9dC50eXBlIT09bXQuUE9MWXx8dC5jbG9zZVN0cm9rZSx1PU1hdGguYWJzKHMueC1vLngpPG4mJk1hdGguYWJzKHMueS1vLnkpPG47aWYoaCl7aT1pLnNsaWNlKCksdSYmKGkucG9wKCksaS5wb3AoKSxvLnNldChpW2kubGVuZ3RoLTJdLGlbaS5sZW5ndGgtMV0pKTt2YXIgbD0ocy54K28ueCkqLjUsYz0oby55K3MueSkqLjU7aS51bnNoaWZ0KGwsYyksaS5wdXNoKGwsYyl9dmFyIGY9ZS5wb2ludHMsZD1pLmxlbmd0aC8yLHA9aS5sZW5ndGgsdj1mLmxlbmd0aC8yLF89YS53aWR0aC8yLG09XypfLGc9YS5taXRlckxpbWl0KmEubWl0ZXJMaW1pdCx5PWlbMF0sVD1pWzFdLHg9aVsyXSxiPWlbM10sRT0wLEE9MCx3PS0oVC1iKSxTPXkteCxEPTAsQj0wLEc9TWF0aC5zcXJ0KHcqdytTKlMpO3cvPUcsUy89Ryx3Kj1fLFMqPV87dmFyIFo9YS5hbGlnbm1lbnQsTT0oMS1aKSoyLE89WioyO2h8fChhLmNhcD09PWVlLlJPVU5EP3ArPV9lKHktdyooTS1PKSouNSxULVMqKE0tTykqLjUseS13Kk0sVC1TKk0seSt3Kk8sVCtTKk8sZiwhMCkrMjphLmNhcD09PWVlLlNRVUFSRSYmKHArPXVzKHksVCx3LFMsTSxPLCEwLGYpKSksZi5wdXNoKHktdypNLFQtUypNKSxmLnB1c2goeSt3Kk8sVCtTKk8pO2Zvcih2YXIgaz0xO2s8ZC0xOysrayl7eT1pWyhrLTEpKjJdLFQ9aVsoay0xKSoyKzFdLHg9aVtrKjJdLGI9aVtrKjIrMV0sRT1pWyhrKzEpKjJdLEE9aVsoaysxKSoyKzFdLHc9LShULWIpLFM9eS14LEc9TWF0aC5zcXJ0KHcqdytTKlMpLHcvPUcsUy89Ryx3Kj1fLFMqPV8sRD0tKGItQSksQj14LUUsRz1NYXRoLnNxcnQoRCpEK0IqQiksRC89RyxCLz1HLEQqPV8sQio9Xzt2YXIgZ3Q9eC15LFk9VC1iLEM9eC1FLFA9QS1iLFg9Z3QqQytZKlAsej1ZKkMtUCpndCxXPXo8MDtpZihNYXRoLmFicyh6KTwuMDAxKk1hdGguYWJzKFgpKXtmLnB1c2goeC13Kk0sYi1TKk0pLGYucHVzaCh4K3cqTyxiK1MqTyksWD49MCYmKGEuam9pbj09PUt0LlJPVU5EP3ArPV9lKHgsYix4LXcqTSxiLVMqTSx4LUQqTSxiLUIqTSxmLCExKSs0OnArPTIsZi5wdXNoKHgtRCpPLGItQipPKSxmLnB1c2goeCtEKk0sYitCKk0pKTtjb250aW51ZX12YXIgZnQ9KC13K3kpKigtUytiKS0oLXcreCkqKC1TK1QpLHJ0PSgtRCtFKSooLUIrYiktKC1EK3gpKigtQitBKSxpdD0oZ3QqcnQtQypmdCkveix5dD0oUCpmdC1ZKnJ0KS96LFR0PShpdC14KSooaXQteCkrKHl0LWIpKih5dC1iKSxjdD14KyhpdC14KSpNLEo9YisoeXQtYikqTSxldD14LShpdC14KSpPLG50PWItKHl0LWIpKk8sVj1NYXRoLm1pbihndCpndCtZKlksQypDK1AqUCksRXQ9Vz9NOk8sd3Q9VitFdCpFdCptLHE9VHQ8PXd0O3E/YS5qb2luPT09S3QuQkVWRUx8fFR0L20+Zz8oVz8oZi5wdXNoKGN0LEopLGYucHVzaCh4K3cqTyxiK1MqTyksZi5wdXNoKGN0LEopLGYucHVzaCh4K0QqTyxiK0IqTykpOihmLnB1c2goeC13Kk0sYi1TKk0pLGYucHVzaChldCxudCksZi5wdXNoKHgtRCpNLGItQipNKSxmLnB1c2goZXQsbnQpKSxwKz0yKTphLmpvaW49PT1LdC5ST1VORD9XPyhmLnB1c2goY3QsSiksZi5wdXNoKHgrdypPLGIrUypPKSxwKz1fZSh4LGIseCt3Kk8sYitTKk8seCtEKk8sYitCKk8sZiwhMCkrNCxmLnB1c2goY3QsSiksZi5wdXNoKHgrRCpPLGIrQipPKSk6KGYucHVzaCh4LXcqTSxiLVMqTSksZi5wdXNoKGV0LG50KSxwKz1fZSh4LGIseC13Kk0sYi1TKk0seC1EKk0sYi1CKk0sZiwhMSkrNCxmLnB1c2goeC1EKk0sYi1CKk0pLGYucHVzaChldCxudCkpOihmLnB1c2goY3QsSiksZi5wdXNoKGV0LG50KSk6KGYucHVzaCh4LXcqTSxiLVMqTSksZi5wdXNoKHgrdypPLGIrUypPKSxhLmpvaW49PT1LdC5ST1VORD9XP3ArPV9lKHgsYix4K3cqTyxiK1MqTyx4K0QqTyxiK0IqTyxmLCEwKSsyOnArPV9lKHgsYix4LXcqTSxiLVMqTSx4LUQqTSxiLUIqTSxmLCExKSsyOmEuam9pbj09PUt0Lk1JVEVSJiZUdC9tPD1nJiYoVz8oZi5wdXNoKGV0LG50KSxmLnB1c2goZXQsbnQpKTooZi5wdXNoKGN0LEopLGYucHVzaChjdCxKKSkscCs9MiksZi5wdXNoKHgtRCpNLGItQipNKSxmLnB1c2goeCtEKk8sYitCKk8pLHArPTIpfXk9aVsoZC0yKSoyXSxUPWlbKGQtMikqMisxXSx4PWlbKGQtMSkqMl0sYj1pWyhkLTEpKjIrMV0sdz0tKFQtYiksUz15LXgsRz1NYXRoLnNxcnQodyp3K1MqUyksdy89RyxTLz1HLHcqPV8sUyo9XyxmLnB1c2goeC13Kk0sYi1TKk0pLGYucHVzaCh4K3cqTyxiK1MqTyksaHx8KGEuY2FwPT09ZWUuUk9VTkQ/cCs9X2UoeC13KihNLU8pKi41LGItUyooTS1PKSouNSx4LXcqTSxiLVMqTSx4K3cqTyxiK1MqTyxmLCExKSsyOmEuY2FwPT09ZWUuU1FVQVJFJiYocCs9dXMoeCxiLHcsUyxNLE8sITEsZikpKTtmb3IodmFyIEh0PWUuaW5kaWNlcyxEZT1KZS5lcHNpbG9uKkplLmVwc2lsb24saz12O2s8cCt2LTI7KytrKXk9ZltrKjJdLFQ9ZltrKjIrMV0seD1mWyhrKzEpKjJdLGI9ZlsoaysxKSoyKzFdLEU9ZlsoaysyKSoyXSxBPWZbKGsrMikqMisxXSwhKE1hdGguYWJzKHkqKGItQSkreCooQS1UKStFKihULWIpKTxEZSkmJkh0LnB1c2goayxrKzEsaysyKX19ZnVuY3Rpb24gRWQocixlKXt2YXIgdD0wLGk9ci5zaGFwZSxuPXIucG9pbnRzfHxpLnBvaW50cyxhPWkudHlwZSE9PW10LlBPTFl8fGkuY2xvc2VTdHJva2U7aWYobi5sZW5ndGghPT0wKXt2YXIgcz1lLnBvaW50cyxvPWUuaW5kaWNlcyxoPW4ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yLGw9dTtmb3Iocy5wdXNoKG5bMF0sblsxXSksdD0xO3Q8aDt0Kyspcy5wdXNoKG5bdCoyXSxuW3QqMisxXSksby5wdXNoKGwsbCsxKSxsKys7YSYmby5wdXNoKGwsdSl9fWZ1bmN0aW9uIGxzKHIsZSl7ci5saW5lU3R5bGUubmF0aXZlP0VkKHIsZSk6VGQocixlKX12YXIgZnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLmN1cnZlVG89ZnVuY3Rpb24oZSx0LGksbixhLHMpe3ZhciBvPXNbcy5sZW5ndGgtMl0saD1zW3MubGVuZ3RoLTFdLHU9aC10LGw9by1lLGM9bi10LGY9aS1lLGQ9TWF0aC5hYnModSpmLWwqYyk7aWYoZDwxZS04fHxhPT09MClyZXR1cm4oc1tzLmxlbmd0aC0yXSE9PWV8fHNbcy5sZW5ndGgtMV0hPT10KSYmcy5wdXNoKGUsdCksbnVsbDt2YXIgcD11KnUrbCpsLHY9YypjK2YqZixfPXUqYytsKmYsbT1hKk1hdGguc3FydChwKS9kLGc9YSpNYXRoLnNxcnQodikvZCx5PW0qXy9wLFQ9ZypfL3YseD1tKmYrZypsLGI9bSpjK2cqdSxFPWwqKGcreSksQT11KihnK3kpLHc9ZioobStUKSxTPWMqKG0rVCksRD1NYXRoLmF0YW4yKEEtYixFLXgpLEI9TWF0aC5hdGFuMihTLWIsdy14KTtyZXR1cm57Y3g6eCtlLGN5OmIrdCxyYWRpdXM6YSxzdGFydEFuZ2xlOkQsZW5kQW5nbGU6QixhbnRpY2xvY2t3aXNlOmwqYz5mKnV9fSxyLmFyYz1mdW5jdGlvbihlLHQsaSxuLGEscyxvLGgsdSl7Zm9yKHZhciBsPW8tcyxjPUplLl9zZWdtZW50c0NvdW50KE1hdGguYWJzKGwpKmEsTWF0aC5jZWlsKE1hdGguYWJzKGwpL3lyKSo0MCksZj1sLyhjKjIpLGQ9ZioyLHA9TWF0aC5jb3MoZiksdj1NYXRoLnNpbihmKSxfPWMtMSxtPV8lMS9fLGc9MDtnPD1fOysrZyl7dmFyIHk9ZyttKmcsVD1mK3MrZCp5LHg9TWF0aC5jb3MoVCksYj0tTWF0aC5zaW4oVCk7dS5wdXNoKChwKngrdipiKSphK2ksKHAqLWIrdip4KSphK24pfX0scn0oKSx3ZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuY3VydmVMZW5ndGg9ZnVuY3Rpb24oZSx0LGksbixhLHMsbyxoKXtmb3IodmFyIHU9MTAsbD0wLGM9MCxmPTAsZD0wLHA9MCx2PTAsXz0wLG09MCxnPTAseT0wLFQ9MCx4PWUsYj10LEU9MTtFPD11OysrRSljPUUvdSxmPWMqYyxkPWYqYyxwPTEtYyx2PXAqcCxfPXYqcCxtPV8qZSszKnYqYyppKzMqcCpmKmErZCpvLGc9Xyp0KzMqdipjKm4rMypwKmYqcytkKmgseT14LW0sVD1iLWcseD1tLGI9ZyxsKz1NYXRoLnNxcnQoeSp5K1QqVCk7cmV0dXJuIGx9LHIuY3VydmVUbz1mdW5jdGlvbihlLHQsaSxuLGEscyxvKXt2YXIgaD1vW28ubGVuZ3RoLTJdLHU9b1tvLmxlbmd0aC0xXTtvLmxlbmd0aC09Mjt2YXIgbD1KZS5fc2VnbWVudHNDb3VudChyLmN1cnZlTGVuZ3RoKGgsdSxlLHQsaSxuLGEscykpLGM9MCxmPTAsZD0wLHA9MCx2PTA7by5wdXNoKGgsdSk7Zm9yKHZhciBfPTEsbT0wO188PWw7KytfKW09Xy9sLGM9MS1tLGY9YypjLGQ9ZipjLHA9bSptLHY9cCptLG8ucHVzaChkKmgrMypmKm0qZSszKmMqcCppK3YqYSxkKnUrMypmKm0qdCszKmMqcCpuK3Yqcyl9LHJ9KCksU2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLmN1cnZlTGVuZ3RoPWZ1bmN0aW9uKGUsdCxpLG4sYSxzKXt2YXIgbz1lLTIqaSthLGg9dC0yKm4rcyx1PTIqaS0yKmUsbD0yKm4tMip0LGM9NCoobypvK2gqaCksZj00KihvKnUraCpsKSxkPXUqdStsKmwscD0yKk1hdGguc3FydChjK2YrZCksdj1NYXRoLnNxcnQoYyksXz0yKmMqdixtPTIqTWF0aC5zcXJ0KGQpLGc9Zi92O3JldHVybihfKnArdipmKihwLW0pKyg0KmQqYy1mKmYpKk1hdGgubG9nKCgyKnYrZytwKS8oZyttKSkpLyg0Kl8pfSxyLmN1cnZlVG89ZnVuY3Rpb24oZSx0LGksbixhKXtmb3IodmFyIHM9YVthLmxlbmd0aC0yXSxvPWFbYS5sZW5ndGgtMV0saD1KZS5fc2VnbWVudHNDb3VudChyLmN1cnZlTGVuZ3RoKHMsbyxlLHQsaSxuKSksdT0wLGw9MCxjPTE7Yzw9aDsrK2Mpe3ZhciBmPWMvaDt1PXMrKGUtcykqZixsPW8rKHQtbykqZixhLnB1c2godSsoZSsoaS1lKSpmLXUpKmYsbCsodCsobi10KSpmLWwpKmYpfX0scn0oKSxQZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlc2V0KCl9cmV0dXJuIHIucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKGUsdCxpKXt0aGlzLnJlc2V0KCksdGhpcy5zdHlsZT1lLHRoaXMuc3RhcnQ9dCx0aGlzLmF0dHJpYlN0YXJ0PWl9LHIucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlLHQpe3RoaXMuYXR0cmliU2l6ZT10LXRoaXMuYXR0cmliU3RhcnQsdGhpcy5zaXplPWUtdGhpcy5zdGFydH0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlPW51bGwsdGhpcy5zaXplPTAsdGhpcy5zdGFydD0wLHRoaXMuYXR0cmliU3RhcnQ9MCx0aGlzLmF0dHJpYlNpemU9MH0scn0oKSxtZSx0bj0obWU9e30sbWVbbXQuUE9MWV09aHMsbWVbbXQuQ0lSQ109WHIsbWVbbXQuRUxJUF09WHIsbWVbbXQuUkVDVF09eGQsbWVbbXQuUlJFQ109YmQsbWUpLGNzPVtdLGpyPVtdLGRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSxuKXt0PT09dm9pZCAwJiYodD1udWxsKSxpPT09dm9pZCAwJiYoaT1udWxsKSxuPT09dm9pZCAwJiYobj1udWxsKSx0aGlzLnBvaW50cz1bXSx0aGlzLmhvbGVzPVtdLHRoaXMuc2hhcGU9ZSx0aGlzLmxpbmVTdHlsZT1pLHRoaXMuZmlsbFN0eWxlPXQsdGhpcy5tYXRyaXg9bix0aGlzLnR5cGU9ZS50eXBlfXJldHVybiByLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLnNoYXBlLHRoaXMuZmlsbFN0eWxlLHRoaXMubGluZVN0eWxlLHRoaXMubWF0cml4KX0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcGU9bnVsbCx0aGlzLmhvbGVzLmxlbmd0aD0wLHRoaXMuaG9sZXM9bnVsbCx0aGlzLnBvaW50cy5sZW5ndGg9MCx0aGlzLnBvaW50cz1udWxsLHRoaXMubGluZVN0eWxlPW51bGwsdGhpcy5maWxsU3R5bGU9bnVsbH0scn0oKSxJZT1uZXcgdHQsUmQ9ZnVuY3Rpb24ocil7UWkoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9ci5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LmNsb3NlUG9pbnRFcHM9MWUtNCx0LmJvdW5kc1BhZGRpbmc9MCx0LnV2c0Zsb2F0MzI9bnVsbCx0LmluZGljZXNVaW50MTY9bnVsbCx0LmJhdGNoYWJsZT0hMSx0LnBvaW50cz1bXSx0LmNvbG9ycz1bXSx0LnV2cz1bXSx0LmluZGljZXM9W10sdC50ZXh0dXJlSWRzPVtdLHQuZ3JhcGhpY3NEYXRhPVtdLHQuZHJhd0NhbGxzPVtdLHQuYmF0Y2hEaXJ0eT0tMSx0LmJhdGNoZXM9W10sdC5kaXJ0eT0wLHQuY2FjaGVEaXJ0eT0tMSx0LmNsZWFyRGlydHk9MCx0LnNoYXBlSW5kZXg9MCx0Ll9ib3VuZHM9bmV3IEVyLHQuYm91bmRzRGlydHk9LTEsdH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJib3VuZHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVCYXRjaGVzKCksdGhpcy5ib3VuZHNEaXJ0eSE9PXRoaXMuZGlydHkmJih0aGlzLmJvdW5kc0RpcnR5PXRoaXMuZGlydHksdGhpcy5jYWxjdWxhdGVCb3VuZHMoKSksdGhpcy5fYm91bmRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmludmFsaWRhdGU9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kc0RpcnR5PS0xLHRoaXMuZGlydHkrKyx0aGlzLmJhdGNoRGlydHkrKyx0aGlzLnNoYXBlSW5kZXg9MCx0aGlzLnBvaW50cy5sZW5ndGg9MCx0aGlzLmNvbG9ycy5sZW5ndGg9MCx0aGlzLnV2cy5sZW5ndGg9MCx0aGlzLmluZGljZXMubGVuZ3RoPTAsdGhpcy50ZXh0dXJlSWRzLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8dGhpcy5kcmF3Q2FsbHMubGVuZ3RoO3QrKyl0aGlzLmRyYXdDYWxsc1t0XS50ZXhBcnJheS5jbGVhcigpLGpyLnB1c2godGhpcy5kcmF3Q2FsbHNbdF0pO3RoaXMuZHJhd0NhbGxzLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8dGhpcy5iYXRjaGVzLmxlbmd0aDt0Kyspe3ZhciBpPXRoaXMuYmF0Y2hlc1t0XTtpLnJlc2V0KCksY3MucHVzaChpKX10aGlzLmJhdGNoZXMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aD4wJiYodGhpcy5pbnZhbGlkYXRlKCksdGhpcy5jbGVhckRpcnR5KyssdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoPTApLHRoaXN9LGUucHJvdG90eXBlLmRyYXdTaGFwZT1mdW5jdGlvbih0LGksbixhKXtpPT09dm9pZCAwJiYoaT1udWxsKSxuPT09dm9pZCAwJiYobj1udWxsKSxhPT09dm9pZCAwJiYoYT1udWxsKTt2YXIgcz1uZXcgZHModCxpLG4sYSk7cmV0dXJuIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2gocyksdGhpcy5kaXJ0eSsrLHRoaXN9LGUucHJvdG90eXBlLmRyYXdIb2xlPWZ1bmN0aW9uKHQsaSl7aWYoaT09PXZvaWQgMCYmKGk9bnVsbCksIXRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbj1uZXcgZHModCxudWxsLG51bGwsaSksYT10aGlzLmdyYXBoaWNzRGF0YVt0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgtMV07cmV0dXJuIG4ubGluZVN0eWxlPWEubGluZVN0eWxlLGEuaG9sZXMucHVzaChuKSx0aGlzLmRpcnR5KyssdGhpc30sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3IucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtmb3IodmFyIHQ9MDt0PHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsrK3QpdGhpcy5ncmFwaGljc0RhdGFbdF0uZGVzdHJveSgpO3RoaXMucG9pbnRzLmxlbmd0aD0wLHRoaXMucG9pbnRzPW51bGwsdGhpcy5jb2xvcnMubGVuZ3RoPTAsdGhpcy5jb2xvcnM9bnVsbCx0aGlzLnV2cy5sZW5ndGg9MCx0aGlzLnV2cz1udWxsLHRoaXMuaW5kaWNlcy5sZW5ndGg9MCx0aGlzLmluZGljZXM9bnVsbCx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyPW51bGwsdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoPTAsdGhpcy5ncmFwaGljc0RhdGE9bnVsbCx0aGlzLmRyYXdDYWxscy5sZW5ndGg9MCx0aGlzLmRyYXdDYWxscz1udWxsLHRoaXMuYmF0Y2hlcy5sZW5ndGg9MCx0aGlzLmJhdGNoZXM9bnVsbCx0aGlzLl9ib3VuZHM9bnVsbH0sZS5wcm90b3R5cGUuY29udGFpbnNQb2ludD1mdW5jdGlvbih0KXtmb3IodmFyIGk9dGhpcy5ncmFwaGljc0RhdGEsbj0wO248aS5sZW5ndGg7KytuKXt2YXIgYT1pW25dO2lmKGEuZmlsbFN0eWxlLnZpc2libGUmJmEuc2hhcGUmJihhLm1hdHJpeD9hLm1hdHJpeC5hcHBseUludmVyc2UodCxJZSk6SWUuY29weUZyb20odCksYS5zaGFwZS5jb250YWlucyhJZS54LEllLnkpKSl7dmFyIHM9ITE7aWYoYS5ob2xlcylmb3IodmFyIG89MDtvPGEuaG9sZXMubGVuZ3RoO28rKyl7dmFyIGg9YS5ob2xlc1tvXTtpZihoLnNoYXBlLmNvbnRhaW5zKEllLngsSWUueSkpe3M9ITA7YnJlYWt9fWlmKCFzKXJldHVybiEwfX1yZXR1cm4hMX0sZS5wcm90b3R5cGUudXBkYXRlQmF0Y2hlcz1mdW5jdGlvbigpe2lmKCF0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpe3RoaXMuYmF0Y2hhYmxlPSEwO3JldHVybn1pZih0aGlzLnZhbGlkYXRlQmF0Y2hpbmcoKSl7dGhpcy5jYWNoZURpcnR5PXRoaXMuZGlydHk7dmFyIHQ9dGhpcy51dnMsaT10aGlzLmdyYXBoaWNzRGF0YSxuPW51bGwsYT1udWxsO3RoaXMuYmF0Y2hlcy5sZW5ndGg+MCYmKG49dGhpcy5iYXRjaGVzW3RoaXMuYmF0Y2hlcy5sZW5ndGgtMV0sYT1uLnN0eWxlKTtmb3IodmFyIHM9dGhpcy5zaGFwZUluZGV4O3M8aS5sZW5ndGg7cysrKXt0aGlzLnNoYXBlSW5kZXgrKzt2YXIgbz1pW3NdLGg9by5maWxsU3R5bGUsdT1vLmxpbmVTdHlsZSxsPXRuW28udHlwZV07bC5idWlsZChvKSxvLm1hdHJpeCYmdGhpcy50cmFuc2Zvcm1Qb2ludHMoby5wb2ludHMsby5tYXRyaXgpLChoLnZpc2libGV8fHUudmlzaWJsZSkmJnRoaXMucHJvY2Vzc0hvbGVzKG8uaG9sZXMpO2Zvcih2YXIgYz0wO2M8MjtjKyspe3ZhciBmPWM9PT0wP2g6dTtpZihmLnZpc2libGUpe3ZhciBkPWYudGV4dHVyZS5iYXNlVGV4dHVyZSxwPXRoaXMuaW5kaWNlcy5sZW5ndGgsdj10aGlzLnBvaW50cy5sZW5ndGgvMjtkLndyYXBNb2RlPUx0LlJFUEVBVCxjPT09MD90aGlzLnByb2Nlc3NGaWxsKG8pOnRoaXMucHJvY2Vzc0xpbmUobyk7dmFyIF89dGhpcy5wb2ludHMubGVuZ3RoLzItdjtfIT09MCYmKG4mJiF0aGlzLl9jb21wYXJlU3R5bGVzKGEsZikmJihuLmVuZChwLHYpLG49bnVsbCksbnx8KG49Y3MucG9wKCl8fG5ldyBQZCxuLmJlZ2luKGYscCx2KSx0aGlzLmJhdGNoZXMucHVzaChuKSxhPWYpLHRoaXMuYWRkVXZzKHRoaXMucG9pbnRzLHQsZi50ZXh0dXJlLHYsXyxmLm1hdHJpeCkpfX19dmFyIG09dGhpcy5pbmRpY2VzLmxlbmd0aCxnPXRoaXMucG9pbnRzLmxlbmd0aC8yO2lmKG4mJm4uZW5kKG0sZyksdGhpcy5iYXRjaGVzLmxlbmd0aD09PTApe3RoaXMuYmF0Y2hhYmxlPSEwO3JldHVybn12YXIgeT1nPjY1NTM1O3RoaXMuaW5kaWNlc1VpbnQxNiYmdGhpcy5pbmRpY2VzLmxlbmd0aD09PXRoaXMuaW5kaWNlc1VpbnQxNi5sZW5ndGgmJnk9PT10aGlzLmluZGljZXNVaW50MTYuQllURVNfUEVSX0VMRU1FTlQ+Mj90aGlzLmluZGljZXNVaW50MTYuc2V0KHRoaXMuaW5kaWNlcyk6dGhpcy5pbmRpY2VzVWludDE2PXk/bmV3IFVpbnQzMkFycmF5KHRoaXMuaW5kaWNlcyk6bmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyksdGhpcy5iYXRjaGFibGU9dGhpcy5pc0JhdGNoYWJsZSgpLHRoaXMuYmF0Y2hhYmxlP3RoaXMucGFja0JhdGNoZXMoKTp0aGlzLmJ1aWxkRHJhd0NhbGxzKCl9fSxlLnByb3RvdHlwZS5fY29tcGFyZVN0eWxlcz1mdW5jdGlvbih0LGkpe3JldHVybiEoIXR8fCFpfHx0LnRleHR1cmUuYmFzZVRleHR1cmUhPT1pLnRleHR1cmUuYmFzZVRleHR1cmV8fHQuY29sb3IrdC5hbHBoYSE9PWkuY29sb3IraS5hbHBoYXx8ISF0Lm5hdGl2ZSE9ISFpLm5hdGl2ZSl9LGUucHJvdG90eXBlLnZhbGlkYXRlQmF0Y2hpbmc9ZnVuY3Rpb24oKXtpZih0aGlzLmRpcnR5PT09dGhpcy5jYWNoZURpcnR5fHwhdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdD0wLGk9dGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoO3Q8aTt0Kyspe3ZhciBuPXRoaXMuZ3JhcGhpY3NEYXRhW3RdLGE9bi5maWxsU3R5bGUscz1uLmxpbmVTdHlsZTtpZihhJiYhYS50ZXh0dXJlLmJhc2VUZXh0dXJlLnZhbGlkfHxzJiYhcy50ZXh0dXJlLmJhc2VUZXh0dXJlLnZhbGlkKXJldHVybiExfXJldHVybiEwfSxlLnByb3RvdHlwZS5wYWNrQmF0Y2hlcz1mdW5jdGlvbigpe3RoaXMuYmF0Y2hEaXJ0eSsrLHRoaXMudXZzRmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMudXZzKTtmb3IodmFyIHQ9dGhpcy5iYXRjaGVzLGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBhPXRbaV0scz0wO3M8YS5zaXplO3MrKyl7dmFyIG89YS5zdGFydCtzO3RoaXMuaW5kaWNlc1VpbnQxNltvXT10aGlzLmluZGljZXNVaW50MTZbb10tYS5hdHRyaWJTdGFydH19LGUucHJvdG90eXBlLmlzQmF0Y2hhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5wb2ludHMubGVuZ3RoPjY1NTM1KjIpcmV0dXJuITE7Zm9yKHZhciB0PXRoaXMuYmF0Y2hlcyxpPTA7aTx0Lmxlbmd0aDtpKyspaWYodFtpXS5zdHlsZS5uYXRpdmUpcmV0dXJuITE7cmV0dXJuIHRoaXMucG9pbnRzLmxlbmd0aDxlLkJBVENIQUJMRV9TSVpFKjJ9LGUucHJvdG90eXBlLmJ1aWxkRHJhd0NhbGxzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSsrai5fZ2xvYmFsQmF0Y2gsaT0wO2k8dGhpcy5kcmF3Q2FsbHMubGVuZ3RoO2krKyl0aGlzLmRyYXdDYWxsc1tpXS50ZXhBcnJheS5jbGVhcigpLGpyLnB1c2godGhpcy5kcmF3Q2FsbHNbaV0pO3RoaXMuZHJhd0NhbGxzLmxlbmd0aD0wO3ZhciBuPXRoaXMuY29sb3JzLGE9dGhpcy50ZXh0dXJlSWRzLHM9anIucG9wKCk7c3x8KHM9bmV3IExpLHMudGV4QXJyYXk9bmV3IFVpKSxzLnRleEFycmF5LmNvdW50PTAscy5zdGFydD0wLHMuc2l6ZT0wLHMudHlwZT1QdC5UUklBTkdMRVM7dmFyIG89MCxoPW51bGwsdT0wLGw9ITEsYz1QdC5UUklBTkdMRVMsZj0wO3RoaXMuZHJhd0NhbGxzLnB1c2gocyk7Zm9yKHZhciBpPTA7aTx0aGlzLmJhdGNoZXMubGVuZ3RoO2krKyl7dmFyIGQ9dGhpcy5iYXRjaGVzW2ldLHA9OCx2PWQuc3R5bGUsXz12LnRleHR1cmUuYmFzZVRleHR1cmU7bCE9PSEhdi5uYXRpdmUmJihsPSEhdi5uYXRpdmUsYz1sP1B0LkxJTkVTOlB0LlRSSUFOR0xFUyxoPW51bGwsbz1wLHQrKyksaCE9PV8mJihoPV8sXy5fYmF0Y2hFbmFibGVkIT09dCYmKG89PT1wJiYodCsrLG89MCxzLnNpemU+MCYmKHM9anIucG9wKCksc3x8KHM9bmV3IExpLHMudGV4QXJyYXk9bmV3IFVpKSx0aGlzLmRyYXdDYWxscy5wdXNoKHMpKSxzLnN0YXJ0PWYscy5zaXplPTAscy50ZXhBcnJheS5jb3VudD0wLHMudHlwZT1jKSxfLnRvdWNoZWQ9MSxfLl9iYXRjaEVuYWJsZWQ9dCxfLl9iYXRjaExvY2F0aW9uPW8sXy53cmFwTW9kZT1MdC5SRVBFQVQscy50ZXhBcnJheS5lbGVtZW50c1tzLnRleEFycmF5LmNvdW50KytdPV8sbysrKSkscy5zaXplKz1kLnNpemUsZis9ZC5zaXplLHU9Xy5fYmF0Y2hMb2NhdGlvbix0aGlzLmFkZENvbG9ycyhuLHYuY29sb3Isdi5hbHBoYSxkLmF0dHJpYlNpemUsZC5hdHRyaWJTdGFydCksdGhpcy5hZGRUZXh0dXJlSWRzKGEsdSxkLmF0dHJpYlNpemUsZC5hdHRyaWJTdGFydCl9ai5fZ2xvYmFsQmF0Y2g9dCx0aGlzLnBhY2tBdHRyaWJ1dGVzKCl9LGUucHJvdG90eXBlLnBhY2tBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9pbnRzLGk9dGhpcy51dnMsbj10aGlzLmNvbG9ycyxhPXRoaXMudGV4dHVyZUlkcyxzPW5ldyBBcnJheUJ1ZmZlcih0Lmxlbmd0aCozKjQpLG89bmV3IEZsb2F0MzJBcnJheShzKSxoPW5ldyBVaW50MzJBcnJheShzKSx1PTAsbD0wO2w8dC5sZW5ndGgvMjtsKyspb1t1KytdPXRbbCoyXSxvW3UrK109dFtsKjIrMV0sb1t1KytdPWlbbCoyXSxvW3UrK109aVtsKjIrMV0saFt1KytdPW5bbF0sb1t1KytdPWFbbF07dGhpcy5fYnVmZmVyLnVwZGF0ZShzKSx0aGlzLl9pbmRleEJ1ZmZlci51cGRhdGUodGhpcy5pbmRpY2VzVWludDE2KX0sZS5wcm90b3R5cGUucHJvY2Vzc0ZpbGw9ZnVuY3Rpb24odCl7aWYodC5ob2xlcy5sZW5ndGgpaHMudHJpYW5ndWxhdGUodCx0aGlzKTtlbHNle3ZhciBpPXRuW3QudHlwZV07aS50cmlhbmd1bGF0ZSh0LHRoaXMpfX0sZS5wcm90b3R5cGUucHJvY2Vzc0xpbmU9ZnVuY3Rpb24odCl7bHModCx0aGlzKTtmb3IodmFyIGk9MDtpPHQuaG9sZXMubGVuZ3RoO2krKylscyh0LmhvbGVzW2ldLHRoaXMpfSxlLnByb3RvdHlwZS5wcm9jZXNzSG9sZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBuPXRbaV0sYT10bltuLnR5cGVdO2EuYnVpbGQobiksbi5tYXRyaXgmJnRoaXMudHJhbnNmb3JtUG9pbnRzKG4ucG9pbnRzLG4ubWF0cml4KX19LGUucHJvdG90eXBlLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2JvdW5kczt0LmNsZWFyKCksdC5hZGRWZXJ0ZXhEYXRhKHRoaXMucG9pbnRzLDAsdGhpcy5wb2ludHMubGVuZ3RoKSx0LnBhZCh0aGlzLmJvdW5kc1BhZGRpbmcsdGhpcy5ib3VuZHNQYWRkaW5nKX0sZS5wcm90b3R5cGUudHJhbnNmb3JtUG9pbnRzPWZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aC8yO24rKyl7dmFyIGE9dFtuKjJdLHM9dFtuKjIrMV07dFtuKjJdPWkuYSphK2kuYypzK2kudHgsdFtuKjIrMV09aS5iKmEraS5kKnMraS50eX19LGUucHJvdG90eXBlLmFkZENvbG9ycz1mdW5jdGlvbih0LGksbixhLHMpe3M9PT12b2lkIDAmJihzPTApO3ZhciBvPShpPj4xNikrKGkmNjUyODApKygoaSYyNTUpPDwxNiksaD1faShvLG4pO3QubGVuZ3RoPU1hdGgubWF4KHQubGVuZ3RoLHMrYSk7Zm9yKHZhciB1PTA7dTxhO3UrKyl0W3MrdV09aH0sZS5wcm90b3R5cGUuYWRkVGV4dHVyZUlkcz1mdW5jdGlvbih0LGksbixhKXthPT09dm9pZCAwJiYoYT0wKSx0Lmxlbmd0aD1NYXRoLm1heCh0Lmxlbmd0aCxhK24pO2Zvcih2YXIgcz0wO3M8bjtzKyspdFthK3NdPWl9LGUucHJvdG90eXBlLmFkZFV2cz1mdW5jdGlvbih0LGksbixhLHMsbyl7bz09PXZvaWQgMCYmKG89bnVsbCk7Zm9yKHZhciBoPTAsdT1pLmxlbmd0aCxsPW4uZnJhbWU7aDxzOyl7dmFyIGM9dFsoYStoKSoyXSxmPXRbKGEraCkqMisxXTtpZihvKXt2YXIgZD1vLmEqYytvLmMqZitvLnR4O2Y9by5iKmMrby5kKmYrby50eSxjPWR9aCsrLGkucHVzaChjL2wud2lkdGgsZi9sLmhlaWdodCl9dmFyIHA9bi5iYXNlVGV4dHVyZTsobC53aWR0aDxwLndpZHRofHxsLmhlaWdodDxwLmhlaWdodCkmJnRoaXMuYWRqdXN0VXZzKGksbix1LHMpfSxlLnByb3RvdHlwZS5hZGp1c3RVdnM9ZnVuY3Rpb24odCxpLG4sYSl7Zm9yKHZhciBzPWkuYmFzZVRleHR1cmUsbz0xZS02LGg9bithKjIsdT1pLmZyYW1lLGw9dS53aWR0aC9zLndpZHRoLGM9dS5oZWlnaHQvcy5oZWlnaHQsZj11LngvdS53aWR0aCxkPXUueS91LmhlaWdodCxwPU1hdGguZmxvb3IodFtuXStvKSx2PU1hdGguZmxvb3IodFtuKzFdK28pLF89bisyO188aDtfKz0yKXA9TWF0aC5taW4ocCxNYXRoLmZsb29yKHRbX10rbykpLHY9TWF0aC5taW4odixNYXRoLmZsb29yKHRbXysxXStvKSk7Zi09cCxkLT12O2Zvcih2YXIgXz1uO188aDtfKz0yKXRbX109KHRbX10rZikqbCx0W18rMV09KHRbXysxXStkKSpjfSxlLkJBVENIQUJMRV9TSVpFPTEwMCxlfShHYSksQWQ9ZnVuY3Rpb24ocil7UWkoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9ciE9PW51bGwmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LndpZHRoPTAsdC5hbGlnbm1lbnQ9LjUsdC5uYXRpdmU9ITEsdC5jYXA9ZWUuQlVUVCx0LmpvaW49S3QuTUlURVIsdC5taXRlckxpbWl0PTEwLHR9cmV0dXJuIGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGU7cmV0dXJuIHQuY29sb3I9dGhpcy5jb2xvcix0LmFscGhhPXRoaXMuYWxwaGEsdC50ZXh0dXJlPXRoaXMudGV4dHVyZSx0Lm1hdHJpeD10aGlzLm1hdHJpeCx0LnZpc2libGU9dGhpcy52aXNpYmxlLHQud2lkdGg9dGhpcy53aWR0aCx0LmFsaWdubWVudD10aGlzLmFsaWdubWVudCx0Lm5hdGl2ZT10aGlzLm5hdGl2ZSx0LmNhcD10aGlzLmNhcCx0LmpvaW49dGhpcy5qb2luLHQubWl0ZXJMaW1pdD10aGlzLm1pdGVyTGltaXQsdH0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLHRoaXMuY29sb3I9MCx0aGlzLmFsaWdubWVudD0uNSx0aGlzLndpZHRoPTAsdGhpcy5uYXRpdmU9ITF9LGV9KHNzKSxDZD1uZXcgRmxvYXQzMkFycmF5KDMpLGVuPXt9LFZyPWZ1bmN0aW9uKHIpe1FpKGUscik7ZnVuY3Rpb24gZSh0KXt0PT09dm9pZCAwJiYodD1udWxsKTt2YXIgaT1yLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuc2hhZGVyPW51bGwsaS5wbHVnaW5OYW1lPSJiYXRjaCIsaS5jdXJyZW50UGF0aD1udWxsLGkuYmF0Y2hlcz1bXSxpLmJhdGNoVGludD0tMSxpLmJhdGNoRGlydHk9LTEsaS52ZXJ0ZXhEYXRhPW51bGwsaS5fZmlsbFN0eWxlPW5ldyBzcyxpLl9saW5lU3R5bGU9bmV3IEFkLGkuX21hdHJpeD1udWxsLGkuX2hvbGVNb2RlPSExLGkuc3RhdGU9ZGUuZm9yMmQoKSxpLl9nZW9tZXRyeT10fHxuZXcgUmQsaS5fZ2VvbWV0cnkucmVmQ291bnQrKyxpLl90cmFuc2Zvcm1JRD0tMSxpLnRpbnQ9MTY3NzcyMTUsaS5ibGVuZE1vZGU9Ti5OT1JNQUwsaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnZW9tZXRyeSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZW9tZXRyeX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmlzaFBvbHkoKSxuZXcgZSh0aGlzLl9nZW9tZXRyeSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYmxlbmRNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuYmxlbmRNb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5zdGF0ZS5ibGVuZE1vZGU9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRpbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGludH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3RpbnQ9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpbGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsbFN0eWxlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saW5lU3R5bGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubGluZVN0eWxlPWZ1bmN0aW9uKHQsaSxuLGEscyl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PW51bGwpLGk9PT12b2lkIDAmJihpPTApLG49PT12b2lkIDAmJihuPTEpLGE9PT12b2lkIDAmJihhPS41KSxzPT09dm9pZCAwJiYocz0hMSksdHlwZW9mIHQ9PSJudW1iZXIiJiYodD17d2lkdGg6dCxjb2xvcjppLGFscGhhOm4sYWxpZ25tZW50OmEsbmF0aXZlOnN9KSx0aGlzLmxpbmVUZXh0dXJlU3R5bGUodCl9LGUucHJvdG90eXBlLmxpbmVUZXh0dXJlU3R5bGU9ZnVuY3Rpb24odCl7dD1PYmplY3QuYXNzaWduKHt3aWR0aDowLHRleHR1cmU6TC5XSElURSxjb2xvcjp0JiZ0LnRleHR1cmU/MTY3NzcyMTU6MCxhbHBoYToxLG1hdHJpeDpudWxsLGFsaWdubWVudDouNSxuYXRpdmU6ITEsY2FwOmVlLkJVVFQsam9pbjpLdC5NSVRFUixtaXRlckxpbWl0OjEwfSx0KSx0aGlzLmN1cnJlbnRQYXRoJiZ0aGlzLnN0YXJ0UG9seSgpO3ZhciBpPXQud2lkdGg+MCYmdC5hbHBoYT4wO3JldHVybiBpPyh0Lm1hdHJpeCYmKHQubWF0cml4PXQubWF0cml4LmNsb25lKCksdC5tYXRyaXguaW52ZXJ0KCkpLE9iamVjdC5hc3NpZ24odGhpcy5fbGluZVN0eWxlLHt2aXNpYmxlOml9LHQpKTp0aGlzLl9saW5lU3R5bGUucmVzZXQoKSx0aGlzfSxlLnByb3RvdHlwZS5zdGFydFBvbHk9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnJlbnRQYXRoKXt2YXIgdD10aGlzLmN1cnJlbnRQYXRoLnBvaW50cyxpPXRoaXMuY3VycmVudFBhdGgucG9pbnRzLmxlbmd0aDtpPjImJih0aGlzLmRyYXdTaGFwZSh0aGlzLmN1cnJlbnRQYXRoKSx0aGlzLmN1cnJlbnRQYXRoPW5ldyBicix0aGlzLmN1cnJlbnRQYXRoLmNsb3NlU3Ryb2tlPSExLHRoaXMuY3VycmVudFBhdGgucG9pbnRzLnB1c2godFtpLTJdLHRbaS0xXSkpfWVsc2UgdGhpcy5jdXJyZW50UGF0aD1uZXcgYnIsdGhpcy5jdXJyZW50UGF0aC5jbG9zZVN0cm9rZT0hMX0sZS5wcm90b3R5cGUuZmluaXNoUG9seT1mdW5jdGlvbigpe3RoaXMuY3VycmVudFBhdGgmJih0aGlzLmN1cnJlbnRQYXRoLnBvaW50cy5sZW5ndGg+Mj8odGhpcy5kcmF3U2hhcGUodGhpcy5jdXJyZW50UGF0aCksdGhpcy5jdXJyZW50UGF0aD1udWxsKTp0aGlzLmN1cnJlbnRQYXRoLnBvaW50cy5sZW5ndGg9MCl9LGUucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLnN0YXJ0UG9seSgpLHRoaXMuY3VycmVudFBhdGgucG9pbnRzWzBdPXQsdGhpcy5jdXJyZW50UGF0aC5wb2ludHNbMV09aSx0aGlzfSxlLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24odCxpKXt0aGlzLmN1cnJlbnRQYXRofHx0aGlzLm1vdmVUbygwLDApO3ZhciBuPXRoaXMuY3VycmVudFBhdGgucG9pbnRzLGE9bltuLmxlbmd0aC0yXSxzPW5bbi5sZW5ndGgtMV07cmV0dXJuKGEhPT10fHxzIT09aSkmJm4ucHVzaCh0LGkpLHRoaXN9LGUucHJvdG90eXBlLl9pbml0Q3VydmU9ZnVuY3Rpb24odCxpKXt0PT09dm9pZCAwJiYodD0wKSxpPT09dm9pZCAwJiYoaT0wKSx0aGlzLmN1cnJlbnRQYXRoP3RoaXMuY3VycmVudFBhdGgucG9pbnRzLmxlbmd0aD09PTAmJih0aGlzLmN1cnJlbnRQYXRoLnBvaW50cz1bdCxpXSk6dGhpcy5tb3ZlVG8odCxpKX0sZS5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbz1mdW5jdGlvbih0LGksbixhKXt0aGlzLl9pbml0Q3VydmUoKTt2YXIgcz10aGlzLmN1cnJlbnRQYXRoLnBvaW50cztyZXR1cm4gcy5sZW5ndGg9PT0wJiZ0aGlzLm1vdmVUbygwLDApLFNkLmN1cnZlVG8odCxpLG4sYSxzKSx0aGlzfSxlLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKHQsaSxuLGEscyxvKXtyZXR1cm4gdGhpcy5faW5pdEN1cnZlKCksd2QuY3VydmVUbyh0LGksbixhLHMsbyx0aGlzLmN1cnJlbnRQYXRoLnBvaW50cyksdGhpc30sZS5wcm90b3R5cGUuYXJjVG89ZnVuY3Rpb24odCxpLG4sYSxzKXt0aGlzLl9pbml0Q3VydmUodCxpKTt2YXIgbz10aGlzLmN1cnJlbnRQYXRoLnBvaW50cyxoPWZzLmN1cnZlVG8odCxpLG4sYSxzLG8pO2lmKGgpe3ZhciB1PWguY3gsbD1oLmN5LGM9aC5yYWRpdXMsZj1oLnN0YXJ0QW5nbGUsZD1oLmVuZEFuZ2xlLHA9aC5hbnRpY2xvY2t3aXNlO3RoaXMuYXJjKHUsbCxjLGYsZCxwKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKHQsaSxuLGEscyxvKXtpZihvPT09dm9pZCAwJiYobz0hMSksYT09PXMpcmV0dXJuIHRoaXM7IW8mJnM8PWE/cys9eXI6byYmYTw9cyYmKGErPXlyKTt2YXIgaD1zLWE7aWYoaD09PTApcmV0dXJuIHRoaXM7dmFyIHU9dCtNYXRoLmNvcyhhKSpuLGw9aStNYXRoLnNpbihhKSpuLGM9dGhpcy5fZ2VvbWV0cnkuY2xvc2VQb2ludEVwcyxmPXRoaXMuY3VycmVudFBhdGg/dGhpcy5jdXJyZW50UGF0aC5wb2ludHM6bnVsbDtpZihmKXt2YXIgZD1NYXRoLmFicyhmW2YubGVuZ3RoLTJdLXUpLHA9TWF0aC5hYnMoZltmLmxlbmd0aC0xXS1sKTtkPGMmJnA8Y3x8Zi5wdXNoKHUsbCl9ZWxzZSB0aGlzLm1vdmVUbyh1LGwpLGY9dGhpcy5jdXJyZW50UGF0aC5wb2ludHM7cmV0dXJuIGZzLmFyYyh1LGwsdCxpLG4sYSxzLG8sZiksdGhpc30sZS5wcm90b3R5cGUuYmVnaW5GaWxsPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PTApLGk9PT12b2lkIDAmJihpPTEpLHRoaXMuYmVnaW5UZXh0dXJlRmlsbCh7dGV4dHVyZTpMLldISVRFLGNvbG9yOnQsYWxwaGE6aX0pfSxlLnByb3RvdHlwZS5iZWdpblRleHR1cmVGaWxsPWZ1bmN0aW9uKHQpe3Q9T2JqZWN0LmFzc2lnbih7dGV4dHVyZTpMLldISVRFLGNvbG9yOjE2Nzc3MjE1LGFscGhhOjEsbWF0cml4Om51bGx9LHQpLHRoaXMuY3VycmVudFBhdGgmJnRoaXMuc3RhcnRQb2x5KCk7dmFyIGk9dC5hbHBoYT4wO3JldHVybiBpPyh0Lm1hdHJpeCYmKHQubWF0cml4PXQubWF0cml4LmNsb25lKCksdC5tYXRyaXguaW52ZXJ0KCkpLE9iamVjdC5hc3NpZ24odGhpcy5fZmlsbFN0eWxlLHt2aXNpYmxlOml9LHQpKTp0aGlzLl9maWxsU3R5bGUucmVzZXQoKSx0aGlzfSxlLnByb3RvdHlwZS5lbmRGaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluaXNoUG9seSgpLHRoaXMuX2ZpbGxTdHlsZS5yZXNldCgpLHRoaXN9LGUucHJvdG90eXBlLmRyYXdSZWN0PWZ1bmN0aW9uKHQsaSxuLGEpe3JldHVybiB0aGlzLmRyYXdTaGFwZShuZXcgSCh0LGksbixhKSl9LGUucHJvdG90eXBlLmRyYXdSb3VuZGVkUmVjdD1mdW5jdGlvbih0LGksbixhLHMpe3JldHVybiB0aGlzLmRyYXdTaGFwZShuZXcgTmwodCxpLG4sYSxzKSl9LGUucHJvdG90eXBlLmRyYXdDaXJjbGU9ZnVuY3Rpb24odCxpLG4pe3JldHVybiB0aGlzLmRyYXdTaGFwZShuZXcgRGwodCxpLG4pKX0sZS5wcm90b3R5cGUuZHJhd0VsbGlwc2U9ZnVuY3Rpb24odCxpLG4sYSl7cmV0dXJuIHRoaXMuZHJhd1NoYXBlKG5ldyBGbCh0LGksbixhKSl9LGUucHJvdG90eXBlLmRyYXdQb2x5Z29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxpPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWlbbl09dFtuXTt2YXIgYSxzPSEwLG89aVswXTtvLnBvaW50cz8ocz1vLmNsb3NlU3Ryb2tlLGE9by5wb2ludHMpOkFycmF5LmlzQXJyYXkoaVswXSk/YT1pWzBdOmE9aTt2YXIgaD1uZXcgYnIoYSk7cmV0dXJuIGguY2xvc2VTdHJva2U9cyx0aGlzLmRyYXdTaGFwZShoKSx0aGlzfSxlLnByb3RvdHlwZS5kcmF3U2hhcGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2hvbGVNb2RlP3RoaXMuX2dlb21ldHJ5LmRyYXdIb2xlKHQsdGhpcy5fbWF0cml4KTp0aGlzLl9nZW9tZXRyeS5kcmF3U2hhcGUodCx0aGlzLl9maWxsU3R5bGUuY2xvbmUoKSx0aGlzLl9saW5lU3R5bGUuY2xvbmUoKSx0aGlzLl9tYXRyaXgpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dlb21ldHJ5LmNsZWFyKCksdGhpcy5fbGluZVN0eWxlLnJlc2V0KCksdGhpcy5fZmlsbFN0eWxlLnJlc2V0KCksdGhpcy5fYm91bmRzSUQrKyx0aGlzLl9tYXRyaXg9bnVsbCx0aGlzLl9ob2xlTW9kZT0hMSx0aGlzLmN1cnJlbnRQYXRoPW51bGwsdGhpc30sZS5wcm90b3R5cGUuaXNGYXN0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dlb21ldHJ5LmdyYXBoaWNzRGF0YTtyZXR1cm4gdC5sZW5ndGg9PT0xJiZ0WzBdLnNoYXBlLnR5cGU9PT1tdC5SRUNUJiYhdFswXS5tYXRyaXgmJiF0WzBdLmhvbGVzLmxlbmd0aCYmISh0WzBdLmxpbmVTdHlsZS52aXNpYmxlJiZ0WzBdLmxpbmVTdHlsZS53aWR0aCl9LGUucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24odCl7dGhpcy5maW5pc2hQb2x5KCk7dmFyIGk9dGhpcy5fZ2VvbWV0cnk7aS51cGRhdGVCYXRjaGVzKCksaS5iYXRjaGFibGU/KHRoaXMuYmF0Y2hEaXJ0eSE9PWkuYmF0Y2hEaXJ0eSYmdGhpcy5fcG9wdWxhdGVCYXRjaGVzKCksdGhpcy5fcmVuZGVyQmF0Y2hlZCh0KSk6KHQuYmF0Y2guZmx1c2goKSx0aGlzLl9yZW5kZXJEaXJlY3QodCkpfSxlLnByb3RvdHlwZS5fcG9wdWxhdGVCYXRjaGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2VvbWV0cnksaT10aGlzLmJsZW5kTW9kZSxuPXQuYmF0Y2hlcy5sZW5ndGg7dGhpcy5iYXRjaFRpbnQ9LTEsdGhpcy5fdHJhbnNmb3JtSUQ9LTEsdGhpcy5iYXRjaERpcnR5PXQuYmF0Y2hEaXJ0eSx0aGlzLmJhdGNoZXMubGVuZ3RoPW4sdGhpcy52ZXJ0ZXhEYXRhPW5ldyBGbG9hdDMyQXJyYXkodC5wb2ludHMpO2Zvcih2YXIgYT0wO2E8bjthKyspe3ZhciBzPXQuYmF0Y2hlc1thXSxvPXMuc3R5bGUuY29sb3IsaD1uZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGV4RGF0YS5idWZmZXIscy5hdHRyaWJTdGFydCo0KjIscy5hdHRyaWJTaXplKjIpLHU9bmV3IEZsb2F0MzJBcnJheSh0LnV2c0Zsb2F0MzIuYnVmZmVyLHMuYXR0cmliU3RhcnQqNCoyLHMuYXR0cmliU2l6ZSoyKSxsPW5ldyBVaW50MTZBcnJheSh0LmluZGljZXNVaW50MTYuYnVmZmVyLHMuc3RhcnQqMixzLnNpemUpLGM9e3ZlcnRleERhdGE6aCxibGVuZE1vZGU6aSxpbmRpY2VzOmwsdXZzOnUsX2JhdGNoUkdCOndlKG8pLF90aW50UkdCOm8sX3RleHR1cmU6cy5zdHlsZS50ZXh0dXJlLGFscGhhOnMuc3R5bGUuYWxwaGEsd29ybGRBbHBoYToxfTt0aGlzLmJhdGNoZXNbYV09Y319LGUucHJvdG90eXBlLl9yZW5kZXJCYXRjaGVkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuYmF0Y2hlcy5sZW5ndGgpe3QuYmF0Y2guc2V0T2JqZWN0UmVuZGVyZXIodC5wbHVnaW5zW3RoaXMucGx1Z2luTmFtZV0pLHRoaXMuY2FsY3VsYXRlVmVydGljZXMoKSx0aGlzLmNhbGN1bGF0ZVRpbnRzKCk7Zm9yKHZhciBpPTAsbj10aGlzLmJhdGNoZXMubGVuZ3RoO2k8bjtpKyspe3ZhciBhPXRoaXMuYmF0Y2hlc1tpXTthLndvcmxkQWxwaGE9dGhpcy53b3JsZEFscGhhKmEuYWxwaGEsdC5wbHVnaW5zW3RoaXMucGx1Z2luTmFtZV0ucmVuZGVyKGEpfX19LGUucHJvdG90eXBlLl9yZW5kZXJEaXJlY3Q9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fcmVzb2x2ZURpcmVjdFNoYWRlcih0KSxuPXRoaXMuX2dlb21ldHJ5LGE9dGhpcy50aW50LHM9dGhpcy53b3JsZEFscGhhLG89aS51bmlmb3JtcyxoPW4uZHJhd0NhbGxzO28udHJhbnNsYXRpb25NYXRyaXg9dGhpcy50cmFuc2Zvcm0ud29ybGRUcmFuc2Zvcm0sby50aW50WzBdPShhPj4xNiYyNTUpLzI1NSpzLG8udGludFsxXT0oYT4+OCYyNTUpLzI1NSpzLG8udGludFsyXT0oYSYyNTUpLzI1NSpzLG8udGludFszXT1zLHQuc2hhZGVyLmJpbmQoaSksdC5nZW9tZXRyeS5iaW5kKG4saSksdC5zdGF0ZS5zZXQodGhpcy5zdGF0ZSk7Zm9yKHZhciB1PTAsbD1oLmxlbmd0aDt1PGw7dSsrKXRoaXMuX3JlbmRlckRyYXdDYWxsRGlyZWN0KHQsbi5kcmF3Q2FsbHNbdV0pfSxlLnByb3RvdHlwZS5fcmVuZGVyRHJhd0NhbGxEaXJlY3Q9ZnVuY3Rpb24odCxpKXtmb3IodmFyIG49aS50ZXhBcnJheSxhPWkudHlwZSxzPWkuc2l6ZSxvPWkuc3RhcnQsaD1uLmNvdW50LHU9MDt1PGg7dSsrKXQudGV4dHVyZS5iaW5kKG4uZWxlbWVudHNbdV0sdSk7dC5nZW9tZXRyeS5kcmF3KGEscyxvKX0sZS5wcm90b3R5cGUuX3Jlc29sdmVEaXJlY3RTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5zaGFkZXIsbj10aGlzLnBsdWdpbk5hbWU7aWYoIWkpe2lmKCFlbltuXSl7Zm9yKHZhciBhPXQucGx1Z2luc1tuXS5NQVhfVEVYVFVSRVMscz1uZXcgSW50MzJBcnJheShhKSxvPTA7bzxhO28rKylzW29dPW87dmFyIGg9e3RpbnQ6bmV3IEZsb2F0MzJBcnJheShbMSwxLDEsMV0pLHRyYW5zbGF0aW9uTWF0cml4Om5ldyB2dCxkZWZhdWx0OmNlLmZyb20oe3VTYW1wbGVyczpzfSwhMCl9LHU9dC5wbHVnaW5zW25dLl9zaGFkZXIucHJvZ3JhbTtlbltuXT1uZXcgSnQodSxoKX1pPWVuW25dfXJldHVybiBpfSxlLnByb3RvdHlwZS5fY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5maW5pc2hQb2x5KCk7dmFyIHQ9dGhpcy5fZ2VvbWV0cnk7aWYodC5ncmFwaGljc0RhdGEubGVuZ3RoKXt2YXIgaT10LmJvdW5kcyxuPWkubWluWCxhPWkubWluWSxzPWkubWF4WCxvPWkubWF4WTt0aGlzLl9ib3VuZHMuYWRkRnJhbWUodGhpcy50cmFuc2Zvcm0sbixhLHMsbyl9fSxlLnByb3RvdHlwZS5jb250YWluc1BvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZSh0LGUuX1RFTVBfUE9JTlQpLHRoaXMuX2dlb21ldHJ5LmNvbnRhaW5zUG9pbnQoZS5fVEVNUF9QT0lOVCl9LGUucHJvdG90eXBlLmNhbGN1bGF0ZVRpbnRzPWZ1bmN0aW9uKCl7aWYodGhpcy5iYXRjaFRpbnQhPT10aGlzLnRpbnQpe3RoaXMuYmF0Y2hUaW50PXRoaXMudGludDtmb3IodmFyIHQ9d2UodGhpcy50aW50LENkKSxpPTA7aTx0aGlzLmJhdGNoZXMubGVuZ3RoO2krKyl7dmFyIG49dGhpcy5iYXRjaGVzW2ldLGE9bi5fYmF0Y2hSR0Iscz10WzBdKmFbMF0qMjU1LG89dFsxXSphWzFdKjI1NSxoPXRbMl0qYVsyXSoyNTUsdT0oczw8MTYpKyhvPDw4KSsoaHwwKTtuLl90aW50UkdCPSh1Pj4xNikrKHUmNjUyODApKygodSYyNTUpPDwxNil9fX0sZS5wcm90b3R5cGUuY2FsY3VsYXRlVmVydGljZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zZm9ybS5fd29ybGRJRDtpZih0aGlzLl90cmFuc2Zvcm1JRCE9PXQpe3RoaXMuX3RyYW5zZm9ybUlEPXQ7Zm9yKHZhciBpPXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLG49aS5hLGE9aS5iLHM9aS5jLG89aS5kLGg9aS50eCx1PWkudHksbD10aGlzLl9nZW9tZXRyeS5wb2ludHMsYz10aGlzLnZlcnRleERhdGEsZj0wLGQ9MDtkPGwubGVuZ3RoO2QrPTIpe3ZhciBwPWxbZF0sdj1sW2QrMV07Y1tmKytdPW4qcCtzKnYraCxjW2YrK109byp2K2EqcCt1fX19LGUucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudFBhdGg7cmV0dXJuIHQmJih0LmNsb3NlU3Ryb2tlPSEwLHRoaXMuZmluaXNoUG9seSgpKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRNYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hdHJpeD10LHRoaXN9LGUucHJvdG90eXBlLmJlZ2luSG9sZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmlzaFBvbHkoKSx0aGlzLl9ob2xlTW9kZT0hMCx0aGlzfSxlLnByb3RvdHlwZS5lbmRIb2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluaXNoUG9seSgpLHRoaXMuX2hvbGVNb2RlPSExLHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnkucmVmQ291bnQtLSx0aGlzLl9nZW9tZXRyeS5yZWZDb3VudD09PTAmJnRoaXMuX2dlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLl9tYXRyaXg9bnVsbCx0aGlzLmN1cnJlbnRQYXRoPW51bGwsdGhpcy5fbGluZVN0eWxlLmRlc3Ryb3koKSx0aGlzLl9saW5lU3R5bGU9bnVsbCx0aGlzLl9maWxsU3R5bGUuZGVzdHJveSgpLHRoaXMuX2ZpbGxTdHlsZT1udWxsLHRoaXMuX2dlb21ldHJ5PW51bGwsdGhpcy5zaGFkZXI9bnVsbCx0aGlzLnZlcnRleERhdGE9bnVsbCx0aGlzLmJhdGNoZXMubGVuZ3RoPTAsdGhpcy5iYXRjaGVzPW51bGwsci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsdCl9LGUubmV4dFJvdW5kZWRSZWN0QmVoYXZpb3I9ITEsZS5fVEVNUF9QT0lOVD1uZXcgdHQsZX0oWHQpO3ZhciBybj1mdW5jdGlvbihyLGUpe3JldHVybiBybj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0scm4ocixlKX07ZnVuY3Rpb24gSWQocixlKXtybihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBRZT1uZXcgdHQsT2Q9bmV3IFVpbnQxNkFycmF5KFswLDEsMiwwLDIsM10pLHRyPWZ1bmN0aW9uKHIpe0lkKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaT1yLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2FuY2hvcj1uZXcgUmUoaS5fb25BbmNob3JVcGRhdGUsaSx0P3QuZGVmYXVsdEFuY2hvci54OjAsdD90LmRlZmF1bHRBbmNob3IueTowKSxpLl90ZXh0dXJlPW51bGwsaS5fd2lkdGg9MCxpLl9oZWlnaHQ9MCxpLl90aW50PW51bGwsaS5fdGludFJHQj1udWxsLGkudGludD0xNjc3NzIxNSxpLmJsZW5kTW9kZT1OLk5PUk1BTCxpLl9jYWNoZWRUaW50PTE2Nzc3MjE1LGkudXZzPW51bGwsaS50ZXh0dXJlPXR8fEwuRU1QVFksaS52ZXJ0ZXhEYXRhPW5ldyBGbG9hdDMyQXJyYXkoOCksaS52ZXJ0ZXhUcmltbWVkRGF0YT1udWxsLGkuX3RyYW5zZm9ybUlEPS0xLGkuX3RleHR1cmVJRD0tMSxpLl90cmFuc2Zvcm1UcmltbWVkSUQ9LTEsaS5fdGV4dHVyZVRyaW1tZWRJRD0tMSxpLmluZGljZXM9T2QsaS5wbHVnaW5OYW1lPSJiYXRjaCIsaS5pc1Nwcml0ZT0hMCxpLl9yb3VuZFBpeGVscz1JLlJPVU5EX1BJWEVMUyxpfXJldHVybiBlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dHVyZUlEPS0xLHRoaXMuX3RleHR1cmVUcmltbWVkSUQ9LTEsdGhpcy5fY2FjaGVkVGludD0xNjc3NzIxNSx0aGlzLl93aWR0aCYmKHRoaXMuc2NhbGUueD1QZSh0aGlzLnNjYWxlLngpKnRoaXMuX3dpZHRoL3RoaXMuX3RleHR1cmUub3JpZy53aWR0aCksdGhpcy5faGVpZ2h0JiYodGhpcy5zY2FsZS55PVBlKHRoaXMuc2NhbGUueSkqdGhpcy5faGVpZ2h0L3RoaXMuX3RleHR1cmUub3JpZy5oZWlnaHQpfSxlLnByb3RvdHlwZS5fb25BbmNob3JVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2Zvcm1JRD0tMSx0aGlzLl90cmFuc2Zvcm1UcmltbWVkSUQ9LTF9LGUucHJvdG90eXBlLmNhbGN1bGF0ZVZlcnRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGV4dHVyZTtpZighKHRoaXMuX3RyYW5zZm9ybUlEPT09dGhpcy50cmFuc2Zvcm0uX3dvcmxkSUQmJnRoaXMuX3RleHR1cmVJRD09PXQuX3VwZGF0ZUlEKSl7dGhpcy5fdGV4dHVyZUlEIT09dC5fdXBkYXRlSUQmJih0aGlzLnV2cz10aGlzLl90ZXh0dXJlLl91dnMudXZzRmxvYXQzMiksdGhpcy5fdHJhbnNmb3JtSUQ9dGhpcy50cmFuc2Zvcm0uX3dvcmxkSUQsdGhpcy5fdGV4dHVyZUlEPXQuX3VwZGF0ZUlEO3ZhciBpPXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLG49aS5hLGE9aS5iLHM9aS5jLG89aS5kLGg9aS50eCx1PWkudHksbD10aGlzLnZlcnRleERhdGEsYz10LnRyaW0sZj10Lm9yaWcsZD10aGlzLl9hbmNob3IscD0wLHY9MCxfPTAsbT0wO2lmKGM/KHY9Yy54LWQuX3gqZi53aWR0aCxwPXYrYy53aWR0aCxtPWMueS1kLl95KmYuaGVpZ2h0LF89bStjLmhlaWdodCk6KHY9LWQuX3gqZi53aWR0aCxwPXYrZi53aWR0aCxtPS1kLl95KmYuaGVpZ2h0LF89bStmLmhlaWdodCksbFswXT1uKnYrcyptK2gsbFsxXT1vKm0rYSp2K3UsbFsyXT1uKnArcyptK2gsbFszXT1vKm0rYSpwK3UsbFs0XT1uKnArcypfK2gsbFs1XT1vKl8rYSpwK3UsbFs2XT1uKnYrcypfK2gsbFs3XT1vKl8rYSp2K3UsdGhpcy5fcm91bmRQaXhlbHMpZm9yKHZhciBnPUkuUkVTT0xVVElPTix5PTA7eTxsLmxlbmd0aDsrK3kpbFt5XT1NYXRoLnJvdW5kKChsW3ldKmd8MCkvZyl9fSxlLnByb3RvdHlwZS5jYWxjdWxhdGVUcmltbWVkVmVydGljZXM9ZnVuY3Rpb24oKXtpZighdGhpcy52ZXJ0ZXhUcmltbWVkRGF0YSl0aGlzLnZlcnRleFRyaW1tZWREYXRhPW5ldyBGbG9hdDMyQXJyYXkoOCk7ZWxzZSBpZih0aGlzLl90cmFuc2Zvcm1UcmltbWVkSUQ9PT10aGlzLnRyYW5zZm9ybS5fd29ybGRJRCYmdGhpcy5fdGV4dHVyZVRyaW1tZWRJRD09PXRoaXMuX3RleHR1cmUuX3VwZGF0ZUlEKXJldHVybjt0aGlzLl90cmFuc2Zvcm1UcmltbWVkSUQ9dGhpcy50cmFuc2Zvcm0uX3dvcmxkSUQsdGhpcy5fdGV4dHVyZVRyaW1tZWRJRD10aGlzLl90ZXh0dXJlLl91cGRhdGVJRDt2YXIgdD10aGlzLl90ZXh0dXJlLGk9dGhpcy52ZXJ0ZXhUcmltbWVkRGF0YSxuPXQub3JpZyxhPXRoaXMuX2FuY2hvcixzPXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLG89cy5hLGg9cy5iLHU9cy5jLGw9cy5kLGM9cy50eCxmPXMudHksZD0tYS5feCpuLndpZHRoLHA9ZCtuLndpZHRoLHY9LWEuX3kqbi5oZWlnaHQsXz12K24uaGVpZ2h0O2lbMF09bypkK3UqditjLGlbMV09bCp2K2gqZCtmLGlbMl09bypwK3UqditjLGlbM109bCp2K2gqcCtmLGlbNF09bypwK3UqXytjLGlbNV09bCpfK2gqcCtmLGlbNl09bypkK3UqXytjLGlbN109bCpfK2gqZCtmfSxlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKHQpe3RoaXMuY2FsY3VsYXRlVmVydGljZXMoKSx0LmJhdGNoLnNldE9iamVjdFJlbmRlcmVyKHQucGx1Z2luc1t0aGlzLnBsdWdpbk5hbWVdKSx0LnBsdWdpbnNbdGhpcy5wbHVnaW5OYW1lXS5yZW5kZXIodGhpcyl9LGUucHJvdG90eXBlLl9jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90ZXh0dXJlLnRyaW0saT10aGlzLl90ZXh0dXJlLm9yaWc7IXR8fHQud2lkdGg9PT1pLndpZHRoJiZ0LmhlaWdodD09PWkuaGVpZ2h0Pyh0aGlzLmNhbGN1bGF0ZVZlcnRpY2VzKCksdGhpcy5fYm91bmRzLmFkZFF1YWQodGhpcy52ZXJ0ZXhEYXRhKSk6KHRoaXMuY2FsY3VsYXRlVHJpbW1lZFZlcnRpY2VzKCksdGhpcy5fYm91bmRzLmFkZFF1YWQodGhpcy52ZXJ0ZXhUcmltbWVkRGF0YSkpfSxlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wPyh0aGlzLl9sb2NhbEJvdW5kc3x8KHRoaXMuX2xvY2FsQm91bmRzPW5ldyBFciksdGhpcy5fbG9jYWxCb3VuZHMubWluWD10aGlzLl90ZXh0dXJlLm9yaWcud2lkdGgqLXRoaXMuX2FuY2hvci5feCx0aGlzLl9sb2NhbEJvdW5kcy5taW5ZPXRoaXMuX3RleHR1cmUub3JpZy5oZWlnaHQqLXRoaXMuX2FuY2hvci5feSx0aGlzLl9sb2NhbEJvdW5kcy5tYXhYPXRoaXMuX3RleHR1cmUub3JpZy53aWR0aCooMS10aGlzLl9hbmNob3IuX3gpLHRoaXMuX2xvY2FsQm91bmRzLm1heFk9dGhpcy5fdGV4dHVyZS5vcmlnLmhlaWdodCooMS10aGlzLl9hbmNob3IuX3kpLHR8fCh0aGlzLl9sb2NhbEJvdW5kc1JlY3R8fCh0aGlzLl9sb2NhbEJvdW5kc1JlY3Q9bmV3IEgpLHQ9dGhpcy5fbG9jYWxCb3VuZHNSZWN0KSx0aGlzLl9sb2NhbEJvdW5kcy5nZXRSZWN0YW5nbGUodCkpOnIucHJvdG90eXBlLmdldExvY2FsQm91bmRzLmNhbGwodGhpcyx0KX0sZS5wcm90b3R5cGUuY29udGFpbnNQb2ludD1mdW5jdGlvbih0KXt0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZSh0LFFlKTt2YXIgaT10aGlzLl90ZXh0dXJlLm9yaWcud2lkdGgsbj10aGlzLl90ZXh0dXJlLm9yaWcuaGVpZ2h0LGE9LWkqdGhpcy5hbmNob3IueCxzPTA7cmV0dXJuIFFlLng+PWEmJlFlLng8YStpJiYocz0tbip0aGlzLmFuY2hvci55LFFlLnk+PXMmJlFlLnk8cytuKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXtyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyx0KSx0aGlzLl90ZXh0dXJlLm9mZigidXBkYXRlIix0aGlzLl9vblRleHR1cmVVcGRhdGUsdGhpcyksdGhpcy5fYW5jaG9yPW51bGw7dmFyIGk9dHlwZW9mIHQ9PSJib29sZWFuIj90OnQmJnQudGV4dHVyZTtpZihpKXt2YXIgbj10eXBlb2YgdD09ImJvb2xlYW4iP3Q6dCYmdC5iYXNlVGV4dHVyZTt0aGlzLl90ZXh0dXJlLmRlc3Ryb3koISFuKX10aGlzLl90ZXh0dXJlPW51bGx9LGUuZnJvbT1mdW5jdGlvbih0LGkpe3ZhciBuPXQgaW5zdGFuY2VvZiBMP3Q6TC5mcm9tKHQsaSk7cmV0dXJuIG5ldyBlKG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJvdW5kUGl4ZWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdW5kUGl4ZWxzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcm91bmRQaXhlbHMhPT10JiYodGhpcy5fdHJhbnNmb3JtSUQ9LTEpLHRoaXMuX3JvdW5kUGl4ZWxzPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpKnRoaXMuX3RleHR1cmUub3JpZy53aWR0aH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBpPVBlKHRoaXMuc2NhbGUueCl8fDE7dGhpcy5zY2FsZS54PWkqdC90aGlzLl90ZXh0dXJlLm9yaWcud2lkdGgsdGhpcy5fd2lkdGg9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLnkpKnRoaXMuX3RleHR1cmUub3JpZy5oZWlnaHR9LHNldDpmdW5jdGlvbih0KXt2YXIgaT1QZSh0aGlzLnNjYWxlLnkpfHwxO3RoaXMuc2NhbGUueT1pKnQvdGhpcy5fdGV4dHVyZS5vcmlnLmhlaWdodCx0aGlzLl9oZWlnaHQ9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFuY2hvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmNob3J9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hbmNob3IuY29weUZyb20odCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0aW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl90aW50PXQsdGhpcy5fdGludFJHQj0odD4+MTYpKyh0JjY1MjgwKSsoKHQmMjU1KTw8MTYpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGV4dHVyZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXh0dXJlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdGV4dHVyZSE9PXQmJih0aGlzLl90ZXh0dXJlJiZ0aGlzLl90ZXh0dXJlLm9mZigidXBkYXRlIix0aGlzLl9vblRleHR1cmVVcGRhdGUsdGhpcyksdGhpcy5fdGV4dHVyZT10fHxMLkVNUFRZLHRoaXMuX2NhY2hlZFRpbnQ9MTY3NzcyMTUsdGhpcy5fdGV4dHVyZUlEPS0xLHRoaXMuX3RleHR1cmVUcmltbWVkSUQ9LTEsdCYmKHQuYmFzZVRleHR1cmUudmFsaWQ/dGhpcy5fb25UZXh0dXJlVXBkYXRlKCk6dC5vbmNlKCJ1cGRhdGUiLHRoaXMuX29uVGV4dHVyZVVwZGF0ZSx0aGlzKSkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KFh0KTt2YXIgbm49ZnVuY3Rpb24ocixlKXtyZXR1cm4gbm49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LG5uKHIsZSl9O2Z1bmN0aW9uIE1kKHIsZSl7bm4ocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX12YXIgZXI7KGZ1bmN0aW9uKHIpe3Jbci5MSU5FQVJfVkVSVElDQUw9MF09IkxJTkVBUl9WRVJUSUNBTCIscltyLkxJTkVBUl9IT1JJWk9OVEFMPTFdPSJMSU5FQVJfSE9SSVpPTlRBTCJ9KShlcnx8KGVyPXt9KSk7dmFyIGFuPXthbGlnbjoibGVmdCIsYnJlYWtXb3JkczohMSxkcm9wU2hhZG93OiExLGRyb3BTaGFkb3dBbHBoYToxLGRyb3BTaGFkb3dBbmdsZTpNYXRoLlBJLzYsZHJvcFNoYWRvd0JsdXI6MCxkcm9wU2hhZG93Q29sb3I6ImJsYWNrIixkcm9wU2hhZG93RGlzdGFuY2U6NSxmaWxsOiJibGFjayIsZmlsbEdyYWRpZW50VHlwZTplci5MSU5FQVJfVkVSVElDQUwsZmlsbEdyYWRpZW50U3RvcHM6W10sZm9udEZhbWlseToiQXJpYWwiLGZvbnRTaXplOjI2LGZvbnRTdHlsZToibm9ybWFsIixmb250VmFyaWFudDoibm9ybWFsIixmb250V2VpZ2h0OiJub3JtYWwiLGxldHRlclNwYWNpbmc6MCxsaW5lSGVpZ2h0OjAsbGluZUpvaW46Im1pdGVyIixtaXRlckxpbWl0OjEwLHBhZGRpbmc6MCxzdHJva2U6ImJsYWNrIixzdHJva2VUaGlja25lc3M6MCx0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHRyaW06ITEsd2hpdGVTcGFjZToicHJlIix3b3JkV3JhcDohMSx3b3JkV3JhcFdpZHRoOjEwMCxsZWFkaW5nOjB9LERkPVsic2VyaWYiLCJzYW5zLXNlcmlmIiwibW9ub3NwYWNlIiwiY3Vyc2l2ZSIsImZhbnRhc3kiLCJzeXN0ZW0tdWkiXSxnZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5zdHlsZUlEPTAsdGhpcy5yZXNldCgpLG9uKHRoaXMsZSxlKX1yZXR1cm4gci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gb24oZSx0aGlzLGFuKSxuZXcgcihlKX0sci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtvbih0aGlzLGFuLGFuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJhbGlnbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbGlnbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2FsaWduIT09ZSYmKHRoaXMuX2FsaWduPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiYnJlYWtXb3JkcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9icmVha1dvcmRzfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fYnJlYWtXb3JkcyE9PWUmJih0aGlzLl9icmVha1dvcmRzPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZHJvcFNoYWRvdyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcm9wU2hhZG93fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZHJvcFNoYWRvdyE9PWUmJih0aGlzLl9kcm9wU2hhZG93PWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZHJvcFNoYWRvd0FscGhhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Ryb3BTaGFkb3dBbHBoYX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2Ryb3BTaGFkb3dBbHBoYSE9PWUmJih0aGlzLl9kcm9wU2hhZG93QWxwaGE9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJkcm9wU2hhZG93QW5nbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJvcFNoYWRvd0FuZ2xlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZHJvcFNoYWRvd0FuZ2xlIT09ZSYmKHRoaXMuX2Ryb3BTaGFkb3dBbmdsZT1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImRyb3BTaGFkb3dCbHVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Ryb3BTaGFkb3dCbHVyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZHJvcFNoYWRvd0JsdXIhPT1lJiYodGhpcy5fZHJvcFNoYWRvd0JsdXI9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJkcm9wU2hhZG93Q29sb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJvcFNoYWRvd0NvbG9yfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9c24oZSk7dGhpcy5fZHJvcFNoYWRvd0NvbG9yIT09dCYmKHRoaXMuX2Ryb3BTaGFkb3dDb2xvcj10LHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImRyb3BTaGFkb3dEaXN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcm9wU2hhZG93RGlzdGFuY2V9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9kcm9wU2hhZG93RGlzdGFuY2UhPT1lJiYodGhpcy5fZHJvcFNoYWRvd0Rpc3RhbmNlPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZmlsbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9c24oZSk7dGhpcy5fZmlsbCE9PXQmJih0aGlzLl9maWxsPXQsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZmlsbEdyYWRpZW50VHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxsR3JhZGllbnRUeXBlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsbEdyYWRpZW50VHlwZSE9PWUmJih0aGlzLl9maWxsR3JhZGllbnRUeXBlPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZmlsbEdyYWRpZW50U3RvcHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsbEdyYWRpZW50U3RvcHN9LHNldDpmdW5jdGlvbihlKXtGZCh0aGlzLl9maWxsR3JhZGllbnRTdG9wcyxlKXx8KHRoaXMuX2ZpbGxHcmFkaWVudFN0b3BzPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZm9udEZhbWlseSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250RmFtaWx5fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5mb250RmFtaWx5IT09ZSYmKHRoaXMuX2ZvbnRGYW1pbHk9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJmb250U2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250U2l6ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvbnRTaXplIT09ZSYmKHRoaXMuX2ZvbnRTaXplPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZm9udFN0eWxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRTdHlsZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvbnRTdHlsZSE9PWUmJih0aGlzLl9mb250U3R5bGU9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJmb250VmFyaWFudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250VmFyaWFudH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvbnRWYXJpYW50IT09ZSYmKHRoaXMuX2ZvbnRWYXJpYW50PWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZm9udFdlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250V2VpZ2h0fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZm9udFdlaWdodCE9PWUmJih0aGlzLl9mb250V2VpZ2h0PWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibGV0dGVyU3BhY2luZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZXR0ZXJTcGFjaW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGV0dGVyU3BhY2luZyE9PWUmJih0aGlzLl9sZXR0ZXJTcGFjaW5nPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibGluZUhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saW5lSGVpZ2h0fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGluZUhlaWdodCE9PWUmJih0aGlzLl9saW5lSGVpZ2h0PWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibGVhZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZWFkaW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbGVhZGluZyE9PWUmJih0aGlzLl9sZWFkaW5nPWUsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwibGluZUpvaW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGluZUpvaW59LHNldDpmdW5jdGlvbihlKXt0aGlzLl9saW5lSm9pbiE9PWUmJih0aGlzLl9saW5lSm9pbj1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIm1pdGVyTGltaXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWl0ZXJMaW1pdH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21pdGVyTGltaXQhPT1lJiYodGhpcy5fbWl0ZXJMaW1pdD1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInBhZGRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFkZGluZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3BhZGRpbmchPT1lJiYodGhpcy5fcGFkZGluZz1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInN0cm9rZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJva2V9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1zbihlKTt0aGlzLl9zdHJva2UhPT10JiYodGhpcy5fc3Ryb2tlPXQsdGhpcy5zdHlsZUlEKyspfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwic3Ryb2tlVGhpY2tuZXNzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cm9rZVRoaWNrbmVzc30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3N0cm9rZVRoaWNrbmVzcyE9PWUmJih0aGlzLl9zdHJva2VUaGlja25lc3M9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJ0ZXh0QmFzZWxpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGV4dEJhc2VsaW5lfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fdGV4dEJhc2VsaW5lIT09ZSYmKHRoaXMuX3RleHRCYXNlbGluZT1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInRyaW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJpbX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3RyaW0hPT1lJiYodGhpcy5fdHJpbT1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIndoaXRlU3BhY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2hpdGVTcGFjZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3doaXRlU3BhY2UhPT1lJiYodGhpcy5fd2hpdGVTcGFjZT1lLHRoaXMuc3R5bGVJRCsrKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIndvcmRXcmFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvcmRXcmFwfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fd29yZFdyYXAhPT1lJiYodGhpcy5fd29yZFdyYXA9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJ3b3JkV3JhcFdpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvcmRXcmFwV2lkdGh9LHNldDpmdW5jdGlvbihlKXt0aGlzLl93b3JkV3JhcFdpZHRoIT09ZSYmKHRoaXMuX3dvcmRXcmFwV2lkdGg9ZSx0aGlzLnN0eWxlSUQrKyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUudG9Gb250U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dHlwZW9mIHRoaXMuZm9udFNpemU9PSJudW1iZXIiP3RoaXMuZm9udFNpemUrInB4Ijp0aGlzLmZvbnRTaXplLHQ9dGhpcy5mb250RmFtaWx5O0FycmF5LmlzQXJyYXkodGhpcy5mb250RmFtaWx5KXx8KHQ9dGhpcy5mb250RmFtaWx5LnNwbGl0KCIsIikpO2Zvcih2YXIgaT10Lmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbj10W2ldLnRyaW0oKTshLyhbXCJcJ10pW15cJ1wiXStcMS8udGVzdChuKSYmRGQuaW5kZXhPZihuKTwwJiYobj0nIicrbisnIicpLHRbaV09bn1yZXR1cm4gdGhpcy5mb250U3R5bGUrIiAiK3RoaXMuZm9udFZhcmlhbnQrIiAiK3RoaXMuZm9udFdlaWdodCsiICIrZSsiICIrdC5qb2luKCIsIil9LHJ9KCk7ZnVuY3Rpb24gcHMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9RbihyKToodHlwZW9mIHI9PSJzdHJpbmciJiZyLmluZGV4T2YoIjB4Iik9PT0wJiYocj1yLnJlcGxhY2UoIjB4IiwiIyIpKSxyKX1mdW5jdGlvbiBzbihyKXtpZihBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIGU9MDtlPHIubGVuZ3RoOysrZSlyW2VdPXBzKHJbZV0pO3JldHVybiByfWVsc2UgcmV0dXJuIHBzKHIpfWZ1bmN0aW9uIEZkKHIsZSl7aWYoIUFycmF5LmlzQXJyYXkocil8fCFBcnJheS5pc0FycmF5KGUpfHxyLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF0hPT1lW3RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG9uKHIsZSx0KXtmb3IodmFyIGkgaW4gdClBcnJheS5pc0FycmF5KGVbaV0pP3JbaV09ZVtpXS5zbGljZSgpOnJbaV09ZVtpXX12YXIgWXI9e3dpbGxSZWFkRnJlcXVlbnRseTohMH0sTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpLG4sYSxzLG8saCx1KXt0aGlzLnRleHQ9ZSx0aGlzLnN0eWxlPXQsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PW4sdGhpcy5saW5lcz1hLHRoaXMubGluZVdpZHRocz1zLHRoaXMubGluZUhlaWdodD1vLHRoaXMubWF4TGluZVdpZHRoPWgsdGhpcy5mb250UHJvcGVydGllcz11fXJldHVybiByLm1lYXN1cmVUZXh0PWZ1bmN0aW9uKGUsdCxpLG4pe249PT12b2lkIDAmJihuPXIuX2NhbnZhcyksaT1pPz90LndvcmRXcmFwO3ZhciBhPXQudG9Gb250U3RyaW5nKCkscz1yLm1lYXN1cmVGb250KGEpO3MuZm9udFNpemU9PT0wJiYocy5mb250U2l6ZT10LmZvbnRTaXplLHMuYXNjZW50PXQuZm9udFNpemUpO3ZhciBvPW4uZ2V0Q29udGV4dCgiMmQiLFlyKTtvLmZvbnQ9YTtmb3IodmFyIGg9aT9yLndvcmRXcmFwKGUsdCxuKTplLHU9aC5zcGxpdCgvKD86XHJcbnxccnxcbikvKSxsPW5ldyBBcnJheSh1Lmxlbmd0aCksYz0wLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIGQ9by5tZWFzdXJlVGV4dCh1W2ZdKS53aWR0aCsodVtmXS5sZW5ndGgtMSkqdC5sZXR0ZXJTcGFjaW5nO2xbZl09ZCxjPU1hdGgubWF4KGMsZCl9dmFyIHA9Yyt0LnN0cm9rZVRoaWNrbmVzczt0LmRyb3BTaGFkb3cmJihwKz10LmRyb3BTaGFkb3dEaXN0YW5jZSk7dmFyIHY9dC5saW5lSGVpZ2h0fHxzLmZvbnRTaXplK3Quc3Ryb2tlVGhpY2tuZXNzLF89TWF0aC5tYXgodixzLmZvbnRTaXplK3Quc3Ryb2tlVGhpY2tuZXNzKSsodS5sZW5ndGgtMSkqKHYrdC5sZWFkaW5nKTtyZXR1cm4gdC5kcm9wU2hhZG93JiYoXys9dC5kcm9wU2hhZG93RGlzdGFuY2UpLG5ldyByKGUsdCxwLF8sdSxsLHYrdC5sZWFkaW5nLGMscyl9LHIud29yZFdyYXA9ZnVuY3Rpb24oZSx0LGkpe2k9PT12b2lkIDAmJihpPXIuX2NhbnZhcyk7Zm9yKHZhciBuPWkuZ2V0Q29udGV4dCgiMmQiLFlyKSxhPTAscz0iIixvPSIiLGg9T2JqZWN0LmNyZWF0ZShudWxsKSx1PXQubGV0dGVyU3BhY2luZyxsPXQud2hpdGVTcGFjZSxjPXIuY29sbGFwc2VTcGFjZXMobCksZj1yLmNvbGxhcHNlTmV3bGluZXMobCksZD0hYyxwPXQud29yZFdyYXBXaWR0aCt1LHY9ci50b2tlbml6ZShlKSxfPTA7Xzx2Lmxlbmd0aDtfKyspe3ZhciBtPXZbX107aWYoci5pc05ld2xpbmUobSkpe2lmKCFmKXtvKz1yLmFkZExpbmUocyksZD0hYyxzPSIiLGE9MDtjb250aW51ZX1tPSIgIn1pZihjKXt2YXIgZz1yLmlzQnJlYWtpbmdTcGFjZShtKSx5PXIuaXNCcmVha2luZ1NwYWNlKHNbcy5sZW5ndGgtMV0pO2lmKGcmJnkpY29udGludWV9dmFyIFQ9ci5nZXRGcm9tQ2FjaGUobSx1LGgsbik7aWYoVD5wKWlmKHMhPT0iIiYmKG8rPXIuYWRkTGluZShzKSxzPSIiLGE9MCksci5jYW5CcmVha1dvcmRzKG0sdC5icmVha1dvcmRzKSlmb3IodmFyIHg9ci53b3JkV3JhcFNwbGl0KG0pLGI9MDtiPHgubGVuZ3RoO2IrKyl7Zm9yKHZhciBFPXhbYl0sQT0xO3hbYitBXTspe3ZhciB3PXhbYitBXSxTPUVbRS5sZW5ndGgtMV07aWYoIXIuY2FuQnJlYWtDaGFycyhTLHcsbSxiLHQuYnJlYWtXb3JkcykpRSs9dztlbHNlIGJyZWFrO0ErK31iKz1FLmxlbmd0aC0xO3ZhciBEPXIuZ2V0RnJvbUNhY2hlKEUsdSxoLG4pO0QrYT5wJiYobys9ci5hZGRMaW5lKHMpLGQ9ITEscz0iIixhPTApLHMrPUUsYSs9RH1lbHNle3MubGVuZ3RoPjAmJihvKz1yLmFkZExpbmUocykscz0iIixhPTApO3ZhciBCPV89PT12Lmxlbmd0aC0xO28rPXIuYWRkTGluZShtLCFCKSxkPSExLHM9IiIsYT0wfWVsc2UgVCthPnAmJihkPSExLG8rPXIuYWRkTGluZShzKSxzPSIiLGE9MCksKHMubGVuZ3RoPjB8fCFyLmlzQnJlYWtpbmdTcGFjZShtKXx8ZCkmJihzKz1tLGErPVQpfXJldHVybiBvKz1yLmFkZExpbmUocywhMSksb30sci5hZGRMaW5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PSEwKSxlPXIudHJpbVJpZ2h0KGUpLGU9dD9lK2AKYDplLGV9LHIuZ2V0RnJvbUNhY2hlPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBhPWlbZV07aWYodHlwZW9mIGEhPSJudW1iZXIiKXt2YXIgcz1lLmxlbmd0aCp0O2E9bi5tZWFzdXJlVGV4dChlKS53aWR0aCtzLGlbZV09YX1yZXR1cm4gYX0sci5jb2xsYXBzZVNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PSJub3JtYWwifHxlPT09InByZS1saW5lIn0sci5jb2xsYXBzZU5ld2xpbmVzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09Im5vcm1hbCJ9LHIudHJpbVJpZ2h0PWZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4iIjtmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGk9ZVt0XTtpZighci5pc0JyZWFraW5nU3BhY2UoaSkpYnJlYWs7ZT1lLnNsaWNlKDAsLTEpfXJldHVybiBlfSxyLmlzTmV3bGluZT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciPyExOnIuX25ld2xpbmVzLmluZGV4T2YoZS5jaGFyQ29kZUF0KDApKT49MH0sci5pc0JyZWFraW5nU3BhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciPyExOnIuX2JyZWFraW5nU3BhY2VzLmluZGV4T2YoZS5jaGFyQ29kZUF0KDApKT49MH0sci50b2tlbml6ZT1mdW5jdGlvbihlKXt2YXIgdD1bXSxpPSIiO2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gdDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxzPWVbbisxXTtpZihyLmlzQnJlYWtpbmdTcGFjZShhLHMpfHxyLmlzTmV3bGluZShhKSl7aSE9PSIiJiYodC5wdXNoKGkpLGk9IiIpLHQucHVzaChhKTtjb250aW51ZX1pKz1hfXJldHVybiBpIT09IiImJnQucHVzaChpKSx0fSxyLmNhbkJyZWFrV29yZHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0sci5jYW5CcmVha0NoYXJzPWZ1bmN0aW9uKGUsdCxpLG4sYSl7cmV0dXJuITB9LHIud29yZFdyYXBTcGxpdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiIil9LHIubWVhc3VyZUZvbnQ9ZnVuY3Rpb24oZSl7aWYoci5fZm9udHNbZV0pcmV0dXJuIHIuX2ZvbnRzW2VdO3ZhciB0PXthc2NlbnQ6MCxkZXNjZW50OjAsZm9udFNpemU6MH0saT1yLl9jYW52YXMsbj1yLl9jb250ZXh0O24uZm9udD1lO3ZhciBhPXIuTUVUUklDU19TVFJJTkcrci5CQVNFTElORV9TWU1CT0wscz1NYXRoLmNlaWwobi5tZWFzdXJlVGV4dChhKS53aWR0aCksbz1NYXRoLmNlaWwobi5tZWFzdXJlVGV4dChyLkJBU0VMSU5FX1NZTUJPTCkud2lkdGgpLGg9TWF0aC5jZWlsKHIuSEVJR0hUX01VTFRJUExJRVIqbyk7bz1vKnIuQkFTRUxJTkVfTVVMVElQTElFUnwwLGkud2lkdGg9cyxpLmhlaWdodD1oLG4uZmlsbFN0eWxlPSIjZjAwIixuLmZpbGxSZWN0KDAsMCxzLGgpLG4uZm9udD1lLG4udGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixuLmZpbGxTdHlsZT0iIzAwMCIsbi5maWxsVGV4dChhLDAsbyk7dmFyIHU9bi5nZXRJbWFnZURhdGEoMCwwLHMsaCkuZGF0YSxsPXUubGVuZ3RoLGM9cyo0LGY9MCxkPTAscD0hMTtmb3IoZj0wO2Y8bzsrK2Ype2Zvcih2YXIgdj0wO3Y8Yzt2Kz00KWlmKHVbZCt2XSE9PTI1NSl7cD0hMDticmVha31pZighcClkKz1jO2Vsc2UgYnJlYWt9Zm9yKHQuYXNjZW50PW8tZixkPWwtYyxwPSExLGY9aDtmPm87LS1mKXtmb3IodmFyIHY9MDt2PGM7dis9NClpZih1W2Qrdl0hPT0yNTUpe3A9ITA7YnJlYWt9aWYoIXApZC09YztlbHNlIGJyZWFrfXJldHVybiB0LmRlc2NlbnQ9Zi1vLHQuZm9udFNpemU9dC5hc2NlbnQrdC5kZXNjZW50LHIuX2ZvbnRzW2VdPXQsdH0sci5jbGVhck1ldHJpY3M9ZnVuY3Rpb24oZSl7ZT09PXZvaWQgMCYmKGU9IiIpLGU/ZGVsZXRlIHIuX2ZvbnRzW2VdOnIuX2ZvbnRzPXt9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX2NhbnZhcyIse2dldDpmdW5jdGlvbigpe2lmKCFyLl9fY2FudmFzKXt2YXIgZT12b2lkIDA7dHJ5e3ZhciB0PW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSxpPXQuZ2V0Q29udGV4dCgiMmQiLFlyKTtpZihpJiZpLm1lYXN1cmVUZXh0KXJldHVybiByLl9fY2FudmFzPXQsdDtlPUkuQURBUFRFUi5jcmVhdGVDYW52YXMoKX1jYXRjaHtlPUkuQURBUFRFUi5jcmVhdGVDYW52YXMoKX1lLndpZHRoPWUuaGVpZ2h0PTEwLHIuX19jYW52YXM9ZX1yZXR1cm4gci5fX2NhbnZhc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX2NvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5fX2NvbnRleHR8fChyLl9fY29udGV4dD1yLl9jYW52YXMuZ2V0Q29udGV4dCgiMmQiLFlyKSksci5fX2NvbnRleHR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSkscn0oKTtOdC5fZm9udHM9e30sTnQuTUVUUklDU19TVFJJTkc9InzDiXHDhSIsTnQuQkFTRUxJTkVfU1lNQk9MPSJNIixOdC5CQVNFTElORV9NVUxUSVBMSUVSPTEuNCxOdC5IRUlHSFRfTVVMVElQTElFUj0yLE50Ll9uZXdsaW5lcz1bMTAsMTNdLE50Ll9icmVha2luZ1NwYWNlcz1bOSwzMiw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgyMDAsODIwMSw4MjAyLDgyODcsMTIyODhdO3ZhciBOZD17dGV4dHVyZTohMCxjaGlsZHJlbjohMSxiYXNlVGV4dHVyZTohMH0sdnM9ZnVuY3Rpb24ocil7TWQoZSxyKTtmdW5jdGlvbiBlKHQsaSxuKXt2YXIgYT10aGlzLHM9ITE7bnx8KG49SS5BREFQVEVSLmNyZWF0ZUNhbnZhcygpLHM9ITApLG4ud2lkdGg9MyxuLmhlaWdodD0zO3ZhciBvPUwuZnJvbShuKTtyZXR1cm4gby5vcmlnPW5ldyBILG8udHJpbT1uZXcgSCxhPXIuY2FsbCh0aGlzLG8pfHx0aGlzLGEuX293bkNhbnZhcz1zLGEuY2FudmFzPW4sYS5jb250ZXh0PW4uZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSxhLl9yZXNvbHV0aW9uPUkuUkVTT0xVVElPTixhLl9hdXRvUmVzb2x1dGlvbj0hMCxhLl90ZXh0PW51bGwsYS5fc3R5bGU9bnVsbCxhLl9zdHlsZUxpc3RlbmVyPW51bGwsYS5fZm9udD0iIixhLnRleHQ9dCxhLnN0eWxlPWksYS5sb2NhbFN0eWxlSUQ9LTEsYX1yZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlVGV4dD1mdW5jdGlvbih0KXt2YXIgaT10aGlzLl9zdHlsZTtpZih0aGlzLmxvY2FsU3R5bGVJRCE9PWkuc3R5bGVJRCYmKHRoaXMuZGlydHk9ITAsdGhpcy5sb2NhbFN0eWxlSUQ9aS5zdHlsZUlEKSwhKCF0aGlzLmRpcnR5JiZ0KSl7dGhpcy5fZm9udD10aGlzLl9zdHlsZS50b0ZvbnRTdHJpbmcoKTt2YXIgbj10aGlzLmNvbnRleHQsYT1OdC5tZWFzdXJlVGV4dCh0aGlzLl90ZXh0fHwiICIsdGhpcy5fc3R5bGUsdGhpcy5fc3R5bGUud29yZFdyYXAsdGhpcy5jYW52YXMpLHM9YS53aWR0aCxvPWEuaGVpZ2h0LGg9YS5saW5lcyx1PWEubGluZUhlaWdodCxsPWEubGluZVdpZHRocyxjPWEubWF4TGluZVdpZHRoLGY9YS5mb250UHJvcGVydGllczt0aGlzLmNhbnZhcy53aWR0aD1NYXRoLmNlaWwoTWF0aC5jZWlsKE1hdGgubWF4KDEscykraS5wYWRkaW5nKjIpKnRoaXMuX3Jlc29sdXRpb24pLHRoaXMuY2FudmFzLmhlaWdodD1NYXRoLmNlaWwoTWF0aC5jZWlsKE1hdGgubWF4KDEsbykraS5wYWRkaW5nKjIpKnRoaXMuX3Jlc29sdXRpb24pLG4uc2NhbGUodGhpcy5fcmVzb2x1dGlvbix0aGlzLl9yZXNvbHV0aW9uKSxuLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSxuLmZvbnQ9dGhpcy5fZm9udCxuLmxpbmVXaWR0aD1pLnN0cm9rZVRoaWNrbmVzcyxuLnRleHRCYXNlbGluZT1pLnRleHRCYXNlbGluZSxuLmxpbmVKb2luPWkubGluZUpvaW4sbi5taXRlckxpbWl0PWkubWl0ZXJMaW1pdDtmb3IodmFyIGQscCx2PWkuZHJvcFNoYWRvdz8yOjEsXz0wO188djsrK18pe3ZhciBtPWkuZHJvcFNoYWRvdyYmXz09PTAsZz1tP01hdGguY2VpbChNYXRoLm1heCgxLG8pK2kucGFkZGluZyoyKTowLHk9Zyp0aGlzLl9yZXNvbHV0aW9uO2lmKG0pe24uZmlsbFN0eWxlPSJibGFjayIsbi5zdHJva2VTdHlsZT0iYmxhY2siO3ZhciBUPWkuZHJvcFNoYWRvd0NvbG9yLHg9d2UodHlwZW9mIFQ9PSJudW1iZXIiP1Q6dGEoVCkpLGI9aS5kcm9wU2hhZG93Qmx1cip0aGlzLl9yZXNvbHV0aW9uLEU9aS5kcm9wU2hhZG93RGlzdGFuY2UqdGhpcy5fcmVzb2x1dGlvbjtuLnNoYWRvd0NvbG9yPSJyZ2JhKCIreFswXSoyNTUrIiwiK3hbMV0qMjU1KyIsIit4WzJdKjI1NSsiLCIraS5kcm9wU2hhZG93QWxwaGErIikiLG4uc2hhZG93Qmx1cj1iLG4uc2hhZG93T2Zmc2V0WD1NYXRoLmNvcyhpLmRyb3BTaGFkb3dBbmdsZSkqRSxuLnNoYWRvd09mZnNldFk9TWF0aC5zaW4oaS5kcm9wU2hhZG93QW5nbGUpKkUreX1lbHNlIG4uZmlsbFN0eWxlPXRoaXMuX2dlbmVyYXRlRmlsbFN0eWxlKGksaCxhKSxuLnN0cm9rZVN0eWxlPWkuc3Ryb2tlLG4uc2hhZG93Q29sb3I9ImJsYWNrIixuLnNoYWRvd0JsdXI9MCxuLnNoYWRvd09mZnNldFg9MCxuLnNoYWRvd09mZnNldFk9MDt2YXIgQT0odS1mLmZvbnRTaXplKS8yOyghZS5uZXh0TGluZUhlaWdodEJlaGF2aW9yfHx1LWYuZm9udFNpemU8MCkmJihBPTApO2Zvcih2YXIgdz0wO3c8aC5sZW5ndGg7dysrKWQ9aS5zdHJva2VUaGlja25lc3MvMixwPWkuc3Ryb2tlVGhpY2tuZXNzLzIrdyp1K2YuYXNjZW50K0EsaS5hbGlnbj09PSJyaWdodCI/ZCs9Yy1sW3ddOmkuYWxpZ249PT0iY2VudGVyIiYmKGQrPShjLWxbd10pLzIpLGkuc3Ryb2tlJiZpLnN0cm9rZVRoaWNrbmVzcyYmdGhpcy5kcmF3TGV0dGVyU3BhY2luZyhoW3ddLGQraS5wYWRkaW5nLHAraS5wYWRkaW5nLWcsITApLGkuZmlsbCYmdGhpcy5kcmF3TGV0dGVyU3BhY2luZyhoW3ddLGQraS5wYWRkaW5nLHAraS5wYWRkaW5nLWcpfXRoaXMudXBkYXRlVGV4dHVyZSgpfX0sZS5wcm90b3R5cGUuZHJhd0xldHRlclNwYWNpbmc9ZnVuY3Rpb24odCxpLG4sYSl7YT09PXZvaWQgMCYmKGE9ITEpO3ZhciBzPXRoaXMuX3N0eWxlLG89cy5sZXR0ZXJTcGFjaW5nLGg9ZS5leHBlcmltZW50YWxMZXR0ZXJTcGFjaW5nJiYoImxldHRlclNwYWNpbmciaW4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZXx8InRleHRMZXR0ZXJTcGFjaW5nImluIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUpO2lmKG89PT0wfHxoKXtoJiYodGhpcy5jb250ZXh0LmxldHRlclNwYWNpbmc9byx0aGlzLmNvbnRleHQudGV4dExldHRlclNwYWNpbmc9byksYT90aGlzLmNvbnRleHQuc3Ryb2tlVGV4dCh0LGksbik6dGhpcy5jb250ZXh0LmZpbGxUZXh0KHQsaSxuKTtyZXR1cm59Zm9yKHZhciB1PWksbD1BcnJheS5mcm9tP0FycmF5LmZyb20odCk6dC5zcGxpdCgiIiksYz10aGlzLmNvbnRleHQubWVhc3VyZVRleHQodCkud2lkdGgsZj0wLGQ9MDtkPGwubGVuZ3RoOysrZCl7dmFyIHA9bFtkXTthP3RoaXMuY29udGV4dC5zdHJva2VUZXh0KHAsdSxuKTp0aGlzLmNvbnRleHQuZmlsbFRleHQocCx1LG4pO2Zvcih2YXIgdj0iIixfPWQrMTtfPGwubGVuZ3RoOysrXyl2Kz1sW19dO2Y9dGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHYpLndpZHRoLHUrPWMtZitvLGM9Zn19LGUucHJvdG90eXBlLnVwZGF0ZVRleHR1cmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbnZhcztpZih0aGlzLl9zdHlsZS50cmltKXt2YXIgaT1DbCh0KTtpLmRhdGEmJih0LndpZHRoPWkud2lkdGgsdC5oZWlnaHQ9aS5oZWlnaHQsdGhpcy5jb250ZXh0LnB1dEltYWdlRGF0YShpLmRhdGEsMCwwKSl9dmFyIG49dGhpcy5fdGV4dHVyZSxhPXRoaXMuX3N0eWxlLHM9YS50cmltPzA6YS5wYWRkaW5nLG89bi5iYXNlVGV4dHVyZTtuLnRyaW0ud2lkdGg9bi5fZnJhbWUud2lkdGg9dC53aWR0aC90aGlzLl9yZXNvbHV0aW9uLG4udHJpbS5oZWlnaHQ9bi5fZnJhbWUuaGVpZ2h0PXQuaGVpZ2h0L3RoaXMuX3Jlc29sdXRpb24sbi50cmltLng9LXMsbi50cmltLnk9LXMsbi5vcmlnLndpZHRoPW4uX2ZyYW1lLndpZHRoLXMqMixuLm9yaWcuaGVpZ2h0PW4uX2ZyYW1lLmhlaWdodC1zKjIsdGhpcy5fb25UZXh0dXJlVXBkYXRlKCksby5zZXRSZWFsU2l6ZSh0LndpZHRoLHQuaGVpZ2h0LHRoaXMuX3Jlc29sdXRpb24pLG4udXBkYXRlVXZzKCksdGhpcy5kaXJ0eT0hMX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbih0KXt0aGlzLl9hdXRvUmVzb2x1dGlvbiYmdGhpcy5fcmVzb2x1dGlvbiE9PXQucmVzb2x1dGlvbiYmKHRoaXMuX3Jlc29sdXRpb249dC5yZXNvbHV0aW9uLHRoaXMuZGlydHk9ITApLHRoaXMudXBkYXRlVGV4dCghMCksci5wcm90b3R5cGUuX3JlbmRlci5jYWxsKHRoaXMsdCl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybT1mdW5jdGlvbigpe3RoaXMudXBkYXRlVGV4dCghMCksci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtLmNhbGwodGhpcyl9LGUucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLnVwZGF0ZVRleHQoITApLHRoaXMuX3RleHR1cmVJRD09PS0xJiYodD0hMSksci5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcyx0LGkpfSxlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVUZXh0KCEwKSxyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMsdCl9LGUucHJvdG90eXBlLl9jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNhbGN1bGF0ZVZlcnRpY2VzKCksdGhpcy5fYm91bmRzLmFkZFF1YWQodGhpcy52ZXJ0ZXhEYXRhKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRmlsbFN0eWxlPWZ1bmN0aW9uKHQsaSxuKXt2YXIgYT10LmZpbGw7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoYS5sZW5ndGg9PT0xKXJldHVybiBhWzBdfWVsc2UgcmV0dXJuIGE7dmFyIHMsbz10LmRyb3BTaGFkb3c/dC5kcm9wU2hhZG93RGlzdGFuY2U6MCxoPXQucGFkZGluZ3x8MCx1PXRoaXMuY2FudmFzLndpZHRoL3RoaXMuX3Jlc29sdXRpb24tby1oKjIsbD10aGlzLmNhbnZhcy5oZWlnaHQvdGhpcy5fcmVzb2x1dGlvbi1vLWgqMixjPWEuc2xpY2UoKSxmPXQuZmlsbEdyYWRpZW50U3RvcHMuc2xpY2UoKTtpZighZi5sZW5ndGgpZm9yKHZhciBkPWMubGVuZ3RoKzEscD0xO3A8ZDsrK3ApZi5wdXNoKHAvZCk7aWYoYy51bnNoaWZ0KGFbMF0pLGYudW5zaGlmdCgwKSxjLnB1c2goYVthLmxlbmd0aC0xXSksZi5wdXNoKDEpLHQuZmlsbEdyYWRpZW50VHlwZT09PWVyLkxJTkVBUl9WRVJUSUNBTCl7cz10aGlzLmNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQodS8yLGgsdS8yLGwraCk7Zm9yKHZhciB2PW4uZm9udFByb3BlcnRpZXMuZm9udFNpemUrdC5zdHJva2VUaGlja25lc3MscD0wO3A8aS5sZW5ndGg7cCsrKXt2YXIgXz1uLmxpbmVIZWlnaHQqKHAtMSkrdixtPW4ubGluZUhlaWdodCpwLGc9bTtwPjAmJl8+bSYmKGc9KG0rXykvMik7dmFyIHk9bSt2LFQ9bi5saW5lSGVpZ2h0KihwKzEpLHg9eTtwKzE8aS5sZW5ndGgmJlQ8eSYmKHg9KHkrVCkvMik7Zm9yKHZhciBiPSh4LWcpL2wsRT0wO0U8Yy5sZW5ndGg7RSsrKXt2YXIgQT0wO3R5cGVvZiBmW0VdPT0ibnVtYmVyIj9BPWZbRV06QT1FL2MubGVuZ3RoO3ZhciB3PU1hdGgubWluKDEsTWF0aC5tYXgoMCxnL2wrQSpiKSk7dz1OdW1iZXIody50b0ZpeGVkKDUpKSxzLmFkZENvbG9yU3RvcCh3LGNbRV0pfX19ZWxzZXtzPXRoaXMuY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChoLGwvMix1K2gsbC8yKTtmb3IodmFyIFM9Yy5sZW5ndGgrMSxEPTEscD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgQj12b2lkIDA7dHlwZW9mIGZbcF09PSJudW1iZXIiP0I9ZltwXTpCPUQvUyxzLmFkZENvbG9yU3RvcChCLGNbcF0pLEQrK319cmV0dXJuIHN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dHlwZW9mIHQ9PSJib29sZWFuIiYmKHQ9e2NoaWxkcmVuOnR9KSx0PU9iamVjdC5hc3NpZ24oe30sTmQsdCksci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsdCksdGhpcy5fb3duQ2FudmFzJiYodGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuY2FudmFzLndpZHRoPTApLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY2FudmFzPW51bGwsdGhpcy5fc3R5bGU9bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZVRleHQoITApLE1hdGguYWJzKHRoaXMuc2NhbGUueCkqdGhpcy5fdGV4dHVyZS5vcmlnLndpZHRofSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUZXh0KCEwKTt2YXIgaT1QZSh0aGlzLnNjYWxlLngpfHwxO3RoaXMuc2NhbGUueD1pKnQvdGhpcy5fdGV4dHVyZS5vcmlnLndpZHRoLHRoaXMuX3dpZHRoPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVUZXh0KCEwKSxNYXRoLmFicyh0aGlzLnNjYWxlLnkpKnRoaXMuX3RleHR1cmUub3JpZy5oZWlnaHR9LHNldDpmdW5jdGlvbih0KXt0aGlzLnVwZGF0ZVRleHQoITApO3ZhciBpPVBlKHRoaXMuc2NhbGUueSl8fDE7dGhpcy5zY2FsZS55PWkqdC90aGlzLl90ZXh0dXJlLm9yaWcuaGVpZ2h0LHRoaXMuX2hlaWdodD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic3R5bGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3R5bGV9LHNldDpmdW5jdGlvbih0KXt0PXR8fHt9LHQgaW5zdGFuY2VvZiBnZT90aGlzLl9zdHlsZT10OnRoaXMuX3N0eWxlPW5ldyBnZSh0KSx0aGlzLmxvY2FsU3R5bGVJRD0tMSx0aGlzLmRpcnR5PSEwfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXh0fSxzZXQ6ZnVuY3Rpb24odCl7dD1TdHJpbmcodD8/IiIpLHRoaXMuX3RleHQhPT10JiYodGhpcy5fdGV4dD10LHRoaXMuZGlydHk9ITApfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVzb2x1dGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNvbHV0aW9ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b1Jlc29sdXRpb249ITEsdGhpcy5fcmVzb2x1dGlvbiE9PXQmJih0aGlzLl9yZXNvbHV0aW9uPXQsdGhpcy5kaXJ0eT0hMCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5uZXh0TGluZUhlaWdodEJlaGF2aW9yPSExLGUuZXhwZXJpbWVudGFsTGV0dGVyU3BhY2luZz0hMSxlfSh0cik7SS5VUExPQURTX1BFUl9GUkFNRT00O3ZhciBobj1mdW5jdGlvbihyLGUpe3JldHVybiBobj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0saG4ocixlKX07ZnVuY3Rpb24gQmQocixlKXtobihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBMZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dGhpcy5tYXhJdGVtc1BlckZyYW1lPWUsdGhpcy5pdGVtc0xlZnQ9MH1yZXR1cm4gci5wcm90b3R5cGUuYmVnaW5GcmFtZT1mdW5jdGlvbigpe3RoaXMuaXRlbXNMZWZ0PXRoaXMubWF4SXRlbXNQZXJGcmFtZX0sci5wcm90b3R5cGUuYWxsb3dlZFRvVXBsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXNMZWZ0LS0gPjB9LHJ9KCk7ZnVuY3Rpb24gVWQocixlKXt2YXIgdD0hMTtpZihyJiZyLl90ZXh0dXJlcyYmci5fdGV4dHVyZXMubGVuZ3RoKXtmb3IodmFyIGk9MDtpPHIuX3RleHR1cmVzLmxlbmd0aDtpKyspaWYoci5fdGV4dHVyZXNbaV1pbnN0YW5jZW9mIEwpe3ZhciBuPXIuX3RleHR1cmVzW2ldLmJhc2VUZXh0dXJlO2UuaW5kZXhPZihuKT09PS0xJiYoZS5wdXNoKG4pLHQ9ITApfX1yZXR1cm4gdH1mdW5jdGlvbiBHZChyLGUpe2lmKHIuYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBqKXt2YXIgdD1yLmJhc2VUZXh0dXJlO3JldHVybiBlLmluZGV4T2YodCk9PT0tMSYmZS5wdXNoKHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIGtkKHIsZSl7aWYoci5fdGV4dHVyZSYmci5fdGV4dHVyZSBpbnN0YW5jZW9mIEwpe3ZhciB0PXIuX3RleHR1cmUuYmFzZVRleHR1cmU7cmV0dXJuIGUuaW5kZXhPZih0KT09PS0xJiZlLnB1c2godCksITB9cmV0dXJuITF9ZnVuY3Rpb24gWGQocixlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHZzPyhlLnVwZGF0ZVRleHQoITApLCEwKTohMX1mdW5jdGlvbiBIZChyLGUpe2lmKGUgaW5zdGFuY2VvZiBnZSl7dmFyIHQ9ZS50b0ZvbnRTdHJpbmcoKTtyZXR1cm4gTnQubWVhc3VyZUZvbnQodCksITB9cmV0dXJuITF9ZnVuY3Rpb24gamQocixlKXtpZihyIGluc3RhbmNlb2YgdnMpe2UuaW5kZXhPZihyLnN0eWxlKT09PS0xJiZlLnB1c2goci5zdHlsZSksZS5pbmRleE9mKHIpPT09LTEmJmUucHVzaChyKTt2YXIgdD1yLl90ZXh0dXJlLmJhc2VUZXh0dXJlO3JldHVybiBlLmluZGV4T2YodCk9PT0tMSYmZS5wdXNoKHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFZkKHIsZSl7cmV0dXJuIHIgaW5zdGFuY2VvZiBnZT8oZS5pbmRleE9mKHIpPT09LTEmJmUucHVzaChyKSwhMCk6ITF9dmFyIFlkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzO3RoaXMubGltaXRlcj1uZXcgTGQoSS5VUExPQURTX1BFUl9GUkFNRSksdGhpcy5yZW5kZXJlcj1lLHRoaXMudXBsb2FkSG9va0hlbHBlcj1udWxsLHRoaXMucXVldWU9W10sdGhpcy5hZGRIb29rcz1bXSx0aGlzLnVwbG9hZEhvb2tzPVtdLHRoaXMuY29tcGxldGVzPVtdLHRoaXMudGlja2luZz0hMSx0aGlzLmRlbGF5ZWRUaWNrPWZ1bmN0aW9uKCl7dC5xdWV1ZSYmdC5wcmVwYXJlSXRlbXMoKX0sdGhpcy5yZWdpc3RlckZpbmRIb29rKGpkKSx0aGlzLnJlZ2lzdGVyRmluZEhvb2soVmQpLHRoaXMucmVnaXN0ZXJGaW5kSG9vayhVZCksdGhpcy5yZWdpc3RlckZpbmRIb29rKEdkKSx0aGlzLnJlZ2lzdGVyRmluZEhvb2soa2QpLHRoaXMucmVnaXN0ZXJVcGxvYWRIb29rKFhkKSx0aGlzLnJlZ2lzdGVyVXBsb2FkSG9vayhIZCl9cmV0dXJuIHIucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYodD1lLGU9bnVsbCksdCYmT3QoIjYuNS4wIiwiQmFzZVByZXBhcmUudXBsb2FkIGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgcmV0dXJuIFByb21pc2UgaW5zdGVhZC4iKSxuZXcgUHJvbWlzZShmdW5jdGlvbihuKXtlJiZpLmFkZChlKTt2YXIgYT1mdW5jdGlvbigpe3Q9PW51bGx8fHQoKSxuKCl9O2kucXVldWUubGVuZ3RoPyhpLmNvbXBsZXRlcy5wdXNoKGEpLGkudGlja2luZ3x8KGkudGlja2luZz0hMCxidC5zeXN0ZW0uYWRkT25jZShpLnRpY2ssaSxXdC5VVElMSVRZKSkpOmEoKX0pfSxyLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7c2V0VGltZW91dCh0aGlzLmRlbGF5ZWRUaWNrLDApfSxyLnByb3RvdHlwZS5wcmVwYXJlSXRlbXM9ZnVuY3Rpb24oKXtmb3IodGhpcy5saW1pdGVyLmJlZ2luRnJhbWUoKTt0aGlzLnF1ZXVlLmxlbmd0aCYmdGhpcy5saW1pdGVyLmFsbG93ZWRUb1VwbG9hZCgpOyl7dmFyIGU9dGhpcy5xdWV1ZVswXSx0PSExO2lmKGUmJiFlLl9kZXN0cm95ZWQpe2Zvcih2YXIgaT0wLG49dGhpcy51cGxvYWRIb29rcy5sZW5ndGg7aTxuO2krKylpZih0aGlzLnVwbG9hZEhvb2tzW2ldKHRoaXMudXBsb2FkSG9va0hlbHBlcixlKSl7dGhpcy5xdWV1ZS5zaGlmdCgpLHQ9ITA7YnJlYWt9fXR8fHRoaXMucXVldWUuc2hpZnQoKX1pZih0aGlzLnF1ZXVlLmxlbmd0aClidC5zeXN0ZW0uYWRkT25jZSh0aGlzLnRpY2ssdGhpcyxXdC5VVElMSVRZKTtlbHNle3RoaXMudGlja2luZz0hMTt2YXIgYT10aGlzLmNvbXBsZXRlcy5zbGljZSgwKTt0aGlzLmNvbXBsZXRlcy5sZW5ndGg9MDtmb3IodmFyIGk9MCxuPWEubGVuZ3RoO2k8bjtpKyspYVtpXSgpfX0sci5wcm90b3R5cGUucmVnaXN0ZXJGaW5kSG9vaz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5hZGRIb29rcy5wdXNoKGUpLHRoaXN9LHIucHJvdG90eXBlLnJlZ2lzdGVyVXBsb2FkSG9vaz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy51cGxvYWRIb29rcy5wdXNoKGUpLHRoaXN9LHIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxpPXRoaXMuYWRkSG9va3MubGVuZ3RoO3Q8aSYmIXRoaXMuYWRkSG9va3NbdF0oZSx0aGlzLnF1ZXVlKTt0KyspO2lmKGUgaW5zdGFuY2VvZiBYdClmb3IodmFyIHQ9ZS5jaGlsZHJlbi5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmFkZChlLmNoaWxkcmVuW3RdKTtyZXR1cm4gdGhpc30sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudGlja2luZyYmYnQuc3lzdGVtLnJlbW92ZSh0aGlzLnRpY2ssdGhpcyksdGhpcy50aWNraW5nPSExLHRoaXMuYWRkSG9va3M9bnVsbCx0aGlzLnVwbG9hZEhvb2tzPW51bGwsdGhpcy5yZW5kZXJlcj1udWxsLHRoaXMuY29tcGxldGVzPW51bGwsdGhpcy5xdWV1ZT1udWxsLHRoaXMubGltaXRlcj1udWxsLHRoaXMudXBsb2FkSG9va0hlbHBlcj1udWxsfSxyfSgpO2Z1bmN0aW9uIF9zKHIsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqPyhlLl9nbFRleHR1cmVzW3IuQ09OVEVYVF9VSURdfHxyLnRleHR1cmUuYmluZChlKSwhMCk6ITF9ZnVuY3Rpb24gemQocixlKXtpZighKGUgaW5zdGFuY2VvZiBWcikpcmV0dXJuITE7dmFyIHQ9ZS5nZW9tZXRyeTtlLmZpbmlzaFBvbHkoKSx0LnVwZGF0ZUJhdGNoZXMoKTtmb3IodmFyIGk9dC5iYXRjaGVzLG49MDtuPGkubGVuZ3RoO24rKyl7dmFyIGE9aVtuXS5zdHlsZS50ZXh0dXJlO2EmJl9zKHIsYS5iYXNlVGV4dHVyZSl9cmV0dXJuIHQuYmF0Y2hhYmxlfHxyLmdlb21ldHJ5LmJpbmQodCxlLl9yZXNvbHZlRGlyZWN0U2hhZGVyKHIpKSwhMH1mdW5jdGlvbiBXZChyLGUpe3JldHVybiByIGluc3RhbmNlb2YgVnI/KGUucHVzaChyKSwhMCk6ITF9dmFyIHFkPWZ1bmN0aW9uKHIpe0JkKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaT1yLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gaS51cGxvYWRIb29rSGVscGVyPWkucmVuZGVyZXIsaS5yZWdpc3RlckZpbmRIb29rKFdkKSxpLnJlZ2lzdGVyVXBsb2FkSG9vayhfcyksaS5yZWdpc3RlclVwbG9hZEhvb2soemQpLGl9cmV0dXJuIGUuZXh0ZW5zaW9uPXtuYW1lOiJwcmVwYXJlIix0eXBlOksuUmVuZGVyZXJQbHVnaW59LGV9KFlkKTt2YXIgJGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCxpKXtpPT09dm9pZCAwJiYoaT1udWxsKSx0aGlzLmxpbmtlZFNoZWV0cz1bXSx0aGlzLl90ZXh0dXJlPWUgaW5zdGFuY2VvZiBMP2U6bnVsbCx0aGlzLmJhc2VUZXh0dXJlPWUgaW5zdGFuY2VvZiBqP2U6dGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZSx0aGlzLnRleHR1cmVzPXt9LHRoaXMuYW5pbWF0aW9ucz17fSx0aGlzLmRhdGE9dDt2YXIgbj10aGlzLmJhc2VUZXh0dXJlLnJlc291cmNlO3RoaXMucmVzb2x1dGlvbj10aGlzLl91cGRhdGVSZXNvbHV0aW9uKGl8fChuP24udXJsOm51bGwpKSx0aGlzLl9mcmFtZXM9dGhpcy5kYXRhLmZyYW1lcyx0aGlzLl9mcmFtZUtleXM9T2JqZWN0LmtleXModGhpcy5fZnJhbWVzKSx0aGlzLl9iYXRjaEluZGV4PTAsdGhpcy5fY2FsbGJhY2s9bnVsbH1yZXR1cm4gci5wcm90b3R5cGUuX3VwZGF0ZVJlc29sdXRpb249ZnVuY3Rpb24oZSl7ZT09PXZvaWQgMCYmKGU9bnVsbCk7dmFyIHQ9dGhpcy5kYXRhLm1ldGEuc2NhbGUsaT1ncihlLG51bGwpO3JldHVybiBpPT09bnVsbCYmKGk9dCE9PXZvaWQgMD9wYXJzZUZsb2F0KHQpOjEpLGkhPT0xJiZ0aGlzLmJhc2VUZXh0dXJlLnNldFJlc29sdXRpb24oaSksaX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZSYmT3QoIjYuNS4wIiwiU3ByaXRlc2hlZXQucGFyc2UgY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSByZXR1cm4gUHJvbWlzZSBpbnN0ZWFkLiIpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3QuX2NhbGxiYWNrPWZ1bmN0aW9uKG4pe2U9PW51bGx8fGUobiksaShuKX0sdC5fYmF0Y2hJbmRleD0wLHQuX2ZyYW1lS2V5cy5sZW5ndGg8PXIuQkFUQ0hfU0laRT8odC5fcHJvY2Vzc0ZyYW1lcygwKSx0Ll9wcm9jZXNzQW5pbWF0aW9ucygpLHQuX3BhcnNlQ29tcGxldGUoKSk6dC5fbmV4dEJhdGNoKCl9KX0sci5wcm90b3R5cGUuX3Byb2Nlc3NGcmFtZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUsaT1yLkJBVENIX1NJWkU7dC1lPGkmJnQ8dGhpcy5fZnJhbWVLZXlzLmxlbmd0aDspe3ZhciBuPXRoaXMuX2ZyYW1lS2V5c1t0XSxhPXRoaXMuX2ZyYW1lc1tuXSxzPWEuZnJhbWU7aWYocyl7dmFyIG89bnVsbCxoPW51bGwsdT1hLnRyaW1tZWQhPT0hMSYmYS5zb3VyY2VTaXplP2Euc291cmNlU2l6ZTphLmZyYW1lLGw9bmV3IEgoMCwwLE1hdGguZmxvb3IodS53KS90aGlzLnJlc29sdXRpb24sTWF0aC5mbG9vcih1LmgpL3RoaXMucmVzb2x1dGlvbik7YS5yb3RhdGVkP289bmV3IEgoTWF0aC5mbG9vcihzLngpL3RoaXMucmVzb2x1dGlvbixNYXRoLmZsb29yKHMueSkvdGhpcy5yZXNvbHV0aW9uLE1hdGguZmxvb3Iocy5oKS90aGlzLnJlc29sdXRpb24sTWF0aC5mbG9vcihzLncpL3RoaXMucmVzb2x1dGlvbik6bz1uZXcgSChNYXRoLmZsb29yKHMueCkvdGhpcy5yZXNvbHV0aW9uLE1hdGguZmxvb3Iocy55KS90aGlzLnJlc29sdXRpb24sTWF0aC5mbG9vcihzLncpL3RoaXMucmVzb2x1dGlvbixNYXRoLmZsb29yKHMuaCkvdGhpcy5yZXNvbHV0aW9uKSxhLnRyaW1tZWQhPT0hMSYmYS5zcHJpdGVTb3VyY2VTaXplJiYoaD1uZXcgSChNYXRoLmZsb29yKGEuc3ByaXRlU291cmNlU2l6ZS54KS90aGlzLnJlc29sdXRpb24sTWF0aC5mbG9vcihhLnNwcml0ZVNvdXJjZVNpemUueSkvdGhpcy5yZXNvbHV0aW9uLE1hdGguZmxvb3Iocy53KS90aGlzLnJlc29sdXRpb24sTWF0aC5mbG9vcihzLmgpL3RoaXMucmVzb2x1dGlvbikpLHRoaXMudGV4dHVyZXNbbl09bmV3IEwodGhpcy5iYXNlVGV4dHVyZSxvLGwsaCxhLnJvdGF0ZWQ/MjowLGEuYW5jaG9yKSxMLmFkZFRvQ2FjaGUodGhpcy50ZXh0dXJlc1tuXSxuKX10Kyt9fSxyLnByb3RvdHlwZS5fcHJvY2Vzc0FuaW1hdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuYW5pbWF0aW9uc3x8e307Zm9yKHZhciB0IGluIGUpe3RoaXMuYW5pbWF0aW9uc1t0XT1bXTtmb3IodmFyIGk9MDtpPGVbdF0ubGVuZ3RoO2krKyl7dmFyIG49ZVt0XVtpXTt0aGlzLmFuaW1hdGlvbnNbdF0ucHVzaCh0aGlzLnRleHR1cmVzW25dKX19fSxyLnByb3RvdHlwZS5fcGFyc2VDb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhbGxiYWNrO3RoaXMuX2NhbGxiYWNrPW51bGwsdGhpcy5fYmF0Y2hJbmRleD0wLGUuY2FsbCh0aGlzLHRoaXMudGV4dHVyZXMpfSxyLnByb3RvdHlwZS5fbmV4dEJhdGNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9wcm9jZXNzRnJhbWVzKHRoaXMuX2JhdGNoSW5kZXgqci5CQVRDSF9TSVpFKSx0aGlzLl9iYXRjaEluZGV4Kyssc2V0VGltZW91dChmdW5jdGlvbigpe2UuX2JhdGNoSW5kZXgqci5CQVRDSF9TSVpFPGUuX2ZyYW1lS2V5cy5sZW5ndGg/ZS5fbmV4dEJhdGNoKCk6KGUuX3Byb2Nlc3NBbmltYXRpb25zKCksZS5fcGFyc2VDb21wbGV0ZSgpKX0sMCl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSl7dmFyIHQ7ZT09PXZvaWQgMCYmKGU9ITEpO2Zvcih2YXIgaSBpbiB0aGlzLnRleHR1cmVzKXRoaXMudGV4dHVyZXNbaV0uZGVzdHJveSgpO3RoaXMuX2ZyYW1lcz1udWxsLHRoaXMuX2ZyYW1lS2V5cz1udWxsLHRoaXMuZGF0YT1udWxsLHRoaXMudGV4dHVyZXM9bnVsbCxlJiYoKHQ9dGhpcy5fdGV4dHVyZSk9PT1udWxsfHx0PT09dm9pZCAwfHx0LmRlc3Ryb3koKSx0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKSksdGhpcy5fdGV4dHVyZT1udWxsLHRoaXMuYmFzZVRleHR1cmU9bnVsbCx0aGlzLmxpbmtlZFNoZWV0cz1bXX0sci5CQVRDSF9TSVpFPTFlMyxyfSgpLEtkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe31yZXR1cm4gci51c2U9ZnVuY3Rpb24oZSx0KXt2YXIgaSxuLGE9dGhpcyxzPWUubmFtZSsiX2ltYWdlIjtpZighZS5kYXRhfHxlLnR5cGUhPT11dC5UWVBFLkpTT058fCFlLmRhdGEuZnJhbWVzfHxhLnJlc291cmNlc1tzXSl7dCgpO3JldHVybn12YXIgbz0obj0oaT1lLmRhdGEpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5tZXRhKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ucmVsYXRlZF9tdWx0aV9wYWNrcztpZihBcnJheS5pc0FycmF5KG8pKWZvcih2YXIgaD1mdW5jdGlvbihwKXtpZih0eXBlb2YgcCE9InN0cmluZyIpcmV0dXJuImNvbnRpbnVlIjt2YXIgdj1wLnJlcGxhY2UoIi5qc29uIiwiIiksXz1FZS5yZXNvbHZlKGUudXJsLnJlcGxhY2UoYS5iYXNlVXJsLCIiKSxwKTtpZihhLnJlc291cmNlc1t2XXx8T2JqZWN0LnZhbHVlcyhhLnJlc291cmNlcykuc29tZShmdW5jdGlvbihnKXtyZXR1cm4gRWUuZm9ybWF0KEVlLnBhcnNlKGcudXJsKSk9PT1ffSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgbT17Y3Jvc3NPcmlnaW46ZS5jcm9zc09yaWdpbixsb2FkVHlwZTp1dC5MT0FEX1RZUEUuWEhSLHhoclR5cGU6dXQuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixwYXJlbnRSZXNvdXJjZTplLG1ldGFkYXRhOmUubWV0YWRhdGF9O2EuYWRkKHYsXyxtKX0sdT0wLGw9bzt1PGwubGVuZ3RoO3UrKyl7dmFyIGM9bFt1XTtoKGMpfXZhciBmPXtjcm9zc09yaWdpbjplLmNyb3NzT3JpZ2luLG1ldGFkYXRhOmUubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YSxwYXJlbnRSZXNvdXJjZTplfSxkPXIuZ2V0UmVzb3VyY2VQYXRoKGUsYS5iYXNlVXJsKTthLmFkZChzLGQsZixmdW5jdGlvbih2KXtpZih2LmVycm9yKXt0KHYuZXJyb3IpO3JldHVybn12YXIgXz1uZXcgJGQodi50ZXh0dXJlLGUuZGF0YSxlLnVybCk7Xy5wYXJzZSgpLnRoZW4oZnVuY3Rpb24oKXtlLnNwcml0ZXNoZWV0PV8sZS50ZXh0dXJlcz1fLnRleHR1cmVzLHQoKX0pfSl9LHIuZ2V0UmVzb3VyY2VQYXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaXNEYXRhVXJsP2UuZGF0YS5tZXRhLmltYWdlOkVlLnJlc29sdmUoZS51cmwucmVwbGFjZSh0LCIiKSxlLmRhdGEubWV0YS5pbWFnZSl9LHIuZXh0ZW5zaW9uPUsuTG9hZGVyLHJ9KCk7dmFyIHVuPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHVuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGkpe3QuX19wcm90b19fPWl9fHxmdW5jdGlvbih0LGkpe2Zvcih2YXIgbiBpbiBpKWkuaGFzT3duUHJvcGVydHkobikmJih0W25dPWlbbl0pfSx1bihyLGUpfTtmdW5jdGlvbiBtcyhyLGUpe3VuKHIsZSk7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cn1yLnByb3RvdHlwZT1lPT09bnVsbD9PYmplY3QuY3JlYXRlKGUpOih0LnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgdCl9dmFyIHJyPW5ldyB0dDsoZnVuY3Rpb24ocil7bXMoZSxyKTtmdW5jdGlvbiBlKHQsaSxuKXtpPT09dm9pZCAwJiYoaT0xMDApLG49PT12b2lkIDAmJihuPTEwMCk7dmFyIGE9ci5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIGEudGlsZVRyYW5zZm9ybT1uZXcgZmEsYS5fd2lkdGg9aSxhLl9oZWlnaHQ9bixhLnV2TWF0cml4PWEudGV4dHVyZS51dk1hdHJpeHx8bmV3IEZpKHQpLGEucGx1Z2luTmFtZT0idGlsaW5nU3ByaXRlIixhLnV2UmVzcGVjdEFuY2hvcj0hMSxhfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNsYW1wTWFyZ2luIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXZNYXRyaXguY2xhbXBNYXJnaW59LHNldDpmdW5jdGlvbih0KXt0aGlzLnV2TWF0cml4LmNsYW1wTWFyZ2luPXQsdGhpcy51dk1hdHJpeC51cGRhdGUoITApfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGlsZVNjYWxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlsZVRyYW5zZm9ybS5zY2FsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudGlsZVRyYW5zZm9ybS5zY2FsZS5jb3B5RnJvbSh0KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRpbGVQb3NpdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVUcmFuc2Zvcm0ucG9zaXRpb259LHNldDpmdW5jdGlvbih0KXt0aGlzLnRpbGVUcmFuc2Zvcm0ucG9zaXRpb24uY29weUZyb20odCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMudXZNYXRyaXgmJih0aGlzLnV2TWF0cml4LnRleHR1cmU9dGhpcy5fdGV4dHVyZSksdGhpcy5fY2FjaGVkVGludD0xNjc3NzIxNX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbih0KXt2YXIgaT10aGlzLl90ZXh0dXJlOyFpfHwhaS52YWxpZHx8KHRoaXMudGlsZVRyYW5zZm9ybS51cGRhdGVMb2NhbFRyYW5zZm9ybSgpLHRoaXMudXZNYXRyaXgudXBkYXRlKCksdC5iYXRjaC5zZXRPYmplY3RSZW5kZXJlcih0LnBsdWdpbnNbdGhpcy5wbHVnaW5OYW1lXSksdC5wbHVnaW5zW3RoaXMucGx1Z2luTmFtZV0ucmVuZGVyKHRoaXMpKX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dpZHRoKi10aGlzLl9hbmNob3IuX3gsaT10aGlzLl9oZWlnaHQqLXRoaXMuX2FuY2hvci5feSxuPXRoaXMuX3dpZHRoKigxLXRoaXMuX2FuY2hvci5feCksYT10aGlzLl9oZWlnaHQqKDEtdGhpcy5fYW5jaG9yLl95KTt0aGlzLl9ib3VuZHMuYWRkRnJhbWUodGhpcy50cmFuc2Zvcm0sdCxpLG4sYSl9LGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD09PTA/KHRoaXMuX2JvdW5kcy5taW5YPXRoaXMuX3dpZHRoKi10aGlzLl9hbmNob3IuX3gsdGhpcy5fYm91bmRzLm1pblk9dGhpcy5faGVpZ2h0Ki10aGlzLl9hbmNob3IuX3ksdGhpcy5fYm91bmRzLm1heFg9dGhpcy5fd2lkdGgqKDEtdGhpcy5fYW5jaG9yLl94KSx0aGlzLl9ib3VuZHMubWF4WT10aGlzLl9oZWlnaHQqKDEtdGhpcy5fYW5jaG9yLl95KSx0fHwodGhpcy5fbG9jYWxCb3VuZHNSZWN0fHwodGhpcy5fbG9jYWxCb3VuZHNSZWN0PW5ldyBIKSx0PXRoaXMuX2xvY2FsQm91bmRzUmVjdCksdGhpcy5fYm91bmRzLmdldFJlY3RhbmdsZSh0KSk6ci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzLHQpfSxlLnByb3RvdHlwZS5jb250YWluc1BvaW50PWZ1bmN0aW9uKHQpe3RoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHQscnIpO3ZhciBpPXRoaXMuX3dpZHRoLG49dGhpcy5faGVpZ2h0LGE9LWkqdGhpcy5hbmNob3IuX3g7aWYocnIueD49YSYmcnIueDxhK2kpe3ZhciBzPS1uKnRoaXMuYW5jaG9yLl95O2lmKHJyLnk+PXMmJnJyLnk8cytuKXJldHVybiEwfXJldHVybiExfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3IucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLHQpLHRoaXMudGlsZVRyYW5zZm9ybT1udWxsLHRoaXMudXZNYXRyaXg9bnVsbH0sZS5mcm9tPWZ1bmN0aW9uKHQsaSl7dmFyIG49dCBpbnN0YW5jZW9mIEw/dDpMLmZyb20odCxpKTtyZXR1cm4gbmV3IGUobixpLndpZHRoLGkuaGVpZ2h0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ3aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93aWR0aH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3dpZHRoPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVpZ2h0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGVpZ2h0PXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0pKHRyKTt2YXIgWmQ9YCN2ZXJzaW9uIDEwMAojZGVmaW5lIFNIQURFUl9OQU1FIFRpbGluZy1TcHJpdGUtU2ltcGxlLTEwMAoKcHJlY2lzaW9uIGxvd3AgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwp1bmlmb3JtIHZlYzQgdUNvbG9yOwoKdm9pZCBtYWluKHZvaWQpCnsKICAgIHZlYzQgdGV4U2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsKICAgIGdsX0ZyYWdDb2xvciA9IHRleFNhbXBsZSAqIHVDb2xvcjsKfQpgLGdzPWAjdmVyc2lvbiAxMDAKI2RlZmluZSBTSEFERVJfTkFNRSBUaWxpbmctU3ByaXRlLTEwMAoKcHJlY2lzaW9uIGxvd3AgZmxvYXQ7CgphdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7Cgp1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsKdW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4Owp1bmlmb3JtIG1hdDMgdVRyYW5zZm9ybTsKCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwoKdm9pZCBtYWluKHZvaWQpCnsKICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7CgogICAgdlRleHR1cmVDb29yZCA9ICh1VHJhbnNmb3JtICogdmVjMyhhVGV4dHVyZUNvb3JkLCAxLjApKS54eTsKfQpgLEpkPWAjdmVyc2lvbiAxMDAKI2lmZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICAgICNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZQojZW5kaWYKI2RlZmluZSBTSEFERVJfTkFNRSBUaWxpbmctU3ByaXRlLTEwMAoKcHJlY2lzaW9uIGxvd3AgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwp1bmlmb3JtIHZlYzQgdUNvbG9yOwp1bmlmb3JtIG1hdDMgdU1hcENvb3JkOwp1bmlmb3JtIHZlYzQgdUNsYW1wRnJhbWU7CnVuaWZvcm0gdmVjMiB1Q2xhbXBPZmZzZXQ7Cgp2b2lkIG1haW4odm9pZCkKewogICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgKyBjZWlsKHVDbGFtcE9mZnNldCAtIHZUZXh0dXJlQ29vcmQpOwogICAgY29vcmQgPSAodU1hcENvb3JkICogdmVjMyhjb29yZCwgMS4wKSkueHk7CiAgICB2ZWMyIHVuY2xhbXBlZCA9IGNvb3JkOwogICAgY29vcmQgPSBjbGFtcChjb29yZCwgdUNsYW1wRnJhbWUueHksIHVDbGFtcEZyYW1lLnp3KTsKCiAgICAjaWZkZWYgR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZAogICAgICAgIHZlYzQgdGV4U2FtcGxlID0gdW5jbGFtcGVkID09IGNvb3JkCiAgICAgICAgICAgID8gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgCiAgICAgICAgICAgIDogdGV4dHVyZTJETG9kRVhUKHVTYW1wbGVyLCBjb29yZCwgMCk7CiAgICAjZWxzZQogICAgICAgIHZlYzQgdGV4U2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCk7CiAgICAjZW5kaWYKCiAgICBnbF9GcmFnQ29sb3IgPSB0ZXhTYW1wbGUgKiB1Q29sb3I7Cn0KYCxRZD1gI3ZlcnNpb24gMzAwIGVzCiNkZWZpbmUgU0hBREVSX05BTUUgVGlsaW5nLVNwcml0ZS0zMDAKCnByZWNpc2lvbiBsb3dwIGZsb2F0OwoKaW4gdmVjMiBhVmVydGV4UG9zaXRpb247CmluIHZlYzIgYVRleHR1cmVDb29yZDsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4Owp1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7CnVuaWZvcm0gbWF0MyB1VHJhbnNmb3JtOwoKb3V0IHZlYzIgdlRleHR1cmVDb29yZDsKCnZvaWQgbWFpbih2b2lkKQp7CiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOwoKICAgIHZUZXh0dXJlQ29vcmQgPSAodVRyYW5zZm9ybSAqIHZlYzMoYVRleHR1cmVDb29yZCwgMS4wKSkueHk7Cn0KYCx0cD1gI3ZlcnNpb24gMzAwIGVzCiNkZWZpbmUgU0hBREVSX05BTUUgVGlsaW5nLVNwcml0ZS0xMDAKCnByZWNpc2lvbiBsb3dwIGZsb2F0OwoKaW4gdmVjMiB2VGV4dHVyZUNvb3JkOwoKb3V0IHZlYzQgZnJhZ21lbnRDb2xvcjsKCnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwp1bmlmb3JtIHZlYzQgdUNvbG9yOwp1bmlmb3JtIG1hdDMgdU1hcENvb3JkOwp1bmlmb3JtIHZlYzQgdUNsYW1wRnJhbWU7CnVuaWZvcm0gdmVjMiB1Q2xhbXBPZmZzZXQ7Cgp2b2lkIG1haW4odm9pZCkKewogICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgKyBjZWlsKHVDbGFtcE9mZnNldCAtIHZUZXh0dXJlQ29vcmQpOwogICAgY29vcmQgPSAodU1hcENvb3JkICogdmVjMyhjb29yZCwgMS4wKSkueHk7CiAgICB2ZWMyIHVuY2xhbXBlZCA9IGNvb3JkOwogICAgY29vcmQgPSBjbGFtcChjb29yZCwgdUNsYW1wRnJhbWUueHksIHVDbGFtcEZyYW1lLnp3KTsKCiAgICB2ZWM0IHRleFNhbXBsZSA9IHRleHR1cmUodVNhbXBsZXIsIGNvb3JkLCB1bmNsYW1wZWQgPT0gY29vcmQgPyAwLjBmIDogLTMyLjBmKTsvLyBsb2QtYmlhcyB2ZXJ5IG5lZ2F0aXZlIHRvIGZvcmNlIGxvZCAwCgogICAgZnJhZ21lbnRDb2xvciA9IHRleFNhbXBsZSAqIHVDb2xvcjsKfQpgLHpyPW5ldyB2dCxlcD1mdW5jdGlvbihyKXttcyhlLHIpO2Z1bmN0aW9uIGUodCl7dmFyIGk9ci5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIHQucnVubmVycy5jb250ZXh0Q2hhbmdlLmFkZChpKSxpLnF1YWQ9bmV3IFRhLGkuc3RhdGU9ZGUuZm9yMmQoKSxpfXJldHVybiBlLnByb3RvdHlwZS5jb250ZXh0Q2hhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJlcixpPXtnbG9iYWxzOnQuZ2xvYmFsVW5pZm9ybXN9O3RoaXMuc2ltcGxlU2hhZGVyPUp0LmZyb20oZ3MsWmQsaSksdGhpcy5zaGFkZXI9dC5jb250ZXh0LndlYkdMVmVyc2lvbj4xP0p0LmZyb20oUWQsdHAsaSk6SnQuZnJvbShncyxKZCxpKX0sZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMucmVuZGVyZXIsbj10aGlzLnF1YWQsYT1uLnZlcnRpY2VzO2FbMF09YVs2XT10Ll93aWR0aCotdC5hbmNob3IueCxhWzFdPWFbM109dC5faGVpZ2h0Ki10LmFuY2hvci55LGFbMl09YVs0XT10Ll93aWR0aCooMS10LmFuY2hvci54KSxhWzVdPWFbN109dC5faGVpZ2h0KigxLXQuYW5jaG9yLnkpO3ZhciBzPXQudXZSZXNwZWN0QW5jaG9yP3QuYW5jaG9yLng6MCxvPXQudXZSZXNwZWN0QW5jaG9yP3QuYW5jaG9yLnk6MDthPW4udXZzLGFbMF09YVs2XT0tcyxhWzFdPWFbM109LW8sYVsyXT1hWzRdPTEtcyxhWzVdPWFbN109MS1vLG4uaW52YWxpZGF0ZSgpO3ZhciBoPXQuX3RleHR1cmUsdT1oLmJhc2VUZXh0dXJlLGw9dS5hbHBoYU1vZGU+MCxjPXQudGlsZVRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybSxmPXQudXZNYXRyaXgsZD11LmlzUG93ZXJPZlR3byYmaC5mcmFtZS53aWR0aD09PXUud2lkdGgmJmguZnJhbWUuaGVpZ2h0PT09dS5oZWlnaHQ7ZCYmKHUuX2dsVGV4dHVyZXNbaS5DT05URVhUX1VJRF0/ZD11LndyYXBNb2RlIT09THQuQ0xBTVA6dS53cmFwTW9kZT09PUx0LkNMQU1QJiYodS53cmFwTW9kZT1MdC5SRVBFQVQpKTt2YXIgcD1kP3RoaXMuc2ltcGxlU2hhZGVyOnRoaXMuc2hhZGVyLHY9aC53aWR0aCxfPWguaGVpZ2h0LG09dC5fd2lkdGgsZz10Ll9oZWlnaHQ7enIuc2V0KGMuYSp2L20sYy5iKnYvZyxjLmMqXy9tLGMuZCpfL2csYy50eC9tLGMudHkvZyksenIuaW52ZXJ0KCksZD96ci5wcmVwZW5kKGYubWFwQ29vcmQpOihwLnVuaWZvcm1zLnVNYXBDb29yZD1mLm1hcENvb3JkLnRvQXJyYXkoITApLHAudW5pZm9ybXMudUNsYW1wRnJhbWU9Zi51Q2xhbXBGcmFtZSxwLnVuaWZvcm1zLnVDbGFtcE9mZnNldD1mLnVDbGFtcE9mZnNldCkscC51bmlmb3Jtcy51VHJhbnNmb3JtPXpyLnRvQXJyYXkoITApLHAudW5pZm9ybXMudUNvbG9yPWlhKHQudGludCx0LndvcmxkQWxwaGEscC51bmlmb3Jtcy51Q29sb3IsbCkscC51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeD10LnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybS50b0FycmF5KCEwKSxwLnVuaWZvcm1zLnVTYW1wbGVyPWgsaS5zaGFkZXIuYmluZChwKSxpLmdlb21ldHJ5LmJpbmQobiksdGhpcy5zdGF0ZS5ibGVuZE1vZGU9cmEodC5ibGVuZE1vZGUsbCksaS5zdGF0ZS5zZXQodGhpcy5zdGF0ZSksaS5nZW9tZXRyeS5kcmF3KHRoaXMucmVuZGVyZXIuZ2wuVFJJQU5HTEVTLDYsMCl9LGUuZXh0ZW5zaW9uPXtuYW1lOiJ0aWxpbmdTcHJpdGUiLHR5cGU6Sy5SZW5kZXJlclBsdWdpbn0sZX0oUHIpO3ZhciBsbj1mdW5jdGlvbihyLGUpe3JldHVybiBsbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sbG4ocixlKX07ZnVuY3Rpb24gZm4ocixlKXtsbihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBycD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXt0aGlzLnV2QnVmZmVyPWUsdGhpcy51dk1hdHJpeD10LHRoaXMuZGF0YT1udWxsLHRoaXMuX2J1ZmZlclVwZGF0ZUlkPS0xLHRoaXMuX3RleHR1cmVVcGRhdGVJZD0tMSx0aGlzLl91cGRhdGVJRD0wfXJldHVybiByLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYoISghZSYmdGhpcy5fYnVmZmVyVXBkYXRlSWQ9PT10aGlzLnV2QnVmZmVyLl91cGRhdGVJRCYmdGhpcy5fdGV4dHVyZVVwZGF0ZUlkPT09dGhpcy51dk1hdHJpeC5fdXBkYXRlSUQpKXt0aGlzLl9idWZmZXJVcGRhdGVJZD10aGlzLnV2QnVmZmVyLl91cGRhdGVJRCx0aGlzLl90ZXh0dXJlVXBkYXRlSWQ9dGhpcy51dk1hdHJpeC5fdXBkYXRlSUQ7dmFyIHQ9dGhpcy51dkJ1ZmZlci5kYXRhOyghdGhpcy5kYXRhfHx0aGlzLmRhdGEubGVuZ3RoIT09dC5sZW5ndGgpJiYodGhpcy5kYXRhPW5ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgpKSx0aGlzLnV2TWF0cml4Lm11bHRpcGx5VXZzKHQsdGhpcy5kYXRhKSx0aGlzLl91cGRhdGVJRCsrfX0scn0oKSxjbj1uZXcgdHQseXM9bmV3IGJyLGlyPWZ1bmN0aW9uKHIpe2ZuKGUscik7ZnVuY3Rpb24gZSh0LGksbixhKXthPT09dm9pZCAwJiYoYT1QdC5UUklBTkdMRVMpO3ZhciBzPXIuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gcy5nZW9tZXRyeT10LHMuc2hhZGVyPWkscy5zdGF0ZT1ufHxkZS5mb3IyZCgpLHMuZHJhd01vZGU9YSxzLnN0YXJ0PTAscy5zaXplPTAscy51dnM9bnVsbCxzLmluZGljZXM9bnVsbCxzLnZlcnRleERhdGE9bmV3IEZsb2F0MzJBcnJheSgxKSxzLnZlcnRleERpcnR5PS0xLHMuX3RyYW5zZm9ybUlEPS0xLHMuX3JvdW5kUGl4ZWxzPUkuUk9VTkRfUElYRUxTLHMuYmF0Y2hVdnM9bnVsbCxzfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdlb21ldHJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dlb21ldHJ5fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnkhPT10JiYodGhpcy5fZ2VvbWV0cnkmJih0aGlzLl9nZW9tZXRyeS5yZWZDb3VudC0tLHRoaXMuX2dlb21ldHJ5LnJlZkNvdW50PT09MCYmdGhpcy5fZ2VvbWV0cnkuZGlzcG9zZSgpKSx0aGlzLl9nZW9tZXRyeT10LHRoaXMuX2dlb21ldHJ5JiZ0aGlzLl9nZW9tZXRyeS5yZWZDb3VudCsrLHRoaXMudmVydGV4RGlydHk9LTEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXZCdWZmZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZW9tZXRyeS5idWZmZXJzWzFdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVydGljZXNCdWZmZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZW9tZXRyeS5idWZmZXJzWzBdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibWF0ZXJpYWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLnNoYWRlcj10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYmxlbmRNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuYmxlbmRNb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5zdGF0ZS5ibGVuZE1vZGU9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJvdW5kUGl4ZWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdW5kUGl4ZWxzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcm91bmRQaXhlbHMhPT10JiYodGhpcy5fdHJhbnNmb3JtSUQ9LTEpLHRoaXMuX3JvdW5kUGl4ZWxzPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0aW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuInRpbnQiaW4gdGhpcy5zaGFkZXI/dGhpcy5zaGFkZXIudGludDpudWxsfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5zaGFkZXIudGludD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGV4dHVyZSIse2dldDpmdW5jdGlvbigpe3JldHVybiJ0ZXh0dXJlImluIHRoaXMuc2hhZGVyP3RoaXMuc2hhZGVyLnRleHR1cmU6bnVsbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuc2hhZGVyLnRleHR1cmU9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2VvbWV0cnkuYnVmZmVyc1swXS5kYXRhLG49dGhpcy5zaGFkZXI7bi5iYXRjaGFibGUmJnRoaXMuZHJhd01vZGU9PT1QdC5UUklBTkdMRVMmJmkubGVuZ3RoPGUuQkFUQ0hBQkxFX1NJWkUqMj90aGlzLl9yZW5kZXJUb0JhdGNoKHQpOnRoaXMuX3JlbmRlckRlZmF1bHQodCl9LGUucHJvdG90eXBlLl9yZW5kZXJEZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuc2hhZGVyO2kuYWxwaGE9dGhpcy53b3JsZEFscGhhLGkudXBkYXRlJiZpLnVwZGF0ZSgpLHQuYmF0Y2guZmx1c2goKSxpLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4PXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkoITApLHQuc2hhZGVyLmJpbmQoaSksdC5zdGF0ZS5zZXQodGhpcy5zdGF0ZSksdC5nZW9tZXRyeS5iaW5kKHRoaXMuZ2VvbWV0cnksaSksdC5nZW9tZXRyeS5kcmF3KHRoaXMuZHJhd01vZGUsdGhpcy5zaXplLHRoaXMuc3RhcnQsdGhpcy5nZW9tZXRyeS5pbnN0YW5jZUNvdW50KX0sZS5wcm90b3R5cGUuX3JlbmRlclRvQmF0Y2g9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5nZW9tZXRyeSxuPXRoaXMuc2hhZGVyO24udXZNYXRyaXgmJihuLnV2TWF0cml4LnVwZGF0ZSgpLHRoaXMuY2FsY3VsYXRlVXZzKCkpLHRoaXMuY2FsY3VsYXRlVmVydGljZXMoKSx0aGlzLmluZGljZXM9aS5pbmRleEJ1ZmZlci5kYXRhLHRoaXMuX3RpbnRSR0I9bi5fdGludFJHQix0aGlzLl90ZXh0dXJlPW4udGV4dHVyZTt2YXIgYT10aGlzLm1hdGVyaWFsLnBsdWdpbk5hbWU7dC5iYXRjaC5zZXRPYmplY3RSZW5kZXJlcih0LnBsdWdpbnNbYV0pLHQucGx1Z2luc1thXS5yZW5kZXIodGhpcyl9LGUucHJvdG90eXBlLmNhbGN1bGF0ZVZlcnRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZW9tZXRyeSxpPXQuYnVmZmVyc1swXSxuPWkuZGF0YSxhPWkuX3VwZGF0ZUlEO2lmKCEoYT09PXRoaXMudmVydGV4RGlydHkmJnRoaXMuX3RyYW5zZm9ybUlEPT09dGhpcy50cmFuc2Zvcm0uX3dvcmxkSUQpKXt0aGlzLl90cmFuc2Zvcm1JRD10aGlzLnRyYW5zZm9ybS5fd29ybGRJRCx0aGlzLnZlcnRleERhdGEubGVuZ3RoIT09bi5sZW5ndGgmJih0aGlzLnZlcnRleERhdGE9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpO2Zvcih2YXIgcz10aGlzLnRyYW5zZm9ybS53b3JsZFRyYW5zZm9ybSxvPXMuYSxoPXMuYix1PXMuYyxsPXMuZCxjPXMudHgsZj1zLnR5LGQ9dGhpcy52ZXJ0ZXhEYXRhLHA9MDtwPGQubGVuZ3RoLzI7cCsrKXt2YXIgdj1uW3AqMl0sXz1uW3AqMisxXTtkW3AqMl09byp2K3UqXytjLGRbcCoyKzFdPWgqditsKl8rZn1pZih0aGlzLl9yb3VuZFBpeGVscylmb3IodmFyIG09SS5SRVNPTFVUSU9OLHA9MDtwPGQubGVuZ3RoOysrcClkW3BdPU1hdGgucm91bmQoKGRbcF0qbXwwKS9tKTt0aGlzLnZlcnRleERpcnR5PWF9fSxlLnByb3RvdHlwZS5jYWxjdWxhdGVVdnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdlb21ldHJ5LmJ1ZmZlcnNbMV0saT10aGlzLnNoYWRlcjtpLnV2TWF0cml4LmlzU2ltcGxlP3RoaXMudXZzPXQuZGF0YToodGhpcy5iYXRjaFV2c3x8KHRoaXMuYmF0Y2hVdnM9bmV3IHJwKHQsaS51dk1hdHJpeCkpLHRoaXMuYmF0Y2hVdnMudXBkYXRlKCksdGhpcy51dnM9dGhpcy5iYXRjaFV2cy5kYXRhKX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMuY2FsY3VsYXRlVmVydGljZXMoKSx0aGlzLl9ib3VuZHMuYWRkVmVydGV4RGF0YSh0aGlzLnZlcnRleERhdGEsMCx0aGlzLnZlcnRleERhdGEubGVuZ3RoKX0sZS5wcm90b3R5cGUuY29udGFpbnNQb2ludD1mdW5jdGlvbih0KXtpZighdGhpcy5nZXRCb3VuZHMoKS5jb250YWlucyh0LngsdC55KSlyZXR1cm4hMTt0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZSh0LGNuKTtmb3IodmFyIGk9dGhpcy5nZW9tZXRyeS5nZXRCdWZmZXIoImFWZXJ0ZXhQb3NpdGlvbiIpLmRhdGEsbj15cy5wb2ludHMsYT10aGlzLmdlb21ldHJ5LmdldEluZGV4KCkuZGF0YSxzPWEubGVuZ3RoLG89dGhpcy5kcmF3TW9kZT09PTQ/MzoxLGg9MDtoKzI8cztoKz1vKXt2YXIgdT1hW2hdKjIsbD1hW2grMV0qMixjPWFbaCsyXSoyO2lmKG5bMF09aVt1XSxuWzFdPWlbdSsxXSxuWzJdPWlbbF0sblszXT1pW2wrMV0sbls0XT1pW2NdLG5bNV09aVtjKzFdLHlzLmNvbnRhaW5zKGNuLngsY24ueSkpcmV0dXJuITB9cmV0dXJuITF9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7ci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsdCksdGhpcy5fY2FjaGVkVGV4dHVyZSYmKHRoaXMuX2NhY2hlZFRleHR1cmUuZGVzdHJveSgpLHRoaXMuX2NhY2hlZFRleHR1cmU9bnVsbCksdGhpcy5nZW9tZXRyeT1udWxsLHRoaXMuc2hhZGVyPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMudXZzPW51bGwsdGhpcy5pbmRpY2VzPW51bGwsdGhpcy52ZXJ0ZXhEYXRhPW51bGx9LGUuQkFUQ0hBQkxFX1NJWkU9MTAwLGV9KFh0KSxpcD1gdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7CnVuaWZvcm0gdmVjNCB1Q29sb3I7Cgp1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsKCnZvaWQgbWFpbih2b2lkKQp7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdUNvbG9yOwp9CmAsbnA9YGF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsKCnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4Owp1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7CnVuaWZvcm0gbWF0MyB1VGV4dHVyZU1hdHJpeDsKCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOwoKdm9pZCBtYWluKHZvaWQpCnsKICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7CgogICAgdlRleHR1cmVDb29yZCA9ICh1VGV4dHVyZU1hdHJpeCAqIHZlYzMoYVRleHR1cmVDb29yZCwgMS4wKSkueHk7Cn0KYCxucj1mdW5jdGlvbihyKXtmbihlLHIpO2Z1bmN0aW9uIGUodCxpKXt2YXIgbj10aGlzLGE9e3VTYW1wbGVyOnQsYWxwaGE6MSx1VGV4dHVyZU1hdHJpeDp2dC5JREVOVElUWSx1Q29sb3I6bmV3IEZsb2F0MzJBcnJheShbMSwxLDEsMV0pfTtyZXR1cm4gaT1PYmplY3QuYXNzaWduKHt0aW50OjE2Nzc3MjE1LGFscGhhOjEscGx1Z2luTmFtZToiYmF0Y2gifSxpKSxpLnVuaWZvcm1zJiZPYmplY3QuYXNzaWduKGEsaS51bmlmb3Jtcyksbj1yLmNhbGwodGhpcyxpLnByb2dyYW18fHFlLmZyb20obnAsaXApLGEpfHx0aGlzLG4uX2NvbG9yRGlydHk9ITEsbi51dk1hdHJpeD1uZXcgRmkodCksbi5iYXRjaGFibGU9aS5wcm9ncmFtPT09dm9pZCAwLG4ucGx1Z2luTmFtZT1pLnBsdWdpbk5hbWUsbi50aW50PWkudGludCxuLmFscGhhPWkuYWxwaGEsbn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0ZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudVNhbXBsZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLnVuaWZvcm1zLnVTYW1wbGVyIT09dCYmKCF0aGlzLnVuaWZvcm1zLnVTYW1wbGVyLmJhc2VUZXh0dXJlLmFscGhhTW9kZSE9IXQuYmFzZVRleHR1cmUuYWxwaGFNb2RlJiYodGhpcy5fY29sb3JEaXJ0eT0hMCksdGhpcy51bmlmb3Jtcy51U2FtcGxlcj10LHRoaXMudXZNYXRyaXgudGV4dHVyZT10KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFscGhhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FscGhhfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PXRoaXMuX2FscGhhJiYodGhpcy5fYWxwaGE9dCx0aGlzLl9jb2xvckRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRpbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGludH0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLl90aW50JiYodGhpcy5fdGludD10LHRoaXMuX3RpbnRSR0I9KHQ+PjE2KSsodCY2NTI4MCkrKCh0JjI1NSk8PDE2KSx0aGlzLl9jb2xvckRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jb2xvckRpcnR5KXt0aGlzLl9jb2xvckRpcnR5PSExO3ZhciB0PXRoaXMudGV4dHVyZS5iYXNlVGV4dHVyZTtpYSh0aGlzLl90aW50LHRoaXMuX2FscGhhLHRoaXMudW5pZm9ybXMudUNvbG9yLHQuYWxwaGFNb2RlKX10aGlzLnV2TWF0cml4LnVwZGF0ZSgpJiYodGhpcy51bmlmb3Jtcy51VGV4dHVyZU1hdHJpeD10aGlzLnV2TWF0cml4Lm1hcENvb3JkKX0sZX0oSnQpLFdyPWZ1bmN0aW9uKHIpe2ZuKGUscik7ZnVuY3Rpb24gZSh0LGksbil7dmFyIGE9ci5jYWxsKHRoaXMpfHx0aGlzLHM9bmV3IF90KHQpLG89bmV3IF90KGksITApLGg9bmV3IF90KG4sITAsITApO3JldHVybiBhLmFkZEF0dHJpYnV0ZSgiYVZlcnRleFBvc2l0aW9uIixzLDIsITEsRi5GTE9BVCkuYWRkQXR0cmlidXRlKCJhVGV4dHVyZUNvb3JkIixvLDIsITEsRi5GTE9BVCkuYWRkSW5kZXgoaCksYS5fdXBkYXRlSWQ9LTEsYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJ0ZXhEaXJ0eUlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyc1swXS5fdXBkYXRlSUR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oWWUpO3ZhciBkbj1mdW5jdGlvbihyLGUpe3JldHVybiBkbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sZG4ocixlKX07ZnVuY3Rpb24gYXAocixlKXtkbihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBxcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt0aGlzLmluZm89W10sdGhpcy5jb21tb249W10sdGhpcy5wYWdlPVtdLHRoaXMuY2hhcj1bXSx0aGlzLmtlcm5pbmc9W10sdGhpcy5kaXN0YW5jZUZpZWxkPVtdfXJldHVybiByfSgpLHNwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe31yZXR1cm4gci50ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJmUuaW5kZXhPZigiaW5mbyBmYWNlPSIpPT09MH0sci5wYXJzZT1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9eW2Etel0rXHMrLiskL2dtKSxpPXtpbmZvOltdLGNvbW1vbjpbXSxwYWdlOltdLGNoYXI6W10sY2hhcnM6W10sa2VybmluZzpbXSxrZXJuaW5nczpbXSxkaXN0YW5jZUZpZWxkOltdfTtmb3IodmFyIG4gaW4gdCl7dmFyIGE9dFtuXS5tYXRjaCgvXlthLXpdKy9nbSlbMF0scz10W25dLm1hdGNoKC9bYS16QS1aXSs9KFteXHMiJ10rfCIoW14iXSopIikvZ20pLG89e307Zm9yKHZhciBoIGluIHMpe3ZhciB1PXNbaF0uc3BsaXQoIj0iKSxsPXVbMF0sYz11WzFdLnJlcGxhY2UoLyIvZ20sIiIpLGY9cGFyc2VGbG9hdChjKSxkPWlzTmFOKGYpP2M6ZjtvW2xdPWR9aVthXS5wdXNoKG8pfXZhciBwPW5ldyBxcjtyZXR1cm4gaS5pbmZvLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHAuaW5mby5wdXNoKHtmYWNlOnYuZmFjZSxzaXplOnBhcnNlSW50KHYuc2l6ZSwxMCl9KX0pLGkuY29tbW9uLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHAuY29tbW9uLnB1c2goe2xpbmVIZWlnaHQ6cGFyc2VJbnQodi5saW5lSGVpZ2h0LDEwKX0pfSksaS5wYWdlLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHAucGFnZS5wdXNoKHtpZDpwYXJzZUludCh2LmlkLDEwKSxmaWxlOnYuZmlsZX0pfSksaS5jaGFyLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHAuY2hhci5wdXNoKHtpZDpwYXJzZUludCh2LmlkLDEwKSxwYWdlOnBhcnNlSW50KHYucGFnZSwxMCkseDpwYXJzZUludCh2LngsMTApLHk6cGFyc2VJbnQodi55LDEwKSx3aWR0aDpwYXJzZUludCh2LndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQodi5oZWlnaHQsMTApLHhvZmZzZXQ6cGFyc2VJbnQodi54b2Zmc2V0LDEwKSx5b2Zmc2V0OnBhcnNlSW50KHYueW9mZnNldCwxMCkseGFkdmFuY2U6cGFyc2VJbnQodi54YWR2YW5jZSwxMCl9KX0pLGkua2VybmluZy5mb3JFYWNoKGZ1bmN0aW9uKHYpe3JldHVybiBwLmtlcm5pbmcucHVzaCh7Zmlyc3Q6cGFyc2VJbnQodi5maXJzdCwxMCksc2Vjb25kOnBhcnNlSW50KHYuc2Vjb25kLDEwKSxhbW91bnQ6cGFyc2VJbnQodi5hbW91bnQsMTApfSl9KSxpLmRpc3RhbmNlRmllbGQuZm9yRWFjaChmdW5jdGlvbih2KXtyZXR1cm4gcC5kaXN0YW5jZUZpZWxkLnB1c2goe2Rpc3RhbmNlUmFuZ2U6cGFyc2VJbnQodi5kaXN0YW5jZVJhbmdlLDEwKSxmaWVsZFR5cGU6di5maWVsZFR5cGV9KX0pLHB9LHJ9KCkscG49ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7fXJldHVybiByLnRlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBYTUxEb2N1bWVudCYmZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFnZSIpLmxlbmd0aCYmZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5mbyIpWzBdLmdldEF0dHJpYnV0ZSgiZmFjZSIpIT09bnVsbH0sci5wYXJzZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IHFyLGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5mbyIpLG49ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29tbW9uIiksYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYWdlIikscz1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjaGFyIiksbz1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJrZXJuaW5nIiksaD1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXN0YW5jZUZpZWxkIiksdT0wO3U8aS5sZW5ndGg7dSsrKXQuaW5mby5wdXNoKHtmYWNlOmlbdV0uZ2V0QXR0cmlidXRlKCJmYWNlIiksc2l6ZTpwYXJzZUludChpW3VdLmdldEF0dHJpYnV0ZSgic2l6ZSIpLDEwKX0pO2Zvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKXQuY29tbW9uLnB1c2goe2xpbmVIZWlnaHQ6cGFyc2VJbnQoblt1XS5nZXRBdHRyaWJ1dGUoImxpbmVIZWlnaHQiKSwxMCl9KTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl0LnBhZ2UucHVzaCh7aWQ6cGFyc2VJbnQoYVt1XS5nZXRBdHRyaWJ1dGUoImlkIiksMTApfHwwLGZpbGU6YVt1XS5nZXRBdHRyaWJ1dGUoImZpbGUiKX0pO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgbD1zW3VdO3QuY2hhci5wdXNoKHtpZDpwYXJzZUludChsLmdldEF0dHJpYnV0ZSgiaWQiKSwxMCkscGFnZTpwYXJzZUludChsLmdldEF0dHJpYnV0ZSgicGFnZSIpLDEwKXx8MCx4OnBhcnNlSW50KGwuZ2V0QXR0cmlidXRlKCJ4IiksMTApLHk6cGFyc2VJbnQobC5nZXRBdHRyaWJ1dGUoInkiKSwxMCksd2lkdGg6cGFyc2VJbnQobC5nZXRBdHRyaWJ1dGUoIndpZHRoIiksMTApLGhlaWdodDpwYXJzZUludChsLmdldEF0dHJpYnV0ZSgiaGVpZ2h0IiksMTApLHhvZmZzZXQ6cGFyc2VJbnQobC5nZXRBdHRyaWJ1dGUoInhvZmZzZXQiKSwxMCkseW9mZnNldDpwYXJzZUludChsLmdldEF0dHJpYnV0ZSgieW9mZnNldCIpLDEwKSx4YWR2YW5jZTpwYXJzZUludChsLmdldEF0dHJpYnV0ZSgieGFkdmFuY2UiKSwxMCl9KX1mb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl0Lmtlcm5pbmcucHVzaCh7Zmlyc3Q6cGFyc2VJbnQob1t1XS5nZXRBdHRyaWJ1dGUoImZpcnN0IiksMTApLHNlY29uZDpwYXJzZUludChvW3VdLmdldEF0dHJpYnV0ZSgic2Vjb25kIiksMTApLGFtb3VudDpwYXJzZUludChvW3VdLmdldEF0dHJpYnV0ZSgiYW1vdW50IiksMTApfSk7Zm9yKHZhciB1PTA7dTxoLmxlbmd0aDt1KyspdC5kaXN0YW5jZUZpZWxkLnB1c2goe2ZpZWxkVHlwZTpoW3VdLmdldEF0dHJpYnV0ZSgiZmllbGRUeXBlIiksZGlzdGFuY2VSYW5nZTpwYXJzZUludChoW3VdLmdldEF0dHJpYnV0ZSgiZGlzdGFuY2VSYW5nZSIpLDEwKX0pO3JldHVybiB0fSxyfSgpLG9wPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcigpe31yZXR1cm4gci50ZXN0PWZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYmZS5pbmRleE9mKCI8Zm9udD4iKT4tMSl7dmFyIHQ9bmV3IGdsb2JhbFRoaXMuRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIik7cmV0dXJuIHBuLnRlc3QodCl9cmV0dXJuITF9LHIucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGdsb2JhbFRoaXMuRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIik7cmV0dXJuIHBuLnBhcnNlKHQpfSxyfSgpLHZuPVtzcCxwbixvcF07ZnVuY3Rpb24geHMocil7Zm9yKHZhciBlPTA7ZTx2bi5sZW5ndGg7ZSsrKWlmKHZuW2VdLnRlc3QocikpcmV0dXJuIHZuW2VdO3JldHVybiBudWxsfWZ1bmN0aW9uIGhwKHIsZSx0LGksbixhKXt2YXIgcz10LmZpbGw7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYocy5sZW5ndGg9PT0xKXJldHVybiBzWzBdfWVsc2UgcmV0dXJuIHM7dmFyIG8saD10LmRyb3BTaGFkb3c/dC5kcm9wU2hhZG93RGlzdGFuY2U6MCx1PXQucGFkZGluZ3x8MCxsPXIud2lkdGgvaS1oLXUqMixjPXIuaGVpZ2h0L2ktaC11KjIsZj1zLnNsaWNlKCksZD10LmZpbGxHcmFkaWVudFN0b3BzLnNsaWNlKCk7aWYoIWQubGVuZ3RoKWZvcih2YXIgcD1mLmxlbmd0aCsxLHY9MTt2PHA7Kyt2KWQucHVzaCh2L3ApO2lmKGYudW5zaGlmdChzWzBdKSxkLnVuc2hpZnQoMCksZi5wdXNoKHNbcy5sZW5ndGgtMV0pLGQucHVzaCgxKSx0LmZpbGxHcmFkaWVudFR5cGU9PT1lci5MSU5FQVJfVkVSVElDQUwpe289ZS5jcmVhdGVMaW5lYXJHcmFkaWVudChsLzIsdSxsLzIsYyt1KTtmb3IodmFyIF89MCxtPWEuZm9udFByb3BlcnRpZXMuZm9udFNpemUrdC5zdHJva2VUaGlja25lc3MsZz1tL2Msdj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hLmxpbmVIZWlnaHQqdixUPTA7VDxmLmxlbmd0aDtUKyspe3ZhciB4PTA7dHlwZW9mIGRbVF09PSJudW1iZXIiP3g9ZFtUXTp4PVQvZi5sZW5ndGg7dmFyIGI9eS9jK3gqZyxFPU1hdGgubWF4KF8sYik7RT1NYXRoLm1pbihFLDEpLG8uYWRkQ29sb3JTdG9wKEUsZltUXSksXz1FfX1lbHNle289ZS5jcmVhdGVMaW5lYXJHcmFkaWVudCh1LGMvMixsK3UsYy8yKTtmb3IodmFyIEE9Zi5sZW5ndGgrMSx3PTEsdj0wO3Y8Zi5sZW5ndGg7disrKXt2YXIgUz12b2lkIDA7dHlwZW9mIGRbdl09PSJudW1iZXIiP1M9ZFt2XTpTPXcvQSxvLmFkZENvbG9yU3RvcChTLGZbdl0pLHcrK319cmV0dXJuIG99ZnVuY3Rpb24gdXAocixlLHQsaSxuLGEscyl7dmFyIG89dC50ZXh0LGg9dC5mb250UHJvcGVydGllcztlLnRyYW5zbGF0ZShpLG4pLGUuc2NhbGUoYSxhKTt2YXIgdT1zLnN0cm9rZVRoaWNrbmVzcy8yLGw9LShzLnN0cm9rZVRoaWNrbmVzcy8yKTtpZihlLmZvbnQ9cy50b0ZvbnRTdHJpbmcoKSxlLmxpbmVXaWR0aD1zLnN0cm9rZVRoaWNrbmVzcyxlLnRleHRCYXNlbGluZT1zLnRleHRCYXNlbGluZSxlLmxpbmVKb2luPXMubGluZUpvaW4sZS5taXRlckxpbWl0PXMubWl0ZXJMaW1pdCxlLmZpbGxTdHlsZT1ocChyLGUscyxhLFtvXSx0KSxlLnN0cm9rZVN0eWxlPXMuc3Ryb2tlLHMuZHJvcFNoYWRvdyl7dmFyIGM9cy5kcm9wU2hhZG93Q29sb3IsZj13ZSh0eXBlb2YgYz09Im51bWJlciI/Yzp0YShjKSksZD1zLmRyb3BTaGFkb3dCbHVyKmEscD1zLmRyb3BTaGFkb3dEaXN0YW5jZSphO2Uuc2hhZG93Q29sb3I9InJnYmEoIitmWzBdKjI1NSsiLCIrZlsxXSoyNTUrIiwiK2ZbMl0qMjU1KyIsIitzLmRyb3BTaGFkb3dBbHBoYSsiKSIsZS5zaGFkb3dCbHVyPWQsZS5zaGFkb3dPZmZzZXRYPU1hdGguY29zKHMuZHJvcFNoYWRvd0FuZ2xlKSpwLGUuc2hhZG93T2Zmc2V0WT1NYXRoLnNpbihzLmRyb3BTaGFkb3dBbmdsZSkqcH1lbHNlIGUuc2hhZG93Q29sb3I9ImJsYWNrIixlLnNoYWRvd0JsdXI9MCxlLnNoYWRvd09mZnNldFg9MCxlLnNoYWRvd09mZnNldFk9MDtzLnN0cm9rZSYmcy5zdHJva2VUaGlja25lc3MmJmUuc3Ryb2tlVGV4dChvLHUsbCt0LmxpbmVIZWlnaHQtaC5kZXNjZW50KSxzLmZpbGwmJmUuZmlsbFRleHQobyx1LGwrdC5saW5lSGVpZ2h0LWguZGVzY2VudCksZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuZmlsbFN0eWxlPSJyZ2JhKDAsIDAsIDAsIDApIn1mdW5jdGlvbiBicyhyKXtyZXR1cm4gQXJyYXkuZnJvbT9BcnJheS5mcm9tKHIpOnIuc3BsaXQoIiIpfWZ1bmN0aW9uIGxwKHIpe3R5cGVvZiByPT0ic3RyaW5nIiYmKHI9W3JdKTtmb3IodmFyIGU9W10sdD0wLGk9ci5sZW5ndGg7dDxpO3QrKyl7dmFyIG49clt0XTtpZihBcnJheS5pc0FycmF5KG4pKXtpZihuLmxlbmd0aCE9PTIpdGhyb3cgbmV3IEVycm9yKCJbQml0bWFwRm9udF06IEludmFsaWQgY2hhcmFjdGVyIHJhbmdlIGxlbmd0aCwgZXhwZWN0aW5nIDIgZ290ICIrbi5sZW5ndGgrIi4iKTt2YXIgYT1uWzBdLmNoYXJDb2RlQXQoMCkscz1uWzFdLmNoYXJDb2RlQXQoMCk7aWYoczxhKXRocm93IG5ldyBFcnJvcigiW0JpdG1hcEZvbnRdOiBJbnZhbGlkIGNoYXJhY3RlciByYW5nZS4iKTtmb3IodmFyIG89YSxoPXM7bzw9aDtvKyspZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpfWVsc2UgZS5wdXNoLmFwcGx5KGUsYnMobikpfWlmKGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIltCaXRtYXBGb250XTogRW1wdHkgc2V0IHdoZW4gcmVzb2x2aW5nIGNoYXJhY3RlcnMuIik7cmV0dXJuIGV9ZnVuY3Rpb24gJHIocil7cmV0dXJuIHIuY29kZVBvaW50QXQ/ci5jb2RlUG9pbnRBdCgwKTpyLmNoYXJDb2RlQXQoMCl9dmFyIHJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsaSl7dmFyIG4sYSxzPWUuaW5mb1swXSxvPWUuY29tbW9uWzBdLGg9ZS5wYWdlWzBdLHU9ZS5kaXN0YW5jZUZpZWxkWzBdLGw9Z3IoaC5maWxlKSxjPXt9O3RoaXMuX293bnNUZXh0dXJlcz1pLHRoaXMuZm9udD1zLmZhY2UsdGhpcy5zaXplPXMuc2l6ZSx0aGlzLmxpbmVIZWlnaHQ9by5saW5lSGVpZ2h0L2wsdGhpcy5jaGFycz17fSx0aGlzLnBhZ2VUZXh0dXJlcz1jO2Zvcih2YXIgZj0wO2Y8ZS5wYWdlLmxlbmd0aDtmKyspe3ZhciBkPWUucGFnZVtmXSxwPWQuaWQsdj1kLmZpbGU7Y1twXT10IGluc3RhbmNlb2YgQXJyYXk/dFtmXTp0W3ZdLHUhPW51bGwmJnUuZmllbGRUeXBlJiZ1LmZpZWxkVHlwZSE9PSJub25lIiYmKGNbcF0uYmFzZVRleHR1cmUuYWxwaGFNb2RlPUF0Lk5PX1BSRU1VTFRJUExJRURfQUxQSEEsY1twXS5iYXNlVGV4dHVyZS5taXBtYXA9UnQuT0ZGKX1mb3IodmFyIGY9MDtmPGUuY2hhci5sZW5ndGg7ZisrKXt2YXIgXz1lLmNoYXJbZl0scD1fLmlkLG09Xy5wYWdlLGc9ZS5jaGFyW2ZdLHk9Zy54LFQ9Zy55LHg9Zy53aWR0aCxiPWcuaGVpZ2h0LEU9Zy54b2Zmc2V0LEE9Zy55b2Zmc2V0LHc9Zy54YWR2YW5jZTt5Lz1sLFQvPWwseC89bCxiLz1sLEUvPWwsQS89bCx3Lz1sO3ZhciBTPW5ldyBIKHkrY1ttXS5mcmFtZS54L2wsVCtjW21dLmZyYW1lLnkvbCx4LGIpO3RoaXMuY2hhcnNbcF09e3hPZmZzZXQ6RSx5T2Zmc2V0OkEseEFkdmFuY2U6dyxrZXJuaW5nOnt9LHRleHR1cmU6bmV3IEwoY1ttXS5iYXNlVGV4dHVyZSxTKSxwYWdlOm19fWZvcih2YXIgZj0wO2Y8ZS5rZXJuaW5nLmxlbmd0aDtmKyspe3ZhciBEPWUua2VybmluZ1tmXSxCPUQuZmlyc3QsRz1ELnNlY29uZCxaPUQuYW1vdW50O0IvPWwsRy89bCxaLz1sLHRoaXMuY2hhcnNbR10mJih0aGlzLmNoYXJzW0ddLmtlcm5pbmdbQl09Wil9dGhpcy5kaXN0YW5jZUZpZWxkUmFuZ2U9dT09bnVsbD92b2lkIDA6dS5kaXN0YW5jZVJhbmdlLHRoaXMuZGlzdGFuY2VGaWVsZFR5cGU9KGE9KG49dT09bnVsbD92b2lkIDA6dS5maWVsZFR5cGUpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi50b0xvd2VyQ2FzZSgpKSE9PW51bGwmJmEhPT12b2lkIDA/YToibm9uZSJ9cmV0dXJuIHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jaGFycyl0aGlzLmNoYXJzW2VdLnRleHR1cmUuZGVzdHJveSgpLHRoaXMuY2hhcnNbZV0udGV4dHVyZT1udWxsO2Zvcih2YXIgZSBpbiB0aGlzLnBhZ2VUZXh0dXJlcyl0aGlzLl9vd25zVGV4dHVyZXMmJnRoaXMucGFnZVRleHR1cmVzW2VdLmRlc3Ryb3koITApLHRoaXMucGFnZVRleHR1cmVzW2VdPW51bGw7dGhpcy5jaGFycz1udWxsLHRoaXMucGFnZVRleHR1cmVzPW51bGx9LHIuaW5zdGFsbD1mdW5jdGlvbihlLHQsaSl7dmFyIG47aWYoZSBpbnN0YW5jZW9mIHFyKW49ZTtlbHNle3ZhciBhPXhzKGUpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGRhdGEgZm9ybWF0IGZvciBmb250LiIpO249YS5wYXJzZShlKX10IGluc3RhbmNlb2YgTCYmKHQ9W3RdKTt2YXIgcz1uZXcgcihuLHQsaSk7cmV0dXJuIHIuYXZhaWxhYmxlW3MuZm9udF09cyxzfSxyLnVuaW5zdGFsbD1mdW5jdGlvbihlKXt2YXIgdD1yLmF2YWlsYWJsZVtlXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGZvbnQgZm91bmQgbmFtZWQgJyIrZSsiJyIpO3QuZGVzdHJveSgpLGRlbGV0ZSByLmF2YWlsYWJsZVtlXX0sci5mcm9tPWZ1bmN0aW9uKGUsdCxpKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIltCaXRtYXBGb250XSBQcm9wZXJ0eSBgbmFtZWAgaXMgcmVxdWlyZWQuIik7dmFyIG49T2JqZWN0LmFzc2lnbih7fSxyLmRlZmF1bHRPcHRpb25zLGkpLGE9bi5jaGFycyxzPW4ucGFkZGluZyxvPW4ucmVzb2x1dGlvbixoPW4udGV4dHVyZVdpZHRoLHU9bi50ZXh0dXJlSGVpZ2h0LGw9bHAoYSksYz10IGluc3RhbmNlb2YgZ2U/dDpuZXcgZ2UodCksZj1oLGQ9bmV3IHFyO2QuaW5mb1swXT17ZmFjZTpjLmZvbnRGYW1pbHksc2l6ZTpjLmZvbnRTaXplfSxkLmNvbW1vblswXT17bGluZUhlaWdodDpjLmZvbnRTaXplfTtmb3IodmFyIHA9MCx2PTAsXyxtLGcseT0wLFQ9W10seD0wO3g8bC5sZW5ndGg7eCsrKXtffHwoXz1JLkFEQVBURVIuY3JlYXRlQ2FudmFzKCksXy53aWR0aD1oLF8uaGVpZ2h0PXUsbT1fLmdldENvbnRleHQoIjJkIiksZz1uZXcgaihfLHtyZXNvbHV0aW9uOm99KSxULnB1c2gobmV3IEwoZykpLGQucGFnZS5wdXNoKHtpZDpULmxlbmd0aC0xLGZpbGU6IiJ9KSk7dmFyIGI9bFt4XSxFPU50Lm1lYXN1cmVUZXh0KGIsYywhMSxfKSxBPUUud2lkdGgsdz1NYXRoLmNlaWwoRS5oZWlnaHQpLFM9TWF0aC5jZWlsKChjLmZvbnRTdHlsZT09PSJpdGFsaWMiPzI6MSkqQSk7aWYodj49dS13Km8pe2lmKHY9PT0wKXRocm93IG5ldyBFcnJvcigiW0JpdG1hcEZvbnRdIHRleHR1cmVIZWlnaHQgIit1KyJweCBpcyB0b28gc21hbGwgIisoIihmb250RmFtaWx5OiAnIitjLmZvbnRGYW1pbHkrIicsIGZvbnRTaXplOiAiK2MuZm9udFNpemUrInB4LCBjaGFyOiAnIitiKyInKSIpKTstLXgsXz1udWxsLG09bnVsbCxnPW51bGwsdj0wLHA9MCx5PTA7Y29udGludWV9aWYoeT1NYXRoLm1heCh3K0UuZm9udFByb3BlcnRpZXMuZGVzY2VudCx5KSxTKm8rcD49Zil7aWYocD09PTApdGhyb3cgbmV3IEVycm9yKCJbQml0bWFwRm9udF0gdGV4dHVyZVdpZHRoICIraCsicHggaXMgdG9vIHNtYWxsICIrKCIoZm9udEZhbWlseTogJyIrYy5mb250RmFtaWx5KyInLCBmb250U2l6ZTogIitjLmZvbnRTaXplKyJweCwgY2hhcjogJyIrYisiJykiKSk7LS14LHYrPXkqbyx2PU1hdGguY2VpbCh2KSxwPTAseT0wO2NvbnRpbnVlfXVwKF8sbSxFLHAsdixvLGMpO3ZhciBEPSRyKEUudGV4dCk7ZC5jaGFyLnB1c2goe2lkOkQscGFnZTpULmxlbmd0aC0xLHg6cC9vLHk6di9vLHdpZHRoOlMsaGVpZ2h0OncseG9mZnNldDowLHlvZmZzZXQ6MCx4YWR2YW5jZTpNYXRoLmNlaWwoQS0oYy5kcm9wU2hhZG93P2MuZHJvcFNoYWRvd0Rpc3RhbmNlOjApLShjLnN0cm9rZT9jLnN0cm9rZVRoaWNrbmVzczowKSl9KSxwKz0oUysyKnMpKm8scD1NYXRoLmNlaWwocCl9Zm9yKHZhciB4PTAsQj1sLmxlbmd0aDt4PEI7eCsrKWZvcih2YXIgRz1sW3hdLFo9MDtaPEI7WisrKXt2YXIgTT1sW1pdLE89bS5tZWFzdXJlVGV4dChHKS53aWR0aCxrPW0ubWVhc3VyZVRleHQoTSkud2lkdGgsZ3Q9bS5tZWFzdXJlVGV4dChHK00pLndpZHRoLFk9Z3QtKE8rayk7WSYmZC5rZXJuaW5nLnB1c2goe2ZpcnN0OiRyKEcpLHNlY29uZDokcihNKSxhbW91bnQ6WX0pfXZhciBDPW5ldyByKGQsVCwhMCk7cmV0dXJuIHIuYXZhaWxhYmxlW2VdIT09dm9pZCAwJiZyLnVuaW5zdGFsbChlKSxyLmF2YWlsYWJsZVtlXT1DLEN9LHIuQUxQSEE9W1siYSIsInoiXSxbIkEiLCJaIl0sIiAiXSxyLk5VTUVSSUM9W1siMCIsIjkiXV0sci5BTFBIQU5VTUVSSUM9W1siYSIsInoiXSxbIkEiLCJaIl0sWyIwIiwiOSJdLCIgIl0sci5BU0NJST1bWyIgIiwifiJdXSxyLmRlZmF1bHRPcHRpb25zPXtyZXNvbHV0aW9uOjEsdGV4dHVyZVdpZHRoOjUxMix0ZXh0dXJlSGVpZ2h0OjUxMixwYWRkaW5nOjQsY2hhcnM6ci5BTFBIQU5VTUVSSUN9LHIuYXZhaWxhYmxlPXt9LHJ9KCksZnA9YC8vIFBpeGkgdGV4dHVyZSBpbmZvXHIKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XHIKdW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XHIKXHIKLy8gVGludFxyCnVuaWZvcm0gdmVjNCB1Q29sb3I7XHIKXHIKLy8gb24gMkQgYXBwbGljYXRpb25zIGZ3aWR0aCBpcyBzY3JlZW5TY2FsZSAvIGdseXBoQXRsYXNTY2FsZSAqIGRpc3RhbmNlRmllbGRSYW5nZVxyCnVuaWZvcm0gZmxvYXQgdUZXaWR0aDtccgpccgp2b2lkIG1haW4odm9pZCkge1xyClxyCiAgLy8gVG8gc3RhY2sgTVNERiBhbmQgU0RGIHdlIG5lZWQgYSBub24tcHJlLW11bHRpcGxpZWQtYWxwaGEgdGV4dHVyZS5ccgogIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xyClxyCiAgLy8gTVNERlxyCiAgZmxvYXQgbWVkaWFuID0gdGV4Q29sb3IuciArIHRleENvbG9yLmcgKyB0ZXhDb2xvci5iIC1ccgogICAgICAgICAgICAgICAgICBtaW4odGV4Q29sb3IuciwgbWluKHRleENvbG9yLmcsIHRleENvbG9yLmIpKSAtXHIKICAgICAgICAgICAgICAgICAgbWF4KHRleENvbG9yLnIsIG1heCh0ZXhDb2xvci5nLCB0ZXhDb2xvci5iKSk7XHIKICAvLyBTREZccgogIG1lZGlhbiA9IG1pbihtZWRpYW4sIHRleENvbG9yLmEpO1xyClxyCiAgZmxvYXQgc2NyZWVuUHhEaXN0YW5jZSA9IHVGV2lkdGggKiAobWVkaWFuIC0gMC41KTtccgogIGZsb2F0IGFscGhhID0gY2xhbXAoc2NyZWVuUHhEaXN0YW5jZSArIDAuNSwgMC4wLCAxLjApO1xyCiAgaWYgKG1lZGlhbiA8IDAuMDEpIHtccgogICAgYWxwaGEgPSAwLjA7XHIKICB9IGVsc2UgaWYgKG1lZGlhbiA+IDAuOTkpIHtccgogICAgYWxwaGEgPSAxLjA7XHIKICB9XHIKXHIKICAvLyBOUE0gVGV4dHVyZXMsIE5QTSBvdXRwdXRzXHIKICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHVDb2xvci5yZ2IsIHVDb2xvci5hICogYWxwaGEpO1xyClxyCn1ccgpgLGNwPWAvLyBNZXNoIG1hdGVyaWFsIGRlZmF1bHQgZnJhZ21lbnRccgphdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XHIKYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtccgpccgp1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtccgp1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7XHIKdW5pZm9ybSBtYXQzIHVUZXh0dXJlTWF0cml4O1xyClxyCnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xyClxyCnZvaWQgbWFpbih2b2lkKVxyCntccgogICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtccgpccgogICAgdlRleHR1cmVDb29yZCA9ICh1VGV4dHVyZU1hdHJpeCAqIHZlYzMoYVRleHR1cmVDb29yZCwgMS4wKSkueHk7XHIKfVxyCmAsVHM9W10sRXM9W10sd3M9W107KGZ1bmN0aW9uKHIpe2FwKGUscik7ZnVuY3Rpb24gZSh0LGkpe2k9PT12b2lkIDAmJihpPXt9KTt2YXIgbj1yLmNhbGwodGhpcyl8fHRoaXM7bi5fdGludD0xNjc3NzIxNTt2YXIgYT1PYmplY3QuYXNzaWduKHt9LGUuc3R5bGVEZWZhdWx0cyxpKSxzPWEuYWxpZ24sbz1hLnRpbnQsaD1hLm1heFdpZHRoLHU9YS5sZXR0ZXJTcGFjaW5nLGw9YS5mb250TmFtZSxjPWEuZm9udFNpemU7aWYoIXJlLmF2YWlsYWJsZVtsXSl0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0bWFwRm9udCAiJytsKyciJyk7cmV0dXJuIG4uX2FjdGl2ZVBhZ2VzTWVzaERhdGE9W10sbi5fdGV4dFdpZHRoPTAsbi5fdGV4dEhlaWdodD0wLG4uX2FsaWduPXMsbi5fdGludD1vLG4uX2ZvbnQ9dm9pZCAwLG4uX2ZvbnROYW1lPWwsbi5fZm9udFNpemU9YyxuLnRleHQ9dCxuLl9tYXhXaWR0aD1oLG4uX21heExpbmVIZWlnaHQ9MCxuLl9sZXR0ZXJTcGFjaW5nPXUsbi5fYW5jaG9yPW5ldyBSZShmdW5jdGlvbigpe24uZGlydHk9ITB9LG4sMCwwKSxuLl9yb3VuZFBpeGVscz1JLlJPVU5EX1BJWEVMUyxuLmRpcnR5PSEwLG4uX3Jlc29sdXRpb249SS5SRVNPTFVUSU9OLG4uX2F1dG9SZXNvbHV0aW9uPSEwLG4uX3RleHR1cmVDYWNoZT17fSxufXJldHVybiBlLnByb3RvdHlwZS51cGRhdGVUZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGk9cmUuYXZhaWxhYmxlW3RoaXMuX2ZvbnROYW1lXSxuPXRoaXMuZm9udFNpemUsYT1uL2kuc2l6ZSxzPW5ldyB0dCxvPVtdLGg9W10sdT1bXSxsPXRoaXMuX3RleHQucmVwbGFjZSgvKD86XHJcbnxccikvZyxgCmApfHwiICIsYz1icyhsKSxmPXRoaXMuX21heFdpZHRoKmkuc2l6ZS9uLGQ9aS5kaXN0YW5jZUZpZWxkVHlwZT09PSJub25lIj9UczpFcyxwPW51bGwsdj0wLF89MCxtPTAsZz0tMSx5PTAsVD0wLHg9MCxiPTAsRT0wO0U8Yy5sZW5ndGg7RSsrKXt2YXIgQT1jW0VdLHc9JHIoQSk7aWYoLyg/OlxzKS8udGVzdChBKSYmKGc9RSx5PXYsYisrKSxBPT09IlxyInx8QT09PWAKYCl7aC5wdXNoKHYpLHUucHVzaCgtMSksXz1NYXRoLm1heChfLHYpLCsrbSwrK1Qscy54PTAscy55Kz1pLmxpbmVIZWlnaHQscD1udWxsLGI9MDtjb250aW51ZX12YXIgUz1pLmNoYXJzW3ddO2lmKFMpe3AmJlMua2VybmluZ1twXSYmKHMueCs9Uy5rZXJuaW5nW3BdKTt2YXIgRD13cy5wb3AoKXx8e3RleHR1cmU6TC5FTVBUWSxsaW5lOjAsY2hhckNvZGU6MCxwcmV2U3BhY2VzOjAscG9zaXRpb246bmV3IHR0fTtELnRleHR1cmU9Uy50ZXh0dXJlLEQubGluZT1tLEQuY2hhckNvZGU9dyxELnBvc2l0aW9uLng9cy54K1MueE9mZnNldCt0aGlzLl9sZXR0ZXJTcGFjaW5nLzIsRC5wb3NpdGlvbi55PXMueStTLnlPZmZzZXQsRC5wcmV2U3BhY2VzPWIsby5wdXNoKEQpLHY9RC5wb3NpdGlvbi54K01hdGgubWF4KFMueEFkdmFuY2UtUy54T2Zmc2V0LFMudGV4dHVyZS5vcmlnLndpZHRoKSxzLngrPVMueEFkdmFuY2UrdGhpcy5fbGV0dGVyU3BhY2luZyx4PU1hdGgubWF4KHgsUy55T2Zmc2V0K1MudGV4dHVyZS5oZWlnaHQpLHA9dyxnIT09LTEmJmY+MCYmcy54PmYmJigrK1QsU2UobywxK2ctVCwxK0UtZyksRT1nLGc9LTEsaC5wdXNoKHkpLHUucHVzaChvLmxlbmd0aD4wP29bby5sZW5ndGgtMV0ucHJldlNwYWNlczowKSxfPU1hdGgubWF4KF8seSksbSsrLHMueD0wLHMueSs9aS5saW5lSGVpZ2h0LHA9bnVsbCxiPTApfX12YXIgQj1jW2MubGVuZ3RoLTFdO0IhPT0iXHIiJiZCIT09YApgJiYoLyg/OlxzKS8udGVzdChCKSYmKHY9eSksaC5wdXNoKHYpLF89TWF0aC5tYXgoXyx2KSx1LnB1c2goLTEpKTtmb3IodmFyIEc9W10sRT0wO0U8PW07RSsrKXt2YXIgWj0wO3RoaXMuX2FsaWduPT09InJpZ2h0Ij9aPV8taFtFXTp0aGlzLl9hbGlnbj09PSJjZW50ZXIiP1o9KF8taFtFXSkvMjp0aGlzLl9hbGlnbj09PSJqdXN0aWZ5IiYmKFo9dVtFXTwwPzA6KF8taFtFXSkvdVtFXSksRy5wdXNoKFopfXZhciBNPW8ubGVuZ3RoLE89e30saz1bXSxndD10aGlzLl9hY3RpdmVQYWdlc01lc2hEYXRhO2QucHVzaC5hcHBseShkLGd0KTtmb3IodmFyIEU9MDtFPE07RSsrKXt2YXIgWT1vW0VdLnRleHR1cmUsQz1ZLmJhc2VUZXh0dXJlLnVpZDtpZighT1tDXSl7dmFyIFA9ZC5wb3AoKTtpZighUCl7dmFyIFg9bmV3IFdyLHo9dm9pZCAwLFc9dm9pZCAwO2kuZGlzdGFuY2VGaWVsZFR5cGU9PT0ibm9uZSI/KHo9bmV3IG5yKEwuRU1QVFkpLFc9Ti5OT1JNQUwpOih6PW5ldyBucihMLkVNUFRZLHtwcm9ncmFtOnFlLmZyb20oY3AsZnApLHVuaWZvcm1zOnt1RldpZHRoOjB9fSksVz1OLk5PUk1BTF9OUE0pO3ZhciBmdD1uZXcgaXIoWCx6KTtmdC5ibGVuZE1vZGU9VyxQPXtpbmRleDowLGluZGV4Q291bnQ6MCx2ZXJ0ZXhDb3VudDowLHV2c0NvdW50OjAsdG90YWw6MCxtZXNoOmZ0LHZlcnRpY2VzOm51bGwsdXZzOm51bGwsaW5kaWNlczpudWxsfX1QLmluZGV4PTAsUC5pbmRleENvdW50PTAsUC52ZXJ0ZXhDb3VudD0wLFAudXZzQ291bnQ9MCxQLnRvdGFsPTA7dmFyIHJ0PXRoaXMuX3RleHR1cmVDYWNoZTtydFtDXT1ydFtDXXx8bmV3IEwoWS5iYXNlVGV4dHVyZSksUC5tZXNoLnRleHR1cmU9cnRbQ10sUC5tZXNoLnRpbnQ9dGhpcy5fdGludCxrLnB1c2goUCksT1tDXT1QfU9bQ10udG90YWwrK31mb3IodmFyIEU9MDtFPGd0Lmxlbmd0aDtFKyspay5pbmRleE9mKGd0W0VdKT09PS0xJiZ0aGlzLnJlbW92ZUNoaWxkKGd0W0VdLm1lc2gpO2Zvcih2YXIgRT0wO0U8ay5sZW5ndGg7RSsrKWtbRV0ubWVzaC5wYXJlbnQhPT10aGlzJiZ0aGlzLmFkZENoaWxkKGtbRV0ubWVzaCk7dGhpcy5fYWN0aXZlUGFnZXNNZXNoRGF0YT1rO2Zvcih2YXIgRSBpbiBPKXt2YXIgUD1PW0VdLGl0PVAudG90YWw7aWYoISgoKHQ9UC5pbmRpY2VzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQubGVuZ3RoKT42Kml0KXx8UC52ZXJ0aWNlcy5sZW5ndGg8aXIuQkFUQ0hBQkxFX1NJWkUqMilQLnZlcnRpY2VzPW5ldyBGbG9hdDMyQXJyYXkoNCoyKml0KSxQLnV2cz1uZXcgRmxvYXQzMkFycmF5KDQqMippdCksUC5pbmRpY2VzPW5ldyBVaW50MTZBcnJheSg2Kml0KTtlbHNlIGZvcih2YXIgeXQ9UC50b3RhbCxUdD1QLnZlcnRpY2VzLGN0PXl0KjQqMjtjdDxUdC5sZW5ndGg7Y3QrKylUdFtjdF09MDtQLm1lc2guc2l6ZT02Kml0fWZvcih2YXIgRT0wO0U8TTtFKyspe3ZhciBBPW9bRV0sSj1BLnBvc2l0aW9uLngrR1tBLmxpbmVdKih0aGlzLl9hbGlnbj09PSJqdXN0aWZ5Ij9BLnByZXZTcGFjZXM6MSk7dGhpcy5fcm91bmRQaXhlbHMmJihKPU1hdGgucm91bmQoSikpO3ZhciBldD1KKmEsbnQ9QS5wb3NpdGlvbi55KmEsWT1BLnRleHR1cmUsVj1PW1kuYmFzZVRleHR1cmUudWlkXSxFdD1ZLmZyYW1lLHd0PVkuX3V2cyxxPVYuaW5kZXgrKztWLmluZGljZXNbcSo2KzBdPTArcSo0LFYuaW5kaWNlc1txKjYrMV09MStxKjQsVi5pbmRpY2VzW3EqNisyXT0yK3EqNCxWLmluZGljZXNbcSo2KzNdPTArcSo0LFYuaW5kaWNlc1txKjYrNF09MitxKjQsVi5pbmRpY2VzW3EqNis1XT0zK3EqNCxWLnZlcnRpY2VzW3EqOCswXT1ldCxWLnZlcnRpY2VzW3EqOCsxXT1udCxWLnZlcnRpY2VzW3EqOCsyXT1ldCtFdC53aWR0aCphLFYudmVydGljZXNbcSo4KzNdPW50LFYudmVydGljZXNbcSo4KzRdPWV0K0V0LndpZHRoKmEsVi52ZXJ0aWNlc1txKjgrNV09bnQrRXQuaGVpZ2h0KmEsVi52ZXJ0aWNlc1txKjgrNl09ZXQsVi52ZXJ0aWNlc1txKjgrN109bnQrRXQuaGVpZ2h0KmEsVi51dnNbcSo4KzBdPXd0LngwLFYudXZzW3EqOCsxXT13dC55MCxWLnV2c1txKjgrMl09d3QueDEsVi51dnNbcSo4KzNdPXd0LnkxLFYudXZzW3EqOCs0XT13dC54MixWLnV2c1txKjgrNV09d3QueTIsVi51dnNbcSo4KzZdPXd0LngzLFYudXZzW3EqOCs3XT13dC55M310aGlzLl90ZXh0V2lkdGg9XyphLHRoaXMuX3RleHRIZWlnaHQ9KHMueStpLmxpbmVIZWlnaHQpKmE7Zm9yKHZhciBFIGluIE8pe3ZhciBQPU9bRV07aWYodGhpcy5hbmNob3IueCE9PTB8fHRoaXMuYW5jaG9yLnkhPT0wKWZvcih2YXIgSHQ9MCxEZT10aGlzLl90ZXh0V2lkdGgqdGhpcy5hbmNob3IueCxRcj10aGlzLl90ZXh0SGVpZ2h0KnRoaXMuYW5jaG9yLnksRnM9MDtGczxQLnRvdGFsO0ZzKyspUC52ZXJ0aWNlc1tIdCsrXS09RGUsUC52ZXJ0aWNlc1tIdCsrXS09UXIsUC52ZXJ0aWNlc1tIdCsrXS09RGUsUC52ZXJ0aWNlc1tIdCsrXS09UXIsUC52ZXJ0aWNlc1tIdCsrXS09RGUsUC52ZXJ0aWNlc1tIdCsrXS09UXIsUC52ZXJ0aWNlc1tIdCsrXS09RGUsUC52ZXJ0aWNlc1tIdCsrXS09UXI7dGhpcy5fbWF4TGluZUhlaWdodD14KmE7dmFyIE5zPVAubWVzaC5nZW9tZXRyeS5nZXRCdWZmZXIoImFWZXJ0ZXhQb3NpdGlvbiIpLEJzPVAubWVzaC5nZW9tZXRyeS5nZXRCdWZmZXIoImFUZXh0dXJlQ29vcmQiKSxMcz1QLm1lc2guZ2VvbWV0cnkuZ2V0SW5kZXgoKTtOcy5kYXRhPVAudmVydGljZXMsQnMuZGF0YT1QLnV2cyxMcy5kYXRhPVAuaW5kaWNlcyxOcy51cGRhdGUoKSxCcy51cGRhdGUoKSxMcy51cGRhdGUoKX1mb3IodmFyIEU9MDtFPG8ubGVuZ3RoO0UrKyl3cy5wdXNoKG9bRV0pO3RoaXMuX2ZvbnQ9aSx0aGlzLmRpcnR5PSExfSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRlKCksdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbih0KXt0aGlzLl9hdXRvUmVzb2x1dGlvbiYmdGhpcy5fcmVzb2x1dGlvbiE9PXQucmVzb2x1dGlvbiYmKHRoaXMuX3Jlc29sdXRpb249dC5yZXNvbHV0aW9uLHRoaXMuZGlydHk9ITApO3ZhciBpPXJlLmF2YWlsYWJsZVt0aGlzLl9mb250TmFtZV0sbj1pLmRpc3RhbmNlRmllbGRSYW5nZSxhPWkuZGlzdGFuY2VGaWVsZFR5cGUscz1pLnNpemU7aWYoYSE9PSJub25lIilmb3IodmFyIG89dGhpcy53b3JsZFRyYW5zZm9ybSxoPW8uYSx1PW8uYixsPW8uYyxjPW8uZCxmPU1hdGguc3FydChoKmgrdSp1KSxkPU1hdGguc3FydChsKmwrYypjKSxwPShNYXRoLmFicyhmKStNYXRoLmFicyhkKSkvMix2PXRoaXMuZm9udFNpemUvcyxfPTAsbT10aGlzLl9hY3RpdmVQYWdlc01lc2hEYXRhO188bS5sZW5ndGg7XysrKXt2YXIgZz1tW19dO2cubWVzaC5zaGFkZXIudW5pZm9ybXMudUZXaWR0aD1wKm4qdip0aGlzLl9yZXNvbHV0aW9ufXIucHJvdG90eXBlLl9yZW5kZXIuY2FsbCh0aGlzLHQpfSxlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbGlkYXRlKCksci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgdD1yZS5hdmFpbGFibGVbdGhpcy5fZm9udE5hbWVdO2lmKCF0KXRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRtYXBGb250ICInK3RoaXMuX2ZvbnROYW1lKyciJyk7dGhpcy5fZm9udCE9PXQmJih0aGlzLmRpcnR5PSEwKSx0aGlzLmRpcnR5JiZ0aGlzLnVwZGF0ZVRleHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0aW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbnR9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLl90aW50IT09dCl7dGhpcy5fdGludD10O2Zvcih2YXIgaT0wO2k8dGhpcy5fYWN0aXZlUGFnZXNNZXNoRGF0YS5sZW5ndGg7aSsrKXRoaXMuX2FjdGl2ZVBhZ2VzTWVzaERhdGFbaV0ubWVzaC50aW50PXR9fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWxpZ259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hbGlnbiE9PXQmJih0aGlzLl9hbGlnbj10LHRoaXMuZGlydHk9ITApfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udE5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udE5hbWV9LHNldDpmdW5jdGlvbih0KXtpZighcmUuYXZhaWxhYmxlW3RdKXRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRtYXBGb250ICInK3QrJyInKTt0aGlzLl9mb250TmFtZSE9PXQmJih0aGlzLl9mb250TmFtZT10LHRoaXMuZGlydHk9ITApfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udFNpemUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLl9mb250U2l6ZSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6cmUuYXZhaWxhYmxlW3RoaXMuX2ZvbnROYW1lXS5zaXplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udFNpemUhPT10JiYodGhpcy5fZm9udFNpemU9dCx0aGlzLmRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFuY2hvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmNob3J9LHNldDpmdW5jdGlvbih0KXt0eXBlb2YgdD09Im51bWJlciI/dGhpcy5fYW5jaG9yLnNldCh0KTp0aGlzLl9hbmNob3IuY29weUZyb20odCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RleHR9LHNldDpmdW5jdGlvbih0KXt0PVN0cmluZyh0Pz8iIiksdGhpcy5fdGV4dCE9PXQmJih0aGlzLl90ZXh0PXQsdGhpcy5kaXJ0eT0hMCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtYXhXaWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhXaWR0aH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21heFdpZHRoIT09dCYmKHRoaXMuX21heFdpZHRoPXQsdGhpcy5kaXJ0eT0hMCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtYXhMaW5lSGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsaWRhdGUoKSx0aGlzLl9tYXhMaW5lSGVpZ2h0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidGV4dFdpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsaWRhdGUoKSx0aGlzLl90ZXh0V2lkdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsZXR0ZXJTcGFjaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xldHRlclNwYWNpbmd9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9sZXR0ZXJTcGFjaW5nIT09dCYmKHRoaXMuX2xldHRlclNwYWNpbmc9dCx0aGlzLmRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJvdW5kUGl4ZWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdW5kUGl4ZWxzfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PXRoaXMuX3JvdW5kUGl4ZWxzJiYodGhpcy5fcm91bmRQaXhlbHM9dCx0aGlzLmRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRleHRIZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWxpZGF0ZSgpLHRoaXMuX3RleHRIZWlnaHR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXNvbHV0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdXRpb259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvUmVzb2x1dGlvbj0hMSx0aGlzLl9yZXNvbHV0aW9uIT09dCYmKHRoaXMuX3Jlc29sdXRpb249dCx0aGlzLmRpcnR5PSEwKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RleHR1cmVDYWNoZSxuPXJlLmF2YWlsYWJsZVt0aGlzLl9mb250TmFtZV0sYT1uLmRpc3RhbmNlRmllbGRUeXBlPT09Im5vbmUiP1RzOkVzO2EucHVzaC5hcHBseShhLHRoaXMuX2FjdGl2ZVBhZ2VzTWVzaERhdGEpO2Zvcih2YXIgcz0wLG89dGhpcy5fYWN0aXZlUGFnZXNNZXNoRGF0YTtzPG8ubGVuZ3RoO3MrKyl7dmFyIGg9b1tzXTt0aGlzLnJlbW92ZUNoaWxkKGgubWVzaCl9dGhpcy5fYWN0aXZlUGFnZXNNZXNoRGF0YT1bXSxhLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gaVtjLm1lc2gudGV4dHVyZS5iYXNlVGV4dHVyZS51aWRdfSkuZm9yRWFjaChmdW5jdGlvbihjKXtjLm1lc2gudGV4dHVyZT1MLkVNUFRZfSk7Zm9yKHZhciB1IGluIGkpe3ZhciBsPWlbdV07bC5kZXN0cm95KCksZGVsZXRlIGlbdV19dGhpcy5fZm9udD1udWxsLHRoaXMuX3RleHR1cmVDYWNoZT1udWxsLHIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLHQpfSxlLnN0eWxlRGVmYXVsdHM9e2FsaWduOiJsZWZ0Iix0aW50OjE2Nzc3MjE1LG1heFdpZHRoOjAsbGV0dGVyU3BhY2luZzowfSxlfSkoWHQpO3ZhciBkcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuYWRkPWZ1bmN0aW9uKCl7dXQuc2V0RXh0ZW5zaW9uWGhyVHlwZSgiZm50Iix1dC5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKX0sci51c2U9ZnVuY3Rpb24oZSx0KXt2YXIgaT14cyhlLmRhdGEpO2lmKCFpKXt0KCk7cmV0dXJufWZvcih2YXIgbj1yLmdldEJhc2VVcmwodGhpcyxlKSxhPWkucGFyc2UoZS5kYXRhKSxzPXt9LG89ZnVuY3Rpb24odil7c1t2Lm1ldGFkYXRhLnBhZ2VGaWxlXT12LnRleHR1cmUsT2JqZWN0LmtleXMocykubGVuZ3RoPT09YS5wYWdlLmxlbmd0aCYmKGUuYml0bWFwRm9udD1yZS5pbnN0YWxsKGEscywhMCksdCgpKX0saD0wO2g8YS5wYWdlLmxlbmd0aDsrK2gpe3ZhciB1PWEucGFnZVtoXS5maWxlLGw9bit1LGM9ITE7Zm9yKHZhciBmIGluIHRoaXMucmVzb3VyY2VzKXt2YXIgZD10aGlzLnJlc291cmNlc1tmXTtpZihkLnVybD09PWwpe2QubWV0YWRhdGEucGFnZUZpbGU9dSxkLnRleHR1cmU/byhkKTpkLm9uQWZ0ZXJNaWRkbGV3YXJlLmFkZChvKSxjPSEwO2JyZWFrfX1pZighYyl7dmFyIHA9e2Nyb3NzT3JpZ2luOmUuY3Jvc3NPcmlnaW4sbG9hZFR5cGU6dXQuTE9BRF9UWVBFLklNQUdFLG1ldGFkYXRhOk9iamVjdC5hc3NpZ24oe3BhZ2VGaWxlOnV9LGUubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YSkscGFyZW50UmVzb3VyY2U6ZX07dGhpcy5hZGQobCxwLG8pfX19LHIuZ2V0QmFzZVVybD1mdW5jdGlvbihlLHQpe3ZhciBpPXQuaXNEYXRhVXJsPyIiOnIuZGlybmFtZSh0LnVybCk7cmV0dXJuIHQuaXNEYXRhVXJsJiYoaT09PSIuIiYmKGk9IiIpLGUuYmFzZVVybCYmaSYmZS5iYXNlVXJsLmNoYXJBdChlLmJhc2VVcmwubGVuZ3RoLTEpPT09Ii8iJiYoaSs9Ii8iKSksaT1pLnJlcGxhY2UoZS5iYXNlVXJsLCIiKSxpJiZpLmNoYXJBdChpLmxlbmd0aC0xKSE9PSIvIiYmKGkrPSIvIiksaX0sci5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSgvXFwvZywiLyIpLnJlcGxhY2UoL1wvJC8sIiIpLnJlcGxhY2UoL1wvW15cL10qJC8sIiIpO3JldHVybiB0PT09ZT8iLiI6dD09PSIiPyIvIjp0fSxyLmV4dGVuc2lvbj1LLkxvYWRlcixyfSgpO3ZhciBfbj1mdW5jdGlvbihyLGUpe3JldHVybiBfbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sX24ocixlKX07ZnVuY3Rpb24gcHAocixlKXtfbihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciB2cD1gdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsKdW5pZm9ybSBmbG9hdCB1QWxwaGE7Cgp2b2lkIG1haW4odm9pZCkKewogICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdUFscGhhOwp9CmA7KGZ1bmN0aW9uKHIpe3BwKGUscik7ZnVuY3Rpb24gZSh0KXt0PT09dm9pZCAwJiYodD0xKTt2YXIgaT1yLmNhbGwodGhpcyxsYyx2cCx7dUFscGhhOjF9KXx8dGhpcztyZXR1cm4gaS5hbHBoYT10LGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxwaGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy51QWxwaGF9LHNldDpmdW5jdGlvbih0KXt0aGlzLnVuaWZvcm1zLnVBbHBoYT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KShRdCk7dmFyIG1uPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIG1uPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGkpe3QuX19wcm90b19fPWl9fHxmdW5jdGlvbih0LGkpe2Zvcih2YXIgbiBpbiBpKWkuaGFzT3duUHJvcGVydHkobikmJih0W25dPWlbbl0pfSxtbihyLGUpfTtmdW5jdGlvbiBTcyhyLGUpe21uKHIsZSk7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cn1yLnByb3RvdHlwZT1lPT09bnVsbD9PYmplY3QuY3JlYXRlKGUpOih0LnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgdCl9dmFyIF9wPWAKICAgIGF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsKCiAgICB1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsKCiAgICB1bmlmb3JtIGZsb2F0IHN0cmVuZ3RoOwoKICAgIHZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1slc2l6ZSVdOwoKICAgIHVuaWZvcm0gdmVjNCBpbnB1dFNpemU7CiAgICB1bmlmb3JtIHZlYzQgb3V0cHV0RnJhbWU7CgogICAgdmVjNCBmaWx0ZXJWZXJ0ZXhQb3NpdGlvbiggdm9pZCApCiAgICB7CiAgICAgICAgdmVjMiBwb3NpdGlvbiA9IGFWZXJ0ZXhQb3NpdGlvbiAqIG1heChvdXRwdXRGcmFtZS56dywgdmVjMigwLikpICsgb3V0cHV0RnJhbWUueHk7CgogICAgICAgIHJldHVybiB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsKICAgIH0KCiAgICB2ZWMyIGZpbHRlclRleHR1cmVDb29yZCggdm9pZCApCiAgICB7CiAgICAgICAgcmV0dXJuIGFWZXJ0ZXhQb3NpdGlvbiAqIChvdXRwdXRGcmFtZS56dyAqIGlucHV0U2l6ZS56dyk7CiAgICB9CgogICAgdm9pZCBtYWluKHZvaWQpCiAgICB7CiAgICAgICAgZ2xfUG9zaXRpb24gPSBmaWx0ZXJWZXJ0ZXhQb3NpdGlvbigpOwoKICAgICAgICB2ZWMyIHRleHR1cmVDb29yZCA9IGZpbHRlclRleHR1cmVDb29yZCgpOwogICAgICAgICVibHVyJQogICAgfWA7ZnVuY3Rpb24gbXAocixlKXt2YXIgdD1NYXRoLmNlaWwoci8yKSxpPV9wLG49IiIsYTtlP2E9InZCbHVyVGV4Q29vcmRzWyVpbmRleCVdID0gIHRleHR1cmVDb29yZCArIHZlYzIoJXNhbXBsZUluZGV4JSAqIHN0cmVuZ3RoLCAwLjApOyI6YT0idkJsdXJUZXhDb29yZHNbJWluZGV4JV0gPSAgdGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICVzYW1wbGVJbmRleCUgKiBzdHJlbmd0aCk7Ijtmb3IodmFyIHM9MDtzPHI7cysrKXt2YXIgbz1hLnJlcGxhY2UoIiVpbmRleCUiLHMudG9TdHJpbmcoKSk7bz1vLnJlcGxhY2UoIiVzYW1wbGVJbmRleCUiLHMtKHQtMSkrIi4wIiksbis9byxuKz1gCmB9cmV0dXJuIGk9aS5yZXBsYWNlKCIlYmx1ciUiLG4pLGk9aS5yZXBsYWNlKCIlc2l6ZSUiLHIudG9TdHJpbmcoKSksaX12YXIgZ3A9ezU6Wy4xNTMzODgsLjIyMTQ2MSwuMjUwMzAxXSw3OlsuMDcxMzAzLC4xMzE1MTQsLjE4OTg3OSwuMjE0NjA3XSw5OlsuMDI4NTMyLC4wNjcyMzQsLjEyNDAwOSwuMTc5MDQ0LC4yMDIzNl0sMTE6Wy4wMDkzLC4wMjgwMDIsLjA2NTk4NCwuMTIxNzAzLC4xNzU3MTMsLjE5ODU5Nl0sMTM6Wy4wMDI0MDYsLjAwOTI1NSwuMDI3ODY3LC4wNjU2NjYsLjEyMTExNywuMTc0ODY4LC4xOTc2NDFdLDE1Ols0ODllLTYsLjAwMjQwMywuMDA5MjQ2LC4wMjc4NCwuMDY1NjAyLC4xMjA5OTksLjE3NDY5NywuMTk3NDQ4XX0seXA9WyJ2YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbJXNpemUlXTsiLCJ1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsiLCJ2b2lkIG1haW4odm9pZCkiLCJ7IiwiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTsiLCIgICAgJWJsdXIlIiwifSJdLmpvaW4oYApgKTtmdW5jdGlvbiB4cChyKXtmb3IodmFyIGU9Z3Bbcl0sdD1lLmxlbmd0aCxpPXlwLG49IiIsYT0iZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbJWluZGV4JV0pICogJXZhbHVlJTsiLHMsbz0wO288cjtvKyspe3ZhciBoPWEucmVwbGFjZSgiJWluZGV4JSIsby50b1N0cmluZygpKTtzPW8sbz49dCYmKHM9ci1vLTEpLGg9aC5yZXBsYWNlKCIldmFsdWUlIixlW3NdLnRvU3RyaW5nKCkpLG4rPWgsbis9YApgfXJldHVybiBpPWkucmVwbGFjZSgiJWJsdXIlIixuKSxpPWkucmVwbGFjZSgiJXNpemUlIixyLnRvU3RyaW5nKCkpLGl9dmFyIFBzPWZ1bmN0aW9uKHIpe1NzKGUscik7ZnVuY3Rpb24gZSh0LGksbixhLHMpe2k9PT12b2lkIDAmJihpPTgpLG49PT12b2lkIDAmJihuPTQpLGE9PT12b2lkIDAmJihhPUkuRklMVEVSX1JFU09MVVRJT04pLHM9PT12b2lkIDAmJihzPTUpO3ZhciBvPXRoaXMsaD1tcChzLHQpLHU9eHAocyk7cmV0dXJuIG89ci5jYWxsKHRoaXMsaCx1KXx8dGhpcyxvLmhvcml6b250YWw9dCxvLnJlc29sdXRpb249YSxvLl9xdWFsaXR5PTAsby5xdWFsaXR5PW4sby5ibHVyPWksb31yZXR1cm4gZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24odCxpLG4sYSl7aWYobj90aGlzLmhvcml6b250YWw/dGhpcy51bmlmb3Jtcy5zdHJlbmd0aD0xL24ud2lkdGgqKG4ud2lkdGgvaS53aWR0aCk6dGhpcy51bmlmb3Jtcy5zdHJlbmd0aD0xL24uaGVpZ2h0KihuLmhlaWdodC9pLmhlaWdodCk6dGhpcy5ob3Jpem9udGFsP3RoaXMudW5pZm9ybXMuc3RyZW5ndGg9MS90LnJlbmRlcmVyLndpZHRoKih0LnJlbmRlcmVyLndpZHRoL2kud2lkdGgpOnRoaXMudW5pZm9ybXMuc3RyZW5ndGg9MS90LnJlbmRlcmVyLmhlaWdodCoodC5yZW5kZXJlci5oZWlnaHQvaS5oZWlnaHQpLHRoaXMudW5pZm9ybXMuc3RyZW5ndGgqPXRoaXMuc3RyZW5ndGgsdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC89dGhpcy5wYXNzZXMsdGhpcy5wYXNzZXM9PT0xKXQuYXBwbHlGaWx0ZXIodGhpcyxpLG4sYSk7ZWxzZXt2YXIgcz10LmdldEZpbHRlclRleHR1cmUoKSxvPXQucmVuZGVyZXIsaD1pLHU9czt0aGlzLnN0YXRlLmJsZW5kPSExLHQuYXBwbHlGaWx0ZXIodGhpcyxoLHUsQ3QuQ0xFQVIpO2Zvcih2YXIgbD0xO2w8dGhpcy5wYXNzZXMtMTtsKyspe3QuYmluZEFuZENsZWFyKGgsQ3QuQkxJVCksdGhpcy51bmlmb3Jtcy51U2FtcGxlcj11O3ZhciBjPXU7dT1oLGg9YyxvLnNoYWRlci5iaW5kKHRoaXMpLG8uZ2VvbWV0cnkuZHJhdyg1KX10aGlzLnN0YXRlLmJsZW5kPSEwLHQuYXBwbHlGaWx0ZXIodGhpcyx1LG4sYSksdC5yZXR1cm5GaWx0ZXJUZXh0dXJlKHMpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJibHVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZW5ndGh9LHNldDpmdW5jdGlvbih0KXt0aGlzLnBhZGRpbmc9MStNYXRoLmFicyh0KSoyLHRoaXMuc3RyZW5ndGg9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInF1YWxpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVhbGl0eX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3F1YWxpdHk9dCx0aGlzLnBhc3Nlcz10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KFF0KTsoZnVuY3Rpb24ocil7U3MoZSxyKTtmdW5jdGlvbiBlKHQsaSxuLGEpe3Q9PT12b2lkIDAmJih0PTgpLGk9PT12b2lkIDAmJihpPTQpLG49PT12b2lkIDAmJihuPUkuRklMVEVSX1JFU09MVVRJT04pLGE9PT12b2lkIDAmJihhPTUpO3ZhciBzPXIuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gcy5ibHVyWEZpbHRlcj1uZXcgUHMoITAsdCxpLG4sYSkscy5ibHVyWUZpbHRlcj1uZXcgUHMoITEsdCxpLG4sYSkscy5yZXNvbHV0aW9uPW4scy5xdWFsaXR5PWkscy5ibHVyPXQscy5yZXBlYXRFZGdlUGl4ZWxzPSExLHN9cmV0dXJuIGUucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKHQsaSxuLGEpe3ZhciBzPU1hdGguYWJzKHRoaXMuYmx1clhGaWx0ZXIuc3RyZW5ndGgpLG89TWF0aC5hYnModGhpcy5ibHVyWUZpbHRlci5zdHJlbmd0aCk7aWYocyYmbyl7dmFyIGg9dC5nZXRGaWx0ZXJUZXh0dXJlKCk7dGhpcy5ibHVyWEZpbHRlci5hcHBseSh0LGksaCxDdC5DTEVBUiksdGhpcy5ibHVyWUZpbHRlci5hcHBseSh0LGgsbixhKSx0LnJldHVybkZpbHRlclRleHR1cmUoaCl9ZWxzZSBvP3RoaXMuYmx1cllGaWx0ZXIuYXBwbHkodCxpLG4sYSk6dGhpcy5ibHVyWEZpbHRlci5hcHBseSh0LGksbixhKX0sZS5wcm90b3R5cGUudXBkYXRlUGFkZGluZz1mdW5jdGlvbigpe3RoaXMuX3JlcGVhdEVkZ2VQaXhlbHM/dGhpcy5wYWRkaW5nPTA6dGhpcy5wYWRkaW5nPU1hdGgubWF4KE1hdGguYWJzKHRoaXMuYmx1clhGaWx0ZXIuc3RyZW5ndGgpLE1hdGguYWJzKHRoaXMuYmx1cllGaWx0ZXIuc3RyZW5ndGgpKSoyfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImJsdXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5ibHVyWEZpbHRlci5ibHVyPXRoaXMuYmx1cllGaWx0ZXIuYmx1cj10LHRoaXMudXBkYXRlUGFkZGluZygpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicXVhbGl0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJsdXJYRmlsdGVyLnF1YWxpdHl9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJsdXJYRmlsdGVyLnF1YWxpdHk9dGhpcy5ibHVyWUZpbHRlci5xdWFsaXR5PXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJibHVyWCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJsdXJYRmlsdGVyLmJsdXI9dCx0aGlzLnVwZGF0ZVBhZGRpbmcoKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImJsdXJZIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmx1cllGaWx0ZXIuYmx1cj10LHRoaXMudXBkYXRlUGFkZGluZygpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYmxlbmRNb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmxlbmRNb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5ibHVyWUZpbHRlci5ibGVuZE1vZGU9dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlcGVhdEVkZ2VQaXhlbHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwZWF0RWRnZVBpeGVsc30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcGVhdEVkZ2VQaXhlbHM9dCx0aGlzLnVwZGF0ZVBhZGRpbmcoKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSkoUXQpO3ZhciBnbj1mdW5jdGlvbihyLGUpe3JldHVybiBnbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sZ24ocixlKX07ZnVuY3Rpb24gYnAocixlKXtnbihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBUcD1gdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOwp1bmlmb3JtIGZsb2F0IG1bMjBdOwp1bmlmb3JtIGZsb2F0IHVBbHBoYTsKCnZvaWQgbWFpbih2b2lkKQp7CiAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpOwoKICAgIGlmICh1QWxwaGEgPT0gMC4wKSB7CiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gYzsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVW4tcHJlbXVsdGlwbHkgYWxwaGEgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb2xvciBtYXRyaXguIFNlZSBpc3N1ZSAjMzUzOS4KICAgIGlmIChjLmEgPiAwLjApIHsKICAgICAgYy5yZ2IgLz0gYy5hOwogICAgfQoKICAgIHZlYzQgcmVzdWx0OwoKICAgIHJlc3VsdC5yID0gKG1bMF0gKiBjLnIpOwogICAgICAgIHJlc3VsdC5yICs9IChtWzFdICogYy5nKTsKICAgICAgICByZXN1bHQuciArPSAobVsyXSAqIGMuYik7CiAgICAgICAgcmVzdWx0LnIgKz0gKG1bM10gKiBjLmEpOwogICAgICAgIHJlc3VsdC5yICs9IG1bNF07CgogICAgcmVzdWx0LmcgPSAobVs1XSAqIGMucik7CiAgICAgICAgcmVzdWx0LmcgKz0gKG1bNl0gKiBjLmcpOwogICAgICAgIHJlc3VsdC5nICs9IChtWzddICogYy5iKTsKICAgICAgICByZXN1bHQuZyArPSAobVs4XSAqIGMuYSk7CiAgICAgICAgcmVzdWx0LmcgKz0gbVs5XTsKCiAgICByZXN1bHQuYiA9IChtWzEwXSAqIGMucik7CiAgICAgICByZXN1bHQuYiArPSAobVsxMV0gKiBjLmcpOwogICAgICAgcmVzdWx0LmIgKz0gKG1bMTJdICogYy5iKTsKICAgICAgIHJlc3VsdC5iICs9IChtWzEzXSAqIGMuYSk7CiAgICAgICByZXN1bHQuYiArPSBtWzE0XTsKCiAgICByZXN1bHQuYSA9IChtWzE1XSAqIGMucik7CiAgICAgICByZXN1bHQuYSArPSAobVsxNl0gKiBjLmcpOwogICAgICAgcmVzdWx0LmEgKz0gKG1bMTddICogYy5iKTsKICAgICAgIHJlc3VsdC5hICs9IChtWzE4XSAqIGMuYSk7CiAgICAgICByZXN1bHQuYSArPSBtWzE5XTsKCiAgICB2ZWMzIHJnYiA9IG1peChjLnJnYiwgcmVzdWx0LnJnYiwgdUFscGhhKTsKCiAgICAvLyBQcmVtdWx0aXBseSBhbHBoYSBhZ2Fpbi4KICAgIHJnYiAqPSByZXN1bHQuYTsKCiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHJnYiwgcmVzdWx0LmEpOwp9CmAsUnM9ZnVuY3Rpb24ocil7YnAoZSxyKTtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxpPXttOm5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDEsMF0pLHVBbHBoYToxfTtyZXR1cm4gdD1yLmNhbGwodGhpcyxVYSxUcCxpKXx8dGhpcyx0LmFscGhhPTEsdH1yZXR1cm4gZS5wcm90b3R5cGUuX2xvYWRNYXRyaXg9ZnVuY3Rpb24odCxpKXtpPT09dm9pZCAwJiYoaT0hMSk7dmFyIG49dDtpJiYodGhpcy5fbXVsdGlwbHkobix0aGlzLnVuaWZvcm1zLm0sdCksbj10aGlzLl9jb2xvck1hdHJpeChuKSksdGhpcy51bmlmb3Jtcy5tPW59LGUucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbih0LGksbil7cmV0dXJuIHRbMF09aVswXSpuWzBdK2lbMV0qbls1XStpWzJdKm5bMTBdK2lbM10qblsxNV0sdFsxXT1pWzBdKm5bMV0raVsxXSpuWzZdK2lbMl0qblsxMV0raVszXSpuWzE2XSx0WzJdPWlbMF0qblsyXStpWzFdKm5bN10raVsyXSpuWzEyXStpWzNdKm5bMTddLHRbM109aVswXSpuWzNdK2lbMV0qbls4XStpWzJdKm5bMTNdK2lbM10qblsxOF0sdFs0XT1pWzBdKm5bNF0raVsxXSpuWzldK2lbMl0qblsxNF0raVszXSpuWzE5XStpWzRdLHRbNV09aVs1XSpuWzBdK2lbNl0qbls1XStpWzddKm5bMTBdK2lbOF0qblsxNV0sdFs2XT1pWzVdKm5bMV0raVs2XSpuWzZdK2lbN10qblsxMV0raVs4XSpuWzE2XSx0WzddPWlbNV0qblsyXStpWzZdKm5bN10raVs3XSpuWzEyXStpWzhdKm5bMTddLHRbOF09aVs1XSpuWzNdK2lbNl0qbls4XStpWzddKm5bMTNdK2lbOF0qblsxOF0sdFs5XT1pWzVdKm5bNF0raVs2XSpuWzldK2lbN10qblsxNF0raVs4XSpuWzE5XStpWzldLHRbMTBdPWlbMTBdKm5bMF0raVsxMV0qbls1XStpWzEyXSpuWzEwXStpWzEzXSpuWzE1XSx0WzExXT1pWzEwXSpuWzFdK2lbMTFdKm5bNl0raVsxMl0qblsxMV0raVsxM10qblsxNl0sdFsxMl09aVsxMF0qblsyXStpWzExXSpuWzddK2lbMTJdKm5bMTJdK2lbMTNdKm5bMTddLHRbMTNdPWlbMTBdKm5bM10raVsxMV0qbls4XStpWzEyXSpuWzEzXStpWzEzXSpuWzE4XSx0WzE0XT1pWzEwXSpuWzRdK2lbMTFdKm5bOV0raVsxMl0qblsxNF0raVsxM10qblsxOV0raVsxNF0sdFsxNV09aVsxNV0qblswXStpWzE2XSpuWzVdK2lbMTddKm5bMTBdK2lbMThdKm5bMTVdLHRbMTZdPWlbMTVdKm5bMV0raVsxNl0qbls2XStpWzE3XSpuWzExXStpWzE4XSpuWzE2XSx0WzE3XT1pWzE1XSpuWzJdK2lbMTZdKm5bN10raVsxN10qblsxMl0raVsxOF0qblsxN10sdFsxOF09aVsxNV0qblszXStpWzE2XSpuWzhdK2lbMTddKm5bMTNdK2lbMThdKm5bMThdLHRbMTldPWlbMTVdKm5bNF0raVsxNl0qbls5XStpWzE3XSpuWzE0XStpWzE4XSpuWzE5XStpWzE5XSx0fSxlLnByb3RvdHlwZS5fY29sb3JNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGk9bmV3IEZsb2F0MzJBcnJheSh0KTtyZXR1cm4gaVs0XS89MjU1LGlbOV0vPTI1NSxpWzE0XS89MjU1LGlbMTldLz0yNTUsaX0sZS5wcm90b3R5cGUuYnJpZ2h0bmVzcz1mdW5jdGlvbih0LGkpe3ZhciBuPVt0LDAsMCwwLDAsMCx0LDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwxLDBdO3RoaXMuX2xvYWRNYXRyaXgobixpKX0sZS5wcm90b3R5cGUudGludD1mdW5jdGlvbih0LGkpe3ZhciBuPXQ+PjE2JjI1NSxhPXQ+PjgmMjU1LHM9dCYyNTUsbz1bbi8yNTUsMCwwLDAsMCwwLGEvMjU1LDAsMCwwLDAsMCxzLzI1NSwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KG8saSl9LGUucHJvdG90eXBlLmdyZXlzY2FsZT1mdW5jdGlvbih0LGkpe3ZhciBuPVt0LHQsdCwwLDAsdCx0LHQsMCwwLHQsdCx0LDAsMCwwLDAsMCwxLDBdO3RoaXMuX2xvYWRNYXRyaXgobixpKX0sZS5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZT1mdW5jdGlvbih0KXt2YXIgaT1bLjMsLjYsLjEsMCwwLC4zLC42LC4xLDAsMCwuMywuNiwuMSwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLmh1ZT1mdW5jdGlvbih0LGkpe3Q9KHR8fDApLzE4MCpNYXRoLlBJO3ZhciBuPU1hdGguY29zKHQpLGE9TWF0aC5zaW4odCkscz1NYXRoLnNxcnQsbz0xLzMsaD1zKG8pLHU9bisoMS1uKSpvLGw9byooMS1uKS1oKmEsYz1vKigxLW4pK2gqYSxmPW8qKDEtbikraCphLGQ9bitvKigxLW4pLHA9byooMS1uKS1oKmEsdj1vKigxLW4pLWgqYSxfPW8qKDEtbikraCphLG09bitvKigxLW4pLGc9W3UsbCxjLDAsMCxmLGQscCwwLDAsdixfLG0sMCwwLDAsMCwwLDEsMF07dGhpcy5fbG9hZE1hdHJpeChnLGkpfSxlLnByb3RvdHlwZS5jb250cmFzdD1mdW5jdGlvbih0LGkpe3ZhciBuPSh0fHwwKSsxLGE9LS41KihuLTEpLHM9W24sMCwwLDAsYSwwLG4sMCwwLGEsMCwwLG4sMCxhLDAsMCwwLDEsMF07dGhpcy5fbG9hZE1hdHJpeChzLGkpfSxlLnByb3RvdHlwZS5zYXR1cmF0ZT1mdW5jdGlvbih0LGkpe3Q9PT12b2lkIDAmJih0PTApO3ZhciBuPXQqMi8zKzEsYT0obi0xKSotLjUscz1bbixhLGEsMCwwLGEsbixhLDAsMCxhLGEsbiwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KHMsaSl9LGUucHJvdG90eXBlLmRlc2F0dXJhdGU9ZnVuY3Rpb24oKXt0aGlzLnNhdHVyYXRlKC0xKX0sZS5wcm90b3R5cGUubmVnYXRpdmU9ZnVuY3Rpb24odCl7dmFyIGk9Wy0xLDAsMCwxLDAsMCwtMSwwLDEsMCwwLDAsLTEsMSwwLDAsMCwwLDEsMF07dGhpcy5fbG9hZE1hdHJpeChpLHQpfSxlLnByb3RvdHlwZS5zZXBpYT1mdW5jdGlvbih0KXt2YXIgaT1bLjM5MywuNzY4OTk5OSwuMTg4OTk5OTksMCwwLC4zNDksLjY4NTk5OTksLjE2Nzk5OTk5LDAsMCwuMjcyLC41MzM5OTk5LC4xMzA5OTk5OSwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLnRlY2huaWNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBpPVsxLjkxMjUyNzc4OTE0NTYwODMsLS44NTQ1MzQ0OTc2OTUxNjQ1LC0uMDkxNTU1MDg0ODI3NTU1ODUsMCwxMS43OTM2MDM0MzQzNzczMzcsLS4zMDg3ODMzMzg1OTI4MDk3LDEuNzY1ODkwODU1NTQ1ODQyOCwtLjEwNjAxNzQzMDc0NzIyMjQ1LDAsLTcwLjM1MjA1MTYxNDYxMzk4LC0uMjMxMTAzMzc3NTQ4NjE2LC0uNzUwMTg5OTE5NzQ0MDIxMiwxLjg0NzU5NzgxNjEwODE4OSwwLDMwLjk1MDk0MDg2OTQ5MTEzOCwwLDAsMCwxLDBdO3RoaXMuX2xvYWRNYXRyaXgoaSx0KX0sZS5wcm90b3R5cGUucG9sYXJvaWQ9ZnVuY3Rpb24odCl7dmFyIGk9WzEuNDM4LC0uMDYyLC0uMDYyLDAsMCwtLjEyMiwxLjM3OCwtLjEyMiwwLDAsLS4wMTYsLS4wMTYsMS40ODMsMCwwLDAsMCwwLDEsMF07dGhpcy5fbG9hZE1hdHJpeChpLHQpfSxlLnByb3RvdHlwZS50b0JHUj1mdW5jdGlvbih0KXt2YXIgaT1bMCwwLDEsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLmtvZGFjaHJvbWU9ZnVuY3Rpb24odCl7dmFyIGk9WzEuMTI4NTU4MjM5NjU5MzUyNSwtLjM5NjczODIyODM2MDEzNDgsLS4wMzk5MjU1OTE3MjkyMTc5MywwLDYzLjcyOTU4NzYyMTk2NTAyLC0uMTY0MDQzMzk5NjIyNDQ2MTYsMS4wODM1MjUxNTY2MjkxMzA0LC0uMDU0OTg4MDUxMTU2MzMxMzIsMCwyNC43MzI0MDc4OTY3MDYyMDMsLS4xNjc4NjAxMDcwNjE1NTc2MywtLjU2MDM0MTYyNzc2OTUyNDgsMS42MDE0ODUwNzYxOTY0OTQzLDAsMzUuNjI5ODI4MDc0NjA5NDYsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLmJyb3duaT1mdW5jdGlvbih0KXt2YXIgaT1bLjU5OTcwMjM0OTgxNTk3MTUsLjM0NTUzMjQzMDQ4MzkxMjYzLC0uMjcwODI5ODY3NDUzODA0MiwwLDQ3LjQzMTkyODU1NjAwODczLC0uMDM3NzAzMjQ5ODM3NzgzMTU3LC44NjA5NTc3NTg3OTkyNjQxLC4xNTA1OTU1MjM4ODQ1OTkxMywwLC0zNi45Njg0MTQ5ODMxOTEyNywuMjQxMTM2MzUxMjgxNTMzMzUsLS4wNzQ0MTAzNzkwODQyMjQ5MiwuNDQ5NzIxODIwNjQ4NzcxNTMsMCwtNy41NjIwNzUyNzc1OTEyODMsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLnZpbnRhZ2U9ZnVuY3Rpb24odCl7dmFyIGk9Wy42Mjc5MzQ1NjM1NjA1OTk0LC4zMjAyMTgzNDIwODE5MzY3LC0uMDM5NjU0MDgyMTEzMTI0NTMsMCw5LjY1MTI4NTgzNTI5NDEyMywuMDI1NzgzOTc3MDQ4MDg4NjgsLjY0NDExODg2NDQzNzQ3NzEsLjAzMjU5MTI3NjE2MTQ5Mjk0LDAsNy40NjI4MjkxNzY0NzA1OTEsLjA0NjYwNTU1NTY3ODI3MTksLS4wODUxMjMyOTg3MjQ3ODkxLC41MjQxNjQ4MDE4NzAwNDY1LDAsNS4xNTkxOTA1ODgyMzUyOTYsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KGksdCl9LGUucHJvdG90eXBlLmNvbG9yVG9uZT1mdW5jdGlvbih0LGksbixhLHMpe3Q9dHx8LjIsaT1pfHwuMTUsbj1ufHwxNjc3MDQzMixhPWF8fDMzNzUxMDQ7dmFyIG89KG4+PjE2JjI1NSkvMjU1LGg9KG4+PjgmMjU1KS8yNTUsdT0obiYyNTUpLzI1NSxsPShhPj4xNiYyNTUpLzI1NSxjPShhPj44JjI1NSkvMjU1LGY9KGEmMjU1KS8yNTUsZD1bLjMsLjU5LC4xMSwwLDAsbyxoLHUsdCwwLGwsYyxmLGksMCxvLWwsaC1jLHUtZiwwLDBdO3RoaXMuX2xvYWRNYXRyaXgoZCxzKX0sZS5wcm90b3R5cGUubmlnaHQ9ZnVuY3Rpb24odCxpKXt0PXR8fC4xO3ZhciBuPVt0Ki0yLC10LDAsMCwwLC10LDAsdCwwLDAsMCx0LHQqMiwwLDAsMCwwLDAsMSwwXTt0aGlzLl9sb2FkTWF0cml4KG4saSl9LGUucHJvdG90eXBlLnByZWRhdG9yPWZ1bmN0aW9uKHQsaSl7dmFyIG49WzExLjIyNDEzMDYzMDQ5MzE2NCp0LC00Ljc5NDQ4Njk5OTUxMTcxOSp0LC0yLjg3NDYxMTg1NDU1MzIyMjcqdCwwKnQsLjQwMzQyNDM4MjIwOTc3NzgzKnQsLTMuNjMzMDY5NzUzNjQ2ODUwNip0LDkuMTkzMTU3MTk2MDQ0OTIyKnQsLTIuOTUxODEwODM2NzkxOTkyKnQsMCp0LC0xLjMxNjEzNTA0ODg2NjI3Mip0LC0zLjIxODQxOTc5MDI2Nzk0NDMqdCwtNC4yMzc1MDMwNTE3NTc4MTI1KnQsNy40NzY0NDgwNTkwODIwMzEqdCwwKnQsLjgwNDQ0NTkyMjM3NDcyNTMqdCwwLDAsMCwxLDBdO3RoaXMuX2xvYWRNYXRyaXgobixpKX0sZS5wcm90b3R5cGUubHNkPWZ1bmN0aW9uKHQpe3ZhciBpPVsyLC0uNCwuNSwwLDAsLS41LDIsLS40LDAsMCwtLjQsLS41LDMsMCwwLDAsMCwwLDEsMF07dGhpcy5fbG9hZE1hdHJpeChpLHQpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwxLDBdO3RoaXMuX2xvYWRNYXRyaXgodCwhMSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibWF0cml4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMubX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudW5pZm9ybXMubT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxwaGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy51QWxwaGF9LHNldDpmdW5jdGlvbih0KXt0aGlzLnVuaWZvcm1zLnVBbHBoYT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KFF0KTtScy5wcm90b3R5cGUuZ3JheXNjYWxlPVJzLnByb3RvdHlwZS5ncmV5c2NhbGU7dmFyIHluPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHluPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGkpe3QuX19wcm90b19fPWl9fHxmdW5jdGlvbih0LGkpe2Zvcih2YXIgbiBpbiBpKWkuaGFzT3duUHJvcGVydHkobikmJih0W25dPWlbbl0pfSx5bihyLGUpfTtmdW5jdGlvbiBFcChyLGUpe3luKHIsZSk7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cn1yLnByb3RvdHlwZT1lPT09bnVsbD9PYmplY3QuY3JlYXRlKGUpOih0LnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgdCl9dmFyIHdwPWB2YXJ5aW5nIHZlYzIgdkZpbHRlckNvb3JkOwp2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKCnVuaWZvcm0gdmVjMiBzY2FsZTsKdW5pZm9ybSBtYXQyIHJvdGF0aW9uOwp1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsKdW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjsKCnVuaWZvcm0gaGlnaHAgdmVjNCBpbnB1dFNpemU7CnVuaWZvcm0gdmVjNCBpbnB1dENsYW1wOwoKdm9pZCBtYWluKHZvaWQpCnsKICB2ZWM0IG1hcCA9ICB0ZXh0dXJlMkQobWFwU2FtcGxlciwgdkZpbHRlckNvb3JkKTsKCiAgbWFwIC09IDAuNTsKICBtYXAueHkgPSBzY2FsZSAqIGlucHV0U2l6ZS56dyAqIChyb3RhdGlvbiAqIG1hcC54eSk7CgogIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY2xhbXAodmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpLCBpbnB1dENsYW1wLnh5LCBpbnB1dENsYW1wLnp3KSk7Cn0KYCxTcD1gYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOwoKdW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7CnVuaWZvcm0gbWF0MyBmaWx0ZXJNYXRyaXg7Cgp2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsKdmFyeWluZyB2ZWMyIHZGaWx0ZXJDb29yZDsKCnVuaWZvcm0gdmVjNCBpbnB1dFNpemU7CnVuaWZvcm0gdmVjNCBvdXRwdXRGcmFtZTsKCnZlYzQgZmlsdGVyVmVydGV4UG9zaXRpb24oIHZvaWQgKQp7CiAgICB2ZWMyIHBvc2l0aW9uID0gYVZlcnRleFBvc2l0aW9uICogbWF4KG91dHB1dEZyYW1lLnp3LCB2ZWMyKDAuKSkgKyBvdXRwdXRGcmFtZS54eTsKCiAgICByZXR1cm4gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7Cn0KCnZlYzIgZmlsdGVyVGV4dHVyZUNvb3JkKCB2b2lkICkKewogICAgcmV0dXJuIGFWZXJ0ZXhQb3NpdGlvbiAqIChvdXRwdXRGcmFtZS56dyAqIGlucHV0U2l6ZS56dyk7Cn0KCnZvaWQgbWFpbih2b2lkKQp7CglnbF9Qb3NpdGlvbiA9IGZpbHRlclZlcnRleFBvc2l0aW9uKCk7Cgl2VGV4dHVyZUNvb3JkID0gZmlsdGVyVGV4dHVyZUNvb3JkKCk7Cgl2RmlsdGVyQ29vcmQgPSAoIGZpbHRlck1hdHJpeCAqIHZlYzMoIHZUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7Cn0KYDsoZnVuY3Rpb24ocil7RXAoZSxyKTtmdW5jdGlvbiBlKHQsaSl7dmFyIG49dGhpcyxhPW5ldyB2dDtyZXR1cm4gdC5yZW5kZXJhYmxlPSExLG49ci5jYWxsKHRoaXMsU3Asd3Ase21hcFNhbXBsZXI6dC5fdGV4dHVyZSxmaWx0ZXJNYXRyaXg6YSxzY2FsZTp7eDoxLHk6MX0scm90YXRpb246bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMV0pfSl8fHRoaXMsbi5tYXNrU3ByaXRlPXQsbi5tYXNrTWF0cml4PWEsaT09bnVsbCYmKGk9MjApLG4uc2NhbGU9bmV3IHR0KGksaSksbn1yZXR1cm4gZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24odCxpLG4sYSl7dGhpcy51bmlmb3Jtcy5maWx0ZXJNYXRyaXg9dC5jYWxjdWxhdGVTcHJpdGVNYXRyaXgodGhpcy5tYXNrTWF0cml4LHRoaXMubWFza1Nwcml0ZSksdGhpcy51bmlmb3Jtcy5zY2FsZS54PXRoaXMuc2NhbGUueCx0aGlzLnVuaWZvcm1zLnNjYWxlLnk9dGhpcy5zY2FsZS55O3ZhciBzPXRoaXMubWFza1Nwcml0ZS53b3JsZFRyYW5zZm9ybSxvPU1hdGguc3FydChzLmEqcy5hK3MuYipzLmIpLGg9TWF0aC5zcXJ0KHMuYypzLmMrcy5kKnMuZCk7byE9PTAmJmghPT0wJiYodGhpcy51bmlmb3Jtcy5yb3RhdGlvblswXT1zLmEvbyx0aGlzLnVuaWZvcm1zLnJvdGF0aW9uWzFdPXMuYi9vLHRoaXMudW5pZm9ybXMucm90YXRpb25bMl09cy5jL2gsdGhpcy51bmlmb3Jtcy5yb3RhdGlvblszXT1zLmQvaCksdC5hcHBseUZpbHRlcih0aGlzLGksbixhKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0pKFF0KTt2YXIgeG49ZnVuY3Rpb24ocixlKXtyZXR1cm4geG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LHhuKHIsZSl9O2Z1bmN0aW9uIFBwKHIsZSl7eG4ocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX12YXIgUnA9YAphdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247Cgp1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsKCnZhcnlpbmcgdmVjMiB2X3JnYk5XOwp2YXJ5aW5nIHZlYzIgdl9yZ2JORTsKdmFyeWluZyB2ZWMyIHZfcmdiU1c7CnZhcnlpbmcgdmVjMiB2X3JnYlNFOwp2YXJ5aW5nIHZlYzIgdl9yZ2JNOwoKdmFyeWluZyB2ZWMyIHZGcmFnQ29vcmQ7Cgp1bmlmb3JtIHZlYzQgaW5wdXRTaXplOwp1bmlmb3JtIHZlYzQgb3V0cHV0RnJhbWU7Cgp2ZWM0IGZpbHRlclZlcnRleFBvc2l0aW9uKCB2b2lkICkKewogICAgdmVjMiBwb3NpdGlvbiA9IGFWZXJ0ZXhQb3NpdGlvbiAqIG1heChvdXRwdXRGcmFtZS56dywgdmVjMigwLikpICsgb3V0cHV0RnJhbWUueHk7CgogICAgcmV0dXJuIHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOwp9Cgp2b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiBpbnZlcnNlVlAsCiAgICAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsCiAgICAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsCiAgICAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTSkgewogICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDsKICAgIHZfcmdiTkUgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIC0xLjApKSAqIGludmVyc2VWUDsKICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDsKICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQOwogICAgdl9yZ2JNID0gdmVjMihmcmFnQ29vcmQgKiBpbnZlcnNlVlApOwp9Cgp2b2lkIG1haW4odm9pZCkgewoKICAgZ2xfUG9zaXRpb24gPSBmaWx0ZXJWZXJ0ZXhQb3NpdGlvbigpOwoKICAgdkZyYWdDb29yZCA9IGFWZXJ0ZXhQb3NpdGlvbiAqIG91dHB1dEZyYW1lLnp3OwoKICAgdGV4Y29vcmRzKHZGcmFnQ29vcmQsIGlucHV0U2l6ZS56dywgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTsKfQpgLEFwPWB2YXJ5aW5nIHZlYzIgdl9yZ2JOVzsKdmFyeWluZyB2ZWMyIHZfcmdiTkU7CnZhcnlpbmcgdmVjMiB2X3JnYlNXOwp2YXJ5aW5nIHZlYzIgdl9yZ2JTRTsKdmFyeWluZyB2ZWMyIHZfcmdiTTsKCnZhcnlpbmcgdmVjMiB2RnJhZ0Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsKdW5pZm9ybSBoaWdocCB2ZWM0IGlucHV0U2l6ZTsKCgovKioKIEJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGUKIG1vZGlmaWNhdGlvbiB0aGF0IHRoZSB0ZXh0dXJlMkRMb2Qgc3R1ZmYgd2FzIHJlbW92ZWQgc2luY2UgaXQncwogdW5zdXBwb3J0ZWQgYnkgV2ViR0wuCgogLS0KCiBGcm9tOgogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnQKCiBDb3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuCgogU29tZSByaWdodHMgcmVzZXJ2ZWQuCgogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiBtZXQ6CgogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwogcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU4KI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMCkKI2VuZGlmCiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMCiNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMCkKI2VuZGlmCiNpZm5kZWYgRlhBQV9TUEFOX01BWAojZGVmaW5lIEZYQUFfU1BBTl9NQVggICAgIDguMAojZW5kaWYKCi8vb3B0aW1pemVkIHZlcnNpb24gZm9yIG1vYmlsZSwgd2hlcmUgZGVwZW5kZW50Ci8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrCnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiBpbnZlcnNlVlAsCiAgICAgICAgICB2ZWMyIHZfcmdiTlcsIHZlYzIgdl9yZ2JORSwKICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLAogICAgICAgICAgdmVjMiB2X3JnYk0pIHsKICAgIHZlYzQgY29sb3I7CiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6OwogICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejsKICAgIHZlYzMgcmdiU1cgPSB0ZXh0dXJlMkQodGV4LCB2X3JnYlNXKS54eXo7CiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6OwogICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7CiAgICB2ZWMzIHJnYk0gID0gdGV4Q29sb3IueHl6OwogICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTsKICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7CiAgICBmbG9hdCBsdW1hTkUgPSBkb3QocmdiTkUsIGx1bWEpOwogICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTsKICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7CiAgICBmbG9hdCBsdW1hTSAgPSBkb3QocmdiTSwgIGx1bWEpOwogICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTsKICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7CgogICAgbWVkaXVtcCB2ZWMyIGRpcjsKICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTsKICAgIGRpci55ID0gICgobHVtYU5XICsgbHVtYVNXKSAtIChsdW1hTkUgKyBsdW1hU0UpKTsKCiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI1ICogRlhBQV9SRURVQ0VfTVVMKSwgRlhBQV9SRURVQ0VfTUlOKTsKCiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTsKICAgIGRpciA9IG1pbih2ZWMyKEZYQUFfU1BBTl9NQVgsIEZYQUFfU1BBTl9NQVgpLAogICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksCiAgICAgICAgICAgICAgICAgIGRpciAqIHJjcERpck1pbikpICogaW52ZXJzZVZQOwoKICAgIHZlYzMgcmdiQSA9IDAuNSAqICgKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMS4wIC8gMy4wIC0gMC41KSkueHl6ICsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTsKICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTsKCiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTsKICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSkKICAgICAgICBjb2xvciA9IHZlYzQocmdiQSwgdGV4Q29sb3IuYSk7CiAgICBlbHNlCiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpOwogICAgcmV0dXJuIGNvbG9yOwp9Cgp2b2lkIG1haW4oKSB7CgogICAgICB2ZWM0IGNvbG9yOwoKICAgICAgY29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2RnJhZ0Nvb3JkLCBpbnB1dFNpemUuencsIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7CgogICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgOyhmdW5jdGlvbihyKXtQcChlLHIpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gci5jYWxsKHRoaXMsUnAsQXApfHx0aGlzfXJldHVybiBlfSkoUXQpO3ZhciBibj1mdW5jdGlvbihyLGUpe3JldHVybiBibj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxpKXt0Ll9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24odCxpKXtmb3IodmFyIG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1pW25dKX0sYm4ocixlKX07ZnVuY3Rpb24gQ3AocixlKXtibihyLGUpO2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9ci5wcm90b3R5cGU9ZT09PW51bGw/T2JqZWN0LmNyZWF0ZShlKToodC5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHQpfXZhciBJcD1gcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKdmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7CnZhcnlpbmcgdmVjNCB2Q29sb3I7Cgp1bmlmb3JtIGZsb2F0IHVOb2lzZTsKdW5pZm9ybSBmbG9hdCB1U2VlZDsKdW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7CgpmbG9hdCByYW5kKHZlYzIgY28pCnsKICAgIHJldHVybiBmcmFjdChzaW4oZG90KGNvLnh5LCB2ZWMyKDEyLjk4OTgsIDc4LjIzMykpKSAqIDQzNzU4LjU0NTMpOwp9Cgp2b2lkIG1haW4oKQp7CiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsKICAgIGZsb2F0IHJhbmRvbVZhbHVlID0gcmFuZChnbF9GcmFnQ29vcmQueHkgKiB1U2VlZCk7CiAgICBmbG9hdCBkaWZmID0gKHJhbmRvbVZhbHVlIC0gMC41KSAqIHVOb2lzZTsKCiAgICAvLyBVbi1wcmVtdWx0aXBseSBhbHBoYSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbG9yIG1hdHJpeC4gU2VlIGlzc3VlICMzNTM5LgogICAgaWYgKGNvbG9yLmEgPiAwLjApIHsKICAgICAgICBjb2xvci5yZ2IgLz0gY29sb3IuYTsKICAgIH0KCiAgICBjb2xvci5yICs9IGRpZmY7CiAgICBjb2xvci5nICs9IGRpZmY7CiAgICBjb2xvci5iICs9IGRpZmY7CgogICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEgYWdhaW4uCiAgICBjb2xvci5yZ2IgKj0gY29sb3IuYTsKCiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgOyhmdW5jdGlvbihyKXtDcChlLHIpO2Z1bmN0aW9uIGUodCxpKXt0PT09dm9pZCAwJiYodD0uNSksaT09PXZvaWQgMCYmKGk9TWF0aC5yYW5kb20oKSk7dmFyIG49ci5jYWxsKHRoaXMsVWEsSXAse3VOb2lzZTowLHVTZWVkOjB9KXx8dGhpcztyZXR1cm4gbi5ub2lzZT10LG4uc2VlZD1pLG59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibm9pc2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy51Tm9pc2V9LHNldDpmdW5jdGlvbih0KXt0aGlzLnVuaWZvcm1zLnVOb2lzZT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnVTZWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy51bmlmb3Jtcy51U2VlZD10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KShRdCk7dmFyIEFzPW5ldyB2dDtsdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXA9ITEsbHQucHJvdG90eXBlLl9jYWNoZURhdGE9bnVsbCxsdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBSZXNvbHV0aW9uPW51bGwsbHQucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwTXVsdGlzYW1wbGU9aHQuTk9ORTt2YXIgT3A9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7dGhpcy50ZXh0dXJlQ2FjaGVJZD1udWxsLHRoaXMub3JpZ2luYWxSZW5kZXI9bnVsbCx0aGlzLm9yaWdpbmFsUmVuZGVyQ2FudmFzPW51bGwsdGhpcy5vcmlnaW5hbENhbGN1bGF0ZUJvdW5kcz1udWxsLHRoaXMub3JpZ2luYWxHZXRMb2NhbEJvdW5kcz1udWxsLHRoaXMub3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm09bnVsbCx0aGlzLm9yaWdpbmFsRGVzdHJveT1udWxsLHRoaXMub3JpZ2luYWxNYXNrPW51bGwsdGhpcy5vcmlnaW5hbEZpbHRlckFyZWE9bnVsbCx0aGlzLm9yaWdpbmFsQ29udGFpbnNQb2ludD1udWxsLHRoaXMuc3ByaXRlPW51bGx9cmV0dXJuIHJ9KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobHQucHJvdG90eXBlLHtjYWNoZUFzQml0bWFwUmVzb2x1dGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXBSZXNvbHV0aW9ufSxzZXQ6ZnVuY3Rpb24ocil7ciE9PXRoaXMuX2NhY2hlQXNCaXRtYXBSZXNvbHV0aW9uJiYodGhpcy5fY2FjaGVBc0JpdG1hcFJlc29sdXRpb249cix0aGlzLmNhY2hlQXNCaXRtYXAmJih0aGlzLmNhY2hlQXNCaXRtYXA9ITEsdGhpcy5jYWNoZUFzQml0bWFwPSEwKSl9fSxjYWNoZUFzQml0bWFwTXVsdGlzYW1wbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwTXVsdGlzYW1wbGV9LHNldDpmdW5jdGlvbihyKXtyIT09dGhpcy5fY2FjaGVBc0JpdG1hcE11bHRpc2FtcGxlJiYodGhpcy5fY2FjaGVBc0JpdG1hcE11bHRpc2FtcGxlPXIsdGhpcy5jYWNoZUFzQml0bWFwJiYodGhpcy5jYWNoZUFzQml0bWFwPSExLHRoaXMuY2FjaGVBc0JpdG1hcD0hMCkpfX0sY2FjaGVBc0JpdG1hcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXB9LHNldDpmdW5jdGlvbihyKXtpZih0aGlzLl9jYWNoZUFzQml0bWFwIT09cil7dGhpcy5fY2FjaGVBc0JpdG1hcD1yO3ZhciBlO3I/KHRoaXMuX2NhY2hlRGF0YXx8KHRoaXMuX2NhY2hlRGF0YT1uZXcgT3ApLGU9dGhpcy5fY2FjaGVEYXRhLGUub3JpZ2luYWxSZW5kZXI9dGhpcy5yZW5kZXIsZS5vcmlnaW5hbFJlbmRlckNhbnZhcz10aGlzLnJlbmRlckNhbnZhcyxlLm9yaWdpbmFsVXBkYXRlVHJhbnNmb3JtPXRoaXMudXBkYXRlVHJhbnNmb3JtLGUub3JpZ2luYWxDYWxjdWxhdGVCb3VuZHM9dGhpcy5jYWxjdWxhdGVCb3VuZHMsZS5vcmlnaW5hbEdldExvY2FsQm91bmRzPXRoaXMuZ2V0TG9jYWxCb3VuZHMsZS5vcmlnaW5hbERlc3Ryb3k9dGhpcy5kZXN0cm95LGUub3JpZ2luYWxDb250YWluc1BvaW50PXRoaXMuY29udGFpbnNQb2ludCxlLm9yaWdpbmFsTWFzaz10aGlzLl9tYXNrLGUub3JpZ2luYWxGaWx0ZXJBcmVhPXRoaXMuZmlsdGVyQXJlYSx0aGlzLnJlbmRlcj10aGlzLl9yZW5kZXJDYWNoZWQsdGhpcy5yZW5kZXJDYW52YXM9dGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzLHRoaXMuZGVzdHJveT10aGlzLl9jYWNoZUFzQml0bWFwRGVzdHJveSk6KGU9dGhpcy5fY2FjaGVEYXRhLGUuc3ByaXRlJiZ0aGlzLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCgpLHRoaXMucmVuZGVyPWUub3JpZ2luYWxSZW5kZXIsdGhpcy5yZW5kZXJDYW52YXM9ZS5vcmlnaW5hbFJlbmRlckNhbnZhcyx0aGlzLmNhbGN1bGF0ZUJvdW5kcz1lLm9yaWdpbmFsQ2FsY3VsYXRlQm91bmRzLHRoaXMuZ2V0TG9jYWxCb3VuZHM9ZS5vcmlnaW5hbEdldExvY2FsQm91bmRzLHRoaXMuZGVzdHJveT1lLm9yaWdpbmFsRGVzdHJveSx0aGlzLnVwZGF0ZVRyYW5zZm9ybT1lLm9yaWdpbmFsVXBkYXRlVHJhbnNmb3JtLHRoaXMuY29udGFpbnNQb2ludD1lLm9yaWdpbmFsQ29udGFpbnNQb2ludCx0aGlzLl9tYXNrPWUub3JpZ2luYWxNYXNrLHRoaXMuZmlsdGVyQXJlYT1lLm9yaWdpbmFsRmlsdGVyQXJlYSl9fX19KSxsdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZD1mdW5jdGlvbihlKXshdGhpcy52aXNpYmxlfHx0aGlzLndvcmxkQWxwaGE8PTB8fCF0aGlzLnJlbmRlcmFibGV8fCh0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdChlKSx0aGlzLl9jYWNoZURhdGEuc3ByaXRlLnRyYW5zZm9ybS5fd29ybGRJRD10aGlzLnRyYW5zZm9ybS5fd29ybGRJRCx0aGlzLl9jYWNoZURhdGEuc3ByaXRlLndvcmxkQWxwaGE9dGhpcy53b3JsZEFscGhhLHRoaXMuX2NhY2hlRGF0YS5zcHJpdGUuX3JlbmRlcihlKSl9LGx0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoISh0aGlzLl9jYWNoZURhdGEmJnRoaXMuX2NhY2hlRGF0YS5zcHJpdGUpKXt2YXIgaT10aGlzLmFscGhhO3RoaXMuYWxwaGE9MSxlLmJhdGNoLmZsdXNoKCk7dmFyIG49dGhpcy5nZXRMb2NhbEJvdW5kcyhudWxsLCEwKS5jbG9uZSgpO2lmKHRoaXMuZmlsdGVycyYmdGhpcy5maWx0ZXJzLmxlbmd0aCl7dmFyIGE9dGhpcy5maWx0ZXJzWzBdLnBhZGRpbmc7bi5wYWQoYSl9bi5jZWlsKEkuUkVTT0xVVElPTik7dmFyIHM9ZS5yZW5kZXJUZXh0dXJlLmN1cnJlbnQsbz1lLnJlbmRlclRleHR1cmUuc291cmNlRnJhbWUuY2xvbmUoKSxoPWUucmVuZGVyVGV4dHVyZS5kZXN0aW5hdGlvbkZyYW1lLmNsb25lKCksdT1lLnByb2plY3Rpb24udHJhbnNmb3JtLGw9ZmUuY3JlYXRlKHt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxyZXNvbHV0aW9uOnRoaXMuY2FjaGVBc0JpdG1hcFJlc29sdXRpb258fGUucmVzb2x1dGlvbixtdWx0aXNhbXBsZToodD10aGlzLmNhY2hlQXNCaXRtYXBNdWx0aXNhbXBsZSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6ZS5tdWx0aXNhbXBsZX0pLGM9ImNhY2hlQXNCaXRtYXBfIithZSgpO3RoaXMuX2NhY2hlRGF0YS50ZXh0dXJlQ2FjaGVJZD1jLGouYWRkVG9DYWNoZShsLmJhc2VUZXh0dXJlLGMpLEwuYWRkVG9DYWNoZShsLGMpO3ZhciBmPXRoaXMudHJhbnNmb3JtLmxvY2FsVHJhbnNmb3JtLmNvcHlUbyhBcykuaW52ZXJ0KCkudHJhbnNsYXRlKC1uLngsLW4ueSk7dGhpcy5yZW5kZXI9dGhpcy5fY2FjaGVEYXRhLm9yaWdpbmFsUmVuZGVyLGUucmVuZGVyKHRoaXMse3JlbmRlclRleHR1cmU6bCxjbGVhcjohMCx0cmFuc2Zvcm06Zixza2lwVXBkYXRlVHJhbnNmb3JtOiExfSksZS5mcmFtZWJ1ZmZlci5ibGl0KCksZS5wcm9qZWN0aW9uLnRyYW5zZm9ybT11LGUucmVuZGVyVGV4dHVyZS5iaW5kKHMsbyxoKSx0aGlzLnJlbmRlcj10aGlzLl9yZW5kZXJDYWNoZWQsdGhpcy51cGRhdGVUcmFuc2Zvcm09dGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtLHRoaXMuY2FsY3VsYXRlQm91bmRzPXRoaXMuX2NhbGN1bGF0ZUNhY2hlZEJvdW5kcyx0aGlzLmdldExvY2FsQm91bmRzPXRoaXMuX2dldENhY2hlZExvY2FsQm91bmRzLHRoaXMuX21hc2s9bnVsbCx0aGlzLmZpbHRlckFyZWE9bnVsbCx0aGlzLmFscGhhPWk7dmFyIGQ9bmV3IHRyKGwpO2QudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLGQuYW5jaG9yLng9LShuLngvbi53aWR0aCksZC5hbmNob3IueT0tKG4ueS9uLmhlaWdodCksZC5hbHBoYT1pLGQuX2JvdW5kcz10aGlzLl9ib3VuZHMsdGhpcy5fY2FjaGVEYXRhLnNwcml0ZT1kLHRoaXMudHJhbnNmb3JtLl9wYXJlbnRJRD0tMSx0aGlzLnBhcmVudD90aGlzLnVwZGF0ZVRyYW5zZm9ybSgpOih0aGlzLmVuYWJsZVRlbXBQYXJlbnQoKSx0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMuZGlzYWJsZVRlbXBQYXJlbnQobnVsbCkpLHRoaXMuY29udGFpbnNQb2ludD1kLmNvbnRhaW5zUG9pbnQuYmluZChkKX19LGx0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzPWZ1bmN0aW9uKGUpeyF0aGlzLnZpc2libGV8fHRoaXMud29ybGRBbHBoYTw9MHx8IXRoaXMucmVuZGVyYWJsZXx8KHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKGUpLHRoaXMuX2NhY2hlRGF0YS5zcHJpdGUud29ybGRBbHBoYT10aGlzLndvcmxkQWxwaGEsdGhpcy5fY2FjaGVEYXRhLnNwcml0ZS5fcmVuZGVyQ2FudmFzKGUpKX0sbHQucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcz1mdW5jdGlvbihlKXtpZighKHRoaXMuX2NhY2hlRGF0YSYmdGhpcy5fY2FjaGVEYXRhLnNwcml0ZSkpe3ZhciB0PXRoaXMuZ2V0TG9jYWxCb3VuZHMobnVsbCwhMCksaT10aGlzLmFscGhhO3RoaXMuYWxwaGE9MTt2YXIgbj1lLmNvbnRleHQsYT1lLl9wcm9qVHJhbnNmb3JtO3QuY2VpbChJLlJFU09MVVRJT04pO3ZhciBzPWZlLmNyZWF0ZSh7d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9KSxvPSJjYWNoZUFzQml0bWFwXyIrYWUoKTt0aGlzLl9jYWNoZURhdGEudGV4dHVyZUNhY2hlSWQ9byxqLmFkZFRvQ2FjaGUocy5iYXNlVGV4dHVyZSxvKSxMLmFkZFRvQ2FjaGUocyxvKTt2YXIgaD1Bczt0aGlzLnRyYW5zZm9ybS5sb2NhbFRyYW5zZm9ybS5jb3B5VG8oaCksaC5pbnZlcnQoKSxoLnR4LT10LngsaC50eS09dC55LHRoaXMucmVuZGVyQ2FudmFzPXRoaXMuX2NhY2hlRGF0YS5vcmlnaW5hbFJlbmRlckNhbnZhcyxlLnJlbmRlcih0aGlzLHtyZW5kZXJUZXh0dXJlOnMsY2xlYXI6ITAsdHJhbnNmb3JtOmgsc2tpcFVwZGF0ZVRyYW5zZm9ybTohMX0pLGUuY29udGV4dD1uLGUuX3Byb2pUcmFuc2Zvcm09YSx0aGlzLnJlbmRlckNhbnZhcz10aGlzLl9yZW5kZXJDYWNoZWRDYW52YXMsdGhpcy51cGRhdGVUcmFuc2Zvcm09dGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtLHRoaXMuY2FsY3VsYXRlQm91bmRzPXRoaXMuX2NhbGN1bGF0ZUNhY2hlZEJvdW5kcyx0aGlzLmdldExvY2FsQm91bmRzPXRoaXMuX2dldENhY2hlZExvY2FsQm91bmRzLHRoaXMuX21hc2s9bnVsbCx0aGlzLmZpbHRlckFyZWE9bnVsbCx0aGlzLmFscGhhPWk7dmFyIHU9bmV3IHRyKHMpO3UudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtLndvcmxkVHJhbnNmb3JtLHUuYW5jaG9yLng9LSh0LngvdC53aWR0aCksdS5hbmNob3IueT0tKHQueS90LmhlaWdodCksdS5hbHBoYT1pLHUuX2JvdW5kcz10aGlzLl9ib3VuZHMsdGhpcy5fY2FjaGVEYXRhLnNwcml0ZT11LHRoaXMudHJhbnNmb3JtLl9wYXJlbnRJRD0tMSx0aGlzLnBhcmVudD90aGlzLnVwZGF0ZVRyYW5zZm9ybSgpOih0aGlzLnBhcmVudD1lLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCx0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMucGFyZW50PW51bGwpLHRoaXMuY29udGFpbnNQb2ludD11LmNvbnRhaW5zUG9pbnQuYmluZCh1KX19LGx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQ2FjaGVkQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5fYm91bmRzLmNsZWFyKCksdGhpcy5fY2FjaGVEYXRhLnNwcml0ZS50cmFuc2Zvcm0uX3dvcmxkSUQ9dGhpcy50cmFuc2Zvcm0uX3dvcmxkSUQsdGhpcy5fY2FjaGVEYXRhLnNwcml0ZS5fY2FsY3VsYXRlQm91bmRzKCksdGhpcy5fYm91bmRzLnVwZGF0ZUlEPXRoaXMuX2JvdW5kc0lEfSxsdC5wcm90b3R5cGUuX2dldENhY2hlZExvY2FsQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlRGF0YS5zcHJpdGUuZ2V0TG9jYWxCb3VuZHMobnVsbCl9LGx0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3Q9ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZURhdGEuc3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koITApLHRoaXMuX2NhY2hlRGF0YS5zcHJpdGU9bnVsbCxqLnJlbW92ZUZyb21DYWNoZSh0aGlzLl9jYWNoZURhdGEudGV4dHVyZUNhY2hlSWQpLEwucmVtb3ZlRnJvbUNhY2hlKHRoaXMuX2NhY2hlRGF0YS50ZXh0dXJlQ2FjaGVJZCksdGhpcy5fY2FjaGVEYXRhLnRleHR1cmVDYWNoZUlkPW51bGx9LGx0LnByb3RvdHlwZS5fY2FjaGVBc0JpdG1hcERlc3Ryb3k9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZUFzQml0bWFwPSExLHRoaXMuZGVzdHJveShlKX07bHQucHJvdG90eXBlLm5hbWU9bnVsbCxYdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9MCxuPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8bjtpKyspaWYodGhpcy5jaGlsZHJlbltpXS5uYW1lPT09ZSlyZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtpZih0KWZvcih2YXIgaT0wLG49dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxuO2krKyl7dmFyIGE9dGhpcy5jaGlsZHJlbltpXTtpZihhLmdldENoaWxkQnlOYW1lKXt2YXIgcz1hLmdldENoaWxkQnlOYW1lKGUsITApO2lmKHMpcmV0dXJuIHN9fXJldHVybiBudWxsfTtsdC5wcm90b3R5cGUuZ2V0R2xvYmFsUG9zaXRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bmV3IHR0KSx0PT09dm9pZCAwJiYodD0hMSksdGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudG9HbG9iYWwodGhpcy5wb3NpdGlvbixlLHQpOihlLng9dGhpcy5wb3NpdGlvbi54LGUueT10aGlzLnBvc2l0aW9uLnkpLGV9O3ZhciBNcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXt9cmV0dXJuIHIuaW5pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZXNpemVUbyIse3NldDpmdW5jdGlvbihpKXtnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5xdWV1ZVJlc2l6ZSksdGhpcy5fcmVzaXplVG89aSxpJiYoZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMucXVldWVSZXNpemUpLHRoaXMucmVzaXplKCkpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzaXplVG99fSksdGhpcy5xdWV1ZVJlc2l6ZT1mdW5jdGlvbigpe3QuX3Jlc2l6ZVRvJiYodC5jYW5jZWxSZXNpemUoKSx0Ll9yZXNpemVJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gdC5yZXNpemUoKX0pKX0sdGhpcy5jYW5jZWxSZXNpemU9ZnVuY3Rpb24oKXt0Ll9yZXNpemVJZCYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3Jlc2l6ZUlkKSx0Ll9yZXNpemVJZD1udWxsKX0sdGhpcy5yZXNpemU9ZnVuY3Rpb24oKXtpZih0Ll9yZXNpemVUbyl7dC5jYW5jZWxSZXNpemUoKTt2YXIgaSxuO2lmKHQuX3Jlc2l6ZVRvPT09Z2xvYmFsVGhpcy53aW5kb3cpaT1nbG9iYWxUaGlzLmlubmVyV2lkdGgsbj1nbG9iYWxUaGlzLmlubmVySGVpZ2h0O2Vsc2V7dmFyIGE9dC5fcmVzaXplVG8scz1hLmNsaWVudFdpZHRoLG89YS5jbGllbnRIZWlnaHQ7aT1zLG49b310LnJlbmRlcmVyLnJlc2l6ZShpLG4pfX0sdGhpcy5fcmVzaXplSWQ9bnVsbCx0aGlzLl9yZXNpemVUbz1udWxsLHRoaXMucmVzaXplVG89ZS5yZXNpemVUb3x8bnVsbH0sci5kZXN0cm95PWZ1bmN0aW9uKCl7Z2xvYmFsVGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMucXVldWVSZXNpemUpLHRoaXMuY2FuY2VsUmVzaXplKCksdGhpcy5jYW5jZWxSZXNpemU9bnVsbCx0aGlzLnF1ZXVlUmVzaXplPW51bGwsdGhpcy5yZXNpemVUbz1udWxsLHRoaXMucmVzaXplPW51bGx9LHIuZXh0ZW5zaW9uPUsuQXBwbGljYXRpb24scn0oKSxEcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpczt0aGlzLnN0YWdlPW5ldyBYdCxlPU9iamVjdC5hc3NpZ24oe2ZvcmNlQ2FudmFzOiExfSxlKSx0aGlzLnJlbmRlcmVyPW9jKGUpLHIuX3BsdWdpbnMuZm9yRWFjaChmdW5jdGlvbihpKXtpLmluaXQuY2FsbCh0LGUpfSl9cmV0dXJuIHIucmVnaXN0ZXJQbHVnaW49ZnVuY3Rpb24oZSl7T3QoIjYuNS4wIiwiQXBwbGljYXRpb24ucmVnaXN0ZXJQbHVnaW4oKSBpcyBkZXByZWNhdGVkLCB1c2UgZXh0ZW5zaW9ucy5hZGQoKSIpLHp0LmFkZCh7dHlwZTpLLkFwcGxpY2F0aW9uLHJlZjplfSl9LHIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc3RhZ2UpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci52aWV3fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwic2NyZWVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2NyZWVufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLG49ci5fcGx1Z2lucy5zbGljZSgwKTtuLnJldmVyc2UoKSxuLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kZXN0cm95LmNhbGwoaSl9KSx0aGlzLnN0YWdlLmRlc3Ryb3kodCksdGhpcy5zdGFnZT1udWxsLHRoaXMucmVuZGVyZXIuZGVzdHJveShlKSx0aGlzLnJlbmRlcmVyPW51bGx9LHIuX3BsdWdpbnM9W10scn0oKTt6dC5oYW5kbGVCeUxpc3QoSy5BcHBsaWNhdGlvbixEcC5fcGx1Z2lucyksenQuYWRkKE1wKTt2YXIgVG49ZnVuY3Rpb24ocixlKXtyZXR1cm4gVG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LFRuKHIsZSl9O2Z1bmN0aW9uIE9lKHIsZSl7VG4ocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX12YXIgRnA9ZnVuY3Rpb24ocil7T2UoZSxyKTtmdW5jdGlvbiBlKHQsaSxuLGEpe3Q9PT12b2lkIDAmJih0PTEwMCksaT09PXZvaWQgMCYmKGk9MTAwKSxuPT09dm9pZCAwJiYobj0xMCksYT09PXZvaWQgMCYmKGE9MTApO3ZhciBzPXIuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gcy5zZWdXaWR0aD1uLHMuc2VnSGVpZ2h0PWEscy53aWR0aD10LHMuaGVpZ2h0PWkscy5idWlsZCgpLHN9cmV0dXJuIGUucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc2VnV2lkdGgqdGhpcy5zZWdIZWlnaHQsaT1bXSxuPVtdLGE9W10scz10aGlzLnNlZ1dpZHRoLTEsbz10aGlzLnNlZ0hlaWdodC0xLGg9dGhpcy53aWR0aC9zLHU9dGhpcy5oZWlnaHQvbyxsPTA7bDx0O2wrKyl7dmFyIGM9bCV0aGlzLnNlZ1dpZHRoLGY9bC90aGlzLnNlZ1dpZHRofDA7aS5wdXNoKGMqaCxmKnUpLG4ucHVzaChjL3MsZi9vKX1mb3IodmFyIGQ9cypvLGw9MDtsPGQ7bCsrKXt2YXIgcD1sJXMsdj1sL3N8MCxfPXYqdGhpcy5zZWdXaWR0aCtwLG09dip0aGlzLnNlZ1dpZHRoK3ArMSxnPSh2KzEpKnRoaXMuc2VnV2lkdGgrcCx5PSh2KzEpKnRoaXMuc2VnV2lkdGgrcCsxO2EucHVzaChfLG0sZyxtLHksZyl9dGhpcy5idWZmZXJzWzBdLmRhdGE9bmV3IEZsb2F0MzJBcnJheShpKSx0aGlzLmJ1ZmZlcnNbMV0uZGF0YT1uZXcgRmxvYXQzMkFycmF5KG4pLHRoaXMuaW5kZXhCdWZmZXIuZGF0YT1uZXcgVWludDE2QXJyYXkoYSksdGhpcy5idWZmZXJzWzBdLnVwZGF0ZSgpLHRoaXMuYnVmZmVyc1sxXS51cGRhdGUoKSx0aGlzLmluZGV4QnVmZmVyLnVwZGF0ZSgpfSxlfShXciksTnA9ZnVuY3Rpb24ocil7T2UoZSxyKTtmdW5jdGlvbiBlKHQsaSxuKXt0PT09dm9pZCAwJiYodD0yMDApLG49PT12b2lkIDAmJihuPTApO3ZhciBhPXIuY2FsbCh0aGlzLG5ldyBGbG9hdDMyQXJyYXkoaS5sZW5ndGgqNCksbmV3IEZsb2F0MzJBcnJheShpLmxlbmd0aCo0KSxuZXcgVWludDE2QXJyYXkoKGkubGVuZ3RoLTEpKjYpKXx8dGhpcztyZXR1cm4gYS5wb2ludHM9aSxhLl93aWR0aD10LGEudGV4dHVyZVNjYWxlPW4sYS5idWlsZCgpLGF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwid2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvaW50cztpZih0KXt2YXIgaT10aGlzLmdldEJ1ZmZlcigiYVZlcnRleFBvc2l0aW9uIiksbj10aGlzLmdldEJ1ZmZlcigiYVRleHR1cmVDb29yZCIpLGE9dGhpcy5nZXRJbmRleCgpO2lmKCEodC5sZW5ndGg8MSkpe2kuZGF0YS5sZW5ndGgvNCE9PXQubGVuZ3RoJiYoaS5kYXRhPW5ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgqNCksbi5kYXRhPW5ldyBGbG9hdDMyQXJyYXkodC5sZW5ndGgqNCksYS5kYXRhPW5ldyBVaW50MTZBcnJheSgodC5sZW5ndGgtMSkqNikpO3ZhciBzPW4uZGF0YSxvPWEuZGF0YTtzWzBdPTAsc1sxXT0wLHNbMl09MCxzWzNdPTE7Zm9yKHZhciBoPTAsdT10WzBdLGw9dGhpcy5fd2lkdGgqdGhpcy50ZXh0dXJlU2NhbGUsYz10Lmxlbmd0aCxmPTA7ZjxjO2YrKyl7dmFyIGQ9Zio0O2lmKHRoaXMudGV4dHVyZVNjYWxlPjApe3ZhciBwPXUueC10W2ZdLngsdj11LnktdFtmXS55LF89TWF0aC5zcXJ0KHAqcCt2KnYpO3U9dFtmXSxoKz1fL2x9ZWxzZSBoPWYvKGMtMSk7c1tkXT1oLHNbZCsxXT0wLHNbZCsyXT1oLHNbZCszXT0xfWZvcih2YXIgbT0wLGY9MDtmPGMtMTtmKyspe3ZhciBkPWYqMjtvW20rK109ZCxvW20rK109ZCsxLG9bbSsrXT1kKzIsb1ttKytdPWQrMixvW20rK109ZCsxLG9bbSsrXT1kKzN9bi51cGRhdGUoKSxhLnVwZGF0ZSgpLHRoaXMudXBkYXRlVmVydGljZXMoKX19fSxlLnByb3RvdHlwZS51cGRhdGVWZXJ0aWNlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucG9pbnRzO2lmKCEodC5sZW5ndGg8MSkpe2Zvcih2YXIgaT10WzBdLG4sYT0wLHM9MCxvPXRoaXMuYnVmZmVyc1swXS5kYXRhLGg9dC5sZW5ndGgsdT0wO3U8aDt1Kyspe3ZhciBsPXRbdV0sYz11KjQ7dTx0Lmxlbmd0aC0xP249dFt1KzFdOm49bCxzPS0obi54LWkueCksYT1uLnktaS55O3ZhciBmPU1hdGguc3FydChhKmErcypzKSxkPXRoaXMudGV4dHVyZVNjYWxlPjA/dGhpcy50ZXh0dXJlU2NhbGUqdGhpcy5fd2lkdGgvMjp0aGlzLl93aWR0aC8yO2EvPWYscy89ZixhKj1kLHMqPWQsb1tjXT1sLngrYSxvW2MrMV09bC55K3Msb1tjKzJdPWwueC1hLG9bYyszXT1sLnktcyxpPWx9dGhpcy5idWZmZXJzWzBdLnVwZGF0ZSgpfX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlU2NhbGU+MD90aGlzLmJ1aWxkKCk6dGhpcy51cGRhdGVWZXJ0aWNlcygpfSxlfShXcik7KGZ1bmN0aW9uKHIpe09lKGUscik7ZnVuY3Rpb24gZSh0LGksbil7bj09PXZvaWQgMCYmKG49MCk7dmFyIGE9dGhpcyxzPW5ldyBOcCh0LmhlaWdodCxpLG4pLG89bmV3IG5yKHQpO3JldHVybiBuPjAmJih0LmJhc2VUZXh0dXJlLndyYXBNb2RlPUx0LlJFUEVBVCksYT1yLmNhbGwodGhpcyxzLG8pfHx0aGlzLGEuYXV0b1VwZGF0ZT0hMCxhfXJldHVybiBlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2VvbWV0cnk7KHRoaXMuYXV0b1VwZGF0ZXx8aS5fd2lkdGghPT10aGlzLnNoYWRlci50ZXh0dXJlLmhlaWdodCkmJihpLl93aWR0aD10aGlzLnNoYWRlci50ZXh0dXJlLmhlaWdodCxpLnVwZGF0ZSgpKSxyLnByb3RvdHlwZS5fcmVuZGVyLmNhbGwodGhpcyx0KX0sZX0pKGlyKTt2YXIgQnA9ZnVuY3Rpb24ocil7T2UoZSxyKTtmdW5jdGlvbiBlKHQsaSxuKXt2YXIgYT10aGlzLHM9bmV3IEZwKHQud2lkdGgsdC5oZWlnaHQsaSxuKSxvPW5ldyBucihMLldISVRFKTtyZXR1cm4gYT1yLmNhbGwodGhpcyxzLG8pfHx0aGlzLGEudGV4dHVyZT10LGEuYXV0b1Jlc2l6ZT0hMCxhfXJldHVybiBlLnByb3RvdHlwZS50ZXh0dXJlVXBkYXRlZD1mdW5jdGlvbigpe3RoaXMuX3RleHR1cmVJRD10aGlzLnNoYWRlci50ZXh0dXJlLl91cGRhdGVJRDt2YXIgdD10aGlzLmdlb21ldHJ5LGk9dGhpcy5zaGFkZXIudGV4dHVyZSxuPWkud2lkdGgsYT1pLmhlaWdodDt0aGlzLmF1dG9SZXNpemUmJih0LndpZHRoIT09bnx8dC5oZWlnaHQhPT1hKSYmKHQud2lkdGg9dGhpcy5zaGFkZXIudGV4dHVyZS53aWR0aCx0LmhlaWdodD10aGlzLnNoYWRlci50ZXh0dXJlLmhlaWdodCx0LmJ1aWxkKCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRleHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkZXIudGV4dHVyZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuc2hhZGVyLnRleHR1cmUhPT10JiYodGhpcy5zaGFkZXIudGV4dHVyZT10LHRoaXMuX3RleHR1cmVJRD0tMSx0LmJhc2VUZXh0dXJlLnZhbGlkP3RoaXMudGV4dHVyZVVwZGF0ZWQoKTp0Lm9uY2UoInVwZGF0ZSIsdGhpcy50ZXh0dXJlVXBkYXRlZCx0aGlzKSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbih0KXt0aGlzLl90ZXh0dXJlSUQhPT10aGlzLnNoYWRlci50ZXh0dXJlLl91cGRhdGVJRCYmdGhpcy50ZXh0dXJlVXBkYXRlZCgpLHIucHJvdG90eXBlLl9yZW5kZXIuY2FsbCh0aGlzLHQpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuc2hhZGVyLnRleHR1cmUub2ZmKCJ1cGRhdGUiLHRoaXMudGV4dHVyZVVwZGF0ZWQsdGhpcyksci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsdCl9LGV9KGlyKTsoZnVuY3Rpb24ocil7T2UoZSxyKTtmdW5jdGlvbiBlKHQsaSxuLGEscyl7dD09PXZvaWQgMCYmKHQ9TC5FTVBUWSk7dmFyIG89dGhpcyxoPW5ldyBXcihpLG4sYSk7aC5nZXRCdWZmZXIoImFWZXJ0ZXhQb3NpdGlvbiIpLnN0YXRpYz0hMTt2YXIgdT1uZXcgbnIodCk7cmV0dXJuIG89ci5jYWxsKHRoaXMsaCx1LG51bGwscyl8fHRoaXMsby5hdXRvVXBkYXRlPSEwLG99cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVydGljZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZW9tZXRyeS5nZXRCdWZmZXIoImFWZXJ0ZXhQb3NpdGlvbiIpLmRhdGF9LHNldDpmdW5jdGlvbih0KXt0aGlzLmdlb21ldHJ5LmdldEJ1ZmZlcigiYVZlcnRleFBvc2l0aW9uIikuZGF0YT10fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24odCl7dGhpcy5hdXRvVXBkYXRlJiZ0aGlzLmdlb21ldHJ5LmdldEJ1ZmZlcigiYVZlcnRleFBvc2l0aW9uIikudXBkYXRlKCksci5wcm90b3R5cGUuX3JlbmRlci5jYWxsKHRoaXMsdCl9LGV9KShpcik7dmFyIEtyPTEwOyhmdW5jdGlvbihyKXtPZShlLHIpO2Z1bmN0aW9uIGUodCxpLG4sYSxzKXtpPT09dm9pZCAwJiYoaT1Lciksbj09PXZvaWQgMCYmKG49S3IpLGE9PT12b2lkIDAmJihhPUtyKSxzPT09dm9pZCAwJiYocz1Lcik7dmFyIG89ci5jYWxsKHRoaXMsTC5XSElURSw0LDQpfHx0aGlzO3JldHVybiBvLl9vcmlnV2lkdGg9dC5vcmlnLndpZHRoLG8uX29yaWdIZWlnaHQ9dC5vcmlnLmhlaWdodCxvLl93aWR0aD1vLl9vcmlnV2lkdGgsby5faGVpZ2h0PW8uX29yaWdIZWlnaHQsby5fbGVmdFdpZHRoPWksby5fcmlnaHRXaWR0aD1hLG8uX3RvcEhlaWdodD1uLG8uX2JvdHRvbUhlaWdodD1zLG8udGV4dHVyZT10LG99cmV0dXJuIGUucHJvdG90eXBlLnRleHR1cmVVcGRhdGVkPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dHVyZUlEPXRoaXMuc2hhZGVyLnRleHR1cmUuX3VwZGF0ZUlELHRoaXMuX3JlZnJlc2goKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJ0aWNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdlb21ldHJ5LmdldEJ1ZmZlcigiYVZlcnRleFBvc2l0aW9uIikuZGF0YX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuZ2VvbWV0cnkuZ2V0QnVmZmVyKCJhVmVydGV4UG9zaXRpb24iKS5kYXRhPXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudXBkYXRlSG9yaXpvbnRhbFZlcnRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlcyxpPXRoaXMuX2dldE1pblNjYWxlKCk7dFs5XT10WzExXT10WzEzXT10WzE1XT10aGlzLl90b3BIZWlnaHQqaSx0WzE3XT10WzE5XT10WzIxXT10WzIzXT10aGlzLl9oZWlnaHQtdGhpcy5fYm90dG9tSGVpZ2h0KmksdFsyNV09dFsyN109dFsyOV09dFszMV09dGhpcy5faGVpZ2h0fSxlLnByb3RvdHlwZS51cGRhdGVWZXJ0aWNhbFZlcnRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlcyxpPXRoaXMuX2dldE1pblNjYWxlKCk7dFsyXT10WzEwXT10WzE4XT10WzI2XT10aGlzLl9sZWZ0V2lkdGgqaSx0WzRdPXRbMTJdPXRbMjBdPXRbMjhdPXRoaXMuX3dpZHRoLXRoaXMuX3JpZ2h0V2lkdGgqaSx0WzZdPXRbMTRdPXRbMjJdPXRbMzBdPXRoaXMuX3dpZHRofSxlLnByb3RvdHlwZS5fZ2V0TWluU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9sZWZ0V2lkdGgrdGhpcy5fcmlnaHRXaWR0aCxpPXRoaXMuX3dpZHRoPnQ/MTp0aGlzLl93aWR0aC90LG49dGhpcy5fdG9wSGVpZ2h0K3RoaXMuX2JvdHRvbUhlaWdodCxhPXRoaXMuX2hlaWdodD5uPzE6dGhpcy5faGVpZ2h0L24scz1NYXRoLm1pbihpLGEpO3JldHVybiBzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpZHRofSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fd2lkdGg9dCx0aGlzLl9yZWZyZXNoKCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVpZ2h0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGVpZ2h0PXQsdGhpcy5fcmVmcmVzaCgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGVmdFdpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlZnRXaWR0aH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2xlZnRXaWR0aD10LHRoaXMuX3JlZnJlc2goKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJpZ2h0V2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmlnaHRXaWR0aH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JpZ2h0V2lkdGg9dCx0aGlzLl9yZWZyZXNoKCl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0b3BIZWlnaHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9wSGVpZ2h0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdG9wSGVpZ2h0PXQsdGhpcy5fcmVmcmVzaCgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYm90dG9tSGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdHRvbUhlaWdodH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JvdHRvbUhlaWdodD10LHRoaXMuX3JlZnJlc2goKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fcmVmcmVzaD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGV4dHVyZSxpPXRoaXMuZ2VvbWV0cnkuYnVmZmVyc1sxXS5kYXRhO3RoaXMuX29yaWdXaWR0aD10Lm9yaWcud2lkdGgsdGhpcy5fb3JpZ0hlaWdodD10Lm9yaWcuaGVpZ2h0O3ZhciBuPTEvdGhpcy5fb3JpZ1dpZHRoLGE9MS90aGlzLl9vcmlnSGVpZ2h0O2lbMF09aVs4XT1pWzE2XT1pWzI0XT0wLGlbMV09aVszXT1pWzVdPWlbN109MCxpWzZdPWlbMTRdPWlbMjJdPWlbMzBdPTEsaVsyNV09aVsyN109aVsyOV09aVszMV09MSxpWzJdPWlbMTBdPWlbMThdPWlbMjZdPW4qdGhpcy5fbGVmdFdpZHRoLGlbNF09aVsxMl09aVsyMF09aVsyOF09MS1uKnRoaXMuX3JpZ2h0V2lkdGgsaVs5XT1pWzExXT1pWzEzXT1pWzE1XT1hKnRoaXMuX3RvcEhlaWdodCxpWzE3XT1pWzE5XT1pWzIxXT1pWzIzXT0xLWEqdGhpcy5fYm90dG9tSGVpZ2h0LHRoaXMudXBkYXRlSG9yaXpvbnRhbFZlcnRpY2VzKCksdGhpcy51cGRhdGVWZXJ0aWNhbFZlcnRpY2VzKCksdGhpcy5nZW9tZXRyeS5idWZmZXJzWzBdLnVwZGF0ZSgpLHRoaXMuZ2VvbWV0cnkuYnVmZmVyc1sxXS51cGRhdGUoKX0sZX0pKEJwKTt2YXIgRW49ZnVuY3Rpb24ocixlKXtyZXR1cm4gRW49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsaSl7dC5fX3Byb3RvX189aX18fGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBuIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09aVtuXSl9LEVuKHIsZSl9O2Z1bmN0aW9uIExwKHIsZSl7RW4ocixlKTtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXIucHJvdG90eXBlPWU9PT1udWxsP09iamVjdC5jcmVhdGUoZSk6KHQucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyB0KX0oZnVuY3Rpb24ocil7THAoZSxyKTtmdW5jdGlvbiBlKHQsaSl7aT09PXZvaWQgMCYmKGk9ITApO3ZhciBuPXIuY2FsbCh0aGlzLHRbMF1pbnN0YW5jZW9mIEw/dFswXTp0WzBdLnRleHR1cmUpfHx0aGlzO3JldHVybiBuLl90ZXh0dXJlcz1udWxsLG4uX2R1cmF0aW9ucz1udWxsLG4uX2F1dG9VcGRhdGU9aSxuLl9pc0Nvbm5lY3RlZFRvVGlja2VyPSExLG4uYW5pbWF0aW9uU3BlZWQ9MSxuLmxvb3A9ITAsbi51cGRhdGVBbmNob3I9ITEsbi5vbkNvbXBsZXRlPW51bGwsbi5vbkZyYW1lQ2hhbmdlPW51bGwsbi5vbkxvb3A9bnVsbCxuLl9jdXJyZW50VGltZT0wLG4uX3BsYXlpbmc9ITEsbi5fcHJldmlvdXNGcmFtZT1udWxsLG4udGV4dHVyZXM9dCxufXJldHVybiBlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZyYmKHRoaXMuX3BsYXlpbmc9ITEsdGhpcy5fYXV0b1VwZGF0ZSYmdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlciYmKGJ0LnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMSkpfSxlLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZ3x8KHRoaXMuX3BsYXlpbmc9ITAsdGhpcy5fYXV0b1VwZGF0ZSYmIXRoaXMuX2lzQ29ubmVjdGVkVG9UaWNrZXImJihidC5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLHRoaXMsV3QuSElHSCksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMCkpfSxlLnByb3RvdHlwZS5nb3RvQW5kU3RvcD1mdW5jdGlvbih0KXt0aGlzLnN0b3AoKTt2YXIgaT10aGlzLmN1cnJlbnRGcmFtZTt0aGlzLl9jdXJyZW50VGltZT10LGkhPT10aGlzLmN1cnJlbnRGcmFtZSYmdGhpcy51cGRhdGVUZXh0dXJlKCl9LGUucHJvdG90eXBlLmdvdG9BbmRQbGF5PWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY3VycmVudEZyYW1lO3RoaXMuX2N1cnJlbnRUaW1lPXQsaSE9PXRoaXMuY3VycmVudEZyYW1lJiZ0aGlzLnVwZGF0ZVRleHR1cmUoKSx0aGlzLnBsYXkoKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3BsYXlpbmcpe3ZhciBpPXRoaXMuYW5pbWF0aW9uU3BlZWQqdCxuPXRoaXMuY3VycmVudEZyYW1lO2lmKHRoaXMuX2R1cmF0aW9ucyE9PW51bGwpe3ZhciBhPXRoaXMuX2N1cnJlbnRUaW1lJTEqdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtmb3IoYSs9aS82MCoxZTM7YTwwOyl0aGlzLl9jdXJyZW50VGltZS0tLGErPXRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07dmFyIHM9TWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQqdCk7Zm9yKHRoaXMuX2N1cnJlbnRUaW1lPU1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO2E+PXRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07KWEtPXRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0qcyx0aGlzLl9jdXJyZW50VGltZSs9czt0aGlzLl9jdXJyZW50VGltZSs9YS90aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdfWVsc2UgdGhpcy5fY3VycmVudFRpbWUrPWk7dGhpcy5fY3VycmVudFRpbWU8MCYmIXRoaXMubG9vcD8odGhpcy5nb3RvQW5kU3RvcCgwKSx0aGlzLm9uQ29tcGxldGUmJnRoaXMub25Db21wbGV0ZSgpKTp0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdGV4dHVyZXMubGVuZ3RoJiYhdGhpcy5sb29wPyh0aGlzLmdvdG9BbmRTdG9wKHRoaXMuX3RleHR1cmVzLmxlbmd0aC0xKSx0aGlzLm9uQ29tcGxldGUmJnRoaXMub25Db21wbGV0ZSgpKTpuIT09dGhpcy5jdXJyZW50RnJhbWUmJih0aGlzLmxvb3AmJnRoaXMub25Mb29wJiYodGhpcy5hbmltYXRpb25TcGVlZD4wJiZ0aGlzLmN1cnJlbnRGcmFtZTxuP3RoaXMub25Mb29wKCk6dGhpcy5hbmltYXRpb25TcGVlZDwwJiZ0aGlzLmN1cnJlbnRGcmFtZT5uJiZ0aGlzLm9uTG9vcCgpKSx0aGlzLnVwZGF0ZVRleHR1cmUoKSl9fSxlLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50RnJhbWU7dGhpcy5fcHJldmlvdXNGcmFtZSE9PXQmJih0aGlzLl9wcmV2aW91c0ZyYW1lPXQsdGhpcy5fdGV4dHVyZT10aGlzLl90ZXh0dXJlc1t0XSx0aGlzLl90ZXh0dXJlSUQ9LTEsdGhpcy5fdGV4dHVyZVRyaW1tZWRJRD0tMSx0aGlzLl9jYWNoZWRUaW50PTE2Nzc3MjE1LHRoaXMudXZzPXRoaXMuX3RleHR1cmUuX3V2cy51dnNGbG9hdDMyLHRoaXMudXBkYXRlQW5jaG9yJiZ0aGlzLl9hbmNob3IuY29weUZyb20odGhpcy5fdGV4dHVyZS5kZWZhdWx0QW5jaG9yKSx0aGlzLm9uRnJhbWVDaGFuZ2UmJnRoaXMub25GcmFtZUNoYW5nZSh0aGlzLmN1cnJlbnRGcmFtZSkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuc3RvcCgpLHIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLHQpLHRoaXMub25Db21wbGV0ZT1udWxsLHRoaXMub25GcmFtZUNoYW5nZT1udWxsLHRoaXMub25Mb29wPW51bGx9LGUuZnJvbUZyYW1lcz1mdW5jdGlvbih0KXtmb3IodmFyIGk9W10sbj0wO248dC5sZW5ndGg7KytuKWkucHVzaChMLmZyb20odFtuXSkpO3JldHVybiBuZXcgZShpKX0sZS5mcm9tSW1hZ2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1bXSxuPTA7bjx0Lmxlbmd0aDsrK24paS5wdXNoKEwuZnJvbSh0W25dKSk7cmV0dXJuIG5ldyBlKGkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRvdGFsRnJhbWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInRleHR1cmVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RleHR1cmVzfSxzZXQ6ZnVuY3Rpb24odCl7aWYodFswXWluc3RhbmNlb2YgTCl0aGlzLl90ZXh0dXJlcz10LHRoaXMuX2R1cmF0aW9ucz1udWxsO2Vsc2V7dGhpcy5fdGV4dHVyZXM9W10sdGhpcy5fZHVyYXRpb25zPVtdO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRoaXMuX3RleHR1cmVzLnB1c2godFtpXS50ZXh0dXJlKSx0aGlzLl9kdXJhdGlvbnMucHVzaCh0W2ldLnRpbWUpfXRoaXMuX3ByZXZpb3VzRnJhbWU9bnVsbCx0aGlzLmdvdG9BbmRTdG9wKDApLHRoaXMudXBkYXRlVGV4dHVyZSgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY3VycmVudEZyYW1lIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkldGhpcy5fdGV4dHVyZXMubGVuZ3RoO3JldHVybiB0PDAmJih0Kz10aGlzLl90ZXh0dXJlcy5sZW5ndGgpLHR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwbGF5aW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXlpbmd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdXRvVXBkYXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9VcGRhdGV9LHNldDpmdW5jdGlvbih0KXt0IT09dGhpcy5fYXV0b1VwZGF0ZSYmKHRoaXMuX2F1dG9VcGRhdGU9dCwhdGhpcy5fYXV0b1VwZGF0ZSYmdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj8oYnQuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSx0aGlzKSx0aGlzLl9pc0Nvbm5lY3RlZFRvVGlja2VyPSExKTp0aGlzLl9hdXRvVXBkYXRlJiYhdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlciYmdGhpcy5fcGxheWluZyYmKGJ0LnNoYXJlZC5hZGQodGhpcy51cGRhdGUsdGhpcyksdGhpcy5faXNDb25uZWN0ZWRUb1RpY2tlcj0hMCkpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KSh0cik7enQuYWRkKGJjLFJjLFBjLHlkLHFkLEhhLGVwLGRwLFZjLHZkLF9kLEtkLFVsLE5jKTtjb25zdCBVcD0oe21pbmltdW1TdGFydFRpbWU6cixvdmVyYWxsR3JhcGhXaWR0aDplLGluaXRpYWxPdmVyYWxsVGltZVNwYW46dH0pPT4oe2RhdGVUb1g6R3AocixlLHQpLHhUb0RhdGU6a3AocixlLHQpfSk7ZnVuY3Rpb24gR3AocixlLHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5jZWlsKChpLmdldFRpbWUoKS1yKSooZS90KSl9fWZ1bmN0aW9uIGtwKHIsZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGguY2VpbChyK2kqKHQvZSkpfX1jb25zdCBDcz0wO2xldCB5ZTtjb25zdCBacj1uZXcgZ2U7bGV0IElzPTAsd249IndhdGVyZmFsbCIsSnI9W107Y29uc3QgcHQ9e307b25tZXNzYWdlPSh7ZGF0YTp7bGF5b3V0U2V0dGluZzpyLGdyYXBoRGF0YTplLGRlZmF1bHRUZXh0U3R5bGVzOnQsc3BhY2luZ01pbmltdW1Ob2RlRWRnZUdhcDppLHRpbWVTY2FsZVByb3BzOm59fSk9PntpZighZSl7Y29uc29sZS53YXJuKCJub2RlTGF5b3V0IHdvcmtlcjogY2FsbGVkIHdpdGhvdXQgZ3JhcGhEYXRhLCBleGl0aW5nLiIpO3JldHVybn1pZihpJiYoSXM9aSksciYmKHduPXIpLHQmJihaci5mb250RmFtaWx5PSJzYW5zLXNlcmlmIixaci5mb250U2l6ZT10LmZvbnRTaXplLFpyLmxpbmVIZWlnaHQ9dC5saW5lSGVpZ2h0KSwheWUmJm4pe2NvbnN0e21pbmltdW1TdGFydFRpbWU6YSxvdmVyYWxsR3JhcGhXaWR0aDpzLGluaXRpYWxPdmVyYWxsVGltZVNwYW46b309bjt5ZT1VcCh7bWluaW11bVN0YXJ0VGltZTphLG92ZXJhbGxHcmFwaFdpZHRoOnMsaW5pdGlhbE92ZXJhbGxUaW1lU3BhbjpvfSl9eWUmJihKcj1KU09OLnBhcnNlKGUpLFhwKCkpfTthc3luYyBmdW5jdGlvbiBYcCgpe3duPT09IndhdGVyZmFsbCImJkhwKCksd249PT0ibmVhcmVzdFBhcmVudCImJmF3YWl0IGpwKCkscG9zdE1lc3NhZ2UocHQpfWZ1bmN0aW9uIEhwKCl7SnIuZm9yRWFjaCgocixlKT0+e3B0W3IuaWRdPXtwb3NpdGlvbjplLHN0YXJ0WDp5ZS5kYXRlVG9YKG5ldyBEYXRlKHIuc3RhcnQpKSxlbmRYOnllLmRhdGVUb1goci5lbmQ/bmV3IERhdGUoci5lbmQpOm5ldyBEYXRlKX19KX1hc3luYyBmdW5jdGlvbiBqcCgpe2ZvciBhd2FpdChjb25zdCByIG9mIEpyKXtjb25zdCBlPXllLmRhdGVUb1goci5lbmQ/bmV3IERhdGUoci5lbmQpOm5ldyBEYXRlKTtpZihyLmlkIGluIHB0KXtwdFtyLmlkXS5lbmRYPWU7Y29udGludWV9Y29uc3QgdD15ZS5kYXRlVG9YKG5ldyBEYXRlKHIuc3RhcnQpKSxpPU50Lm1lYXN1cmVUZXh0KHIubGFiZWwsWnIpLndpZHRoLG49YXdhaXQgVnAocix0KTtwdFtyLmlkXT17cG9zaXRpb246bixzdGFydFg6dCxlbmRYOmUraX19fWFzeW5jIGZ1bmN0aW9uIFZwKHIsZSl7aWYoci51cHN0cmVhbURlcGVuZGVuY2llcyYmci51cHN0cmVhbURlcGVuZGVuY2llcy5sZW5ndGg9PT0xKXtpZihyLnVwc3RyZWFtRGVwZW5kZW5jaWVzWzBdaW4gcHQpe2NvbnN0IHQ9cHRbci51cHN0cmVhbURlcGVuZGVuY2llc1swXV07cmV0dXJuIGF3YWl0IFNuKHQsZSl9cmV0dXJuIGNvbnNvbGUud2FybigidGltZWxpbmVOb2RlcyBsYXlvdXQgd29ya2VyOiBQYXJlbnQgbm9kZSBub3QgZm91bmQgaW4gbGF5b3V0IixyLnVwc3RyZWFtRGVwZW5kZW5jaWVzWzBdKSxDc31pZihyLnVwc3RyZWFtRGVwZW5kZW5jaWVzJiZyLnVwc3RyZWFtRGVwZW5kZW5jaWVzLmxlbmd0aD4wKXtjb25zdCBpPXIudXBzdHJlYW1EZXBlbmRlbmNpZXMubWFwKG89PnB0W29dKS5maWx0ZXIobz0+ISFvKS5tYXAobz0+by5wb3NpdGlvbiksYT1pLnJlZHVjZSgobyxoKT0+bytoLDApL2kubGVuZ3RoLHM9TWF0aC5yb3VuZChhKTtpZihhcihlLHMpKXtjb25zdCBvPURzKGUscyksaD1vLmZpbHRlcih1PT57dmFyIGw7cmV0dXJuKGw9ci51cHN0cmVhbURlcGVuZGVuY2llcyk9PW51bGw/dm9pZCAwOmwuaW5jbHVkZXModSl9KTtpZihoLmxlbmd0aD4wfHxvLmxlbmd0aD4xKXtjb25zdFt1XT1oLmxlbmd0aD4wP2g6byxsPXB0W3VdO3JldHVybiBsLm5leHREZXBlbmRlbmN5U2hvdmU9WXAoaSxzLGwubmV4dERlcGVuZGVuY3lTaG92ZSksYXdhaXQgU24obCxlKX1yZXR1cm4gYXdhaXQgenAoe2NvbXBldGluZ0xheW91dEl0ZW1JZDpvWzBdLHVwc3RyZWFtUG9zaXRpb25zOmksbm9kZVN0YXJ0WDplLGRlc2lyZWRQb3NpdGlvbjpzfSl9fXJldHVybiBPcyhlLENzKX1mdW5jdGlvbiBPcyhyLGUpe3JldHVybiBhcihyLGUpP09zKHIsZSsxKTplfWFzeW5jIGZ1bmN0aW9uIFNuKHIsZSl7ci5uZXh0RGVwZW5kZW5jeVNob3ZlIT09MSYmci5uZXh0RGVwZW5kZW5jeVNob3ZlIT09LTEmJihyLm5leHREZXBlbmRlbmN5U2hvdmU9MSk7Y29uc3R7cG9zaXRpb246dCxuZXh0RGVwZW5kZW5jeVNob3ZlOml9PXI7cmV0dXJuIGFyKGUsdCk/aT09PTEmJiFhcihlLHQrMSk/KHIubmV4dERlcGVuZGVuY3lTaG92ZT0tMSx0KzEpOmFyKGUsdC0xKT8oYXdhaXQgTWUoe2RpcmVjdGlvbjppLG5vZGVTdGFydFg6ZSxkZXNpcmVkUG9zaXRpb246dCtpfSksci5uZXh0RGVwZW5kZW5jeVNob3ZlPWk9PT0xPy0xOjEsdCtpKTooci5uZXh0RGVwZW5kZW5jeVNob3ZlPTEsdC0xKTp0fWZ1bmN0aW9uIGFyKHIsZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhwdCk7cmV0dXJuIHQubGVuZ3RoPjAmJnQuc29tZShpPT57Y29uc3Qgbj1wdFtpXTtyZXR1cm4gTXMoe2ZpcnN0Tm9kZUVuZFg6bi5lbmRYLGZpcnN0Tm9kZVBvc2l0aW9uOm4ucG9zaXRpb24sbGFzdE5vZGVTdGFydFg6cixsYXN0Tm9kZVBvc2l0aW9uOmV9KX0pfWFzeW5jIGZ1bmN0aW9uIE1lKHtkaXJlY3Rpb246cixub2RlU3RhcnRYOmUsZGVzaXJlZFBvc2l0aW9uOnR9KXtjb25zdCBpPURzKGUsdCk7aWYoaSlmb3IgYXdhaXQoY29uc3QgbiBvZiBpKXtjb25zdCBhPXB0W25dLHM9YS5wb3NpdGlvbityO2F3YWl0IE1lKHtkaXJlY3Rpb246cixub2RlU3RhcnRYOmEuc3RhcnRYLGRlc2lyZWRQb3NpdGlvbjpzfSksYS5wb3NpdGlvbj1zfX1mdW5jdGlvbiBNcyh7Zmlyc3ROb2RlRW5kWDpyLGZpcnN0Tm9kZVBvc2l0aW9uOmUsbGFzdE5vZGVTdGFydFg6dCxsYXN0Tm9kZVBvc2l0aW9uOml9KXtyZXR1cm4gZT09PWkmJnIrSXM+PXR9ZnVuY3Rpb24gRHMocixlKXtjb25zdCB0PVtdO2lmKE9iamVjdC5rZXlzKHB0KS5mb3JFYWNoKGk9Pntjb25zdCBuPXB0W2ldO01zKHtmaXJzdE5vZGVFbmRYOm4uZW5kWCxmaXJzdE5vZGVQb3NpdGlvbjpuLnBvc2l0aW9uLGxhc3ROb2RlU3RhcnRYOnIsbGFzdE5vZGVQb3NpdGlvbjplfSkmJnQucHVzaChpKX0pLHQubGVuZ3RoIT09MClyZXR1cm4gdC5zb3J0KChpLG4pPT57Y29uc3QgYT1wdFtpXSxzPXB0W25dO3JldHVybiBhLmVuZFg8cy5lbmRYPzE6YS5lbmRYPnMuZW5kWD8tMTowfSksdH1mdW5jdGlvbiBZcChyLGUsdCl7Y29uc3QgaT1yLmZpbHRlcihhPT5hPGUpLmxlbmd0aCxuPXIuZmlsdGVyKGE9PmE+ZSkubGVuZ3RoO3JldHVybiBpPm4/LTE6dD8/MX1hc3luYyBmdW5jdGlvbiB6cCh7ZGVzaXJlZFBvc2l0aW9uOnIsbm9kZVN0YXJ0WDplLHVwc3RyZWFtUG9zaXRpb25zOnQsY29tcGV0aW5nTGF5b3V0SXRlbUlkOml9KXtjb25zdCBuPXB0W2ldLFthLHNdPVdwKGkpLG89dC5maWx0ZXIodT0+dTxyKS5sZW5ndGgsaD10LmZpbHRlcih1PT51PnIpLmxlbmd0aDtpZihvPmgpe2lmKGE+cyYmYT5vKXJldHVybiBhd2FpdCBNZSh7ZGlyZWN0aW9uOi0xLG5vZGVTdGFydFg6ZSxkZXNpcmVkUG9zaXRpb246cn0pLHI7aWYocz5hKXJldHVybiBhd2FpdCBNZSh7ZGlyZWN0aW9uOjEsbm9kZVN0YXJ0WDplLGRlc2lyZWRQb3NpdGlvbjpyfSkscjtuLm5leHREZXBlbmRlbmN5U2hvdmU9LTF9aWYoaD5vKXtpZihzPmEmJnM+aClyZXR1cm4gYXdhaXQgTWUoe2RpcmVjdGlvbjoxLG5vZGVTdGFydFg6ZSxkZXNpcmVkUG9zaXRpb246cn0pLHI7aWYoYT5zKXJldHVybiBhd2FpdCBNZSh7ZGlyZWN0aW9uOi0xLG5vZGVTdGFydFg6ZSxkZXNpcmVkUG9zaXRpb246cn0pLHI7bi5uZXh0RGVwZW5kZW5jeVNob3ZlPTF9cmV0dXJuIGF3YWl0IFNuKG4sZSl9ZnVuY3Rpb24gV3Aocil7dmFyIGk7Y29uc3QgZT1Kci5maW5kKG49Pm4uaWQ9PT1yKSx0PXB0W3JdO3JldHVybigoaT1lLnVwc3RyZWFtRGVwZW5kZW5jaWVzKT09bnVsbD92b2lkIDA6aS5yZWR1Y2UoKG4sYSk9PntpZihyIGluIHB0KXtjb25zdCBzPXB0W2FdO3JldHVybiBzLnBvc2l0aW9uPHQucG9zaXRpb24mJihuWzBdKz0xKSxzLnBvc2l0aW9uPnQucG9zaXRpb24mJihuWzFdKz0xKSxufXJldHVybiBjb25zb2xlLndhcm4oIm5vZGVMYXlvdXQud29ya2VyLnRzOiBQYXJlbnQgbm9kZSBub3QgZm91bmQgb24gbGF5b3V0IGRhdGEiLHIpLG59LFswLDBdKSk/P1swLDBdfX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGVMYXlvdXQud29ya2VyLWVhYzE4NmUxLmpzLm1hcAovLyMgc291cmNlTWFwcGluZ1VSTD1hc3NldHMvbm9kZUxheW91dC53b3JrZXItZWFjMTg2ZTEuanMubWFw",$o=typeof window<"u"&&window.Blob&&new Blob([atob(qo)],{type:"text/javascript;charset=utf-8"});function lV(){const l=$o&&(window.URL||window.webkitURL).createObjectURL($o);try{return l?new Worker(l):new Worker("data:application/javascript;base64,"+qo)}finally{l&&(window.URL||window.webkitURL).revokeObjectURL(l)}}class nV extends xt{constructor({appRef:t,viewportRef:i,graphData:n,styles:a,styleNode:s,layoutSetting:d,timeScaleProps:{minimumStartTime:h,overallGraphWidth:r,initialOverallTimeSpan:o}}){super();N(this,"appRef");N(this,"viewportRef");N(this,"graphData");N(this,"styles");N(this,"styleNode");N(this,"nodeContainer",new xt);N(this,"nodeRecords",new Map);N(this,"selectedNodeId",null);N(this,"layoutSetting");N(this,"layoutWorker",new lV);N(this,"layout",{});N(this,"edgeContainer",new xt);N(this,"edgeRecords",[]);this.appRef=t,this.viewportRef=i,this.graphData=n,this.styles=a,this.styleNode=s,this.layoutSetting=d??"nearestParent",this.initDeselectLayer(),this.initLayoutWorker({minimumStartTime:h,overallGraphWidth:r,initialOverallTimeSpan:o})}async initLayoutWorker({minimumStartTime:t,overallGraphWidth:i,initialOverallTimeSpan:n}){const a=await Hs(this.styles.value),{spacingMinimumNodeEdgeGap:s}=this.styles.value;this.layoutWorker.onmessage=d=>{this.layout=d.data,this.renderLayout()},this.layoutWorker.postMessage({timeScaleProps:{minimumStartTime:t,overallGraphWidth:i,spacingMinimumNodeEdgeGap:s,initialOverallTimeSpan:n},defaultTextStyles:a.nodeTextStyles,graphData:JSON.stringify(this.graphData),layoutSetting:this.layoutSetting})}initDeselectLayer(){const t=new gX(this.appRef,this.viewportRef);this.addChild(t),t.on("click",()=>{this.emit("node-click",null)})}renderLayout(){const t=this.nodeRecords.size===0;Object.keys(this.layout).forEach(i=>{if(this.nodeRecords.has(i)){const n=this.nodeRecords.get(i);this.updateNodeRecordAndEdgesLayout(i,n)}else this.createNode(this.graphData.find(n=>n.id===i))}),t&&(this.addChild(this.edgeContainer),this.addChild(this.nodeContainer),this.fitNodesInViewport())}async updateNodeRecordAndEdgesLayout(t,i){if(i.layoutPosition===this.layout[t].position)return;i.layoutPosition=this.layout[t].position;const n=this.edgeRecords.filter(a=>a.sourceId===t||a.targetId===t);n.forEach(a=>{a.edge.visible=!1}),await i.update(),n.forEach(a=>{a.edge.update(),a.edge.visible=!0})}createNode(t){const{styles:i,styleNode:n}=this,a=new qy({nodeData:t,styles:i,styleNode:n,layoutPosition:this.layout[t.id].position});a.on("click",()=>{this.emit("node-click",t.id)}),this.nodeRecords.set(t.id,a),this.addEdges(t),this.nodeContainer.addChild(a)}fitNodesInViewport(){const{spacingViewportPaddingDefault:t}=this.styles.value,{x:i,y:n,width:a,height:s}=this.nodeContainer.getBounds();this.viewportRef.ensureVisible(i-t,n-t,a+t*2,s+t*2,!0),this.viewportRef.moveCenter(i+a/2,n+s/2)}addEdges(t){t.upstreamDependencies&&t.upstreamDependencies.forEach(i=>{const n=this.nodeRecords.get(i),a=this.nodeRecords.get(t.id);if(!n||!a){console.warn("timelineNodes: could not find source or target node for edge, skipping");return}const s=new $y({styles:this.styles,sourceNode:n,targetNode:a});this.edgeRecords.push({edge:s,sourceId:i,targetId:t.id}),this.edgeContainer.addChild(s)})}update(t){if(t){this.graphData=t,this.layoutWorker.postMessage({graphData:JSON.stringify(this.graphData)});return}this.nodeRecords.forEach(i=>i.update())}updateSelection(t){var n,a;if(this.unHighlightAll(),!t&&this.selectedNodeId){(n=this.nodeRecords.get(this.selectedNodeId))==null||n.deselect(),this.selectedNodeId=null;return}const i=this.selectedNodeId;if(this.selectedNodeId=t,i&&((a=this.nodeRecords.get(i))==null||a.deselect()),t){const s=this.nodeRecords.get(t);s.select(),this.highlightSelectedNodePath(t,s),setTimeout(()=>{this.viewportRef.animate({position:{x:s.x+s.width/2,y:s.y+s.height/2},time:1e3,ease:"easeInOutQuad",removeOnInterrupt:!0})},100)}}highlightSelectedNodePath(t,i){const{alphaNodeDimmed:n}=this.styles.value,a=[...this.getAllUpstreamEdges(t),...this.getAllDownstreamEdges(t)],s=new Map;s.set(t,i),this.edgeRecords.forEach(d=>{if(a.includes(d)){const h=this.nodeRecords.get(d.sourceId),r=this.nodeRecords.get(d.targetId);s.set(d.sourceId,h),s.set(d.targetId,r);return}d.edge.alpha=n}),this.nodeRecords.forEach((d,h)=>{s.has(h)||(d.alpha=n)})}unHighlightAll(){this.edgeRecords.forEach(t=>{t.edge.alpha=1}),this.nodeRecords.forEach(t=>{t.alpha=1})}getAllUpstreamEdges(t){var a;const i=[],n=this.graphData.find(s=>s.id===t);return(a=n==null?void 0:n.upstreamDependencies)==null||a.forEach(s=>{const d=this.edgeRecords.find(h=>h.sourceId===s&&h.targetId===t);if(d){i.push(d);const h=this.getAllUpstreamEdges(s);i.push(...h)}}),i}getAllDownstreamEdges(t){const i=[];return this.graphData.forEach(n=>{var a;if((a=n.upstreamDependencies)!=null&&a.includes(t)){const s=this.edgeRecords.find(d=>d.targetId===n.id&&d.sourceId===t);if(s){i.push(s);const d=this.getAllDownstreamEdges(n.id);i.push(...d)}}}),i}destroy(){this.removeChildren(),this.nodeRecords.clear(),this.layoutWorker.terminate(),this.layoutWorker.onmessage=null,super.destroy.call(this)}}class aV extends xt{constructor({viewportRef:t,appRef:i,styles:n}){super();N(this,"viewportRef");N(this,"appRef");N(this,"styles");N(this,"unwatch");N(this,"playhead",new Ve);this.viewportRef=t,this.appRef=i,this.styles=n,this.drawPlayhead(),this.unwatch=tt.watch(n,()=>{this.playhead.clear(),this.drawPlayhead()},{deep:!0}),this.interactive=!1}drawPlayhead(){const{colorPlayheadBg:t,spacingPlayheadWidth:i,spacingPlayheadGlowPadding:n}=this.styles.value;this.playhead.beginFill(t,.1),this.playhead.drawRect(0,0,i+n*2,this.appRef.screen.height),this.playhead.endFill(),this.playhead.beginFill(t),this.playhead.drawRect(n,0,i,this.appRef.screen.height),this.playhead.endFill(),this.addChild(this.playhead)}updatePosition(){const{spacingPlayheadWidth:t,spacingPlayheadGlowPadding:i}=this.styles.value;this.position.x=oe.dateToX(new Date)*this.viewportRef.scale._x+this.viewportRef.worldTransform.tx-i-t/2,this.playhead.height!==this.appRef.screen.height&&(this.playhead.height=this.appRef.screen.height)}destroy(){this.unwatch(),super.destroy.call(this)}}const sV=tt.defineComponent({__name:"FlowRunTimeline",props:{graphData:null,isRunning:{type:Boolean},theme:null,formatDateFns:null,selectedNodeId:null,layout:null},emits:["click"],setup(l,{emit:e}){const t=l,i=tt.ref(),n=tt.computed(()=>{var v;return((v=t.theme)==null?void 0:v.node)??Yd}),a=tt.computed(()=>{var v;return Tc((v=t.theme)==null?void 0:v.defaults)}),s=tt.ref(!1),d=tt.computed(()=>({...Id,...t.formatDateFns})),h={timelineGuides:0,viewport:10,playhead:20};let r=tt.ref(!0),o,c,u=new Wc,m=!1,b,Z=tt.ref(),p,G,X,y,R,V=null,W;tt.onMounted(async()=>{if(!i.value){console.error("Stage reference not found in initPixiApp");return}L(),o=TX(i.value),o.stage.sortableChildren=!0,c=await JX(i.value,o),c.zIndex=h.viewport,x(),S(),F(),g(),Y(),M(),r.value=!1}),tt.onBeforeUnmount(()=>{f()});function f(){y.destroy(),R==null||R.destroy(),W.destroy(),c.destroy(),o.destroy(!0)}function x(){c.on("drag-start",()=>{s.value=!0}).on("drag-end",()=>{s.value=!1})}function L(){const C=t.graphData.filter(I=>I.end).map(({start:I,end:k})=>({start:I,end:k}));t.isRunning===!0&&C.push({start:new Date,end:new Date});const{min:B,max:P,span:T}=Ic(C,6e4);b=B,Z.value=P,p=T,G=i.value.clientWidth*2,X=Dy({minimumStartTime:b.getTime(),overallGraphWidth:G,initialOverallTimeSpan:p})}function S(){YX(a.value),tt.watch(a,v=>{IX(v)})}function Y(){t.isRunning&&(R=new aV({viewportRef:c,appRef:o,styles:a}),R.zIndex=h.playhead,o.stage.addChild(R),J())}function J(){V||(V=()=>{if(t.isRunning&&R){const v=R.position.x>0&&R.position.x<o.screen.width;if(Z.value=new Date,R.updatePosition(),!c.moving&&v&&R.position.x>o.screen.width-a.value.spacingViewportPaddingDefault){const C=X.xToDate(c.left);c.zoomPercent(-.1,!0),c.left=X.dateToX(new Date(C))}}else R!=null&&R.destroyed||R==null||R.destroy()},o.ticker.add(V))}tt.watch(()=>t.isRunning,v=>{r.value||(v&&(!R||R.destroyed)&&Y(),!v&&R&&V&&(R.destroy(),o.ticker.remove(V),V=null))});function F(){y=new iV({viewportRef:c,appRef:o,minimumStartDate:b,maximumEndDate:Z,isRunning:t.isRunning??!1,styles:a,formatDateFns:d}),y.zIndex=h.timelineGuides,o.stage.addChild(y),o.ticker.add(()=>{y.updateGuides()})}function M(){u.addAll(c.children),c.on("frame-end",()=>{(c.dirty||m)&&(u.cull(o.renderer.screen),c.dirty=!1,m=!1)})}function g(){W=new nV({appRef:o,viewportRef:c,graphData:t.graphData,styles:a,styleNode:n,layoutSetting:t.layout,timeScaleProps:{minimumStartTime:b.getTime(),overallGraphWidth:G,initialOverallTimeSpan:p}}),c.addChild(W),t.isRunning&&o.ticker.add(()=>{t.isRunning&&W.update()}),W.on("node-click",v=>{s.value||e("click",v)}),tt.watch(()=>t.selectedNodeId,v=>{W.updateSelection(v)}),tt.watch(()=>t.graphData,v=>{W.update(v),m=!0})}return(v,C)=>(tt.openBlock(),tt.createElementBlock("div",{ref_key:"stage",ref:i,class:"flow-run-timeline"},null,512))}}),UV="";class ie{constructor(e){this.parent=e,this.paused=!1}destroy(){}down(e){return!1}move(e){return!1}up(e){return!1}wheel(e){return!1}update(e){}resize(){}reset(){}pause(){this.paused=!0}resume(){this.paused=!1}}var dV=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function hV(l,e,t){return t={path:e,exports:{},require:function(i,n){return rV(i,n??t.path)}},l(t,t.exports),t.exports}function rV(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var tc=hV(function(l,e){(function(){var t,i;i=function(n){return l.exports=n},t={linear:function(n,a,s,d){return s*n/d+a},easeInQuad:function(n,a,s,d){return s*(n/=d)*n+a},easeOutQuad:function(n,a,s,d){return-s*(n/=d)*(n-2)+a},easeInOutQuad:function(n,a,s,d){return(n/=d/2)<1?s/2*n*n+a:-s/2*(--n*(n-2)-1)+a},easeInCubic:function(n,a,s,d){return s*(n/=d)*n*n+a},easeOutCubic:function(n,a,s,d){return s*((n=n/d-1)*n*n+1)+a},easeInOutCubic:function(n,a,s,d){return(n/=d/2)<1?s/2*n*n*n+a:s/2*((n-=2)*n*n+2)+a},easeInQuart:function(n,a,s,d){return s*(n/=d)*n*n*n+a},easeOutQuart:function(n,a,s,d){return-s*((n=n/d-1)*n*n*n-1)+a},easeInOutQuart:function(n,a,s,d){return(n/=d/2)<1?s/2*n*n*n*n+a:-s/2*((n-=2)*n*n*n-2)+a},easeInQuint:function(n,a,s,d){return s*(n/=d)*n*n*n*n+a},easeOutQuint:function(n,a,s,d){return s*((n=n/d-1)*n*n*n*n+1)+a},easeInOutQuint:function(n,a,s,d){return(n/=d/2)<1?s/2*n*n*n*n*n+a:s/2*((n-=2)*n*n*n*n+2)+a},easeInSine:function(n,a,s,d){return-s*Math.cos(n/d*(Math.PI/2))+s+a},easeOutSine:function(n,a,s,d){return s*Math.sin(n/d*(Math.PI/2))+a},easeInOutSine:function(n,a,s,d){return-s/2*(Math.cos(Math.PI*n/d)-1)+a},easeInExpo:function(n,a,s,d){return n===0?a:s*Math.pow(2,10*(n/d-1))+a},easeOutExpo:function(n,a,s,d){return n===d?a+s:s*(-Math.pow(2,-10*n/d)+1)+a},easeInOutExpo:function(n,a,s,d){return(n/=d/2)<1?s/2*Math.pow(2,10*(n-1))+a:s/2*(-Math.pow(2,-10*--n)+2)+a},easeInCirc:function(n,a,s,d){return-s*(Math.sqrt(1-(n/=d)*n)-1)+a},easeOutCirc:function(n,a,s,d){return s*Math.sqrt(1-(n=n/d-1)*n)+a},easeInOutCirc:function(n,a,s,d){return(n/=d/2)<1?-s/2*(Math.sqrt(1-n*n)-1)+a:s/2*(Math.sqrt(1-(n-=2)*n)+1)+a},easeInElastic:function(n,a,s,d){var h,r,o;return o=1.70158,r=0,h=s,n===0||(n/=d),r||(r=d*.3),h<Math.abs(s)?(h=s,o=r/4):o=r/(2*Math.PI)*Math.asin(s/h),-(h*Math.pow(2,10*(n-=1))*Math.sin((n*d-o)*(2*Math.PI)/r))+a},easeOutElastic:function(n,a,s,d){var h,r,o;return o=1.70158,r=0,h=s,n===0||(n/=d),r||(r=d*.3),h<Math.abs(s)?(h=s,o=r/4):o=r/(2*Math.PI)*Math.asin(s/h),h*Math.pow(2,-10*n)*Math.sin((n*d-o)*(2*Math.PI)/r)+s+a},easeInOutElastic:function(n,a,s,d){var h,r,o;return o=1.70158,r=0,h=s,n===0||(n/=d/2),r||(r=d*(.3*1.5)),h<Math.abs(s)?(h=s,o=r/4):o=r/(2*Math.PI)*Math.asin(s/h),n<1?-.5*(h*Math.pow(2,10*(n-=1))*Math.sin((n*d-o)*(2*Math.PI)/r))+a:h*Math.pow(2,-10*(n-=1))*Math.sin((n*d-o)*(2*Math.PI)/r)*.5+s+a},easeInBack:function(n,a,s,d,h){return h===void 0&&(h=1.70158),s*(n/=d)*n*((h+1)*n-h)+a},easeOutBack:function(n,a,s,d,h){return h===void 0&&(h=1.70158),s*((n=n/d-1)*n*((h+1)*n+h)+1)+a},easeInOutBack:function(n,a,s,d,h){return h===void 0&&(h=1.70158),(n/=d/2)<1?s/2*(n*n*(((h*=1.525)+1)*n-h))+a:s/2*((n-=2)*n*(((h*=1.525)+1)*n+h)+2)+a},easeInBounce:function(n,a,s,d){var h;return h=t.easeOutBounce(d-n,0,s,d),s-h+a},easeOutBounce:function(n,a,s,d){return(n/=d)<1/2.75?s*(7.5625*n*n)+a:n<2/2.75?s*(7.5625*(n-=1.5/2.75)*n+.75)+a:n<2.5/2.75?s*(7.5625*(n-=2.25/2.75)*n+.9375)+a:s*(7.5625*(n-=2.625/2.75)*n+.984375)+a},easeInOutBounce:function(n,a,s,d){var h;return n<d/2?(h=t.easeInBounce(n*2,0,s,d),h*.5+a):(h=t.easeOutBounce(n*2-d,0,s,d),h*.5+s*.5+a)}},i(t)}).call(dV)});function ia(l,e){if(l){if(typeof l=="function")return l;if(typeof l=="string")return tc[l]}else return tc[e]}const oV={removeOnInterrupt:!1,ease:"linear",time:1e3};class He extends ie{__init(){this.startWidth=null}__init2(){this.startHeight=null}__init3(){this.deltaWidth=null}__init4(){this.deltaHeight=null}__init5(){this.width=null}__init6(){this.height=null}__init7(){this.time=0}constructor(e,t={}){super(e),He.prototype.__init.call(this),He.prototype.__init2.call(this),He.prototype.__init3.call(this),He.prototype.__init4.call(this),He.prototype.__init5.call(this),He.prototype.__init6.call(this),He.prototype.__init7.call(this),this.options=Object.assign({},oV,t),this.options.ease=ia(this.options.ease),this.setupPosition(),this.setupZoom(),this.time=0}setupPosition(){typeof this.options.position<"u"?(this.startX=this.parent.center.x,this.startY=this.parent.center.y,this.deltaX=this.options.position.x-this.parent.center.x,this.deltaY=this.options.position.y-this.parent.center.y,this.keepCenter=!1):this.keepCenter=!0}setupZoom(){this.width=null,this.height=null,typeof this.options.scale<"u"?this.width=this.parent.screenWidth/this.options.scale:typeof this.options.scaleX<"u"||typeof this.options.scaleY<"u"?(typeof this.options.scaleX<"u"&&(this.width=this.parent.screenWidth/this.options.scaleX),typeof this.options.scaleY<"u"&&(this.height=this.parent.screenHeight/this.options.scaleY)):(typeof this.options.width<"u"&&(this.width=this.options.width),typeof this.options.height<"u"&&(this.height=this.options.height)),this.width!==null&&(this.startWidth=this.parent.screenWidthInWorldPixels,this.deltaWidth=this.width-this.startWidth),this.height!==null&&(this.startHeight=this.parent.screenHeightInWorldPixels,this.deltaHeight=this.height-this.startHeight)}down(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("animate"),!1}complete(){this.parent.plugins.remove("animate"),this.width!==null&&this.parent.fitWidth(this.width,this.keepCenter,this.height===null),this.height!==null&&this.parent.fitHeight(this.height,this.keepCenter,this.width===null),!this.keepCenter&&this.options.position&&this.parent.moveCenter(this.options.position),this.parent.emit("animate-end",this.parent),this.options.callbackOnComplete&&this.options.callbackOnComplete(this.parent)}update(e){if(this.paused)return;this.time+=e;const t=new _(this.parent.scale.x,this.parent.scale.y);if(this.time>=this.options.time){const i=this.parent.width,n=this.parent.height;this.complete(),(i!==this.parent.width||n!==this.parent.height)&&this.parent.emit("zoomed",{viewport:this.parent,original:t,type:"animate"})}else{const i=this.options.ease(this.time,0,1,this.options.time);if(this.width!==null){const n=this.startWidth,a=this.deltaWidth;this.parent.fitWidth(n+a*i,this.keepCenter,this.height===null)}if(this.height!==null){const n=this.startHeight,a=this.deltaHeight;this.parent.fitHeight(n+a*i,this.keepCenter,this.width===null)}if(this.width===null?this.parent.scale.x=this.parent.scale.y:this.height===null&&(this.parent.scale.y=this.parent.scale.x),!this.keepCenter){const n=this.startX,a=this.startY,s=this.deltaX,d=this.deltaY,h=new _(this.parent.x,this.parent.y);this.parent.moveCenter(n+s*i,a+d*i),this.parent.emit("moved",{viewport:this.parent,original:h,type:"animate"})}(this.width||this.height)&&this.parent.emit("zoomed",{viewport:this.parent,original:t,type:"animate"})}}}function la(l){let e,t=l[0],i=1;for(;i<l.length;){const n=l[i],a=l[i+1];if(i+=2,(n==="optionalAccess"||n==="optionalCall")&&t==null)return;n==="access"||n==="optionalAccess"?(e=t,t=a(t)):(n==="call"||n==="optionalCall")&&(t=a((...s)=>t.call(e,...s)),e=void 0)}return t}const cV={sides:"all",friction:.5,time:150,ease:"easeInOutSine",underflow:"center",bounceBox:null};class ec extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},cV,t),this.ease=ia(this.options.ease,"easeInOutSine"),this.options.sides?this.options.sides==="all"?this.top=this.bottom=this.left=this.right=!0:this.options.sides==="horizontal"?(this.right=this.left=!0,this.top=this.bottom=!1):this.options.sides==="vertical"?(this.left=this.right=!1,this.top=this.bottom=!0):(this.top=this.options.sides.indexOf("top")!==-1,this.bottom=this.options.sides.indexOf("bottom")!==-1,this.left=this.options.sides.indexOf("left")!==-1,this.right=this.options.sides.indexOf("right")!==-1):this.left=this.top=this.right=this.bottom=!1;const i=this.options.underflow.toLowerCase();i==="center"?(this.underflowX=0,this.underflowY=0):(this.underflowX=i.indexOf("left")!==-1?-1:i.indexOf("right")!==-1?1:0,this.underflowY=i.indexOf("top")!==-1?-1:i.indexOf("bottom")!==-1?1:0),this.reset()}isActive(){return this.toX!==null||this.toY!==null}down(){return this.toX=this.toY=null,!1}up(){return this.bounce(),!1}update(e){if(!this.paused){if(this.bounce(),this.toX){const t=this.toX;t.time+=e,this.parent.emit("moved",{viewport:this.parent,type:"bounce-x"}),t.time>=this.options.time?(this.parent.x=t.end,this.toX=null,this.parent.emit("bounce-x-end",this.parent)):this.parent.x=this.ease(t.time,t.start,t.delta,this.options.time)}if(this.toY){const t=this.toY;t.time+=e,this.parent.emit("moved",{viewport:this.parent,type:"bounce-y"}),t.time>=this.options.time?(this.parent.y=t.end,this.toY=null,this.parent.emit("bounce-y-end",this.parent)):this.parent.y=this.ease(t.time,t.start,t.delta,this.options.time)}}}calcUnderflowX(){let e;switch(this.underflowX){case-1:e=0;break;case 1:e=this.parent.screenWidth-this.parent.screenWorldWidth;break;default:e=(this.parent.screenWidth-this.parent.screenWorldWidth)/2}return e}calcUnderflowY(){let e;switch(this.underflowY){case-1:e=0;break;case 1:e=this.parent.screenHeight-this.parent.screenWorldHeight;break;default:e=(this.parent.screenHeight-this.parent.screenWorldHeight)/2}return e}oob(){const e=this.options.bounceBox;if(e){const t=typeof e.x>"u"?0:e.x,i=typeof e.y>"u"?0:e.y,n=typeof e.width>"u"?this.parent.worldWidth:e.width,a=typeof e.height>"u"?this.parent.worldHeight:e.height;return{left:this.parent.left<t,right:this.parent.right>n,top:this.parent.top<i,bottom:this.parent.bottom>a,topLeft:new _(t*this.parent.scale.x,i*this.parent.scale.y),bottomRight:new _(n*this.parent.scale.x-this.parent.screenWidth,a*this.parent.scale.y-this.parent.screenHeight)}}return{left:this.parent.left<0,right:this.parent.right>this.parent.worldWidth,top:this.parent.top<0,bottom:this.parent.bottom>this.parent.worldHeight,topLeft:new _(0,0),bottomRight:new _(this.parent.worldWidth*this.parent.scale.x-this.parent.screenWidth,this.parent.worldHeight*this.parent.scale.y-this.parent.screenHeight)}}bounce(){if(this.paused)return;let e,t=this.parent.plugins.get("decelerate",!0);t&&(t.x||t.y)&&(t.x&&t.percentChangeX===la([t,"access",a=>a.options,"optionalAccess",a=>a.friction])||t.y&&t.percentChangeY===la([t,"access",a=>a.options,"optionalAccess",a=>a.friction]))&&(e=this.oob(),(e.left&&this.left||e.right&&this.right)&&(t.percentChangeX=this.options.friction),(e.top&&this.top||e.bottom&&this.bottom)&&(t.percentChangeY=this.options.friction));const i=this.parent.plugins.get("drag",!0)||{},n=this.parent.plugins.get("pinch",!0)||{};if(t=t||{},!la([i,"optionalAccess",a=>a.active])&&!la([n,"optionalAccess",a=>a.active])&&(!this.toX||!this.toY)&&(!t.x||!t.y)){e=e||this.oob();const a=e.topLeft,s=e.bottomRight;if(!this.toX&&!t.x){let d=null;e.left&&this.left?d=this.parent.screenWorldWidth<this.parent.screenWidth?this.calcUnderflowX():-a.x:e.right&&this.right&&(d=this.parent.screenWorldWidth<this.parent.screenWidth?this.calcUnderflowX():-s.x),d!==null&&this.parent.x!==d&&(this.toX={time:0,start:this.parent.x,delta:d-this.parent.x,end:d},this.parent.emit("bounce-x-start",this.parent))}if(!this.toY&&!t.y){let d=null;e.top&&this.top?d=this.parent.screenWorldHeight<this.parent.screenHeight?this.calcUnderflowY():-a.y:e.bottom&&this.bottom&&(d=this.parent.screenWorldHeight<this.parent.screenHeight?this.calcUnderflowY():-s.y),d!==null&&this.parent.y!==d&&(this.toY={time:0,start:this.parent.y,delta:d-this.parent.y,end:d},this.parent.emit("bounce-y-start",this.parent))}}}reset(){this.toX=this.toY=null,this.bounce()}}const uV={left:!1,right:!1,top:!1,bottom:!1,direction:null,underflow:"center"};class ic extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},uV,t),this.options.direction&&(this.options.left=this.options.direction==="x"||this.options.direction==="all"?!0:null,this.options.right=this.options.direction==="x"||this.options.direction==="all"?!0:null,this.options.top=this.options.direction==="y"||this.options.direction==="all"?!0:null,this.options.bottom=this.options.direction==="y"||this.options.direction==="all"?!0:null),this.parseUnderflow(),this.last={x:null,y:null,scaleX:null,scaleY:null},this.update()}parseUnderflow(){const e=this.options.underflow.toLowerCase();e==="none"?this.noUnderflow=!0:e==="center"?(this.underflowX=this.underflowY=0,this.noUnderflow=!1):(this.underflowX=e.indexOf("left")!==-1?-1:e.indexOf("right")!==-1?1:0,this.underflowY=e.indexOf("top")!==-1?-1:e.indexOf("bottom")!==-1?1:0,this.noUnderflow=!1)}move(){return this.update(),!1}update(){if(this.paused||this.parent.x===this.last.x&&this.parent.y===this.last.y&&this.parent.scale.x===this.last.scaleX&&this.parent.scale.y===this.last.scaleY)return;const e={x:this.parent.x,y:this.parent.y},t=this.parent.plugins.decelerate||{};if(this.options.left!==null||this.options.right!==null){let i=!1;if(!this.noUnderflow&&this.parent.screenWorldWidth<this.parent.screenWidth)switch(this.underflowX){case-1:this.parent.x!==0&&(this.parent.x=0,i=!0);break;case 1:this.parent.x!==this.parent.screenWidth-this.parent.screenWorldWidth&&(this.parent.x=this.parent.screenWidth-this.parent.screenWorldWidth,i=!0);break;default:this.parent.x!==(this.parent.screenWidth-this.parent.screenWorldWidth)/2&&(this.parent.x=(this.parent.screenWidth-this.parent.screenWorldWidth)/2,i=!0)}else this.options.left!==null&&this.parent.left<(this.options.left===!0?0:this.options.left)&&(this.parent.x=-(this.options.left===!0?0:this.options.left)*this.parent.scale.x,t.x=0,i=!0),this.options.right!==null&&this.parent.right>(this.options.right===!0?this.parent.worldWidth:this.options.right)&&(this.parent.x=-(this.options.right===!0?this.parent.worldWidth:this.options.right)*this.parent.scale.x+this.parent.screenWidth,t.x=0,i=!0);i&&this.parent.emit("moved",{viewport:this.parent,original:e,type:"clamp-x"})}if(this.options.top!==null||this.options.bottom!==null){let i=!1;if(!this.noUnderflow&&this.parent.screenWorldHeight<this.parent.screenHeight)switch(this.underflowY){case-1:this.parent.y!==0&&(this.parent.y=0,i=!0);break;case 1:this.parent.y!==this.parent.screenHeight-this.parent.screenWorldHeight&&(this.parent.y=this.parent.screenHeight-this.parent.screenWorldHeight,i=!0);break;default:this.parent.y!==(this.parent.screenHeight-this.parent.screenWorldHeight)/2&&(this.parent.y=(this.parent.screenHeight-this.parent.screenWorldHeight)/2,i=!0)}else this.options.top!==null&&this.parent.top<(this.options.top===!0?0:this.options.top)&&(this.parent.y=-(this.options.top===!0?0:this.options.top)*this.parent.scale.y,t.y=0,i=!0),this.options.bottom!==null&&this.parent.bottom>(this.options.bottom===!0?this.parent.worldHeight:this.options.bottom)&&(this.parent.y=-(this.options.bottom===!0?this.parent.worldHeight:this.options.bottom)*this.parent.scale.y+this.parent.screenHeight,t.y=0,i=!0);i&&this.parent.emit("moved",{viewport:this.parent,original:e,type:"clamp-y"})}this.last.x=this.parent.x,this.last.y=this.parent.y,this.last.scaleX=this.parent.scale.x,this.last.scaleY=this.parent.scale.y}reset(){this.update()}}const mV={minWidth:null,minHeight:null,maxWidth:null,maxHeight:null,minScale:null,maxScale:null};class lc extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},mV,t),this.clamp()}resize(){this.clamp()}clamp(){if(!this.paused){if(this.options.minWidth||this.options.minHeight||this.options.maxWidth||this.options.maxHeight){let e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight;if(this.options.minWidth!==null&&e<this.options.minWidth){const i=this.parent.scale.x;this.parent.fitWidth(this.options.minWidth,!1,!1,!0),this.parent.scale.y*=this.parent.scale.x/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.maxWidth!==null&&e>this.options.maxWidth){const i=this.parent.scale.x;this.parent.fitWidth(this.options.maxWidth,!1,!1,!0),this.parent.scale.y*=this.parent.scale.x/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.minHeight!==null&&t<this.options.minHeight){const i=this.parent.scale.y;this.parent.fitHeight(this.options.minHeight,!1,!1,!0),this.parent.scale.x*=this.parent.scale.y/i,e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}if(this.options.maxHeight!==null&&t>this.options.maxHeight){const i=this.parent.scale.y;this.parent.fitHeight(this.options.maxHeight,!1,!1,!0),this.parent.scale.x*=this.parent.scale.y/i,this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"})}}else if(this.options.minScale||this.options.maxScale){const e={x:null,y:null},t={x:null,y:null};if(typeof this.options.minScale=="number")e.x=this.options.minScale,e.y=this.options.minScale;else if(this.options.minScale!==null){const a=this.options.minScale;e.x=typeof a.x>"u"?null:a.x,e.y=typeof a.y>"u"?null:a.y}if(typeof this.options.maxScale=="number")t.x=this.options.maxScale,t.y=this.options.maxScale;else if(this.options.maxScale!==null){const a=this.options.maxScale;t.x=typeof a.x>"u"?null:a.x,t.y=typeof a.y>"u"?null:a.y}let i=this.parent.scale.x,n=this.parent.scale.y;e.x!==null&&i<e.x&&(i=e.x),t.x!==null&&i>t.x&&(i=t.x),e.y!==null&&n<e.y&&(n=e.y),t.y!==null&&n>t.y&&(n=t.y),(i!==this.parent.scale.x||n!==this.parent.scale.y)&&(this.parent.scale.set(i,n),this.parent.emit("zoomed",{viewport:this.parent,type:"clamp-zoom"}))}}}reset(){this.clamp()}}const ZV={friction:.98,bounce:.8,minSpeed:.01},hi=16;class nc extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},ZV,t),this.saved=[],this.timeSinceRelease=0,this.reset(),this.parent.on("moved",i=>this.moved(i))}down(){return this.saved=[],this.x=this.y=null,!1}isActive(){return!!(this.x||this.y)}move(){if(this.paused)return!1;const e=this.parent.input.count();return(e===1||e>1&&!this.parent.plugins.get("pinch",!0))&&(this.saved.push({x:this.parent.x,y:this.parent.y,time:performance.now()}),this.saved.length>60&&this.saved.splice(0,30)),!1}moved(e){if(this.saved.length){const t=this.saved[this.saved.length-1];e.type==="clamp-x"?t.x===e.original.x&&(t.x=this.parent.x):e.type==="clamp-y"&&t.y===e.original.y&&(t.y=this.parent.y)}}up(){if(this.parent.input.count()===0&&this.saved.length){const e=performance.now();for(const t of this.saved)if(t.time>=e-100){const i=e-t.time;this.x=(this.parent.x-t.x)/i,this.y=(this.parent.y-t.y)/i,this.percentChangeX=this.percentChangeY=this.options.friction,this.timeSinceRelease=0;break}}return!1}activate(e){e=e||{},typeof e.x<"u"&&(this.x=e.x,this.percentChangeX=this.options.friction),typeof e.y<"u"&&(this.y=e.y,this.percentChangeY=this.options.friction)}update(e){if(this.paused)return;const t=this.x||this.y,i=this.timeSinceRelease,n=this.timeSinceRelease+e;if(this.x){const a=this.percentChangeX,s=Math.log(a);this.parent.x+=this.x*hi/s*(Math.pow(a,n/hi)-Math.pow(a,i/hi)),this.x*=Math.pow(this.percentChangeX,e/hi)}if(this.y){const a=this.percentChangeY,s=Math.log(a);this.parent.y+=this.y*hi/s*(Math.pow(a,n/hi)-Math.pow(a,i/hi)),this.y*=Math.pow(this.percentChangeY,e/hi)}this.timeSinceRelease+=e,this.x&&this.y?Math.abs(this.x)<this.options.minSpeed&&Math.abs(this.y)<this.options.minSpeed&&(this.x=0,this.y=0):(Math.abs(this.x||0)<this.options.minSpeed&&(this.x=0),Math.abs(this.y||0)<this.options.minSpeed&&(this.y=0)),t&&this.parent.emit("moved",{viewport:this.parent,type:"decelerate"})}reset(){this.x=this.y=null}}const bV={direction:"all",pressDrag:!0,wheel:!0,wheelScroll:1,reverse:!1,clampWheel:!1,underflow:"center",factor:1,mouseButtons:"all",keyToPress:null,ignoreKeyToPressOnTouch:!1,lineHeight:20,wheelSwapAxes:!1};class na extends ie{__init(){this.windowEventHandlers=new Array}constructor(e,t={}){super(e),na.prototype.__init.call(this),this.options=Object.assign({},bV,t),this.moved=!1,this.reverse=this.options.reverse?1:-1,this.xDirection=!this.options.direction||this.options.direction==="all"||this.options.direction==="x",this.yDirection=!this.options.direction||this.options.direction==="all"||this.options.direction==="y",this.keyIsPressed=!1,this.parseUnderflow(),this.mouseButtons(this.options.mouseButtons),this.options.keyToPress&&this.handleKeyPresses(this.options.keyToPress)}handleKeyPresses(e){const t=n=>{e.includes(n.code)&&(this.keyIsPressed=!0)},i=n=>{e.includes(n.code)&&(this.keyIsPressed=!1)};this.addWindowEventHandler("keyup",i),this.addWindowEventHandler("keydown",t)}addWindowEventHandler(e,t){window.addEventListener(e,t),this.windowEventHandlers.push({event:e,handler:t})}destroy(){this.windowEventHandlers.forEach(({event:e,handler:t})=>{window.removeEventListener(e,t)})}mouseButtons(e){!e||e==="all"?this.mouse=[!0,!0,!0]:this.mouse=[e.indexOf("left")!==-1,e.indexOf("middle")!==-1,e.indexOf("right")!==-1]}parseUnderflow(){const e=this.options.underflow.toLowerCase();e==="center"?(this.underflowX=0,this.underflowY=0):(e.includes("left")?this.underflowX=-1:e.includes("right")?this.underflowX=1:this.underflowX=0,e.includes("top")?this.underflowY=-1:e.includes("bottom")?this.underflowY=1:this.underflowY=0)}checkButtons(e){const t=e.data.pointerType==="mouse",i=this.parent.input.count();return!!((i===1||i>1&&!this.parent.plugins.get("pinch",!0))&&(!t||this.mouse[e.data.button]))}checkKeyPress(e){return!this.options.keyToPress||this.keyIsPressed||this.options.ignoreKeyToPressOnTouch&&e.data.pointerType==="touch"}down(e){return this.paused||!this.options.pressDrag?!1:this.checkButtons(e)&&this.checkKeyPress(e)?(this.last={x:e.data.global.x,y:e.data.global.y},this.current=e.data.pointerId,!0):(this.last=null,!1)}get active(){return this.moved}move(e){if(this.paused||!this.options.pressDrag)return!1;if(this.last&&this.current===e.data.pointerId){const t=e.data.global.x,i=e.data.global.y,n=this.parent.input.count();if(n===1||n>1&&!this.parent.plugins.get("pinch",!0)){const a=t-this.last.x,s=i-this.last.y;if(this.moved||this.xDirection&&this.parent.input.checkThreshold(a)||this.yDirection&&this.parent.input.checkThreshold(s)){const d={x:t,y:i};return this.xDirection&&(this.parent.x+=(d.x-this.last.x)*this.options.factor),this.yDirection&&(this.parent.y+=(d.y-this.last.y)*this.options.factor),this.last=d,this.moved||this.parent.emit("drag-start",{event:e,screen:new _(this.last.x,this.last.y),world:this.parent.toWorld(new _(this.last.x,this.last.y)),viewport:this.parent}),this.moved=!0,this.parent.emit("moved",{viewport:this.parent,type:"drag"}),!0}}else this.moved=!1}return!1}up(e){if(this.paused)return!1;const t=this.parent.input.touches;if(t.length===1){const i=t[0];return i.last&&(this.last={x:i.last.x,y:i.last.y},this.current=i.id),this.moved=!1,!0}else if(this.last&&this.moved){const i=new _(this.last.x,this.last.y);return this.parent.emit("drag-end",{event:e,screen:i,world:this.parent.toWorld(i),viewport:this.parent}),this.last=null,this.moved=!1,!0}return!1}wheel(e){if(this.paused)return!1;if(this.options.wheel){const t=this.parent.plugins.get("wheel",!0);if(!t||!t.options.wheelZoom&&!e.ctrlKey){const i=e.deltaMode?this.options.lineHeight:1,n=[e.deltaX,e.deltaY],[a,s]=this.options.wheelSwapAxes?n.reverse():n;return this.xDirection&&(this.parent.x+=a*i*this.options.wheelScroll*this.reverse),this.yDirection&&(this.parent.y+=s*i*this.options.wheelScroll*this.reverse),this.options.clampWheel&&this.clamp(),this.parent.emit("wheel-scroll",this.parent),this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.options.passiveWheel||e.preventDefault(),this.parent.options.stopPropagation&&e.stopPropagation(),!0}}return!1}resume(){this.last=null,this.paused=!1}clamp(){const e=this.parent.plugins.get("decelerate",!0)||{};if(this.options.clampWheel!=="y")if(this.parent.screenWorldWidth<this.parent.screenWidth)switch(this.underflowX){case-1:this.parent.x=0;break;case 1:this.parent.x=this.parent.screenWidth-this.parent.screenWorldWidth;break;default:this.parent.x=(this.parent.screenWidth-this.parent.screenWorldWidth)/2}else this.parent.left<0?(this.parent.x=0,e.x=0):this.parent.right>this.parent.worldWidth&&(this.parent.x=-this.parent.worldWidth*this.parent.scale.x+this.parent.screenWidth,e.x=0);if(this.options.clampWheel!=="x")if(this.parent.screenWorldHeight<this.parent.screenHeight)switch(this.underflowY){case-1:this.parent.y=0;break;case 1:this.parent.y=this.parent.screenHeight-this.parent.screenWorldHeight;break;default:this.parent.y=(this.parent.screenHeight-this.parent.screenWorldHeight)/2}else this.parent.top<0&&(this.parent.y=0,e.y=0),this.parent.bottom>this.parent.worldHeight&&(this.parent.y=-this.parent.worldHeight*this.parent.scale.y+this.parent.screenHeight,e.y=0)}}const pV={speed:0,acceleration:null,radius:null};class ac extends ie{constructor(e,t,i={}){super(e),this.target=t,this.options=Object.assign({},pV,i),this.velocity={x:0,y:0}}update(e){if(this.paused)return;const t=this.parent.center;let i=this.target.x,n=this.target.y;if(this.options.radius)if(Math.sqrt(Math.pow(this.target.y-t.y,2)+Math.pow(this.target.x-t.x,2))>this.options.radius){const h=Math.atan2(this.target.y-t.y,this.target.x-t.x);i=this.target.x-Math.cos(h)*this.options.radius,n=this.target.y-Math.sin(h)*this.options.radius}else return;const a=i-t.x,s=n-t.y;if(a||s)if(this.options.speed)if(this.options.acceleration){const d=Math.atan2(n-t.y,i-t.x),h=Math.sqrt(Math.pow(a,2)+Math.pow(s,2));if(h){const r=(Math.pow(this.velocity.x,2)+Math.pow(this.velocity.y,2))/(2*this.options.acceleration);h>r?this.velocity={x:Math.min(this.velocity.x+(this.options.acceleration*e,this.options.speed)),y:Math.min(this.velocity.y+(this.options.acceleration*e,this.options.speed))}:this.velocity={x:Math.max(this.velocity.x-this.options.acceleration*this.options.speed,0),y:Math.max(this.velocity.y-this.options.acceleration*this.options.speed,0)};const o=Math.cos(d)*this.velocity.x,c=Math.sin(d)*this.velocity.y,u=Math.abs(o)>Math.abs(a)?i:t.x+o,m=Math.abs(c)>Math.abs(s)?n:t.y+c;this.parent.moveCenter(u,m),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}}else{const d=Math.atan2(n-t.y,i-t.x),h=Math.cos(d)*this.options.speed,r=Math.sin(d)*this.options.speed,o=Math.abs(h)>Math.abs(a)?i:t.x+h,c=Math.abs(r)>Math.abs(s)?n:t.y+r;this.parent.moveCenter(o,c),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}else this.parent.moveCenter(i,n),this.parent.emit("moved",{viewport:this.parent,type:"follow"})}}const GV={radius:null,distance:null,top:null,bottom:null,left:null,right:null,speed:8,reverse:!1,noDecelerate:!1,linear:!1,allowButtons:!1};class sc extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},GV,t),this.reverse=this.options.reverse?1:-1,this.radiusSquared=typeof this.options.radius=="number"?Math.pow(this.options.radius,2):null,this.resize()}resize(){const e=this.options.distance;e!==null?(this.left=e,this.top=e,this.right=this.parent.screenWidth-e,this.bottom=this.parent.screenHeight-e):this.options.radius||(this.left=this.options.left,this.top=this.options.top,this.right=this.options.right===null?null:this.parent.screenWidth-this.options.right,this.bottom=this.options.bottom===null?null:this.parent.screenHeight-this.options.bottom)}down(){return this.paused||this.options.allowButtons||(this.horizontal=this.vertical=null),!1}move(e){if(this.paused||e.data.pointerType!=="mouse"&&e.data.identifier!==1||!this.options.allowButtons&&e.data.buttons!==0)return!1;const t=e.data.global.x,i=e.data.global.y;if(this.radiusSquared){const n=this.parent.toScreen(this.parent.center);if(Math.pow(n.x-t,2)+Math.pow(n.y-i,2)>=this.radiusSquared){const s=Math.atan2(n.y-i,n.x-t);this.options.linear?(this.horizontal=Math.round(Math.cos(s))*this.options.speed*this.reverse*(60/1e3),this.vertical=Math.round(Math.sin(s))*this.options.speed*this.reverse*(60/1e3)):(this.horizontal=Math.cos(s)*this.options.speed*this.reverse*(60/1e3),this.vertical=Math.sin(s)*this.options.speed*this.reverse*(60/1e3))}else this.horizontal&&this.decelerateHorizontal(),this.vertical&&this.decelerateVertical(),this.horizontal=this.vertical=0}else this.left!==null&&t<this.left?this.horizontal=Number(this.reverse)*this.options.speed*(60/1e3):this.right!==null&&t>this.right?this.horizontal=-1*this.reverse*this.options.speed*(60/1e3):(this.decelerateHorizontal(),this.horizontal=0),this.top!==null&&i<this.top?this.vertical=Number(this.reverse)*this.options.speed*(60/1e3):this.bottom!==null&&i>this.bottom?this.vertical=-1*this.reverse*this.options.speed*(60/1e3):(this.decelerateVertical(),this.vertical=0);return!1}decelerateHorizontal(){const e=this.parent.plugins.get("decelerate",!0);this.horizontal&&e&&!this.options.noDecelerate&&e.activate({x:this.horizontal*this.options.speed*this.reverse/(1e3/60)})}decelerateVertical(){const e=this.parent.plugins.get("decelerate",!0);this.vertical&&e&&!this.options.noDecelerate&&e.activate({y:this.vertical*this.options.speed*this.reverse/(1e3/60)})}up(){return this.paused||(this.horizontal&&this.decelerateHorizontal(),this.vertical&&this.decelerateVertical(),this.horizontal=this.vertical=null),!1}update(){if(!this.paused&&(this.horizontal||this.vertical)){const e=this.parent.center;this.horizontal&&(e.x+=this.horizontal*this.options.speed),this.vertical&&(e.y+=this.vertical*this.options.speed),this.parent.moveCenter(e),this.parent.emit("moved",{viewport:this.parent,type:"mouse-edges"})}}}const XV={noDrag:!1,percent:1,center:null,factor:1,axis:"all"};class sl extends ie{__init(){this.active=!1}__init2(){this.pinching=!1}__init3(){this.moved=!1}constructor(e,t={}){super(e),sl.prototype.__init.call(this),sl.prototype.__init2.call(this),sl.prototype.__init3.call(this),this.options=Object.assign({},XV,t)}down(){return this.parent.input.count()>=2?(this.active=!0,!0):!1}isAxisX(){return["all","x"].includes(this.options.axis)}isAxisY(){return["all","y"].includes(this.options.axis)}move(e){if(this.paused||!this.active)return!1;const t=e.data.global.x,i=e.data.global.y,n=this.parent.input.touches;if(n.length>=2){const a=n[0],s=n[1],d=a.last&&s.last?Math.sqrt(Math.pow(s.last.x-a.last.x,2)+Math.pow(s.last.y-a.last.y,2)):null;if(a.id===e.data.pointerId?a.last={x:t,y:i,data:e.data}:s.id===e.data.pointerId&&(s.last={x:t,y:i,data:e.data}),d){let h;const r={x:a.last.x+(s.last.x-a.last.x)/2,y:a.last.y+(s.last.y-a.last.y)/2};this.options.center||(h=this.parent.toLocal(r));let o=Math.sqrt(Math.pow(s.last.x-a.last.x,2)+Math.pow(s.last.y-a.last.y,2));o=o===0?o=1e-10:o;const c=(1-d/o)*this.options.percent*(this.isAxisX()?this.parent.scale.x:this.parent.scale.y);this.isAxisX()&&(this.parent.scale.x+=c),this.isAxisY()&&(this.parent.scale.y+=c),this.parent.emit("zoomed",{viewport:this.parent,type:"pinch",center:r});const u=this.parent.plugins.get("clamp-zoom",!0);if(u&&u.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const m=this.parent.toGlobal(h);this.parent.x+=(r.x-m.x)*this.options.factor,this.parent.y+=(r.y-m.y)*this.options.factor,this.parent.emit("moved",{viewport:this.parent,type:"pinch"})}!this.options.noDrag&&this.lastCenter&&(this.parent.x+=(r.x-this.lastCenter.x)*this.options.factor,this.parent.y+=(r.y-this.lastCenter.y)*this.options.factor,this.parent.emit("moved",{viewport:this.parent,type:"pinch"})),this.lastCenter=r,this.moved=!0}else this.pinching||(this.parent.emit("pinch-start",this.parent),this.pinching=!0);return!0}return!1}up(){return this.pinching&&this.parent.input.touches.length<=1?(this.active=!1,this.lastCenter=null,this.pinching=!1,this.moved=!1,this.parent.emit("pinch-end",this.parent),!0):!1}}const yV={topLeft:!1,friction:.8,time:1e3,ease:"easeInOutSine",interrupt:!0,removeOnComplete:!1,removeOnInterrupt:!1,forceStart:!1};class dc extends ie{constructor(e,t,i,n={}){super(e),this.options=Object.assign({},yV,n),this.ease=ia(n.ease,"easeInOutSine"),this.x=t,this.y=i,this.options.forceStart&&this.snapStart()}snapStart(){this.percent=0,this.snapping={time:0};const e=this.options.topLeft?this.parent.corner:this.parent.center;this.deltaX=this.x-e.x,this.deltaY=this.y-e.y,this.startX=e.x,this.startY=e.y,this.parent.emit("snap-start",this.parent)}wheel(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("snap"),!1}down(){return this.options.removeOnInterrupt?this.parent.plugins.remove("snap"):this.options.interrupt&&(this.snapping=null),!1}up(){if(this.parent.input.count()===0){const e=this.parent.plugins.get("decelerate",!0);e&&(e.x||e.y)&&(e.percentChangeX=e.percentChangeY=this.options.friction)}return!1}update(e){if(!this.paused&&!(this.options.interrupt&&this.parent.input.count()!==0))if(this.snapping){const t=this.snapping;t.time+=e;let i,n,a;const s=this.startX,d=this.startY,h=this.deltaX,r=this.deltaY;if(t.time>this.options.time)i=!0,n=s+h,a=d+r;else{const o=this.ease(t.time,0,1,this.options.time);n=s+h*o,a=d+r*o}this.options.topLeft?this.parent.moveCorner(n,a):this.parent.moveCenter(n,a),this.parent.emit("moved",{viewport:this.parent,type:"snap"}),i&&(this.options.removeOnComplete&&this.parent.plugins.remove("snap"),this.parent.emit("snap-end",this.parent),this.snapping=null)}else{const t=this.options.topLeft?this.parent.corner:this.parent.center;(t.x!==this.x||t.y!==this.y)&&this.snapStart()}}}const VV={width:0,height:0,time:1e3,ease:"easeInOutSine",center:null,interrupt:!0,removeOnComplete:!1,removeOnInterrupt:!1,forceStart:!1,noMove:!1};class hc extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},VV,t),this.ease=ia(this.options.ease),this.xIndependent=!1,this.yIndependent=!1,this.xScale=0,this.yScale=0,this.options.width>0&&(this.xScale=e.screenWidth/this.options.width,this.xIndependent=!0),this.options.height>0&&(this.yScale=e.screenHeight/this.options.height,this.yIndependent=!0),this.xScale=this.xIndependent?this.xScale:this.yScale,this.yScale=this.yIndependent?this.yScale:this.xScale,this.options.time===0?(e.container.scale.x=this.xScale,e.container.scale.y=this.yScale,this.options.removeOnComplete&&this.parent.plugins.remove("snap-zoom")):t.forceStart&&this.createSnapping()}createSnapping(){const e=this.parent.worldScreenWidth,t=this.parent.worldScreenHeight,i=this.parent.screenWidth/this.xScale,n=this.parent.screenHeight/this.yScale;this.snapping={time:0,startX:e,startY:t,deltaX:i-e,deltaY:n-t},this.parent.emit("snap-zoom-start",this.parent)}resize(){this.snapping=null,this.options.width>0&&(this.xScale=this.parent.screenWidth/this.options.width),this.options.height>0&&(this.yScale=this.parent.screenHeight/this.options.height),this.xScale=this.xIndependent?this.xScale:this.yScale,this.yScale=this.yIndependent?this.yScale:this.xScale}wheel(){return this.options.removeOnInterrupt&&this.parent.plugins.remove("snap-zoom"),!1}down(){return this.options.removeOnInterrupt?this.parent.plugins.remove("snap-zoom"):this.options.interrupt&&(this.snapping=null),!1}update(e){if(this.paused||this.options.interrupt&&this.parent.input.count()!==0)return;let t;if(!this.options.center&&!this.options.noMove&&(t=this.parent.center),!this.snapping)(this.parent.scale.x!==this.xScale||this.parent.scale.y!==this.yScale)&&this.createSnapping();else if(this.snapping){const i=this.snapping;if(i.time+=e,i.time>=this.options.time)this.parent.scale.set(this.xScale,this.yScale),this.options.removeOnComplete&&this.parent.plugins.remove("snap-zoom"),this.parent.emit("snap-zoom-end",this.parent),this.snapping=null;else{const a=this.snapping,s=this.ease(a.time,a.startX,a.deltaX,this.options.time),d=this.ease(a.time,a.startY,a.deltaY,this.options.time);this.parent.scale.x=this.parent.screenWidth/s,this.parent.scale.y=this.parent.screenHeight/d}const n=this.parent.plugins.get("clamp-zoom",!0);n&&n.clamp(),this.options.noMove||(this.options.center?this.parent.moveCenter(this.options.center):this.parent.moveCenter(t))}}resume(){this.snapping=null,super.resume()}}const RV={percent:.1,smooth:!1,interrupt:!0,reverse:!1,center:null,lineHeight:20,axis:"all",keyToPress:null,trackpadPinch:!1,wheelZoom:!0};class rc extends ie{constructor(e,t={}){super(e),this.options=Object.assign({},RV,t),this.keyIsPressed=!1,this.options.keyToPress&&this.handleKeyPresses(this.options.keyToPress)}handleKeyPresses(e){window.addEventListener("keydown",t=>{e.includes(t.code)&&(this.keyIsPressed=!0)}),window.addEventListener("keyup",t=>{e.includes(t.code)&&(this.keyIsPressed=!1)})}checkKeyPress(){return!this.options.keyToPress||this.keyIsPressed}down(){return this.options.interrupt&&(this.smoothing=null),!1}isAxisX(){return["all","x"].includes(this.options.axis)}isAxisY(){return["all","y"].includes(this.options.axis)}update(){if(this.smoothing){const e=this.smoothingCenter,t=this.smoothing;let i;this.options.center||(i=this.parent.toLocal(e)),this.isAxisX()&&(this.parent.scale.x+=t.x),this.isAxisY()&&(this.parent.scale.y+=t.y),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const n=this.parent.plugins.get("clamp-zoom",!0);if(n&&n.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const a=this.parent.toGlobal(i);this.parent.x+=e.x-a.x,this.parent.y+=e.y-a.y}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.smoothingCount++,this.smoothingCount>=this.options.smooth&&(this.smoothing=null)}}pinch(e){if(this.paused)return;const t=this.parent.input.getPointerPosition(e),i=-e.deltaY*(e.deltaMode?this.options.lineHeight:1)/200,n=Math.pow(2,(1+this.options.percent)*i);let a;this.options.center||(a=this.parent.toLocal(t)),this.isAxisX()&&(this.parent.scale.x*=n),this.isAxisY()&&(this.parent.scale.y*=n),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const s=this.parent.plugins.get("clamp-zoom",!0);if(s&&s.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const d=this.parent.toGlobal(a);this.parent.x+=t.x-d.x,this.parent.y+=t.y-d.y}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.emit("wheel",{wheel:{dx:e.deltaX,dy:e.deltaY,dz:e.deltaZ},event:e,viewport:this.parent})}wheel(e){if(this.paused||!this.checkKeyPress())return!1;if(e.ctrlKey&&this.options.trackpadPinch)this.pinch(e);else if(this.options.wheelZoom){const t=this.parent.input.getPointerPosition(e),n=(this.options.reverse?-1:1)*-e.deltaY*(e.deltaMode?this.options.lineHeight:1)/500,a=Math.pow(2,(1+this.options.percent)*n);if(this.options.smooth){const s={x:this.smoothing?this.smoothing.x*(this.options.smooth-this.smoothingCount):0,y:this.smoothing?this.smoothing.y*(this.options.smooth-this.smoothingCount):0};this.smoothing={x:((this.parent.scale.x+s.x)*a-this.parent.scale.x)/this.options.smooth,y:((this.parent.scale.y+s.y)*a-this.parent.scale.y)/this.options.smooth},this.smoothingCount=0,this.smoothingCenter=t}else{let s;this.options.center||(s=this.parent.toLocal(t)),this.isAxisX()&&(this.parent.scale.x*=a),this.isAxisY()&&(this.parent.scale.y*=a),this.parent.emit("zoomed",{viewport:this.parent,type:"wheel"});const d=this.parent.plugins.get("clamp-zoom",!0);if(d&&d.clamp(),this.options.center)this.parent.moveCenter(this.options.center);else{const h=this.parent.toGlobal(s);this.parent.x+=t.x-h.x,this.parent.y+=t.y-h.y}}this.parent.emit("moved",{viewport:this.parent,type:"wheel"}),this.parent.emit("wheel",{wheel:{dx:e.deltaX,dy:e.deltaY,dz:e.deltaZ},event:e,viewport:this.parent})}return!this.parent.options.passiveWheel}}class oc{constructor(e){this.viewport=e,this.touches=[],this.addListeners()}addListeners(){this.viewport.interactive=!0,this.viewport.forceHitArea||(this.viewport.hitArea=new j(0,0,this.viewport.worldWidth,this.viewport.worldHeight)),this.viewport.on("pointerdown",this.down,this),this.viewport.on("pointermove",this.move,this),this.viewport.on("pointerup",this.up,this),this.viewport.on("pointerupoutside",this.up,this),this.viewport.on("pointercancel",this.up,this),this.viewport.on("pointerout",this.up,this),this.wheelFunction=e=>this.handleWheel(e),this.viewport.options.divWheel.addEventListener("wheel",this.wheelFunction,{passive:this.viewport.options.passiveWheel}),this.isMouseDown=!1}destroy(){this.viewport.options.divWheel.removeEventListener("wheel",this.wheelFunction)}down(e){if(this.viewport.pause||!this.viewport.worldVisible)return;if(e.data.pointerType==="mouse"?this.isMouseDown=!0:this.get(e.data.pointerId)||this.touches.push({id:e.data.pointerId,last:null}),this.count()===1){this.last=e.data.global.clone();const i=this.viewport.plugins.get("decelerate",!0),n=this.viewport.plugins.get("bounce",!0);(!i||!i.isActive())&&(!n||!n.isActive())?this.clickedAvailable=!0:this.clickedAvailable=!1}else this.clickedAvailable=!1;this.viewport.plugins.down(e)&&this.viewport.options.stopPropagation&&e.stopPropagation()}clear(){this.isMouseDown=!1,this.touches=[],this.last=null}checkThreshold(e){return Math.abs(e)>=this.viewport.threshold}move(e){if(this.viewport.pause||!this.viewport.worldVisible)return;const t=this.viewport.plugins.move(e);if(this.clickedAvailable&&this.last){const i=e.data.global.x-this.last.x,n=e.data.global.y-this.last.y;(this.checkThreshold(i)||this.checkThreshold(n))&&(this.clickedAvailable=!1)}t&&this.viewport.options.stopPropagation&&e.stopPropagation()}up(e){if(this.viewport.pause||!this.viewport.worldVisible)return;e.data.pointerType==="mouse"&&(this.isMouseDown=!1),e.data.pointerType!=="mouse"&&this.remove(e.data.pointerId);const t=this.viewport.plugins.up(e);this.clickedAvailable&&this.count()===0&&this.last&&(this.viewport.emit("clicked",{event:e,screen:this.last,world:this.viewport.toWorld(this.last),viewport:this}),this.clickedAvailable=!1),t&&this.viewport.options.stopPropagation&&e.stopPropagation()}getPointerPosition(e){const t=new _;if(this.viewport.options.interaction)this.viewport.options.interaction.mapPositionToPoint(t,e.clientX,e.clientY);else if(this.viewport.options.useDivWheelForInputManager&&this.viewport.options.divWheel){const i=this.viewport.options.divWheel.getBoundingClientRect();t.x=e.clientX-i.left,t.y=e.clientY-i.top}else t.x=e.clientX,t.y=e.clientY;return t}handleWheel(e){if(this.viewport.pause||!this.viewport.worldVisible||this.viewport.options.interaction&&this.viewport.options.interaction.interactionDOMElement!==e.target)return;const t=this.viewport.toLocal(this.getPointerPosition(e));this.viewport.left<=t.x&&t.x<=this.viewport.right&&this.viewport.top<=t.y&&t.y<=this.viewport.bottom&&this.viewport.plugins.wheel(e)&&!this.viewport.options.passiveWheel&&e.preventDefault()}pause(){this.touches=[],this.isMouseDown=!1}get(e){for(const t of this.touches)if(t.id===e)return t;return null}remove(e){for(let t=0;t<this.touches.length;t++)if(this.touches[t].id===e){this.touches.splice(t,1);return}}count(){return(this.isMouseDown?1:0)+this.touches.length}}function aa(l){let e,t=l[0],i=1;for(;i<l.length;){const n=l[i],a=l[i+1];if(i+=2,(n==="optionalAccess"||n==="optionalCall")&&t==null)return;n==="access"||n==="optionalAccess"?(e=t,t=a(t)):(n==="call"||n==="optionalCall")&&(t=a((...s)=>t.call(e,...s)),e=void 0)}return t}const jl=["drag","pinch","wheel","follow","mouse-edges","decelerate","animate","bounce","snap-zoom","clamp-zoom","snap","clamp"];class cc{constructor(e){this.viewport=e,this.list=[],this.plugins={}}add(e,t,i=jl.length){const n=this.plugins[e];n&&n.destroy(),this.plugins[e]=t;const a=jl.indexOf(e);a!==-1&&jl.splice(a,1),jl.splice(i,0,e),this.sort()}get(e,t){return t&&aa([this,"access",i=>i.plugins,"access",i=>i[e],"optionalAccess",i=>i.paused])?null:this.plugins[e]}update(e){for(const t of this.list)t.update(e)}resize(){for(const e of this.list)e.resize()}reset(){for(const e of this.list)e.reset()}removeAll(){this.list.forEach(e=>{e.destroy()}),this.plugins={},this.sort()}remove(e){this.plugins[e]&&(aa([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.destroy,"call",t=>t()]),delete this.plugins[e],this.viewport.emit(`${e}-remove`),this.sort())}pause(e){aa([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.pause,"call",t=>t()])}resume(e){aa([this,"access",t=>t.plugins,"access",t=>t[e],"optionalAccess",t=>t.resume,"call",t=>t()])}sort(){this.list=[];for(const e of jl)this.plugins[e]&&this.list.push(this.plugins[e])}down(e){let t=!1;for(const i of this.list)i.down(e)&&(t=!0);return t}move(e){let t=!1;for(const i of this.viewport.plugins.list)i.move(e)&&(t=!0);return t}up(e){let t=!1;for(const i of this.list)i.up(e)&&(t=!0);return t}wheel(e){let t=!1;for(const i of this.list)i.wheel(e)&&(t=!0);return t}}const WV={screenWidth:window.innerWidth,screenHeight:window.innerHeight,worldWidth:null,worldHeight:null,threshold:5,passiveWheel:!0,stopPropagation:!1,forceHitArea:null,noTicker:!1,interaction:null,disableOnContextMenu:!1,ticker:Jt.shared};class Rd extends xt{__init(){this._disableOnContextMenu=e=>e.preventDefault()}constructor(e={}){super(),Rd.prototype.__init.call(this),this.options=Object.assign({},{divWheel:document.body},WV,e),this.screenWidth=this.options.screenWidth,this.screenHeight=this.options.screenHeight,this._worldWidth=this.options.worldWidth,this._worldHeight=this.options.worldHeight,this.forceHitArea=this.options.forceHitArea,this.threshold=this.options.threshold,this.options.divWheel=this.options.divWheel||document.body,this.options.disableOnContextMenu&&this.options.divWheel.addEventListener("contextmenu",this._disableOnContextMenu),this.options.noTicker||(this.tickerFunction=()=>this.update(this.options.ticker.elapsedMS),this.options.ticker.add(this.tickerFunction)),this.input=new oc(this),this.plugins=new cc(this)}destroy(e){!this.options.noTicker&&this.tickerFunction&&this.options.ticker.remove(this.tickerFunction),this.options.disableOnContextMenu&&this.options.divWheel.removeEventListener("contextmenu",this._disableOnContextMenu),this.input.destroy(),super.destroy(e)}update(e){this.pause||(this.plugins.update(e),this.lastViewport&&(this.lastViewport.x!==this.x||this.lastViewport.y!==this.y?this.moving=!0:this.moving&&(this.emit("moved-end",this),this.moving=!1),this.lastViewport.scaleX!==this.scale.x||this.lastViewport.scaleY!==this.scale.y?this.zooming=!0:this.zooming&&(this.emit("zoomed-end",this),this.zooming=!1)),this.forceHitArea||(this._hitAreaDefault=new j(this.left,this.top,this.worldScreenWidth,this.worldScreenHeight),this.hitArea=this._hitAreaDefault),this._dirty=this._dirty||!this.lastViewport||this.lastViewport.x!==this.x||this.lastViewport.y!==this.y||this.lastViewport.scaleX!==this.scale.x||this.lastViewport.scaleY!==this.scale.y,this.lastViewport={x:this.x,y:this.y,scaleX:this.scale.x,scaleY:this.scale.y},this.emit("frame-end",this))}resize(e=window.innerWidth,t=window.innerHeight,i,n){this.screenWidth=e,this.screenHeight=t,typeof i<"u"&&(this._worldWidth=i),typeof n<"u"&&(this._worldHeight=n),this.plugins.resize(),this.dirty=!0}get worldWidth(){return this._worldWidth?this._worldWidth:this.width/this.scale.x}set worldWidth(e){this._worldWidth=e,this.plugins.resize()}get worldHeight(){return this._worldHeight?this._worldHeight:this.height/this.scale.y}set worldHeight(e){this._worldHeight=e,this.plugins.resize()}getVisibleBounds(){return new j(this.left,this.top,this.worldScreenWidth,this.worldScreenHeight)}toWorld(e,t){return arguments.length===2?this.toLocal(new _(e,t)):this.toLocal(e)}toScreen(e,t){return arguments.length===2?this.toGlobal(new _(e,t)):this.toGlobal(e)}get worldScreenWidth(){return this.screenWidth/this.scale.x}get worldScreenHeight(){return this.screenHeight/this.scale.y}get screenWorldWidth(){return this.worldWidth*this.scale.x}get screenWorldHeight(){return this.worldHeight*this.scale.y}get center(){return new _(this.worldScreenWidth/2-this.x/this.scale.x,this.worldScreenHeight/2-this.y/this.scale.y)}set center(e){this.moveCenter(e)}moveCenter(...e){let t,i;typeof e[0]=="number"?(t=e[0],i=e[1]):(t=e[0].x,i=e[0].y);const n=(this.worldScreenWidth/2-t)*this.scale.x,a=(this.worldScreenHeight/2-i)*this.scale.y;return(this.x!==n||this.y!==a)&&(this.position.set(n,a),this.plugins.reset(),this.dirty=!0),this}get corner(){return new _(-this.x/this.scale.x,-this.y/this.scale.y)}set corner(e){this.moveCorner(e)}moveCorner(...e){let t,i;return e.length===1?(t=-e[0].x*this.scale.x,i=-e[0].y*this.scale.y):(t=-e[0]*this.scale.x,i=-e[1]*this.scale.y),(t!==this.x||i!==this.y)&&(this.position.set(t,i),this.plugins.reset(),this.dirty=!0),this}get screenWidthInWorldPixels(){return this.screenWidth/this.scale.x}get screenHeightInWorldPixels(){return this.screenHeight/this.scale.y}findFitWidth(e){return this.screenWidth/e}findFitHeight(e){return this.screenHeight/e}findFit(e,t){const i=this.screenWidth/e,n=this.screenHeight/t;return Math.min(i,n)}findCover(e,t){const i=this.screenWidth/e,n=this.screenHeight/t;return Math.max(i,n)}fitWidth(e=this.worldWidth,t,i=!0,n){let a;t&&(a=this.center),this.scale.x=this.screenWidth/e,i&&(this.scale.y=this.scale.x);const s=this.plugins.get("clamp-zoom",!0);return!n&&s&&s.clamp(),t&&a&&this.moveCenter(a),this}fitHeight(e=this.worldHeight,t,i=!0,n){let a;t&&(a=this.center),this.scale.y=this.screenHeight/e,i&&(this.scale.x=this.scale.y);const s=this.plugins.get("clamp-zoom",!0);return!n&&s&&s.clamp(),t&&a&&this.moveCenter(a),this}fitWorld(e){let t;e&&(t=this.center),this.scale.x=this.screenWidth/this.worldWidth,this.scale.y=this.screenHeight/this.worldHeight,this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y;const i=this.plugins.get("clamp-zoom",!0);return i&&i.clamp(),e&&t&&this.moveCenter(t),this}fit(e,t=this.worldWidth,i=this.worldHeight){let n;e&&(n=this.center),this.scale.x=this.screenWidth/t,this.scale.y=this.screenHeight/i,this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y;const a=this.plugins.get("clamp-zoom",!0);return a&&a.clamp(),e&&n&&this.moveCenter(n),this}setZoom(e,t){let i;t&&(i=this.center),this.scale.set(e);const n=this.plugins.get("clamp-zoom",!0);return n&&n.clamp(),t&&i&&this.moveCenter(i),this}zoomPercent(e,t){return this.setZoom(this.scale.x+this.scale.x*e,t)}zoom(e,t){return this.fitWidth(e+this.worldScreenWidth,t),this}get scaled(){return this.scale.x}set scaled(e){this.setZoom(e,!0)}snapZoom(e){return this.plugins.add("snap-zoom",new hc(this,e)),this}OOB(){return{left:this.left<0,right:this.right>this.worldWidth,top:this.top<0,bottom:this.bottom>this.worldHeight,cornerPoint:new _(this.worldWidth*this.scale.x-this.screenWidth,this.worldHeight*this.scale.y-this.screenHeight)}}get right(){return-this.x/this.scale.x+this.worldScreenWidth}set right(e){this.x=-e*this.scale.x+this.screenWidth,this.plugins.reset()}get left(){return-this.x/this.scale.x}set left(e){this.x=-e*this.scale.x,this.plugins.reset()}get top(){return-this.y/this.scale.y}set top(e){this.y=-e*this.scale.y,this.plugins.reset()}get bottom(){return-this.y/this.scale.y+this.worldScreenHeight}set bottom(e){this.y=-e*this.scale.y+this.screenHeight,this.plugins.reset()}get dirty(){return!!this._dirty}set dirty(e){this._dirty=e}get forceHitArea(){return this._forceHitArea}set forceHitArea(e){e?(this._forceHitArea=e,this.hitArea=e):(this._forceHitArea=null,this.hitArea=new j(0,0,this.worldWidth,this.worldHeight))}drag(e){return this.plugins.add("drag",new na(this,e)),this}clamp(e){return this.plugins.add("clamp",new ic(this,e)),this}decelerate(e){return this.plugins.add("decelerate",new nc(this,e)),this}bounce(e){return this.plugins.add("bounce",new ec(this,e)),this}pinch(e){return this.plugins.add("pinch",new sl(this,e)),this}snap(e,t,i){return this.plugins.add("snap",new dc(this,e,t,i)),this}follow(e,t){return this.plugins.add("follow",new ac(this,e,t)),this}wheel(e){return this.plugins.add("wheel",new rc(this,e)),this}animate(e){return this.plugins.add("animate",new He(this,e)),this}clampZoom(e){return this.plugins.add("clamp-zoom",new lc(this,e)),this}mouseEdges(e){return this.plugins.add("mouse-edges",new sc(this,e)),this}get pause(){return!!this._pause}set pause(e){this._pause=e,this.lastViewport=null,this.moving=!1,this.zooming=!1,e&&this.input.pause()}ensureVisible(e,t,i,n,a){a&&(i>this.worldScreenWidth||n>this.worldScreenHeight)&&(this.fit(!0,i,n),this.emit("zoomed",{viewport:this,type:"ensureVisible"}));let s=!1;e<this.left?(this.left=e,s=!0):e+i>this.right&&(this.right=e+i,s=!0),t<this.top?(this.top=t,s=!0):t+n>this.bottom&&(this.bottom=t+n,s=!0),s&&this.emit("moved",{viewport:this,type:"ensureVisible"})}}const fV=Object.freeze(Object.defineProperty({__proto__:null,Animate:He,Bounce:ec,Clamp:ic,ClampZoom:lc,Decelerate:nc,Drag:na,Follow:ac,InputManager:oc,MouseEdges:sc,Pinch:sl,Plugin:ie,PluginManager:cc,Snap:dc,SnapZoom:hc,Viewport:Rd,Wheel:rc},Symbol.toStringTag,{value:"Module"}));zt.FlowRunTimeline=sV,zt.formatDateFnsDefault=Id,zt.nodeThemeFnDefault=Yd,Object.defineProperty(zt,Symbol.toStringTag,{value:"Module"})});
1058
1062
  //# sourceMappingURL=graphs.umd.js.map