PageSourceSearch

https://variantimpact.vercel.app/_next/static/chunks/636.f89e1489b4a014b1.js

js variantimpact.vercel.app collected 2026-10-03 07:59:18 UTC 1,807,310 bytes, 7,319 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{71211:function(e,t,r){r.d(t,{V:function(){return h}});var a,n=r(85409),i=r(23833),o=r(38964),s=r(43975);class l{get source(){return this._source}get target(){return this._target}apply(e,t=0,r){if((!this.inTransition||t>0)&&h.copySnapshot(this._source,this.camera.state),this.inTransition||h.copySnapshot(this._target,this.camera.state),h.copySnapshot(this._target,e),this._target.radius>this._target.radiusMax&&(this._target.radius=this._target.radiusMax),this._target.radius<.01&&(this._target.radius=.01),this._target.radiusMax<.01&&(this._target.radiusMax=.01),!this.inTransition&&t<=0||void 0!==e.mode&&e.mode!==this.camera.state.mode){this.finish(this._target);return}this.inTransition=!0,this.func=r||l.defaultTransition,(!this.inTransition||t>0)&&(this.start=this.t,this.durationMs=t)}tick(e){this.t=e,this.update()}finish(e){h.copySnapshot(this.camera.state,e),this.inTransition=!1}update(){if(!this.inTransition)return;let e=Math.min((this.t-this.start)/this.durationMs,1);if(1===e){this.finish(this._target);return}this.func(this._current,e,this._source,this._target),h.copySnapshot(this.camera.state,this._current)}constructor(e){this.camera=e,this.t=0,this.func=l.defaultTransition,this.start=0,this.inTransition=!1,this.durationMs=0,this._source=h.createDefaultSnapshot(),this._target=h.createDefaultSnapshot(),this._current=h.createDefaultSnapshot()}}!function(e){let t=o.D.identity(),r=o.D.identity(),a=(0,s.A)(),n=(0,s.A)();e.defaultTransition=function(e,l,u,c){h.copySnapshot(e,c),o.D.slerp(t,o.D.Identity,o.D.rotationTo(t,u.up,c.up),l),s.A.transformQuat(e.up,u.up,t),s.A.lerp(e.target,u.target,c.target,l);let d=s.A.distance(u.target,u.position),p=s.A.distance(c.target,c.position),f=(0,i.t7)(d,p,l);s.A.sub(a,u.position,u.target),s.A.normalize(a,a),s.A.sub(n,c.position,c.target),s.A.normalize(n,n),o.D.rotationTo(r,a,n),o.D.slerp(r,o.D.Identity,r,l),s.A.transformQuat(a,a,r),s.A.scale(a,a,f),s.A.add(e.position,e.target,a),e.radius=(0,i.t7)(u.radius,c.radius,l),e.radiusMax=(0,i.t7)(u.radiusMax,c.radiusMax,l),e.fov=(0,i.t7)(u.fov,c.fov,l),e.fog=(0,i.t7)(u.fog,c.fog,l)}}(l||(l={}));var u=r(86439),c=r(97667),d=r(38675),p=r(22934),f=r(22177);let m=(0,p.T)();class h{get position(){return this.state.position}set position(e){s.A.copy(this.state.position,e)}get up(){return this.state.up}set up(e){s.A.copy(this.state.up,e)}get target(){return this.state.target}set target(e){s.A.copy(this.state.target,e)}update(){let e=this.state;if(0===e.radiusMax)return!1;let t=s.A.distance(e.position,e.target),r=this.minTargetDistance/this.scale;t<r&&(s.A.sub(this.deltaDirection,e.target,e.position),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,r),s.A.sub(e.position,e.target,this.deltaDirection));let a=2*Math.tan(e.fov/2)*s.A.distance(e.position,e.target)*this.scale;switch(this.zoom=this.viewport.height/a,function(e){let{forceFull:t,scale:r}=e,{radius:a,radiusMax:n,mode:i,fog:o,clipFar:l,minNear:u,minFar:c}=e.state;n*=r,c*=r,u*=r,a*=r,t&&(a=n);let d=.01*r;a<d&&(a=d);let p=Math.max(l?a:n,c);s.A.scale(b,e.state.target,r),s.A.scale(g,e.state.position,r);let f=s.A.distance(g,b),m=t?.01:f-a,h=f+p;t&&(u=m),(m=Math.max(Math.min(n,u),m))===(h=Math.max(u,h))&&(h=m+.01*r);let y=h;e.near=m,e.far=h,e.fogNear=f- -(50-o)/50*p,e.fogFar=y}(this),this.state.mode){case"orthographic":!function(e){let{viewport:t,zoom:r,near:a,far:n,viewOffset:i}=e,o=-t.width/2,s=t.width/2,l=t.height/2,u=-t.height/2,c=(s-o)/(2*r),p=(l-u)/(2*r),f=(s+o)/2,m=(l+u)/2,h=f-c,g=f+c,b=m+p,x=m-p;if(i.enabled){let e=r/(i.width/i.fullWidth),t=r/(i.height/i.fullHeight),a=(s-o)/i.width,n=(l-u)/i.height;h+=i.offsetX/e*a,g=h+i.width/e*a,b-=i.offsetY/t*n,x=b-i.height/t*n}d.y.ortho(e.projection,h,g,b,x,a,n),y(e)}(this);break;case"perspective":!function(e){let t=e.viewport.width/e.viewport.height,{near:r,far:a,viewOffset:n}=e,i=r*Math.tan(.5*e.state.fov),o=2*i,s=t*o,l=-.5*s;n.enabled&&(l+=n.offsetX*s/n.fullWidth,i-=n.offsetY*o/n.fullHeight,s*=n.width/n.fullWidth,o*=n.height/n.fullHeight),d.y.perspective(e.projection,l,l+s,i,i-o,r,a),y(e)}(this);break;default:(0,c.UT)(this.state.mode)}let n=!d.y.areEqual(this.projection,this.prevProjection,f.I)||!d.y.areEqual(this.view,this.prevView,f.I);if(n){if(d.y.mul(this.projectionView,this.projection,this.view),!d.y.tryInvert(this.inverseProjectionView,this.projectionView))return d.y.copy(this.view,this.prevView),d.y.copy(this.projection,this.prevProjection),d.y.mul(this.projectionView,this.projection,this.view),!1;d.y.copy(this.prevView,this.view),d.y.copy(this.prevProjection,this.projection)}return n}setState(e,t){this.transition.apply(e,t),this.stateChanged.next(e)}getSnapshot(){return h.copySnapshot(h.createDefaultSnapshot(),this.state)}getTargetDistance(e){return Math.max(this.minTargetDistance/this.scale,h.targetDistance(e,this.state.mode,this.state.fov,this.viewport.width,this.viewport.height))}getFocus(e,t,r,a,n){var i,o;let l=Math.max(t,.01),u=this.getTargetDistance(l);s.A.sub(this.deltaDirection,null!==(i=null==n?void 0:n.target)&&void 0!==i?i:this.target,null!==(o=null==n?void 0:n.position)&&void 0!==o?o:this.position),a&&s.A.match
1Direction(this.deltaDirection,a,this.deltaDirection),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,u),s.A.sub(this.newPosition,e,this.deltaDirection);let c=h.copySnapshot(h.createDefaultSnapshot(),this.state);return c.target=s.A.clone(e),c.radius=l,c.position=s.A.clone(this.newPosition),r&&s.A.matchDirection(c.up,r,c.up),c}getCenter(e,t){s.A.sub(this.deltaDirection,this.target,this.position),s.A.sub(this.newPosition,e,this.deltaDirection);let r=h.copySnapshot(h.createDefaultSnapshot(),this.state);return r.target=s.A.clone(e),r.position=s.A.clone(this.newPosition),t&&(r.radius=Math.max(t,.01)),r}getInvariantFocus(e,t,r,a){let n=Math.max(t,.01),i=this.getTargetDistance(n);s.A.copy(this.deltaDirection,a),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,i),s.A.sub(this.newPosition,e,this.deltaDirection);let o=h.copySnapshot(h.createDefaultSnapshot(),this.state);return o.target=s.A.clone(e),o.radius=n,o.position=s.A.clone(this.newPosition),s.A.copy(o.up,r),o}focus(e,t,r,a,n){t>0&&this.setState(this.getFocus(e,t,a,n),r)}center(e,t){this.setState(this.getCenter(e),t)}project(e,t){return(0,n.zt)(e,t,this.viewport,this.projectionView)}unproject(e,t){return(0,n.$j)(e,t,this.viewport,this.inverseProjectionView)}getPixelSize(e){return this.project(m,e),2/m[3]/(this.viewport.width*Math.abs(this.projection[0]))}getRay(e,t,r){return"orthographic"===this.state.mode?(s.A.set(e.origin,t,r,0),this.unproject(e.origin,e.origin),s.A.normalize(e.direction,s.A.sub(e.direction,this.target,this.position)),s.A.scaleAndAdd(e.origin,e.origin,e.direction,-this.near)):(s.A.copy(e.origin,this.state.position),s.A.scale(e.origin,e.origin,this.scale),s.A.set(e.direction,t,r,.5),this.unproject(e.direction,e.direction),s.A.normalize(e.direction,s.A.sub(e.direction,e.direction,e.origin))),e}constructor(e,t=n.l_.create(0,0,128,128)){this.view=d.y.identity(),this.projection=d.y.identity(),this.projectionView=d.y.identity(),this.inverseProjectionView=d.y.identity(),this.headRotation=d.y.zero(),this.viewEye=d.y.zero(),this.isAsymmetricProjection=!1,this.state=h.createDefaultSnapshot(),this.viewOffset=h.ViewOffset(),this.disabled=!1,this.near=1,this.far=1e4,this.fogNear=5e3,this.fogFar=1e4,this.zoom=1,this.forceFull=!1,this.scale=1,this.minTargetDistance=0,this.transition=new l(this),this.stateChanged=new u.X(this.state),this.prevProjection=d.y.identity(),this.prevView=d.y.identity(),this.deltaDirection=(0,s.A)(),this.newPosition=(0,s.A)(),this.viewport=t,h.copySnapshot(this.state,e)}}(a=h||(h={})).ViewOffset=function(){return{enabled:!1,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}},a.setViewOffset=function(e,t,r,a,n,i,o){e.fullWidth=t,e.fullHeight=r,e.offsetX=a,e.offsetY=n,e.width=i,e.height=o},a.copyViewOffset=function(e,t){e.enabled=t.enabled,e.fullWidth=t.fullWidth,e.fullHeight=t.fullHeight,e.offsetX=t.offsetX,e.offsetY=t.offsetY,e.width=t.width,e.height=t.height},a.targetDistance=function(e,t,r,a,n){let i=Math.max(e,.01),o=n<a?1:a/n;return"orthographic"===t?Math.abs(i/o/Math.tan(r/2)):Math.abs(i/o/Math.sin(r/2))},a.createDefaultSnapshot=function(){return{mode:"perspective",fov:Math.PI/4,position:s.A.create(0,0,100),up:s.A.create(0,1,0),target:s.A.create(0,0,0),radius:0,radiusMax:10,fog:50,clipFar:!0,minNear:5,minFar:0}},a.copySnapshot=function(e,t){return t&&(void 0!==t.mode&&(e.mode=t.mode),void 0!==t.fov&&(e.fov=t.fov),void 0!==t.position&&s.A.copy(e.position,t.position),void 0!==t.up&&s.A.copy(e.up,t.up),void 0!==t.target&&s.A.copy(e.target,t.target),void 0!==t.radius&&(e.radius=t.radius),void 0!==t.radiusMax&&(e.radiusMax=t.radiusMax),void 0!==t.fog&&(e.fog=t.fog),void 0!==t.clipFar&&(e.clipFar=t.clipFar),void 0!==t.minNear&&(e.minNear=t.minNear),void 0!==t.minFar&&(e.minFar=t.minFar)),e},a.areSnapshotsEqual=function(e,t){return e.mode===t.mode&&e.fov===t.fov&&e.radius===t.radius&&e.radiusMax===t.radiusMax&&e.fog===t.fog&&e.clipFar===t.clipFar&&e.minNear===t.minNear&&e.minFar===t.minFar&&s.A.exactEquals(e.position,t.position)&&s.A.exactEquals(e.up,t.up)&&s.A.exactEquals(e.target,t.target)};let g=(0,s.A)(),b=(0,s.A)();function y(e){1===e.scale?d.y.lookAt(e.view,e.state.position,e.state.target,e.state.up):(s.A.scale(g,e.state.position,e.scale),s.A.scale(b,e.state.target,e.scale),d.y.lookAt(e.view,g,b,e.state.up))}},85409:function(e,t,r){r.d(t,{$j:function(){return u},l_:function(){return o},zt:function(){return l}});var a,n=r(43975),i=r(22934);function o(){return o.zero()}(a=o||(o={})).zero=function(){return{x:0,y:0,width:0,height:0}},a.create=function(e,t,r,a){return{x:e,y:t,width:r,height:a}},a.clone=function(e){return{...e}},a.copy=function(e,t){return Object.assign(e,t)},a.set=function(e,t,r,a,n){return e.x=t,e.y=r,e.width=a,e.height=n,e},a.toVec4=function(e,t){return e[0]=t.x,e[1]=t.y,e[2]=t.width,e[3]=t.height,e},a.equals=function(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};let s=(0,i.T)();function l(e,t,r,a){let{x:n,y:o,width:l,height:u}=r;i.T.set(s,t[0],t[1],t[2],1),i.T.transformMat4(s,s,a);let c=s[3];return 0!==c&&(s[0]/=c,s[1]/=c,s[2]/=c),e[0]=(s[0]+1)*l*.5+n,e[1]=(s[1]+1)*u*.5+o,e[2]=(s[2]+1)
1*.5,e[3]=0===c?0:1/c,e}function u(e,t,r,a){let{x:i,y:o,width:s,height:l}=r,u=t[0]-i,c=t[1]-o,d=t[2];return e[0]=2*u/s-1,e[1]=2*c/l-1,e[2]=2*d-1,n.A.transformMat4(e,e,a)}},2622:function(e,t,r){r.d(t,{ag:function(){return p},QX:function(){return d},h4:function(){return rd},Ug:function(){return rp}});var a,n,i,o,s,l,u,c,d,p,f=r(89987),m=r(86439),h=r(22569),g=r(82820),b=r(58400),y=r(87144),x=r(58684),S=r(12489),T=r(85409),C=r(14086),O=r(58463),I=r(64770);let A=x.b4,w=x.N0,D=I.K.Trigger,E=I.K.TriggerKey,M={dragRotate:(0,I.K)([D(A.Flag.Primary,w.create()),D(A.Flag.Trigger)],"Rotate","Drag using ${triggers}"),dragRotateZ:(0,I.K)([D(A.Flag.Primary,w.create({shift:!0,control:!0}))],"Rotate around z-axis (roll)","Drag using ${triggers}"),dragPan:(0,I.K)([D(A.Flag.Secondary,w.create()),D(A.Flag.Primary,w.create({control:!0}))],"Pan","Drag using ${triggers}"),dragZoom:I.K.Empty,dragFocus:(0,I.K)([D(A.Flag.Forth,w.create())],"Focus","Drag using ${triggers}"),dragFocusZoom:(0,I.K)([D(A.Flag.Auxilary,w.create())],"Focus and zoom","Drag using ${triggers}"),scrollZoom:(0,I.K)([D(A.Flag.Auxilary,w.create())],"Zoom","Scroll using ${triggers}"),scrollFocus:(0,I.K)([D(A.Flag.Auxilary,w.create({shift:!0}))],"Clip","Scroll using ${triggers}"),scrollFocusZoom:I.K.Empty,keyMoveForward:(0,I.K)([E("KeyW"),E("GamepadUp")],"Move forward","Press ${triggers}"),keyMoveBack:(0,I.K)([E("KeyS"),E("GamepadDown")],"Move back","Press ${triggers}"),keyMoveLeft:(0,I.K)([E("KeyA")],"Move left","Press ${triggers}"),keyMoveRight:(0,I.K)([E("KeyD")],"Move right","Press ${triggers}"),keyMoveUp:(0,I.K)([E("KeyR")],"Move up","Press ${triggers}"),keyMoveDown:(0,I.K)([E("KeyF")],"Move down","Press ${triggers}"),keyRollLeft:(0,I.K)([E("KeyQ")],"Roll left","Press ${triggers}"),keyRollRight:(0,I.K)([E("KeyE")],"Roll right","Press ${triggers}"),keyPitchUp:(0,I.K)([E("ArrowUp",w.create({shift:!0}))],"Pitch up","Press ${triggers}"),keyPitchDown:(0,I.K)([E("ArrowDown",w.create({shift:!0}))],"Pitch down","Press ${triggers}"),keyYawLeft:(0,I.K)([E("ArrowLeft",w.create({shift:!0}))],"Yaw left","Press ${triggers}"),keyYawRight:(0,I.K)([E("ArrowRight",w.create({shift:!0}))],"Yaw right","Press ${triggers}"),boostMove:(0,I.K)([E("ShiftLeft")],"Boost move","Press ${triggers}"),enablePointerLock:(0,I.K)([E("Space",w.create({control:!0}))],"Enable pointer lock","Press ${triggers}")},P={rotateSpeed:C.e.Numeric(5,{min:1,max:10,step:1}),zoomSpeed:C.e.Numeric(7,{min:1,max:15,step:1}),panSpeed:C.e.Numeric(1,{min:.1,max:5,step:.1}),moveSpeed:C.e.Numeric(.75,{min:.1,max:3,step:.1}),boostMoveFactor:C.e.Numeric(5,{min:.1,max:10,step:.1}),flyMode:C.e.Boolean(!1),animate:C.e.MappedStatic("off",{off:C.e.EmptyGroup(),spin:C.e.Group({speed:C.e.Numeric(.1,{min:-2,max:2,step:.01},{description:"Number of rotations per second"}),axis:C.e.Vec3(y.AO.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Spin the 3D scene around an axis in camera space"}),rock:C.e.Group({speed:C.e.Numeric(.3,{min:-5,max:5,step:.1},{description:"Number of oscilations per second"}),angle:C.e.Numeric(10,{min:0,max:90,step:1},{description:"How many degrees to rotate in each direction."}),axis:C.e.Vec3(y.AO.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Rock the 3D scene around an axis in camera space"})}),staticMoving:C.e.Boolean(!0,{isHidden:!0}),dynamicDampingFactor:C.e.Numeric(.2,{},{isHidden:!0}),minDistance:C.e.Numeric(.01,{},{isHidden:!0}),maxDistance:C.e.Numeric(1e150,{},{isHidden:!0}),gestureScaleFactor:C.e.Numeric(1,{},{isHidden:!0}),maxWheelDelta:C.e.Numeric(.02,{},{isHidden:!0}),autoAdjustMinMaxDistance:C.e.MappedStatic("on",{off:C.e.EmptyGroup(),on:C.e.Group({minDistanceFactor:C.e.Numeric(0),minDistancePadding:C.e.Numeric(5),maxDistanceFactor:C.e.Numeric(10),maxDistanceMin:C.e.Numeric(20)})},{isHidden:!0})},k={bindings:M};(s||(s={})).create=function(e,t,r,a={},n={}){let i={...C.e.getDefaultValues(P),...a},o={...k,...n},s=o.bindings,l=T.l_.clone(t.viewport),u=!1,c=e.drag.subscribe(function({x:r,y:a,dx:n,dy:i,pageX:o,pageY:u,buttons:c,modifiers:d,isStart:p,useDelta:f}){let m=!f&&ev(r,a);if(p&&m||!p&&!S)return;S=!0,ew=0;let h=I.K.match(s.dragRotate,c,d),g=I.K.match(s.dragRotateZ,c,d),b=I.K.match(s.dragPan,c,d),x=I.K.match(s.dragZoom,c,d),T=I.K.match(s.dragFocus,c,d),C=I.K.match(s.dragFocusZoom,c,d);f&&h&&y.Sg.copy(D,Y(o-n,u-i)),Y(o,u),Q(o,u);let O=e.pixelRatio,A=(r*O-l.width/2-l.x)/l.width,w=-(e.height-a*O-l.height/2-l.y)/l.height;if(p&&(h&&(y.Sg.copy(E,Z),y.Sg.copy(D,E)),g&&(y.Sg.set(R,A,w),y.Sg.copy(_,R)),(x||C)&&(y.Sg.copy(N,K),y.Sg.copy(G,N)),T&&(y.Sg.copy(U,K),y.Sg.copy(V,U)),b&&(y.Sg.copy(j,K),y.Sg.copy(H,j))),h&&y.Sg.copy(E,Z),g&&y.Sg.set(R,A,w),(x||C)&&y.Sg.copy(G,K),T&&y.Sg.copy(V,K),C){let e=y.AO.distance(t.state.position,t.state.target);t.setState({radius:e/5})}b&&y.Sg.copy(H,K)}),d=e.interactionEnd.subscribe(function(){S=!1}),p=e.wheel.subscribe(function({x:e,y:t,spinX:r,spinY:a,dz:n,buttons:o,modifiers:l}){if(ev(e,t))return;let u=(0,O.zC)(.075*r,.075*a,1e-4*n);u<-i.maxWheelDelta?u=-i.maxWheelDelta:u>i.maxWheelDelta&&(u=i.maxWheelDelta),I.K.match(s.scrollZoom,o,l)&&(G[1]+=u),I.K.match(s.scrollFocus,o,l)&&(V[1]+=u)}),f=e.pinch.subscribe(function({isStart:e,startX:t,startY:r,centerPageX:a,centerPageY:n,fractionDelta:o,buttons:l,modifiers:u}){if(ev(t,r))return;let c=I.K.match(s.dragPan,l,u),d=I.K.match(s.scrollZoom,l,u);S=c||d,c&&(Q(a,n),e?(y.Sg.copy(j,K),y.Sg.copy(H,j)):y.Sg.copy(H,K)),d&&(G[1]+=i.gestureScaleFactor*o)}),m=e.keyDown.subscribe(function({modifiers:t,code:r,key:a,x:n,y:i}){!ev(n,i)&&(I.K.matchKey(s.keyMoveForward,r,t,a)?ef.moveForward=1:I.K.matchKey(s.keyMoveBack,r,t,a)?ef.moveBack=1:I.K.matchKey(s.keyMoveLeft,r,t,a)?ef.moveLeft=1:I.K.matchKey(s.keyMoveRight,r,t,a)?ef.moveRight=1:I.K.matchKey(s.keyMoveUp,r,t,a)?ef.moveUp=1:I.K.matchKey(s.keyMoveDown,r,t,a)?ef.moveDown=1:I.K.matchKey(s.keyRollLeft,r,t,a)?ef.rollLeft=1:I.K.matchKey(s.keyRollRight,r,t,a)?ef.rollRight=1:I.K.matchKey(s.keyPitchUp,r,t,a)?ef.pitchUp=1:I.K.matchKey(s.keyPitchDown,r,t,a)?ef.pitchDown=1:I.K.matchKey(s.keyYawLeft,r,t,a)?ef.yawLeft=1:I.K.matchKey(s.keyYawRight,r,t,a)&&(ef.yawRight=1),I.K.matchKey(s.boostMove,r,t,a)&&(ef.boostMove=1),I.K.matchKey(s.enablePointerLock,r,t,a)&&e.requestPointerLock(l))}
1),h=e.keyUp.subscribe(function({modifiers:e,code:t,key:r,x:a,y:n}){var i,o,l,u,c,d,p,f,m,h,g,b;if(ev(a,n))return;let y=!1;t.startsWith("Alt")?(y=!0,e.alt=!0):t.startsWith("Shift")?(y=!0,e.shift=!0):t.startsWith("Control")?(y=!0,e.control=!0):t.startsWith("Meta")&&(y=!0,e.meta=!0);let x=[];for(let a of(y?(ef.moveForward&&x.push((null===(i=s.keyMoveForward.triggers[0])||void 0===i?void 0:i.code)||""),ef.moveBack&&x.push((null===(o=s.keyMoveBack.triggers[0])||void 0===o?void 0:o.code)||""),ef.moveLeft&&x.push((null===(l=s.keyMoveLeft.triggers[0])||void 0===l?void 0:l.code)||""),ef.moveRight&&x.push((null===(u=s.keyMoveRight.triggers[0])||void 0===u?void 0:u.code)||""),ef.moveUp&&x.push((null===(c=s.keyMoveUp.triggers[0])||void 0===c?void 0:c.code)||""),ef.moveDown&&x.push((null===(d=s.keyMoveDown.triggers[0])||void 0===d?void 0:d.code)||""),ef.rollLeft&&x.push((null===(p=s.keyRollLeft.triggers[0])||void 0===p?void 0:p.code)||""),ef.rollRight&&x.push((null===(f=s.keyRollRight.triggers[0])||void 0===f?void 0:f.code)||""),ef.pitchUp&&x.push((null===(m=s.keyPitchUp.triggers[0])||void 0===m?void 0:m.code)||""),ef.pitchDown&&x.push((null===(h=s.keyPitchDown.triggers[0])||void 0===h?void 0:h.code)||""),ef.yawLeft&&x.push((null===(g=s.keyYawLeft.triggers[0])||void 0===g?void 0:g.code)||""),ef.yawRight&&x.push((null===(b=s.keyYawRight.triggers[0])||void 0===b?void 0:b.code)||"")):x.push(t),x))I.K.matchKey(s.keyMoveForward,a,e,r)?ef.moveForward=0:I.K.matchKey(s.keyMoveBack,a,e,r)?ef.moveBack=0:I.K.matchKey(s.keyMoveLeft,a,e,r)?ef.moveLeft=0:I.K.matchKey(s.keyMoveRight,a,e,r)?ef.moveRight=0:I.K.matchKey(s.keyMoveUp,a,e,r)?ef.moveUp=0:I.K.matchKey(s.keyMoveDown,a,e,r)?ef.moveDown=0:I.K.matchKey(s.keyRollLeft,a,e,r)?ef.rollLeft=0:I.K.matchKey(s.keyRollRight,a,e,r)?ef.rollRight=0:I.K.matchKey(s.keyPitchUp,a,e,r)?ef.pitchUp=0:I.K.matchKey(s.keyPitchDown,a,e,r)?ef.pitchDown=0:I.K.matchKey(s.keyYawLeft,a,e,r)?ef.yawLeft=0:I.K.matchKey(s.keyYawRight,a,e,r)&&(ef.yawRight=0);I.K.matchKey(s.boostMove,t,e,r)&&(ef.boostMove=0)}),g=e.move.subscribe(function({movementX:t,movementY:r}){if(!e.pointerLock||void 0===t||void 0===r)return;let a=.5*l.width-l.x,n=.5*l.height-l.y;y.Sg.copy(D,Y(a,n)),y.Sg.copy(E,Y(t+a,r+n))}),b=e.lock.subscribe(function(e){e?ex():eS()}),x=e.leave.subscribe(function(){ef.moveForward=0,ef.moveBack=0,ef.moveLeft=0,ef.moveRight=0,ef.moveUp=0,ef.moveDown=0,ef.rollLeft=0,ef.rollRight=0,ef.pitchUp=0,ef.pitchDown=0,ef.yawLeft=0,ef.yawRight=0,ef.boostMove=0}),S=!1,A=(0,y.AO)(),w=(0,y.AO)(),D=(0,y.Sg)(),E=(0,y.Sg)(),M=(0,y.AO)(),B=0,_=(0,y.Sg)(),R=(0,y.Sg)(),F=0,L=0,z=0,N=(0,y.Sg)(),G=(0,y.Sg)(),U=(0,y.Sg)(),V=(0,y.Sg)(),j=(0,y.Sg)(),H=(0,y.Sg)(),q=y.AO.clone(t.target),X=y.AO.clone(t.position),W=y.AO.clone(t.up),K=(0,y.Sg)();function Q(e,t){return y.Sg.set(K,(e-l.x)/l.width,(t-l.y)/l.height)}let Z=(0,y.Sg)();function Y(e,t){return y.Sg.set(Z,(e-.5*l.width-l.x)/(.5*l.width),(l.height+2*(l.y-t))/l.width)}let $=(0,y.AO)(),J=(0,y.D6)(),ee=(0,y.AO)(),et=(0,y.AO)(),er=(0,y.AO)(),ea=(0,y.AO)(),en=(0,y.D6)(),ei=(0,y.AO)(),eo=(0,y.D6)(),es=(0,y.AO)(),el=(0,y.D6)(),eu=(0,y.AO)(),ec=(0,y.Sg)(),ed=(0,y.AO)(),ep=(0,y.AO)(),ef={moveUp:0,moveDown:0,moveLeft:0,moveRight:0,moveForward:0,moveBack:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0,boostMove:0},em=(0,y.AO)(),eh=(0,y.AO)();function eg(){let e=Math.min(Math.max(1e3*t.state.radiusMax,.01),i.maxDistance);y.AO.squaredMagnitude(w)>e*e&&(y.AO.setMagnitude(w,w,e),y.AO.add(t.position,t.target,w),y.Sg.copy(N,G),y.Sg.copy(U,V)),y.AO.squaredMagnitude(w)<i.minDistance*i.minDistance&&(y.AO.setMagnitude(w,w,i.minDistance),y.AO.add(t.position,t.target,w),y.Sg.copy(N,G),y.Sg.copy(U,V))}function ev(t,r){return t*=e.pixelRatio,r*=e.pixelRatio,t>l.x+l.width||e.height-r>l.y+l.height||t<l.x||e.height-r<l.y}let eb=-1;function ey(a){if(eb===a)return;let n=a-eb;eb>0&&("spin"===i.animate.name?function(e){if("spin"!==i.animate.name||0===i.animate.params.speed||S)return;let r=2*Math.PI*i.animate.params.speed/1e3;y.AO.sub(w,t.position,t.target),y.AO.normalize(eA,w),y.AO.normalize(eO,t.up),y.AO.cross(eI,eO,eA),y.AO.n
1ormalize(eI,eI);let a=i.animate.params.axis;y.AO.set(eC,a[0]*eI[0]+a[1]*eO[0]+a[2]*eA[0],a[0]*eI[1]+a[1]*eO[1]+a[2]*eA[1],a[0]*eI[2]+a[1]*eO[2]+a[2]*eA[2]),y.AO.normalize(eC,eC),y.D6.setAxisAngle(eT,eC,e*r),y.AO.transformQuat(w,w,eT),y.AO.transformQuat(t.up,t.up,eT),y.AO.add(t.position,t.target,w)}(n):"rock"===i.animate.name&&function(e){if("rock"!==i.animate.name||0===i.animate.params.speed||S)return;let r=e/1e3*i.animate.params.speed,a=(0,O.Id)(i.animate.params.angle),n=Math.sin(ew*Math.PI*2)*a,o=Math.sin((ew+r)*Math.PI*2)*a;y.AO.sub(w,t.position,t.target),y.AO.normalize(eA,w),y.AO.normalize(eO,t.up),y.AO.cross(eI,eO,eA),y.AO.normalize(eI,eI);let s=i.animate.params.axis;y.AO.set(eC,s[0]*eI[0]+s[1]*eO[0]+s[2]*eA[0],s[0]*eI[1]+s[1]*eO[1]+s[2]*eA[1],s[0]*eI[2]+s[1]*eO[2]+s[2]*eA[2]),y.AO.normalize(eC,eC),y.D6.setAxisAngle(eT,eC,o-n),y.AO.transformQuat(w,w,eT),y.AO.transformQuat(t.up,t.up,eT),y.AO.add(t.position,t.target,w),(ew+=r)>=1&&(ew=0)}(n)),y.AO.sub(w,t.position,t.target),function(){let r=E[0]-D[0],a=E[1]-D[1];y.AO.set(ea,r,a,0);let n=y.AO.magnitude(ea)*function(){let t=e.width/e.height||1;return i.rotateSpeed*e.pixelRatio*t}();n?(y.AO.sub(w,t.position,t.target),y.AO.normalize(ee,w),y.AO.normalize(et,t.up),y.AO.normalize(er,y.AO.cross(er,et,ee)),y.AO.setMagnitude(et,et,a),y.AO.setMagnitude(er,er,r),y.AO.add(ea,et,er),y.AO.normalize($,y.AO.cross($,ea,w)),y.D6.setAxisAngle(J,$,n),y.AO.transformQuat(w,w,J),y.AO.transformQuat(t.up,t.up,J),y.AO.copy(M,$),B=n):!i.staticMoving&&B&&(B*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.sub(w,t.position,t.target),y.D6.setAxisAngle(J,M,B),y.AO.transformQuat(w,w,J),y.AO.transformQuat(t.up,t.up,J)),y.Sg.copy(D,E)}(),function(){let e=(ef.rollRight-ef.rollLeft)/45,r=-((R[0]-_[0])*Math.sign(R[1])),a=-((R[1]-_[1])*Math.sign(R[0])),n=-i.rotateSpeed*(-r+a)+e;n?(y.AO.normalize(ei,w),y.D6.setAxisAngle(en,ei,n),y.AO.transformQuat(t.up,t.up,en),F=n):!i.staticMoving&&F&&(F*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.normalize(ei,w),y.D6.setAxisAngle(en,ei,F),y.AO.transformQuat(t.up,t.up,en)),y.Sg.copy(_,R)}(),function(){let e=(ef.pitchUp-ef.pitchDown)/(i.flyMode?360:90),r=-i.rotateSpeed*e;r?(y.AO.cross(es,w,t.up),y.AO.normalize(es,es),y.D6.setAxisAngle(eo,es,r),y.AO.transformQuat(w,w,eo),y.AO.transformQuat(t.up,t.up,eo),L=r):!i.staticMoving&&L&&(L*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.cross(es,w,t.up),y.AO.normalize(es,es),y.D6.setAxisAngle(eo,es,L),y.AO.transformQuat(w,w,eo),y.AO.transformQuat(t.up,t.up,eo))}(),function(){let e=(ef.yawRight-ef.yawLeft)/(i.flyMode?360:90),r=-i.rotateSpeed*e;r?(y.AO.normalize(eu,t.up),y.D6.setAxisAngle(el,eu,r),y.AO.transformQuat(w,w,el),y.AO.transformQuat(t.up,t.up,el),z=r):!i.staticMoving&&z&&(z*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.normalize(eu,t.up),y.D6.setAxisAngle(el,eu,z),y.AO.transformQuat(w,w,el),y.AO.transformQuat(t.up,t.up,el))}(),function(){let e=1+(G[1]-N[1])*i.zoomSpeed;1!==e&&e>0&&y.AO.scale(w,w,e),i.staticMoving?y.Sg.copy(N,G):N[1]+=(G[1]-N[1])*i.dynamicDampingFactor}(),function(){let e=(V[1]-U[1])*i.zoomSpeed;if(0!==e){let r=Math.max(1,t.state.radius+t.state.radius*e);t.setState({radius:r})}i.staticMoving?y.Sg.copy(U,V):U[1]+=(V[1]-U[1])*i.dynamicDampingFactor}(),function(){if(y.Sg.sub(ec,y.Sg.copy(ec,H),j),y.Sg.squaredMagnitude(ec)){let r=e.pixelRatio*i.panSpeed;ec[0]*=1/t.zoom*t.viewport.width*r,ec[1]*=1/t.zoom*t.viewport.height*r,y.AO.cross(ep,y.AO.copy(ep,w),t.up),y.AO.setMagnitude(ep,ep,ec[0]),y.AO.setMagnitude(ed,t.up,ec[1]),y.AO.add(ep,ep,ed),y.AO.add(t.position,t.position,ep),y.AO.add(t.target,t.target,ep),i.staticMoving?y.Sg.copy(j,H):(y.Sg.sub(ec,H,j),y.Sg.scale(ec,ec,i.dynamicDampingFactor),y.Sg.add(j,j,ec))}}(),y.AO.add(t.position,t.target,w),eg(),eb>0&&function(a){y.AO.sub(eh,t.position,t.target);let n=Math.max(t.state.minNear,i.minDistance);y.AO.setMagnitude(eh,eh,n);let o=i.flyMode||e.pointerLock,s=.06*a*i.moveSpeed*(1===ef.boostMove?i.boostMoveFactor:1);if(1===ef.moveForward&&(y.AO.distance(t.position,r.boundingSphereVisible.center)<r.boun
1dingSphereVisible.radius&&o?(y.AO.normalize(em,eh),y.AO.scaleAndSub(t.position,t.position,em,s)):(y.AO.sub(em,t.position,t.target),y.AO.scale(em,em,1-s/100),y.AO.add(t.position,t.target,em)),o&&y.AO.sub(t.target,t.position,eh)),1===ef.moveBack&&(y.AO.distance(t.position,r.boundingSphereVisible.center)<r.boundingSphereVisible.radius&&o?(y.AO.normalize(em,eh),y.AO.scaleAndAdd(t.position,t.position,em,s)):(y.AO.sub(em,t.position,t.target),y.AO.scale(em,em,1+s/100),y.AO.add(t.position,t.target,em)),o&&y.AO.sub(t.target,t.position,eh)),1===ef.moveLeft&&(y.AO.cross(em,eh,t.up),y.AO.normalize(em,em),o?(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveRight&&(y.AO.cross(em,eh,t.up),y.AO.normalize(em,em),o?(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveUp&&(y.AO.normalize(em,t.up),o?(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveDown&&(y.AO.normalize(em,t.up),o?(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),o){let e=y.AO.distance(t.position,r.boundingSphereVisible.center);t.setState({minFar:e+r.boundingSphereVisible.radius})}}(Math.min(n,250)),y.AO.sub(w,t.position,t.target),eg(),y.AO.squaredDistance(A,t.position)>y.Ib&&y.AO.copy(A,t.position),eb=a}function ex(){y.AO.sub(eh,t.position,t.target);let e=Math.max(t.state.minNear,i.minDistance);y.AO.setMagnitude(eh,eh,e),y.AO.sub(t.target,t.position,eh);let a=y.AO.distance(t.position,r.boundingSphereVisible.center);t.setState({minFar:a+r.boundingSphereVisible.radius})}function eS(){let{center:e,radius:a}=r.boundingSphereVisible;if(y.AO.distance(t.position,e)>a){let r=t.getFocus(e,a);t.setState({...r,minFar:0})}else t.setState({minFar:0,radius:r.boundingSphereVisible.radius})}let eT=(0,y.D6)(),eC=(0,y.AO)(),eO=(0,y.AO)(),eI=(0,y.AO)(),eA=(0,y.AO)(),ew=0;return{viewport:l,get isAnimating(){return"off"!==i.animate.name},get isMoving(){return 1===ef.moveForward||1===ef.moveBack||1===ef.moveLeft||1===ef.moveRight||1===ef.moveUp||1===ef.moveDown||1===ef.rollLeft||1===ef.rollRight||1===ef.pitchUp||1===ef.pitchDown||1===ef.yawLeft||1===ef.yawRight},get props(){return i},setProps:e=>{var t;(null===(t=e.animate)||void 0===t?void 0:t.name)==="rock"&&"rock"!==i.animate.name&&(ew=0),void 0!==e.flyMode&&e.flyMode!==i.flyMode&&(e.flyMode?ex():eS()),Object.assign(i,e)},get attribs(){return o},setAttribs:e=>{Object.assign(o,e),Object.assign(s,o.bindings)},start:function(e){eb=-1,ey(e)},update:ey,reset:function(){y.AO.copy(t.target,q),y.AO.copy(t.position,X),y.AO.copy(t.up,W),y.AO.sub(w,t.position,t.target),y.AO.copy(A,t.position)},dispose:function(){u||(u=!0,c.unsubscribe(),p.unsubscribe(),f.unsubscribe(),d.unsubscribe(),m.unsubscribe(),h.unsubscribe(),g.unsubscribe(),b.unsubscribe(),x.unsubscribe())}}};var B=r(75404),_=r(7791),R=r(32747),F=r(67589),L=r(71211),z=r(67241),N=r(89623),G=r(34748),U=r(4376),V=r(48930),j=r(7922),H=r(93964),q=r(85764),X=r(11803);let W={sceneBoundingSpheres:C.e.Boolean(!1,{description:"Show full scene bounding spheres."}),visibleSceneBoundingSpheres:C.e.Boolean(!1,{description:"Show visible scene bounding spheres."}),objectBoundingSpheres:C.e.Boolean(!1,{description:"Show bounding spheres of visible render objects."}),instanceBoundingSpheres:C.e.Boolean(!1,{description:"Show bounding spheres of visible instances."})};class K{constructor(e,t,r){this.objectsData=new Map,this.instancesData=new Map,this.scene=R.x.create(e,"blended"),this.parent=t,this._props={...C.e.getDefaultValues(W),...r}}update(){let e=Q(this.scene,this.parent.boundingSphere,this.sceneData,j.t.lightgrey,Z);e&&(this.sceneData=e);let t=Q(this.scene,this.parent.boundingSphereVisible,this.visibleSceneData,j.t.black,Y);t&&(this.visibleSceneData=t),this.parent.forEach((e,t)=>{let r=this.objectsData.get(t),a=Q(this.scene,e.values.boundingSphere.ref.value,r,j.t.tomato,$);a&&this.objectsData.set(t,a);let n=this.instancesData.get(t),i=Q(this.scene,e.values.invariantBoundingSphere.ref.value,n,j.t.skyblue,J,{aTransform:t.values.aTransform,matrix:t.values.matrix,transform:t.values.transform,extraTransform:t.values.extraTransform,uInstanceCount:t.values.uInstanceCount,instanceCount:t.values.instanceCount,aInstance:t.values.aInstance,hasReflection:t.values.hasReflection,instanceGrid:t.values.instanceGrid});i&&this.instancesData.set(t,i)}),this.objectsData.forEach((e,t)=>{this.parent.has(t)||(this.scene.remove(e.renderObject),this.objectsData.delete(t))}),this.instancesData.forEach((e,t)=>{this.parent.has(t)||(this.scene.remove(e.renderObject),this.instancesData.delete(t))}),this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){this.sceneData&&(this.sceneData.renderObject.state.visible=this._props.sceneBoundingSpheres),this.visibleSceneData&&(this.visibleSceneData.renderObject.state.visible=this._props.visibleSceneBoundingSpheres),this.parent.forEach((e,t)=>{let r=this.objectsData.get(t);r&&(r.renderObject.state.visible=t.state.visible&&this._props.objectBoundingSpheres);let a=this.instancesData.get(t);a&&(a.renderObject.state.visible=t.state.visible&&this._props.instanceBoundingSpheres)})}clear(){this.sceneData=void 0,this.objectsData.clear(),this.scene.clear()}get isEnabled(){return this._props.sceneBoundingSpheres||this._props.visibleSceneBoundingSpheres||this._props.objectBoundingSpheres||this._props.instanceBoundingSpheres}get props(){return this._props}setProps(e){Object.assign(this._props,e),this.isEnabled&&this.update()}}function Q(e,t,r,a,n,i){if(!r||!V.CP.equals(r.boundingSphere,t)){let o=function(e,t){let r=(0,H.U)(2),a=N.V.createState(r,r/2,t);
1if(e.radius&&((0,G.H)(a,e.center,e.radius,2),V.CP.hasExtrema(e)))for(let t of e.extrema)(0,G.H)(a,t,1,0);return N.V.getMesh(a)}(t,r&&r.mesh),s=r?r.renderObject:function(e,t,r,a){let n=U.K.Utils.createValuesSimple(e,{alpha:.1,doubleSided:!1,cellSize:0,batchSize:0},t,1,a);return(0,z.Hq)("mesh",n,{disposed:!1,visible:!0,alphaFactor:1,pickable:!1,colorOnly:!1,opaque:!1,writeDepth:!1},r)}(o,a,n,i);return r?q.IO.updateIfChanged(s.values.drawCount,X.Z.getDrawCount(o)):e.add(s),{boundingSphere:V.CP.clone(t),renderObject:s,mesh:o}}}let Z=(0,z.xH)(),Y=(0,z.xH)(),$=(0,z.xH)(),J=(0,z.xH)();var ee=r(63964),et=r(2078),er=r(30502),ea=r(34487);let en=(0,y.AO)(),ei=(0,y.AO)(),eo=(0,y.AO)(),es={maxFps:C.e.Numeric(30,{min:10,max:60,step:10}),preferAtomPixelPadding:C.e.Numeric(3,{min:0,max:20,step:1},{description:"Number of extra pixels at which to prefer atoms over bonds."}),convertCoordsToRay:C.e.Boolean(!1,{description:"Convert screen coordinates to ray for picking."})};class el{setProps(e){Object.assign(this.props,e)}getTarget(){return this.ray?this.ray:this.props.convertCoordsToRay?this.camera.getRay((0,ea.k)(),this.endX,this.input.height-this.endY):y.Sg.create(this.endX,this.endY)}handleMove(){(this.startX!==this.endX||this.startY!==this.endY||this.input.pointerLock&&!this.controls.isMoving)&&(this.pickData=this.canvasAsyncIdentify(this.getTarget()),this.startX=this.endX,this.startY=this.endY)}handleClick(){let e=this.canvasIdentify(this.getTarget()),t=this.getLoci(null==e?void 0:e.id,null==e?void 0:e.position);this.events.click.next({current:t,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:null==e?void 0:e.position}),this.prevLoci=t}handleDrag(){this.startX===this.endX&&this.startY===this.endY&&(!this.input.pointerLock||this.controls.isMoving)||this.outsideViewport(this.startX,this.startY,this.ray)||(this.events.drag.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,pageStart:y.Sg.create(this.startX,this.startY),pageEnd:y.Sg.create(this.endX,this.endY)}),this.startX=this.endX,this.startY=this.endY)}tick(e){if(this.inside){if(this.pickData){let e=this.pickData.tryGet();if("pending"!==e){if(this.position=null==e?void 0:e.position,this.inside){let t=this.getLoci(null==e?void 0:e.id,null==e?void 0:e.position);this.events.hover.next({current:t,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:null==e?void 0:e.position}),this.prevLoci=t}this.pickData=void 0}}e-this.prevT>1e3/this.props.maxFps&&(this.prevT=e,this.isInteracting?this.handleDrag():this.handleMove())}}leave(){this.inside=!1,_.hX.Loci.isEmpty(this.prevLoci)||(this.prevLoci=_.hX.Loci.Empty,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers}))}move(e,t,r,a,n,i){this.inside=!0,this.buttons=r,this.button=a,this.modifiers=n,this.ray=i,this.endX=e,this.endY=t}click(e,t,r,a,n,i){this.endX=e,this.endY=t,this.buttons=r,this.button=a,this.modifiers=n,this.ray=i,this.handleClick()}drag(e,t,r,a,n){this.endX=e,this.endY=t,this.buttons=r,this.button=a,this.modifiers=n,this.handleDrag()}modify(e){x.N0.areEqual(e,this.modifiers)||(this.modifiers=e,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:this.position}))}outsideViewport(e,t,r){if(r)return!1;let{input:a,camera:{viewport:n}}=this;return e*=a.pixelRatio,t*=a.pixelRatio,e>n.x+n.width||a.height-t>n.y+n.height||e<n.x||a.height-t<n.y}getLoci(e,t){var r;let{repr:a,loci:n}=this.lociGetter(e);if(t&&a&&er.Bond.isLoci(n)&&2===n.bonds.length){let{aUnit:e,aIndex:i}=n.bonds[0];e.conformation.position(e.elements[i],en),y.AO.sub(eo,this.camera.state.position,this.camera.state.target),y.AO.projectPointOnPlane(ei,t,eo,en);let o=this.camera.getPixelSize(ei),s=a.theme.size.size(n.bonds[0])*(null!==(r=a.props.sizeFactor)&&void 0!==r?r:1);if(!1===a.props.lineSizeAttenuation&&(s*=o/2),s+=this.props.preferAtomPixelPadding*o,y.AO.distance(ei,en)<s)return{repr:a,loci:er.Bond.toFirstStructureElementLoci(n)}}return{repr:a,loci:n}}dispose(){this.ev.dispose()}constructor(e,t,r,a,n,i,o={}){this.canvasIdentify=e,this.canvasAsyncIdentify=t,this.lociGetter=r,this.input=a,this.camera=n,this.controls=i,this.ev=et.d.create(),this.events={hover:this.ev(),drag:this.ev(),click:this.ev()},this.startX=-1,this.startY=-1,this.endX=-1,this.endY=-1,this.ray=void 0,this.pickData=void 0,this.position=void 0,this.isInteracting=!1,this.prevLoci=_.hX.Loci.Empty,this.prevT=0,this.inside=!1,this.buttons=x.b4.create(0),this.button=x.b4.create(0),this.modifiers=x.N0.None,this.props={...C.e.getDefaultValues(es),...o},a.drag.subscribe(({x:e,y:t,buttons:r,button:a,modifiers:n})=>{this.isInteracting=!0,this.drag(e,t,r,a,n)}),a.move.subscribe(({x:e,y:t,inside:r,buttons:a,button:n,modifiers:i,onElement:o,ray:s})=>{if(r&&!this.isInteracting){if(!o){this.leave();return}this.move(e,t,a,n,i,s)}}),a.leave.subscribe(()=>{this.leave()}),a.click.subscribe(({x:e,y:t,buttons:r,button:a,modifiers:n,ray:i})=>{this.outsideViewport(e,t,i)||this.click(e,t,r,a,n,i)}),a.interactionEnd.subscribe(()=>{this.isInteracting=!1}),a.modifiers.subscribe(e=>{this.modify(e)})}}
1var eu=r(32799),ec=r(68971),ed=r(18406),ep=r(45705),ef=r(57155),em=r(62113),eh=r(10410);let eg=`
2precision highp float;
3precision highp sampler2D;
4
5uniform sampler2D tColor;
6uniform vec2 uTexSize;
7uniform float uWeight;
8
9void main() {
10    vec2 coords = gl_FragCoord.xy / uTexSize;
11    gl_FragColor = texture2D(tColor, coords) * uWeight;
12}
13`;var ev=r(48502);let eb={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},ey=(0,ep.Lq)("compose",eh.C,eg),ex={mode:C.e.Select("temporal",[["off","Off"],["on","On"],["temporal","Temporal"]]),sampleLevel:C.e.Numeric(2,{min:0,max:5,step:1},{description:"Take level^2 samples."}),reduceFlicker:C.e.Boolean(!0,{description:'Reduce flicker in "temporal" mode.'}),reuseOcclusion:C.e.Boolean(!0,{description:"Reuse occlusion data. It is faster but has some artefacts."})};class eS{static isEnabled(e){return"off"!==e.mode}constructor(e,t){this.webgl=e,this.drawPass=t;let{colorBufferFloat:r,textureFloat:a,colorBufferHalfFloat:n,textureHalfFloat:i}=e.extensions,o=t.colorTarget.getWidth(),s=t.colorTarget.getHeight();this.colorTarget=e.createRenderTarget(o,s,!1),this.composeTarget=e.createRenderTarget(o,s,!1,n&&i?"fp16":r&&a?"float32":"uint8"),this.holdTarget=e.createRenderTarget(o,s,!1),this.compose=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...eb},n=(0,ef.s8)(e,"triangles",ey,a,r);return(0,em.T)(n,r)}(e,t.colorTarget.texture)}getByteCount(){return this.colorTarget.getByteCount()+this.composeTarget.getByteCount()+this.holdTarget.getByteCount()}syncSize(){let e=this.drawPass.colorTarget.getWidth(),t=this.drawPass.colorTarget.getHeight(),[r,a]=this.compose.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.colorTarget.setSize(e,t),this.composeTarget.setSize(e,t),this.holdTarget.setSize(e,t),q.IO.update(this.compose.values.uTexSize,y.Sg.set(this.compose.values.uTexSize.ref.value,e,t)))}render(e,t,r,a,n){return"temporal"!==r.multiSample.mode||n?(this.renderMultiSample(t,a,r),-2):this.renderTemporalMultiSample(e,t,r,a)}bindOutputTarget(e){e?this.webgl.bindDrawingBuffer():this.colorTarget.bind()}renderMultiSample(e,t,r){let{camera:a}=e,{compose:n,composeTarget:i,drawPass:o,webgl:s}=this,{gl:l,state:u}=s;ev.kM&&s.timer.mark("MultiSamplePass.renderMultiSample");let c=eT[Math.max(0,Math.min(r.multiSample.sampleLevel,5))],{x:d,y:p,width:f,height:m}=a.viewport,h=1/c.length,g=1/32;a.viewOffset.enabled=!0,q.IO.update(n.values.tColor,o.getColorTarget(r.postprocessing).texture),n.update();for(let t=0;t<c.length;++t){let s=c[t];
13L.V.setViewOffset(a.viewOffset,f,m,s[0],s[1],f,m),a.update();let b=h+g*(-.5+(t+.5)/c.length);q.IO.update(n.values.uWeight,b),0!==t&&r.multiSample.reuseOcclusion?o.postprocessing.setOcclusionOffset(s[0]/f,s[1]/m):o.postprocessing.setOcclusionOffset(0,0),o.render(e,r,!1),i.bind(),u.enable(l.BLEND),u.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD),u.blendFuncSeparate(l.ONE,l.ONE,l.ONE,l.ONE),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(d,p,f,m),u.scissor(d,p,f,m),0===t&&(u.clearColor(0,0,0,0),l.clear(l.COLOR_BUFFER_BIT)),n.render()}o.postprocessing.setOcclusionOffset(0,0),q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,i.texture),n.update(),this.bindOutputTarget(t),u.viewport(d,p,f,m),u.scissor(d,p,f,m),u.disable(l.BLEND),n.render(),a.viewOffset.enabled=!1,a.update(),ev.kM&&s.timer.markEnd("MultiSamplePass.renderMultiSample")}renderTemporalMultiSample(e,t,r,a){let{camera:n}=t,{compose:i,composeTarget:o,holdTarget:s,drawPass:l,webgl:u}=this,{gl:c,state:d}=u;ev.kM&&u.timer.mark("MultiSamplePass.renderTemporalMultiSample");let p=eT[Math.max(0,Math.min(r.multiSample.sampleLevel,5))];if(-2===e||e>=p.length)return -2;let{x:f,y:m,width:h,height:g}=n.viewport,b=1/p.length;if(-1===e)l.render(t,r,!1),q.IO.update(i.values.uWeight,1),q.IO.update(i.values.tColor,l.getColorTarget(r.postprocessing).texture),i.update(),s.bind(),d.disable(c.BLEND),d.disable(c.DEPTH_TEST),d.depthMask(!1),d.viewport(f,m,h,g),d.scissor(f,m,h,g),i.render(),e+=1;else{n.viewOffset.enabled=!0,q.IO.update(i.values.tColor,l.getColorTarget(r.postprocessing).texture),q.IO.update(i.values.uWeight,b),i.update();let a=Math.pow(2,Math.max(0,r.multiSample.sampleLevel-2));for(let s=0;s<a;++s){let a=p[e];if(L.V.setViewOffset(n.viewOffset,h,g,a[0],a[1],h,g),n.update(),0!==e&&r.multiSample.reuseOcclusion?l.postprocessing.setOcclusionOffset(a[0]/h,a[1]/g):l.postprocessing.setOcclusionOffset(0,0),l.render(t,r,!1),o.bind(),d.enable(c.BLEND),d.blendEquationSeparate(c.FUNC_ADD,c.FUNC_ADD),d.blendFuncSeparate(c.ONE,c.ONE,c.ONE,c.ONE),d.disable(c.DEPTH_TEST),d.depthMask(!1),d.viewport(f,m,h,g),d.scissor(f,m,h,g),0===e&&(d.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT)),i.render(),(e+=1)>=p.length)break}}l.postprocessing.setOcclusionOffset(0,0),this.bindOutputTarget(a),d.viewport(f,m,h,g),d.scissor(f,m,h,g);let y=e*b;return y>0&&(q.IO.update(i.values.uWeight,1),q.IO.update(i.values.tColor,o.texture),i.update(),d.disable(c.BLEND),i.render()),y<1&&(q.IO.update(i.values.uWeight,1-y),q.IO.update(i.values.tColor,s.texture),i.update(),0===y?d.disable(c.BLEND):d.enable(c.BLEND),i.render()),n.viewOffset.enabled=!1,n.update(),ev.kM&&u.timer.markEnd("MultiSamplePass.renderTemporalMultiSample"),e>=p.length?-2:e}}let eT=[[[0,0]],[[0,0],[-4,-4]],[[0,0],[6,-2],[-6,2],[2,6]],[[0,0],[-1,3],[5,1],[-3,-5],[-5,5],[-7,-1],[3,7],[7,-7]],[[0,0],[-1,-3],[-3,2],[4,-1],[-5,-2],[2,5],[5,3],[3,-5],[-2,6],[0,-7],[-4,-6],[-6,4],[-8,0],[7,-4],[6,7],[-7,-8]],[[0,0],[-7,-5],[-3,-5],[-5,-4],[-1,-4],[-2,-2],[-6,-1],[-4,0],[-7,1],[-1,2],[-6,3],[-3,3],[-7,6],[-3,6],[-5,7],[-1,7],[5,-7],[1,-6],[6,-5],[4,-4],[2,-3],[7,-2],[1,-1],[4,-1],[2,1],[6,2],[0,4],[4,4],[2,5],[7,5],[5,6],[3,7]]];eT.forEach(e=>{e.forEach(e=>{e[0]*=.0625,e[1]*=.0625})});class eC{update(e,t){return e&&(this.sampleIndex=-1),"temporal"===t.mode&&-2!==this.sampleIndex}render(e,t,r,a){return this.sampleIndex=this.multiSamplePass.render(this.sampleIndex,e,t,r,!!a),this.sampleIndex<0}constructor(e){this.multiSamplePass=e,this.sampleIndex=-2}}var eO=r(80898),eI=r(62131),eA=r(81421);class ew{constructor(e,t,r,a){this.webgl=e,this.width=t,this.height=r,this.pickScale=a;let n=a/e.pixelRatio;this.pickWidth=Math.ceil(t*n),this.pickHeight=Math.ceil(r*n);let{resources:i,extensions:{drawBuffers:o},gl:s}=e;o?(this.objectPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.framebuffer=i.framebuffer(),this.objectPickFramebuffer=i.framebuffer(),this.instancePickFramebuffer=i.framebuffer(),this.groupPickFramebuffer=i.framebuffer(),this.depthPickFramebuffer=i.framebuffer(),this.framebuffer.bind(),o.drawBuffers([o.COLOR_ATTACHMENT0,o.COLOR_ATTACHMENT1,o.COLOR_ATTACHMENT2,o.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer=(0,eI.D0)(s)?i.renderbuffer("depth32f","depth",this.pickWidth,this.pickHeight):i.renderbuffer("depth16","depth",this.pickWidth,this.pickHeight),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0")):(this.objectPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.instancePickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.groupPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.depthPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight))}getByteCount(){return this.webgl.extensions.drawBuffers?this.objectPickTexture.getByteCount()+this.instancePickTexture.getByteCount()+this.groupPickTexture.getByteCount()+this.depthPickTexture.getByteCount()+this.depthRenderbuffer.getByteCount():this.objectPickTarget.getByteCount()+this.instancePickTarget.getByteCount()+this.groupPickTarget.getByteCount()+this.depthPickTarget.getByteCount()}dispose(){this.webgl.extensions.drawBuffers?(this.framebuffer.destroy(),this.objectPickTexture.destroy(),this.instancePickTexture.destroy(),this.groupPickTexture.destroy(),this.depthPickTexture.destroy(),this.objectPickFramebuffer.destroy(),this.instancePickFramebuffer.destroy(),this.groupPickFramebuffer.destroy(),this.depthPickFramebuffer.destroy(),this.depthRenderbuffer.destroy()):(this.objectPickTarget.destroy(),this.instancePickTarget.destroy(),this.groupPickTarget.destroy(),this.depthPickTarget.destroy())}get pickRatio(){return this.pickScale/this.webgl.pixelRatio}setPickScale(e){this.pickScale=e,this.setSize(this.width,this.height)}bindObject(){this.webgl.extensions.drawBuffers?this.objectPickFramebuffer.bind():this.objectPickTarget.bind()}bindInstance(){this.webgl.extensions.drawBuffers?this.instancePickFramebuffer.bind():this.instancePickTarget.bind()}bindGroup(){this.webgl.extensions.drawBuffers?this.groupPickFramebuffer.bind():this.groupPickTarget.bind()}bindDepth(){this.webgl.extensions.drawBuffers?this.depthPickFramebuffer.bind():this.depthPickTarget.bind()}get drawingBufferHeight(){return this.height}setSize(e,t){this.width=e,this.height=t;let r=this.pickScale/this.webgl.pixelRatio,a=Math.ceil(this.width*r),n=Math.ceil(this.height*r);(a!==this.pickWidth||n!==this.pickHeight)&&(this.pickWidth=a,this.pickHeight=n,this.webgl.extensions.drawBuffers?(this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.depthRenderbuffer.setSize(this.pickWidth,this.pickHeight)):(this.objectPickTarget.setSize(this.pickWidth,this.pickHeight),this.instancePickTarget.setSize(this.pickWidth,this.pickHeight),this.groupPickTarget.setSize(this.pickWidth,this.pickHeight),this.depthPickTarget.setSize(this.pickWidth,this.pickHeight)))}reset(){let{drawBuffers:e}=this.webgl.extensions;e&&(this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2,e.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0"))}renderVariant(e,t,r,a,n,i){e.clear(!1),e.update(t,r),e.renderPick(r.primitives,t,n,i),a.handle.isEnabled&&e.renderPick(a.handle.scene,t,n,i),a.camera.isEnabled&&(a.camera.update(t),e.update(a.camera.camera,a.camera.scene),e.renderPick(a.camera.scene,a.camera.camera,n,i))}render(e,t,r,a){this.webgl.extensions.drawBuffers?(this.framebuffer.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.None)):(this.objectPickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Object),this.instancePickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Instance),this.groupPickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Group),this.depthPickTarget.bind(),this.renderVariant(e,t,r,a,"depth",S.N4.None))}}let eD=!1;function eE(e){return!!e.isWebGL2||(ev.Au&&!eD&&(console.log("WebGL2 required for async picking. Falling back to synchronous picking."),eD=!0),!1)}(a=l||(l={}))[a.Pending=0]="Pending",a[a.Resolved=1]="Resolved",a[a.Failed=2]="Failed";class eM{setup(){let e=this.viewport.width*this.viewport.height*4;this.object&&this.object.length===e||(this.object=new Uint8Array(e),this.instance=new Uint8Array(e),this.group=new Uint8Array(e),this.depth=new Uint8Array(e))}setViewport(e,t,r,a){T.l_.set(this.viewport,e,t,r,a),this.setup()}read(){ev.kM&&this.webgl.timer.mark("PickBuffers.read");let{x:e,y:t,width:r,height:a}=this.viewport;this.pickPass.bindObject(),this.webgl.readPixels(e,t,r,a,this.object),this.pickPass.bindInstance(),this.webgl.readPixels(e,t,r,a,this.instance),this.pickPass.bindGroup(),this.webgl.readPixels(e,t,r,a,this.group),this.pickPass.bindDepth(),this.webgl.readPixels(e,t,r,a,this.depth),this.ready=!0,ev.kM&&this.webgl.timer.markEnd("PickBuffers.read")}asyncRead(){let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return;ev.kM&&this.webgl.timer.mark("PickBuffers.asyncRead"),null!==this.fenceSync&&e.deleteSync(this.fenceSync);let{x:t,y:r,width:a,height:n}=this.viewport;this.pickPass.bindObject(),this.objectBuffer.read(t,r,a,n),this.pickPass.bindInstance(),this.instanceBuffer.read(t,r,a,n),this.pickPass.bindGroup(),this.groupBuffer.read(t,r,a,n),this.pickPass.bindDepth(),this.depthBuffer.read(t,r,a,n),this.fenceTimestamp=(0,b.z)(),this.fenceSync=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0),e.flush(),this.ready=!1,ev.kM&&this.webgl.timer.markEnd("PickBuffers.asyncRead")}check(){if(this.ready)return l.Resolved;if(null===this.fenceSync)return l.Failed;let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return l.Failed;let t=e.clientWaitSync(this.fenceSync,0,0);return t===e.WAIT_FAILED||this.lag>=this.maxAsyncReadLag?t!==e.WAIT_FAILED&&(0,b.z)()-this.fenceTimestamp<1e3/60?(this.lag+=1,l.Pending):(e.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!1,l.Failed):t===e.TIMEOUT_EXPIRED?(this.lag+=1,l.Pending):(this.objectBuffer.getSubData(this.object),this.instanceBuffer.getSubData(this.instance),this.groupBuffer.getSubData(this.group),this.depthBuffer.getSubData(this.depth),e.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!0,l.Resolved)}getIdx(e,t){return(t*this.viewport.width+e)*4}getDepth(e,t){if(!this.ready)return -1;let r=this.getIdx(e,t),a=this.depth;return(0,eA.ZU)(a[r],a[r+1],a[r+2],a[r+3])}getId(e,t,r){if(!this.ready)return -1;let a=this.getIdx(e,t);return(0,eA.UF)(r[a],r[a+1],r[a+2])}getObjectId(e,t){return this.getId(e,t,this.object)}getInstanceId(e,t){return this.getId(e,t,this.instance)}getGroupId(e,t){return this.getId(e,t,this.group)}getPickingId(e,t){let r=this.getObjectId(e,t);if(-1===r||r===eO.i.Null)return;let a=this.getInstanceId(e,t);if(-1===a||a===eO.i.Null)return;let n=this.getGroupId(e,t);if(-1!==n)return{objectId:r,instanceId:a,groupId:n}}reset(){this.fenceSync=null,this.ready=!1,this.lag=0,this.fenceTimestamp=0}dispose(){let{gl:e}=this.webgl;(0,eI.D0)(e)&&(this.objectBuffer.destroy(),this.instanceBuffer.destroy(),this.groupBuffer.destroy(),this.depthBuffer.destroy(),null!==this.fenceSync&&(e.deleteSync(this.fenceSync),this.fenceSync=null))}constructor(e,t,r=5){this.webgl=e,this.pickPass=t,this.maxAsyncReadLag=r,this.viewport=T.l_.create(0,0,0,0),this.fenceSync=null,this.fenceTimestamp=0,this.ready=!1,this.lag=0,e.isWebGL2&&(this.objectBuffer=e.resources.pixelPack("rgba","ubyte"),this.instanceBuffer=e.resources.pixelPack("rgba","ubyte"),this.groupBuffer=e.resources.pixelPack("rgba","ubyte"),this.depthBuffer=e.resources.pixelPack("rgba","ubyte")),this.setup()}}var eP=r(43975);let ek={eyeSeparation:C.e.Numeric(.062,{min:.02,max:.1,step:.001},{description:"Distance between left and right camera."}),focus:C.e.Numeric(10,{min:1,max:20,step:.1},{description:"Apparent object distance."})},eB=C.e.getDefaultValues(ek);class e_{get viewport(){return this.parent.viewport}get viewOffset(){return this.parent.viewOffset}constructor(e,t={}){this.parent=e,this.left=new eR,this.right=new eR,this.props={...eB,...t}}setProps(e){Object.assign(this.props,e)}update(e){var t,r,a;
13this.parent.update(),e?(t=this.parent,r=this.left,a=this.right,eN(t,r,e.pose.views[0],e.layer),1===e.pose.views.length?a.disabled=!0:eN(t,a,e.pose.views[1],e.layer)):function(e,t,r,a){let n,i;ez(e,r),ez(e,a);let o=Math.floor(e.viewport.width/2),s=o/e.viewport.height;r.viewport.width=o,a.viewport.x+=o,a.viewport.width-=o;let l=t.eyeSeparation/2,u=l*e.near/t.focus,c=e.near*Math.tan(.5*e.state.fov);eF[12]=-l,eL[12]=l,n=-c*s+u,i=c*s+u,r.projection[0]=2*e.near/(i-n),r.projection[8]=(i+n)/(i-n),y.yb.mul(r.view,r.view,eF),y.yb.mul(r.projectionView,r.projection,r.view),y.yb.invert(r.inverseProjectionView,r.projectionView),n=-c*s-u,i=c*s-u,a.projection[0]=2*e.near/(i-n),a.projection[8]=(i+n)/(i-n),y.yb.mul(a.view,a.view,eL),y.yb.mul(a.projectionView,a.projection,a.view),y.yb.invert(a.inverseProjectionView,a.projectionView),r.disabled=!1,a.disabled=!1}(this.parent,this.props,this.left,this.right)}}(e_||(e_={})).is=function(e){return"left"in e&&"right"in e};class eR{constructor(){this.viewport=T.l_.create(0,0,0,0),this.view=(0,y.yb)(),this.projection=(0,y.yb)(),this.projectionView=(0,y.yb)(),this.inverseProjectionView=(0,y.yb)(),this.headRotation=(0,y.yb)(),this.viewEye=(0,y.yb)(),this.isAsymmetricProjection=!0,this.state=L.V.createDefaultSnapshot(),this.viewOffset=L.V.ViewOffset(),this.far=0,this.near=0,this.fogFar=0,this.fogNear=0,this.forceFull=!1,this.scale=0,this.minTargetDistance=0,this.disabled=!1}getRay(e,t,r){return y.yb.getTranslation(e.origin,y.yb.invert((0,y.yb)(),this.view)),y.AO.set(e.direction,t,r,.5),(0,T.$j)(e.direction,e.direction,this.viewport,this.inverseProjectionView),y.AO.normalize(e.direction,y.AO.sub(e.direction,e.direction,e.origin)),e}}let eF=y.yb.identity(),eL=y.yb.identity();function ez(e,t){T.l_.copy(t.viewport,e.viewport),y.yb.copy(t.view,e.view),y.yb.copy(t.projection,e.projection),y.yb.copy(t.headRotation,e.headRotation),L.V.copySnapshot(t.state,e.state),L.V.copyViewOffset(t.viewOffset,e.viewOffset),t.far=e.far,t.near=e.near,t.fogFar=e.fogFar,t.fogNear=e.fogNear,t.forceFull=e.forceFull,t.scale=e.scale,t.minTargetDistance=e.minTargetDistance}function eN(e,t,r,a){ez(e,t);let n=a.getViewport(r);T.l_.set(t.viewport,n.x,n.y,n.width,n.height),y.yb.fromArray(t.projection,r.projectionMatrix,0),y.yb.fromArray(t.view,r.transform.inverse.matrix,0),y.yb.mul(t.projectionView,t.projection,t.view),y.yb.invert(t.inverseProjectionView,t.projectionView),t.disabled=!1}class eG{setViewport(e,t,r,a){T.l_.set(this.viewport,e,t,r,a),this.update()}setPickPadding(e){this.pickPadding!==e&&(this.pickPadding=e,this.update())}update(){let{x:e,y:t,width:r,height:a}=this.viewport;this.pickRatio=this.pickPass.pickRatio,this.pickX=Math.ceil(e*this.pickRatio),this.pickY=Math.ceil(t*this.pickRatio);let n=Math.floor(r*this.pickRatio),i=Math.floor(a*this.pickRatio);(n!==this.pickWidth||i!==this.pickHeight)&&(this.pickWidth=n,this.pickHeight=i,this.halfPickWidth=Math.floor(this.pickWidth/2),this.buffers.setViewport(this.pickX,this.pickY,this.pickWidth,this.pickHeight)),this.spiral=(0,O.v$)(Math.ceil(this.pickRatio*this.pickPadding)),this.dirty=!0}render(e){ev.kM&&this.webgl.timer.mark("PickHelper.render",{captureStats:!0});let{pickX:t,pickY:r,pickWidth:a,pickHeight:n,halfPickWidth:i}=this,{renderer:o,scene:s,helper:l}=this;o.setTransparentBackground(!1),o.setDrawingBufferSize(a,n),o.setPixelRatio(this.pickRatio),e_.is(e)?(o.setViewport(t,r,i,n),this.pickPass.render(o,e.left,s,l),o.setViewport(t+i,r,a-i,n),this.pickPass.render(o,e.right,s,l)):(o.setViewport(t,r,a,n),this.pickPass.render(o,e,s,l)),this.dirty=!1,ev.kM&&this.webgl.timer.markEnd("PickHelper.render")}identifyInternal(e,t,r){if(this.webgl.isContextLost)return;let{webgl:a,pickRatio:n}=this;if(a.isContextLost)return;e*=a.pixelRatio,t*=a.pixelRatio,t=this.pickPass.drawingBufferHeight-t;let{viewport:i}=this;if(e<i.x||t<i.y||e>i.x+i.width||t>i.y+i.height)return;let o=e-i.x,s=t-i.y,l=Math.floor(o*n),u=Math.floor(s*n),c=this.buffers.getPickingId(l,u);if(void 0===c)return;let d=this.buffers.getDepth(l,u),p=eP.A.create(e,t,d);if(e_.is(r)){let t=Math.floor(i.width/2);e>i.x+t?(p[0]=i.x+(o-t)*2,(0,T.$j)(p,p,i,r.right.inverseProjectionView)):(p[0]=i.x+2*o,(0,T.$j)(p,p,i,r.left.inverseProjectionView))}else(0,T.$j)(p,p,i,r.inverseProjectionView);return{id:c,position:p}}prepare(){this.pickRatio!==this.pickPass.pickRatio&&this.update()}getPickData(e,t,r){for(let a of this.spiral){let n=this.identifyInternal(e+a[0],t+a[1],r);if(n)return n}}identify(e,t,r){return this.prepare(),this.dirty&&(ev.kM&&this.webgl.timer.mark("PickHelper.identify"),this.webgl.resources.finalizePrograms(["pick"],!0),this.render(r),this.buffers.read(),ev.kM&&this.webgl.timer.markEnd("PickHelper.identify")),this.getPickData(e,t,r)}asyncIdentify(e,t,r){return this.prepare(),this.dirty&&(ev.kM&&this.webgl.timer.mark("PickHelper.asyncIdentify"),this.render(r),this.buffers.asyncRead(),ev.kM&&this.webgl.timer.markEnd("PickHelper.asyncIdentify")),{tryGet:()=>{let a=this.buffers.check();return a===l.Resolved?this.getPickData(e,t,r):a===l.Pending?"pending":void(a===l.Failed&&(this.dirty=!0))}}}reset(){this.buffers.reset(),this.dirty=!0}dispose(){this.buffers.dispose()}constructor(e,t,r,a,n,i,o){this.webgl=e,this.renderer=t,this.scene=r,this.helper=a,this.pickPass=n,this.dirty=!0,this.buffers=new eM(this.webgl,this.pickPass),this.viewport=(0,T.l_)(),this.setViewport(i.x,i.y,i.width,i.height),this.pickPadding=o.pickPadding,eE(e)||(this.asyncIdentify=(e,t,r)=>({tryGet:()=>this.identify(e,t,r)}))}}let eU=`
14precision highp float;
15
16uniform sampler2D tWboitA;
17uniform sampler2D tWboitB;
18uniform vec2 uTexSize;
19
20void main() {
21    vec2 coords = gl_FragCoord.xy / uTexSize;
22
23    vec4 accum = texture2D(tWboitA, coords);
24    float r = 1.0 - accum.a;
25
26    accum.a = texture2D(tWboitB, coords).r;
27    // divisor needs to allow very small values for nice fading
28    gl_FragColor = vec4(accum.rgb / clamp(accum.a, 0.00000001, 50000.0), r);
29}
30`,eV={...ec.iz,tWboitA:(0,ed.U2)("texture","rgba","float","nearest"),tWboitB:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},ej=(0,ep.Lq)("evaluate-wboit",eh.C,eU);class eH{get supported(){return this._supported}getByteCount(){return this._supported?this.textureA.getByteCount()+this.textureB.getByteCount()+this.depthRenderbuffer.getByteCount():0}bind(){let{state:e,gl:t}=this.webgl;this.framebuffer.bind(),e.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.disable(t.DEPTH_TEST),e.blendFuncSeparate(t.ONE,t.ONE,t.ZERO,t.ONE_MINUS_SRC_ALPHA),e.enable(t.BLEND)}render(){ev.kM&&this.webgl.timer.mark("WboitPass.render");let{state:e,gl:t}=this.webgl;e.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),e.enable(t.BLEND),this.renderable.update(),this.renderable.render(),ev.kM&&this.webgl.timer.markEnd("WboitPass.render")}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.textureA.define(e,t),this.textureB.define(e,t),this.depthRenderbuffer.setSize(e,t),q.IO.update(this.renderable.values.uTexSize,y.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:e}}=this.webgl;this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1]),this.textureA.attachFramebuffer(this.framebuffer,"color0"),this.textureB.attachFramebuffer(this.framebuffer,"color1"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer)}static isSupported(e){let{extensions:{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n}}=e;if(r&&a&&n&&t)return!0;if(ev.Au){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),console.log(`Missing "${e.join('", "')}" extensions required for "wboit"`)}return!1}constructor(e,t,r){if(this.webgl=e,this._supported=!1,!eH.isSupported(e))return;let{resources:a,gl:n}=e;this.textureA=a.texture("image-float32","rgba","float","nearest"),this.textureA.define(t,r),this.textureB=a.texture("image-float32","rgba","float","nearest"),this.textureB.define(t,r),this.depthRenderbuffer=(0,eI.D0)(n)?a.renderbuffer("depth32f","depth",t,r):a.renderbuffer("depth16","depth",t,r),this.renderable=function(e,t,r){let a={...ec.GE,tWboitA:q.IO.create(t),tWboitB:q.IO.create(r),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},n={...eV},i=(0,ef.s8)(e,"triangles",ej,n,a);return(0,em.T)(i,a)}(e,this.textureA,this.textureB),this.framebuffer=a.framebuffer(),this._supported=!0,this._init()}}let eq=`
31precision highp float;
32
33uniform sampler2D tDpoitFrontColor;
34uniform vec2 uTexSize;
35
36void main() {
37    vec2 coords = gl_FragCoord.xy / uTexSize;
38    gl_FragColor = texture2D(tDpoitFrontColor, coords);
39}
40`,eX=`
41    precision highp float;
42
43    uniform sampler2D tDpoitBackColor;
44    uniform vec2 uTexSize;
45
46    void main() {
47        vec2 coords = gl_FragCoord.xy / uTexSize;
48        gl_FragColor = texture2D(tDpoitBackColor, coords);
49        if (gl_FragColor.a == 0.0) {
50            discard;
51        }
52    }
53`,eW={...ec.iz,tDpoitBackColor:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},eK=(0,ep.Lq)("blend-back-dpoit",eh.C,eX),eQ={...ec.iz,tDpoitFrontColor:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},eZ=(0,ep.Lq)("evaluate-dpoit",eh.C,eq);class eY{get supported(){return this._supported}getByteCount(){return this._supported?this.depthTextures[0].getByteCount()+this.depthTextures[1].getByteCount()+this.colorFrontTextures[0].getByteCount()+this.colorFrontTextures[1].getByteCount()+this.colorBackTextures[0].getByteCount()+this.colorBackTextures[1].getByteCount():0}bind(){let{state:e,gl:t,extensions:{blendMinMax:r}}=this.webgl;return this.passCount=0,this.depthFramebuffers[0].bind(),e.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[1].bind(),e.clearColor(-this.MIN_DEPTH,this.MAX_DEPTH,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[0].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[1].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[0].bind(),e.blendEquation(r.MAX),e.depthMask(!1),{depth:this.depthTextures[1],frontColor:this.colorFrontTextures[1],backColor:this.colorBackTextures[1]}}bindDualDepthPeeling(){let{state:e,gl:t,extensions:{blendMinMax:r}}=this.webgl;return this.readId=this.passCount%2,this.writeId=1-this.readId,this.passCount+=1,this.depthFramebuffers[this.writeId].bind(),e.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[this.writeId].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[this.writeId].bind(),e.blendEquation(r.MAX),e.depthMask(!1),{depth:this.depthTextures[this.readId],frontColor:this.colorFrontTextures[this.readId],backColor:this.colorBackTextures[this.readId]}}renderBlendBack(){ev.kM&&this.webgl.timer.mark("DpoitPass.renderBlendBack");let{state:e,gl:t}=this.webgl;e.blendEquation(t.FUNC_ADD),e.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),q.IO.update(this.blendBackRenderable.values.tDpoitBackColor,this.colorBackTextures[this.writeId]),this.blendBackRenderable.update(),this.blendBackRenderable.render(),ev.kM&&this.webgl.timer.markEnd("DpoitPass.renderBlendBack")}render(){ev.kM&&this.webgl.timer.mark("DpoitPass.render");let{state:e,gl:t}=this.webgl;e.blendEquation(t.FUNC_ADD),e.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),q.IO.update(this.renderable.values.tDpoitFrontColor,this.colorFrontTextures[this.writeId]),this.renderable.update(),this.renderable.render(),ev.kM&&this.webgl.timer.markEnd("DpoitPass.render")}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;if(e!==r||t!==a){for(let r=0;r<2;r++)this.depthTextures[r].define(e,t),this.colorFrontTextures[r].define(e,t),this.colorBackTextures[r].define(e,t);q.IO.update(this.renderable.values.uTexSize,y.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.blendBackRenderable.values.uTexSize,y.Sg.set(this.blendBackRenderable.values.uTexSize.ref.value,e,t))}}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:e}}=this.webgl;for(let t=0;t<2;t++)this.depthFramebuffers[t].bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2]),this.colorFrontTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color0"),this.colorBackTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color1"),this.depthTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color2"),this.colorFramebuffers[t].bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1]),this.colorFrontTextures[t].attachFramebuffer(this.colorFramebuffers[t],"color0"),this.colorBackTextures[t].attachFramebuffer(this.colorFramebuffers[t],"color1")}static isSupported(e){let{extensions:{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n,blendMinMax:i}}=e;if(r&&a&&n&&t&&i)return!0;
53if(ev.Au){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),i||e.push("blendMinMax"),console.log(`Missing "${e.join('", "')}" extensions required for "dpoit"`)}return!1}constructor(e,t,r){if(this.webgl=e,this.DEPTH_CLEAR_VALUE=-99999,this.MAX_DEPTH=1,this.MIN_DEPTH=0,this.passCount=0,this._supported=!1,!eY.isSupported(e))return;let{resources:a,extensions:{colorBufferHalfFloat:n,textureHalfFloat:i}}=e;(0,eI.D0)(e.gl)?(this.depthTextures=[a.texture("image-float32","rg","float","nearest"),a.texture("image-float32","rg","float","nearest")],this.colorFrontTextures=n&&i?[a.texture("image-float16","rgba","fp16","nearest"),a.texture("image-float16","rgba","fp16","nearest")]:[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=n&&i?[a.texture("image-float16","rgba","fp16","nearest"),a.texture("image-float16","rgba","fp16","nearest")]:[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")]):(this.depthTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorFrontTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")]),this.depthTextures[0].define(t,r),this.depthTextures[1].define(t,r),this.colorFrontTextures[0].define(t,r),this.colorFrontTextures[1].define(t,r),this.colorBackTextures[0].define(t,r),this.colorBackTextures[1].define(t,r),this.depthFramebuffers=[a.framebuffer(),a.framebuffer()],this.colorFramebuffers=[a.framebuffer(),a.framebuffer()],this.blendBackRenderable=function(e,t){let r={...ec.GE,tDpoitBackColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},a={...eW},n=(0,ef.s8)(e,"triangles",eK,a,r);return(0,em.T)(n,r)}(e,this.colorBackTextures[0]),this.renderable=function(e,t){let r={...ec.GE,tDpoitFrontColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},a={...eQ},n=(0,ef.s8)(e,"triangles",eZ,a,r);return(0,em.T)(n,r)}(e,this.colorFrontTextures[0]),this._supported=!0,this._init()}}let e$=`
54precision highp float;
55precision highp sampler2D;
56
57uniform vec2 uTexSizeInv;
58uniform sampler2D tEdgeTexture;
59uniform vec3 uHighlightEdgeColor;
60uniform vec3 uSelectEdgeColor;
61uniform float uHighlightEdgeStrength;
62uniform float uSelectEdgeStrength;
63uniform float uGhostEdgeStrength;
64uniform float uInnerEdgeFactor;
65
66void main() {
67    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
68    vec4 edgeValue = texture2D(tEdgeTexture, coords);
69    if (edgeValue.a > 0.0) {
70        vec3 edgeColor = edgeValue.b == 1.0 ? uHighlightEdgeColor : uSelectEdgeColor;
71        gl_FragColor.rgb = edgeValue.g > 0.0 ? edgeColor : edgeColor * uInnerEdgeFactor;
72        gl_FragColor.a = (edgeValue.r == 1.0 ? uGhostEdgeStrength : 1.0) * edgeValue.a;
73        float edgeStrength = edgeValue.b == 1.0 ? uHighlightEdgeStrength : uSelectEdgeStrength;
74        gl_FragColor.a *= edgeStrength;
75    } else {
76        gl_FragColor = vec4(0.0);
77    }
78}
79`;var eJ=r(70371);let e0=`
80precision highp float;
81precision highp sampler2D;
82
83uniform sampler2D tMaskTexture;
84uniform vec2 uTexSizeInv;
85
86void main() {
87    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
88    vec4 offset = vec4(float(dEdgeScale), 0.0, 0.0, float(dEdgeScale)) * vec4(uTexSizeInv, uTexSizeInv);
89    vec4 c0 = texture2D(tMaskTexture, coords);
90    vec4 c1 = texture2D(tMaskTexture, coords + offset.xy);
91    vec4 c2 = texture2D(tMaskTexture, coords - offset.xy);
92    vec4 c3 = texture2D(tMaskTexture, coords + offset.yw);
93    vec4 c4 = texture2D(tMaskTexture, coords - offset.yw);
94    float diff1 = (c1.r - c2.r) * 0.5;
95    float diff2 = (c3.r - c4.r) * 0.5;
96    float d = length(vec2(diff1, diff2));
97    if (d <= 0.0)
98        discard;
99    float a1 = min(c1.g, c2.g);
100    float a2 = min(c3.g, c4.g);
101    float visibility = min(a1, a2) > 0.001 ? 1.0 : 0.0;
102    float mask = c0.r;
103    float marker = min(c1.b, min(c2.b, min(c3.b, c4.b)));
104    float fogAlpha = min(c1.a, min(c2.a, min(c3.a, c4.a)));
105    gl_FragColor = vec4(visibility, mask, marker, fogAlpha);
106}
107`,e1={enabled:C.e.Boolean(!0),highlightEdgeColor:C.e.Color(eJ.Il.darken(eJ.Il.fromNormalizedRgb(1,.4,.6),1)),selectEdgeColor:C.e.Color(eJ.Il.darken(eJ.Il.fromNormalizedRgb(.2,1,.1),1)),edgeScale:C.e.Numeric(1,{min:1,max:3,step:1},{description:"Thickness of the edge."}),highlightEdgeStrength:C.e.Numeric(1,{min:0,max:1,step:.1}),selectEdgeStrength:C.e.Numeric(1,{min:0,max:1,step:.1}),ghostEdgeStrength:C.e.Numeric(.3,{min:0,max:1,step:.1},{description:"Opacity of the hidden edges that are covered by other geometry. When set to 1, one less geometry render pass is done."}),innerEdgeFactor:C.e.Numeric(1.5,{min:0,max:3,step:.1},{description:"Factor to multiply the inner edge color with - for added contrast."})};class e2{static isEnabled(e){return e.enabled}constructor(e,t,r){this.webgl=e,this.depthTarget=e.createRenderTarget(t,r),this.maskTarget=e.createRenderTarget(t,r),this.edgesTarget=e.createRenderTarget(t,r),this.edge=function(e,t){let r=t.getWidth(),a=t.getHeight(),n={...ec.GE,tMaskTexture:q.IO.create(t),uTexSizeInv:q.IO.create(y.Sg.create(1/r,1/a)),dEdgeScale:q.IO.create(1)},i={...e3},o=(0,ef.s8)(e,"triangles",e4,i,n);return(0,em.T)(o,n)}(e,this.maskTarget.texture),this.overlay=function(e,t){let r=t.getWidth(),a=t.getHeight(),n={...ec.GE,tEdgeTexture:q.IO.create(t),uTexSizeInv:q.IO.create(y.Sg.create(1/r,1/a)),uHighlightEdgeColor:q.IO.create((0,y.AO)()),uSelectEdgeColor:q.IO.create((0,y.AO)()),uHighlightEdgeStrength:q.IO.create(1),uSelectEdgeStrength:q.IO.create(1),uGhostEdgeStrength:q.IO.create(0),uInnerEdgeFactor:q.IO.create(0)},i={...e5},o=(0,ef.s8)(e,"triangles",e6,i,n);return(0,em.T)(o,n)}(e,this.edgesTarget.texture)}getByteCount(){return this.depthTarget.getByteCount()+this.maskTarget.getByteCount()+this.edgesTarget.getByteCount()}setEdgeState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.enable(t.BLEND),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)}setOverlayState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.enable(t.BLEND),r.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),r.blendEquation(t.FUNC_ADD),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o)}setSize(e,t){let r=this.depthTarget.getWidth(),a=this.depthTarget.getHeight();(e!==r||t!==a)&&(this.depthTarget.setSize(e,t),this.maskTarget.setSize(e,t),this.edgesTarget.setSize(e,t),q.IO.update(this.edge.values.uTexSizeInv,y.Sg.set(this.edge.values.uTexSizeInv.ref.value,1/e,1/t)),q.IO.update(this.overlay.values.uTexSizeInv,y.Sg.set(this.overlay.values.uTexSizeInv.ref.value,1/e,1/t)))}update(e){let{highlightEdgeColor:t,selectEdgeColor:r,edgeScale:a,innerEdgeFactor:n,ghostEdgeStrength:i,highlightEdgeStrength:o,selectEdgeStrength:s}=e,{values:l}=this.edge,u=Math.max(1,Math.round(a*this.webgl.pixelRatio));l.dEdgeScale.ref.value!==u&&(q.IO.update(l.dEdgeScale,u),this.edge.update(
107));let{values:c}=this.overlay;q.IO.update(c.uHighlightEdgeColor,eJ.Il.toVec3Normalized(c.uHighlightEdgeColor.ref.value,t)),q.IO.update(c.uSelectEdgeColor,eJ.Il.toVec3Normalized(c.uSelectEdgeColor.ref.value,r)),q.IO.updateIfChanged(c.uInnerEdgeFactor,n),q.IO.updateIfChanged(c.uGhostEdgeStrength,i),q.IO.updateIfChanged(c.uHighlightEdgeStrength,o),q.IO.updateIfChanged(c.uSelectEdgeStrength,s)}render(e,t){ev.kM&&this.webgl.timer.mark("MarkingPass.render"),this.edgesTarget.bind(),this.setEdgeState(e),this.edge.render(),t.bind(),this.setOverlayState(e),this.overlay.render(),ev.kM&&this.webgl.timer.markEnd("MarkingPass.render")}}let e3={...ec.iz,tMaskTexture:(0,ed.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,ed.wt)("v2"),dEdgeScale:(0,ed.O0)("number")},e4=(0,ep.Lq)("edge",eh.C,e0),e5={...ec.iz,tEdgeTexture:(0,ed.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,ed.wt)("v2"),uHighlightEdgeColor:(0,ed.wt)("v3"),uSelectEdgeColor:(0,ed.wt)("v3"),uHighlightEdgeStrength:(0,ed.wt)("f"),uSelectEdgeStrength:(0,ed.wt)("f"),uGhostEdgeStrength:(0,ed.wt)("f"),uInnerEdgeFactor:(0,ed.wt)("f")},e6=(0,ep.Lq)("overlay",eh.C,e$);var e8=r(12175),e7=r(57133);class e9{setTransparency(e){"wboit"===e?(this.transparencyMode=this.wboit.supported?"wboit":"blended",ev.Au&&!this.wboit.supported&&console.log('Missing "wboit" support, falling back to "blended".')):"dpoit"===e?(this.transparencyMode=this.dpoit.supported?"dpoit":"blended",ev.Au&&!this.dpoit.supported&&console.log('Missing "dpoit" support, falling back to "blended".')):this.transparencyMode="blended",this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth")}get transparency(){return this.transparencyMode}constructor(e,t,r,a,n){this.webgl=e,this.transparencyMode="blended";let{extensions:i,resources:o,isWebGL2:s}=e;this.drawTarget=e.createDrawTarget(),this.colorTarget=e.createRenderTarget(r,a,!0,"uint8","linear"),this.transparentColorTarget=e.createRenderTarget(r,a,!1,"uint8","linear"),this.packedDepth=!i.depthTexture,this.depthTargetTransparent=e.createRenderTarget(r,a),this.depthTextureTransparent=this.depthTargetTransparent.texture,this.depthTargetOpaque=this.packedDepth?e.createRenderTarget(r,a):null,this.depthTextureOpaque=this.depthTargetOpaque?this.depthTargetOpaque.texture:o.texture("image-depth","depth",s?"float":"ushort","nearest"),this.packedDepth||this.depthTextureOpaque.define(r,a),this.wboit=new eH(e,r,a),this.dpoit=new eY(e,r,a),this.marking=new e2(e,r,a),this.postprocessing=new eu.hq(e,t,this),this.antialiasing=new eu.xt(e,r,a),this.bloom=new e7.y(e,r,a),this.dof=new e8.z(e,r,a),this.copyFboTarget=(0,ec.Oz)(e,this.colorTarget.texture),this.copyFboPostprocessing=(0,ec.Oz)(e,this.postprocessing.target.texture),this.setTransparency(n)}getByteCount(){return this.drawTarget.getByteCount()+this.colorTarget.getByteCount()+this.transparentColorTarget.getByteCount()+this.depthTargetTransparent.getByteCount()+(this.depthTargetOpaque?this.depthTargetOpaque.getByteCount():this.depthTextureOpaque.getByteCount())+this.wboit.getByteCount()+this.dpoit.getByteCount()+this.marking.getByteCount()+this.postprocessing.getByteCount()+this.antialiasing.getByteCount()+this.bloom.getByteCount()+this.dof.getByteCount()}reset(){this.wboit.reset(),this.dpoit.reset(),this.postprocessing.reset()}setSize(e,t){let r=this.colorTarget.getWidth(),a=this.colorTarget.getHeight();(e!==r||t!==a)&&(this.colorTarget.setSize(e,t),this.depthTargetTransparent.setSize(e,t),this.transparentColorTarget.setSize(e,t),this.depthTargetOpaque?this.depthTargetOpaque.setSize(e,t):this.depthTextureOpaque.define(e,t),q.IO.update(this.copyFboTarget.values.uTexSize,y.Sg.set(this.copyFboTarget.values.uTexSize.ref.value,e,t)),q.IO.update(this.copyFboPostprocessing.values.uTexSize,y.Sg.set(this.copyFboPostprocessing.values.uTexSize.ref.value,e,t))),this.wboit.supported&&this.wboit.setSize(e,t),this.dpoit.supported&&this.dpoit.setSize(e,t),this.marking.setSize(e,t),this.postprocessing.setSize(e,t),this.antialiasing.setSize(e,t),this.dof.setSize(e,t),this.bloom.setSize(e,t)}_renderDpoit(e,t,r,a,n,i){if(!this.dpoit.supported)throw Error("expected dpoit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),this.depthTextureOpaque.detachFramebuffer(this.colorTarget.framebuffer,"depth"),eu.hq.isTransparentDepthRequired(r,i)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent
107(r.primitives,t,this.depthTextureOpaque));let o=eu.hq.isEnabled(i);if(r.opacityAverage<1){let n=o?this.transparentColorTarget:this.colorTarget;o&&(n.bind(),e.clear(!1,!1,!0));let i=this.dpoit.bind();e.renderDpoitTransparent(r.primitives,t,this.depthTextureOpaque,i);for(let i=0;i<a;i++){ev.kM&&this.webgl.timer.mark("DpoitPass.layer");let i=this.dpoit.bindDualDepthPeeling();e.renderDpoitTransparent(r.primitives,t,this.depthTextureOpaque,i),a>1&&(n.bind(),this.dpoit.renderBlendBack()),ev.kM&&this.webgl.timer.markEnd("DpoitPass.layer")}n.bind(),this.dpoit.render()}eu.hq.isEnabled(i)&&this.postprocessing.render(t,r,!1,n,e.props.backgroundColor,i,e.light,e.ambientColor),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.depthTextureOpaque)}_renderWboit(e,t,r,a,n){if(!this.wboit.supported)throw Error("expected wboit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),eu.hq.isTransparentDepthRequired(r,n)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.depthTextureOpaque));let i=eu.hq.isEnabled(n);if(r.opacityAverage<1){let a=i?this.transparentColorTarget:this.colorTarget;i&&(a.bind(),e.clear(!1,!1,!0)),this.wboit.bind(),e.renderWboitTransparent(r.primitives,t,this.depthTextureOpaque),a.bind(),this.wboit.render()}eu.hq.isEnabled(n)&&this.postprocessing.render(t,r,!1,a,e.props.backgroundColor,n,e.light,e.ambientColor),r.volumes.renderables.length>0&&(this.wboit.bind(),e.renderWboitTransparent(r.volumes,t,this.depthTextureOpaque),(i?this.postprocessing.target:this.colorTarget).bind(),this.wboit.render())}_renderBlended(e,t,r,a,n,i){var o,s,l,u,c,d;if(a?this.drawTarget.bind():this.packedDepth?this.colorTarget.bind():this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),a)r.opacityAverage<1&&e.renderBlendedTransparent(r.primitives,t);else{this.depthTargetOpaque&&(this.depthTargetOpaque.bind(),e.clearDepth(!0),e.renderDepthOpaque(r.primitives,t),this.colorTarget.bind()),eu.hq.isTransparentDepthRequired(r,i)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.depthTextureOpaque));let a=eu.hq.isEnabled(i);if(r.opacityAverage<1&&(a&&(this.transparentColorTarget.bind(),e.clear(!1,!1,!0),this.packedDepth?null===(o=this.colorTarget.depthRenderbuffer)||void 0===o||o.attachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.transparentColorTarget.framebuffer,"depth")),e.renderBlendedTransparent(r.primitives,t),a&&(this.packedDepth?null===(s=this.colorTarget.depthRenderbuffer)||void 0===s||s.detachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.transparentColorTarget.framebuffer,"depth"))),a&&(this.packedDepth?null===(l=this.colorTarget.depthRenderbuffer)||void 0===l||l.detachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth"),this.postprocessing.render(t,r,!1,n,e.props.backgroundColor,i,e.light,e.ambientColor),this.packedDepth?null===(u=this.colorTarget.depthRenderbuffer)||void 0===u||u.attachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.postprocessing.target.framebuffer,"depth")),r.volumes.renderables.length>0){let a=eu.hq.isEnabled(i)?this.postprocessing.target:this.colorTarget;this.packedDepth?null===(c=this.colorTarget.depthRenderbuffer)||void 0===c||c.detachFramebuffer(a.framebuffer):this.depthTextureOpaque.detachFramebuffer(a.framebuffer,"depth"),a.bind(),e.renderVolume(r.volumes,t,this.depthTextureOpaque),this.packedDepth?null===(d=this.colorTarget.depthRenderbuffer)||void 0===d||d.attachFramebuffer(a.framebuffer):this.depthTextureOpaque.attachFramebuffer(a.framebuffer,"depth"),a.bind()}}}_render(e,t,r,a,n,i,o){var s,l;if(t.disabled)return;let u=r.volumes.renderables.length>0,c=eu.hq.isEnabled(o.postprocessing),d=eu.xt.isEnabled(o.postprocessing),p=e2.isEnabled(o.marking),f=e8.z.isEnabled(o.postprocessing),m=e7.y.isEnabled(o.postprocessing),{x:h,y:g,width:b,height:y}=t.viewport;e.setViewport(h,g,b,y),e.update(t,r),i&&!d&&n&&(this.drawTarget.bind(),e.clear(!1));let x=!1;"wboit"===this.transparencyMode&&this.wboit.supported?(this._renderWboit(e,t,r,i,o.postprocessing),x=!0):"dpoit"===this.transparencyMode&&this.dpoit.supported?(this._renderDpoit(e,t,r,o.dpoitIterations,i,o.postprocessing),x=!0):this._renderBlended(e,t,r,!u&&!c&&!d&&n,i,o.postprocessing);let S=c?this.postprocessing.target:!n||u||x?this.colorTarget:this.drawTarget;if(p&&r.markerAverage>0){let a=o.marking.ghostEdgeStrength<1;a&&1!==r.markerAverage&&(this.marking.depthTarget.bind(),e.clear(!1,!0),e.renderMarkingDepth(r.primitives,t)),this.marking.maskTarget.bind(),e.clear(!1,!0),e.renderMarkingMask(r.primitives,t,a?this.marking.depthTarget.texture:null),this.marking.update(o.marking),this.marking.render(t.viewport,S)}else S.bind();a.debug.isEnabled&&(a.debug.syncVisibility(),e.renderBlended(a.debug.scene,t)),a.handle.isEnabled&&e.renderBlended(a.handle.scene,t),a.pointer.isEnabled&&(a.pointer.setCamera(t),e.update(a.pointer.camera,a.pointer.scene),e.renderBlended(a.pointer.scene,a.pointer.camera)),a.camera.isEnabled&&(a.camera.update(t),e.update(a.camera.camera,a.camera.scene),e.renderBlended(a.camera.scene,a.camera.camera));let T=!1;if(d){let e=eu.hq.isEnabled(o.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.antialiasing.render(t,e,n&&!f,o.postprocessing)}else n&&!e8.z.isEnabled(o.postprocessing)&&(T=!0);if(f&&"on"===o.postprocessing.dof.name){let e=eu.xt.isEnabled(o.postprocessing)?this.antialiasing.target.texture:eu.hq.isEnabled(o.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.dof.update(t,e,(null===(s=this.depthTargetOpaque)||void 0===s?void 0:s.texture)||this.depthTextureOpaque,this.depthTextureTransparent,o.postprocessing.dof.params,r.boundingSphereVisible),this.dof.render(t.viewport,n?void 0:this.getColorTarget(o.postprocessing))}else n&&!eu.xt.isEnabled(o.postprocessing)&&(T=!0);if(T&&(this.drawTarget.bind(),this.webgl.state.disable(this.webgl.gl.DEPTH_TEST),c?this.copyFboPostprocessing.render():(u||x)&&this.copyFboTarget.render()),m&&"on"===o.postprocessing.bloom.name){let a="emissive"===o.postprocessing.bloom.params.mode;a&&r.emissiveAverage>0&&(this.bloom.emissiveTarget.bind(),e.clear(!1,!0),e.update(t,r),e.renderEmissive(r.primitives,t)),(!a||r.emissiveAverage>0)&&(this.bloom.update(this.colorTarget.texture,this.bloom.emissiveTarget.texture,(null===(l=this.depthTargetOpaque)||void 0===l?void 0:l.texture)||this.depthTextureOpaque,o.postprocessing.bloom.params),this.bloom.render(t.viewport,n?void 0:this.getColorTarget(o.postprocessing)))}this.webgl.gl.flush()}render(e,t,r){ev.kM&&this.webgl.timer.mark("DrawPass.render");let{renderer:a,camera:n,scene:i,helper:o}=e;
107this.postprocessing.setTransparentBackground(t.transparentBackground);let s=t.transparentBackground||this.postprocessing.background.isEnabled(t.postprocessing);a.setTransparentBackground(s),a.setDrawingBufferSize(this.colorTarget.getWidth(),this.colorTarget.getHeight()),a.setPixelRatio(this.webgl.pixelRatio),e_.is(n)?(ev.kM&&this.webgl.timer.mark("StereoCamera.left"),this._render(a,n.left,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("StereoCamera.left"),ev.kM&&this.webgl.timer.mark("StereoCamera.right"),this._render(a,n.right,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("StereoCamera.right")):this._render(a,n,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("DrawPass.render")}getColorTarget(e){return e8.z.isEnabled(e)?this.dof.target:eu.xt.isEnabled(e)?this.antialiasing.target:eu.hq.isEnabled(e)?this.postprocessing.target:this.colorTarget}}(n=u||(u={})).create=function(e,t,r){return{array:e,width:t,height:r}},n.flipY=function(e){let{array:t,width:r,height:a}=e,n=t.length/(r*a),i=r*n;for(let e=0,r=a/2;e<r;++e)for(let r=0;r<i;++r){let n=e*i+r,o=(a-e-1)*i+r,s=t[n];t[n]=t[o],t[o]=s}return e},n.divideByAlpha=function(e){let{array:t}=e,r=t instanceof Uint8Array?255:1;for(let e=0,a=t.length;e<a;e+=4){let a=t[e+3]/r;t[e]/=a,t[e+1]/=a,t[e+2]/=a}return e};var te=r(19609);let tt=`
108precision highp float;
109precision highp sampler2D;
110
111uniform sampler2D tShaded;
112uniform sampler2D tColor;
113uniform sampler2D tNormal;
114uniform sampler2D tTransparentColor;
115uniform sampler2D tSsaoDepth;
116uniform sampler2D tSsaoDepthTransparent;
117uniform sampler2D tDepthOpaque;
118uniform sampler2D tDepthTransparent;
119uniform sampler2D tOutlines;
120uniform vec2 uTexSize;
121
122uniform float uNear;
123uniform float uFar;
124uniform float uFogNear;
125uniform float uFogFar;
126uniform vec3 uFogColor;
127uniform vec3 uOutlineColor;
128uniform vec3 uOcclusionColor;
129uniform bool uTransparentBackground;
130
131uniform float uDenoiseThreshold;
132
133#include common
134
135float getViewZ(const in float depth) {
136    #if dOrthographic == 1
137        return orthographicDepthToViewZ(depth, uNear, uFar);
138    #else
139        return perspectiveDepthToViewZ(depth, uNear, uFar);
140    #endif
141}
142
143float getDepthOpaque(const in vec2 coords) {
144    #ifdef depthTextureSupport
145        return texture2D(tDepthOpaque, coords).r;
146    #else
147        return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
148    #endif
149}
150
151float getDepthTransparent(const in vec2 coords) {
152    #if defined(dTransparentOutline) || defined(dOcclusionEnable)
153        return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
154    #else
155        return 1.0;
156    #endif
157}
158
159bool isBackground(const in float depth) {
160    return depth == 1.0;
161}
162
163float getSsao(vec2 coords) {
164    float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy);
165    if (rawSsao > 0.999) {
166        return 1.0;
167    } else if (rawSsao > 0.001) {
168        return rawSsao;
169    }
170    // treat values close to 0.0 as errors and return no occlusion
171    return 1.0;
172}
173
174float getSsaoTransparent(vec2 coords) {
175    float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy);
176    if (rawSsao > 0.999) {
177        return 1.0;
178    } else if (rawSsao > 0.001) {
179        return rawSsao;
180    }
181    // treat values close to 0.0 as errors and return no occlusion
182    return 1.0;
183}
184
185//
186
187// TODO: investigate
188// https://interplayoflight.wordpress.com/2022/03/26/raytraced-global-illumination-denoising/
189
190//
191
192#define INV_SQRT_OF_2PI 0.39894228040143267793994605993439  // 1.0/SQRT_OF_2PI
193#define INV_PI 0.31830988618379067153776752674503
194
195// https://github.com/BrutPitt/glslSmartDeNoise
196//
197//  smartDeNoise - parameters
198//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
199//
200//  sampler2D tex     - sampler image / texture
201//  vec2 uv           - actual fragment coord
202//  float sigma  >  0 - sigma Standard Deviation
203//  float kSigma >= 0 - sigma coefficient
204//      kSigma * sigma  -->  radius of the circular kernel
205//  float threshold   - edge sharpening threshold
206
207float NormalWeightStrength = 6.0;
208
209vec4 smartDeNoise(sampler2D tex, vec2 uv) {
210    float sigma = 3.0;
211    float kSigma = 2.0;
212    float threshold = uDenoiseThreshold;
213
214    vec4 centrPx = texture2D(tex, uv);
215    if (threshold == 0.0) return centrPx;
216
217    float invSigmaQx2 = 0.5 / (sigma * sigma);      // 1.0 / (sigma^2 * 2.0)
218    float invSigmaQx2PI = INV_PI * invSigmaQx2;    // 1.0 / (sqrt(PI) * sigma)
219
220    float invThresholdSqx2 = 0.5 / (threshold * threshold);     // 1.0 / (sigma^2 * 2.0)
221    float invThresholdSqrt2PI = INV_SQRT_OF_2PI / threshold;   // 1.0 / (sqrt(2*PI) * sigma)
222
223    float zBuff = 0.0;
224    vec4 aBuff = vec4(0.0);
225
226    vec3 normal = texture2D(tNormal, uv).xyz;
227
228    for (int x = -6; x <= 6; ++x) {
229        for (int y = -6; y <= 6; ++y) {
230            vec2 d = vec2(float(x), float(y));
231
232            float blurFactor = exp(-dot(d , d) * invSigmaQx2) * invSigmaQx2PI;
233            vec2 uvSample = uv + d / uTexSize;
234
235            vec3 normalSample = texture2D(tNormal, uvSample).xyz;
236            float normalW = saturate(dot(normal, normalSample));
237            normalW = pow(normalW, NormalWeightStrength);
238            blurFactor *= normalW;
239
240            vec4 walkPx = texture2D(tex, uvSample);
241
242            vec4 dC = walkPx - centrPx;
243            float deltaFactor = exp(-dot(dC, dC) * invThresholdSqx2) * invThresholdSqrt2PI * blurFactor;
244
245            zBuff += deltaFactor;
246            aBuff += deltaFactor * walkPx;
247        }
248    }
249
250    if (zBuff <= EPSILON) {
251        return centrPx;
252    }
253
254    return aBuff / zBuff;
255}
256
257int squaredOutlineScale = dOutlineScale * dOutlineScale;
258void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) {
259    vec2 invTexSize = 1.0 / uTexSize;
260    
261    hasOpaque = false;
262    hasTransparent = false;
263    opaqueDepth = 1.0;
264    transparentDepth = 1.0;
265    alpha = 0.0;
266    for (int y = -dOutlineScale; y <= dOutlineScale; y++) {
267        for (int x = -dOutlineScale; x <= dOutlineScale; x++) {
268            if (x * x + y * y > squaredOutlineScale) {
269                continue;
270            }
271
272            vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
273
274            vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords);
275            float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb);
276            float sampleTransparentDepth = sampleOutlineCombined.a;
277            vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r);
278
279            float sampleFlag = sampleFlagWithAlpha.x;
280            float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0);
281            
282            if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both
283                if (sampleOpaqueDepth < opaqueDepth) {
284                    hasOpaque = true;
285                    opaqueDepth = sampleOpaqueDepth;
286                }
287            }
288            
289            if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both
290                hasTransparent = true;
291                transparentDepth = sampleTransparentDepth;
292                alpha = sampleAlpha;
293            }
294        }
295    }
296}
297
298void main() {
299    vec2 coords = gl_FragCoord.xy / uTexSize;
300
301    #ifdef dDenoise
302        vec4 color = smartDeNoise(tColor, coords);
303    #else
304        vec4 color = texture2D(tColor, coords);
305    #endif
306
307    float opaqueDepth = getDepthOpaque(coords);
308    float backgroundViewZ = 2.0 * uFar;
309    float opaqueSelfViewZ = isBackground(opaqueDepth) ? backgroundViewZ : getViewZ(opaqueDepth);
310    float fogFactor = smoothstep(uFogNear, uFogFar, abs(opaqueSelfViewZ));
311    float fogAlpha = 1.0 - fogFactor;
312
313    float transparentDepth = 1.0;
314    #ifdef dBlendTransparency
315        bool blendTransparency = true;
316        vec4 transparentColor = texture2D(tTransparentColor, coords);
317
318        transparentDepth = getDepthTransparent(coords);
319    #endif
320
321    float alpha = 1.0;
322    if (!uTransparentBackground) {
323        // mix opaque objects with background color
324        color.rgb = mix(color.rgb, uFogColor, fogFactor);
325    } else {
326        // pre-multiplied alpha expected for transparent background
327        alpha = fogAlpha;
328        color.rgb *= fogAlpha;
329    }
330
331    #if defined(dOcclusionEnable)
332        if (!isBackground(opaqueDepth)) {
333            float occlusionFactor = getSsao(coords);
334
335            if (!uTransparentBackground) {
336                color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor);
337            } else {
338                color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor);
339            }
340        }
341        #ifdef dBlendTransparency
342            if (!isBackground(transparentDepth)) {
343                float viewDist = abs(getViewZ(transparentDepth));
344                float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
345                float occlusionFactor = getSsaoTransparent(coords);
346                transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor);
347            }
348        #endif
349    #endif
350
351    #ifdef dOutlineEnable
352        bool hasOpaque;
353        bool hasTransparent;
354        float outlineOpaqueDepth;
355        float outlineTransparentDepth;
356        float outlineAlpha;
357        getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha);
358
359        if (hasOpaque) {
360            float viewDist = abs(getViewZ(outlineOpaqueDepth));
361            float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
362            if (!uTransparentBackground) {                    
363                color.rgb = mix(uOutlineColor, uFogColor, fogFactor);
364            } else {
365                alpha = 1.0 - fogFactor;
366                color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor);
367            }
368        }  
369
370        #ifdef dBlendTransparency            
371            if (hasTransparent) {
372                if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) {
373                    blendTransparency = false;
374                } else {
375                    float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0);
376                    float viewDist = abs(getViewZ(outlineTransparentDepth));
377                    float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
378                    float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor));
379                    transparentColor.a = finalAlpha;
380                    transparentColor.rgb = uOutlineColor * finalAlpha;
381                }
382            }
383        #endif
384    #endif
385
386    #ifdef dBlendTransparency
387        if (blendTransparency) {
388            if (transparentColor.a != 0.0) {
389                // blending
390                color = transparentColor + color * (1.0 - transparentColor.a);
391                alpha = transparentColor.a + alpha * (1.0 - transparentColor.a);
392            }
393        }
394    #endif
395
396    gl_FragColor = vec4(color.rgb, alpha);
397}
398`;var tr=r(81458),ta=r(34602);let tn=`
399precision highp int;
400precision highp float;
401precision highp sampler2D;
402
403uniform sampler2D tColor;
404uniform sampler2D tNormal;
405uniform sampler2D tShaded;
406uniform sampler2D tThickness;
407uniform sampler2D tAccumulate;
408uniform sampler2D tDepth;
409uniform vec2 uTexSize;
410uniform vec4 uBounds;
411
412uniform float uNear;
413uniform float uFar;
414uniform float uFogNear;
415uniform float uFogFar;
416uniform vec3 uFogColor;
417
418#if dLightCount != 0
419    uniform vec3 uLightDirection[dLightCount];
420    uniform vec3 uLightColor[dLightCount];
421#endif
422uniform vec3 uAmbientColor;
423uniform vec3 uLightStrength;
424
425uniform int uFrameNo;
426
427uniform float uRayDistance;
428uniform float uMinThickness;
429uniform float uThicknessFactor;
430uniform float uThickness;
431
432uniform float uShadowSoftness;
433uniform float uShadowThickness;
434
435uniform mat4 uProjection;
436uniform mat4 uInvProjection;
437
438#include common
439
440// parts adapted from
441// - https://blog.demofox.org/2020/05/25/casual-shadertoy-path-tracing-1-basic-camera-diffuse-emissive/
442// - https://github.com/0beqz/realism-effects/blob/v2-debug/src/ssgi/shader/ssgi.frag
443
444//
445
446// after a hit, it moves the ray this far along the normal away from a surface.
447// Helps prevent incorrect intersections when rays bounce off of objects.
448#define RayPosNormalNudge 0.0001
449
450#if __VERSION__ == 100
451    #define StateType float
452
453    // from https://www.shadertoy.com/view/4djSRW
454    float hash14(vec4 p4) {
455        p4 = fract(p4  * vec4(0.1031, 0.1030, 0.0973, 0.1099));
456        p4 += dot(p4, p4.wzxy + 33.33);
457        return fract((p4.x + p4.y) * (p4.z + p4.w));
458    }
459
460    float randomFloat(inout float state) {
461        state += 0.06711056;
462        return 1.0 - hash14(vec4(gl_FragCoord.xy, float(uFrameNo), state));
463    }
464#else
465    #define StateType uint
466
467    // https://www.pcg-random.org/
468    // https://jcgt.org/published/0009/03/02/
469    uint pcg(inout uint seed) {
470        seed = seed * 747796405u + 2891336453u;
471        uint word = ((seed >> ((seed >> 28u) + 4u)) ^ seed) * 277803737u;
472        return (word >> 22u) ^ word;
473    }
474
475    float randomFloat(inout uint state) {
476        return float(pcg(state)) / 4294967296.0;
477    }
478#endif
479
480vec3 randomUnitVector(inout StateType state) {
481    float z = randomFloat(state) * 2.0 - 1.0;
482    float a = randomFloat(state) * TWO_PI;
483    float r = sqrt(1.0 - z * z);
484    float x = r * cos(a);
485    float y = r * sin(a);
486    return vec3(x, y, z);
487}
488
489struct RayHitInfo {
490    bool missed;
491    vec3 position;
492    vec3 normal;
493    vec3 color;
494    vec3 emissive;
495};
496
497//
498
499float getDepth(const in vec2 coords) {
500    vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
501    return texture2D(tDepth, c).r;
502}
503
504float getThickness(const in vec2 coords) {
505    vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
506    return unpackRGBAToDepth(texture2D(tThickness, c));
507}
508
509bool isBackground(const in float depth) {
510    return depth == 1.0;
511}
512
513float getViewZ(const in float depth) {
514    #if dOrthographic == 1
515        return orthographicDepthToViewZ(depth, uNear, uFar);
516    #else
517        return perspectiveDepthToViewZ(depth, uNear, uFar);
518    #endif
519}
520
521vec2 viewSpaceToScreenSpace(const vec3 position) {
522    vec4 projectedCoord = uProjection * vec4(position, 1.0);
523    projectedCoord.xy /= projectedCoord.w;
524    // [-1, 1] --> [0, 1] (NDC to screen position)
525    projectedCoord.xy = projectedCoord.xy * 0.5 + 0.5;
526    return projectedCoord.xy;
527}
528
529vec2 binarySearch(inout vec3 dir, inout vec3 hitPos) {
530    float rayHitDepthDifference;
531    vec2 coords;
532
533    dir *= 0.5;
534    hitPos -= dir;
535
536    for (int i = 0; i < dRefineSteps; i++) {
537        coords = viewSpaceToScreenSpace(hitPos);
538        float depth = getDepth(coords);
539        float z = getViewZ(depth);
540        rayHitDepthDifference = z - hitPos.z;
541
542        dir *= 0.5;
543        if (rayHitDepthDifference >= 0.0) {
544            hitPos -= dir;
545        } else {
546            hitPos += dir;
547        }
548    }
549
550    coords = viewSpaceToScreenSpace(hitPos);
551
552    return coords;
553}
554
555float calculateGrowthFactor(float begin, float end, float steps) {
556    return pow(end / begin, 1.0 / steps);
557}
558
559vec2 rayMarch(in vec3 dir, in float thickness, inout vec3 hitPos, out bool missed) {
560    float rayHitDepthDifference;
561    vec2 coords;
562
563    float begin = float(dFirstStepSize);
564    dir *= begin;
565    missed = false;
566    float gf = calculateGrowthFactor(begin, uRayDistance, float(dSteps));
567
568    for (int i = 1; i < dSteps; i++) {
569        hitPos += dir;
570        dir *= gf;
571
572        coords = viewSpaceToScreenSpace(hitPos);
573        float depth = getDepth(coords);
574        float z = getViewZ(depth);
575        rayHitDepthDifference = z - hitPos.z;
576
577        if (thickness == 0.0) {
578            #ifdef dThicknessMode_auto
579                thickness = max(uMinThickness, (getViewZ(getThickness(coords)) - z) * uThicknessFactor * texture2D(tColor, coords).a);
580            #else
581                thickness = uThickness;
582            #endif
583        }
584
585        if (rayHitDepthDifference >= 0.0 && rayHitDepthDifference < thickness) {
586            if (dRefineSteps == 0) {
587                return coords;
588            } else {
589                return binarySearch(dir, hitPos);
590            }
591        }
592    }
593
594    missed = true;
595
596    return coords;
597}
598
599//
600
601void trace(in vec3 rayPos, in vec3 rayDir, inout RayHitInfo hitInfo) {
602    vec3 hitPos = vec3(rayPos);
603    bool missed;
604    vec2 coords;
605    coords = rayMarch(rayDir, 0.0, hitPos, missed);
606
607    hitInfo.missed = missed;
608    hitInfo.position = hitPos;
609    hitInfo.normal = -texture2D(tNormal, coords).rgb;
610    hitInfo.color = texture2D(tColor, coords).rgb;
611    hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a * 2.0;
612
613    float depth = getDepth(coords);
614    if (isBackground(depth)) {
615        hitInfo.emissive = vec3(0.0);
616    }
617}
618
619vec3 viewPos;
620
621vec3 colorForRay(in vec3 startRayPos, in vec3 startRayDir, inout StateType rngState) {
622    vec3 ret = vec3(0.0, 0.0, 0.0);
623
624    vec3 throughput = vec3(1.0, 1.0, 1.0);
625    vec3 rayPos = startRayPos;
626    vec3 rayDir = startRayDir;
627
628    RayHitInfo hitInfo;
629    RayHitInfo prevHitInfo;
630
631    for (int bounceIndex = 0; bounceIndex <= dBounces; ++bounceIndex) {
632        // shoot a ray out into the world
633        if (bounceIndex == 0) {
634            vec2 coords = gl_FragCoord.xy / uTexSize;
635            float depth = getDepth(coords);
636
637            hitInfo.missed = false;
638            hitInfo.position = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
639            hitInfo.normal = -texture2D(tNormal, coords).rgb;
640            hitInfo.color = texture2D(tShaded, coords).rgb;
641            hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a;
642
643            // shadow
644            #ifdef dShadowEnable
645                #if dLightCount != 0
646                    vec3 directLight = vec3(uAmbientColor);
647                    #pragma unroll_loop_start
648                    bool missed;
649                    vec3 hitPos;
650                    for (int i = 0; i < dLightCount; ++i) {
651                        missed = false;
652                        hitPos = viewPos + hitInfo.normal * RayPosNormalNudge;
653                        hitPos += -uLightDirection[i] * (randomFloat(rngState));
654                        rayMarch(-uLightDirection[i] + randomUnitVector(rngState) * uShadowSoftness, uShadowThickness, hitPos, missed);
655                        if (missed) directLight += uLightColor[i];
656                    }
657                    #pragma unroll_loop_end
658                    hitInfo.color *= directLight / uLightStrength;
659                #endif
660            #endif
661
662            if (hitInfo.normal == vec3(0.0)) {
663                hitInfo.missed = true;
664            }
665        } else {
666            prevHitInfo = hitInfo;
667            trace(rayPos, rayDir, hitInfo);
668        }
669
670        // if the ray missed, we are done
671        if (hitInfo.missed) {
672            vec3 accIrradiance = vec3(1.0);
673            #ifdef dGlow
674                if (bounceIndex > 1) {
675                    accIrradiance = uLightStrength;
676                }
677            #else
678                if (bounceIndex > 1) {
679                    accIrradiance = uAmbientColor;
680                    #if dLightCount != 0
681                        #pragma unroll_loop_start
682                        float dotNL;
683                        vec3 irradiance;
684                        for (int i = 0; i < dLightCount; ++i) {
685                            dotNL = saturate(dot(prevHitInfo.normal, -uLightDirection[i]));
686                            irradiance = dotNL * uLightColor[i];
687                            accIrradiance += irradiance;
688                        }
689                        #pragma unroll_loop_end
690                    #endif
691                }
692            #endif
693            ret += prevHitInfo.color * accIrradiance * throughput;
694            break;
695        }
696
697        // add emissive light
698        ret += hitInfo.emissive * throughput;
699
700        // update the ray position
701        rayPos = hitInfo.position + hitInfo.normal * RayPosNormalNudge;
702
703        // new ray direction from normal oriented cosine weighted hemisphere sample
704        rayDir = normalize(hitInfo.normal + randomUnitVector(rngState));
705
706        if (bounceIndex == 0) {
707            continue;
708        }
709
710        // update the colorMultiplier.
711        throughput *= hitInfo.color;
712
713        // Russian Roulette
714        // As the throughput gets smaller, the ray is more likely to get terminated early.
715        // Survivors have their value boosted to make up for fewer samples being in the average.
716        {
717            float p = max(throughput.r, max(throughput.g, throughput.b));
718            if (randomFloat(rngState) > p)
719                break;
720
721            // Add the energy we 'lose' by randomly terminating paths
722            throughput *= 1.0 / p;
723        }
724    }
725
726    // return pixel color
727    return ret;
728}
729
730void main() {
731    vec2 coords = gl_FragCoord.xy / uTexSize;
732    float depth = getDepth(coords);
733
734    if (isBackground(depth)) {
735        gl_FragColor = texture2D(tColor, coords);
736        return;
737    }
738
739    #if __VERSION__ == 100
740        float rngState = 26699.0;
741    #else
742        // initialize a random number state based on gl_FragCoord and uFrameNo
743        uint rngState = uint(uint(gl_FragCoord.x) * 1973u + uint(gl_FragCoord.y) * 9277u + uint(uFrameNo) * 26699u) | 1u;
744    #endif
745
746    vec3 cameraPos = vec3(0.0, 0.0, 0.0);
747    viewPos = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
748    vec3 rayDir = normalize(viewPos);
749
750    // raytrace for this pixel
751    vec3 color = vec3(0.0, 0.0, 0.0);
752    for (int index = 0; index < int(dRendersPerFrame); ++index) {
753        color += colorForRay(cameraPos, rayDir, rngState) / float(dRendersPerFrame);
754    }
755
756    // average the frames together
757    vec4 lastFrameColor = texture2D(tAccumulate, coords);
758    float blend = (uFrameNo < 1 || lastFrameColor.a == 0.0) ? 1.0 : 1.0 / (1.0 + (1.0 / lastFrameColor.a));
759    color = mix(lastFrameColor.rgb, color, blend);
760
761    // show the result
762    gl_FragColor = vec4(color, blend);
763}
764`;var ti=r(38675),to=r(22934);let ts=`
765precision highp float;
766precision highp sampler2D;
767
768uniform sampler2D tColor;
769uniform vec2 uTexSize;
770uniform float uWeight;
771
772void main() {
773    vec2 coords = gl_FragCoord.xy / uTexSize;
774    gl_FragColor = texture2D(tColor, coords) * uWeight;
775}
776`;var tl=r(23833);let tu={rendersPerFrame:C.e.Interval([1,16],{min:1,max:64,step:1},{description:"Number of rays per pixel each frame. May be adjusted to reach targetFps but will stay within given interval."}),targetFps:C.e.Numeric(30,{min:0,max:120,step:.1},{description:"Target FPS per frame. If observed FPS is lower or higher, some parameters may get adjusted."}),steps:C.e.Numeric(32,{min:1,max:1024,step:1}),firstStepSize:C.e.Numeric(.01,{min:.001,max:1,step:.001}),refineSteps:C.e.Numeric(4,{min:0,max:8,step:1},{description:"Number of refine steps per ray hit. May be lower to reach targetFps."}),rayDistance:C.e.Numeric(256,{min:1,max:8192,step:1},{description:"Maximum distance a ray can travel (in world units)."}),thicknessMode:C.e.Select("auto",C.e.arrayToOptions(["auto","fixed"])),minThickness:C.e.Numeric(.5,{min:.1,max:16,step:.1},{hideIf:e=>"fixed"===e.thicknessMode}),thicknessFactor:C.e.Numeric(1,{min:.1,max:2,step:.05},{hideIf:e=>"fixed"===e.thicknessMode}),thickness:C.e.Numeric(4,{min:.1,max:512,step:.1},{hideIf:e=>"auto"===e.thicknessMode}),bounces:C.e.Numeric(4,{min:1,max:32,step:1},{description:"Number of bounces for each ray."}),glow:C.e.Boolean(!0,{description:"Bounced rays always get the full light. This produces a slight glowing effect."}),shadowEnable:C.e.Boolean(!1),shadowSoftness:C.e.Numeric(.1,{min:.01,max:1,step:.01}),shadowThickness:C.e.Numeric(.5,{min:.1,max:32,step:.1})};class tc{constructor(e,t){this.webgl=e,this.drawPass=t,this.clearAdjustedProps=!0,this.prevTime=0,this.currTime=0,this.rendersPerFrame=1,this.refineSteps=1,this.steps=16;let{extensions:{drawBuffers:r,colorBufferHalfFloat:a,textureHalfFloat:n},resources:i,isWebGL2:o}=e,{depthTextureOpaque:s}=t,l=s.getWidth(),u=s.getHeight();o?(this.shadedTextureOpaque=i.texture("image-uint8","rgba","ubyte","nearest"),this.shadedTextureOpaque.define(l,u),this.normalTextureOpaque=a&&n?i.texture("image-float16","rgba","fp16","nearest"):i.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(l,u),this.colorTextureOpaque=i.texture("image-uint8","rgba","ubyte","nearest")):(this.shadedTextureOpaque=i.texture("image-float32","rgba","float","nearest"),this.shadedTextureOpaque.define(l,u),this.normalTextureOpaque=i.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(l,u),this.colorTextureOpaque=i.texture("image-float32","rgba","float","nearest")),this.colorTextureOpaque.define(l,u),this.framebuffer=i.framebuffer(),this.framebuffer.bind(),r.drawBuffers([r.COLOR_ATTACHMENT0,r.COLOR_ATTACHMENT1,r.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.thicknessTarget=e.createRenderTarget(l,u,!0,"uint8","nearest"),this.holdTarget=e.createRenderTarget(l,u,!1,"float32"),this.accumulateTarget=e.createRenderTarget(l,u,!1,"float32"),this.composeTarget=e.createRenderTarget(l,u,!1,"uint8","linear"),this.traceRenderable=function(e,t,r,a,n,i,o){let s={...ec.GE,tColor:q.IO.create(t),tNormal:q.IO.create(r),t
776Shaded:q.IO.create(a),tThickness:q.IO.create(n),tAccumulate:q.IO.create(i),tDepth:q.IO.create(o),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),dOrthographic:q.IO.create(0),uNear:q.IO.create(1),uFar:q.IO.create(1e4),uFogNear:q.IO.create(1e4),uFogFar:q.IO.create(1e4),uFogColor:q.IO.create(eP.A.create(1,1,1)),uProjection:q.IO.create(ti.y.identity()),uInvProjection:q.IO.create(ti.y.identity()),uBounds:q.IO.create((0,to.T)()),uLightDirection:q.IO.create([]),uLightColor:q.IO.create([]),dLightCount:q.IO.create(0),uAmbientColor:q.IO.create((0,eP.A)()),uLightStrength:q.IO.create(eP.A.create(1,1,1)),uFrameNo:q.IO.create(0),dRendersPerFrame:q.IO.create(1),dGlow:q.IO.create(!0),dBounces:q.IO.create(4),dSteps:q.IO.create(32),dFirstStepSize:q.IO.create(.01),dRefineSteps:q.IO.create(4),uRayDistance:q.IO.create(256),dThicknessMode:q.IO.create("auto"),uMinThickness:q.IO.create(.5),uThicknessFactor:q.IO.create(1),uThickness:q.IO.create(4),dShadowEnable:q.IO.create(!1),uShadowSoftness:q.IO.create(.1),uShadowThickness:q.IO.create(.1)},l={...td},u=(0,ef.s8)(e,"triangles",tp,l,s);return(0,em.T)(u,s)}(e,this.colorTextureOpaque,this.normalTextureOpaque,this.shadedTextureOpaque,this.thicknessTarget.texture,this.accumulateTarget.texture,this.drawPass.depthTextureOpaque),this.accumulateRenderable=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...tf},n=(0,ef.s8)(e,"triangles",tm,a,r);return(0,em.T)(n,r)}(e,this.holdTarget.texture)}getByteCount(){return this.thicknessTarget.getByteCount()+this.holdTarget.getByteCount()+this.accumulateTarget.getByteCount()+this.composeTarget.getByteCount()+this.colorTextureOpaque.getByteCount()+this.normalTextureOpaque.getByteCount()+this.shadedTextureOpaque.getByteCount()}renderInput(e,t,r,a){ev.kM&&this.webgl.timer.mark("TracePass.renderInput");let{gl:n,state:i}=this.webgl;this.framebuffer.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.framebuffer,"depth"),e.clear(!0),e.renderTracing(r.primitives,t),"auto"===a.thicknessMode&&(this.thicknessTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),e.renderDepthOpaqueBack(r.primitives,t)),ev.kM&&this.webgl.timer.markEnd("TracePass.renderInput")}setSize(e,t){let r=this.composeTarget.getWidth(),a=this.composeTarget.getHeight();(e!==r||t!==a)&&(this.thicknessTarget.setSize(e,t),this.holdTarget.setSize(e,t),this.accumulateTarget.setSize(e,t),this.composeTarget.setSize(e,t),this.colorTextureOpaque.define(e,t),this.normalTextureOpaque.define(e,t),this.shadedTextureOpaque.define(e,t),q.IO.update(this.traceRenderable.values.uTexSize,tr.S.set(this.traceRenderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.accumulateRenderable.values.uTexSize,tr.S.set(this.accumulateRenderable.values.uTexSize.ref.value,e,t)))}reset(){let{drawBuffers:e}=this.webgl.extensions;this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.restart(!0)}restart(e=!1){let{gl:t,state:r}=this.webgl;this.accumulateTarget.bind(),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.composeTarget.bind(),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),e&&(this.prevTime=0,this.currTime=0,this.clearAdjustedProps=!0)}increaseAdjustedProps(e){this.steps+=1,this.steps>e.steps&&(this.refineSteps+=1),this.refineSteps>e.refineSteps&&(this.rendersPerFrame+=1)}decreaseAdjustedProps(e){let t=Math.min(1,e.refineSteps);this.rendersPerFrame-=1,this.rendersPerFrame<1&&(this.refineSteps-=1),this.refineSteps<t&&(this.steps-=1)}getAdjustedProps(e,t){this.currTime=(0,b.z)();let r=Math.min(1,e.refineSteps),a=Math.round(e.steps/2);if(this.clearAdjustedProps&&(this.rendersPerFrame=e.rendersPerFrame[0],this.refineSteps=r,this.steps=a,this.clearAdjustedProps=!1),t>0){let t=1e3/e.targetFps,r=this.currTime-this.prevTime,a=Math.round(r/t);
776if(a>=2)for(;a>0;)this.decreaseAdjustedProps(e),a-=1;else r<t?this.increaseAdjustedProps(e):r>t+.5&&this.decreaseAdjustedProps(e)}return this.prevTime=this.currTime,this.rendersPerFrame=(0,tl.uZ)(this.rendersPerFrame,e.rendersPerFrame[0],e.rendersPerFrame[1]),this.refineSteps=(0,tl.uZ)(this.refineSteps,r,e.refineSteps),this.steps=(0,tl.uZ)(this.steps,a,e.steps),{rendersPerFrame:0===t?Math.ceil(this.rendersPerFrame/2):this.rendersPerFrame,refineSteps:0===t?r:this.refineSteps,steps:0===t?a:this.steps}}render(e,t,r,a,n){let{rendersPerFrame:i,refineSteps:o,steps:s}=this.getAdjustedProps(r,a);ev.kM&&this.webgl.timer.mark("TracePass.render",{note:`${i} rendersPerFrame, ${o} refineSteps, ${s} steps`});let{renderer:l,camera:u,scene:c}=e,{gl:d,state:p}=this.webgl,{x:f,y:m,width:h,height:g}=u.viewport;(0===a||n)&&(l.setTransparentBackground(t),l.setDrawingBufferSize(this.composeTarget.getWidth(),this.composeTarget.getHeight()),l.setPixelRatio(this.webgl.pixelRatio),l.setViewport(f,m,h,g),l.update(u,c),this.renderInput(l,u,c,r)),p.disable(d.BLEND),p.disable(d.DEPTH_TEST),p.disable(d.CULL_FACE),p.depthMask(!1),p.viewport(f,m,h,g),p.scissor(f,m,h,g);let b=ti.y.identity();ti.y.invert(b,u.projection);let y="orthographic"===u.state.mode?1:0,[x,S]=this.traceRenderable.values.uTexSize.ref.value,T=u.viewport,C=(0,eP.A)();eP.A.scale(C,ta.Il.toArrayNormalized(l.props.ambientColor,C,0),l.props.ambientIntensity);let O=eP.A.clone(C);for(let e=0,t=l.light.count;e<t;++e){let t=eP.A.fromArray((0,eP.A)(),l.light.color,3*e);eP.A.add(O,O,t)}this.holdTarget.bind();let I=!1;q.IO.update(this.traceRenderable.values.uFrameNo,a),this.traceRenderable.values.dRendersPerFrame.ref.value!==i&&(q.IO.update(this.traceRenderable.values.dRendersPerFrame,i),I=!0),q.IO.update(this.traceRenderable.values.uProjection,u.projection),q.IO.update(this.traceRenderable.values.uInvProjection,b),to.T.set(this.traceRenderable.values.uBounds.ref.value,T.x/x,T.y/S,(T.x+T.width)/x,(T.y+T.height)/S),q.IO.update(this.traceRenderable.values.uBounds,this.traceRenderable.values.uBounds.ref.value),q.IO.updateIfChanged(this.traceRenderable.values.uNear,u.near),q.IO.updateIfChanged(this.traceRenderable.values.uFar,u.far),q.IO.updateIfChanged(this.traceRenderable.values.uFogFar,u.fogFar),q.IO.updateIfChanged(this.traceRenderable.values.uFogNear,u.fogNear),q.IO.update(this.traceRenderable.values.uFogColor,ta.Il.toVec3Normalized(this.traceRenderable.values.uFogColor.ref.value,l.props.backgroundColor)),this.traceRenderable.values.dOrthographic.ref.value!==y&&(q.IO.update(this.traceRenderable.values.dOrthographic,y),I=!0),q.IO.update(this.traceRenderable.values.uLightDirection,l.light.direction),q.IO.update(this.traceRenderable.values.uLightColor,l.light.color),this.traceRenderable.values.dLightCount.ref.value!==l.light.count&&(q.IO.update(this.traceRenderable.values.dLightCount,l.light.count),I=!0),q.IO.update(this.traceRenderable.values.uAmbientColor,C),q.IO.update(this.traceRenderable.values.uLightStrength,O),this.traceRenderable.values.dGlow.ref.value!==r.glow&&(q.IO.update(this.traceRenderable.values.dGlow,r.glow),I=!0),this.traceRenderable.values.dBounces.ref.value!==r.bounces&&(q.IO.update(this.traceRenderable.values.dBounces,r.bounces),I=!0),this.traceRenderable.values.dSteps.ref.value!==s&&(q.IO.update(this.traceRenderable.values.dSteps,s),I=!0),this.traceRenderable.values.dFirstStepSize.ref.value!==r.firstStepSize&&(q.IO.update(this.traceRenderable.values.dFirstStepSize,r.firstStepSize),I=!0),this.traceRenderable.values.dRefineSteps.ref.value!==o&&(q.IO.update(this.traceRenderable.values.dRefineSteps,o),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uRayDistance,r.rayDistance),this.traceRenderable.values.dThicknessMode.ref.value!==r.thicknessMode&&(q.IO.update(this.traceRenderable.values.dThicknessMode,r.thicknessMode),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uMinThickness,r.minThickness),q.IO.updateIfChanged(this.traceRenderable.values.uThicknessFactor,r.thicknessFactor),q.IO.updateIfChanged(this.traceRenderable.values.uThickness,r.thickness),this.traceRenderable.values.dShadowEnable.ref.value!==r.shadowEnable&&(q.IO.update(this.traceRenderable.values.dShadowEnable,r.shadowEnable),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uShadowSoftness,r.shadowSoftness),q.IO.updateIfChanged(this.traceRenderable.values.uShadowThickness,r.shadowThickness),I&&this.traceRenderable.update(
776),ev.kM&&this.webgl.timer.mark("TracePass.renderTrace"),this.traceRenderable.render(),ev.kM&&this.webgl.timer.markEnd("TracePass.renderTrace"),this.accumulateTarget.bind(),this.accumulateRenderable.render(),ev.kM&&this.webgl.timer.markEnd("TracePass.render")}}let td={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),tNormal:(0,ed.U2)("texture","rgba","ubyte","nearest"),tShaded:(0,ed.U2)("texture","rgba","ubyte","nearest"),tThickness:(0,ed.U2)("texture","rgba","ubyte","nearest"),tAccumulate:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepth:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),dOrthographic:(0,ed.O0)("number"),uNear:(0,ed.wt)("f"),uFar:(0,ed.wt)("f"),uFogNear:(0,ed.wt)("f"),uFogFar:(0,ed.wt)("f"),uFogColor:(0,ed.wt)("v3"),uProjection:(0,ed.wt)("m4"),uInvProjection:(0,ed.wt)("m4"),uBounds:(0,ed.wt)("v4"),uLightDirection:(0,ed.wt)("v3[]"),uLightColor:(0,ed.wt)("v3[]"),dLightCount:(0,ed.O0)("number"),uAmbientColor:(0,ed.wt)("v3"),uLightStrength:(0,ed.wt)("v3"),uFrameNo:(0,ed.wt)("i"),dRendersPerFrame:(0,ed.O0)("number"),dGlow:(0,ed.O0)("boolean"),dBounces:(0,ed.O0)("number"),dSteps:(0,ed.O0)("number"),dFirstStepSize:(0,ed.O0)("number"),dRefineSteps:(0,ed.O0)("number"),uRayDistance:(0,ed.wt)("f"),dThicknessMode:(0,ed.O0)("string"),uMinThickness:(0,ed.wt)("f"),uThicknessFactor:(0,ed.wt)("f"),uThickness:(0,ed.wt)("f"),dShadowEnable:(0,ed.O0)("boolean"),uShadowSoftness:(0,ed.wt)("f"),uShadowThickness:(0,ed.wt)("f")},tp=(0,ep.Lq)("trace",eh.C,tn),tf={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},tm=(0,ep.Lq)("accumulate",eh.C,ts);var th=r(59978);let tg=!1;function tv(e){let{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n}=e.extensions;if(r&&a&&n&&t)return!0;if(ev.Au&&!tg){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),console.log(`Missing "${e.join('", "')}" extensions required for "illumination"`),tg=!0}return!1}let tb={enabled:C.e.Boolean(!1),maxIterations:C.e.Numeric(5,{min:0,max:16,step:1},{description:"Maximum number of tracing iterations. Final iteration count is 2^x."}),denoise:C.e.Boolean(!0),denoiseThreshold:C.e.Interval([.15,1],{min:0,max:4,step:.01},{description:"Threshold for denoising. Automatically adjusted within given interval based on current iteration."}),ignoreOutline:C.e.Boolean(!0,{description:"Ignore outline in illumination pass where it is generally not needed for visual clarity. Useful when illumination is often toggled on/off."}),...tu};class ty{get iteration(){return this._iteration}get colorTarget(){return this._colorTarget}get supported(){return this._supported}getByteCount(){return this._supported?this.tracing.getByteCount()+this.transparentTarget.getByteCount()+this.outputTarget.getByteCount()+this.multiSampleComposeTarget.getByteCount()+this.multiSampleHoldTarget.getByteCount()+this.multiSampleAccumulateTarget.getByteCount():0}getMaxIterations(e){return Math.pow(2,e.maxIterations)}static isSupported(e){return tv(e)}static isEnabled(e,t){return t.enabled&&tv(e)}constructor(e,t){if(this.webgl=e,this.drawPass=t,this._iteration=0,this._supported=!1,this.prevSampleIndex=-1,!ty.isSupported(e))return;let{colorTarget:r}=t,a=r.getWidth(),n=r.getHeight();this.tracing=new tc(e,this.drawPass),this.transparentTarget=e.createRenderTarget(a,n,!1,"uint8","nearest"),this.outputTarget=e.createRenderTarget(a,n,!1,"uint8","linear"),this.copyRenderable=(0,ec.Oz)(e,this.transparentTarget.texture),this.composeRenderable=function(e,t,r,a,n,i,o,s,l,u,c){let d={...ec.GE,tColor:q.IO.create(t),tNormal:q.IO.create(r),t
776Shaded:q.IO.create(a),tTransparentColor:q.IO.create(s),dBlendTransparency:q.IO.create(!0),tSsaoDepth:q.IO.create(l),tSsaoDepthTransparent:q.IO.create(u),tDepthOpaque:q.IO.create(n),tDepthTransparent:q.IO.create(i),tOutlines:q.IO.create(o),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),dDenoise:q.IO.create(!0),uDenoiseThreshold:q.IO.create(.1),dOrthographic:q.IO.create(0),uNear:q.IO.create(1),uFar:q.IO.create(1e4),uFogNear:q.IO.create(1e4),uFogFar:q.IO.create(1e4),uFogColor:q.IO.create(eP.A.create(1,1,1)),uOutlineColor:q.IO.create(eP.A.create(0,0,0)),uOcclusionColor:q.IO.create(eP.A.create(0,0,0)),uTransparentBackground:q.IO.create(!1),dOcclusionEnable:q.IO.create(!1),dOutlineEnable:q.IO.create(!1),dOutlineScale:q.IO.create(1),dTransparentOutline:q.IO.create(c)},p={...tx},f=(0,ef.s8)(e,"triangles",tS,p,d);return(0,em.T)(f,d)}(e,this.tracing.accumulateTarget.texture,this.tracing.normalTextureOpaque,this.tracing.colorTextureOpaque,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,this.drawPass.postprocessing.outline.target.texture,this.transparentTarget.texture,this.drawPass.postprocessing.ssao.ssaoDepthTexture,this.drawPass.postprocessing.ssao.ssaoDepthTransparentTexture,!1),this.multiSampleComposeTarget=e.createRenderTarget(a,n,!1,"float32"),this.multiSampleHoldTarget=e.createRenderTarget(a,n,!1),this.multiSampleAccumulateTarget=e.createRenderTarget(a,n,!1,"float32"),this.multiSampleCompose=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...tT},n=(0,ef.s8)(e,"triangles",tC,a,r);return(0,em.T)(n,r)}(e,this.outputTarget.texture),this._supported=!0}
776renderInput(e,t,r,a){ev.kM&&this.webgl.timer.mark("IlluminationPass.renderInput");let{gl:n,state:i}=this.webgl,o=e2.isEnabled(a.marking),s=r.opacityAverage<1||r.volumes.renderables.length>0,l=o&&r.markerAverage>0;this.transparentTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT);let u=eu.hq.isTransparentOutlineEnabled(a.postprocessing)&&!a.illumination.ignoreOutline,c=e8.z.isEnabled(a.postprocessing),d=eu.hq.isTransparentSsaoEnabled(r,a.postprocessing);if((u||c||d)&&(this.drawPass.depthTargetTransparent.bind(),e.clearDepth(!0)),s){if("wboit"===this.drawPass.transparency)this.drawPass.wboit.bind(),e.renderWboitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque),r.volumes.renderables.length>0&&e.renderWboitTransparent(r.volumes,t,this.drawPass.depthTextureOpaque),this.transparentTarget.bind(),this.drawPass.wboit.render();else if("dpoit"===this.drawPass.transparency){let n=this.drawPass.dpoit.bind();e.renderDpoitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque,n);for(let n=0,i=a.dpoitIterations;n<i;n++){ev.kM&&this.webgl.timer.mark("DpoitPass.layer");let a=this.drawPass.dpoit.bindDualDepthPeeling();e.renderDpoitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque,a),i>1&&(this.transparentTarget.bind(),this.drawPass.dpoit.renderBlendBack()),ev.kM&&this.webgl.timer.markEnd("DpoitPass.layer")}this.transparentTarget.bind(),this.drawPass.dpoit.render(),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.drawPass.depthTextureOpaque)}else this.transparentTarget.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.transparentTarget.framebuffer,"depth"),e.renderBlendedTransparent(r.primitives,t),this.drawPass.depthTextureOpaque.detachFramebuffer(this.transparentTarget.framebuffer,"depth"),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.drawPass.depthTextureOpaque);(u||c||d)&&(this.drawPass.depthTargetTransparent.bind(),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.drawPass.depthTextureOpaque)),d&&(this.drawPass.postprocessing.ssao.update(t,r,a.postprocessing.occlusion.params,!0),this.drawPass.postprocessing.ssao.render(t))}if(l){let n=a.marking.ghostEdgeStrength<1;n&&1!==r.markerAverage&&(this.drawPass.marking.depthTarget.bind(),e.clear(!1,!0),e.renderMarkingDepth(r.primitives,t)),this.drawPass.marking.maskTarget.bind(),e.clear(!1,!0),e.renderMarkingMask(r.primitives,t,n?this.drawPass.marking.depthTarget.texture:null),this.drawPass.marking.update(a.marking),this.drawPass.marking.render(t.viewport,this.transparentTarget)}this.tracing.composeTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),ev.kM&&this.webgl.timer.markEnd("IlluminationPass.renderInput")}shouldRender(e){return this._supported&&e.enabled&&this._iteration<this.getMaxIterations(e)}setSize(e,t){if(!this._supported)return;let r=this.outputTarget.getWidth(),a=this.outputTarget.getHeight();(e!==r||t!==a)&&(this.tracing.setSize(e,t),this.transparentTarget.setSize(e,t),this.outputTarget.setSize(e,t),q.IO.update(this.copyRenderable.values.uTexSize,tr.S.set(this.copyRenderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.composeRenderable.values.uTexSize,tr.S.set(this.composeRenderable.values.uTexSize.ref.value,e,t)),this.multiSampleComposeTarget.setSize(e,t),this.multiSampleHoldTarget.setSize(e,t),this.multiSampleAccumulateTarget.setSize(e,t),q.IO.update(this.multiSampleCompose.values.uTexSize,tr.S.set(this.multiSampleCompose.values.uTexSize.ref.value,e,t))),this.drawPass.setSize(e,t)}reset(){this._supported&&(this.tracing.reset(),this._iteration=0,this.prevSampleIndex=-1)}restart(e=!1){this._supported&&(this.tracing.restart(e),this._iteration=0,this.prevSampleIndex=-1)}renderInternal(e,t,r,a){if(!this.shouldRender(t.illumination))return;ev.kM&&this.webgl.timer.mark("IlluminationPass.render",{note:`iteration ${this._iteration+1} of ${this.getMaxIterations(t.illumination)}`}),this.tracing.render(e,t.transparentBackground,t.illumination,this._iteration,a);let{renderer:n,camera:i,scene:o,helper:s}=e,{gl:l,state:u}=this.webgl,{x:c,y:d,width:p,height:f}=i.viewport;
776(0===this._iteration||a)&&(n.setTransparentBackground(t.transparentBackground),n.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),n.setPixelRatio(this.webgl.pixelRatio),n.setViewport(c,d,p,f),n.update(i,o),this.renderInput(n,i,o,t)),u.disable(l.BLEND),u.disable(l.DEPTH_TEST),u.disable(l.CULL_FACE),u.depthMask(!1),u.viewport(c,d,p,f),u.scissor(c,d,p,f);let m="orthographic"===i.state.mode?1:0,h=eu.xt.isEnabled(t.postprocessing),g=th.f1.isEnabled(t.postprocessing)&&!t.illumination.ignoreOutline,b=eu.hq.isTransparentSsaoEnabled(o,t.postprocessing),y=e7.y.isEnabled(t.postprocessing),x=e8.z.isEnabled(t.postprocessing),S=e2.isEnabled(t.marking),T=o.opacityAverage<1||o.volumes.renderables.length>0,C=S&&o.markerAverage>0,O=!1;if(this.composeRenderable.values.dOutlineEnable.ref.value!==g&&(O=!0,q.IO.update(this.composeRenderable.values.dOutlineEnable,g)),g&&"on"===t.postprocessing.outline.name){let{transparentOutline:e,outlineScale:r}=this.drawPass.postprocessing.outline.update(i,t.postprocessing.outline.params,this.drawPass.depthTargetTransparent.texture,this.drawPass.depthTextureOpaque);this.drawPass.postprocessing.outline.render(),q.IO.update(this.composeRenderable.values.uOutlineColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uOutlineColor.ref.value,t.postprocessing.outline.params.color)),this.composeRenderable.values.dOutlineScale.ref.value!==r&&(O=!0,q.IO.update(this.composeRenderable.values.dOutlineScale,r)),this.composeRenderable.values.dTransparentOutline.ref.value!==e&&(O=!0,q.IO.update(this.composeRenderable.values.dTransparentOutline,e))}this.composeRenderable.values.dOcclusionEnable.ref.value!==b&&(O=!0,q.IO.update(this.composeRenderable.values.dOcclusionEnable,b)),b&&"on"===t.postprocessing.occlusion.name&&q.IO.update(this.composeRenderable.values.uOcclusionColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uOcclusionColor.ref.value,t.postprocessing.occlusion.params.color));let I=T||C;this.composeRenderable.values.dBlendTransparency.ref.value!==I&&(O=!0,q.IO.update(this.composeRenderable.values.dBlendTransparency,I)),q.IO.updateIfChanged(this.composeRenderable.values.uNear,i.near),q.IO.updateIfChanged(this.composeRenderable.values.uFar,i.far),q.IO.updateIfChanged(this.composeRenderable.values.uFogFar,i.fogFar),q.IO.updateIfChanged(this.composeRenderable.values.uFogNear,i.fogNear),q.IO.update(this.composeRenderable.values.uFogColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uFogColor.ref.value,n.props.backgroundColor)),this.composeRenderable.values.dOrthographic.ref.value!==m&&(q.IO.update(this.composeRenderable.values.dOrthographic,m),O=!0),!r||h||x?this.tracing.composeTarget.bind():this.webgl.bindDrawingBuffer(),this._colorTarget=this.tracing.composeTarget,this.drawPass.postprocessing.background.update(i,t.postprocessing.background),this.drawPass.postprocessing.background.clear(t.postprocessing.background,t.transparentBackground,n.props.backgroundColor),this.drawPass.postprocessing.background.render(t.postprocessing.background),q.IO.updateIfChanged(this.composeRenderable.values.uTransparentBackground,t.transparentBackground||this.drawPass.postprocessing.background.isEnabled(t.postprocessing)),this.composeRenderable.values.dDenoise.ref.value!==t.illumination.denoise&&(q.IO.update(this.composeRenderable.values.dDenoise,t.illumination.denoise),O=!0);let A="on"===t.multiSample.mode?t.illumination.denoiseThreshold[0]:(0,tl.t7)(t.illumination.denoiseThreshold[1],t.illumination.denoiseThreshold[0],(0,tl.uZ)(this.iteration/(this.getMaxIterations(t.illumination)/2),0,1));q.IO.updateIfChanged(this.composeRenderable.values.uDenoiseThreshold,A),O&&this.composeRenderable.update(),this.composeRenderable.render(),n.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),n.setPixelRatio(this.webgl.pixelRatio),n.setViewport(c,d,p,f),n.update(i,o),s.debug.isEnabled&&(s.debug.syncVisibility(),n.renderBlended(s.debug.scene,i)),s.handle.isEnabled&&n.renderBlended(s.handle.scene,i),s.camera.isEnabled&&(s.camera.update(i),n.update(s.camera.camera,s.camera.scene),n.renderBlended(s.camera.scene,s.camera.camera));let w=!1,D=this.outputTarget;if(h){let e=r&&!x;this.drawPass.antialiasing.render(i,this.tracing.composeTarget.texture,!!e||this.outputTarget,t.postprocessing),e?w=!0:(this._colorTarget=this.outputTarget,D=this.tracing.composeTarget)}if(y&&"on"===t.postprocessing.bloom.name){let e=r&&!x||w;this.drawPass.bloom.update(this.tracing.colorTextureOpaque,this.tracing.normalTextureOpaque,this.drawPass.depthTextureOpaque,t.postprocessing.bloom.params),this.drawPass.bloom.render(i.viewport,e?void 0:this._colorTarget)}if(x&&"on"===t.postprocessing.dof.name){let e=r||w;this.drawPass.dof.update(i,this._colorTarget.texture,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,t.postprocessing.dof.params,o.boundingSphereVisible),this.drawPass.dof.render(i.viewport,e?void 0:D),e||(this._colorTarget=D)}this._iteration+=1,ev.kM&&this.webgl.timer.markEnd("IlluminationPass.render"),this.webgl.gl.flush()}renderMultiSample(e,t,r){let{camera:a}=e,{multiSampleCompose:n,multiSampleComposeTarget:i,multiSampleHoldTarget:o,webgl:s}=this,{gl:l,state:u}=s,c=eT[Math.max(0,Math.min(t.multiSample.sampleLevel,5))],d=this.getMaxIterations(t.illumination),p=Math.min(this._iteration,d),f=Math.floor(p/d*c.length);ev.kM&&s.timer.mark("IlluminationPass.renderMultiSample",{note:`sampleIndex ${f+1} of ${c.length}`});let{x:m,y:h,width:g,height:b}=a.viewport,y=1/d;if(0===p)this.renderInternal(e,t,!1,!0),q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,this._colorTarget.texture),n.update(),o.bind(),u.disable(l.BLEND),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(m,h,g,b),u.scissor(m,h,g,b),n.render();else{a.viewOffset.enabled=!0,q.IO.update(n.values.tColor,this._colorTarget.texture),q.IO.update(n.values.uWeight,y),n.update();let r=c[f];
776L.V.setViewOffset(a.viewOffset,g,b,r[0],r[1],g,b),a.update(),this.renderInternal(e,t,!1,this.prevSampleIndex!==f),i.bind(),u.enable(l.BLEND),u.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD),u.blendFuncSeparate(l.ONE,l.ONE,l.ONE,l.ONE),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(m,h,g,b),u.scissor(m,h,g,b),1===p&&(u.clearColor(0,0,0,0),l.clear(l.COLOR_BUFFER_BIT)),n.render()}this.prevSampleIndex=f,r?this.webgl.bindDrawingBuffer():this.multiSampleAccumulateTarget.bind(),u.viewport(m,h,g,b),u.scissor(m,h,g,b);let x=p*y;x>0&&(q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,i.texture),n.update(),u.disable(l.BLEND),n.render()),x<1&&(q.IO.update(n.values.uWeight,1-x),q.IO.update(n.values.tColor,o.texture),n.update(),0===x?u.disable(l.BLEND):u.enable(l.BLEND),n.render()),r||(u.disable(l.BLEND),this.colorTarget.bind(),this.copyRenderable.values.tColor.ref.value!==this.multiSampleAccumulateTarget.texture&&(q.IO.update(this.copyRenderable.values.tColor,this.multiSampleAccumulateTarget.texture),this.copyRenderable.update()),this.copyRenderable.render()),a.viewOffset.enabled=!1,a.update(),ev.kM&&s.timer.markEnd("IlluminationPass.renderMultiSample")}render(e,t,r){this._supported&&("on"===t.multiSample.mode?this.renderMultiSample(e,t,r):this.renderInternal(e,t,r,!1))}}let tx={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),tNormal:(0,ed.U2)("texture","rgba","ubyte","nearest"),tShaded:(0,ed.U2)("texture","rgba","ubyte","nearest"),tTransparentColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),dBlendTransparency:(0,ed.O0)("boolean"),tSsaoDepth:(0,ed.U2)("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepthOpaque:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,ed.U2)("texture","rgba","ubyte","nearest"),tOutlines:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),dDenoise:(0,ed.O0)("boolean"),uDenoiseThreshold:(0,ed.wt)("f"),dOrthographic:(0,ed.O0)("number"),uNear:(0,ed.wt)("f"),uFar:(0,ed.wt)("f"),uFogNear:(0,ed.wt)("f"),uFogFar:(0,ed.wt)("f"),uFogColor:(0,ed.wt)("v3"),uOutlineColor:(0,ed.wt)("v3"),uOcclusionColor:(0,ed.wt)("v3"),uTransparentBackground:(0,ed.wt)("b"),dOcclusionEnable:(0,ed.O0)("boolean"),dOutlineEnable:(0,ed.O0)("boolean"),dOutlineScale:(0,ed.O0)("number"),dTransparentOutline:(0,ed.O0)("boolean")},tS=(0,ep.Lq)("compose",eh.C,tt),tT={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},tC=(0,ep.Lq)("compose",eh.C,eg);var tO=r(44712);class tI{static ensureRequired(e,t,r){let a=new tI(e,t);a.updateRequired(r),a.finalizeRequired(!0)}constructor(e,t){this.webgl=e,this.scene=t,this.required=[]}updateRequired(e){this.required.length=0,this.required.push("color"),ty.isEnabled(this.webgl,e.illumination)&&this.required.push("tracing"),e2.isEnabled(e.marking)&&this.scene.markerAverage>0&&this.required.push("marking"),e7.y.isEnabled(e.postprocessing)&&this.scene.emissiveAverage>0&&this.required.push("emissive"),(eu.hq.isTransparentDepthRequired(this.scene,e.postprocessing)||!this.webgl.extensions.drawBuffers||!this.webgl.extensions.depthTexture||ty.isEnabled(this.webgl,e.illumination))&&this.required.push("depth"),this.webgl.resources.linkPrograms(this.required)}finalizeRequired(e){return this.finalize(this.required,e)}finalize(e,t){return this.webgl.resources.finalizePrograms(e,t)}}let tA={transparentBackground:C.e.Boolean(!1),dpoitIterations:C.e.Numeric(2,{min:1,max:10,step:1}),multiSample:C.e.Group(ex),postprocessing:C.e.Group(eu.yM),marking:C.e.Group(e1),illumination:C.e.Group(tb),cameraHelper:C.e.Group(te.n1),renderer:C.e.Group(S.g4)};class tw{get colorTarget(){return this._colorTarget}get width(){return this._width}get height(){return this._height}constructor(e,t,r,a,n,i,o){this.webgl=e,this.renderer=r,this.scene=a,this.camera=n,this._width=0,this._height=0,this._camera=new L.V,this.props={...C.e.getDefaultValues(tA),...o},this.drawPass=new e9(e,t,128,128,a.transparency),this.illuminationPass=new ty(e,this.drawPass),this.multiSamplePass=new eS(e,this.drawPass),this.multiSampleHelper=new eC(this.multiSamplePass),this.helper={camera:new te.Rk(e,this.props.cameraHelper),debug:i.debug,handle:i.handle,pointer:i.pointer},this.setSize(1024,768)}getByteCount(){return this.drawPass.getByteCount()+this.illuminationPass.getByteCount()+this.multiSamplePass.getByteCount()}
776updateBackground(){return new Promise(e=>{this.drawPass.postprocessing.background.update(this.camera,this.props.postprocessing.background,()=>{e()})})}setSize(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.drawPass.setSize(e,t),this.illuminationPass.setSize(e,t),this.multiSamplePass.syncSize())}setProps(e={}){Object.assign(this.props,e),e.cameraHelper&&this.helper.camera.setProps(e.cameraHelper)}async render(e){this.drawPass.setTransparency(this.scene.transparency),tI.ensureRequired(this.webgl,this.scene,this.props),L.V.copySnapshot(this._camera.state,this.camera.state),T.l_.set(this._camera.viewport,0,0,this._width,this._height),this._camera.update(),this.renderer.setOcclusionTest(null);let t={renderer:this.renderer,camera:this._camera,scene:this.scene,helper:this.helper};if(this.illuminationPass.supported&&this.props.illumination.enabled){for(await e.update({message:"Tracing...",current:1,max:this.illuminationPass.getMaxIterations(this.props.illumination)}),this.illuminationPass.restart(!0);this.illuminationPass.shouldRender(this.props.illumination);)ev.kM&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),this.illuminationPass.render(t,this.props,!1),ev.kM&&this.webgl.timer.markEnd("ImagePass.render"),e.shouldUpdate&&await e.update({current:this.illuminationPass.iteration}),await this.webgl.waitForGpuCommandsComplete();this._colorTarget=this.illuminationPass.colorTarget}else ev.kM&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),eS.isEnabled(this.props.multiSample)?(this.multiSampleHelper.render(t,this.props,!1),this._colorTarget=this.multiSamplePass.colorTarget):(this.drawPass.render(t,this.props,!1),this._colorTarget=this.drawPass.getColorTarget(this.props.postprocessing)),ev.kM&&this.webgl.timer.markEnd("ImagePass.render");if(ev.kM){let e=this.webgl.timer.resolve();if(e)for(let t of e)(0,tO.y)([t])}ev.Au&&console.log(`image pass byte count ${(this.getByteCount()/1024/1024).toFixed(3)} MiB`)}async getImageData(e,t,r,a){var n,i;this.setSize(t,r),await this.render(e),this.colorTarget.bind();let o=null!==(n=null==a?void 0:a.width)&&void 0!==n?n:t,s=null!==(i=null==a?void 0:a.height)&&void 0!==i?i:r,l=new Uint8Array(o*s*4);a?this.webgl.readPixels(a.x,r-a.y-a.height,o,s,l):this.webgl.readPixels(0,0,o,s,l);let c=u.create(l,o,s);return u.flipY(c),u.divideByAlpha(c),new ImageData(new Uint8ClampedArray(l),o,s)}}var tD=r(84785),tE=r(53596),tM=r(93898),tP=r(99289),tk=r(30131),tB=r(34526);let t_={...U.K.Params,alpha:{...U.K.Params.alpha,defaultValue:1},ignoreLight:{...U.K.Params.ignoreLight,defaultValue:!0},colorX:C.e.Color(j.t.red,{isEssential:!0}),colorY:C.e.Color(j.t.green,{isEssential:!0}),colorZ:C.e.Color(j.t.blue,{isEssential:!0}),scale:C.e.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0})},tR={handle:C.e.MappedStatic("off",{on:C.e.Group(t_),off:C.e.Group({})},{cycle:!0,description:"Show handle tool"})};class tF{getBoundingSphere(e,t){return this.renderObject&&(V.CP.copy(e,this.renderObject.values.invariantBoundingSphere.ref.value),y.yb.fromArray(this._transform,this.renderObject.values.aTransform.ref.value,16*t),V.CP.transform(e,e,this._transform)),e}setProps(e){this.props=(0,tE.U)(this.props,t=>{if(void 0!==e.handle&&(t.handle.name=e.handle.name,"on"===e.handle.name)){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let r={...e.handle.params,scale:e.handle.params.scale*this.webgl.pixelRatio,cellSize:0};this.renderObject=function(e){let t=function(e,t){let r=10*e.scale,a=function(e,t){let r=N.V.createState(512,256,t),a=.05*e,n=y.AO.scale((0,y.AO)(),y.AO.unitX,e),i=y.AO.scale((0,y.AO)(),y.AO.unitY,e),o=y.AO.scale((0,y.AO)(),y.AO.unitZ,e),s={radiusTop:a,radiusBottom:a,radialSegments:32};return r.currentGroup=tL.TranslateScreenXY,(0,G.H)(r,y.AO.origin,3*a,2),r.currentGroup=tL.TranslateObjectX,(0,G.H)(r,n,a,2),(0,tD.vA)(r,y.AO.origin,n,1,s),r.currentGroup=tL.TranslateObjectY,(0,G.H)(r,i,a,2),(0,tD.vA)(r,y.AO.origin,i,1,s),r.currentGroup=tL.TranslateObjectZ,(0,G.H)(r,o,a,2),(0,tD.vA)(r,y.AO.origin,o,1,s),N.V.getMesh(r)}(r,void 0);return a.setBoundingSphere(V.CP.create(y.AO.create(r/2,r/2,r/2),r+r/4)),tM.b.create("handle",{},a,t=>
776{switch(t){case tL.TranslateObjectX:return e.colorX;case tL.TranslateObjectY:return e.colorY;case tL.TranslateObjectZ:return e.colorZ;default:return j.t.grey}},()=>1,()=>"")}(e);return tM.b.createRenderObject(t,e)}(r),this.scene.add(this.renderObject),this.scene.commit(),t.handle.params={...e.handle.params}}})}get isEnabled(){return"on"===this.props.handle.name}update(e,t,r){this.renderObject&&(this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),y.yb.setTranslation(this.renderObject.values.aTransform.ref.value,t),y.yb.fromMat3(this.renderObject.values.aTransform.ref.value,r),q.IO.update(this.renderObject.values.aTransform,this.renderObject.values.aTransform.ref.value),this.scene.update([this.renderObject],!0))}getLoci(e){var t;let{objectId:r,groupId:a,instanceId:n}=e;return this.renderObject&&r===this.renderObject.id?(t=this,(0,F.SL)("handle",t,[{groupId:a,instanceId:n}],e=>t.getBoundingSphere(e,n),()=>`Handle Helper | Group Id ${a} | Instance Id ${n}`)):F.Rh}mark(e,t){return!!(tP.E5.is(tP.E5.Highlighting,t)&&((0,F.h)(e)||tz(e)&&e.data===this))&&tk.u.mark(this.renderObject,e,t,this.eachGroup)}constructor(e,t={}){this.webgl=e,this.props={handle:{name:"off",params:{}}},this.pixelRatio=1,this._transform=(0,y.yb)(),this.eachGroup=(e,t)=>{if(!this.renderObject||!tz(e))return!1;let r=!1,a=this.renderObject.values.uGroupCount.ref.value,{elements:n}=e;for(let{groupId:e,instanceId:i}of n){let n=i*a+e;t(tB.Xp.ofSingleton(n))&&(r=!0)}return r},this.scene=R.x.create(e,"blended"),this.setProps(t)}}let tL={TranslateScreenXY:1,TranslateObjectX:3,TranslateObjectY:4,TranslateObjectZ:5};function tz(e){return"data-loci"===e.kind&&"handle"===e.tag}var tN=r(2462);let tG={...U.K.Params,enabled:C.e.Select("off",C.e.arrayToOptions(["on","off"]),{isEssential:!0}),ignoreLight:{...U.K.Params.ignoreLight,defaultValue:!0},color:C.e.Color(j.t.grey,{isEssential:!0}),hitColor:C.e.Color(j.t.pink,{isEssential:!0})};class tU{setProps(e){Object.assign(this.props,e),this.isEnabled&&this.update(this.pointers,this.points,this.hit)}ensureEnabled(){"on"!==this.props.enabled&&(this.props.enabled="on")}get isEnabled(){return"on"===this.props.enabled}setCamera(e){L.V.copySnapshot(this.camera.state,e.state),T.l_.copy(this.camera.viewport,e.viewport),y.yb.copy(this.camera.view,e.view),y.yb.copy(this.camera.projection,e.projection),y.yb.copy(this.camera.projectionView,e.projectionView),y.yb.copy(this.camera.headRotation,e.headRotation),L.V.copyViewOffset(this.camera.viewOffset,e.viewOffset),this.camera.far=e.far,this.camera.near=e.near,this.camera.fogFar=e.fogFar,this.camera.fogNear=e.fogNear,this.camera.forceFull=e.forceFull,this.camera.scale=1,this.modelScale=e.scale}update(e,t,r){if(this.pointers=e,this.points=t,this.hit=r,"on"!==this.props.enabled){this.renderObject&&(this.renderObject.state.visible=!1);return}this.shape=tH(this.getData(),this.props,this.shape),q.IO.updateIfChanged(this.renderObject.values.drawCount,X.Z.getDrawCount(this.shape.geometry)),q.IO.updateIfChanged(this.renderObject.values.uVertexCount,X.Z.getVertexCount(this.shape.geometry)),q.IO.updateIfChanged(this.renderObject.values.uGroupCount,2),U.K.Utils.updateBoundingSphere(this.renderObject.values,this.shape.geometry),U.K.Utils.updateValues(this.renderObject.values,this.props),U.K.Utils.updateRenderableState(this.renderObject.state,this.props),this.renderObject.state.visible=!0,this.scene.update(void 0,!1),this.scene.commit()}getData(){return{pointers:this.pointers,points:this.points,hit:this.hit,modelScale:this.modelScale,camera:this.camera,pixels:12}}constructor(e,t={}){var r,a;this.pixelScale=1,this.modelScale=1,this.pointers=[],this.points=[],this.hit=void 0,this.scene=R.x.create(e,"blended"),this.props={...C.e.getDefaultValues(tG),...t},this.camera=new L.V,this.shape=tH(this.getData(),this.props,this.shape),this.renderObject=(r=this.shape,a=this.props,tN.b.createRenderObject(r,{...C.e.getDefaultValues(U.K.Params),...a,ignoreLight:a.ignoreLight,cellSize:0})),this.scene.add(this.renderObject)}}(i=c||(c={}))[i.None=0]="None",i[i.Hit=1]="Hit";let tV=(0,y.AO)();function tj(e,t,r,a){let n=y.AO.scale(tV,r.state.position,a),i=y.AO.distance(e,n);return 2*Math.tan(r.state.fov/2)*i/r.viewport.height*t}function tH(e,t,r){let a=function(e,t){let r=N.V.createState(512,256,t),a={radiusTop:5e-4,radiusBottom:5e-4,radialSegments:32},{modelScale:n,camera:i,pixels:o}=e;for(let t of(r.currentGroup=c.None,e.pointers)){(0,tD.mB)(r,t,.2,a);let e=tj(t.origin,o,i,n);(0,G.H)(r,t.origin,e,1)}for(let t of e.points){let e=tj(t,o,i,n);(0,G.H)(r,t,e,1)}if(e.hit){r.currentGroup=c.Hit;let t=tj(e.hit,o,i,n);(0,G.H)(r,e.hit,t,1)}return N.V.getMesh(r)}(e,null==r?void 0:r.geometry);return tN.b.create("pointer-mesh",e,a,e=>e===c.Hit?t.hitColor:t.color,()=>1,()=>"",void 0,2)}let tq={debug:C.e.Group(W),camera:C.e.Group({helper:C.e.Group(te.n1)}),handle:C.e.Group(tR),pointer:C.e.Group(tG)},tX=C.e.getDefaultValues(tq);class tW{constructor(e,t,r={}){let a={...tX,...r};this.debug=new K(e,t,a.debug),this.camera=new te.Rk(e,a.camera.helper),this.handle=new tF(e,a.handle),this.pointer=new tU(e,a.pointer)}}class tK{constructor(e,t,r={}){this.webgl=e;let a=this.webgl.getDrawingBufferSize();this.draw=new e9(e,t,a.width,a.height,r.transparency||"blended"),this.pick=new ew(e,a.width,a.height,r.pickScale||.25),this.multiSample=ne
776w eS(e,this.draw),this.illumination=new ty(e,this.draw)}getByteCount(){return this.draw.getByteCount()+this.pick.getByteCount()+this.multiSample.getByteCount()+this.illumination.getByteCount()}setPickScale(e){this.pick.setPickScale(e)}setTransparency(e){this.draw.setTransparency(e)}updateSize(){let e=this.webgl.getDrawingBufferSize(),t=Math.max(e.width,2),r=Math.max(e.height,2);this.draw.setSize(t,r),this.pick.setSize(t,r),this.multiSample.syncSize(),this.illumination.setSize(t,r)}}var tQ=r(67546),tZ=r(68303);let tY=`
777precision highp float;
778precision highp sampler2D;
779
780uniform sampler2D tPreviousLevel;
781uniform vec2 uInvSize;
782uniform vec2 uOffset;
783
784void main(void) {
785    vec2 position = gl_FragCoord.xy * uInvSize + uOffset;
786
787    float x = texture(tPreviousLevel, position).r;
788    float y = textureOffset(tPreviousLevel, position, ivec2(-1, 0)).r;
789    float z = textureOffset(tPreviousLevel, position, ivec2(-1, -1)).r;
790    float w = textureOffset(tPreviousLevel, position, ivec2(0, -1)).r;
791
792    gl_FragColor = vec4(max(max(x, y), max(z, w)));
793}
794`,t$={...ec.iz,tPreviousLevel:(0,ed.U2)("texture","alpha","float","nearest"),uInvSize:(0,ed.wt)("v2"),uOffset:(0,ed.wt)("v2")},tJ=(0,ep.Lq)("hi-z",eh.C,tY);var t0=r(49309);let t1=eP.A.transformMat4,t2=y.T8.set,t3=t0.Fz;function t4(e,t,r,a){return -1===a[11]?t*r/((r-t)*e-r):e*(t-r)-t}let t5={enabled:C.e.Boolean(!1,{description:"Hierarchical Z-buffer occlusion culling. Only available for WebGL2."}),maxFrameLag:C.e.Numeric(10,{min:1,max:30,step:1},{description:"Maximum number of frames to wait for Z-buffer data."}),minLevel:C.e.Numeric(3,{min:1,max:10,step:1})};class t6{getByteCount(){return this.supported?this.tex.getByteCount()+this.buf.getByteCount()+this.levelData.reduce((e,t)=>e+t.texture.getByteCount(),0):0}clear(){if(!this.supported)return;let{gl:e}=this.webgl;(0,eI.D0)(e)&&(null!==this.sync&&(e.deleteSync(this.sync),this.sync=null),this.frameLag=0,this.ready=!1,this.debug&&(this.debug.rect.style.display="none",this.debug.container.style.display="none"))}render(e){if(!this.supported||!this.props.enabled)return;let{gl:t,state:r}=this.webgl;if(!(0,eI.D0)(t)||null!==this.sync)return;this.nextNear=e.near,this.nextFar=e.far,y.yb.copy(this.nextView,e.view),y.yb.copy(this.nextProjection,e.projection),ev.kM&&this.webgl.timer.mark("hi-Z"),r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0);let a=this.renderable.values,n=Math.pow(2,Math.ceil(Math.log(Math.max(t.drawingBufferWidth,t.drawingBufferHeight))/Math.log(2))-1);for(let e=0,i=this.levelData.length;e<i;++e){let i=this.levelData[e];i.framebuffer.bind(),e>0?(tZ.IO.update(a.uInvSize,i.invSize),tZ.IO.update(a.uOffset,tr.S.set(a.uOffset.ref.value,0,0)),tZ.IO.update(a.tPreviousLevel,this.levelData[e-1].texture)):(tZ.IO.update(a.uInvSize,tr.S.set(a.uInvSize.ref.value,1/n,1/n)),tZ.IO.update(a.uOffset,tr.S.set(a.uOffset.ref.value,this.viewport.x/t.drawingBufferWidth,this.viewport.y/t.drawingBufferHeight)),tZ.IO.update(a.tPreviousLevel,this.drawPass.depthTextureOpaque)),r.currentRenderItemId=-1,r.viewport(0,0,i.size[0],i.size[1]),t.clear(t.COLOR_BUFFER_BIT),this.renderable.update(),this.renderable.render(),e>=this.props.minLevel&&(this.tex.bind(0),t.copyTexSubImage2D(t.TEXTURE_2D,0,i.offset,0,0,0,i.size[0],i.size[1]),this.tex.unbind(0))}this.tex.attachFramebuffer(this.fb,0);let i=this.tex.getWidth(),o=this.tex.getHeight();this.buf.read(0,0,i,o),this.sync=t.fenceSync(t.SYNC_GPU_COMMANDS_COMPLETE,0),t.flush(),ev.kM&&this.webgl.timer.markEnd("hi-Z")}tick(){if(!this.supported||!this.props.enabled||null===this.sync)return;let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return;let t=e.clientWaitSync(this.sync,0,0);t===e.WAIT_FAILED||this.frameLag>=this.props.maxFrameLag?(e.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!1):t===e.TIMEOUT_EXPIRED?this.frameLag+=1:(this.buf.getSubData(this.buffer),e.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!0,this.near=this.nextNear,this.far=this.nextFar,y.yb.copy(this.view,this.nextView),y.yb.copy(this.projection,this.nextProjection))}transform(e){let{view:t,vp:r}=this;return t1(r,e.center,t),{vp:r,r:1.2*e.radius+1.52}}project(e,t){let{projection:r,aabb:a,viewport:n}=this;-1===r[11]?function(e,t,r,a){let n=t[0]*r,i=t[1]*r,o=t[2]*r,s=t[2]*t[2]-r*r,l=Math.sqrt(t[0]*t[0]+s),u=(l*t[0]-o)/(l*t[2]+n)*a[0],c=(l*t[0]+o)/(l*t[2]-n)*a[
7940],d=Math.sqrt(t[1]*t[1]+s);return t2(e,-.5*c+.5,(d*t[1]-o)/(d*t[2]+i)*a[5]*.5+.5,-.5*u+.5,(d*t[1]+o)/(d*t[2]-i)*a[5]*.5+.5)}(a,e,t,r):function(e,t,r,a){let n=a[0],i=a[5],o=(t[0]+r)*n;return t2(e,(t[0]-r)*n*.5+.5,-((t[1]+r)*i*.5)+.5,.5*o+.5,-((t[1]-r)*i*.5)+.5)}(a,e,t,r);let i=a[2]-a[0],o=a[3]-a[1],s=Math.max(i*n.width,o*n.height),l=Math.ceil(t3(s/2));return{aabb:a,w:i,h:o,pr:s,lod:l}}setViewport(e,t,r,a){if(!this.supported)return;r=Math.max(r,2),a=Math.max(a,2),T.l_.set(this.viewport,e,t,r,a);let n=Math.ceil(Math.log(Math.max(r,a))/Math.log(2));if(n===this.levelData.length)return;let{minLevel:i}=this.props;for(let e of(this.buffer=new Float32Array(Math.pow(2,n-i)*Math.pow(2,n-1-i)),this.tex.define(Math.pow(2,n-i),Math.pow(2,n-1-i)),this.levelData))e.framebuffer.destroy(),e.texture.destroy();this.levelData.length=0;for(let e=0;e<n;++e){let t=this.webgl.resources.framebuffer(),r=Math.pow(2,n-e-1),a=tr.S.create(r,r),i=tr.S.create(1/r,1/r),o=this.webgl.resources.texture("image-float32","alpha","float","nearest");o.define(r,r),o.attachFramebuffer(t,0),this.levelData.push({texture:o,framebuffer:t,size:a,invSize:i,offset:0})}let o=0;for(let e=0;e<n;++e){let t=this.levelData[e];e>=i&&(this.levelData[e].offset=o,o+=t.size[0])}this.clear()}setProps(e){if(this.supported){if(this.props.minLevel!==e.minLevel){Object.assign(this.props,e);let{x:t,y:r,width:a,height:n}=this.viewport;this.setViewport(t,r,a,n)}else Object.assign(this.props,e),this.props.enabled||this.clear()}}initDebug(e){if(!e.parentElement)return;let t=document.createElement("div");Object.assign(t.style,{display:"block",position:"absolute",pointerEvents:"none"}),e.parentElement.appendChild(t);let r=document.createElement("canvas"),a=r.getContext("2d");if(!a)throw Error("Could not create canvas 2d context");Object.assign(r.style,{width:"100%",height:"100%",imageRendering:"pixelated",position:"relative",pointerEvents:"none"}),t.appendChild(r);let n=document.createElement("div");Object.assign(n.style,{display:"none",position:"absolute",pointerEvents:"none"}),e.parentElement.appendChild(n),this.debug={container:t,canvas:r,ctx:a,rect:n}}canDebug(e){return this.supported&&this.props.enabled&&this.ready&&!!this.debug}showRect(e,t){if(!this.canDebug(this.debug))return;let{gl:{drawingBufferHeight:r},pixelRatio:a}=this.webgl,{viewport:{x:n,y:i,width:o,height:s}}=this,l=(e[0]*o+n)/a,u=(e[1]*s-i)/a,c=(e[2]*o+n)/a,d=(e[3]*s-i)/a;Object.assign(this.debug.rect.style,{border:t?"solid red":"solid green",display:"block",left:`${l}px`,top:`${u+(r-s)/a}px`,width:`${c-l}px`,height:`${d-u}px`})}showBuffer(e){if(!this.canDebug(this.debug))return;if(e>=this.levelData.length||e<this.props.minLevel){this.debug.container.style.display="none";return}let{offset:t,size:[r,a]}=this.levelData[e],n=this.tex.getWidth(),i=new Uint8ClampedArray(r*a*4);i.fill(255);for(let e=0;e<a;++e)for(let o=0;o<r;++o){let s=(a-e-1)*r+o,l=255*this.buffer[e*n+o+t];i[4*s+0]=l,i[4*s+3]=255-l}let o=new ImageData(i,r,a);this.debug.canvas.width=o.width,this.debug.canvas.height=o.height,this.debug.ctx.putImageData(o,0,0);let{viewport:{x:s,y:l,width:u,height:c},webgl:{pixelRatio:d}}=this;Object.assign(this.debug.container.style,{display:"block",bottom:`${l/d}px`,left:`${s/d}px`,width:`${u/d}px`,height:`${c/d}px`})}debugOcclusion(e){if(!this.canDebug(this.debug))return;if(!e){this.debug.rect.style.display="none",this.debug.container.style.display="none";return}let t=this.isOccluded(e),{vp:r,r:a}=this.transform(e),{aabb:n,lod:i}=this.project(r,a);this.showRect(n,t),this.showBuffer(i)}reset(){this.sync=null,this.ready=!1,this.frameLag=0,this.levelData.length=0;let{x:e,y:t,width:r,height:a}=this.viewport;this.setViewport(e,t,r,a)}dispose(){if(this.supported)for(let e of(this.clear(),this.fb.destroy(),this.tex.destroy(),this.buf.destroy(),this.renderable.dispose(),this.levelData))e.framebuffer.destroy(),e.texture.destroy()}constructor(e,t,r,a){this.webgl=e,this.drawPass=t,this.viewport=(0,T.l_)(),this.near=0,this.far=0,this.view=(0,y.yb)(),this.projection=(0,y.yb)(),this.nextNear=0,this.nextFar=0,this.nextView=(0,y.yb)(),this.nextProjection=(0,y.yb)(),this.aabb=(0,y.T8)(),this.vp=(0,eP.A)(),this.levelData=[],this.sync=null,this.buffer=new Float32Array(0),this.frameLag=0,this.ready=!1,this.isOccluded=e=>{if(!this.supported||!this.props.enabled||!this.ready)return!1;let{vp:t,r}=this.transform(e),{near:a,far:n,projection:i}=this,o=t[2]+r;if(-o<a)return!1;let{aabb:s,w:l,h:u,lod:c}=this.project(t,r);
794if(c>=this.levelData.length||c<this.props.minLevel)return!1;let{offset:d,size:p}=this.levelData[c],f=s[0]+l/2,m=s[1]+u/2,h=p[0],g=Math.floor(f*h),b=Math.ceil(m*h),y=this.tex.getWidth();if(g+1>=h||b+1>=h)return!1;let x=(h-b-1)*y+g+d;if(o>t4(this.buffer[x],a,n,i)||o>t4(this.buffer[x+1],a,n,i))return!1;let S=(h-b+1-1)*y+g+d;return!(o>t4(this.buffer[S],a,n,i)||o>t4(this.buffer[S+1],a,n,i))},this.props={...C.e.getDefaultValues(t5),...a};let{gl:n,extensions:i}=e;if(!(0,eI.D0)(n)||!i.colorBufferFloat){ev.Au&&console.log('Missing webgl2 and/or colorBufferFloat support required for "Hi-Z"'),this.supported=!1;return}this.fb=e.resources.framebuffer(),this.tex=e.resources.texture("image-float32","alpha","float","nearest"),this.tex.attachFramebuffer(this.fb,0);let o=n.getParameter(n.IMPLEMENTATION_COLOR_READ_FORMAT),s=n.getParameter(n.IMPLEMENTATION_COLOR_READ_TYPE);if(o!==n.RED||s!==n.FLOAT){ev.Au&&console.log('Missing red/float reading support required for "Hi-Z"'),this.supported=!1;return}this.supported=!0,this.buf=e.resources.pixelPack("alpha","float"),this.renderable=function(e,t){let r={...ec.GE,tPreviousLevel:tZ.IO.create(t),uInvSize:tZ.IO.create((0,tr.S)()),uOffset:tZ.IO.create((0,tr.S)())},a={...t$},n=(0,ef.s8)(e,"triangles",tJ,a,r);return(0,em.T)(n,r)}(e,this.drawPass.depthTextureOpaque),ev.Au&&r&&this.initDebug(r)}}var t8=r(34052),t7=r(38964),t9=r(2941);let re=x.b4,rt=I.K.Trigger,rr=I.K.TriggerKey;function ra(e,t){let r=eP.A.fromObj(e.transform.position),a=ti.y.fromArray((0,ti.y)(),e.transform.matrix,0),n=ti.y.getDecomposition(a),i=ti.y.fromQuat((0,ti.y)(),n.quaternion),o=eP.A.transformMat4((0,eP.A)(),eP.A.negUnitZ,i),s=ea.k.create(r,o);return t&&ea.k.transform(s,s,ti.y.invert((0,ti.y)(),t)),s}let rn={bindings:{exit:(0,I.K)([rr("GamepadB")]),togglePassthrough:(0,I.K)([rr("GamepadA")]),gestureScale:(0,I.K)([rt(re.Flag.Trigger)])}},ri={minTargetDistance:C.e.Numeric(.4,{min:.001,max:1,step:.001}),disablePostprocessing:C.e.Boolean(!0),resolutionScale:C.e.Numeric(1,{min:.1,max:2,step:.1}),sceneRadiusInMeters:C.e.Numeric(.25,{min:.01,max:2,step:.01},{description:"The radius of the scene bounding sphere in meters, used to set the initial camera scale."})};class ro{get session(){return this.xrSession}setProps(e){Object.assign(this.props,e)}setAttribs(e){Object.assign(this.attribs,e)}intersect(e,t,r,a){let n=(0,eP.A)(),i=ra(a,t);if(t9.H.intersectRay3D(n,r,i)){let{height:t}=e.viewport,r=(0,T.zt)((0,to.T)(),n,e.viewport,e.projectionView);return{point:n,screen:tr.S.create(Math.floor(r[0]),t-Math.floor(r[1]))}}}setScaleFactor(e){this.scaleFactor=e}resetScale(){this.scaleFactor=1,this.prevScale=0}update(e){var t,r,a,n,i,o,s;let{xrSession:l,xrRefSpace:u,input:c,camera:d,stereoCamera:p,pointerHelper:f}=this;if(!e||!l||!u)return!1;d.scale=d.scale*this.scaleFactor,this.prevScale=d.scale;let m=eP.A.sub((0,eP.A)(),d.position,d.target);eP.A.scaleAndAdd(d.position,d.position,m,1-this.scaleFactor),this.scaleFactor=1;let h=function(e){let t=ti.y.getDecomposition(e);return new XRRigidTransform(eP.A.toObj(t.position),t7.D.toObj(t.quaternion))}(d.view),g=u.getOffsetReferenceSpace(h),b=e.getViewerPose(g);if(!b)return!1;let y=e.getViewerPose(u);if(y){let e=t7.D.fromObj(y.transform.orientation);ti.y.fromQuat(d.headRotation,e)}let{depthFar:S,depthNear:T,baseLayer:C}=l.renderState;if(!C)return!1;(S!==d.far||T!==d.near)&&l.updateRenderState({depthNear:d.near,depthFar:d.far}),p.update({pose:b,layer:C});let O=p.left,I=eP.A.scale((0,eP.A)(),O.state.target,O.scale),A=ti.y.getTranslation((0,eP.A)(),ti.y.invert((0,ti.y)(),O.view)),w=eP.A.sub((0,eP.A)(),A,I),D=t9.H.fromNormalAndCoplanarPoint((0,t9.H)(),w,I),E=[],M=[],P=[],k=[];if(l.inputSources)for(let c of l.inputSources){if("screen"===c.targetRayMode){if(c.gamepad){let{axes:e}=c.gamepad,{width:t,height:r}=O.viewport,a=(e[0]+1)/2*t,n=(e[1]+1)/2*r,i=O.getRay((0,ea.k)(),a,r-n);k.push({x:a,y:n,ray:i})}continue}if("tracked-pointer"!==c.targetRayMode)continue;let{handedness:l,targetRaySpace:p,gamepad:f}=c;if(!l)continue;let m=e.getPose(p,u);if(!m)continue;let h=ra(m,d.view);E.push(h);let g=V.CP.scaleNX((0,V.CP)(),this.scene.boundingSphereVisible,O.scale),b=(0,eP.A)();ea.k.intersectSphere3D(b,h,g)&&M.push(b);let y=x.b4.create(x.b4.Flag.None);(null===(t=null==f?void 0:f.buttons[0])||void 0===t?void 0:t.pressed)&&(y|=x.b4.Flag.Primary),(null===(r=null==f?void 0:f.buttons[1])||void 0===r?void 0:r.pressed)&&(y|=x.b4.Flag.Secondary),(null===(a=null==f?void 0:f.buttons[3])||void 0===a?void 0:a.pressed)&&(y|=x.b4.Flag.Auxilary),(null===(n=null==f?void 0:f.buttons[4])||void 0===n?void 0:n.pressed)&&(y|=x.b4.Flag.Forth),(null===(i=null==f?void 0:f.buttons[5])||void 0===i?void 0:i.pressed)&&(y|=x.b4.Flag.Five);let S="left"===l?this.prevInput.left:this.prevInput.right,T=this.intersect(O,d.view,D,m),C=S?this.intersect(O,d.view,D,S.targetRayPose):void 0,[I,A]=null!==(o=null==T?void 0:T.screen)&&void 0!==o?o:[0,0],[w,B]=null!==(s=null==C?void 0:C.screen)&&void 0!==s?s:[I,A],_=tr.S.set((0,tr.S)(),I-w,A-B);tr.S.setMagnitude(_,_,Math.min(100,tr.S.magnitude(_)));let[R,F]=tr.S.round(_,_);P.push({handedness:l,buttons:y,x:I,y:A,dx:R,dy:F,ray:h,axes:null==f?void 0:f.axes}),"left"===l?this.prevInput.left={targetRayPose:m}:this.prevInput.right={targetRayPose:m}}else this.prevInput.left=void 0,this.prevInput.right=void 0;return c.updateTrackedPointers(P),c.updateScreenTouches(k),f.ensureEnabled(),f.update(E,M,this.hit),!0}async setSession(e){if(this.xrSession!==e){if(await this.webgl.xr.set(e,{resolutionScale:this.props.resolutionScale}),this.xrSession=this.webgl.xr.session,this.prevInput={},this.hit=void 0,this.xrSession){this.xrRefSpace=await this.xrSession.requestReferenceSpace("local"),this.pointerHelper.setProps({enabled:"on"});let e=this.prevScale;if(0===e){let{radius:t}=this.scene.boundingSphereVisible;e=t?1/t*this.props.sceneRadiusInMeters:.01}this.camera.forceFull=!0,this.camera.scale=e,this.camera.minTargetDistance=this.props.minTargetDistance,this.prevScale=e}else this.xrRefSpace=void 0,ti.y.setZero(this.camera.headRotation),this.pointerHelper.setProps({enabled:"off"}),this.camera.forceFull=!1,this.camera.scale=1,this.camera.minTargetDistance=0}}async end(){await this.webgl.xr.end()}async request(){if(!navigator.xr)return;let e=await navigator.xr.isSessionSupported("immersive-ar")?await navigator.xr.requestSession("immersive-ar"):await navigator.xr.requestSession("immersive-vr");await this.setSession(e)}dispose(){var e;this.hoverSub.unsubscribe(),this.keyUpSub.unsubscribe(),this.gestureSub.unsubscribe(),this.sessionChangedSub.unsubscribe(),this.togglePassthrough.complete(),this.sessionChanged.complete(),this.isSupported.complete(),null===(e=navigator.xr)||void 0===e||e.removeEventListener("devicechange",this.checkSupported)}constructor(e,t,r,a,n,i,o,s={},l={}){var u;this.webgl=e,this.input=t,this.scene=r,this.camera=a,this.stereoCamera=n,this.pointerHelper=i,this.interactionHelper=o,this.togglePassthrough=new f.x,this.sessionChanged=new f.x,this.isSupported=new m.X(!1),this.xrSession=void 0,this.xrRefSpace=void 0,this.scaleFactor=1,this.prevScale=0,this.prevInput={},this.hit=void 0,this.checkSupported=async()=>
794{if(!navigator.xr){this.isSupported.next(!1);return}try{let[e,t]=await Promise.all([navigator.xr.isSessionSupported("immersive-ar"),navigator.xr.isSessionSupported("immersive-vr")]);this.isSupported.next(e||t)}catch(e){ev.Au&&console.warn(e),this.isSupported.next(!1)}},this.props={...C.e.getDefaultValues(ri),...s},this.attribs={...rn,...l},this.hoverSub=this.interactionHelper.events.hover.subscribe(({position:e})=>{this.hit=e}),this.sessionChangedSub=e.xr.changed.subscribe(async()=>{await this.setSession(e.xr.session),this.sessionChanged.next()}),this.checkSupported(),null===(u=navigator.xr)||void 0===u||u.addEventListener("devicechange",this.checkSupported),this.keyUpSub=t.keyUp.subscribe(({code:e,modifiers:t,key:r})=>{let a=this.attribs.bindings;I.K.matchKey(a.exit,e,t,r)&&this.end(),I.K.matchKey(a.togglePassthrough,e,t,r)&&this.togglePassthrough.next()}),this.gestureSub=t.gesture.subscribe(({scale:e,button:t,modifiers:r})=>{let a=this.attribs.bindings;I.K.match(a.gestureScale,t,r)&&this.setScaleFactor(e)})}}var rs=r(30441);class rl{setPickPadding(e){this.pickPadding!==e&&(this.pickPadding=e,this.update())}update(){let e=2*this.pickPadding+1;T.l_.set(this.viewport,0,0,e,e),this.buffers.setViewport(0,0,e,e),this.spiral=(0,O.v$)(this.pickPadding),this.size=e,this.pickPass.setSize(e,e)}render(e){ev.kM&&this.webgl.timer.mark("RayHelper.render",{captureStats:!0});let{renderer:t,scene:r,helper:a}=this;t.setTransparentBackground(!1),t.setDrawingBufferSize(this.size,this.size),t.setPixelRatio(1),t.setViewport(0,0,this.size,this.size),this.pickPass.render(t,e,r,a),ev.kM&&this.webgl.timer.markEnd("RayHelper.render")}identifyInternal(e,t){if(this.webgl.isContextLost)return;let{viewport:r}=this,a=this.buffers.getPickingId(e,t);if(void 0===a)return;let n=this.buffers.getDepth(e,t),i=y.AO.create(e,t,n);return(0,T.$j)(i,i,r,this.camera.inverseProjectionView),{id:a,position:i}}prepare(e,t){this.camera.far=t.far,this.camera.near=t.near,this.camera.fogFar=t.fogFar,this.camera.fogNear=t.fogNear,this.camera.forceFull=t.forceFull,this.camera.scale=t.scale,T.l_.copy(this.camera.viewport,this.viewport),L.V.copySnapshot(this.camera.state,{...t.state,mode:"orthographic"}),function(e,t,r){let{near:a,far:n,viewport:i}=e,o=2*Math.tan((0,O.Id)(.1)/2)*y.AO.distance(e.position,e.target)*e.scale,s=i.height/o,l=-i.width/2,u=i.width/2,c=i.height/2,d=-i.height/2,p=(u-l)/(2*s),f=(c-d)/(2*s),m=(u+l)/2,h=(c+d)/2;y.yb.ortho(e.projection,m-p,m+p,h+f,h-f,a,n);let g=y.AO.normalize((0,y.AO)(),t.direction),b=y.D6.fromUnitVec3((0,y.D6)(),g,y.AO.negUnitZ);y.D6.invert(b,b);let x=y.AO.clone(t.origin),S=y.AO.add((0,y.AO)(),x,g);y.yb.lookAt(e.view,x,S,r)}(this.camera,e,t.up),y.yb.mul(this.camera.projectionView,this.camera.projection,this.camera.view),y.yb.tryInvert(this.camera.inverseProjectionView,this.camera.projectionView),y.yb.copy(this.camera.viewEye,t.view)}getPickData(){let e=this.pickPadding;for(let t of this.spiral){let r=this.identifyInternal(e+t[0],e+t[1]);if(r)return r}}intersectsScene(e,t){return rs.C.scaleNX(this.sphere,this.scene.boundingSphereVisible,t),ea.k.isInsideSphere3D(e,this.sphere)||ea.k.isIntersectingSphere3D(e,this.sphere)}identify(e,t){if(this.intersectsScene(e,t.scale))return this.prepare(e,t),ev.kM&&this.webgl.timer.mark("RayHelper.identify"),this.render(this.camera),this.buffers.read(),ev.kM&&this.webgl.timer.markEnd("RayHelper.identify"),this.getPickData()}asyncIdentify(e,t){if(this.intersectsScene(e,t.scale))return this.prepare(e,t),ev.kM&&this.webgl.timer.mark("RayHelper.asyncIdentify"),this.render(this.camera),this.buffers.asyncRead(),ev.kM&&this.webgl.timer.markEnd("RayHelper.asyncIdentify"),{tryGet:()=>{let e=this.buffers.check();return e===l.Resolved?this.getPickData():e===l.Pending?"pending":void 0}}}reset(){this.buffers.reset(),this.pickPass.reset()}dispose(){this.buffers.dispose(),this.pickPass.dispose()}constructor(e,t,r,a,n){this.webgl=e,this.renderer=t,this.scene=r,this.helper=a,this.viewport=(0,T.l_)(),this.sphere=(0,rs.C)();let i=2*n.pickPadding+1;this.camera=new L.V,this.pickPass=new ew(e,i,i,1),this.buffers=new eM(this.webgl,this.pickPass,n.maxAsyncReadLag),this.pickPadding=n.pickPadding,this.update(),eE(e)||(this.asyncIdentify=(e,t)=>({tryGet:()=>this.identify(e,t)}))}}var ru=r(61445);let rc={intensity:C.e.Numeric(15,{min:1,max:100,step:1})},rd={camera:C.e.Group({mode:C.e.Select("perspective",C.e.arrayToOptions(["perspective","orthographic"]),{label:"Camera"}),helper:C.e.Group(te.n1,{isFlat:!0}),stereo:C.e.MappedStatic("off",{on:C.e.Group(ek),off:C.e.Group({})},{cycle:!0,hideIf:e=>(null==e?void 0:e.mode)!=="perspective"}),fov:C.e.Numeric(45,{min:10,max:130,step:1},{label:"Field of View"}),manualReset:C.e.Boolean(!1,{isHidden:!0})},{pivot:"mode"}),cameraFog:C.e.MappedStatic("on",{on:C.e.Group(rc),off:C.e.Group({})},{cycle:!0,description:"Show fog in the distance"}
794),cameraClipping:C.e.Group({radius:C.e.Numeric(100,{min:0,max:99,step:1},{label:"Clipping",description:"How much of the scene to show."}),far:C.e.Boolean(!0,{description:"Hide scene in the distance"}),minNear:C.e.Numeric(1,{min:.1,max:100,step:.1},{description:"Minimal allowed distance of near clipping plane from the camera. Note, may cause performance issues rendering impostors when set too small and cause issues with outline rendering when too close to 0."})},{pivot:"radius"}),viewport:C.e.MappedStatic("canvas",{canvas:C.e.Group({}),"static-frame":C.e.Group({x:C.e.Numeric(0),y:C.e.Numeric(0),width:C.e.Numeric(128),height:C.e.Numeric(128)}),"relative-frame":C.e.Group({x:C.e.Numeric(.33,{min:0,max:1,step:.01}),y:C.e.Numeric(.33,{min:0,max:1,step:.01}),width:C.e.Numeric(.5,{min:.01,max:1,step:.01}),height:C.e.Numeric(.5,{min:.01,max:1,step:.01})})}),cameraResetDurationMs:C.e.Numeric(250,{min:0,max:1e3,step:1},{description:"The time it takes to reset the camera."}),sceneRadiusFactor:C.e.Numeric(1,{min:1,max:10,step:.1}),transparentBackground:C.e.Boolean(!1),checkeredTransparentBackground:C.e.Boolean(!1),dpoitIterations:C.e.Numeric(2,{min:1,max:10,step:1}),pickPadding:C.e.Numeric(3,{min:0,max:10,step:1},{description:"Extra pixels to around target to check in case target is empty."}),userInteractionReleaseMs:C.e.Numeric(250,{min:0,max:1e3,step:1},{description:"The time before the user is not considered interacting anymore."}),multiSample:C.e.Group(ex),postprocessing:C.e.Group(eu.yM),marking:C.e.Group(e1),illumination:C.e.Group(tb),hiZ:C.e.Group(t5),renderer:C.e.Group(S.g4),trackball:C.e.Group(P),interaction:C.e.Group(es),debug:C.e.Group(W),handle:C.e.Group(tR),pointer:C.e.Group(tG),xr:C.e.Group(ri,{label:"XR"})},rp=C.e.getDefaultValues(rd),rf={trackball:k,xr:rn};(o=d||(d={})).DefaultAttribs={powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,antialias:!0,preserveDrawingBuffer:!0,preferWebGl1:!1,handleResize:()=>{}},o.Params={resolutionMode:C.e.Select("auto",C.e.arrayToOptions(["auto","scaled","native"])),pixelScale:C.e.Numeric(1,{min:.1,max:2,step:.05}),pickScale:C.e.Numeric(.25,{min:.1,max:1,step:.05}),transparency:C.e.Select("wboit",[["blended","Blended"],["wboit","Weighted, Blended"],["dpoit","Depth Peeling"]])},o.DefaultProps=C.e.getDefaultValues(o.Params),o.fromCanvas=function(e,t,r={},a={}){let n={...o.DefaultAttribs,...r},i={...o.DefaultProps,...a},{powerPreference:s,failIfMajorPerformanceCaveat:l,antialias:u,preserveDrawingBuffer:c,preferWebGl1:d}=n,p=(0,B.Qe)(e,{powerPreference:s,failIfMajorPerformanceCaveat:l,antialias:u,preserveDrawingBuffer:c,alpha:!0,depth:!0,premultipliedAlpha:!0,preferWebGl1:d});if(null===p)throw Error("Could not create a WebGL rendering context");let h=()=>{let e=i.pixelScale/("undefined"!=typeof window&&(null==window?void 0:window.devicePixelRatio)||1);return"auto"===i.resolutionMode?(0,t8.K1)()?e:i.pixelScale:"native"===i.resolutionMode?i.pixelScale:e},g=()=>{let e=h();C.setPixelScale(e),O.setPixelScale(e)},{pickScale:y,transparency:S}=i,T=h(),C=x.nZ.fromElement(e,{pixelScale:T,preventGestures:!0}),O=(0,B.kr)(p,{pixelScale:T}),I=new tK(O,t,{pickScale:y,transparency:S});if(ev.Au){let t=p.getExtension("WEBGL_lose_context");t&&e.addEventListener("mousedown",e=>{!O.isContextLost&&e.shiftKey&&e.ctrlKey&&e.altKey&&(ev.Au&&console.log("lose context"),t.loseContext(),setTimeout(()=>{O.isContextLost&&(ev.Au&&console.log("restore context"),t.restoreContext())},1e3))},!1)}let A=new f.x,w=e=>{O.setContextLost(),e.preventDefault(),ev.Au&&console.log("context lost"),A.next((0,b.z)())},D=()=>{O.isContextLost&&(O.handleContextRestored(()=>{I.draw.reset(),I.pick.reset(),I.illumination.reset()}),ev.Au&&console.log("context restored"))};e.addEventListener("webglcontextlost",w,!1),e.addEventListener("webglcontextrestored",D,!1);let E=new m.X(void 0);return{canvas:e,webgl:O,input:C,passes:I,attribs:n,get props(){return{...i}},contextLost:A,contextRestored:O.contextRestored,assetManager:t,changed:E,get pixelScale(){return h()},syncPixelScale:g,setProps:e=>{if(!e)return;let t=!1,r=!1;void 0!==e.resolutionMode&&e.resolutionMode!==i.resolutionMode&&(i.resolutionMode=e.resolutionMode,r=!0),void 0!==e.pixelScale&&e.pixelScale!==i.pixelScale&&(i.pixelScale=e.pixelScale,r=!0),r&&(g(),n.handleResize(),t=!0),void 0!==e.pickScale&&e.pickScale!==i.pickScale&&(i.pickScale=e.pickScale,I.setPickScale(e.pickScale),t=!0),void 0!==e.transparency&&e.transparency!==i.transparency&&(i.transparency=e.transparency,I.setTransparency(e.transparency),t=!0),t&&E.next(void 0)},dispose:t=>{C.dispose(),e.removeEventListener("webglcontextlost",w,!1),e.removeEventListener("webglcontextrestored",D,!1),O.destroy(t),A.complete(),E.complete()}}};let rm="undefined"!=typeof window?window.requestAnimationFrame:e=>setImmediate(()=>e(Date.now())),rh="undefined"!=typeof window?window.cancelAnimationFrame:e=>clearImmediate(e);
794function rg(e,t){t.transparentBackground&&t.checkeredTransparentBackground?Object.assign(e.style,{"background-image":"linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey), linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey)","background-size":"60px 60px","background-position":"0 0, 30px 30px"}):Object.assign(e.style,{"background-image":"","background-size":"","background-position":""})}(p||(p={})).create=function(e,t={},r={}){var a,n;let i,o,l;let{webgl:u,input:c,passes:d,assetManager:p,canvas:x,contextLost:C}=e,I={...(0,tQ.I8)(rp),...(0,tQ.I8)(t)},A={...(0,tQ.I8)(rf),...(0,tQ.I8)(r)},w=new Map,D=new Map,E=new m.X(0),M=new f.x,P=(0,b.z)(),k=new m.X(0),B=new m.X(0),z=new m.X(0),{contextRestored:N}=u,G=0,U=0,j=128,H=128,X=!1,W=0;rg(x,I),e$();let K=R.x.create(u,d.draw.transparency,{dColorMarker:I.renderer.colorMarker,dLightCount:null===(a=I.renderer.light)||void 0===a?void 0:a.length});function Q(){return K.boundingSphere.radius*I.sceneRadiusFactor}let Z=new L.V({position:y.AO.create(0,0,100),mode:I.camera.mode,fog:"on"===I.cameraFog.name?I.cameraFog.params.intensity:0,clipFar:I.cameraClipping.far,minNear:I.cameraClipping.minNear,fov:(0,O.Id)(I.camera.fov)},{x:G,y:U,width:j,height:H}),Y=new e_(Z,I.camera.stereo.params),$=s.create(c,Z,K,I.trackball,A.trackball),J=new tW(u,K,I),et=new t6(u,d.draw,x,I.hiZ),er=S.Th.create(u,I.renderer);er.setOcclusionTest(et.isOccluded);let ea=new tI(u,K);ea.updateRequired(I);let en={pickPadding:I.pickPadding,maxAsyncReadLag:5},ei=new eG(u,er,K,J,d.pick,{x:G,y:U,width:j,height:H},en),eo=new rl(u,er,K,J,en),es=new el(eF,eL,eT,c,Z,$,I.interaction),eu=new eC(d.multiSample);d.draw.postprocessing.background.update(Z,I.postprocessing.background,e=>{e&&eE()});let ec=!1,ed=!1;function ep(){return{transparency:e.props.transparency,transparentBackground:I.transparentBackground,hiZ:et.props.enabled,postprocessing:I.postprocessing.enabled,axes:(0,tQ.I8)(J.camera.props.axes)}}let ef=ep();function em(){var t;I.postprocessing.enabled=!eh.props.disablePostprocessing,e.setProps({transparency:"blended"}),et.setProps({enabled:!1}),J.camera.setProps({axes:{name:"off",params:{}}}),(null===(t=eh.session)||void 0===t?void 0:t.environmentBlendMode)==="alpha-blend"&&(I.transparentBackground=eb)}let eh=new ro(u,c,K,Z,Y,J.pointer,es,I.xr,A.xr),eg={request:async()=>{try{await eh.request()}catch(e){console.error(e),eg.requestFailed.next(e)}},end:()=>eh.end(),isSupported:new m.X(!1),isPresenting:new m.X(!1),requestFailed:new f.x},eb=!1,ey=[eh.isSupported.subscribe(e=>eg.isSupported.next(e)),eh.togglePassthrough.subscribe(()=>{var e;(null===(e=eh.session)||void 0===e?void 0:e.environmentBlendMode)==="alpha-blend"&&(eb=!I.transparentBackground)}),eh.sessionChanged.subscribe(()=>{var t;ed=!0,eh.session?(Object.assign(ef,ep()),eb=(null===(t=eh.session)||void 0===t?void 0:t.environmentBlendMode)==="alpha-blend",em()):(I.postprocessing.enabled=ef.postprocessing,I.transparentBackground=ef.transparentBackground,e.setProps({transparency:ef.transparency}),et.setProps({enabled:ef.hiZ}),J.camera.setProps({axes:ef.axes})),eR(),eg.isPresenting.next(!!eh.session)})],ex=!0;function eT(e){let t=F.Rh,r=_.hX.Empty;if(e){let a=J.camera.getLoci(e);if(a!==F.Rh)return{loci:a,repr:r};t=J.handle.getLoci(e),w.forEach((a,n)=>{let i=n.getLoci(e);(0,F.jF)(i)||((0,F.jF)(t)||console.warn("found another loci, this should not happen"),t=i,r=n)})}return{loci:t,repr:r}}let eO=[],eI=!1,eA=!1,ew=!1;function eD(e){if(!eA&&!ew){if(!ea.finalizeRequired(null==e?void 0:e.isSynchronous)){X=!0;return}(function(e,t){if(u.isContextLost||u.xr.session&&!t)return!1;let r=!1;ed&&(eW(!1),ed=!1,r=!0);let a=u.getDrawingBufferSize();if(G>a.width||G+j<0||U>a.height||U+H<0)return!1;t&&(em(),I.transparentBackground=eb);let n=function(){let e=!1;for(let[t,r]of eO)e=function(e,t){let{repr:r,loci:a}=e,n=!1;return r?n=r.mark(a,t)||n:w.forEach((e,r)=>{n=r.mark(a,t)||n}),n=J.handle.mark(a,t)||n,n=J.camera.mark(a,t)||n}(t,r)||e;return eO=[],e&&(K.update(void 0,!0),J.handle.scene.update(void 0,!0),J.camera.scene.update(void 0,!0),ea.updateRequired(I),ea.finalizeRequired(!0),M.next()),e}()&&(er.props.colorMarker||I.marking.enabled),i=!1;$.update(W);let o=Z.update(),s=eh.update(t);if(!s&&t)return!1;let l=e||o||r||X||s;if(X=!1,d.illumination.supported&&I.illumination.enabled&&!t)(l||n)&&(er.setOcclusionTest(null),d.illumination.restart()),d.illumination.shouldRender(I.illumination)&&(!eZ&&K.count>0||0===d.illumination.iteration||0===I.userInteractionReleaseMs)&&(ev.kM&&u.timer.mark("Canvas3D.render",{captureStats:!0}),d.illumination.render({renderer:er,camera:Z,scene:K,helper:J},I,!0),ev.kM&&u.timer.markEnd("Canvas3D.render"),ei.dirty=ei.dirty||l,i=!0);else{let e=eu.update(n||l,I.multiSample)&&!t;if(l||e||n){er.setOcclusionTest(et.isOccluded);let e=Z;
794("on"===I.camera.stereo.name||s)&&(s||Y.update(),e=Y),ev.kM&&u.timer.mark("Canvas3D.render",{captureStats:!0});let r={renderer:er,camera:e,scene:K,helper:J};if(eS.isEnabled(I.multiSample)&&!t){let e=I.multiSample.reduceFlicker&&!o&&n&&!$.isAnimating;eu.render(r,I,!0,e)}else d.draw.render(r,I,!0);et.render(Z),ev.kM&&u.timer.markEnd("Canvas3D.render"),ei.dirty=ei.dirty||l,i=!0}}return i})(!!(null==e?void 0:e.force),null==e?void 0:e.xrFrame)&&ex&&k.next((0,b.z)()-P)}}function eE(){X=!0}let eM=0;function eP(e,t){!ew&&(!u.xr.session||(null==t?void 0:t.xrFrame))&&(W=e,ez(null==t?void 0:t.isSynchronous),(null==t?void 0:t.updateControls)&&$.update(W),Z.transition.tick(W),et.tick(),(null==t||!t.manualDraw)&&(eD({isSynchronous:null==t?void 0:t.isSynchronous,xrFrame:null==t?void 0:t.xrFrame}),Z.transition.inTransition||u.isContextLost||es.tick(W)))}function ek(e){return l=e,u.xr.session?u.xr.session.requestAnimationFrame(e):rm(e)}function eB(e){l=void 0,u.xr.session?u.xr.session.cancelAnimationFrame(e):rh(e)}function eR(){eA=!1,l&&ek(l)}function eF(e){if(!u.isContextLost){if(ea.finalize(["pick"],!0),"origin"in e)return eo.identify(e,Z);{let t="on"===I.camera.stereo.name?Y:Z;return ei.identify(e[0],e[1],t)}}}function eL(e){if(!u.isContextLost){if(ea.finalize(["pick"],!0),"origin"in e)return eo.asyncIdentify(e,Z);{let t="on"===I.camera.stereo.name?Y:Z;return ei.asyncIdentify(e[0],e[1],t)}}}function ez(e=!1){let t=!K.needsCommit||((V.CP.copy(eN,K.boundingSphereVisible),et.clear(),K.commit(e?void 0:250))?(z.next(0),J.debug.isEnabled&&J.debug.update(),!I.camera.manualReset&&(0===E.value||function(){if(0===Z.state.radiusMax)return!0;if(Z.transition.inTransition||o)return!1;let e=!0,t=!0;for(let r of(V.CP.set(eU,Z.state.target,Z.state.radius),K.renderables)){if(!r.state.visible)continue;let a=r.values.boundingSphere.ref.value;if(!a.radius)continue;t=!1;let n=y.AO.distance(eU.center,a.center);if((n>eU.radius||n>a.radius||a.radius>Z.state.radiusMax)&&!V.CP.includes(eN,a))return!0;V.CP.overlaps(eU,a)&&(e=!1)}return e||!t&&eU.radius<=.1}())&&(ec=!0),0===eN.radius&&(i=0),I.camera.manualReset||Z.setState({radiusMax:Q()},0),E.next(w.size),ev.Au&&eV(),!0):(z.next(K.commitQueueSize),!1));ea.updateRequired(I),t&&(function(){if(!ec)return;eg.isPresenting.value||eh.resetScale();let{center:e,radius:t}=K.boundingSphereVisible,r=$.props.autoAdjustMinMaxDistance;if("on"===r.name){let e=r.params.minDistanceFactor*t+r.params.minDistancePadding,a=Math.max(r.params.maxDistanceFactor*t,r.params.maxDistanceMin);$.setProps({minDistance:e,maxDistance:a})}if(t>0){let r=void 0===i?I.cameraResetDurationMs:i,a=Z.getFocus(e,t),n="function"==typeof o?o(K,Z):o,s=n?{...a,...n}:a;Z.setState({...s,radiusMax:Q()},r)}i=void 0,o=void 0,ec=!1}(),eI&&(J.debug.isEnabled&&J.debug.update(),eD({force:!0}),eI=!1),B.next((0,b.z)()))}let eN=(0,V.CP)(),eU=(0,V.CP)();function eV(){let e=K.renderables.map(e=>({drawCount:e.values.drawCount.ref.value,instanceCount:e.values.instanceCount.ref.value,materialId:e.materialId,renderItemId:e.id,geometryType:e.values.dGeometryType.ref.value,"byteCount [MiB]":(0,ru.FH)(e.getByteCount()/1024/1024,3)}));console.groupCollapsed(`${e.length} RenderItems`),e.length<=64?console.table(e):console.log(e),console.log(JSON.stringify(u.stats,void 0,4));let{texture:t,cubeTexture:r,attribute:a,elements:n,pixelPack:i,renderbuffer:o}=u.resources.getByteCounts();console.log(JSON.stringify({texture:`${(t/1024/1024).toFixed(3)} MiB`,cubeTexture:`${(r/1024/1024).toFixed(3)} MiB`,attribute:`${(a/1024/1024).toFixed(3)} MiB`,elements:`${(n/1024/1024).toFixed(3)} MiB`,pixelPack:`${(i/1024/1024).toFixed(3)} MiB`,renderbuffer:`${(o/1024/1024).toFixed(3)} MiB`},void 0,4)),console.log(JSON.stringify({renderables:`${(K.renderables.reduce((e,t)=>e+t.getByteCount(),0)/1024/1024).toFixed(3)} MiB`,passes:{draw:`${(d.draw.getByteCount()/1024/1024).toFixed(3)} MiB`,illumination:`${(d.illumination.getByteCount()/1024/1024).toFixed(3)} MiB`,pick:`${(d.pick.getByteCount()/1024/1024).toFixed(3)} MiB`,hiZ:`${(et.getByteCount()/1024/1024).toFixed(3)} MiB`}},void 0,4)),ev.kM&&console.log(JSON.stringify(u.timer.formatedStats(),void 0,4)),console.groupEnd()}function ej(){let e=K.boundingSphere.radius>
7940?100-Math.round(Z.transition.target.radius/Q()*100):0;return{camera:{mode:Z.state.mode,helper:{...J.camera.props},stereo:{...I.camera.stereo},fov:Math.round((0,O.ZY)(Z.state.fov)),manualReset:!!I.camera.manualReset},cameraFog:Z.state.fog>0?{name:"on",params:{intensity:Z.state.fog}}:{name:"off",params:{}},cameraClipping:{far:Z.state.clipFar,radius:e,minNear:Z.state.minNear},cameraResetDurationMs:I.cameraResetDurationMs,sceneRadiusFactor:I.sceneRadiusFactor,transparentBackground:I.transparentBackground,checkeredTransparentBackground:I.checkeredTransparentBackground,dpoitIterations:I.dpoitIterations,pickPadding:I.pickPadding,userInteractionReleaseMs:I.userInteractionReleaseMs,viewport:I.viewport,postprocessing:{...I.postprocessing},marking:{...I.marking},multiSample:{...I.multiSample},illumination:{...I.illumination},hiZ:{...et.props},renderer:{...er.props},trackball:{...$.props},interaction:{...es.props},debug:{...J.debug.props},handle:{...J.handle.props},pointer:{...J.pointer.props},xr:{...eh.props}}}let eH=null==C?void 0:C.subscribe(()=>{ew=!0,ei.dirty=!0}),eq=N.subscribe(()=>{ei.reset(),eo.reset(),et.reset(),K.forEach(e=>{var t;(null===(t=e.values.meta)||void 0===t?void 0:t.ref.value.reset)&&(e.values.meta.ref.value.reset(),e.update())}),ew=!1,eD({force:!0}),eD({force:!0})}),eX=new m.X(0);function eW(e=!0){d.updateSize(),e$(),eJ(),e&&eE(),eX.next(+new Date)}(0,ev.WF)(eV);let eK=null===(n=e.changed)||void 0===n?void 0:n.subscribe(()=>{K.setTransparency(d.draw.transparency),eE()}),eQ=!1,eZ=!1,eY=[c.drag.subscribe(()=>{eQ=!0}),c.interactionEnd.subscribe(()=>{eQ=!1}),(0,h.T)(c.drag,c.pinch,c.wheel,c.interactionEnd).subscribe(()=>{M.next()}),M.subscribe(()=>{eZ=!0}),M.pipe((0,g.b)(I.userInteractionReleaseMs)).subscribe(()=>{eZ=eQ,!eQ&&d.illumination.supported&&I.illumination.enabled&&eE()})];if(ev.Au&&x){let e;let t=e=>{let t=e&&F.o_.getBoundingSphere(F.o_.normalize(e,"residue"));et.debugOcclusion(t)};c.click.subscribe(r=>{if(!r.modifiers.control||2!==r.button)return;let a=eF(y.Sg.create(r.x,r.y));if(!a){t(e=void 0);return}t(e=eT(a.id).loci)}),k.subscribe(()=>{setTimeout(()=>{t(e)},100)})}return{webgl:u,add:function e(t){D.has(t)||D.set(t,t.updated.subscribe(r=>{t.state.syncManually||e(t)}));let r=w.get(t),a=new Set;t.renderObjects.forEach(e=>a.add(e)),r?ee.F.areEqual(a,r)||(a.forEach(e=>{r.has(e)||K.add(e)}),r.forEach(e=>{a.has(e)||K.remove(e)})):t.renderObjects.forEach(e=>K.add(e)),w.set(t,a),K.update(t.renderObjects,!1),eI=!0,ev.Au&&eV()},remove:function(e){!function(e){let t=D.get(e);t&&(t.unsubscribe(),D.delete(e))}(e);let t=w.get(e);t&&(t.forEach(e=>K.remove(e)),w.delete(e),eI=!0,ev.Au&&eV())},commit:ez,update:(e,t)=>{if(e){if(!w.has(e))return;K.update(e.renderObjects,!!t)}else K.update(void 0,!!t);eI=!0},clear:()=>{D.forEach(e=>e.unsubscribe()),D.clear(),w.clear(),K.clear(),J.debug.clear(),eE(),E.next(w.size)},syncVisibility:()=>{0===Z.state.radiusMax&&(ec=!0,i=0),K.syncVisibility()&&J.debug.isEnabled&&J.debug.update(),eE()},requestDraw:eE,tick:eP,animate:function(){eA=!1,$.start((0,b.z)()),0===eM&&function e(t,r){eP((0,b.z)(),{xrFrame:r}),eM=ek(e)}(0)},resetTime:function(e){P=e,$.start(e)},pause:function(e=!1){eA=e,0!==eM&&(eB(eM),eM=0)},resume:eR,requestAnimationFrame:ek,cancelAnimationFrame:eB,identify:eF,asyncIdentify:eL,mark:function(e,t){eO.push([e,t])},getLoci:eT,handleResize:eW,requestResize:()=>{ed=!0},requestCameraReset:e=>{i=null==e?void 0:e.durationMs,o=null==e?void 0:e.snapshot,ec=!0},camera:Z,boundingSphere:K.boundingSphere,boundingSphereVisible:K.boundingSphereVisible,get notifyDidDraw(){return ex},set notifyDidDraw(v){ex=v},didDraw:k,commited:B,commitQueueSize:z,reprCount:E,resized:eX,setProps:(e,t=!1)=>{var r,a,n,i,o,s,l;let u="function"==typeof e?(0,tE.U)(ej(),e):e;void 0!==u.sceneRadiusFactor&&(I.sceneRadiusFactor=u.sceneRadiusFactor,Z.setState({radiusMax:Q()},0));let c=Object.create(null);u.camera&&void 0!==u.camera.mode&&u.camera.mode!==Z.state.mode&&(c.mode=u.camera.mode);let p=Math.round((0,O.ZY)(Z.state.fov));if(u.camera&&void 0!==u.camera.fov&&u.camera.fov!==p&&(c.fov=(0,O.Id)(u.camera.fov)),void 0!==u.cameraFog&&u.cameraFog.params){let e="on"===u.cameraFog.name?u.cameraFog.params.intensity:0;e!==Z.state.fog&&(c.fog=e)}if(void 0!==u.cameraClipping&&(void 0!==u.cameraClipping.far&&u.cameraClipping.far!==Z.state.clipFar&&(c.clipFar=u.cameraClipping.far),void 0!==u.cameraClipping.minNear&&u.cameraClipping.minNear!==Z.state.minNear&&(c.minNear=u.cameraClipping.minNear),void 0!==u.cameraClipping.radius)){let e=Q()/100*(100-u.cameraClipping.radius);e>0&&e!==c.radius&&(c.radius=Math.max(e,.01))}Object.keys(c).length>0&&Z.setState(c),(null===(r=u.camera)||void 0===r?void 0:r.helper)&&J.camera.setProps(u.camera.helper),(null===(a=u.camera)||void 0===a?void 0:a.manualReset)!==void 0&&(I.camera.manualReset=u.camera.manualReset),(null===(n=u.camera)||void 0===n?void 0:n.stereo)!==void 0&&(Object.assign(I.camera.stereo,u.camera.stereo),Y.setProps(I.camera.stereo.params)),void 0!==u.cameraResetDurationMs&&(I.cameraResetDurationMs=u.cameraResetDurationMs),void 0!==u.transparentBackgroun
794d&&(I.transparentBackground=u.transparentBackground),void 0!==u.checkeredTransparentBackground&&(I.checkeredTransparentBackground=u.checkeredTransparentBackground),void 0!==u.dpoitIterations&&(I.dpoitIterations=u.dpoitIterations),void 0!==u.pickPadding&&(I.pickPadding=u.pickPadding,ei.setPickPadding(I.pickPadding)),void 0!==u.userInteractionReleaseMs&&(I.userInteractionReleaseMs=u.userInteractionReleaseMs),void 0===u.viewport||I.viewport===u.viewport||I.viewport.name===u.viewport.name&&(0,q.wU)(I.viewport.params,u.viewport.params)||(I.viewport=u.viewport,e$(),eJ()),(null===(i=u.postprocessing)||void 0===i?void 0:i.background)&&(Object.assign(I.postprocessing.background,u.postprocessing.background),d.draw.postprocessing.background.update(Z,I.postprocessing.background,e=>{e&&!t&&eE()})),u.postprocessing&&Object.assign(I.postprocessing,u.postprocessing),u.marking&&Object.assign(I.marking,u.marking),u.illumination&&Object.assign(I.illumination,u.illumination),u.multiSample&&Object.assign(I.multiSample,u.multiSample),u.hiZ&&et.setProps(u.hiZ),u.renderer&&(K.setGlobals({dColorMarker:null!==(o=u.renderer.colorMarker)&&void 0!==o?o:er.props.colorMarker,dLightCount:null!==(l=null===(s=u.renderer.light)||void 0===s?void 0:s.length)&&void 0!==l?l:er.props.light.length}),er.setProps(u.renderer)),u.trackball&&$.setProps(u.trackball),u.interaction&&es.setProps(u.interaction),u.debug&&J.debug.setProps(u.debug),u.handle&&J.handle.setProps(u.handle),u.pointer&&J.pointer.setProps(u.pointer),u.xr&&eh.setProps(u.xr),"orthographic"===c.mode&&(I.camera.stereo.name="off"),("transparentBackground"in u||"checkeredTransparentBackground"in u||u.renderer&&"backgroundColor"in u.renderer)&&rg(x,I),ea.updateRequired(I),t||eE()},setAttribs:e=>{e.trackball&&$.setAttribs(e.trackball),e.xr&&eh.setAttribs(e.xr)},getImagePass:(e={})=>new tw(u,p,er,K,Z,J,e),getRenderObjects(){let e=[];return K.forEach((t,r)=>e.push(r)),e},get props(){return ej()},get attribs(){return{trackball:$.attribs,xr:eh.attribs}},get input(){return c},get stats(){return er.stats},get interaction(){return es.events},xr:eg,dispose:()=>{for(let e of(null==eH||eH.unsubscribe(),eq.unsubscribe(),null==eK||eK.unsubscribe(),ey))e.unsubscribe();for(let e of(ey.length=0,eY))e.unsubscribe();eY.length=0,rh(eM),l=void 0,eO=[],K.clear(),J.debug.clear(),$.dis
794pose(),er.dispose(),es.dispose(),et.dispose(),ei.dispose(),eo.dispose(),eh.dispose(),E.complete(),M.complete(),k.complete(),eX.complete(),B.complete(),z.complete(),eg.isPresenting.complete(),eg.isSupported.complete(),eg.requestFailed.complete(),(0,ev.v_)(eV)}};function e$(){let e=G,t=U,r=j,a=H,n=u.getDrawingBufferSize();"canvas"===I.viewport.name?(G=0,U=0,j=n.width,H=n.height):"static-frame"===I.viewport.name?(G=I.viewport.params.x*u.pixelRatio,H=I.viewport.params.height*u.pixelRatio,U=n.height-H-I.viewport.params.y*u.pixelRatio,j=I.viewport.params.width*u.pixelRatio):"relative-frame"===I.viewport.name&&(G=Math.round(I.viewport.params.x*n.width),H=Math.round(I.viewport.params.height*n.height),U=Math.round(n.height-H-I.viewport.params.y*n.height),j=Math.round(I.viewport.params.width*n.width)),(e!==G||t!==U||r!==j||a!==H)&&(X=!0)}function eJ(){ei.setViewport(G,U,j,H),er.setViewport(G,U,j,H),T.l_.set(Z.viewport,G,U,j,H),T.l_.set($.viewport,G,U,j,H),et.setViewport(G,U,j,H)}}},19609:function(e,t,r){r.d(t,{EJ:function(){return D},Rk:function(){return w},n1:function(){return A},sE:function(){return n}});var a,n,i=r(53596),o=r(97187),s=r(84785),l=r(34748),u=r(4376),c=r(89623),d=r(21071),p=r(23844),f=r(32747),m=r(48930),h=r(87144),g=r(67589),b=r(93898),y=r(30131),x=r(7922),S=r(99289),T=r(14086),C=r(97667),O=r(71211);let I={alpha:T.e.Numeric(.51,{min:0,max:1,step:.01},{isEssential:!0,label:"Opacity"}),colorX:T.e.Color(x.t.red,{isEssential:!0}),colorY:T.e.Color(x.t.green,{isEssential:!0}),colorZ:T.e.Color(x.t.blue,{isEssential:!0}),scale:T.e.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0}),location:T.e.Select("bottom-left",T.e.arrayToOptions(["bottom-left","bottom-right","top-left","top-right"])),locationOffsetX:T.e.Numeric(0),locationOffsetY:T.e.Numeric(0),originColor:T.e.Color(x.t.grey),radiusScale:T.e.Numeric(.075,{min:.01,max:.3,step:.001}),showPlanes:T.e.Boolean(!0),planeColorXY:T.e.Color(x.t.grey,{label:"Plane Color XY"}),planeColorXZ:T.e.Color(x.t.grey,{label:"Plane Color XZ"}),planeColorYZ:T.e.Color(x.t.grey,{label:"Plane Color YZ"}),showLabels:T.e.Boolean(!1),labelX:T.e.Text("X"),labelY:T.e.Text("Y"),labelZ:T.e.Text("Z"),labelColorX:T.e.Color(x.t.grey),labelColorY:T.e.Color(x.t.grey),labelColorZ:T.e.Color(x.t.grey),labelOpacity:T.e.Numeric(1,{min:0,max:1,step:.01}),labelScale:T.e.Numeric(.25,{min:.1,max:1,step:.01})},A={axes:T.e.MappedStatic("on",{on:T.e.Group(I),off:T.e.Group({})},{cycle:!0,description:"Show camera orientation axes"})};class w{constructor(e,t={}){this.webgl=e,this.props={axes:{name:"off",params:{}}},this.pixelRatio=1,this.eachGroup=(e,t)=>{if(!D(e))return!1;let r=!1;if(this.meshRenderObject){let a=this.meshRenderObject.values.uGroupCount.ref.value;for(let{groupId:n,instanceId:i}of e.elements){let e=i*a+n;t(o.X.ofSingleton(e))&&(r=!0)}}if(this.textRenderObject){let a=this.textRenderObject.values.uGroupCount.ref.value;for(let{groupId:n,instanceId:i}of e.elements){let e=i*a+n;t(o.X.ofSingleton(e))&&(r=!0)}}return r},this.scene=f.x.create(e,"blended"),this.camera=new O.V,h.AO.set(this.camera.up,0,1,0),h.AO.set(this.camera.target,0,0,0),this.setProps(t)}setProps(e){this.props=(0,i.U)(this.props,t=>{if(void 0!==e.axes&&(t.axes.name=e.axes.name,"on"===e.axes.name)){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let r={...e.axes.params,scale:e.axes.params.scale*this.pixelRatio,labelScale:e.axes.params.labelScale*this.pixelRatio};this.meshRenderObject=function(e){let t=function(e,t){let r=100*e.scale,a=function(e,t){let r=c.V.createState(512,256,t),a=100*e.scale,i=e.radiusScale*a,o=e.showLabels?100*e.labelScale/3:0,u=h.AO.scale((0,h.AO)(),h.AO.unitX,a-o),d=h.AO.scale((0,h.AO)(),h.AO.unitY,a-o),p=h.AO.scale((0,h.AO)(),h.AO.unitZ,a-o),f={radiusTop:i,radiusBottom:i,radialSegments:32};if(r.currentGroup=n.Origin,(0,l.H)(r,h.AO.origin,i,2),r.currentGroup=n.X,(0,l.H)(r,u,i,2),(0,s.vA)(r,h.AO.origin,u,1,f),r.currentGroup=n.Y,(0,l.H)(r,d,i,2),(0,s.vA)(r,h.AO.origin,d,1,f),r.currentGroup=n.Z,(0,l.H)(r,p,i,2),(0,s.vA)(r,h.AO.origin,p,1,f),e.showPlanes){h.AO.scale(u,u,.5),h.AO.scale(d,d,.5),h.AO.scale(p,p,.5),r.currentGroup=n.XY,c.V.addTriangle(r,h.AO.origin,u,d),c.V.addTriangle(r,h.AO.origin,d,u);let e=h.AO.add((0,h.AO)(),u,d);c.V.addTriangle(r,e,u,d),c.V.addTriangle(r,e,d,u),r.currentGroup=n.XZ,c.V.addTriangle(r,h.AO.origin,u,p),c.V.addTriangle(r,h.AO.origin,p,u);let t=h.AO.add((0,h.AO)(),u,p);c.V.addTriangle(r,t,u,p),c.V.addTriangle(r,t,p,u),r.currentGroup=n.YZ,c.V.addTriangle(r,h.AO.origin,d,p),c.V.addTriangle(r,h.AO.origin,p,d);let a=h.AO.add((0,h.AO)(),d,p);c.V.addTriangle(r,a,d,p),c.V.addTriangle(r,a,p,d)}return c.V.getMesh(r)}(e,void 0);return a.setBoundingSphere(m.CP.create(h.AO.create(r/2,r/2,r/2),r+r/4)),b.b.create("axes-mesh",{},a,t=>{switch(t){case n.X:return e.colorX;case n.Y:return e.colorY;case n.Z:return e.colorZ;case n.XY:return e.planeColorXY;case n.XZ:return e.planeColorXZ;case n.YZ:return e.planeColorYZ;case n.Origin:return e.originColor;default:return x.t.grey}},()=>1,()=>"")}(e);return b.b.createRenderObject(t,{...T.e.getDefaultValues(u.K.Params),...e,ignoreLight:!0,cellSize:0})}(r),this.scene.add(this.meshRenderObject),e.axes.params.showLabels?(this.textRenderObject=function(e){let t=function(e,t){let r=100*e.scale,a=function(e,t){let r=p.w.create(e,8,8,t),a=100*e.scale,i=h.AO.scale((0,h.AO)(),h.AO.unitX,a),o=h.AO.scale((0,h.AO)(),h.AO.unitY,a),s=h.AO.scale((0,h.AO)(),h.AO.unitZ,a),l=100*e.labelScale;return r.add(e.labelX,i[0],i[1],i[2],0,l,n.X),r.add(e.labelY,o[0],o[1],o[2],0,l,n.Y),r.add(e.labelZ,s[0],s[1],s[2],0,l,n.Z),r.getText()}(e,void 0);return a.setBoundingSphere(m.CP.create(h.AO.create(r/2,r/2,r/2),r)),b.b.create("axes-text",{},a,t=>{switch(t){case n.X:return e.labelColorX;case n.Y:return e.labelColorY;case n.Z:return e.labelColorZ;default:return x.t.grey}},()=>1,()=>"")}(e);return b.b.createRenderObject(t,{...T.e.getDefaultValues(d.x.Param
794s),...e,alpha:e.labelOpacity,cellSize:0})}(r),this.scene.add(this.textRenderObject)):this.textRenderObject=void 0,this.scene.commit(),h.AO.set(this.camera.position,0,0,200*r.scale),h.yb.lookAt(this.camera.view,this.camera.position,this.camera.target,this.camera.up),t.axes.params={...e.axes.params}}})}get isEnabled(){return"on"===this.props.axes.name}getLoci(e){var t;let{objectId:r,groupId:a,instanceId:i}=e;return(this.meshRenderObject&&r===this.meshRenderObject.id||this.textRenderObject&&r===this.textRenderObject.id)&&a!==n.None?(t=this,(0,g.SL)("camera-axes",t,[{groupId:a,instanceId:i}],void 0,()=>(function(e,t){let r=t.props.axes,a="on"===r.name?r.params.labelX:"X",i="on"===r.name?r.params.labelY:"Y",o="on"===r.name?r.params.labelZ:"Z";switch(e){case n.X:return`${a} Axis`;case n.Y:return`${i} Axis`;case n.Z:return`${o} Axis`;case n.XY:return`${a}${i} Plane`;case n.XZ:return`${a}${o} Plane`;case n.YZ:return`${i}${o} Plane`;case n.Origin:return"Origin";default:return"Axes"}})(a,t))):g.Rh}mark(e,t){return!!(S.E5.is(S.E5.Highlighting,t)&&((0,g.h)(e)||D(e)&&e.data===this))&&(y.u.mark(this.meshRenderObject,e,t,this.eachGroup)||y.u.mark(this.textRenderObject,e,t,this.eachGroup))}update(e){if(!this.meshRenderObject||"off"===this.props.axes.name)return;this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),function(e,t,r){let{near:a,far:n}=e,i=-t.width/2,o=t.width/2,s=t.height/2,l=-t.height/2,u=(o-i)/2,c=(s-l)/2,d=(o+i)/2,p=(s+l)/2,f=d-u,m=d+u,g=p+c,b=p-c;if(r.enabled){let e=(o-i)/r.width,t=(s-l)/r.height;f+=e*r.offsetX,m=f+e*r.width,g-=t*r.offsetY,b=g-t*r.height}h.yb.ortho(e.projection,f,m,g,b,a,n)}(this.camera,e.viewport,e.viewOffset),h.yb.extractRotation(this.scene.view,e.view);let t=this.textRenderObject?this.textRenderObject.values.boundingSphere.ref.value.radius:this.meshRenderObject.values.boundingSphere.ref.value.radius,r=this.props.axes.params.location,a=this.props.axes.params.locationOffsetX*this.pixelRatio,n=this.props.axes.params.locationOffsetY*this.pixelRatio;"bottom-left"===r?h.yb.setTranslation(this.scene.view,h.AO.create(-e.viewport.width/2+t+a,-e.viewport.height/2+t+n,0)):"bottom-right"===r?h.yb.setTranslation(this.scene.view,h.AO.create(e.viewport.width/2-t-a,-e.viewport.height/2+t+n,0)):"top-left"===r?h.yb.setTranslation(this.scene.view,h.AO.create(-e.viewport.width/2+t+a,e.viewport.height/2-t-n,0)):"top-right"===r?h.yb.setTranslation(this.scene.view,h.AO.create(e.viewport.width/2-t-a,e.viewport.height/2-t-n,0)):(0,C.UT)(r)}}function D(e){return"data-loci"===e.kind&&"camera-axes"===e.tag}(a=n||(n={}))[a.None=0]="None",a[a.X=1]="X",a[a.Y=2]="Y",a[a.Z=3]="Z",a[a.XY=4]="XY",a[a.XZ=5]="XZ",a[a.YZ=6]="YZ",a[a.Origin=7]="Origin"},57133:function(e,t,r){r.d(t,{z:function(){return y},y:function(){return x}});var a=r(68971),n=r(62113),i=r(18406),o=r(45705),s=r(57155),l=r(91407),u=r(87144),c=r(85764),d=r(14086),p=r(10410),f=r(48502);let m=`
795precision highp float;
796precision highp int;
797precision highp sampler2D;
798
799uniform vec2 uTexSizeInv;
800
801uniform sampler2D tBlur1;
802uniform sampler2D tBlur2;
803uniform sampler2D tBlur3;
804uniform sampler2D tBlur4;
805uniform sampler2D tBlur5;
806uniform float uBloomStrength;
807uniform float uBloomRadius;
808uniform float uBloomFactors[5];
809uniform vec3 uBloomTints[5];
810
811float lerpBloomFactor(const in float factor) {
812    float mirrorFactor = 1.2 - factor;
813    return mix(factor, mirrorFactor, uBloomRadius);
814}
815
816void main(void) {
817    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
818
819    gl_FragColor = uBloomStrength * (
820        lerpBloomFactor(uBloomFactors[0]) * vec4(uBloomTints[0], 1.0) * texture2D(tBlur1, coords) +
821        lerpBloomFactor(uBloomFactors[1]) * vec4(uBloomTints[1], 1.0) * texture2D(tBlur2, coords) +
822        lerpBloomFactor(uBloomFactors[2]) * vec4(uBloomTints[2], 1.0) * texture2D(tBlur3, coords) +
823        lerpBloomFactor(uBloomFactors[3]) * vec4(uBloomTints[3], 1.0) * texture2D(tBlur4, coords) +
824        lerpBloomFactor(uBloomFactors[4]) * vec4(uBloomTints[4], 1.0) * texture2D(tBlur5, coords)
825    );
826}
827`,h=`
828precision highp float;
829precision highp int;
830precision highp sampler2D;
831
832uniform sampler2D tColor;
833uniform sampler2D tEmissive;
834uniform sampler2D tDepth;
835uniform vec2 uTexSizeInv;
836
837uniform vec3 uDefaultColor;
838uniform float uDefaultOpacity;
839uniform float uLuminosityThreshold;
840uniform float uSmoothWidth;
841
842#include common
843
844float getDepth(const in vec2 coords) {
845    #ifdef depthTextureSupport
846        return texture2D(tDepth, coords).r;
847    #else
848        return unpackRGBAToDepth(texture2D(tDepth, coords));
849    #endif
850}
851
852bool isBackground(const in float depth) {
853    return depth == 1.0;
854}
855
856void main(void) {
857    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
858    vec4 texel = texture2D(tColor, coords);
859    float emissive = texture2D(tEmissive, coords).a;
860    float depth = getDepth(coords);
861
862    if (isBackground(depth)) {
863        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
864        return;
865    }
866
867    vec4 outputColor = vec4(uDefaultColor.rgb, uDefaultOpacity);
868
869    #if defined(dMode_luminosity)
870        vec3 luma = vec3(0.299, 0.587, 0.114);
871        float v = dot(texel.xyz, luma);
872        float alpha = smoothstep(uLuminosityThreshold, uLuminosityThreshold + uSmoothWidth, v);
873
874        gl_FragColor = mix(outputColor, texel, alpha);
875    #elif defined(dMode_emissive)
876        gl_FragColor = mix(outputColor, texel, emissive);
877    #endif
878}
879`,g=`
880precision highp float;
881precision highp int;
882precision highp sampler2D;
883
884uniform sampler2D tInput;
885uniform vec2 uTexSizeInv;
886
887uniform vec2 uDirection;
888uniform float uGaussianCoefficients[dKernelRadius];
889
890void main(void) {
891    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
892    float weightSum = uGaussianCoefficients[0];
893    vec4 diffuseSum = texture2D(tInput, coords) * weightSum;
894
895    for(int i = 1; i < dKernelRadius; ++i) {
896        float x = float(i);
897        float w = uGaussianCoefficients[i];
898        vec2 offset = uDirection * uTexSizeInv * x;
899        vec4 sample1 = texture2D(tInput, coords + offset);
900        vec4 sample2 = texture2D(tInput, coords - offset);
901        diffuseSum += (sample1 + sample2) * w;
902        weightSum += 2.0 * w;
903    }
904
905    gl_FragColor = diffuseSum / weightSum;
906}
907`;var b=r(67738);let y={strength:d.e.Numeric(1,{min:0,max:3,step:.1}),radius:d.e.Numeric(0,{min:0,max:1,step:.01}),threshold:d.e.Numeric(0,{min:0,max:1,step:.01},{description:"Luminosity threshold",hideIf:e=>"emissive"===e.mode}),mode:d.e.Select("emissive",[["luminosity","Luminosity"],["emissive","Emissive"]])};class x{static isEnabled(e){return e.enabled&&"on"===e.bloom.name}constructor(e,t,r){this.webgl=e,this.horizontalBlurTargets=[],this.verticalBlurTargets=[],this.emissiveTarget=e.createRenderTarget(t,r,!0,"uint8","linear","rgba"),this.luminosityTarget=e.createRenderTarget(t,r,!1,"uint8","linear"),this.compositeTarget=e.createRenderTarget(t,r,!1,"uint8","linear");let i=Math.round(t/2),o=Math.round(r/2);for(let t=0;t<5;++t)this.horizontalBlurTargets[t]=e.createRenderTarget(i,o,!1,"uint8","linear"),this.verticalBlurTargets[t]=e.createRenderTarget(i,o,!1,"uint8","linear"),i=Math.round(i/2),o=Math.round(o/2);let d=(0,l.DU)();this.luminosityRenderable=function(e,t,r,i){let o=t.getWidth(),l=t.getHeight(),d={...a.GE,tColor:c.IO.create(t),tEmissive:c.IO.create(r),tDepth:c.IO.create(i),uTexSizeInv:c.IO.create(u.Sg.create(1/o,1/l)),uDefaultColor:c.IO.create((0,u.AO)()),uDefaultOpacity:c.IO.create(0),uLuminosityThreshold:c.IO.create(0),uSmoothWidth:c.IO.create(1),dMode:c.IO.create("emissive")},p={...S},f=(0,s.s8)(e,"triangles",T,p,d);return(0,n.T)(f,d)}(e,d,d,d),this.blurRenderable=function(e,t){let r=t.getWidth(),i=t.getHeight(),o={...a.GE,tInput:c.IO.create(t),uTexSizeInv:c.IO.create(u.Sg.create(1/r,1/i)),uDirection:c.IO.create((0,u.Sg)()),uGaussianCoefficients:c.IO.create([]),dKernelRadius:c.IO.create(O[0])},l={...w},d=(0,s.s8)(e,"triangles",D,l,o);return(0,n.T)(d,o)}(e,d),this.compositeRenderable=function(e,t,r,i,o,l,d,p){let f={...a.GE,uTexSizeInv:c.IO.create(u.Sg.create(t,r)),tBlur1:c.IO.create(i),tBlur2:c.IO.create(o),tBlur3:c.IO.create(l),tBlur4:c.IO.create(d),tBlur5:c.IO.create(p),uBloomStrength:c.IO.create(1),uBloomRadius:c.IO.create(0),uBloomFactors:c.IO.create([1,.8,.6,.4,.2]),uBloomTints:c.IO.create(Array(15).fill(1))},m={...E},h=(0,s.s8)(e,"triangles",M,m,f);return(0,n.T)(h,f)}(e,t,r,this.verticalBlurTargets[0].texture,this.verticalBlurTargets[1].texture,this.verticalBlurTargets[2].texture,this.verticalBlurTargets[3].texture,this.verticalBlurTargets[4].texture),this.copyRenderable=(0,a.Oz)(e,this.compositeTarget.texture)}getByteCount(){return this.emissiveTarget.getByteCount()+this.luminosityTarget.getByteCount()+this.compositeTarget.getByteCount()+this.horizontalBlurTargets.reduce((e,t)=>
907e+t.getByteCount(),0)+this.verticalBlurTargets.reduce((e,t)=>e+t.getByteCount(),0)}setSize(e,t){let r=this.luminosityTarget.getWidth(),a=this.luminosityTarget.getHeight();if(e!==r||t!==a){this.emissiveTarget.setSize(e,t),this.luminosityTarget.setSize(e,t),this.compositeTarget.setSize(e,t);let r=Math.round(e/2),a=Math.round(t/2);for(let e=0;e<5;++e)this.horizontalBlurTargets[e].setSize(r,a),this.verticalBlurTargets[e].setSize(r,a),r=Math.round(r/2),a=Math.round(a/2);c.IO.update(this.luminosityRenderable.values.uTexSizeInv,u.Sg.set(this.compositeRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),c.IO.update(this.compositeRenderable.values.uTexSizeInv,u.Sg.set(this.compositeRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),c.IO.update(this.copyRenderable.values.uTexSize,u.Sg.set(this.copyRenderable.values.uTexSize.ref.value,e,t))}}update(e,t,r,a){let n=!1;this.luminosityRenderable.values.tColor.ref.value!==e&&(c.IO.update(this.luminosityRenderable.values.tColor,e),n=!0),this.luminosityRenderable.values.tEmissive.ref.value!==t&&(c.IO.update(this.luminosityRenderable.values.tEmissive,t),n=!0),this.luminosityRenderable.values.tDepth.ref.value!==r&&(c.IO.update(this.luminosityRenderable.values.tDepth,r),n=!0),this.luminosityRenderable.values.dMode.ref.value!==a.mode&&(c.IO.update(this.luminosityRenderable.values.dMode,a.mode),n=!0),c.IO.updateIfChanged(this.luminosityRenderable.values.uLuminosityThreshold,a.threshold),n&&this.luminosityRenderable.update();let i=!1;this.blurRenderable.values.tInput.ref.value!==e&&(c.IO.update(this.blurRenderable.values.tInput,e),i=!0),i&&this.blurRenderable.update(),c.IO.update(this.compositeRenderable.values.uBloomRadius,a.radius),c.IO.update(this.compositeRenderable.values.uBloomStrength,a.strength)}render(e,t){f.kM&&this.webgl.timer.mark("BloomPass.render");let{gl:r,state:a}=this.webgl,{x:n,y:i,width:o,height:s}=e;a.viewport(n,i,o,s),a.scissor(n,i,o,s),a.enable(r.SCISSOR_TEST),a.disable(r.BLEND),a.disable(r.DEPTH_TEST),a.depthMask(!1),this.luminosityTarget.bind(),this.luminosityRenderable.render();for(let e=0;e<5;++e){let t=this.horizontalBlurTargets[e].getWidth(),r=this.horizontalBlurTargets[e].getHeight();a.viewport(0,0,t,r),a.scissor(0,0,t,r),c.IO.update(this.blurRenderable.values.dKernelRadius,O[e]),c.IO.update(this.blurRenderable.values.uGaussianCoefficients,C(O[e])),c.IO.update(this.blurRenderable.values.uTexSizeInv,u.Sg.set(this.blurRenderable.values.uTexSizeInv.ref.value,1/t,1/r)),this.horizontalBlurTargets[e].bind(),c.IO.update(this.blurRenderable.values.tInput,0===e?this.luminosityTarget.texture:this.verticalBlurTargets[e-1].texture),c.IO.update(this.blurRenderable.values.uDirection,I),this.blurRenderable.update(),this.blurRenderable.render(),this.verticalBlurTargets[e].bind(),c.IO.update(this.blurRenderable.values.tInput,this.horizontalBlurTargets[e].texture),c.IO.update(this.blurRenderable.values.uDirection,A),this.blurRenderable.update(),this.blurRenderable.render()}a.viewport(n,i,o,s),a.scissor(n,i,o,s),this.compositeTarget.bind(),this.compositeRenderable.update(),this.compositeRenderable.render(),t?t.bind():this.webgl.bindDrawingBuffer(),a.enable(r.BLEND),a.blendFunc(r.ONE,r.ONE),this.copyRenderable.render(),f.kM&&this.webgl.timer.markEnd("BloomPass.render")}}let S={...a.iz,tColor:(0,i.U2)("texture","rgba","ubyte","linear"),tEmissive:(0,i.U2)("texture","rgba","ubyte","linear"),tDepth:(0,i.U2)("texture","rgba","ubyte","nearest"),uTexSizeInv:(0,i.wt)("v2"),uDefaultColor:(0,i.wt)("v3"),uDefaultOpacity:(0,i.wt)("f"),uLuminosityThreshold:(0,i.wt)("f"),uSmoothWidth:(0,i.wt)("f"),dMode:(0,i.O0)("string",["luminosity","emissive"])},T=(0,o.Lq)("Bloom Luminosity",p.C,h),C=(0,b.m)(function(e){let t=[];for(let r=0;r<e;++r)t.push(.39894*Math.exp(-.5*r*r/(e*e))/e);return t}),O=[3,5,7,9,11],I=u.Sg.create(1,0),A=u.Sg.create(0,1),w={...a.iz,tInput:(0,i.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,i.wt)("v2"),uDirection:(0,i.wt)("v2"),uGaussianCoefficients:(0,i.wt)("f[]"),dKernelRadius:(0,i.O0)("number")},D=(0,o.Lq)("Bloom Blur",p.C,g),E={...a.iz,tBlur1:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur2:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur3:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur4:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur5:(0,i.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,i.wt)("v2"),uBloomStrength:(0,i.wt)("f"),uBloomRadius:(0,i.wt)("f"),uBloomFactors:(0,i.wt)("f[]"),uBloomTints:(0,i.wt)("v3[]")},M=(0,o.Lq)("Bloom Composite",p.C,m)},12175:function(e,t,r){r.d(t,{$:function(){return h},z:function(){return g}});
907var a=r(68971),n=r(62113),i=r(18406),o=r(45705),s=r(57155),l=r(91407),u=r(87144),c=r(85764),d=r(14086),p=r(10410);let f=`
908precision highp float;
909precision highp int;
910precision highp sampler2D;
911
912#include common
913
914uniform sampler2D tColor;
915uniform sampler2D tDepthOpaque;
916uniform sampler2D tDepthTransparent;
917
918uniform vec2 uTexSize;
919uniform vec4 uBounds;
920
921uniform float uBlurSpread;
922uniform float uInFocus;
923uniform float uPPM;
924
925uniform float uNear; // Near plane
926uniform float uFar;  // Far plane
927
928uniform mat4 uInvProjection; // Inverse projection
929uniform mat4 uProjection; // projection
930
931uniform int uMode; // 0-planar, 1-spherical
932uniform vec3 uCenter; // Center of focus sphere in view space
933
934// Function to convert depth value from depth buffer to view space Z
935float getViewZ(const in float depth) {
936    #if dOrthographic == 1
937        return orthographicDepthToViewZ(depth, uNear, uFar);
938    #else
939        return perspectiveDepthToViewZ(depth, uNear, uFar);
940    #endif
941}
942
943// Retrieve depth from opaque depth texture
944float getDepthOpaque(const in vec2 coords) {
945    #ifdef depthTextureSupport
946        return texture2D(tDepthOpaque, coords).r;
947    #else
948        return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
949    #endif
950}
951
952// Retrieve depth from transparent depth texture
953float getDepthTransparent(const in vec2 coords) {
954    return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
955}
956
957bool isBackground(const in float depth) {
958    return depth == 1.0;
959}
960
961float getDepth(const in vec2 coords) {
962    return min(getDepthOpaque(coords), getDepthTransparent(coords));
963}
964
965float getCOC(vec2 uv) {
966    float depth = getDepth(uv);
967    float viewDist = getViewZ(depth);
968    vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection);
969    float focusDist = length(aposition - uCenter);
970    float coc = 0.0;  // Circle of Confusion
971    if (uMode == 0) { // planar Depth of field
972        coc = (abs(viewDist) - uInFocus) / uPPM;  //focus distance, focus range
973    } else if(uMode == 1) { // spherical Depth of field
974        coc = focusDist / uPPM ;
975    }
976    coc = clamp(coc, -1.0, 1.0);
977    return coc;
978}
979
980// Simple box blur for blurring the image
981vec3 getBlurredImage(vec2 coords) {
982    vec4 blurColor = vec4(0);
983    vec2 texelSize = vec2(1.0 / uTexSize.x, 1.0 / uTexSize.y);
984    float count = 0.0;
985    for (int x = 0; x < int(dBlurSize); x++) {
986        for (int y = 0; y < int(dBlurSize); y++) {
987            vec2 offset = vec2(float(x) - float(dBlurSize) / 2.0, float(y) - float(dBlurSize) / 2.0);
988            vec2 uvPixel = coords.xy + offset * texelSize * uBlurSpread;
989            float coc = getCOC(uvPixel);
990            coc = smoothstep(0.0, 1.0, abs(coc));
991            // mix blurColor with new color with weight coc
992            blurColor.rgb = blurColor.rgb + texture2D(tColor, uvPixel).xyz * coc;
993            count+=coc;
994        }
995    }
996    blurColor = blurColor / count;
997    return blurColor.rgb;
998}
999
1000// simplification from https://catlikecoding.com/unity/tutorials/advanced-rendering/depth-of-field/
1001void main() {
1002    vec2 uv = gl_FragCoord.xy / uTexSize;
1003    vec4 color = texture2D(tColor, uv);
1004    float depth = getDepth(uv);
1005
1006    float viewDist = getViewZ(depth);
1007
1008    vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection);
1009    float focusDist = length(aposition - uCenter);
1010    vec3 blurColor = getBlurredImage(uv);
1011
1012    float coc = getCOC(uv); // Circle of Confusion
1013
1014    // for debugging the coc
1015    // color.rgb = (coc < 0.0) ? (1.0 - abs(coc)) * vec3(1.0,0.0,0.0) : vec3(0.0, 1.0 - coc, 0.0) ;//mix(color.rgb, blurColor.rgb, abs(coc));
1016    color.rgb = mix(color.rgb, blurColor, smoothstep(0.0, 1.0, abs(coc))); // Smooth blending based on CoC
1017    gl_FragColor = color;
1018}
1019`;var m=r(48502);let h={blurSize:d.e.Numeric(9,{min:1,max:32,step:1}),blurSpread:d.e.Numeric(1,{min:0,max:10,step:.1}),inFocus:d.e.Numeric(0,{min:-5e3,max:5e3,step:1},{description:"Distance from the scene center that will be in focus"}),PPM:d.e.Numeric(20,{min:0,max:5e3,step:.1},{description:"Size of the area that will be in focus"}),center:d.e.Select("camera-target",d.e.arrayToOptions(["scene-ce
1019nter","camera-target"])),mode:d.e.Select("plane",d.e.arrayToOptions(["plane","sphere"]))};class g{static isEnabled(e){return e.enabled&&"off"!==e.dof.name}constructor(e,t,r){this.webgl=e,this.target=e.createRenderTarget(t,r,!1);let i=(0,l.DU)();this.renderable=function(e,t,r,i){let o=t.getWidth(),l=t.getHeight(),d={...a.GE,tDepthOpaque:c.IO.create(r),tDepthTransparent:c.IO.create(i),tColor:c.IO.create(t),uTexSize:c.IO.create(u.Sg.create(o,l)),uProjection:c.IO.create(u.yb.identity()),uInvProjection:c.IO.create(u.yb.identity()),uBounds:c.IO.create((0,u.T8)()),uCenter:c.IO.create((0,u.AO)()),uMode:c.IO.create(0),dOrthographic:c.IO.create(0),uNear:c.IO.create(1),uFar:c.IO.create(1e4),dBlurSize:c.IO.create(5),uBlurSpread:c.IO.create(300),uInFocus:c.IO.create(20),uPPM:c.IO.create(20)},p={...b},f=(0,s.s8)(e,"triangles",y,p,d);return(0,n.T)(f,d)}(e,i,i,i)}getByteCount(){return this.target.getByteCount()}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){let r=this.target.texture.getWidth(),a=this.target.texture.getHeight();(e!==r||t!==a)&&(this.target.setSize(e,t),c.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a,n,i){let o=!1;this.renderable.values.tColor.ref.value!==t&&(c.IO.update(this.renderable.values.tColor,t),o=!0),this.renderable.values.tDepthOpaque.ref.value!==r&&(c.IO.update(this.renderable.values.tDepthOpaque,r),o=!0),this.renderable.values.tDepthTransparent.ref.value!==a&&(c.IO.update(this.renderable.values.tDepthTransparent,a),o=!0);let s="orthographic"===e.state.mode?1:0,l=this.renderable.values.uInvProjection.ref.value;u.yb.invert(l,e.projection);let[d,p]=this.renderable.values.uTexSize.ref.value,f=e.viewport;c.IO.update(this.renderable.values.uProjection,e.projection),c.IO.update(this.renderable.values.uInvProjection,l),c.IO.update(this.renderable.values.uMode,"sphere"===n.mode?1:0),u.T8.set(this.renderable.values.uBounds.ref.value,f.x/d,f.y/p,(f.x+f.width)/d,(f.y+f.height)/p),c.IO.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),c.IO.updateIfChanged(this.renderable.values.uNear,e.near),c.IO.updateIfChanged(this.renderable.values.uFar,e.far),c.IO.updateIfChanged(this.renderable.values.dOrthographic,s);let m=Math.round(n.blurSize*this.webgl.pixelRatio);this.renderable.values.dBlurSize.ref.value!==m&&(c.IO.update(this.renderable.values.dBlurSize,m),o=!0);let h="scene-center"===n.center?i.center:e.state.target,g=u.AO.distance(e.state.position,h)+n.inFocus;c.IO.updateIfChanged(this.renderable.values.uInFocus,g*e.scale);let b=this.renderable.values.uCenter.ref.value;u.AO.transformMat4(b,h,e.view),c.IO.update(this.renderable.values.uCenter,b),c.IO.updateIfChanged(this.renderable.values.uBlurSpread,n.blurSpread),c.IO.updateIfChanged(this.renderable.values.uPPM,n.PPM*e.scale),o&&this.renderable.update()}render(e,t){m.kM&&this.webgl.timer.mark("DofPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),m.kM&&this.webgl.timer.markEnd("DofPass.render")}}let b={...a.iz,tDepthOpaque:(0,i.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,i.U2)("texture","rgba","ubyte","nearest"),tColor:(0,i.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,i.wt)("v2"),uProjection:(0,i.wt)("m4"),uInvProjection:(0,i.wt)("m4"),uBounds:(0,i.wt)("v4"),uCenter:(0,i.wt)("v3"),uMode:(0,i.wt)("i"),dOrthographic:(0,i.O0)("number"),uNear:(0,i.wt)("f"),uFar:(0,i.wt)("f"),dBlurSize:(0,i.O0)("number"),uBlurSpread:(0,i.wt)("f"),uInFocus:(0,i.wt)("f"),uPPM:(0,i.wt)("f")},y=(0,o.Lq)("dof",p.C,f)},59978:function(e,t,r){r.d(t,{TY:function(){return h},f1:function(){return g}});var a=r(68971),n=r(18406),i=r(45705),o=r(85764),s=r(57155),l=r(62113),u=r(87144),c=r(14086),d=r(10410);let p=`
1020precision highp float;
1021precision highp int;
1022precision highp sampler2D;
1023
1024uniform sampler2D tDepthOpaque;
1025uniform sampler2D tDepthTransparent;
1026uniform vec2 uTexSize;
1027
1028uniform float uNear;
1029uniform float uFar;
1030uniform mat4 uInvProjection;
1031
1032uniform float uOutlineThreshold;
1033
1034#include common
1035
1036float getViewZ(const in float depth) {
1037    #if dOrthographic == 1
1038        return orthographicDepthToViewZ(depth, uNear, uFar);
1039    #else
1040        return perspectiveDepthToViewZ(depth, uNear, uFar);
1041    #endif
1042}
1043
1044float getDepthOpaque(const in vec2 coords) {
1045    #ifdef depthTextureSupport
1046        return texture2D(tDepthOpaque, coords).r;
1047    #else
1048        return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
1049    #endif
1050}
1051
1052vec2 getDepthTransparentWithAlpha(const in vec2 coords) {
1053    #ifdef dTransparentOutline
1054        return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
1055    #else
1056        return vec2(1.0, 0.0);
1057    #endif
1058}
1059
1060bool isBackground(const in float depth) {
1061    return depth == 1.0;
1062}
1063
1064float getPixelSize(const in vec2 coords, const in float depth) {
1065    vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
1066    vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
1067    return distance(viewPos0, viewPos1);
1068}
1069
1070void main(void) {
1071    float backgroundViewZ = 2.0 * uFar;
1072
1073    vec2 coords = gl_FragCoord.xy / uTexSize;
1074    vec2 invTexSize = 1.0 / uTexSize;
1075
1076    float selfDepthOpaque = getDepthOpaque(coords);
1077    float selfViewZOpaque = isBackground(selfDepthOpaque) ? backgroundViewZ : getViewZ(selfDepthOpaque);
1078    float pixelSizeOpaque = getPixelSize(coords, selfDepthOpaque) * uOutlineThreshold;
1079
1080    vec2 selfDepthTransparentWithAlpha = getDepthTransparentWithAlpha(coords);
1081    float selfDepthTransparent = selfDepthTransparentWithAlpha.x;
1082    float selfViewZTransparent = isBackground(selfDepthTransparent) ? backgroundViewZ : getViewZ(selfDepthTransparent);
1083    float pixelSizeTransparent = getPixelSize(coords, selfDepthTransparent) * uOutlineThreshold;
1084
1085    float bestOpaqueDepth = 1.0;
1086    float bestTransparentDepth = 1.0;
1087    float bestTransparentAlpha = 0.0;
1088
1089    float opaqueOutlineFlag = 0.0;
1090    float transparentOutlineFlag = 0.0;
1091
1092    for (int y = -1; y <= 1; y++) {
1093        for (int x = -1; x <= 1; x++) {
1094            vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
1095
1096            // Opaque
1097            float sampleDepthOpaque = getDepthOpaque(sampleCoords);
1098            float sampleViewZOpaque = isBackground(sampleDepthOpaque) ? backgroundViewZ : getViewZ(sampleDepthOpaque);
1099            if (abs(selfViewZOpaque - sampleViewZOpaque) > pixelSizeOpaque && selfDepthOpaque > sampleDepthOpaque && sampleDepthOpaque <= bestOpaqueDepth) {
1100                bestOpaqueDepth = sampleDepthOpaque;
1101                opaqueOutlineFlag = 1.0;
1102            }
1103
1104            // Transparent
1105            vec2 sampleDepthTransparentWithAlpha = getDepthTransparentWithAlpha(sampleCoords);
1106            float sampleDepthTransparent = sampleDepthTransparentWithAlpha.x;
1107            float sampleAlphaTransparent = sampleDepthTransparentWithAlpha.y;
1108            float sampleViewZTransparent = isBackground(sampleDepthTransparent) ? backgroundViewZ : getViewZ(sampleDepthTransparent);
1109            if (abs(selfViewZTransparent - sampleViewZTransparent) > pixelSizeTransparent && selfDepthTransparent > sampleDepthTransparent && sampleDepthTransparent <= bestTransparentDepth) {
1110                bestTransparentDepth = sampleDepthTransparent;
1111                bestTransparentAlpha = sampleAlphaTransparent;
1112                transparentOutlineFlag = 1.0;
1113            }
1114        }
1115    }
1116
1117    if (transparentOutlineFlag > 0.0 && abs(selfViewZOpaque - getViewZ(bestTransparentDepth)) < pixelSizeOpaque) { // Disable transparent outline close to opaque elements
1118        transparentOutlineFlag = 0.0;
1119    }
1120
1121    // lazy curvature veto: only compute if an outline was found and center is not background
1122    const float kCurvatureGate = 0.75;
1123    vec2 dx = vec2(invTexSize.x, 0.0);
1124    vec2 dy = vec2(0.0, invTexSize.y);
1125
1126    if (opaqueOutlineFlag > 0.0 && !isBackground(selfDepthOpaque)) {
1127        float dL = getDepthOpaque(coords - dx);
1128        float dR = getDepthOpaque(coords + dx);
1129        float dU = getDepthOpaque(coords + dy);
1130        float dD = getDepthOpaque(coords - dy);
1131
1132        float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL);
1133        float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR);
1134        float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU);
1135        float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD);
1136
1137        float ddx = abs(vzL + vzR - 2.0 * selfViewZOpaque);
1138        float ddy = abs(vzU + vzD - 2.0 * selfViewZOpaque);
1139        float curvOpaque = max(ddx, ddy);
1140
1141        if (curvOpaque < pixelSizeOpaque * kCurvatureGate) {
1142            opaqueOutlineFlag = 0.0;
1143            bestOpaqueDepth = 1.0;
1144        }
1145    }
1146
1147    if (transparentOutlineFlag >
1147 0.0 && !isBackground(selfDepthTransparent)) {
1148        vec2 daL = getDepthTransparentWithAlpha(coords - dx);
1149        vec2 daR = getDepthTransparentWithAlpha(coords + dx);
1150        vec2 daU = getDepthTransparentWithAlpha(coords + dy);
1151        vec2 daD = getDepthTransparentWithAlpha(coords - dy);
1152
1153        float dL = daL.x;
1154        float dR = daR.x;
1155        float dU = daU.x;
1156        float dD = daD.x;
1157
1158        float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL);
1159        float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR);
1160        float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU);
1161        float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD);
1162
1163        float ddx = abs(vzL + vzR - 2.0 * selfViewZTransparent);
1164        float ddy = abs(vzU + vzD - 2.0 * selfViewZTransparent);
1165        float curvTransparent = max(ddx, ddy);
1166
1167        if (curvTransparent < pixelSizeTransparent * kCurvatureGate) {
1168            transparentOutlineFlag = 0.0;
1169            bestTransparentDepth = 1.0;
1170            bestTransparentAlpha = 0.0;
1171        }
1172    }
1173
1174    vec2 depthPacked; // Pack depth in G/B channels
1175    float outlineTypeFlag = 0.0;
1176    if (opaqueOutlineFlag > 0.0 && transparentOutlineFlag > 0.0) {
1177        outlineTypeFlag = 0.75; // Both
1178        depthPacked = packUnitIntervalToRG(bestOpaqueDepth);
1179    } else if (transparentOutlineFlag > 0.0) {
1180        outlineTypeFlag = 0.5;  // Transparent only
1181        depthPacked = packUnitIntervalToRG(bestTransparentDepth);
1182    } else if (opaqueOutlineFlag > 0.0) {
1183        outlineTypeFlag = 0.25; // Opaque only
1184        depthPacked = packUnitIntervalToRG(bestOpaqueDepth);
1185    }
1186
1187    float alpha = clamp(bestTransparentAlpha, 0.0, 0.5) * 2.0; // limiting to range [0.0, 0.5] to improve alpha precision since we don't need a wider range
1188    float packedFlagWithAlpha = pack2x4(vec2(outlineTypeFlag, alpha)); // pack outlineType with alpha
1189    gl_FragColor = vec4(packedFlagWithAlpha, depthPacked.x, depthPacked.y, bestTransparentDepth);
1190}
1191`;var f=r(48502),m=r(70371);let h={scale:c.e.Numeric(1,{min:1,max:5,step:1}),threshold:c.e.Numeric(.33,{min:.01,max:1,step:.01}),color:c.e.Color((0,m.Il)(0)),includeTransparent:c.e.Boolean(!0,{description:"Whether to show outline for transparent objects"})};class g{static isEnabled(e){return e.enabled&&"off"!==e.outline.name}constructor(e,t,r,n,c){this.webgl=e,this.target=e.createRenderTarget(t,r,!1),this.renderable=function(e,t,r,n){let c=t.getWidth(),f=t.getHeight(),m={...a.GE,tDepthOpaque:o.IO.create(t),tDepthTransparent:o.IO.create(r),uTexSize:o.IO.create(u.Sg.create(c,f)),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),uInvProjection:o.IO.create(u.yb.identity()),uOutlineThreshold:o.IO.create(.33),dTransparentOutline:o.IO.create(n)},h={...b},g=(0,i.Lq)("outlines",d.C,p),y=(0,s.s8)(e,"triangles",g,h,m);return(0,l.T)(y,m)}(e,c,n,!0)}getByteCount(){return this.target.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a){var n;let i=!1,s="orthographic"===e.state.mode?1:0,l=this.renderable.values.uInvProjection.ref.value;u.yb.invert(l,e.projection);let c=null===(n=t.includeTransparent)||void 0===n||n,d=Math.max(1,Math.round(t.scale*this.webgl.pixelRatio))-1,p=50*t.threshold*this.webgl.pixelRatio;return o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFar,e.far),o.IO.update(this.renderable.values.uInvProjection,l),this.renderable.values.dTransparentOutline.ref.value!==c&&(i=!0,o.IO.update(this.renderable.values.dTransparentOutline,c)),this.renderable.values.dOrthographic.ref.value!==s&&(i=!0,o.IO.update(this.renderable.values.dOrthographic,s)),o.IO.updateIfChanged(this.renderable.values.uOutlineThreshold,p),this.renderable.values.tDepthTransparent.ref.value!==r&&(i=!0,o.IO.update(this.renderable.values.tDepthTransparent,r)),this.renderable.values.tDepthOpaque.ref.value!==a&&(i=!0,o.IO.update(this.renderable.values.tDepthOpaque,a)),i&&this.renderable.update(
1191),{transparentOutline:c,outlineScale:d}}render(){f.kM&&this.webgl.timer.mark("OutlinePass.render"),this.target.bind(),this.renderable.render(),f.kM&&this.webgl.timer.markEnd("OutlinePass.render")}}let b={...a.iz,tDepthOpaque:(0,n.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uInvProjection:(0,n.wt)("m4"),uOutlineThreshold:(0,n.wt)("f"),dTransparentOutline:(0,n.O0)("boolean")}},32799:function(e,t,r){r.d(t,{xt:function(){return eN},yM:function(){return eL},hq:function(){return ez}});var a=r(68971),n=r(18406),i=r(45705),o=r(85764),s=r(57155),l=r(62113),u=r(87144),c=r(14086),d=r(10410);let p=`
1192precision highp float;
1193precision highp int;
1194precision highp sampler2D;
1195
1196uniform sampler2D tSsaoDepth;
1197uniform sampler2D tSsaoDepthTransparent;
1198uniform sampler2D tColor;
1199uniform sampler2D tTransparentColor;
1200uniform sampler2D tDepthOpaque;
1201uniform sampler2D tDepthTransparent;
1202uniform sampler2D tShadows;
1203uniform sampler2D tOutlines;
1204uniform vec2 uTexSize;
1205
1206uniform float uNear;
1207uniform float uFar;
1208uniform float uFogNear;
1209uniform float uFogFar;
1210uniform vec3 uFogColor;
1211uniform vec3 uOutlineColor;
1212uniform vec3 uOcclusionColor;
1213uniform bool uTransparentBackground;
1214uniform vec2 uOcclusionOffset;
1215
1216#include common
1217
1218float getViewZ(const in float depth) {
1219    #if dOrthographic == 1
1220        return orthographicDepthToViewZ(depth, uNear, uFar);
1221    #else
1222        return perspectiveDepthToViewZ(depth, uNear, uFar);
1223    #endif
1224}
1225
1226float getDepthOpaque(const in vec2 coords) {
1227    #ifdef depthTextureSupport
1228        return texture2D(tDepthOpaque, coords).r;
1229    #else
1230        return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
1231    #endif
1232}
1233
1234float getDepthTransparent(const in vec2 coords) {
1235    return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
1236}
1237
1238bool isBackground(const in float depth) {
1239    return depth == 1.0;
1240}
1241
1242int squaredOutlineScale = dOutlineScale * dOutlineScale;
1243void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) {
1244    vec2 invTexSize = 1.0 / uTexSize;
1245
1246    hasOpaque = false;
1247    hasTransparent = false;
1248    opaqueDepth = 1.0;
1249    transparentDepth = 1.0;
1250    alpha = 0.0;
1251    for (int y = -dOutlineScale; y <= dOutlineScale; y++) {
1252        for (int x = -dOutlineScale; x <= dOutlineScale; x++) {
1253            if (x * x + y * y > squaredOutlineScale) {
1254                continue;
1255            }
1256
1257            vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
1258
1259            vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords);
1260            float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb);
1261            float sampleTransparentDepth = sampleOutlineCombined.a;
1262            vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r);
1263
1264            float sampleFlag = sampleFlagWithAlpha.x;
1265            float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0);
1266
1267            if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both
1268                if (sampleOpaqueDepth < opaqueDepth) {
1269                    hasOpaque = true;
1270                    opaqueDepth = sampleOpaqueDepth;
1271                }
1272            }
1273
1274            if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both
1275                hasTransparent = true;
1276                transparentDepth = sampleTransparentDepth;
1277                alpha = sampleAlpha;
1278            }
1279        }
1280    }
1281}
1282
1283float getSsao(vec2 coords) {
1284    float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy);
1285    if (rawSsao > 0.999) {
1286        return 1.0;
1287    } else if (rawSsao > 0.001) {
1288        return rawSsao;
1289    }
1290    // treat values close to 0.0 as errors and return no occlusion
1291    return 1.0;
1292}
1293
1294float getSsaoTransparent(vec2 coords) {
1295    float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy);
1296    if (rawSsao > 0.999) {
1297        return 1.0;
1298    } else if (rawSsao > 0.001) {
1299        return rawSsao;
1300    }
1301    // treat values close to 0.0 as errors and return no occlusion
1302    return 1.0;
1303}
1304
1305void main(void) {
1306    vec2 coords = gl_FragCoord.xy / uTexSize;
1307    vec4 color = texture2D(tColor, coords);
1308
1309    float opaqueDepth = getDepthOpaque(coords);
1310    float transparentDepth = 1.0;
1311    #ifdef dBlendTransparency
1312        bool blendTransparency = true;
1313        vec4 transparentColor = texture2D(tTransparentColor, coords);
1314
1315        #if defined(dOutlineEnable) || defined(dOcclusionEnable) && defined(dOcclusionIncludeTransparency)
1316            transparentDepth = getDepthTransparent(coords);
1317        #endif
1318    #endif
1319
1320    #if defined(dOcclusionEnable) || defined(dShadowEnable)
1321        bool isOpaqueBackground = isBackground(opaqueDepth);
1322        float viewDist = abs(getViewZ(opaqueDepth));
1323        float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
1324    #endif
1325
1326    #if defined(dOcclusionEnable)
1327        if (!isOpaqueBackground) {
1328            float occlusionFactor = getSsao(coords + uOcclusionOffset);
1329
1330            if (!uTransparentBackground) {
1331                color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor);
1332            } else {
1333                color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor);
1334            }
1335        }
1336        #if defined(dBlendTransparency) && defined(dOcclusionIncludeTransparency)
1337            if (!isBackground(transparentDepth)) {
1338                float viewDist = abs(getViewZ(transparentDepth));
1339                float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
1340                float occlusionFactor = getSsaoTransparent(coords + uOcclusionOffset);
1341                transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor);
1342            }
1343        #endif
1344    #endif
1345
1346    #ifdef dShadowEnable
1347        if (!isOpaqueBackground) {
1348            vec4 shadow = texture2D(tShadows, coords);
1349            if (!uTransparentBackground) {
1350                color.rgb = mix(mix(vec3(0), uFogColor, fogFactor), color.rgb, shadow.a);
1351            } else {
1352                color.rgb = mix(vec3(0) * (1.0 - fogFactor), color.rgb, shadow.a);
1353            }
1354        }
1355    #endif
1356
1357    // outline needs to be handled after occlusion and shadow to keep them clean
1358    #ifdef dOutlineEnable
1359        bool hasOpaque;
1360        bool hasTransparent;
1361        float outlineOpaqueDepth;
1362        float outlineTransparentDepth;
1363        float outlineAlpha;
1364        getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha);
1365
1366        if (hasOpaque) {
1367            float viewDist = abs(getViewZ(outlineOpaqueDepth));
1368            float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
1369            if (!uTransparentBackground) {
1370                color.rgb = mix(uOutlineColor, uFogColor, fogFactor);
1371            } else {
1372                color.a = 1.0 - fogFactor;
1373                color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor);
1374            }
1375        }
1376
1377        #ifdef dBlendTransparency
1378            if (hasTransparent) {
1379                if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) {
1380                    blendTransparency = false;
1381                } else {
1382                    float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0);
1383                    float viewDist = abs(getViewZ(outlineTransparentDepth));
1384                    float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
1385                    float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor));
1386                    transparentColor.a = finalAlpha;
1387                    transparentColor.rgb = uOutlineColor * finalAlpha;
1388                }
1389            }
1390        #endif
1391    #endif
1392
1393    #ifdef dBlendTransparency
1394        if (blendTransparency) {
1395            float alpha = transparentColor.a;
1396            if (alpha != 0.0) {
1397                // blending
1398                color = transparentColor + color * (1.0 - alpha);
1399            }
1400        }
1401    #endif
1402
1403    gl_FragColor = color;
1404}
1405`;var f=r(70371);let m=`
1406precision highp float;
1407precision highp int;
1408precision highp sampler2D;
1409
1410uniform sampler2D tColor;
1411uniform vec2 uTexSizeInv;
1412
1413// adapted from https://github.com/kosua20/Rendu
1414// MIT License Copyright (c) 2017 Simon Rodriguez
1415
1416#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5))
1417
1418float rgb2luma(vec3 rgb){
1419    return sqrt(dot(rgb, vec3(0.299, 0.587, 0.114)));
1420}
1421
1422float sampleLuma(vec2 uv) {
1423    return rgb2luma(texture2D(tColor, uv).rgb);
1424}
1425
1426float sampleLuma(vec2 uv, float uOffset, float vOffset) {
1427    uv += uTexSizeInv * vec2(uOffset, vOffset);
1428    return sampleLuma(uv);
1429}
1430
1431void main(void) {
1432    vec2 coords = gl_FragCoord.xy * uTexSizeInv;
1433    vec2 inverseScreenSize = uTexSizeInv;
1434
1435    vec4 colorCenter = texture2D(tColor, coords);
1436
1437    // Luma at the current fragment
1438    float lumaCenter = rgb2luma(colorCenter.rgb);
1439
1440    // Luma at the four direct neighbours of the current fragment.
1441    float lumaDown = sampleLuma(coords, 0.0, -1.0);
1442    float lumaUp = sampleLuma(coords, 0.0, 1.0);
1443    float lumaLeft = sampleLuma(coords, -1.0, 0.0);
1444    float lumaRight = sampleLuma(coords, 1.0, 0.0);
1445
1446    // Find the maximum and minimum luma around the current fragment.
1447    float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight)));
1448    float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight)));
1449
1450    // Compute the delta.
1451    float lumaRange = lumaMax - lumaMin;
1452
1453    // If the luma variation is lower that a threshold (or if we are in a really dark area),
1454    // we are not on an edge, don't perform any AA.
1455    if (lumaRange < max(dEdgeThresholdMin, lumaMax * dEdgeThresholdMax)) {
1456        gl_FragColor = colorCenter;
1457        return;
1458    }
1459
1460    // Query the 4 remaining corners lumas.
1461    float lumaDownLeft = sampleLuma(coords, -1.0, -1.0);
1462    float lumaUpRight = sampleLuma(coords, 1.0, 1.0);
1463    float lumaUpLeft = sampleLuma(coords, -1.0, 1.0);
1464    float lumaDownRight = sampleLuma(coords, 1.0, -1.0);
1465
1466    // Combine the four edges lumas (using intermediary variables for future computations
1467    // with the same values).
1468    float lumaDownUp = lumaDown + lumaUp;
1469    float lumaLeftRight = lumaLeft + lumaRight;
1470
1471    // Same for corners
1472    float lumaLeftCorners = lumaDownLeft + lumaUpLeft;
1473    float lumaDownCorners = lumaDownLeft + lumaDownRight;
1474    float lumaRightCorners = lumaDownRight + lumaUpRight;
1475    float lumaUpCorners = lumaUpRight + lumaUpLeft;
1476
1477    // Compute an estimation of the gradient along the horizontal and vertical axis.
1478    float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners) + abs(-2.0 * lumaCenter + lumaDownUp) * 2.0 + abs(-2.0 * lumaRight + lumaRightCorners);
1479    float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners) + abs(-2.0 * lumaCenter + lumaLeftRight) * 2.0 + abs(-2.0 * lumaDown + lumaDownCorners);
1480
1481    // Is the local edge horizontal or vertical ?
1482    bool isHorizontal = (edgeHorizontal >= edgeVertical);
1483
1484    // Choose the step size (one pixel) accordingly.
1485    float stepLength = isHorizontal ? inverseScreenSize.y : inverseScreenSize.x;
1486
1487    // Select the two neighboring texels lumas in the opposite direction to the local edge.
1488    float luma1 = isHorizontal ? lumaDown : lumaLeft;
1489    float luma2 = isHorizontal ? lumaUp : lumaRight;
1490    // Compute gradients in this direction.
1491    float gradient1 = luma1 - lumaCenter;
1492    float gradient2 = luma2 - lumaCenter;
1493
1494    // Which direction is the steepest ?
1495    bool is1Steepest = abs(gradient1) >= abs(gradient2);
1496
1497    // Gradient in the corresponding direction, normalized.
1498    float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2));
1499
1500    // Average luma in the correct direction.
1501    float lumaLocalAverage = 0.0;
1502    if(is1Steepest){
1503        // Switch the direction
1504        stepLength = -stepLength;
1505        lumaLocalAverage = 0.5 * (luma1 + lumaCenter);
1506    } else {
1507        lumaLocalAverage = 0.5 * (luma2 + lumaCenter);
1508    }
1509
1510    // Shift UV in the correct direction by half a pixel.
1511    vec2 currentUv = coords;
1512    if(isHorizontal){
1513        currentUv.y += stepLength * 0.5;
1514    } else {
1515        currentUv.x += stepLength * 0.5;
1516    }
1517
1518    // Compute offset (for each iteration step) in the right direction.
1519    vec2 offset = isHorizontal ? vec2(inverseScreenSize.x, 0.0) : vec2(0.0, inverseScreenSize.y);
1520    // Compute UVs to explore on each side of the edge, orthogonally.
1521    // The QUALITY allows us to step faster.
1522    vec2 uv1 = currentUv - offset * QUALITY(0);
1523    vec2 uv2 = currentUv + offset * QUALITY(0);
1524
1525    // Read the lumas at both current extremities of the exploration segment,
1526    // and compute the delta wrt to the local average luma.
1527    float lumaEnd1 = sampleLuma(uv1);
1528    float lumaEnd2 = sampleLuma(uv2);
1529    lumaEnd1 -= lumaLocalAverage;
1530    lumaEnd2 -= lumaLocalAverage;
1531
1532    // If the luma deltas at the current extremities is larger than the local gradient,
1533    // we have reached the side of the edge.
1534    bool reached1 = abs(lumaEnd1) >= gradientScaled;
1535    bool reached2 = abs(lumaEnd2) >= gradientScaled;
1536    bool reachedBoth = reached1 && reached2;
1537
1538    // If the side is not reached, we continue to explore in this direction.
1539    if(!reached1){
1540        uv1 -= offset * QUALITY(1);
1541    }
1542    if(!reached2){
1543        uv2 += offset * QUALITY(1);
1544    }
1545
1546    // If both sides have not been reached, continue to explore.
1547    if(!reachedBoth){
1548        for(int i = 2; i < dIterations; i++){
1549            // If needed, read luma in 1st direction, compute delta.
1550            if(!reached1){
1551                lumaEnd1 = sampleLuma(uv1);
1552                lumaEnd1 = lumaEnd1 - lumaLocalAverage;
1553            }
1554            // If needed, read luma in opposite direction, compute delta.
1555            if(!reached2){
1556                lumaEnd2 = sampleLuma(uv2);
1557                lumaEnd2 = lumaEnd2 - lumaLocalAverage;
1558            }
1559            // If the luma deltas at the current extremities is larger than the local gradient,
1560            // we have reached the side of the edge.
1561            reached1 = abs(lumaEnd1) >= gradientScaled;
1562            reached2 = abs(lumaEnd2) >= gradientScaled;
1563            reachedBoth = reached1 && reached2;
1564
1565            // If the side is not reached, we continue to explore in this direction,
1566            // with a variable quality.
1567            if(!reached1){
1568                uv1 -= offset * QUALITY(i);
1569            }
1570            if(!reached2){
1571                uv2 += offset * QUALITY(i);
1572            }
1573
1574            // If both sides have been reached, stop the exploration.
1575            if(reachedBoth){
1576                break;
1577            }
1578        }
1579    }
1580
1581    // Compute the distances to each side edge of the edge (!).
1582    float distance1 = isHorizontal ? (coords.x - uv1.x) : (coords.y - uv1.y);
1583    float distance2 = isHorizontal ? (uv2.x - coords.x) : (uv2.y - coords.y);
1584
1585    // In which direction is the side of the edge closer ?
1586    bool isDirection1 = distance1 < distance2;
1587    float distanceFinal = min(distance1, distance2);
1588
1589    // Thickness of the edge.
1590    float edgeThickness = (distance1 + distance2);
1591
1592    // Is the luma at center smaller than the local average ?
1593    bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage;
1594
1595    // If the luma at center is smaller than at its neighbour,
1596    // the delta luma at each end should be positive (same variation).
1597    bool correctVariation1 = (lumaEnd1 < 0.0) != isLumaCenterSmaller;
1598    bool correctVariation2 = (lumaEnd2 < 0.0) != isLumaCenterSmaller;
1599
1600    // Only keep the result in the direction of the closer side of the edge.
1601    bool correctVariation = isDirection1 ? correctVariation1 : correctVariation2;
1602
1603    // UV offset: read in the direction of the closest side of the edge.
1604    float pixelOffset = - distanceFinal / edgeThickness + 0.5;
1605
1606    // If the luma variation is incorrect, do not offset.
1607    float finalOffset = correctVariation ? pixelOffset : 0.0;
1608
1609    // Sub-pixel shifting
1610    // Full weighted average of the luma over the 3x3 neighborhood.
1611    float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners);
1612    // Ratio of the delta between the global average and the center luma,
1613    // over the luma range in the 3x3 neighborhood.
1614    float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0);
1615    float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1;
1616    // Compute a sub-pixel offset based on this delta.
1617    float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * float(dSubpixelQuality);
1618
1619    // Pick the biggest of the two offsets.
1620    finalOffset = max(finalOffset, subPixelOffsetFinal);
1621
1622    // Compute the final UV coordinates.
1623    vec2 finalUv = coords;
1624    if(isHorizontal){
1625        finalUv.y += finalOffset * stepLength;
1626    } else {
1627        finalUv.x += finalOffset * stepLength;
1628    }
1629
1630    // Read the color at the new UV coordinates, and use it.
1631    gl_FragColor = texture2D(tColor, finalUv);
1632}
1633`;var h=r(48502);let g={edgeThresholdMin:c.e.Numeric(.0312,{min:.0312,max:.0833,step:1e-4},{description:"Trims the algorithm from processing darks."}),edgeThresholdMax:c.e.Numeric(.063,{min:.063,max:.333,step:.001},{description:"The minimum amount of local contrast required to apply algorithm."}),iterations:c.e.Numeric(12,{min:0,max:16,step:1},{description:"Number of edge exploration steps."}),subpixelQuality:c.e.Numeric(.3,{min:0,max:1,step:.01},{description:"Choose the amount of sub-pixel aliasing removal."})};class b{constructor(e,t){this.webgl=e,this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),dEdgeThresholdMin:o.IO.create(.0312),dEdgeThresholdMax:o.IO.create(.125),dIterations:o.IO.create(12),dSubpixelQuality:o.IO.create(.3)},c={...y},d=(0,s.s8)(e,"triangles",x,c,i);return(0,l.T)(d,i)}(e,t)}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){o.IO.update(this.renderable.values.uTexSizeInv,u.Sg.set(this.renderable.values.uTexSizeInv.ref.value,1/e,1/t))}update(e,t){let{values:r}=this.renderable,{edgeThresholdMin:a,edgeThresholdMax:n,iterations:i,subpixelQuality:s}=t,l=!1;r.tColor.ref.value!==e&&(o.IO.update(this.renderable.values.tColor,e),l=!0),r.dEdgeThresholdMin.ref.value!==a&&(l=!0),o.IO.updateIfChanged(r.dEdgeThresholdMin,a),r.dEdgeThresholdMax.ref.value!==n&&(l=!0),o.IO.updateIfChanged(r.dEdgeThresholdMax,n),r.dIterations.ref.value!==i&&(l=!0),o.IO.updateIfChanged(r.dIterations,i),r.dSubpixelQuality.ref.value!==s&&(l=!0),o.IO.updateIfChanged(r.dSubpixelQuality,s),l&&this.renderable.update()}render(e,t){h.kM&&this.webgl.timer.mark("FxaaPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("FxaaPass.render")}}let y={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),dEdgeThresholdMin:(0,n.O0)("number"),dEdgeThresholdMax:(0,n.O0)("number"),dIterations:(0,n.O0)("number"),dSubpixelQuality:(0,n.O0)("number")},x=(0,i.Lq)("fxaa",d.C,m);var S=r(91407);let T=`
1634precision highp float;
1635
1636attribute vec2 aPosition;
1637uniform vec2 uQuadScale;
1638
1639uniform vec2 uTexSizeInv;
1640uniform vec4 uViewport;
1641
1642varying vec2 vUv;
1643varying vec4 vOffset[2];
1644
1645void SMAANeighborhoodBlendingVS(vec2 texCoord) {
1646    vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component
1647    vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component
1648}
1649
1650void main() {
1651    vec2 scale = uViewport.zw * uTexSizeInv;
1652    vec2 shift = uViewport.xy * uTexSizeInv;
1653    vUv = (aPosition + 1.0) * 0.5 * scale + shift;
1654    SMAANeighborhoodBlendingVS(vUv);
1655    vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
1656    gl_Position = vec4(position, 0.0, 1.0);
1657}
1658`,C=`
1659precision highp float;
1660precision highp int;
1661precision highp sampler2D;
1662
1663uniform sampler2D tWeights;
1664uniform sampler2D tColor;
1665uniform vec2 uTexSizeInv;
1666
1667varying vec2 vUv;
1668varying vec4 vOffset[2];
1669
1670vec4 SMAANeighborhoodBlendingPS(vec2 texCoord, vec4 offset[2], sampler2D colorTex, sampler2D blendTex) {
1671    // Fetch the blending weights for current pixel:
1672    vec4 a;
1673    a.xz = texture2D(blendTex, texCoord).xz;
1674    a.y = texture2D(blendTex, offset[1].zw).g;
1675    a.w = texture2D(blendTex, offset[1].xy).a;
1676
1677    // Is there any blending weight with a value greater than 0.0?
1678    if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5) {
1679        return texture2D(colorTex, texCoord, 0.0);
1680    } else {
1681        // Up to 4 lines can be crossing a pixel (one through each edge). We
1682        // favor blending by choosing the line with the maximum weight for each
1683        // direction:
1684        vec2 offset;
1685        offset.x = a.a > a.b ? a.a : -a.b; // left vs. right
1686        offset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs
1687
1688        // Then we go in the direction that has the maximum weight:
1689        if (abs(offset.x) > abs(offset.y)) { // horizontal vs. vertical
1690            offset.y = 0.0;
1691        } else {
1692            offset.x = 0.0;
1693        }
1694
1695        // Fetch the opposite color and lerp by hand:
1696        vec4 C = texture2D(colorTex, texCoord, 0.0);
1697        texCoord += sign(offset) * uTexSizeInv;
1698        vec4 Cop = texture2D(colorTex, texCoord, 0.0);
1699        float s = abs(offset.x) > abs(offset.y) ? abs(offset.x) : abs(offset.y);
1700
1701        // WebGL port note: Added gamma correction
1702        C.xyz = pow(C.xyz, vec3(2.2));
1703        Cop.xyz = pow(Cop.xyz, vec3(2.2));
1704        vec4 mixed = mix(C, Cop, s);
1705        mixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));
1706
1707        return mixed;
1708    }
1709}
1710
1711void main() {
1712    gl_FragColor = SMAANeighborhoodBlendingPS(vUv, vOffset, tColor, tWeights);
1713}
1714`,O=`
1715precision highp float;
1716
1717attribute vec2 aPosition;
1718uniform vec2 uQuadScale;
1719
1720uniform vec2 uTexSizeInv;
1721uniform vec4 uViewport;
1722
1723varying vec2 vUv;
1724varying vec4 vOffset[3];
1725varying vec2 vPixCoord;
1726
1727void SMAABlendingWeightCalculationVS(vec2 texCoord) {
1728    vPixCoord = texCoord / uTexSizeInv;
1729
1730    // We will use these offsets for the searches later on (see @PSEUDO_GATHER4):
1731    vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.25, 0.125, 1.25, 0.125); // WebGL port note: Changed sign in Y and W components
1732    vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.125, 0.25, -0.125, -1.25); // WebGL port note: Changed sign in Y and W components
1733
1734    // And these for the searches, they indicate the ends of the loops:
1735    vOffset[2] = vec4(vOffset[0].xz, vOffset[1].yw) + vec4(-2.0, 2.0, -2.0, 2.0) * uTexSizeInv.xxyy * float(dMaxSearchSteps);
1736}
1737
1738void main() {
1739    vec2 scale = uViewport.zw * uTexSizeInv;
1740    vec2 shift = uViewport.xy * uTexSizeInv;
1741    vUv = (aPosition + 1.0) * 0.5 * scale + shift;
1742    SMAABlendingWeightCalculationVS(vUv);
1743    vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
1744    gl_Position = vec4(position, 0.0, 1.0);
1745}
1746`,I=`
1747precision highp float;
1748precision highp int;
1749precision highp sampler2D;
1750
1751#define SMAASampleLevelZeroOffset(tex, coord, offset) texture2D(tex, coord + float(offset) * uTexSizeInv, 0.0)
1752
1753#define SMAA_AREATEX_MAX_DISTANCE 16
1754#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
1755#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
1756
1757uniform sampler2D tEdges;
1758uniform sampler2D tArea;
1759uniform sampler2D tSearch;
1760uniform vec2 uTexSizeInv;
1761
1762varying vec2 vUv;
1763varying vec4 vOffset[3];
1764varying vec2 vPixCoord;
1765
1766#if __VERSION__ == 100
1767    vec2 round(vec2 x) {
1768        return sign(x) * floor(abs(x) + 0.5);
1769    }
1770#endif
1771
1772float SMAASearchLength(sampler2D searchTex, vec2 e, float bias, float scale) {
1773    // Not required if searchTex accesses are set to point:
1774    // float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);
1775    // e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +
1776    //     e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;
1777    e.r = bias + e.r * scale;
1778    return 255.0 * texture2D(searchTex, e, 0.0).r;
1779}
1780
1781float SMAASearchXLeft(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
1782    /**
1783     * @PSEUDO_GATHER4
1784     * This texCoord has been offset by (-0.25, -0.125) in the vertex shader to
1785     * sample between edge, thus fetching four edges in a row.
1786     * Sampling with different offsets in each direction allows to disambiguate
1787     * which edges are active from the four fetched ones.
1788     */
1789    vec2 e = vec2(0.0, 1.0);
1790
1791    for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
1792        e = texture2D( edgesTex, texCoord, 0.0).rg;
1793        texCoord -= vec2(2.0, 0.0) * uTexSizeInv;
1794        if (!(texCoord.x > end && e.g > 0.8281 && e.r == 0.0)) break;
1795    }
1796
1797    // We correct the previous (-0.25, -0.125) offset we applied:
1798    texCoord.x += 0.25 * uTexSizeInv.x;
1799
1800    // The searches are bias by 1, so adjust the coords accordingly:
1801    texCoord.x += uTexSizeInv.x;
1802
1803    // Disambiguate the length added by the last step:
1804    texCoord.x += 2.0 * uTexSizeInv.x; // Undo last step
1805    texCoord.x -= uTexSizeInv.x * SMAASearchLength(searchTex, e, 0.0, 0.5);
1806
1807    return texCoord.x;
1808}
1809
1810float SMAASearchXRight(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
1811    vec2 e = vec2( 0.0, 1.0 );
1812
1813    for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
1814        e = texture2D(edgesTex, texCoord, 0.0).rg;
1815        texCoord += vec2(2.0, 0.0) * uTexSizeInv;
1816        if (!(texCoord.x < end && e.g > 0.8281 && e.r == 0.0)) break;
1817    }
1818
1819    texCoord.x -= 0.25 * uTexSizeInv.x;
1820    texCoord.x -= uTexSizeInv.x;
1821    texCoord.x -= 2.0 * uTexSizeInv.x;
1822    texCoord.x += uTexSizeInv.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );
1823
1824    return texCoord.x;
1825}
1826
1827float SMAASearchYUp(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
1828    vec2 e = vec2( 1.0, 0.0 );
1829
1830    for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
1831        e = texture2D(edgesTex, texCoord, 0.0).rg;
1832        texCoord += vec2(0.0, 2.0) * uTexSizeInv; // WebGL port note: Changed sign
1833        if (!(texCoord.y > end && e.r > 0.8281 && e.g == 0.0)) break;
1834    }
1835
1836    texCoord.y -= 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign
1837    texCoord.y -= uTexSizeInv.y; // WebGL port note: Changed sign
1838    texCoord.y -= 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign
1839    texCoord.y += uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.0, 0.5); // WebGL port note: Changed sign
1840
1841    return texCoord.y;
1842}
1843
1844float SMAASearchYDown(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
1845    vec2 e = vec2( 1.0, 0.0 );
1846
1847    for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
1848        e = texture2D(edgesTex, texCoord, 0.0).rg;
1849        texCoord -= vec2( 0.0, 2.0 ) * uTexSizeInv; // WebGL port note: Changed sign
1850        if (!(texCoord.y < end && e.r > 0.8281 && e.g == 0.0)) break;
1851    }
1852
1853    texCoord.y += 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign
1854    texCoord.y += uTexSizeInv.y; // WebGL port note: Changed sign
1855    texCoord.y += 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign
1856    texCoord.y -= uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.5, 0.5); // WebGL port note: Changed sign
1857
1858    return texCoord.y;
1859}
1860
1861vec2 SMAAArea(sampler2D areaTex, vec2 dist, float e1, float e2, float offset) {
1862    // Rounding prevents precision errors of bilinear filtering:
1863    vec2 texCoord = float(SMAA_AREATEX_MAX_DISTANCE) * round(4.0 * vec2(e1, e2)) + dist;
1864
1865    // We do a scale and bias for mapping to texel space:
1866    texCoord = SMAA_AREATEX_PIXEL_SIZE * texCoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);
1867
1868    // Move to proper place, according to the subpixel offset:
1869    texCoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;
1870
1871    return texture2D(areaTex, texCoord, 0.0).rg;
1872}
1873
1874vec4 SMAABlendingWeightCalculationPS(vec2 texCoord, vec2 pixCoord, vec4 offset[3], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices) {
1875    vec4 weights = vec4(0.0, 0.0, 0.0, 0.0);
1876
1877    vec2 e = texture2D(edgesTex, texCoord).rg;
1878
1879    if (e.g > 0.0) { // Edge at north
1880        vec2 d;
1881
1882        // Find the distance to the left:
1883        vec2 coords;
1884        coords.x = SMAASearchXLeft(edgesTex, searchTex, offset[0].xy, offset[2].x );
1885        coords.y = offset[1].y; // offset[1].y = texCoord.y - 0.25 * uTexSizeInv.y (@CROSSING_OFFSET)
1886        d.x = coords.x;
1887
1888        // Now fetch the left crossing edges, two at a time using bilinear
1889        // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to
1890        // discern what value each edge has:
1891        float e1 = texture2D(edgesTex, coords, 0.0).r;
1892
1893        // Find the distance to the right:
1894        coords.x = SMAASearchXRight(edgesTex, searchTex, offset[0].zw, offset[2].y);
1895        d.y = coords.x;
1896
1897        // We want the distances to be in pixel units (doing this here allow to
1898        // better interleave arithmetic and memory accesses):
1899        d = d / uTexSizeInv.x - pixCoord.x;
1900
1901        // SMAAArea below needs a sqrt, as the areas texture is compressed
1902        // quadratically:
1903        vec2 sqrt_d = sqrt(abs(d));
1904
1905        // Fetch the right crossing edges:
1906        coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added
1907        float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(1, 0)).r;
1908
1909        // Ok, we know how this pattern looks like, now it is time for getting
1910        // the actual area:
1911        weights.rg = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.y));
1912    }
1913
1914    if (e.r > 0.0) { // Edge at west
1915        vec2 d;
1916
1917        // Find the distance to the top:
1918        vec2 coords;
1919
1920        coords.y = SMAASearchYUp(edgesTex, searchTex, offset[1].xy, offset[2].z );
1921        coords.x = offset[0].x; // offset[1].x = texCoord.x - 0.25 * uTexSizeInv.x;
1922        d.x = coords.y;
1923
1924        // Fetch the top crossing edges:
1925        float e1 = texture2D(edgesTex, coords, 0.0).g;
1926
1927        // Find the distance to the bottom:
1928        coords.y = SMAASearchYDown(edgesTex, searchTex, offset[1].zw, offset[2].w);
1929        d.y = coords.y;
1930
1931        // We want the distances to be in pixel units:
1932        d = d / uTexSizeInv.y - pixCoord.y;
1933
1934        // SMAAArea below needs a sqrt, as the areas texture is compressed
1935        // quadratically:
1936        vec2 sqrt_d = sqrt(abs(d));
1937
1938        // Fetch the bottom crossing edges:
1939        coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added
1940        float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(0, 1)).g;
1941
1942        // Get the area for this direction:
1943        weights.ba = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.x));
1944    }
1945
1946    return weights;
1947}
1948
1949void main() {
1950    gl_FragColor = SMAABlendingWeightCalculationPS(vUv, vPixCoord, vOffset, tEdges, tArea, tSearch, ivec4(0.0));
1951}
1952`,A=`
1953precision highp float;
1954
1955attribute vec2 aPosition;
1956uniform vec2 uQuadScale;
1957
1958uniform vec2 uTexSizeInv;
1959uniform vec4 uViewport;
1960
1961varying vec2 vUv;
1962varying vec4 vOffset[3];
1963
1964void SMAAEdgeDetectionVS(vec2 texCoord) {
1965    vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component
1966    vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component
1967    vOffset[2] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-2.0, 0.0, 0.0, 2.0); // WebGL port note: Changed sign in W component
1968}
1969
1970void main() {
1971    vec2 scale = uViewport.zw * uTexSizeInv;
1972    vec2 shift = uViewport.xy * uTexSizeInv;
1973    vUv = (aPosition + 1.0) * 0.5 * scale + shift;
1974    SMAAEdgeDetectionVS(vUv);
1975    vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
1976    gl_Position = vec4(position, 0.0, 1.0);
1977}
1978`,w=`
1979precision highp float;
1980precision highp int;
1981precision highp sampler2D;
1982
1983uniform sampler2D tColor;
1984uniform vec2 uTexSizeInv;
1985
1986varying vec2 vUv;
1987varying vec4 vOffset[3];
1988
1989vec4 SMAAColorEdgeDetectionPS(vec2 texcoord, vec4 offset[3], sampler2D colorTex) {
1990    vec2 threshold = vec2(dEdgeThreshold, dEdgeThreshold);
1991
1992    // Calculate color deltas:
1993    vec4 delta;
1994    vec3 C = texture2D(colorTex, texcoord).rgb;
1995
1996    vec3 Cleft = texture2D(colorTex, offset[0].xy).rgb;
1997    vec3 t = abs(C - Cleft);
1998    delta.x = max(max(t.r, t.g), t.b);
1999
2000    vec3 Ctop = texture2D(colorTex, offset[0].zw).rgb;
2001    t = abs(C - Ctop);
2002    delta.y = max(max(t.r, t.g), t.b);
2003
2004    // We do the usual threshold:
2005    vec2 edges = step(threshold, delta.xy);
2006
2007    // Then discard if there is no edge:
2008    if (dot(edges, vec2(1.0, 1.0 )) == 0.0)
2009        discard;
2010
2011    // Calculate right and bottom deltas:
2012    vec3 Cright = texture2D(colorTex, offset[1].xy).rgb;
2013    t = abs( C - Cright );
2014    delta.z = max(max(t.r, t.g), t.b);
2015
2016    vec3 Cbottom  = texture2D(colorTex, offset[1].zw).rgb;
2017    t = abs(C - Cbottom);
2018    delta.w = max(max(t.r, t.g), t.b);
2019
2020    // Calculate the maximum delta in the direct neighborhood:
2021    float maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w );
2022
2023    // Calculate left-left and top-top deltas:
2024    vec3 Cleftleft  = texture2D(colorTex, offset[2].xy).rgb;
2025    t = abs( C - Cleftleft );
2026    delta.z = max(max(t.r, t.g), t.b);
2027
2028    vec3 Ctoptop = texture2D(colorTex, offset[2].zw).rgb;
2029    t = abs(C - Ctoptop);
2030    delta.w = max(max(t.r, t.g), t.b);
2031
2032    // Calculate the final maximum delta:
2033    maxDelta = max(max(maxDelta, delta.z), delta.w);
2034
2035    // Local contrast adaptation in action:
2036    edges.xy *= step(0.5 * maxDelta, delta.xy);
2037
2038    return vec4(edges, 0.0, 0.0);
2039}
2040
2041void main() {
2042    gl_FragColor = SMAAColorEdgeDetectionPS(vUv, vOffset, tColor);
2043}
2044`;var D=r(85409);let E={edgeThreshold:c.e.Numeric(.1,{min:.05,max:.15,step:.01}),maxSearchSteps:c.e.Numeric(16,{min:0,max:32,step:1})};class M{get supported(){return this._supported}constructor(e,t){if(this.webgl=e,this._supported=!1,"undefined"==typeof HTMLImageElement){h.Au&&console.log('Missing "HTMLImageElement" required for "SMAA"');return}
2044let r=t.getWidth(),n=t.getHeight();this.edgesTarget=e.createRenderTarget(r,n,!1,"uint8","linear"),this.weightsTarget=e.createRenderTarget(r,n,!1,"uint8","linear"),this.edgesRenderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uViewport:o.IO.create((0,u.T8)()),dEdgeThreshold:o.IO.create(.1)},c={...P},d=(0,s.s8)(e,"triangles",k,c,i);return(0,l.T)(d,i)}(e,t),this.weightsRenderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i=e.resources.texture("image-uint8","rgb","ubyte","linear"),c=e.resources.texture("image-uint8","rgba","ubyte","nearest"),d={...a.GE,tEdges:o.IO.create(t),tArea:o.IO.create(i),tSearch:o.IO.create(c),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uViewport:o.IO.create((0,u.T8)()),dMaxSearchSteps:o.IO.create(16)};(0,S.eP)(
vendor: 44,296 bytes, line 2044
2044"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAIAAACOVPcQAACBeklEQVR42u39W4xlWXrnh/3WWvuciIzMrKxrV8/0rWbY0+SQFKcb4owIkSIFCjY9AC1BT/LYBozRi+EX+cV+8IMsYAaCwRcBwjzMiw2jAWtgwC8WR5Q8mDFHZLNHTarZGrLJJllt1W2qKrsumZWZcTvn7L3W54e1vrXX3vuciLPPORFR1XE2EomorB0nVuz//r71re/y/1eMvb4Cb3N11xV/PP/2v4UBAwJG/7H8urx6/25/Gf8O5hypMQ0EEEQwAqLfoN/Z+97f/SW+/NvcgQk4sGBJK6H7N4PFVL+K+e0N11yNfkKvwUdwdlUAXPHHL38oa15f/i/46Ih6SuMSPmLAYAwyRKn7dfMGH97jaMFBYCJUgotIC2YAdu+LyW9vvubxAP8kAL8H/koAuOKP3+q6+xGnd5kdYCeECnGIJViwGJMAkQKfDvB3WZxjLKGh8VSCCzhwEWBpMc5/kBbjawT4HnwJfhr+pPBIu7uu+OOTo9vsmtQcniMBGkKFd4jDWMSCRUpLjJYNJkM+IRzQ+PQvIeAMTrBS2LEiaiR9b/5PuT6Ap/AcfAFO4Y3dA3DFH7/VS+M8k4baEAQfMI4QfbVDDGIRg7GKaIY52qAjTAgTvGBAPGIIghOCYAUrGFNgzA7Q3QhgCwfwAnwe5vDejgG44o/fbm1C5ZlYQvQDARPAIQGxCWBM+wWl37ZQESb4gImexGMDouhGLx1Cst0Saa4b4AqO4Hk4gxo+3DHAV/nx27p3JziPM2pVgoiia5MdEzCGULprIN7gEEeQ5IQxEBBBQnxhsDb5auGmAAYcHMA9eAAz8PBol8/xij9+C4Djlim4gJjWcwZBhCBgMIIYxGAVIkH3ZtcBuLdtRFMWsPGoY9rN+HoBji9VBYdwD2ZQg4cnO7OSq/z4rU5KKdwVbFAjNojCQzTlCLPFSxtamwh2jMUcEgg2Wm/6XgErIBhBckQtGN3CzbVacERgCnfgLswhnvqf7QyAq/z4rRZm1YglYE3affGITaZsdIe2FmMIpnOCap25I6jt2kCwCW0D1uAD9sZctNGXcQIHCkINDQgc78aCr+zjtw3BU/ijdpw3zhCwcaONwBvdeS2YZKkJNJsMPf2JKEvC28RXxxI0ASJyzQCjCEQrO4Q7sFArEzjZhaFc4cdv+/JFdKULM4px0DfUBI2hIsy06BqLhGTQEVdbfAIZXYMPesq6VoCHICzUyjwInO4Y411//LYLs6TDa9wvg2CC2rElgAnpTBziThxaL22MYhzfkghz6GAs2VHbbdM91VZu1MEEpupMMwKyVTb5ij9+u4VJG/5EgEMMmFF01cFai3isRbKbzb+YaU/MQbAm2XSMoUPAmvZzbuKYRIFApbtlrfFuUGd6vq2hXNnH78ZLh/iFhsQG3T4D1ib7k5CC6vY0DCbtrohgLEIClXiGtl10zc0CnEGIhhatLBva7NP58Tvw0qE8yWhARLQ8h4+AhQSP+I4F5xoU+VilGRJs6wnS7ruti/4KvAY/CfdgqjsMy4pf8fodQO8/gnuX3f/3xi3om1/h7THr+co3x93PP9+FBUfbNUjcjEmhcrkT+8K7ml7V10Jo05mpIEFy1NmCJWx9SIKKt+EjAL4Ez8EBVOB6havuT/rByPvHXK+9zUcfcbb254+9fydJknYnRr1oGfdaiAgpxu1Rx/Rek8KISftx3L+DfsLWAANn8Hvw0/AFeAGO9DFV3c6D+CcWbL8Dj9e7f+T1k8AZv/d7+PXWM/Z+VvdCrIvuAKO09RpEEQJM0Ci6+B4xhTWr4cZNOvhktabw0ta0rSJmqz3Yw5/AKXwenod7cAhTmBSPKf6JBdvH8IP17h95pXqw50/+BFnj88fev4NchyaK47OPhhtI8RFSvAfDSNh0Ck0p2gLxGkib5NJj/JWCr90EWQJvwBzO4AHcgztwAFN1evHPUVGwfXON+0debT1YeGON9Yy9/63X+OguiwmhIhQhD7l4sMqlG3D86Suc3qWZ4rWjI1X7u0Ytw6x3rIMeIOPDprfe2XzNgyj6PahhBjO4C3e6puDgXrdg+/5l948vF3bqwZetZ+z9Rx9zdIY5pInPK4Nk0t+l52xdK2B45Qd87nM8fsD5EfUhIcJcERw4RdqqH7Yde5V7m1vhNmtedkz6EDzUMF/2jJYWbC+4fzzA/Y+/8PPH3j9dcBAPIRP8JLXd5BpAu03aziOL3VVHZzz3CXWDPWd+SH2AnxIqQoTZpo9Ckc6HIrFbAbzNmlcg8Ag8NFDDAhbJvTBZXbC94P7t68EXfv6o+21gUtPETU7bbkLxvNKRFG2+KXzvtObonPP4rBvsgmaKj404DlshFole1Glfh02fE7bYR7dZ82oTewIBGn1Md6CG6YUF26X376oevOLzx95vhUmgblI6LBZwTCDY7vMq0op5WVXgsObOXJ+1x3qaBl9j1FeLxbhU9w1F+Wiba6s1X/TBz1LnUfuYDi4r2C69f1f14BWfP+p+W2GFKuC9phcELMYRRLur9DEZTUdEH+iEqWdaM7X4WOoPGI+ZYD2+wcQ+y+ioHUZ9dTDbArzxmi/bJI9BND0Ynd6lBdve/butBw8+f/T9D3ABa3AG8W3VPX4hBin+bj8dMMmSpp5pg7fJ6xrBFE2WQQEWnV8Qg3FbAWzYfM1rREEnmvkN2o1+acG2d/9u68GDzx91v3mAjb1zkpqT21OipPKO0b9TO5W0nTdOmAQm0TObts3aBKgwARtoPDiCT0gHgwnbArzxmtcLc08HgF1asN0C4Ms/fvD5I+7PhfqyXE/b7RbbrGyRQRT9ARZcwAUmgdoz0ehJ9Fn7QAhUjhDAQSw0bV3T3WbNa59jzmiP6GsWbGXDX2ytjy8+f9T97fiBPq9YeLdBmyuizZHaqXITnXiMUEEVcJ7K4j3BFPurtB4bixW8wTpweL8DC95szWMOqucFYGsWbGU7p3TxxxefP+r+oTVktxY0v5hbq3KiOKYnY8ddJVSBxuMMVffNbxwIOERShst73HZ78DZrHpmJmH3K6sGz0fe3UUj0eyRrSCGTTc+rjVNoGzNSv05srAxUBh8IhqChiQgVNIIBH3AVPnrsnXQZbLTm8ammv8eVXn/vWpaTem5IXRlt+U/LA21zhSb9cye6jcOfCnOwhIAYXAMVTUNV0QhVha9xjgA27ODJbLbmitt3tRN80lqG6N/khgot4ZVlOyO4WNg3OIMzhIZQpUEHieg2im6F91hB3I2tubql6BYNN9Hj5S7G0G2tahslBWKDnOiIvuAEDzakDQKDNFQT6gbn8E2y4BBubM230YIpBnDbMa+y3dx0n1S0BtuG62lCCXwcY0F72T1VRR3t2ONcsmDjbmzNt9RFs2LO2hQNyb022JisaI8rAWuw4HI3FuAIhZdOGIcdjLJvvObqlpqvWTJnnQbyi/1M9O8UxWhBs//H42I0q1Yb/XPGONzcmm+ri172mHKvZBpHkJaNJz6v9jxqiklDj3U4CA2ugpAaYMWqNXsdXbmJNd9egCnJEsphXNM+MnK3m0FCJ5S1kmJpa3DgPVbnQnPGWIDspW9ozbcO4K/9LkfaQO2KHuqlfFXSbdNzcEcwoqNEFE9zcIXu9/6n/ym/BC/C3aJLzEKPuYVlbFnfhZ8kcWxV3dbv4bKl28566wD+8C53aw49lTABp9PWbsB+knfc/Li3eVizf5vv/xmvnPKg5ihwKEwlrcHqucuVcVOxEv8aH37E3ZqpZypUulrHEtIWKUr+txHg+ojZDGlwnqmkGlzcVi1dLiNSJiHjfbRNOPwKpx9TVdTn3K05DBx4psIk4Ei8aCkJahRgffk4YnEXe07T4H2RR1u27E6wfQsBDofUgjFUFnwC2AiVtA+05J2zpiDK2Oa0c5fmAecN1iJzmpqFZxqYBCYhFTCsUNEmUnIcZ6aEA5rQVhEywG6w7HSW02XfOoBlQmjwulOFQAg66SvJblrTEX1YtJ3uG15T/BH1OfOQeuR8g/c0gdpT5fx2SKbs9EfHTKdM8A1GaJRHLVIwhcGyydZsbifAFVKl5EMKNU2Hryo+06BeTgqnxzYjThVySDikbtJPieco75lYfKAJOMEZBTjoITuWHXXZVhcUDIS2hpiXHV9Ku4u44bN5OYLDOkJo8w+xJSMbhBRHEdEs9JZUCkQrPMAvaHyLkxgkEHxiNkx/x2YB0mGsQ8EUWj/stW5YLhtS5SMu+/YBbNPDCkGTUybN8krRLBGPlZkVOA0j+a1+rkyQKWGaPHPLZOkJhioQYnVZ2hS3zVxMtgC46KuRwbJNd9nV2PHgb36F194ecf/Yeu2vAFe5nm/bRBFrnY4BauE8ERmZRFUn0k8hbftiVYSKMEme2dJCJSCGYAlNqh87bXOPdUkGy24P6d1ll21MBqqx48Fvv8ZHH8HZFY7j/uAq1xMJUFqCSUlJPmNbIiNsmwuMs/q9CMtsZsFO6SprzCS1Z7QL8xCQClEelpjTduDMsmWD8S1PT152BtvmIGvUeDA/yRn83u/x0/4qxoPHjx+PXY9pqX9bgMvh/Nz9kpP4pOe1/fYf3axUiMdHLlPpZCNjgtNFAhcHEDxTumNONhHrBduW+vOyY++70WWnPXj98eA4kOt/mj/5E05l9+O4o8ePx67HFqyC+qSSnyselqjZGaVK2TadbFLPWAQ4NBhHqDCCV7OTpo34AlSSylPtIdd2AJZlyzYQrDJ5lcWGNceD80CunPLGGzsfD+7wRb95NevJI5docQ3tgCyr5bGnyaPRlmwNsFELViOOx9loebGNq2moDOKpHLVP5al2cymWHbkfzGXL7kfRl44H9wZy33tvt+PB/Xnf93e+nh5ZlU18wCiRUa9m7kib9LYuOk+hudQNbxwm0AQqbfloimaB2lM5fChex+ylMwuTbfmXQtmWlenZljbdXTLuOxjI/fDDHY4Hjx8/Hrse0zXfPFxbUN1kKqSCCSk50m0Ajtx3ub9XHBKHXESb8iO6E+qGytF4nO0OG3SXzbJlhxBnKtKyl0NwybjvYCD30aMdjgePHz8eu56SVTBbgxJMliQ3Oauwg0QHxXE2Ez/EIReLdQj42Gzb4CLS0YJD9xUx7bsi0vJi5mUbW1QzL0h0PFk17rtiIPfJk52MB48fPx67npJJwyrBa2RCCQRTbGZSPCxTPOiND4G2pYyOQ4h4jINIJh5wFU1NFZt+IsZ59LSnDqBjZ2awbOku+yInunLcd8VA7rNnOxkPHj9+PGY9B0MWJJNozOJmlglvDMXDEozdhQWbgs/U6oBanGzLrdSNNnZFjOkmbi5bNt1lX7JLLhn3vXAg9/h4y/Hg8ePHI9dzQMEkWCgdRfYykYKnkP7D4rIujsujaKPBsB54vE2TS00ccvFY/Tth7JXeq1hz+qgVy04sAJawTsvOknHfCwdyT062HA8eP348Zj0vdoXF4pilKa2BROed+9fyw9rWRXeTFXESMOanvDZfJuJaSXouQdMdDJZtekZcLLvEeK04d8m474UDuaenW44Hjx8/Xns9YYqZpszGWB3AN/4VHw+k7WSFtJ3Qicuqb/NlVmgXWsxh570xg2UwxUw3WfO6B5nOuO8aA7lnZxuPB48fPx6znm1i4bsfcbaptF3zNT78eFPtwi1OaCNOqp1x3zUGcs/PN++AGD1+fMXrSVm2baTtPhPahbPhA71wIHd2bXzRa69nG+3CraTtPivahV/55tXWg8fyRY/9AdsY8VbSdp8V7cKrrgdfM//z6ILQFtJ2nxHtwmuoB4/kf74+gLeRtvvMaBdeSz34+vifx0YG20jbfTa0C6+tHrwe//NmOG0L8EbSdp8R7cLrrQe/996O+ai3ujQOskpTNULa7jOjXXj99eCd8lHvoFiwsbTdZ0a78PrrwTvlo966pLuRtB2fFe3Cm6oHP9kNH/W2FryxtN1nTLvwRurBO+Kj3pWXHidtx2dFu/Bm68Fb81HvykuPlrb7LGkX3mw9eGs+6h1Y8MbSdjegXcguQLjmevDpTQLMxtJ2N6NdyBZu9AbrwVvwUW+LbteULUpCdqm0HTelXbhNPe8G68Gb8lFvVfYfSNuxvrTdTWoXbozAzdaDZzfkorOj1oxVxlIMlpSIlpLrt8D4hrQL17z+c3h6hU/wv4Q/utps4+bm+6P/hIcf0JwQ5oQGPBL0eKPTYEXTW+eL/2DKn73J9BTXYANG57hz1cEMviVf/4tf5b/6C5pTQkMIWoAq7hTpOJjtAM4pxKu5vg5vXeUrtI09/Mo/5H+4z+Mp5xULh7cEm2QbRP2tFIKR7WM3fPf/jZ3SWCqLM2l4NxID5zB72HQXv3jj/8mLR5xXNA5v8EbFQEz7PpRfl1+MB/hlAN65qgDn3wTgH13hK7T59bmP+NIx1SHHU84nLOITt3iVz8mNO+lPrjGAnBFqmioNn1mTyk1ta47R6d4MrX7tjrnjYUpdUbv2rVr6YpVfsGG58AG8Ah9eyUN8CX4WfgV+G8LVWPDGb+Zd4cU584CtqSbMKxauxTg+dyn/LkVgA+IR8KHtejeFKRtTmLLpxN6mYVLjYxwXf5x2VofiZcp/lwKk4wGOpYDnoIZPdg/AAbwMfx0+ge9dgZvYjuqKe4HnGnykYo5TvJbG0Vj12JagRhwKa44H95ShkZa5RyLGGdfYvG7aw1TsF6iapPAS29mNS3NmsTQZCmgTzFwgL3upCTgtBTRwvGMAKrgLn4evwin8+afJRcff+8izUGUM63GOOuAs3tJkw7J4kyoNreqrpO6cYLQeFUd7TTpr5YOTLc9RUUogUOVJQ1GYJaFLAW0oTmKyYS46ZooP4S4EON3xQ5zC8/CX4CnM4c1PE8ApexpoYuzqlP3d4S3OJP8ZDK7cKWNaTlqmgDiiHwl1YsE41w1zT4iRTm3DBqxvOUsbMKKDa/EHxagtnta072ejc3DOIh5ojvh8l3tk1JF/AV6FU6jh3U8HwEazLgdCLYSQ+MYiAI2ltomkzttUb0gGHdSUUgsIYjTzLG3mObX4FBRaYtpDVNZrih9TgTeYOBxsEnN1gOCTM8Bsw/ieMc75w9kuAT6A+/AiHGvN/+Gn4KRkiuzpNNDYhDGFndWRpE6SVfm8U5bxnSgVV2jrg6JCKmneqey8VMFgq2+AM/i4L4RUbfSi27lNXZ7R7W9RTcq/q9fk4Xw3AMQd4I5ifAZz8FcVtm9SAom/dyN4lczJQW/kC42ZrHgcCoIf1oVMKkVItmMBi9cOeNHGLqOZk+QqQmrbc5YmYgxELUUN35z2iohstgfLIFmcMV7s4CFmI74L9+EFmGsi+tGnAOD4Yk9gIpo01Y4cA43BWGygMdr4YZekG3OBIUXXNukvJS8tqa06e+lSDCtnqqMFu6hWHXCF+WaYt64m9QBmNxi7Ioy7D+fa1yHw+FMAcPt7SysFLtoG4PXAk7JOA3aAxBRqUiAdU9Yp5lK3HLSRFtOim0sa8euEt08xvKjYjzeJ2GU7YawexrnKI9tmobInjFXCewpwriY9+RR4aaezFhMhGCppKwom0ChrgFlKzyPKkGlTW1YQrE9HJqu8hKGgMc6hVi5QRq0PZxNfrYNgE64utmRv6KKHRpxf6VDUaOvNP5jCEx5q185My/7RKz69UQu2im5k4/eownpxZxNLwiZ1AZTO2ZjWjkU9uaB2HFn6Q3u0JcsSx/qV9hTEApRzeBLDJQXxYmTnq7bdLa3+uqFrxLJ5w1TehnNHx5ECvCh2g2c3hHH5YsfdaSKddztfjQ6imKFGSyFwlLzxEGPp6r5IevVjk1AMx3wMqi1NxDVjLBiPs9tbsCkIY5we5/ML22zrCScFxnNtzsr9Wcc3CnD+pYO+4VXXiDE0oc/vQQ/fDK3oPESJMYXNmJa/DuloJZkcTpcYE8lIH8Dz8DJMiynNC86Mb2lNaaqP/+L7f2fcE/yP7/Lde8xfgSOdMxvOixZf/9p3+M4hT1+F+zApxg9XfUvYjc8qX2lfOOpK2gNRtB4flpFu9FTKCp2XJRgXnX6olp1zyYjTKJSkGmLE2NjUr1bxFM4AeAAHBUFIeSLqXR+NvH/M9fOnfHzOD2vCSyQJKzfgsCh+yi/Mmc35F2fUrw7miW33W9hBD1vpuUojFphIyvg7aTeoymDkIkeW3XLHmguMzbIAJejN6B5MDrhipE2y6SoFRO/AK/AcHHZHNIfiWrEe/C6cr3f/yOvrQKB+zMM55/GQdLDsR+ifr5Fiuu+/y+M78LzOE5dsNuXC3PYvYWd8NXvphLSkJIasrlD2/HOqQ+RjcRdjKTGWYhhVUm4yxlyiGPuMsZR7sMCHUBeTuNWA7if+ifXgc/hovftHXs/DV+Fvwe+f8shzMiMcweFgBly3//vwJfg5AN4450fn1Hd1Rm1aBLu22Dy3y3H2+OqMemkbGZ4jozcDjJf6596xOLpC0eMTHbKnxLxH27uZ/bMTGs2jOaMOY4m87CfQwF0dw53oa1k80JRuz/XgS+8fX3N9Af4qPIMfzKgCp4H5TDGe9GGeFPzSsZz80SlPTxXjgwJmC45njzgt2vbQ4b4OAdUK4/vWhO8d8v6EE8fMUsfakXbPpFJeLs2ubM/qdm/la3WP91uWhxXHjoWhyRUq2iJ/+5mA73zwIIo+LoZ/SgvIRjAd1IMvvn98PfgOvAJfhhm8scAKVWDuaRaK8aQ9f7vuPDH6Bj47ZXau7rqYJ66mTDwEDU6lLbCjCK0qTXyl5mnDoeNRxanj3FJbaksTk0faXxHxLrssgPkWB9LnA/MFleXcJozzjwsUvUG0X/QCve51qkMDXp9mtcyOy3rwBfdvVJK7D6/ACSzg3RoruIq5UDeESfEmVclDxnniU82vxMLtceD0hGZWzBNPMM/jSPne2OVatiTKUpY5vY7gc0LdUAWeWM5tH+O2I66AOWw9xT2BuyRVLGdoDHUsVRXOo/c+ZdRXvFfnxWyIV4upFLCl9eAL7h8Zv0QH8Ry8pA2cHzQpGesctVA37ZtklBTgHjyvdSeKY/RZw/kJMk0Y25cSNRWSigQtlULPTw+kzuJPeYEkXjQRpoGZobYsLF79pyd1dMRHInbgFTZqNLhDqiIsTNpoex2WLcy0/X6rHcdMMQvFSd5dWA++4P7xv89deACnmr36uGlL69bRCL6BSZsS6c0TU2TKK5gtWCzgAOOwQcurqk9j8whvziZSMLcq5hbuwBEsYjopUBkqw1yYBGpLA97SRElEmx5MCInBY5vgLk94iKqSWmhIGmkJ4Bi9m4L645J68LyY4wsFYBfUg5feP/6gWWm58IEmKQM89hq7KsZNaKtP5TxxrUZZVkNmMJtjbKrGxLNEbHPJxhqy7lAmbC32ZqeF6lTaknRWcYaFpfLUBh/rwaQycCCJmW15Kstv6jRHyJFry2C1ahkkIW0LO75s61+owxK1y3XqweX9m5YLM2DPFeOjn/iiqCKJ+yKXF8t5Yl/kNsqaSCryxPq5xWTFIaP8KSW0RYxqupaUf0RcTNSSdJZGcKYdYA6kdtrtmyBckfKXwqk0pHpUHlwWaffjNRBYFPUDWa8e3Lt/o0R0CdisKDM89cX0pvRHEfM8ca4t0s2Xx4kgo91MPQJ/0c9MQYq0co8MBh7bz1fio0UUHLR4aAIOvOmoYO6kwlEVODSSTliWtOtH6sPkrtctF9ZtJ9GIerBskvhdVS5cFNv9s1BU0AbdUgdK4FG+dRnjFmDTzniRMdZO1QhzMK355vigbdkpz9P6qjUGE5J2qAcXmwJ20cZUiAD0z+pGMx6xkzJkmEf40Hr4qZfVg2XzF9YOyoV5BjzVkUJngKf8lgNYwKECEHrCNDrWZzMlflS3yBhr/InyoUgBc/lKT4pxVrrC6g1YwcceK3BmNxZcAtz3j5EIpqguh9H6wc011YN75cKDLpFDxuwkrPQmUwW4KTbj9mZTwBwLq4aQMUZbHm1rylJ46dzR0dua2n3RYCWZsiHROeywyJGR7mXKlpryyCiouY56sFkBWEnkEB/raeh/Sw4162KeuAxMQpEkzy5alMY5wamMsWKKrtW2WpEWNnReZWONKWjrdsKZarpFjqCslq773PLmEhM448Pc3+FKr1+94vv/rfw4tEcu+lKTBe4kZSdijBrykwv9vbCMPcLQTygBjzVckSLPRVGslqdunwJ4oegtFOYb4SwxNgWLCmD7T9kVjTv5YDgpo0XBmN34Z/rEHp0sgyz7lngsrm4lvMm2Mr1zNOJYJ5cuxuQxwMGJq/TP5emlb8fsQBZviK4t8hFL+zbhtlpwaRSxQRWfeETjuauPsdGxsBVdO7nmP4xvzSoT29pRl7kGqz+k26B3Oy0YNV+SXbbQas1ctC/GarskRdFpKczVAF1ZXnLcpaMuzVe6lZ2g/1ndcvOVgRG3sdUAY1bKD6achijMPdMxV4muKVorSpiDHituH7rSTs7n/4y5DhRXo4FVBN4vO/zbAcxhENzGbHCzU/98Mcx5e7a31kWjw9FCe/zNeYyQjZsWb1uc7U33pN4Mji6hCLhivqfa9Ss6xLg031AgfesA/l99m9fgvnaF9JoE6bYKmkGNK3aPbHB96w3+DnxFm4hs0drLsk7U8kf/N/CvwQNtllna0rjq61sH8L80HAuvwH1tvBy2ChqWSCaYTaGN19sTvlfzFD6n+iKTbvtayfrfe9ueWh6GJFoxLdr7V72a5ZpvHcCPDzma0wTO4EgbLyedxstO81n57LYBOBzyfsOhUKsW1J1BB5vr/tz8RyqOFylQP9Tvst2JALsC5lsH8PyQ40DV4ANzYa4dedNiKNR1s+x2wwbR7q4/4cTxqEk4LWDebfisuo36JXLiWFjOtLrlNWh3K1rRS4xvHcDNlFnNmWBBAl5SWaL3oPOfnvbr5pdjVnEaeBJSYjuLEkyLLsWhKccadmOphZkOPgVdalj2QpSmfOsADhMWE2ZBu4+EEJI4wKTAuCoC4xwQbWXBltpxbjkXJtKxxabo9e7tyhlgb6gNlSbUpMh+l/FaqzVwewGu8BW1Zx7pTpQDJUjb8tsUTW6+GDXbMn3mLbXlXJiGdggxFAoUrtPS3wE4Nk02UZG2OOzlk7fRs7i95QCLo3E0jtrjnM7SR3uS1p4qtS2nJ5OwtQVHgOvArLBFijZUV9QtSl8dAY5d0E0hM0w3HS2DpIeB6m/A1+HfhJcGUq4sOxH+x3f5+VO+Ds9rYNI7zPXOYWPrtf8bYMx6fuOAX5jzNR0PdsuON+X1f7EERxMJJoU6GkTEWBvVolVlb5lh3tKCg6Wx1IbaMDdJ+9sUCc5KC46hKGCk3IVOS4TCqdBNfUs7Kd4iXf2RjnT/LLysJy3XDcHLh/vde3x8DoGvwgsa67vBk91G5Pe/HbOe7xwym0NXbtiuuDkGO2IJDh9oQvJ4cY4vdoqLDuoH9Zl2F/ofsekn8lkuhIlhQcffUtSjytFyp++p6NiE7Rqx/lodgKVoceEp/CP4FfjrquZaTtj2AvH5K/ywpn7M34K/SsoYDAdIN448I1/0/wveW289T1/lX5xBzc8N5IaHr0XMOQdHsIkDuJFifj20pBm5jzwUv9e2FhwRsvhAbalCIuIw3bhJihY3p6nTFFIZgiSYjfTf3aXuOjmeGn4bPoGvwl+CFzTRczBIuHBEeImHc37/lGfwZR0cXzVDOvaKfNHvwe+suZ771K/y/XcBlsoN996JpBhoE2toYxOznNEOS5TJc6Id5GEXLjrWo+LEWGNpPDU4WAwsIRROu+1vM+0oW37z/MBN9kqHnSArwPfgFJ7Cq/Ai3Ie7g7ncmI09v8sjzw9mzOAEXoIHxURueaAce5V80f/DOuuZwHM8vsMb5wBzOFWM7wymTXPAEvm4vcFpZ2ut0VZRjkiP2MlmLd6DIpbGSiHOjdnUHN90hRYmhTnmvhzp1iKDNj+b7t5hi79lWGwQ+HN9RsfFMy0FXbEwhfuczKgCbyxYwBmcFhhvo/7a44v+i3XWcwDP86PzpGQYdWh7csP5dBvZ1jNzdxC8pBGuxqSW5vw40nBpj5JhMwvOzN0RWqERHMr4Lv1kWX84xLR830G3j6yqZ1a8UstTlW+qJPOZ+sZ7xZPKTJLhiNOAFd6tk+jrTH31ncLOxid8+nzRb128HhUcru/y0Wn6iT254YPC6FtVSIMoW2sk727AhvTtrWKZTvgsmckfXYZWeNRXx/3YQ2OUxLDrbHtN11IwrgXT6c8dATDwLniYwxzO4RzuQqTKSC5gAofMZ1QBK3zQ4JWobFbcvJm87FK+6JXrKahLn54m3p+McXzzYtP8VF/QpJuh1OwieElEoI1pRxPS09FBrkq2tWCU59+HdhNtTIqKm8EBrw2RTOEDpG3IKo2Y7mFdLm3ZeVjYwVw11o/oznceMve4CgMfNym/utA/d/ILMR7gpXzRy9eDsgLcgbs8O2Va1L0zzIdwGGemTBuwROHeoMShkUc7P+ISY3KH5ZZeWqO8mFTxQYeXTNuzvvK5FGPdQfuu00DwYFY9dyhctEt+OJDdnucfpmyhzUJzfsJjr29l8S0bXBfwRS9ZT26tmMIdZucch5ZboMz3Nio3nIOsYHCGoDT4kUA9MiXEp9Xsui1S8th/kbWIrMBxDGLodWUQIWcvnXy+9M23xPiSMOiRPqM+YMXkUN3gXFrZJwXGzUaMpJfyRS9ZT0lPe8TpScuRlbMHeUmlaKDoNuy62iWNTWNFYjoxFzuJs8oR+RhRx7O4SVNSXpa0ZJQ0K1LAHDQ+D9IepkMXpcsq5EVCvClBUIzDhDoyKwDw1Lc59GbTeORivugw1IcuaEOaGWdNm+Ps5fQ7/tm0DjMegq3yM3vb5j12qUId5UZD2oxDSEWOZMSqFl/W+5oynWDa/aI04tJRQ2eTXusg86SQVu/nwSYwpW6wLjlqIzwLuxGIvoAvul0PS+ZNz0/akp/pniO/8JDnGyaCkzbhl6YcqmK/69prxPqtpx2+Km9al9sjL+rwMgHw4jE/C8/HQ3m1vBuL1fldbzd8mOueVJ92syqdEY4KJjSCde3mcRw2TA6szxedn+zwhZMps0XrqEsiUjnC1hw0TELC2Ek7uAAdzcheXv1BYLagspxpzSAoZZUsIzIq35MnFQ9DOrlNB30jq3L4pkhccKUAA8/ocvN1Rzx9QyOtERs4CVsJRK/DF71kPYrxYsGsm6RMh4cps5g1DOmM54Ly1ii0Hd3Y/BMk8VWFgBVmhqrkJCPBHAolwZaWzLR9Vb7bcWdX9NyUYE+uB2BKfuaeBUcjDljbYVY4DdtsVWvzRZdWnyUzDpjNl1Du3aloAjVJTNDpcIOVVhrHFF66lLfJL1zJr9PQ2nFJSBaKoDe+sAvLufZVHVzYh7W0h/c6AAZ+7Tvj6q9j68G/cTCS/3n1vLKHZwNi+P+pS0WkZNMBMUl+LDLuiE4omZy71r3UFMwNJV+VJ/GC5ixVUkBStsT4gGKh0Gm4Oy3qvq7Lbmq24nPdDuDR9deR11XzP4vFu3TYzfnIyiSVmgizUYGqkIXNdKTY9pgb9D2Ix5t0+NHkVzCdU03suWkkVZAoCONCn0T35gAeW38de43mf97sMOpSvj4aa1KYUm58USI7Wxxes03bAZdRzk6UtbzMaCQ6IxO0dy7X+XsjoD16hpsBeGz9dfzHj+R/Hp8nCxZRqkEDTaCKCSywjiaoMJ1TITE9eg7Jqnq8HL6gDwiZb0u0V0Rr/rmvqjxKuaLCX7ZWXTvAY+uvm3z8CP7nzVpngqrJpZKwWnCUjIviYVlirlGOzPLI3SMVyp/elvBUjjDkNhrtufFFErQ8pmdSlbK16toBHlt/HV8uHMX/vEGALkV3RJREiSlopxwdMXOZPLZ+ix+kAHpMKIk8UtE1ygtquttwxNhphrIZ1IBzjGF3IIGxGcBj6q8bHJBG8T9vdsoWrTFEuebEZuVxhhClH6P5Zo89OG9fwHNjtNQTpD0TG9PJLEYqvEY6Rlxy+ZZGfL0Aj62/bnQCXp//eeM4KzfQVJbgMQbUjlMFIm6TpcfWlZje7NBSV6IsEVmumWIbjiloUzQX9OzYdo8L1wjw2PrrpimONfmfNyzKklrgnEkSzT5QWYQW40YShyzqsRmMXbvVxKtGuYyMKaU1ugenLDm5Ily4iT14fP11Mx+xJv+zZ3MvnfdFqxU3a1W/FTB4m3Qfsyc1XUcdVhDeUDZXSFHHLQj/Y5jtC7ZqM0CXGwB4bP11i3LhOvzPGygYtiUBiwQV/4wFO0majijGsafHyRLu0yG6q35cL1rOpVxr2s5cM2jJYMCdc10Aj6q/blRpWJ//+dmm5psMl0KA2+AFRx9jMe2WbC4jQxnikd4DU8TwUjRVacgdlhmr3bpddzuJ9zXqr2xnxJfzP29RexdtjDVZqzkqa6PyvcojGrfkXiJ8SEtml/nYskicv0ivlxbqjemwUjMw5evdg8fUX9nOiC/lf94Q2i7MURk9nW1MSj5j8eAyV6y5CN2S6qbnw3vdA1Iwq+XOSCl663udN3IzLnrt+us25cI1+Z83SXQUldqQq0b5XOT17bGpLd6ssN1VMPf8c+jG8L3NeCnMdF+Ra3fRa9dft39/LuZ/3vwHoHrqGmQFafmiQw6eyzMxS05K4bL9uA+SKUQzCnSDkqOGokXyJvbgJ/BHI+qvY69//4rl20NsmK2ou2dTsyIALv/91/8n3P2Aao71WFGi8KKv1fRC5+J67Q/507/E/SOshqN5TsmYIjVt+kcjAx98iz/4SaojbIV1rexE7/C29HcYD/DX4a0rBOF5VTu7omsb11L/AWcVlcVZHSsqGuXLLp9ha8I//w3Mv+T4Ew7nTBsmgapoCrNFObIcN4pf/Ob/mrvHTGqqgAupL8qWjWPS9m/31jAe4DjA+4+uCoQoT/zOzlrNd3qd4SdphFxsUvYwGWbTWtISc3wNOWH+kHBMfc6kpmpwPgHWwqaSUG2ZWWheYOGQGaHB+eQ/kn6b3pOgLV+ODSn94wDvr8Bvb70/LLuiPPEr8OGVWfDmr45PZyccEmsVXZGe1pRNX9SU5+AVQkNTIVPCHF/jGmyDC9j4R9LfWcQvfiETmgMMUCMN1uNCakkweZsowdYobiMSlnKA93u7NzTXlSfe+SVbfnPQXmg9LpYAQxpwEtONyEyaueWM4FPjjyjG3uOaFmBTWDNgBXGEiQpsaWhnAqIijB07Dlsy3fUGeP989xbWkyf+FF2SNEtT1E0f4DYYVlxFlbaSMPIRMk/3iMU5pME2SIWJvjckciebkQuIRRyhUvkHg/iUljG5kzVog5hV7vIlCuBrmlhvgPfNHQM8lCf+FEGsYbMIBC0qC9a0uuy2wLXVbLBaP5kjHokCRxapkQyzI4QEcwgYHRZBp+XEFTqXFuNVzMtjXLJgX4gAid24Hjwc4N3dtVSe+NNiwTrzH4WVUOlDobUqr1FuAgYllc8pmzoVrELRHSIW8ViPxNy4xwjBpyR55I6J220qQTZYR4guvUICJiSpr9gFFle4RcF/OMB7BRiX8sSfhpNSO3lvEZCQfLUVTKT78Ek1LRLhWN+yLyTnp8qWUZ46b6vxdRGXfHVqx3eI75YaLa4iNNiK4NOW7wPW6lhbSOF9/M9qw8e/aoB3d156qTzxp8pXx5BKAsYSTOIIiPkp68GmTq7sZtvyzBQaRLNxIZ+paozHWoLFeExIhRBrWitHCAHrCF7/thhD8JhYz84wg93QRV88wLuLY8zF8sQ36qF1J455bOlgnELfshKVxYOXKVuKx0jaj22sczTQqPqtV/XDgpswmGTWWMSDw3ssyUunLLrVPGjYRsH5ggHeHSWiV8kT33ycFSfMgkoOK8apCye0J6VW6GOYvffgU9RWsukEi2kUV2nl4dOYUzRik9p7bcA4ggdJ53LxKcEe17B1R8eqAd7dOepV8sTXf5lhejoL85hUdhDdknPtKHFhljOT+bdq0hxbm35p2nc8+Ja1Iw+tJykgp0EWuAAZYwMVwac5KzYMslhvgHdHRrxKnvhTYcfKsxTxtTETkjHO7rr3zjoV25lAQHrqpV7bTiy2aXMmUhTBnKS91jhtR3GEoF0oLnWhWNnYgtcc4N0FxlcgT7yz3TgNIKkscx9jtV1ZKpWW+Ub1tc1eOv5ucdgpx+FJy9pgbLE7xDyXb/f+hLHVGeitHOi6A7ybo3sF8sS7w7cgdk0nJaOn3hLj3uyD0Zp5pazFIUXUpuTTU18d1EPkDoX8SkmWTnVIozEdbTcZjoqxhNHf1JrSS/AcvHjZ/SMHhL/7i5z+POsTUh/8BvNfYMTA8n+yU/MlTZxSJDRStqvEuLQKWwDctMTQogUDyQRoTQG5Kc6oQRE1yV1jCA7ri7jdZyK0sYTRjCR0Hnnd+y7nHxNgTULqw+8wj0mQKxpYvhjm9uSUxg+TTy7s2GtLUGcywhXSKZN275GsqlclX90J6bRI1aouxmgL7Q0Nen5ziM80SqMIo8cSOo+8XplT/5DHNWsSUr/6lLN/QQ3rDyzLruEW5enpf7KqZoShEduuSFOV7DLX7Ye+GmXb6/hnNNqKsVXuMDFpb9Y9eH3C6NGEzuOuI3gpMH/I6e+zDiH1fXi15t3vA1czsLws0TGEtmPEJdiiFPwlwKbgLHAFk4P6ZyPdymYYHGE0dutsChQBl2JcBFlrEkY/N5bQeXQ18gjunuMfMfsBlxJSx3niO485fwO4fGD5T/+3fPQqkneWVdwnw/3bMPkW9Wbqg+iC765Zk+xcT98ibKZc2EdgHcLoF8cSOo/Oc8fS+OyEULF4g4sJqXVcmfMfsc7A8v1/yfGXmL9I6Fn5pRwZhsPv0TxFNlAfZCvG+Oohi82UC5f/2IsJo0cTOm9YrDoKhFPEUr/LBYTUNht9zelHXDqwfPCIw4owp3mOcIQcLttWXFe3VZ/j5H3cIc0G6oPbCR+6Y2xF2EC5cGUm6wKC5tGEzhsWqw5hNidUiKX5gFWE1GXh4/Qplw4sVzOmx9QxU78g3EF6wnZlEN4FzJ1QPSLEZz1KfXC7vd8ssGdIbNUYpVx4UapyFUHzJoTOo1McSkeNn1M5MDQfs4qQuhhX5vQZFw8suwWTcyYTgioISk2YdmkhehG4PkE7w51inyAGGaU+uCXADabGzJR1fn3lwkty0asIo8cROm9Vy1g0yDxxtPvHDAmpu+PKnM8Ix1wwsGw91YJqhteaWgjYBmmQiebmSpwKKzE19hx7jkzSWOm66oPbzZ8Yj6kxVSpYjVAuvLzYMCRo3oTQecOOjjgi3NQ4l9K5/hOGhNTdcWVOTrlgYNkEXINbpCkBRyqhp+LdRB3g0OU6rMfW2HPCFFMV9nSp+uB2woepdbLBuJQyaw/ZFysXrlXwHxI0b0LovEkiOpXGA1Ijagf+KUNC6rKNa9bQnLFqYNkEnMc1uJrg2u64ELPBHpkgWbmwKpJoDhMwNbbGzAp7Yg31wS2T5rGtzit59PrKhesWG550CZpHEzpv2NGRaxlNjbMqpmEIzygJqQfjypycs2pg2cS2RY9r8HUqkqdEgKTWtWTKoRvOBPDYBltja2SO0RGjy9UHtxwRjA11ujbKF+ti5cIR9eCnxUg6owidtyoU5tK4NLji5Q3HCtiyF2IqLGYsHViOXTXOYxucDqG0HyttqYAKqYo3KTY1ekyDXRAm2AWh9JmsVh/ccg9WJ2E8YjG201sPq5ULxxX8n3XLXuMInbft2mk80rRGjCGctJ8/GFdmEQ9Ug4FlE1ll1Y7jtiraqm5Fe04VV8lvSVBL8hiPrfFVd8+7QH3Qbu2ipTVi8cvSGivc9cj8yvH11YMHdNSERtuOslM97feYFOPKzGcsI4zW0YGAbTAOaxCnxdfiYUmVWslxiIblCeAYr9VYR1gM7GmoPrilunSxxeT3DN/2eBQ9H11+nk1adn6VK71+5+Jfct4/el10/7KBZfNryUunWSCPxPECk1rdOv1WVSrQmpC+Tl46YD3ikQYcpunSQgzVB2VHFhxHVGKDgMEY5GLlQnP7FMDzw7IacAWnO6sBr12u+XanW2AO0wQ8pknnFhsL7KYIqhkEPmEXFkwaN5KQphbkUmG72wgw7WSm9RiL9QT925hkjiVIIhphFS9HKI6/8QAjlpXqg9W2C0apyaVDwKQwrwLY3j6ADR13ZyUNByQXHQu6RY09Hu6zMqXRaNZGS/KEJs0cJEe9VH1QdvBSJv9h09eiRmy0V2uJcqHcShcdvbSNg5fxkenkVprXM9rDVnX24/y9MVtncvbKY706anNl3ASll9a43UiacVquXGhvq4s2FP62NGKfQLIQYu9q1WmdMfmUrDGt8eDS0cXozH/fjmUH6Jruvm50hBDSaEU/2Ru2LEN/dl006TSc/g7tfJERxGMsgDUEr104pfWH9lQaN+M4KWQjwZbVc2rZVNHsyHal23wZtIs2JJqtIc/WLXXRFCpJkfE9jvWlfFbsNQ9pP5ZBS0zKh4R0aMFj1IjTcTnvi0Zz2rt7NdvQb2mgbju1plsH8MmbnEk7KbK0b+wC2iy3aX3szW8xeZvDwET6hWZYwqTXSSG+wMETKum0Dq/q+x62gt2ua2ppAo309TRk9TPazfV3qL9H8z7uhGqGqxNVg/FKx0HBl9OVUORn8Q8Jx9gFttGQUDr3tzcXX9xGgN0EpzN9mdZ3GATtPhL+CjxFDmkeEU6x56kqZRusLzALXVqkCN7zMEcqwjmywDQ6OhyUe0Xao1Qpyncrg6wKp9XfWDsaZplElvQ/b3sdweeghorwBDlHzgk1JmMc/wiERICVy2VJFdMjFuLQSp3S0W3+sngt2njwNgLssFGVQdJ0tu0KH4ky1LW4yrbkuaA6Iy9oz/qEMMXMMDWyIHhsAyFZc2peV9hc7kiKvfULxCl9iddfRK1f8kk9qvbdOoBtOg7ZkOZ5MsGrSHsokgLXUp9y88smniwWyuFSIRVmjplga3yD8Uij5QS1ZiM4U3Qw5QlSm2bXjFe6jzzBFtpg+/YBbLAWG7OPynNjlCw65fukGNdkJRf7yM1fOxVzbxOJVocFoYIaGwH22mIQkrvu1E2nGuebxIgW9U9TSiukPGU+Lt++c3DJPKhyhEEbXCQLUpae2exiKy6tMPe9mDRBFCEMTWrtwxN8qvuGnt6MoihKWS5NSyBhbH8StXoAz8PLOrRgLtOT/+4vcu+7vDLnqNvztOq7fmd8sMmY9Xzn1zj8Dq8+XVdu2Nv0IIySgEdQo3xVHps3Q5i3fLFsV4aiqzAiBhbgMDEd1uh8qZZ+lwhjkgokkOIv4xNJmyncdfUUzgB4oFMBtiu71Xumpz/P+cfUP+SlwFExwWW62r7b+LSPxqxn/gvMZ5z9C16t15UbNlq+jbGJtco7p8wbYlL4alSyfWdeuu0j7JA3JFNuVAwtst7F7FhWBbPFNKIUORndWtLraFLmMu7KFVDDOzqkeaiN33YAW/r76wR4XDN/yN1z7hejPau06EddkS/6XThfcz1fI/4K736fO48vlxt2PXJYFaeUkFS8U15XE3428xdtn2kc8GQlf1vkIaNRRnOMvLTWrZbElEHeLWi1o0dlKPAh1MVgbbVquPJ5+Cr8LU5/H/+I2QlHIU2ClXM9G8v7Rr7oc/hozfUUgsPnb3D+I+7WF8kNO92GY0SNvuxiE+2Bt8prVJTkzE64sfOstxuwfxUUoyk8VjcTlsqe2qITSFoSj6Epd4KsT6BZOWmtgE3hBfir8IzZDwgV4ZTZvD8VvPHERo8v+vL1DASHTz/i9OlKueHDjK5Rnx/JB1Vb1ioXdBra16dmt7dgik10yA/FwJSVY6XjA3oy4SqM2frqDPPSRMex9qs3XQtoWxMj7/Er8GWYsXgjaVz4OYumP2+9kbxvny/6kvWsEBw+fcb5bInc8APdhpOSs01tEqIkoiZjbAqKMruLbJYddHuHFRIyJcbdEdbl2sVLaySygunutBg96Y2/JjKRCdyHV+AEFtTvIpbKIXOamknYSiB6KV/0JetZITgcjjk5ZdaskBtWO86UF0ap6ozGXJk2WNiRUlCPFir66lzdm/SLSuK7EUdPz8f1z29Skq6F1fXg8+5UVR6bszncP4Tn4KUkkdJ8UFCY1zR1i8RmL/qQL3rlei4THG7OODlnKko4oI01kd3CaM08Ia18kC3GNoVaO9iDh+hWxSyTXFABXoau7Q6q9OxYg/OVEMw6jdbtSrJ9cBcewGmaZmg+bvkUnUUaGr+ZfnMH45Ivevl61hMcXsxYLFTu1hTm2zViCp7u0o5l+2PSUh9bDj6FgYypufBDhqK2+oXkiuHFHR3zfj+9PtA8oR0xnqX8qn+sx3bFODSbbF0X8EUvWQ8jBIcjo5bRmLOljDNtcqNtOe756h3l0VhKa9hDd2l1eqmsnh0MNMT/Cqnx6BInumhLT8luljzQ53RiJeA/0dxe5NK0o2fA1+GLXr6eNQWHNUOJssQaTRlGpLHKL9fD+IrQzTOMZS9fNQD4AnRNVxvTdjC+fJdcDDWQcyB00B0t9BDwTxXgaAfzDZ/DBXzRnfWMFRwuNqocOmX6OKNkY63h5n/fFcB28McVHqnXZVI27K0i4rDLNE9lDKV/rT+udVbD8dFFu2GGZ8mOt0kAXcoX3ZkIWVtw+MNf5NjR2FbivROHmhV1/pj2egv/fMGIOWTIWrV3Av8N9imV9IWml36H6cUjqEWNv9aNc+veb2sH46PRaHSuMBxvtW+twxctq0z+QsHhux8Q7rCY4Ct8lqsx7c6Sy0dl5T89rIeEuZKoVctIk1hNpfavER6yyH1Vvm3MbsUHy4ab4hWr/OZPcsRBphnaV65/ZcdYPNNwsjN/djlf9NqCw9U5ExCPcdhKxUgLSmfROpLp4WSUr8ojdwbncbvCf+a/YzRaEc6QOvXcGO256TXc5Lab9POvB+AWY7PigWYjzhifbovuunzRawsO24ZqQQAqguBtmpmPB7ysXJfyDDaV/aPGillgz1MdQg4u5MYaEtBNNHFjkRlSpd65lp4hd2AVPTfbV7FGpyIOfmNc/XVsPfg7vzaS/3nkvLL593ANLvMuRMGpQIhiF7kUEW9QDpAUbTWYBcbp4WpacHHY1aacqQyjGZS9HI3yCBT9kUZJhVOD+zUDvEH9ddR11fzPcTDQ5TlgB0KwqdXSavk9BC0pKp0WmcuowSw07VXmXC5guzSa4p0UvRw2lbDiYUx0ExJJRzWzi6Gm8cnEkfXXsdcG/M/jAJa0+bmCgdmQ9CYlNlSYZOKixmRsgiFxkrmW4l3KdFKv1DM8tk6WxPYJZhUUzcd8Kdtgrw/gkfXXDT7+avmfVak32qhtkg6NVdUS5wgkru1YzIkSduTW1FDwVWV3JQVJVuieTc0y4iDpFwc7/BvSalvKdQM8sv662cevz/+8sQVnjVAT0W2wLllw1JiMhJRxgDjCjLQsOzSFSgZqx7lAW1JW0e03yAD3asC+GD3NbQhbe+mN5GXH1F83KDOM4n/e5JIuH4NpdQARrFPBVptUNcjj4cVMcFSRTE2NpR1LEYbYMmfWpXgP9KejaPsLUhuvLCsVXznAG9dfx9SR1ud/3hZdCLHb1GMdPqRJgqDmm76mHbvOXDtiO2QPUcKo/TWkQ0i2JFXpBoo7vij1i1Lp3ADAo+qvG3V0rM//vFnnTE4hxd5Ka/Cor5YEdsLVJyKtDgVoHgtW11pWSjolPNMnrlrVj9Fv2Qn60twMwKPqr+N/wvr8z5tZcDsDrv06tkqyzESM85Ycv6XBWA2birlNCXrI6VbD2lx2L0vQO0QVTVVLH4SE67fgsfVXv8n7sz7/85Z7cMtbE6f088wSaR4kCkCm10s6pKbJhfqiUNGLq+0gLWC6eUAZFPnLjwqtKd8EwGvWX59t7iPW4X/eAN1svgRVSY990YZg06BD1ohLMtyFTI4pKTJsS9xREq9EOaPWiO2gpms7397x6nQJkbh+Fz2q/rqRROX6/M8bJrqlVW4l6JEptKeUFuMYUbtCQ7CIttpGc6MY93x1r1vgAnRXvY5cvwWPqb9uWQm+lP95QxdNMeWhOq1x0Db55C7GcUv2ZUuN6n8iKzsvOxibC//Yfs9Na8r2Rlz02vXXDT57FP/zJi66/EJSmsJKa8QxnoqW3VLQ+jZVUtJwJ8PNX1NQCwfNgdhhHD9on7PdRdrdGPF28rJr1F+3LBdeyv+8yYfLoMYet1vX4upNAjVvwOUWnlNXJXlkzk5Il6kqeoiL0C07qno+/CYBXq/+utlnsz7/Mzvy0tmI4zm4ag23PRN3t/CWryoUVJGm+5+K8RJ0V8Hc88/XHUX/HfiAq7t+BH+x6v8t438enWmdJwFA6ZINriLGKv/95f8lT9/FnyA1NMVEvQyaXuu+gz36f/DD73E4pwqpLcvm/o0Vle78n//+L/NPvoefp1pTJye6e4A/D082FERa5/opeH9zpvh13cNm19/4v/LDe5xMWTi8I0Ta0qKlK27AS/v3/r+/x/2GO9K2c7kVMonDpq7//jc5PKCxeNPpFVzaRr01wF8C4Pu76hXuX18H4LduTr79guuFD3n5BHfI+ZRFhY8w29TYhbbLi/bvBdqKE4fUgg1pBKnV3FEaCWOWyA+m3WpORZr/j+9TKJtW8yBTF2/ZEODI9/QavHkVdGFp/Pjn4Q+u5hXapsP5sOH+OXXA1LiKuqJxiMNbhTkbdJTCy4llEt6NnqRT4dhg1V3nbdrm6dYMecA1yTOL4PWTE9L5VzPFlLBCvlG58AhehnN4uHsAYinyJ+AZ/NkVvELbfOBUuOO5syBIEtiqHU1k9XeISX5bsimrkUUhnGDxourN8SgUsCZVtKyGbyGzHXdjOhsAvOAswSRyIBddRdEZWP6GZhNK/yjwew9ehBo+3jEADu7Ay2n8mDc+TS7awUHg0OMzR0LABhqLD4hJEh/BEGyBdGlSJoXYXtr+3HS4ijzVpgi0paWXtdruGTknXBz+11qT1Q2inxaTzQCO46P3lfLpyS4fou2PH/PupwZgCxNhGlj4IvUuWEsTkqMWm6i4xCSMc9N1RDQoCVcuGItJ/MRWefais+3synowi/dESgJjkilnWnBTGvRWmaw8oR15257t7CHmCf8HOn7cwI8+NQBXMBEmAa8PMRemrNCEhLGEhDQKcGZWS319BX9PFBEwGTbRBhLbDcaV3drFcDqk5kCTd2JF1Wp0HraqBx8U0wwBTnbpCadwBA/gTH/CDrcCs93LV8E0YlmmcyQRQnjBa8JESmGUfIjK/7fkaDJpmD2QptFNVJU1bbtIAjjWQizepOKptRjbzR9Kag6xZmMLLjHOtcLT3Tx9o/0EcTT1XN3E45u24AiwEypDJXihKjQxjLprEwcmRKclaDNZCVqr/V8mYWyFADbusiY5hvgFoU2vio49RgJLn5OsReRFN6tabeetiiy0V7KFHT3HyZLx491u95sn4K1QQSPKM9hNT0wMVvAWbzDSVdrKw4zRjZMyJIHkfq1VAVCDl/bUhNKlGq0zGr05+YAceXVPCttVk0oqjVwMPt+BBefx4yPtGVkUsqY3CHDPiCM5ngupUwCdbkpd8kbPrCWHhkmtIKLEetF2499eS1jZlIPGYnlcPXeM2KD9vLS0bW3ktYNqUllpKLn5ZrsxlIzxvDu5eHxzGLctkZLEY4PgSOg2IUVVcUONzUDBEpRaMoXNmUc0tFZrTZquiLyKxrSm3DvIW9Fil+AkhXu5PhEPx9mUNwqypDvZWdKlhIJQY7vn2OsnmBeOWnYZ0m1iwbbw1U60by5om47iHRV6fOgzjMf/DAZrlP40Z7syxpLK0lJ0gqaAK1c2KQKu7tabTXkLFz0sCftuwX++MyNeNn68k5Buq23YQhUh0SNTJa1ioQ0p4nUG2y0XilF1JqODqdImloPS4Bp111DEWT0jJjVv95uX9BBV7eB3bUWcu0acSVM23YZdd8R8UbQUxJ9wdu3oMuhdt929ME+mh6JXJ8di2RxbTi6TbrDquqV4aUKR2iwT6aZbyOwEXN3DUsWr8Hn4EhwNyHuXHh7/pdaUjtR7vnDh/d8c9xD/s5f501eQ1+CuDiCvGhk1AN/4Tf74RfxPwD3toLarR0zNtsnPzmS64KIRk861dMWCU8ArasG9T9H0ZBpsDGnjtAOM2+/LuIb2iIUGXNgl5ZmKD/Tw8TlaAuihaFP5yrw18v4x1898zIdP+DDAX1bM3GAMvPgRP/cJn3zCW013nrhHkrITyvYuwOUkcHuKlRSW5C6rzIdY4ppnF7J8aAJbQepgbJYBjCY9usGXDKQxq7RZfh9eg5d1UHMVATRaD/4BHK93/1iAgYZ/+jqPn8Dn4UExmWrpa3+ZOK6MvM3bjwfzxNWA2dhs8+51XHSPJiaAhGSpWevEs5xHLXcEGFXYiCONySH3fPWq93JIsBiSWvWyc3CAN+EcXoT7rCSANloPPoa31rt/5PUA/gp8Q/jDD3hyrjzlR8VkanfOvB1XPubt17vzxAfdSVbD1pzAnfgyF3ycadOTOTXhpEUoLC1HZyNGW3dtmjeXgr2r56JNmRwdNNWaQVBddd6rh4MhviEB9EFRD/7RGvePvCbwAL4Mx/D6M541hHO4D3e7g6PafdcZVw689z7NGTwo5om7A8sPhccT6qKcl9NJl9aM/9kX+e59Hh1yPqGuCCZxuITcsmNaJ5F7d0q6J3H48TO1/+M57085q2icdu2U+W36Ldllz9Agiv4YGljoEN908EzvDOrBF98/vtJwCC/BF2AG75xxEmjmMIcjxbjoaxqOK3/4hPOZzhMPBpYPG44CM0dTVm1LjLtUWWVz1Bcf8tEx0zs8O2A2YVHRxKYOiy/aOVoAaMu0i7ubu43njjmd4ibMHU1sIDHaQNKrZND/FZYdk54oCXetjq7E7IVl9eAL7t+oHnwXXtLx44czzoRFHBztYVwtH1d+NOMkupZ5MTM+gUmq90X+Bh9zjRlmaQ+m7YMqUL/veemcecAtOJ0yq1JnVlN27di2E0+Klp1tAJ4KRw1eMI7aJjsO3R8kPSI3fUFXnIOfdQe86sIIVtWDL7h//Ok6vj8vwDk08NEcI8zz7OhBy+WwalzZeZ4+0XniRfst9pAJqQHDGLzVQ2pheZnnv1OWhwO43/AgcvAEXEVVpa4db9sGvNK8wjaENHkfFQ4Ci5i7dqnQlPoLQrHXZDvO3BIXZbJOBrOaEbML6sFL798I4FhKihjHMsPjBUZYCMFr6nvaArxqXPn4lCa+cHfSa2cP27g3Z3ziYTRrcbQNGLQmGF3F3cBdzzzX7AILx0IB9rbwn9kx2G1FW3Inic+ZLIsVvKR8Zwfj0l1fkqo8LWY1M3IX14OX3r9RKTIO+d9XzAI8qRPGPn/4NC2n6o4rN8XJ82TOIvuVA8zLKUHRFgBCetlDZlqR1gLKjS39xoE7Bt8UvA6BxuEDjU3tFsEijgA+615tmZkXKqiEENrh41iLDDZNq4pKTWR3LZfnos81LOuNa15cD956vLMsJd1rqYp51gDUQqMYm2XsxnUhD2jg1DM7SeuJxxgrmpfISSXVIJIS5qJJSvJPEQ49DQTVIbYWJ9QWa/E2+c/oPK1drmC7WSfJRNKBO5Yjvcp7Gc3dmmI/Xh1kDTEuiSnWqQf37h+fTMhGnDf6dsS8SQfQWlqqwXXGlc/PEZ/SC5mtzIV0nAshlQdM/LvUtYutrEZ/Y+EAFtq1k28zQhOwLr1AIeANzhF8t9qzTdZf2qRKO6MWE9ohBYwibbOmrFtNmg3mcS+tB28xv2uKd/agYCvOP+GkSc+0lr7RXzyufL7QbkUpjLjEWFLqOIkAGu2B0tNlO9Eau2W1qcOUvVRgKzypKIQZ5KI3q0MLzqTNRYqiZOqmtqloIRlmkBHVpHmRYV6/HixbO6UC47KOFJnoMrVyr7wYz+SlW6GUaghYbY1I6kkxA2W1fSJokUdSh2LQ1GAimRGm0MT+uu57H5l7QgOWxERpO9moLRPgTtquWCfFlGlIjQaRly9odmzMOWY+IBO5tB4sW/0+VWGUh32qYk79EidWKrjWuiLpiVNGFWFRJVktyeXWmbgBBzVl8anPuXyNJlBJOlKLTgAbi/EYHVHxWiDaVR06GnHQNpJcWcK2jJtiCfG2sEHLzuI66sGrMK47nPIInPnu799935aOK2cvmvubrE38ZzZjrELCmXM2hM7UcpXD2oC3+ECVp7xtIuxptJ0jUr3sBmBS47TVxlvJ1Sqb/E0uLdvLj0lLr29ypdd/eMX3f6lrxGlKwKQxEGvw0qHbkbwrF3uHKwVENbIV2wZ13kNEF6zD+x24aLNMfDTCbDPnEikZFyTNttxWBXDaBuM8KtI2rmaMdUY7cXcUPstqTGvBGSrFWIpNMfbdea990bvAOC1YX0qbc6smDS1mPxSJoW4fwEXvjMmhlijDRq6qale6aJEuFGoppYDoBELQzLBuh/mZNx7jkinv0EtnUp50lO9hbNK57lZaMAWuWR5Yo9/kYwcYI0t4gWM47Umnl3YmpeBPqSyNp3K7s2DSAS/39KRuEN2bS4xvowV3dFRMx/VFcp2Yp8w2nTO9hCXtHG1kF1L4KlrJr2wKfyq77R7MKpFKzWlY9UkhYxyHWW6nBWPaudvEAl3CGcNpSXPZ6R9BbBtIl6cHL3gIBi+42CYXqCx1gfGWe7Ap0h3luyXdt1MKy4YUT9xSF01G16YEdWsouW9mgDHd3veyA97H+Ya47ZmEbqMY72oPztCGvK0onL44AvgC49saZKkWRz4veWljE1FHjbRJaWv6ZKKtl875h4CziFCZhG5rx7tefsl0aRT1bMHZjm8dwL/6u7wCRysaQblQoG5yAQN5zpatMNY/+yf8z+GLcH/Qn0iX2W2oEfXP4GvwQHuIL9AYGnaO3zqAX6946nkgqZNnUhx43DIdQtMFeOPrgy/y3Yd85HlJWwjLFkU3kFwq28xPnuPhMWeS+tDLV9Otllq7pQCf3uXJDN9wFDiUTgefHaiYbdfi3b3u8+iY6TnzhgehI1LTe8lcd7s1wJSzKbahCRxKKztTLXstGAiu3a6rPuQs5pk9TWAan5f0BZmGf7Ylxzzk/A7PAs4QPPPAHeFQ2hbFHszlgZuKZsJcUmbDC40sEU403cEjczstOEypa+YxevL4QBC8oRYqWdK6b7sK25tfE+oDZgtOQ2Jg8T41HGcBE6fTWHn4JtHcu9S7uYgU5KSCkl/mcnq+5/YBXOEr6lCUCwOTOM1taOI8mSxx1NsCXBEmLKbMAg5MkwbLmpBaFOPrNSlO2HnLiEqW3tHEwd8AeiQLmn+2gxjC3k6AxREqvKcJbTEzlpLiw4rNZK6oJdidbMMGX9FULKr0AkW+2qDEPBNNm5QAt2Ik2nftNWHetubosHLo2nG4vQA7GkcVCgVCgaDixHqo9UUn1A6OshapaNR/LPRYFV8siT1cCtJE0k/3WtaNSuUZYKPnsVIW0xXWnMUxq5+En4Kvw/MqQmVXnAXj9Z+9zM98zM/Agy7F/qqj2Nh67b8HjFnPP3iBn/tkpdzwEJX/whIcQUXOaikeliCRGUk7tiwF0rItwMEhjkZ309hikFoRAmLTpEXWuHS6y+am/KB/fM50aLEhGnSMwkpxzOov4H0AvgovwJ1iGzDLtJn/9BU+fAINfwUe6FHSLhu83viV/+/HrOePX+STT2B9uWGbrMHHLldRBlhS/CJQmcRxJFqZica01XixAZsYiH1uolZxLrR/SgxVIJjkpQP4PE9sE59LKLr7kltSBogS5tyszzH8Fvw8/AS8rNOg0xUS9fIaHwb+6et8Q/gyvKRjf5OusOzGx8evA/BP4IP11uN/grca5O0lcsPLJ5YjwI4QkJBOHa0WdMZYGxPbh2W2nR9v3WxEWqgp/G3+6VZbRLSAAZ3BhdhAaUL33VUSw9yjEsvbaQ9u4A/gGXwZXoEHOuU1GSj2chf+Mo+f8IcfcAxfIKVmyunRbYQVnoevwgfw3TXXcw++xNuP4fhyueEUNttEduRVaDttddoP0eSxLe2LENk6itYxlrxBNBYrNNKSQmeaLcm9c8UsaB5WyO6675yyQIAWSDpBVoA/gxmcwEvwoDv0m58UE7gHn+fJOa8/Ywan8EKRfjsopF83eCglX/Sfr7OeaRoQfvt1CGvIDccH5BCvw1sWIzRGC/66t0VTcLZQZtm6PlAasbOJ9iwWtUo7biktTSIPxnR24jxP1ZKaqq+2RcXM9OrBAm/AAs7hDJ5bNmGb+KIfwCs8a3jnjBrOFeMjHSCdbKr+2uOLfnOd9eiA8Hvvwwq54VbP2OqwkB48Ytc4YEOiH2vTXqodabfWEOzso4qxdbqD5L6tbtNPECqbhnA708DZH4QOJUXqScmUlks7Ot6FBuZw3n2mEbaUX7kDzxHOOQk8nKWMzAzu6ZZ8sOFw4RK+6PcuXo9tB4SbMz58ApfKDXf3szjNIIbGpD5TKTRxGkEMLjLl+K3wlWXBsCUxIDU+jbOiysESqAy1MGUJpXgwbTWzNOVEziIXZrJ+VIztl1PUBxTSo0dwn2bOmfDRPD3TRTGlfbCJvO9KvuhL1hMHhB9wPuPRLGHcdOWG2xc0U+5bQtAJT0nRTewXL1pgk2+rZAdeWmz3jxAqfNQQdzTlbF8uJ5ecEIWvTkevAHpwz7w78QujlD/Lr491bD8/1vhM2yrUQRrWXNQY4fGilfctMWYjL72UL/qS9eiA8EmN88nbNdour+PBbbAjOjIa4iBhfFg6rxeKdEGcL6p3EWR1Qq2Qkhs2DrnkRnmN9tG2EAqmgPw6hoL7Oza7B+3SCrR9tRftko+Lsf2F/mkTndN2LmzuMcKTuj/mX2+4Va3ki16+nnJY+S7MefpkidxwnV+4wkXH8TKnX0tsYzYp29DOOoSW1nf7nTh2akYiWmcJOuTidSaqESrTYpwjJJNVGQr+rLI7WsqerHW6Kp/oM2pKuV7T1QY9gjqlZp41/WfKpl56FV/0kvXQFRyeQ83xaTu5E8p5dNP3dUF34ihyI3GSpeCsywSh22ZJdWto9winhqifb7VRvgktxp13vyjrS0EjvrRfZ62uyqddSWaWYlwTPAtJZ2oZ3j/Sgi/mi+6vpzesfAcWNA0n8xVyw90GVFGuZjTXEQy+6GfLGLMLL523f5E0OmxVjDoOuRiH91RKU+vtoCtH7TgmvBLvtFXWLW15H9GTdVw8ow4IlRLeHECN9ym1e9K0I+Cbnhgv4Yu+aD2HaQJ80XDqOzSGAV4+4yCqBxrsJAX6ZTIoX36QnvzhhzzMfFW2dZVLOJfo0zbce5OvwXMFaZ81mOnlTVXpDZsQNuoYWveketKb5+6JOOsgX+NTm7H49fUTlx+WLuWL7qxnOFh4BxpmJx0p2gDzA/BUARuS6phR+pUsY7MMboAHx5xNsSVfVZcYSwqCKrqon7zM+8ecCkeS4nm3rINuaWvVNnMRI1IRpxTqx8PZUZ0Br/UEduo3B3hNvmgZfs9gQPj8vIOxd2kndir3awvJ6BLvoUuOfFWNYB0LR1OQJoUySKb9IlOBx74q1+ADC2G6rOdmFdJcD8BkfualA+BdjOOzP9uUhGUEX/TwhZsUduwRr8wNuXKurCixLBgpQI0mDbJr9dIqUuV+92ngkJZ7xduCk2yZKbfWrH1VBiTg9VdzsgRjW3CVXCvAwDd+c1z9dWw9+B+8MJL/eY15ZQ/HqvTwVdsZn5WQsgRRnMaWaecu3jFvMBEmgg+FJFZsnSl0zjB9OqPYaBD7qmoVyImFvzi41usesV0julaAR9dfR15Xzv9sEruRDyk1nb+QaLU67T885GTls6YgcY+UiMa25M/pwGrbCfzkvR3e0jjtuaFtnwuagHTSb5y7boBH119HXhvwP487jJLsLJ4XnUkHX5sLbS61dpiAXRoZSCrFJ+EjpeU3puVfitngYNo6PJrAigKktmwjyQdZpfq30mmtulaAx9Zfx15Xzv+cyeuiBFUs9zq8Kq+XB9a4PVvph3GV4E3y8HENJrN55H1X2p8VyqSKwVusJDKzXOZzplWdzBUFK9e+B4+uv468xvI/b5xtSAkBHQaPvtqWzllVvEOxPbuiE6+j2pvjcKsbvI7txnRErgfH7LdXqjq0IokKzga14GzQ23SSbCQvO6r+Or7SMIr/efOkkqSdMnj9mBx2DRsiY29Uj6+qK9ZrssCKaptR6HKURdwUYeUWA2kPzVKQO8ku2nU3Anhs/XWkBx3F/7wJtCTTTIKftthue1ty9xvNYLY/zo5KSbIuKbXpbEdSyeRyYdAIwKY2neyoc3+k1XUaufYga3T9daMUx/r8z1s10ITknIO0kuoMt+TB8jK0lpayqqjsJ2qtXAYwBU932zinimgmd6mTRDnQfr88q36NAI+tv24E8Pr8zxtasBqx0+xHH9HhlrwsxxNUfKOHQaZBITNf0uccj8GXiVmXAuPEAKSdN/4GLHhs/XWj92dN/uetNuBMnVR+XWDc25JLjo5Mg5IZIq226tmCsip2zZliL213YrTlL2hcFjpCduyim3M7/eB16q/blQsv5X/esDRbtJeabLIosWy3ycavwLhtxdWzbMmHiBTiVjJo6lCLjXZsi7p9PEPnsq6X6wd4bP11i0rD5fzPm/0A6brrIsllenZs0lCJlU4abakR59enZKrKe3BZihbTxlyZ2zl1+g0wvgmA166/bhwDrcn/7Ddz0eWZuJvfSESug6NzZsox3Z04FIxz0mUjMwVOOVTq1CQ0AhdbBGVdjG/CgsfUX7esJl3K/7ytWHRv683praW/8iDOCqWLLhpljDY1ZpzK75QiaZoOTpLKl60auHS/97oBXrv+umU9+FL+5+NtLFgjqVLCdbmj7pY5zPCPLOHNCwXGOcLquOhi8CmCWvbcuO73XmMUPab+ug3A6/A/78Bwe0bcS2+tgHn4J5pyS2WbOck0F51Vq3LcjhLvZ67p1ABbaL2H67bg78BfjKi/jr3+T/ABV3ilLmNXTI2SpvxWBtt6/Z//D0z/FXaGbSBgylzlsEGp+5//xrd4/ae4d8DUUjlslfIYS3t06HZpvfQtvv0N7AHWqtjP2pW08QD/FLy//da38vo8PNlKHf5y37Dxdfe/oj4kVIgFq3koLReSR76W/bx//n9k8jonZxzWTANVwEniDsg87sOSd/z7//PvMp3jQiptGVWFX2caezzAXwfgtzYUvbr0iozs32c3Uge7varH+CNE6cvEYmzbPZ9hMaYDdjK4V2iecf6EcEbdUDVUARda2KzO/JtCuDbNQB/iTeL0EG1JSO1jbXS+nLxtPMDPw1fh5+EPrgSEKE/8Gry5A73ui87AmxwdatyMEBCPNOCSKUeRZ2P6Myb5MRvgCHmA9ywsMifU+AYXcB6Xa5GibUC5TSyerxyh0j6QgLVpdyhfArRTTLqQjwe4HOD9s92D4Ap54odXAPBWLAwB02igG5Kkc+piN4lvODIFGAZgT+EO4Si1s7fjSR7vcQETUkRm9O+MXyo9OYhfe4xt9STQ2pcZRLayCV90b4D3jR0DYAfyxJ+eywg2IL7NTMXna7S/RpQ63JhWEM8U41ZyQGjwsVS0QBrEKLu8xwZsbi4wLcCT+OGidPIOCe1PiSc9Qt+go+vYqB7cG+B9d8cAD+WJPz0Am2gxXgU9IneOqDpAAXOsOltVuMzpdakJXrdPCzXiNVUpCeOos5cxnpQT39G+XVLhs1osQVvJKPZyNq8HDwd4d7pNDuWJPxVX7MSzqUDU6gfadKiNlUFTzLeFHHDlzO4kpa7aiKhBPGKwOqxsBAmYkOIpipyXcQSPlRTf+Tii0U3EJGaZsDER2qoB3h2hu0qe+NNwUooYU8y5mILbJe6OuX+2FTKy7bieTDAemaQyQ0CPthljSWO+xmFDIYiESjM5xKd6Ik5lvLq5GrQ3aCMLvmCA9wowLuWJb9xF59hVVP6O0CrBi3ZjZSNOvRy+I6klNVRJYRBaEzdN+imiUXQ8iVF8fsp+W4JXw7WISW7fDh7lptWkCwZ4d7QTXyBPfJMYK7SijjFppGnlIVJBJBYj7eUwtiP1IBXGI1XCsjNpbjENVpSAJ2hq2LTywEly3hUYazt31J8w2+aiLx3g3fohXixPfOMYm6zCGs9LVo9MoW3MCJE7R5u/WsOIjrqBoHUO0bJE9vxBpbhsd3+Nb4/vtPCZ4oZYCitNeYuC/8UDvDvy0qvkiW/cgqNqRyzqSZa/s0mqNGjtKOoTm14zZpUauiQgVfqtQiZjq7Q27JNaSK5ExRcrGCXO1FJYh6jR6CFqK7bZdQZ4t8g0rSlPfP1RdBtqaa9diqtzJkQ9duSryi2brQXbxDwbRUpFMBHjRj8+Nt7GDKgvph9okW7LX47gu0SpGnnFQ1S1lYldOsC7hYteR574ZuKs7Ei1lBsfdz7IZoxzzCVmmVqaSySzQbBVAWDek+N4jh9E/4VqZrJjPwiv9BC1XcvOWgO8275CVyBPvAtTVlDJfZkaZGU7NpqBogAj/xEHkeAuJihWYCxGN6e8+9JtSegFXF1TrhhLGP1fak3pebgPz192/8gB4d/6WT7+GdYnpH7hH/DJzzFiYPn/vjW0SgNpTNuPIZoAEZv8tlGw4+RLxy+ZjnKa5NdFoC7UaW0aduoYse6+bXg1DLg6UfRYwmhGEjqPvF75U558SANrElK/+MdpXvmqBpaXOa/MTZaa1DOcSiLaw9j0NNNst3c+63c7EKTpkvKHzu6bPbP0RkuHAVcbRY8ijP46MIbQeeT1mhA+5PV/inyDdQipf8LTvMXbwvoDy7IruDNVZKTfV4CTSRUYdybUCnGU7KUTDxLgCknqUm5aAW6/1p6eMsOYsphLzsHrE0Y/P5bQedx1F/4yPHnMB3/IOoTU9+BL8PhtjuFKBpZXnYNJxTuv+2XqolKR2UQgHhS5novuxVySJhBNRF3SoKK1XZbbXjVwWNyOjlqWJjrWJIy+P5bQedyldNScP+HZ61xKSK3jyrz+NiHG1hcOLL/+P+PDF2gOkekKGiNWKgJ+8Z/x8Iv4DdQHzcpZyF4v19I27w9/yPGDFQvmEpKtqv/TLiWMfn4sofMm9eAH8Ao0zzh7h4sJqYtxZd5/D7hkYPneDzl5idlzNHcIB0jVlQ+8ULzw/nc5/ojzl2juE0apD7LRnJxe04dMz2iOCFNtGFpTuXA5AhcTRo8mdN4kz30nVjEC4YTZQy4gpC7GlTlrePKhGsKKgeXpCYeO0MAd/GH7yKQUlXPLOasOH3FnSphjHuDvEu4gB8g66oNbtr6eMbFIA4fIBJkgayoXriw2XEDQPJrQeROAlY6aeYOcMf+IVYTU3XFlZufMHinGywaW3YLpObVBAsbjF4QJMsVUSayjk4voPsHJOQfPWDhCgDnmDl6XIRerD24HsGtw86RMHOLvVSHrKBdeVE26gKB5NKHzaIwLOmrqBWJYZDLhASG16c0Tn+CdRhWDgWXnqRZUTnPIHuMJTfLVpkoYy5CzylHVTGZMTwkGAo2HBlkQplrJX6U+uF1wZz2uwS1SQ12IqWaPuO4baZaEFBdukksJmkcTOm+YJSvoqPFzxFA/YUhIvWxcmSdPWTWwbAKVp6rxTtPFUZfKIwpzm4IoMfaYQLWgmlG5FME2gdBgm+J7J+rtS/XBbaVLsR7bpPQnpMFlo2doWaVceHk9+MkyguZNCJ1He+kuHTWyQAzNM5YSUg/GlTk9ZunAsg1qELVOhUSAK0LABIJHLKbqaEbHZLL1VA3VgqoiOKXYiS+HRyaEKgsfIqX64HYWbLRXy/qWoylIV9gudL1OWBNgBgTNmxA6b4txDT4gi3Ri7xFSLxtXpmmYnzAcWDZgY8d503LFogz5sbonDgkKcxGsWsE1OI+rcQtlgBBCSOKD1mtqYpIU8cTvBmAT0yZe+zUzeY92fYjTtGipXLhuR0ePoHk0ofNWBX+lo8Z7pAZDk8mEw5L7dVyZZoE/pTewbI6SNbiAL5xeygW4xPRuLCGbhcO4RIeTMFYHEJkYyEO9HmJfXMDEj/LaH781wHHZEtqSQ/69UnGpzH7LKIAZEDSPJnTesJTUa+rwTepI9dLJEawYV+ZkRn9g+QirD8vF8Mq0jFQ29js6kCS3E1+jZIhgPNanHdHFqFvPJLHqFwQqbIA4jhDxcNsOCCQLDomaL/dr5lyJaJU6FxPFjO3JOh3kVMcROo8u+C+jo05GjMF3P3/FuDLn5x2M04xXULPwaS6hBYki+MrMdZJSgPHlcB7nCR5bJ9Kr5ACUn9jk5kivdd8tk95SOGrtqu9lr2IhK65ZtEl7ZKrp7DrqwZfRUSN1el7+7NJxZbywOC8neNKTch5vsTEMNsoCCqHBCqIPRjIPkm0BjvFODGtto99rCl+d3wmHkW0FPdpZtC7MMcVtGFQjJLX5bdQ2+x9ypdc313uj8xlsrfuLgWXz1cRhZvJYX0iNVBRcVcmCXZs6aEf3RQF2WI/TcCbKmGU3IOoDJGDdDub0+hYckt6PlGu2BcxmhbTdj/klhccLGJMcqRjMJP1jW2ETqLSWJ/29MAoORluJ+6LPffBZbi5gqi5h6catQpmOT7/OFf5UorRpLzCqcMltBLhwd1are3kztrSzXO0LUbXRQcdLh/RdSZ+swRm819REDrtqzC4es6Gw4JCKlSnjYVpo0xeq33PrADbFLL3RuCmObVmPN+24kfa+AojDuM4umKe2QwCf6EN906HwjujaitDs5o0s1y+k3lgbT2W2i7FJdnwbLXhJUBq/9liTctSmFC/0OqUinb0QddTWamtjbHRFuWJJ6NpqZ8vO3fZJ37Db+2GkaPYLGHs7XTTdiFQJ68SkVJFVmY6McR5UycflNCsccHFaV9FNbR4NttLxw4pQ7wJd066Z0ohVbzihaxHVExd/ay04oxUKWt+AsdiQ9OUyZ2krzN19IZIwafSTFgIBnMV73ADj7V/K8u1MaY2sJp2HWm0f41tqwajEvdHWOJs510MaAqN4aoSiPCXtN2KSi46dUxHdaMquar82O1x5jqhDGvqmoE9LfxcY3zqA7/x3HA67r9ZG4O6Cuxu12/+TP+eLP+I+HErqDDCDVmBDO4larujNe7x8om2rMug0MX0rL1+IWwdwfR+p1TNTyNmVJ85ljWzbWuGv8/C7HD/izjkHNZNYlhZcUOKVzKFUxsxxN/kax+8zPWPSFKw80rJr9Tizyj3o1gEsdwgWGoxPezDdZ1TSENE1dLdNvuKL+I84nxKesZgxXVA1VA1OcL49dFlpFV5yJMhzyCmNQ+a4BqusPJ2bB+xo8V9u3x48VVIEPS/mc3DvAbXyoYr6VgDfh5do5hhHOCXMqBZUPhWYbWZECwVJljLgMUWOCB4MUuMaxGNUQDVI50TQ+S3kFgIcu2qKkNSHVoM0SHsgoZxP2d5HH8B9woOk4x5bPkKtAHucZsdykjxuIpbUrSILgrT8G7G5oCW+K0990o7E3T6AdW4TilH5kDjds+H64kS0mz24grtwlzDHBJqI8YJQExotPvoC4JBq0lEjjQkyBZ8oH2LnRsQ4Hu1QsgDTJbO8fQDnllitkxuVskoiKbRF9VwzMDvxHAdwB7mD9yCplhHFEyUWHx3WtwCbSMMTCUCcEmSGlg4gTXkHpZXWQ7kpznK3EmCHiXInqndkQjunG5kxTKEeGye7jWz9cyMR2mGiFQ15ENRBTbCp+Gh86vAyASdgmJq2MC6hoADQ3GosP0QHbnMHjyBQvQqfhy/BUbeHd5WY/G/9LK/8Ka8Jd7UFeNWEZvzPb458Dn8DGLOe3/wGL/4xP+HXlRt+M1PE2iLhR8t+lfgxsuh7AfO2AOf+owWhSZRYQbd622hbpKWKuU+XuvNzP0OseRDa+mObgDHJUSc/pKx31QdKffQ5OIJpt8GWjlgTwMc/w5MPCR/yl1XC2a2Yut54SvOtMev55Of45BOat9aWG27p2ZVORRvnEk1hqWMVUmqa7S2YtvlIpspuF1pt0syuZS2NV14mUidCSfzQzg+KqvIYCMljIx2YK2AO34fX4GWdu5xcIAb8MzTw+j/lyWM+Dw/gjs4GD6ehNgA48kX/AI7XXM/XAN4WHr+9ntywqoCakCqmKP0rmQrJJEErG2Upg1JObr01lKQy4jskWalKYfJ/EDLMpjNSHFEUAde2fltaDgmrNaWQ9+AAb8I5vKjz3L1n1LriB/BXkG/wwR9y/oRX4LlioHA4LzP2inzRx/DWmutRweFjeP3tNeSGlaE1Fde0OS11yOpmbIp2u/jF1n2RRZviJM0yBT3IZl2HWImKjQOxIyeU325b/qWyU9Moj1o07tS0G7qJDoGHg5m8yeCxMoEH8GU45tnrNM84D2l297DQ9t1YP7jki/7RmutRweEA77/HWXOh3HCxkRgldDQkAjNTMl2Iloc1qN5JfJeeTlyTRzxURTdn1Ixv2uKjs12AbdEWlBtmVdk2k7FFwj07PCZ9XAwW3dG+8xKzNFr4EnwBZpy9Qzhh3jDXebBpYcpuo4fQ44u+fD1dweEnHzI7v0xuuOALRUV8rXpFyfSTQYkhd7IHm07jpyhlkCmI0ALYqPTpUxXS+z4jgDj1Pflvmz5ecuItpIBxyTHpSTGWd9g1ApfD/bvwUhL4nT1EzqgX7cxfCcNmb3mPL/qi9SwTHJ49oj5ZLjccbTG3pRmlYi6JCG0mQrAt1+i2UXTZ2dv9IlQpN5naMYtviaXlTrFpoMsl3bOAFEa8sqPj2WCMrx3Yjx99qFwO59Aw/wgx+HlqNz8oZvA3exRDvuhL1jMQHPaOJ0+XyA3fp1OfM3qObEVdhxjvynxNMXQV4+GJyvOEFqeQBaIbbO7i63rpxCltdZShPFxkjM2FPVkn3TG+Rp9pO3l2RzFegGfxGDHIAh8SteR0C4HopXzRF61nheDw6TFN05Ebvq8M3VKKpGjjO6r7nhudTEGMtYM92HTDaR1FDMXJ1eThsbKfywyoWwrzRSXkc51flG3vIid62h29bIcFbTGhfV+faaB+ohj7dPN0C2e2lC96+XouFByen9AsunLDJZ9z7NExiUc0OuoYW6UZkIyx2YUR2z6/TiRjyKMx5GbbjLHvHuf7YmtKghf34LJfx63Yg8vrvN2zC7lY0x0tvKezo4HmGYDU+Gab6dFL+KI761lDcNifcjLrrr9LWZJctG1FfU1uwhoQE22ObjdfkSzY63CbU5hzs21WeTddH2BaL11Gi7lVdlxP1nkxqhnKhVY6knS3EPgVGg1JpN5cP/hivujOelhXcPj8HC/LyI6MkteVjlolBdMmF3a3DbsuAYhL44dxzthWSN065xxUd55Lmf0wRbOYOqH09/o9WbO2VtFdaMb4qBgtFJoT1SqoN8wPXMoXLb3p1PUEhxfnnLzGzBI0Ku7FxrKsNJj/8bn/H8fPIVOd3rfrklUB/DOeO+nkghgSPzrlPxluCMtOnDL4Yml6dK1r3vsgMxgtPOrMFUZbEUbTdIzii5beq72G4PD0DKnwjmBULUVFmy8t+k7fZ3pKc0Q4UC6jpVRqS9Umv8bxw35flZVOU1X7qkjnhZlsMbk24qQ6Hz7QcuL6sDC0iHHki96Uh2UdvmgZnjIvExy2TeJdMDZNSbdZyAHe/Yd1xsQhHiKzjh7GxQ4yqMPaywPkjMamvqrYpmO7Knad+ZQC5msCuAPWUoxrxVhrGv7a+KLXFhyONdTMrZ7ke23qiO40ZJUyzgYyX5XyL0mV7NiUzEs9mjtbMN0dERqwyAJpigad0B3/zRV7s4PIfXSu6YV/MK7+OrYe/JvfGMn/PHJe2fyUdtnFrKRNpXV0Y2559aWPt/G4BlvjTMtXlVIWCnNyA3YQBDmYIodFz41PvXPSa6rq9lWZawZ4dP115HXV/M/tnFkkrBOdzg6aP4pID+MZnTJ1SuuB6iZlyiox4HT2y3YBtkUKWooacBQUDTpjwaDt5poBHl1/HXltwP887lKKXxNUEyPqpGTyA699UqY/lt9yGdlUKra0fFWS+36iylVWrAyd7Uw0CZM0z7xKTOduznLIjG2Hx8cDPLb+OvK6Bv7n1DYci4CxUuRxrjBc0bb4vD3rN5Zz36ntLb83eVJIB8LiIzCmn6SMPjlX+yNlTjvIGjs+QzHPf60Aj62/jrzG8j9vYMFtm1VoRWCJdmw7z9N0t+c8cxZpPeK4aTRicS25QhrVtUp7U578chk4q04Wx4YoQSjFryUlpcQ1AbxZ/XVMknIU//OGl7Q6z9Zpxi0+3yFhSkjUDpnCIUhLWVX23KQ+L9vKvFKI0ZWFQgkDLvBoylrHNVmaw10zwCPrr5tlodfnf94EWnQ0lFRWy8pW9LbkLsyUVDc2NSTHGDtnD1uMtchjbCeb1mpxFP0YbcClhzdLu6lfO8Bj6q+bdT2sz/+8SZCV7VIxtt0DUn9L7r4cLYWDSXnseEpOGFuty0qbOVlS7NNzs5FOGJUqQpl2Q64/yBpZf90sxbE+//PGdZ02HSipCbmD6NItmQ4Lk5XUrGpDMkhbMm2ZVheNYV+VbUWTcv99+2NyX1VoafSuC+AN6q9bFIMv5X/eagNWXZxEa9JjlMwNWb00akGUkSoepp1/yRuuqHGbUn3UdBSTxBU6SEVklzWRUkPndVvw2PrrpjvxOvzPmwHc0hpmq82npi7GRro8dXp0KXnUQmhZbRL7NEVp1uuZmO45vuzKsHrktS3GLWXODVjw+vXXLYx4Hf7njRPd0i3aoAGX6W29GnaV5YdyDj9TFkakje7GHYzDoObfddHtOSpoi2SmzJHrB3hM/XUDDEbxP2/oosszcRlehWXUvzHv4TpBVktHqwenFo8uLVmy4DKLa5d3RtLrmrM3aMFr1183E4sewf+85VWeg1c5ag276NZrM9IJVNcmLEvDNaV62aq+14IAOGFsBt973Ra8Xv11YzXwNfmft7Jg2oS+XOyoC8/cwzi66Dhmgk38kUmP1CUiYWOX1bpD2zWXt2FCp7uq8703APAa9dfNdscR/M/bZLIyouVxqJfeWvG9Je+JVckHQ9+CI9NWxz+blX/KYYvO5n2tAP/vrlZ7+8/h9y+9qeB/Hnt967e5mevX10rALDWK//FaAT5MXdBXdP0C/BAes792c40H+AiAp1e1oH8HgH94g/Lttx1gp63op1eyoM/Bvw5/G/7xFbqJPcCXnmBiwDPb/YKO4FX4OjyCb289db2/Noqicw4i7N6TVtoz8tNwDH+8x/i6Ae7lmaQVENzJFb3Di/BFeAwz+Is9SjeQySpPqbLFlNmyz47z5a/AF+AYFvDmHqibSXTEzoT4Gc3OALaqAP4KPFUJ6n+1x+rGAM6Zd78bgJ0a8QN4GU614vxwD9e1Amy6CcskNrczLx1JIp6HE5UZD/DBHrFr2oNlgG4Odv226BodoryjGJ9q2T/AR3vQrsOCS0ctXZi3ruLlhpFDJYl4HmYtjQCP9rhdn4suySLKDt6wLcC52h8xPlcjju1fn+yhuw4LZsAGUuo2b4Fx2UwQu77uqRHXGtg92aN3tQCbFexc0uk93vhTXbct6y7MulLycoUljx8ngDMBg1tvJjAazpEmOtxlzclvj1vQf1Tx7QlPDpGpqgtdSKz/d9/hdy1vTfFHSmC9dGDZbLiezz7Ac801HirGZsWjydfZyPvHXL/Y8Mjzg8BxTZiuwKz4Eb8sBE9zznszmjvFwHKPIWUnwhqfVRcd4Ck0K6ate48m1oOfrX3/yOtvAsJ8zsPAM89sjnddmuLuDPjX9Bu/L7x7xpMzFk6nWtyQfPg278Gn4Aekz2ZgOmU9eJ37R14vwE/BL8G3aibCiWMWWDQ0ZtkPMnlcGeAu/Ag+8ZyecU5BPuy2ILD+sQqyZhAKmn7XZd+jIMTN9eBL7x95xVLSX4On8EcNlXDqmBlqS13jG4LpmGbkF/0CnOi3H8ETOIXzmnmtb0a16Tzxj1sUvQCBiXZGDtmB3KAefPH94xcUa/6vwRn80GOFyjEXFpba4A1e8KQfFF+259tx5XS4egYn8fQsLGrqGrHbztr+uByTahWuL1NUGbDpsnrwBfePPwHHIf9X4RnM4Z2ABWdxUBlqQ2PwhuDxoS0vvqB1JzS0P4h2nA/QgTrsJFn+Y3AOjs9JFC07CGWX1oNX3T/yHOzgDjwPn1PM3g9Jk9lZrMEpxnlPmBbjyo2+KFXRU52TJM/2ALcY57RUzjObbjqxVw++4P6RAOf58pcVsw9Daje3htriYrpDOonre3CudSe6bfkTEgHBHuDiyu5MCsc7BHhYDx7ePxLjqigXZsw+ijMHFhuwBmtoTPtOxOrTvYJDnC75dnUbhfwu/ZW9AgYd+peL68HD+0emKquiXHhWjJg/UrkJYzuiaL3E9aI/ytrCvAd4GcYZMCkSQxfUg3v3j8c4e90j5ZTPdvmJJGHnOCI2nHS8081X013pHuBlV1gB2MX1YNmWLHqqGN/TWmG0y6clJWthxNUl48q38Bi8vtMKyzzpFdSDhxZ5WBA5ZLt8Jv3895DduBlgbPYAj8C4B8hO68FDkoh5lydC4FiWvBOVqjYdqjiLv92t8yPDjrDaiHdUD15qkSURSGmXJwOMSxWAXYwr3zaAufJ66l+94vv3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/wHuD9tQd4f+0B3l97gPfXHuD9tQd4f+0B3l97gG8LwP8G/AL8O/A5OCq0Ys2KIdv/qOIXG/4mvFAMF16gZD+2Xvu/B8as5+8bfllWyg0zaNO5bfXj6vfhhwD86/Aq3NfRS9t9WPnhfnvCIw/CT8GLcFTMnpntdF/z9V+PWc/vWoIH+FL3Znv57PitcdGP4R/C34avw5fgRVUInCwbsn1yyA8C8zm/BH8NXoXnVE6wVPjdeCI38kX/3+Ct9dbz1pTmHFRu+Hm4O9Ch3clr99negxfwj+ER/DR8EV6B5+DuQOnTgUw5rnkY+FbNU3gNXh0o/JYTuWOvyBf9FvzX663HH/HejO8LwAl8Hl5YLTd8q7sqA3wbjuExfAFegQdwfyDoSkWY8swzEf6o4Qyewefg+cHNbqMQruSL/u/WWc+E5g7vnnEXgDmcDeSGb/F4cBcCgT+GGRzDU3hZYburAt9TEtHgbM6JoxJ+6NMzzTcf6c2bycv2+KK/f+l6LBzw5IwfqZJhA3M472pWT/ajKxnjv4AFnMEpnBTPND6s2J7qHbPAqcMK74T2mZ4VGB9uJA465It+/eL1WKhYOD7xHOkr1ajK7d0C4+ke4Hy9qXZwpgLr+Znm/uNFw8xQOSy8H9IzjUrd9+BIfenYaylf9FsXr8fBAadnPIEDna8IBcwlxnuA0/Wv6GAWPd7dDIKjMdSWueAsBj4M7TOd06qBbwDwKr7oleuxMOEcTuEZTHWvDYUO7aHqAe0Bbq+HEFRzOz7WVoTDQkVds7A4sIIxfCQdCefFRoIOF/NFL1mPab/nvOakSL/Q1aFtNpUb/nFOVX6gzyg/1nISyDfUhsokIzaBR9Kxm80s5mK+6P56il1jXic7nhQxsxSm3OwBHl4fFdLqi64nDQZvqE2at7cWAp/IVvrN6/BFL1mPhYrGMBfOi4PyjuSGf6wBBh7p/FZTghCNWGgMzlBbrNJoPJX2mW5mwZfyRffXo7OFi5pZcS4qZUrlViptrXtw+GQoyhDPS+ANjcGBNRiLCQDPZPMHuiZfdFpPSTcQwwKYdRNqpkjm7AFeeT0pJzALgo7g8YYGrMHS0iocy+YTm2vyRUvvpXCIpQ5pe666TJrcygnScUf/p0NDs/iAI/nqDHC8TmQT8x3NF91l76oDdQGwu61Z6E0ABv7uO1dbf/37Zlv+Zw/Pbh8f1s4Avur6657/+YYBvur6657/+YYBvur6657/+YYBvur6657/+aYBvuL6657/+VMA8FXWX/f8zzcN8BXXX/f8zzcNMFdbf93zP38KLPiK6697/uebtuArrr/u+Z9vGmCusP6653/+1FjwVdZf9/zPN7oHX339dc//fNMu+irrr3v+50+Bi+Zq6697/uebA/jz8Pudf9ht/fWv517J/XUzAP8C/BAeX9WCDrUpZ3/dEMBxgPcfbtTVvsYV5Yn32u03B3Ac4P3b8I+vxNBKeeL9dRMAlwO83959qGO78sT769oB7g3w/vGVYFzKE++v6wV4OMD7F7tckFkmT7y/rhHgpQO8b+4Y46XyxPvrugBeNcB7BRiX8sT767oAvmCA9woAHsoT76+rBJjLBnh3txOvkifeX1dswZcO8G6N7sXyxPvr6i340gHe3TnqVfLE++uKAb50gHcXLnrX8sR7gNdPRqwzwLu7Y/FO5Yn3AK9jXCMGeHdgxDuVJ75VAI8ljP7PAb3/RfjcZfePHBB+79dpfpH1CanN30d+mT1h9GqAxxJGM5LQeeQ1+Tb+EQJrElLb38VHQ94TRq900aMIo8cSOo+8Dp8QfsB8zpqE1NO3OI9Zrj1h9EV78PqE0WMJnUdeU6E+Jjyk/hbrEFIfeWbvId8H9oTRFwdZaxJGvziW0Hn0gqYB/wyZ0PwRlxJST+BOw9m77Amj14ii1yGM/txYQudN0qDzGe4EqfA/5GJCagsHcPaEPWH0esekSwmjRxM6b5JEcZ4ww50ilvAOFxBSx4yLW+A/YU8YvfY5+ALC6NGEzhtmyZoFZoarwBLeZxUhtY4rc3bKnjB6TKJjFUHzJoTOozF2YBpsjcyxDgzhQ1YRUse8+J4wenwmaylB82hC5w0zoRXUNXaRBmSMQUqiWSWkLsaVqc/ZE0aPTFUuJWgeTei8SfLZQeMxNaZSIzbII4aE1Nmr13P2hNHjc9E9guYNCZ032YlNwESMLcZiLQHkE4aE1BFg0yAR4z1h9AiAGRA0jyZ03tyIxWMajMPWBIsxYJCnlITU5ShiHYdZ94TR4wCmSxg9jtB5KyPGYzymAYexWEMwAPIsAdYdV6aObmNPGD0aYLoEzaMJnTc0Ygs+YDw0GAtqxBjkuP38bMRWCHn73xNGjz75P73WenCEJnhwyVe3AEe8TtKdJcYhBl97wuhNAObK66lvD/9J9NS75v17wuitAN5fe4D31x7g/bUHeH/tAd5fe4D3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/w/toDvAd4f/24ABzZ8o+KLsSLS+Pv/TqTb3P4hKlQrTGh+fbIBT0Axqznnb+L/V2mb3HkN5Mb/nEHeK7d4IcDld6lmDW/iH9E+AH1MdOw/Jlu2T1xNmY98sv4wHnD7D3uNHu54WUuOsBTbQuvBsPT/UfzNxGYzwkP8c+Yz3C+r/i6DcyRL/rZ+utRwWH5PmfvcvYEt9jLDS/bg0/B64DWKrQM8AL8FPwS9beQCe6EMKNZYJol37jBMy35otdaz0Bw2H/C2Smc7+WGB0HWDELBmOByA3r5QONo4V+DpzR/hFS4U8wMW1PXNB4TOqYz9urxRV++ntWCw/U59Ty9ebdWbrgfRS9AYKKN63ZokZVygr8GZ/gfIhZXIXPsAlNjPOLBby5c1eOLvmQ9lwkOy5x6QV1j5TYqpS05JtUgUHUp5toHGsVfn4NX4RnMCe+AxTpwmApTYxqMxwfCeJGjpXzRF61nbcHhUBPqWze9svwcHJ+S6NPscKrEjug78Dx8Lj3T8D4YxGIdxmJcwhi34fzZUr7olevZCw5vkOhoClq5zBPZAnygD/Tl9EzDh6kl3VhsHYcDEb+hCtJSvuiV69kLDm+WycrOTArHmB5/VYyP6jOVjwgGawk2zQOaTcc1L+aLXrKeveDwZqlKrw8U9Y1p66uK8dEzdYwBeUQAY7DbyYNezBfdWQ97weEtAKYQg2xJIkuveAT3dYeLGH+ShrWNwZgN0b2YL7qznr3g8JYAo5bQBziPjx7BPZ0d9RCQp4UZbnFdzBddor4XHN4KYMrB2qHFRIzzcLAHQZ5the5ovui94PCWAPefaYnxIdzRwdHCbuR4B+tbiy96Lzi8E4D7z7S0mEPd+eqO3cT53Z0Y8SV80XvB4Z0ADJi/f7X113f+7p7/+UYBvur6657/+YYBvur6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+VMA8FXWX/f8z58OgK+y/rrnf75RgLna+uue//lTA/CV1V/3/M837aKvvv6653++UQvmauuve/7nTwfAV1N/3fM/fzr24Cuuv+75nz8FFnxl9dc9//MOr/8/glixwRuUfM4AAAAASUVORK5CYII="
2044,d.tArea,i),(0,S.eP)("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=",d.tSearch,c);let p={...B},f=(0,s.s8)(e,"triangles",_,p,d);return(0,l.T)(f,d)}(e,this.edgesTarget.texture),this.blendRenderable=function(e,t,r){let n=t.getWidth(),i=t.getHeight(),c={...a.GE,tColor:o.IO.create(t),tWeights:o.IO.create(r),uTexSizeInv:o.IO.create(u.Sg.create(1/n,1/i)),uViewport:o.IO.create((0,u.T8)())},d={...R},p=(0,s.s8)(e,"triangles",F,d,c);return(0,l.T)(p,c)}(e,t,this.weightsTarget.texture),this._supported=!0}getByteCount(){return this.supported?this.edgesTarget.getByteCount()+this.weightsTarget.getByteCount():0}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:s}=e;r.viewport(a,n,i,s),r.scissor(a,n,i,s),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),o.IO.update(this.edgesRenderable.values.uViewport,D.l_.toVec4(this.edgesRenderable.values.uViewport.ref.value,e)),o.IO.update(this.weightsRenderable.values.uViewport,D.l_.toVec4(this.weightsRenderable.values.uViewport.ref.value,e)),o.IO.update(this.blendRenderable.values.uViewport,D.l_.toVec4(this.blendRenderable.values.uViewport.ref.value,e))}setSize(e,t){let r=this.edgesTarget.getWidth(),a=this.edgesTarget.getHeight();(e!==r||t!==a)&&(this.edgesTarget.setSize(e,t),this.weightsTarget.setSize(e,t),o.IO.update(this.edgesRenderable.values.uTexSizeInv,u.Sg.set(this.edgesRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),o.IO.update(this.weightsRenderable.values.uTexSizeInv,u.Sg.set(this.weightsRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),o.IO.update(this.blendRenderable.values.uTexSizeInv,u.Sg.set(this.blendRenderable.values.uTexSizeInv.ref.value,1/e,1/t)))}update(e,t){let r=!1;this.edgesRenderable.values.tColor.ref.value!==e&&(o.IO.update(this.edgesRenderable.values.tColor,e),r=!0),this.edgesRenderable.values.dEdgeThreshold.ref.value!==t.edgeThreshold&&(o.IO.update(this.edgesRenderable.values.dEdgeThreshold,t.edgeThreshold),r=!0),r&&this.edgesRenderable.update(),this.weightsRenderable.values.dMaxSearchSteps.ref.value!==t.maxSearchSteps&&(o.IO.update(this.weightsRenderable.values.dMaxSearchSteps,t.maxSearchSteps),this.weightsRenderable.update()),this.blendRenderable.values.tColor.ref.value!==e&&(o.IO.update(this.blendRenderable.values.tColor,e),this.blendRenderable.update())}render(e,t){h.kM&&this.webgl.timer.mark("SmaaPass.render"),this.edgesTarget.bind(),this.updateState(e),this.edgesRenderable.render(),this.weightsTarget.bind(),this.updateState(e),this.weightsRenderable.render(),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.blendRenderable.render(),h.kM&&this.webgl.timer.markEnd("SmaaPass.render")}}let P={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),dEdgeThreshold:(0,n.O0)("number")},k=(0,i.Lq)("smaa-edges",A,w),B={...a.iz,tEdges:(0,n.U2)("texture","rgba","ubyte","linear"),tArea:(0,n.U2)("texture","rgb","ubyte","linear"),tSearch:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),dMaxSearchSteps:(0,n.O0)("number")},_=(0,i.Lq)("smaa-weights",O,I),R={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),tWeights:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4")},F=(0,i.Lq)("smaa-blend",T,C),L=`
2045precision mediump float;
2046precision mediump samplerCube;
2047precision mediump sampler2D;
2048
2049#if defined(dVariant_skybox)
2050    uniform samplerCube tSkybox;
2051    uniform mat4 uViewDirectionProjectionInverse;
2052    uniform float uBlur;
2053    uniform float uOpacity;
2054    uniform float uSaturation;
2055    uniform float uLightness;
2056    uniform mat3 uRotation;
2057#elif defined(dVariant_image)
2058    uniform sampler2D tImage;
2059    uniform vec2 uImageScale;
2060    uniform vec2 uImageOffset;
2061    uniform float uBlur;
2062    uniform float uOpacity;
2063    uniform float uSaturation;
2064    uniform float uLightness;
2065#elif defined(dVariant_horizontalGradient) || defined(dVariant_radialGradient)
2066    uniform vec3 uGradientColorA;
2067    uniform vec3 uGradientColorB;
2068    uniform float uGradientRatio;
2069#endif
2070
2071uniform vec2 uTexSize;
2072uniform vec4 uViewport;
2073uniform bool uViewportAdjusted;
2074varying vec4 vPosition;
2075
2076// TODO: add as general pp option to remove banding?
2077// Iestyn's RGB dither from http://alex.vlachos.com/graphics/Alex_Vlachos_Advanced_VR_Rendering_GDC2015.pdf
2078vec3 ScreenSpaceDither(vec2 vScreenPos) {
2079    vec3 vDither = vec3(dot(vec2(171.0, 231.0), vScreenPos.xy));
2080    vDither.rgb = fract(vDither.rgb / vec3(103.0, 71.0, 97.0));
2081    return vDither.rgb / 255.0;
2082}
2083
2084vec3 saturateColor(vec3 c, float amount) {
2085    // https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
2086    const vec3 W = vec3(0.2125, 0.7154, 0.0721);
2087    vec3 intensity = vec3(dot(c, W));
2088    return mix(intensity, c, 1.0 + amount);
2089}
2090
2091vec3 lightenColor(vec3 c, float amount) {
2092    return c + amount;
2093}
2094
2095void main() {
2096    #if defined(dVariant_skybox)
2097        vec4 t = uViewDirectionProjectionInverse * vPosition;
2098        #ifdef enabledShaderTextureLod
2099            gl_FragColor = textureCubeLodEXT(tSkybox, uRotation * normalize(t.xyz / t.w), uBlur * 8.0);
2100        #else
2101            gl_FragColor = textureCube(tSkybox, uRotation * normalize(t.xyz / t.w));
2102        #endif
2103        gl_FragColor.a = uOpacity;
2104        gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness);
2105    #elif defined(dVariant_image)
2106        vec2 coords;
2107        if (uViewportAdjusted) {
2108            coords = ((gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uImageScale) + uImageOffset;
2109        } else {
2110            coords = (gl_FragCoord.xy / uImageScale) + uImageOffset;
2111        }
2112        #ifdef enabledShaderTextureLod
2113            gl_FragColor = texture2DLodEXT(tImage, vec2(coords.x, 1.0 - coords.y), uBlur * 8.0);
2114        #else
2115            gl_FragColor = texture2D(tImage, vec2(coords.x, 1.0 - coords.y));
2116        #endif
2117        gl_FragColor.a = uOpacity;
2118        gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness);
2119    #elif defined(dVariant_horizontalGradient)
2120        float d;
2121        if (uViewportAdjusted) {
2122            d = ((gl_FragCoord.y - uViewport.y) * (uTexSize.y / uViewport.w) / uTexSize.y) + 1.0 - (uGradientRatio * 2.0);
2123        } else {
2124            d = (gl_FragCoord.y / uTexSize.y) + 1.0 - (uGradientRatio * 2.0);
2125        }
2126        gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, clamp(d, 0.0, 1.0)), 1.0);
2127        gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy);
2128    #elif defined(dVariant_radialGradient)
2129        float d;
2130        if (uViewportAdjusted) {
2131            d = distance(vec2(0.5), (gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uTexSize) + uGradientRatio - 0.5;
2132        } else {
2133            d = distance(vec2(0.5), gl_FragCoord.xy / uTexSize) + uGradientRatio - 0.5;
2134        }
2135        gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, 1.0 - clamp(d, 0.0, 1.0)), 1.0);
2136        gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy);
2137    #endif
2138}
2139`,z=`
2140precision mediump float;
2141
2142attribute vec2 aPosition;
2143
2144varying vec4 vPosition;
2145
2146void main() {
2147    vPosition = vec4(aPosition, 1.0, 1.0);
2148    gl_Position = vec4(aPosition, 1.0, 1.0);
2149}
2150`;var N=r(38675),G=r(68303),U=r(71211),V=r(43975),j=r(81458),H=r(59725),q=r(22934),X=r(58463),W=r(60940),K=r(97667),Q=r(23833);function Z(){return Z.zero()}!function(e){function t(){let e=[.1,0,0];return e[0]=0,e}function r(e,t,r,a){return e[0]=t,e[0]=r,e[0]=a,e}function a(e,t,r){let a=t[0],n=t[4],i=t[8],o=t[1],s=t[5],l=t[9],u=t[2],c=t[6],d=t[10];switch(r){case"XYZ":e[1]=Math.asin((0,Q.uZ)(i,-1,1)),.9999999>Math.abs(i)?(e[0]=Math.atan2(-l,d),e[2]=Math.atan2(-n,a)):(e[0]=Math.atan2(c,s),e[2]=0);break;case"YXZ":e[0]=Math.asin(-(0,Q.uZ)(l,-1,1)),.9999999>Math.abs(l)?(e[1]=Math.atan2(i,d),e[2]=Math.atan2(o,s)):(e[1]=Math.atan2(-u,a),e[2]=0);break;case"ZXY":e[0]=Math.asin((0,Q.uZ)(c,-1,1)),.9999999>Math.abs(c)?(e[1]=Math.atan2(-u,d),e[2]=Math.atan2(-n,s)):(e[1]=0,e[2]=Math.atan2(o,a));break;case"ZYX":e[1]=Math.asin(-(0,Q.uZ)(u,-1,1)),.9999999>Math.abs(u)?(e[0]=Math.atan2(c,d),e[2]=Math.atan2(o,a)):(e[0]=0,e[2]=Math.atan2(-n,s));break;case"YZX":e[2]=Math.asin((0,Q.uZ)(o,-1,1)),.9999999>Math.abs(o)?(e[0]=Math.atan2(-l,s),e[1]=Math.atan2(-u,a)):(e[0]=0,e[1]=Math.atan2(i,d));break;case"XZY":e[2]=Math.asin(-(0,Q.uZ)(n,-1,1)),.9999999>Math.abs(n)?(e[0]=Math.atan2(c,s),e[1]=Math.atan2(i,a)):(e[0]=Math.atan2(-l,d),e[1]=0);break;default:(0,K.UT)(r)}return e}e.zero=t,e.create=function(e,r,a){let n=t();return n[0]=e,n[1]=r,n[2]=a,n},e.set=r,e.clone=function(e){let r=t();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r},e.copy=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},e.fromMat4=a;let n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];e.fromQuat=function(e,t,r){return N.y.fromQuat(n,t),a(e,n,r)},e.fromVec3=function(e,t){return r(e,t[0],t[1],t[2])},e.exactEquals=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},e.fromArray=function(e,t,r){return e[0]=t[r+0],e[1]=t[r+1],e[2]=t[r+2],e},e.toArray=function(e,t,r){return t[r+0]=e[0],t[r+1]=e[1],t[r+2]=e[2],t}}(Z||(Z={}));
2150let Y={opacity:c.e.Numeric(1,{min:0,max:1,step:.01}),saturation:c.e.Numeric(0,{min:-1,max:1,step:.01}),lightness:c.e.Numeric(0,{min:-1,max:1,step:.01})},$={faces:c.e.MappedStatic("urls",{urls:c.e.Group({nx:c.e.Text("",{label:"Negative X / Left"}),ny:c.e.Text("",{label:"Negative Y / Bottom"}),nz:c.e.Text("",{label:"Negative Z / Back"}),px:c.e.Text("",{label:"Positive X / Right"}),py:c.e.Text("",{label:"Positive Y / Top"}),pz:c.e.Text("",{label:"Positive Z / Front"})},{isExpanded:!0,label:"URLs"}),files:c.e.Group({nx:c.e.File({label:"Negative X / Left",accept:"image/*"}),ny:c.e.File({label:"Negative Y / Bottom",accept:"image/*"}),nz:c.e.File({label:"Negative Z / Back",accept:"image/*"}),px:c.e.File({label:"Positive X / Right",accept:"image/*"}),py:c.e.File({label:"Positive Y / Top",accept:"image/*"}),pz:c.e.File({label:"Positive Z / Front",accept:"image/*"})},{isExpanded:!0,label:"Files"})}),blur:c.e.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or when "EXT_shader_texture_lod" is available.'}),rotation:c.e.Group({x:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),y:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),z:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0})}),...Y},J={source:c.e.MappedStatic("url",{url:c.e.Text(""),file:c.e.File({accept:"image/*"})}),blur:c.e.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or with power-of-two images and when "EXT_shader_texture_lod" is available.'}),...Y,coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},ee={topColor:c.e.Color((0,f.Il)(14540253)),bottomColor:c.e.Color((0,f.Il)(15658734)),ratio:c.e.Numeric(.5,{min:0,max:1,step:.01}),coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},et={centerColor:c.e.Color((0,f.Il)(14540253)),edgeColor:c.e.Color((0,f.Il)(15658734)),ratio:c.e.Numeric(.5,{min:0,max:1,step:.01}),coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},er={variant:c.e.MappedStatic("off",{off:c.e.EmptyGroup(),skybox:c.e.Group($,{isExpanded:!0}),image:c.e.Group(J,{isExpanded:!0}),horizontalGradient:c.e.Group(ee,{isExpanded:!0}),radialGradient:c.e.Group(et,{isExpanded:!0})},{label:"Environment"})};class ea{constructor(e,t,r,n){this.webgl=e,this.assetManager=t,this.camera=new U.V,this.target=(0,V.A)(),this.position=(0,V.A)(),this.dir=(0,V.A)(),this.bgColor=(0,V.A)(),this.renderable=function(e,t,r){let n={drawCount:G.IO.create(6),instanceCount:G.IO.create(1),aPosition:G.IO.create(a.GK),tSkybox:G.IO.create((0,S.DU)()),tImage:G.IO.create((0,S.DU)()),uImageScale:G.IO.create((0,j.S)()),uImageOffset:G.IO.create((0,j.S)()),uTexSize:G.IO.create(j.S.create(t,r)),uViewport:G.IO.create((0,q.T)()),uViewportAdjusted:G.IO.create(!0),uViewDirectionProjectionInverse:G.IO.create((0,N.y)()),uGradientColorA:G.IO.create((0,V.A)()),uGradientColorB:G.IO.create((0,V.A)()),uGradientRatio:G.IO.create(.5),uBlur:G.IO.create(0),uOpacity:G.IO.create(1),uSaturation:G.IO.create(0),uLightness:G.IO.create(0),uRotation:G.IO.create(W.T.identity()),dVariant:G.IO.create("skybox")},i={...el},o=(0,s.s8)(e,"triangles",eu,i,n);return(0,l.T)(o,n)}(e,r,n)}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&G.IO.update(this.renderable.values.uTexSize,j.S.set(this.renderable.values.uTexSize.ref.value,e,t))}clearSkybox(){void 0!==this.skybox&&(this.skybox.texture.destroy(),this.skybox.assets.forEach(e=>this.assetManager.release(e)),this.skybox=void 0)}updateSkybox(e,t,r){var a,n,i;let o=null===(a=this.skybox)||void 0===a?void 0:a.props.faces,s=t.faces.params;if(!s.nx||!s.ny||!s.nz||!s.px||!s.py||!s.pz){this.clearSkybox(),null==r||r(!1);return}if(this.skybox&&o&&(n=t.faces,i=this.skybox.props.faces,ei(n)===ei(i)))null==r||r(!1);else{this.clearSkybox();let{texture:e,assets:a}=function(e,t,r,a){let n="urls"===r.name?{nx:H.x.getUrlAsset(t,r.params.nx),ny:H.x.getUrlAsset(t,r.params.ny),nz:H.x.getUrlAsset(t,r.params.nz),px:H.x.getUrlAsset(t,r.params.px),py:H.x.getUrlAsset(t,r.params.py),pz:H.x.getUrlAsset(t,r.params.pz)}:{nx:r.params.nx,ny:r.params.ny,nz:r.params.nz,px:r.params.px,py:r.params.py,pz:r.params.pz},i=function(e,t){let r=t=>e.resolve(t,"binary").run().then(e=>new Blob([e.data]));
2150return{nx:r(t.nx),ny:r(t.ny),nz:r(t.nz),px:r(t.px),py:r(t.py),pz:r(t.pz)}}(t,n),o=[n.nx,n.ny,n.nz,n.px,n.py,n.pz];return"undefined"==typeof HTMLImageElement?(console.error('Missing "HTMLImageElement" required for background skybox'),null==a||a(!0),{texture:(0,S.DU)(),assets:o}):{texture:e.resources.cubeTexture(i,!0,a),assets:o}}(this.webgl,this.assetManager,t.faces,e=>{this.skybox&&(this.skybox.loaded=!e),null==r||r(!0)});this.skybox={texture:e,props:{...t},assets:a,loaded:!1},G.IO.update(this.renderable.values.tSkybox,e),this.renderable.update()}if(!this.skybox)return;let l=e;"orthographic"===e.state.mode&&(this.camera.setState({...e.state,mode:"perspective"}),this.camera.update(),l=this.camera);let u=this.renderable.values.uViewDirectionProjectionInverse.ref.value;N.y.isZero(e.headRotation)?(V.A.sub(this.dir,l.state.position,l.state.target),V.A.setMagnitude(this.dir,this.dir,.1),V.A.copy(this.position,this.dir),N.y.lookAt(u,this.position,this.target,l.state.up)):N.y.invert(u,e.headRotation),N.y.mul(u,l.projection,u),N.y.invert(u,u),G.IO.update(this.renderable.values.uViewDirectionProjectionInverse,u);let c=this.renderable.values.uRotation.ref.value;W.T.fromEuler(c,Z.create((0,X.Id)(t.rotation.x),(0,X.Id)(t.rotation.y),(0,X.Id)(t.rotation.z)),"XYZ"),G.IO.update(this.renderable.values.uRotation,c),G.IO.updateIfChanged(this.renderable.values.uBlur,t.blur),G.IO.updateIfChanged(this.renderable.values.uOpacity,t.opacity),G.IO.updateIfChanged(this.renderable.values.uSaturation,t.saturation),G.IO.updateIfChanged(this.renderable.values.uLightness,t.lightness),G.IO.updateIfChanged(this.renderable.values.dVariant,"skybox"),this.renderable.update()}clearImage(){void 0!==this.image&&(this.image.texture.destroy(),this.assetManager.release(this.image.asset),this.image=void 0)}updateImage(e,t){var r,a;if(!e.source.params){this.clearImage(),null==t||t(!1);return}if(this.image&&this.image.props.source.params&&(r=e.source,a=this.image.props.source,es(r)===es(a)))null==t||t(!1);else{this.clearImage();let{texture:r,asset:a}=function(e,t,r,a){var n;let i="url"===r.name?null!==(n=t.tryFindFilename(r.params))&&void 0!==n?n:H.x.getUrlAsset(t,r.params):r.params;if("undefined"==typeof HTMLImageElement)return console.error('Missing "HTMLImageElement" required for background image'),null==a||a(!0),{texture:(0,S.DU)(),asset:i};let o=e.resources.texture("image-uint8","rgba","ubyte","linear"),s=new Image;return s.onload=()=>{o.load(s),(e.isWebGL2||(0,X.wt)(s.width)&&(0,X.wt)(s.height))&&o.mipmap(),null==a||a()},s.onerror=()=>{null==a||a(!0)},t.resolve(i,"binary").run().then(e=>{let t=new Blob([e.data]);s.src=URL.createObjectURL(t)}),{texture:o,asset:i}}(this.webgl,this.assetManager,e.source,e=>{this.image&&(this.image.loaded=!e),null==t||t(!0)});this.image={texture:r,props:{...e},asset:a,loaded:!1},G.IO.update(this.renderable.values.tImage,r),this.renderable.update()}this.image&&(G.IO.updateIfChanged(this.renderable.values.uBlur,e.blur),G.IO.updateIfChanged(this.renderable.values.uOpacity,e.opacity),G.IO.updateIfChanged(this.renderable.values.uSaturation,e.saturation),G.IO.updateIfChanged(this.renderable.values.uLightness,e.lightness),G.IO.updateIfChanged(this.renderable.values.uViewportAdjusted,"viewport"===e.coverage),G.IO.updateIfChanged(this.renderable.values.dVariant,"image"),this.renderable.update())}updateImageScaling(){var e,t;let r=this.renderable.values,[a,n]=r.uTexSize.ref.value,i=(null===(e=this.image)||void 0===e?void 0:e.texture.getWidth())||0,o=(null===(t=this.image)||void 0===t?void 0:t.texture.getHeight())||0,s=a/n;s<i/o?G.IO.update(r.uImageScale,j.S.set(r.uImageScale.ref.value,i*n/o,n)):G.IO.update(r.uImageScale,j.S.set(r.uImageScale.ref.value,a,o*a/i));let[l,u]=r.uImageScale.ref.value,c=l/u;c>s?G.IO.update(r.uImageOffset,j.S.set(r.uImageOffset.ref.value,(1-s/c)/2,0)):G.IO.update(r.uImageOffset,j.S.set(r.uImageOffset.ref.value,0,(1-c/s)/2))}updateGradient(e,t,r,a,n){G.IO.update(this.renderable.values.uGradientColorA,f.Il.toVec3Normalized(this.renderable.values.uGradientColorA.ref.value,e)),G.IO.update(this.renderable.values.uGradientColorB,f.Il.toVec3Normalized(this.renderable.values.uGradientColorB.ref.value,t)),G.IO.updateIfChanged(this.renderable.values.uGradientRatio,r),G.IO.updateIfChanged(this.renderable.values.uViewportAdjusted,n),G.IO.updateIfChanged(this.renderable.values.dVariant,a),this.renderable.update(
2150)}update(e,t,r){if("off"===t.variant.name){this.clearSkybox(),this.clearImage(),null==r||r(!1);return}"skybox"===t.variant.name?(this.clearImage(),this.updateSkybox(e,t.variant.params,r)):"image"===t.variant.name?(this.clearSkybox(),this.updateImage(t.variant.params,r)):"horizontalGradient"===t.variant.name?(this.clearSkybox(),this.clearImage(),this.updateGradient(t.variant.params.topColor,t.variant.params.bottomColor,t.variant.params.ratio,t.variant.name,"viewport"===t.variant.params.coverage),null==r||r(!1)):"radialGradient"===t.variant.name&&(this.clearSkybox(),this.clearImage(),this.updateGradient(t.variant.params.centerColor,t.variant.params.edgeColor,t.variant.params.ratio,t.variant.name,"viewport"===t.variant.params.coverage),null==r||r(!1));let{x:a,y:n,width:i,height:o}=e.viewport;G.IO.update(this.renderable.values.uViewport,q.T.set(this.renderable.values.uViewport.ref.value,a,n,i,o))}_isEnabled(e){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||"horizontalGradient"===e.variant.name||"radialGradient"===e.variant.name)}isEnabled(e){return e.enabled&&this._isEnabled(e.background)}isReady(){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||"horizontalGradient"===this.renderable.values.dVariant.ref.value||"radialGradient"===this.renderable.values.dVariant.ref.value)}clear(e,t,r){let{gl:a,state:n}=this.webgl;this._isEnabled(e)?(t?n.clearColor(0,0,0,0):(f.Il.toVec3Normalized(this.bgColor,r),n.clearColor(this.bgColor[0],this.bgColor[1],this.bgColor[2],1)),a.clear(a.COLOR_BUFFER_BIT),n.enable(a.BLEND),n.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)):(n.clearColor(0,0,0,1),a.clear(a.COLOR_BUFFER_BIT))}render(e){this._isEnabled(e)&&this.isReady()&&("image"===this.renderable.values.dVariant.ref.value&&this.updateImageScaling(),h.kM&&this.webgl.timer.mark("BackgroundPass.render"),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("BackgroundPass.render"))}dispose(){this.clearSkybox(),this.clearImage()}}let en="background-skybox";function ei(e){var t,r,a,n,i,o;return"urls"===e.name?`${en}_${e.params.nx}|${e.params.ny}|${e.params.nz}|${e.params.px}|${e.params.py}|${e.params.pz}`:`${en}_${null===(t=e.params.nx)||void 0===t?void 0:t.id}|${null===(r=e.params.ny)||void 0===r?void 0:r.id}|${null===(a=e.params.nz)||void 0===a?void 0:a.id}|${null===(n=e.params.px)||void 0===n?void 0:n.id}|${null===(i=e.params.py)||void 0===i?void 0:i.id}|${null===(o=e.params.pz)||void 0===o?void 0:o.id}`}let eo="background-image";function es(e){var t;return"url"===e.name?`${eo}_${e.params}`:`${eo}_${null===(t=e.params)||void 0===t?void 0:t.id}`}let el={drawCount:(0,n.R$)("number"),instanceCount:(0,n.R$)("number"),aPosition:(0,n.LQ)("float32",2,0),tSkybox:(0,n.U2)("texture","rgba","ubyte","linear"),tImage:(0,n.U2)("texture","rgba","ubyte","linear"),uImageScale:(0,n.wt)("v2"),uImageOffset:(0,n.wt)("v2"),uTexSize:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),uViewportAdjusted:(0,n.wt)("b"),uViewDirectionProjectionInverse:(0,n.wt)("m4"),uGradientColorA:(0,n.wt)("v3"),uGradientColorB:(0,n.wt)("v3"),uGradientRatio:(0,n.wt)("f"),uBlur:(0,n.wt)("f"),uOpacity:(0,n.wt)("f"),uSaturation:(0,n.wt)("f"),uLightness:(0,n.wt)("f"),uRotation:(0,n.wt)("m3"),dVariant:(0,n.O0)("string",["skybox","image","verticalGradient","horizontalGradient","radialGradient"])},eu=(0,i.Lq)("background",z,L,{shaderTextureLod:"optional"}),ec=`
2151precision mediump float;
2152precision mediump sampler2D;
2153
2154uniform sampler2D tColor;
2155uniform vec2 uTexSizeInv;
2156
2157uniform float uSharpness;
2158
2159// adapted from https://www.shadertoy.com/view/stXSWB
2160
2161/*
2162* FidelityFX Super Resolution scales up a low resolution
2163* image, while adding fine detail.
2164*
2165* MIT Open License
2166*
2167* https://gpuopen.com/fsr
2168*
2169* Left: FSR processed
2170* Right: Original texture, bilinear interpolation
2171*
2172* Mouse at top: Sharpness 0 stops (maximum)
2173* Mouse at bottom: Sharpness 2 stops (minimum)
2174*
2175* It works in two passes-
2176*   EASU upsamples the image with a clamped Lanczos kernel.
2177*   RCAS sharpens the image at the target resolution.
2178*
2179* I needed to make a few changes to improve readability and
2180* WebGL compatibility in an algorithm I don't fully understand.
2181* Expect bugs.
2182*
2183* Shader not currently running for WebGL1 targets (eg. mobile Safari)
2184*
2185* There is kind of no point to using FSR in Shadertoy, as it renders buffers
2186* at full target resolution. But this might be useful for WebGL based demos
2187* running smaller-than-target render buffers.
2188*
2189* For sharpening with a full resolution render buffer,
2190* FidelityFX CAS is a better option.
2191* https://www.shadertoy.com/view/ftsXzM
2192*
2193* For readability and compatibility, these optimisations have been removed:
2194*   * Fast approximate inverse and inversesqrt
2195*   * textureGather fetches (not WebGL compatible)
2196*   * Multiplying by reciprocal instead of division
2197*
2198* Apologies to AMD for the numerous slowdowns and errors I have introduced.
2199*
2200*/
2201
2202/***** RCAS *****/
2203#define FSR_RCAS_LIMIT (0.25-(1.0/16.0))
2204
2205// Input callback prototypes that need to be implemented by calling shader
2206vec4 FsrRcasLoadF(vec2 p);
2207//------------------------------------------------------------------------------------------------------------------------------
2208void FsrRcasCon(
2209    out float con,
2210    // The scale is {0.0 := maximum, to N>0, where N is the number of stops (halving) of the reduction of sharpness}.
2211    float sharpness
2212) {
2213    // Transform from stops to linear value.
2214    con = exp2(-sharpness);
2215}
2216
2217vec3 FsrRcasF(
2218    vec2 ip, // Integer pixel position in output.
2219    float con
2220) {
2221    // Constant generated by RcasSetup().
2222    // Algorithm uses minimal 3x3 pixel neighborhood.
2223    //    b
2224    //  d e f
2225    //    h
2226    vec2 sp = vec2(ip);
2227    vec3 b = FsrRcasLoadF(sp + vec2( 0,-1)).rgb;
2228    vec3 d = FsrRcasLoadF(sp + vec2(-1, 0)).rgb;
2229    vec3 e = FsrRcasLoadF(sp).rgb;
2230    vec3 f = FsrRcasLoadF(sp + vec2( 1, 0)).rgb;
2231    vec3 h = FsrRcasLoadF(sp + vec2( 0, 1)).rgb;
2232
2233    // Luma times 2.
2234    float bL = b.g + .5 * (b.b + b.r);
2235    float dL = d.g + .5 * (d.b + d.r);
2236    float eL = e.g + .5 * (e.b + e.r);
2237    float fL = f.g + .5 * (f.b + f.r);
2238    float hL = h.g + .5 * (h.b + h.r);
2239
2240    // Noise detection.
2241    #ifdef dDenoise
2242        float nz = .25 * (bL + dL + fL + hL) - eL;
2243        nz=clamp(
2244            abs(nz)
2245            /(
2246                max(max(bL,dL),max(eL,max(fL,hL)))
2247                -min(min(bL,dL),min(eL,min(fL,hL)))
2248            ),
2249            0., 1.
2250        );
2251        nz=1.-.5*nz;
2252    #endif
2253
2254    // Min and max of ring.
2255    vec3 mn4 = min(b, min(f, h));
2256    vec3 mx4 = max(b, max(f, h));
2257
2258    // Immediate constants for peak range.
2259    vec2 peakC = vec2(1., -4.);
2260
2261    // Limiters, these need to be high precision RCPs.
2262    vec3 hitMin = mn4 / (4. * mx4);
2263    vec3 hitMax = (peakC.x - mx4) / (4.* mn4 + peakC.y);
2264    vec3 lobeRGB = max(-hitMin, hitMax);
2265    float lobe = max(
2266        -FSR_RCAS_LIMIT,
2267        min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.)
2268    )*con;
2269
2270    // Apply noise removal.
2271    #ifdef dDenoise
2272        lobe *= nz;
2273    #endif
2274
2275    // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes.
2276    return (lobe * (b + d + h + f) + e) / (4. * lobe + 1.);
2277}
2278
2279
2280vec4 FsrRcasLoadF(vec2 p) {
2281    return texture2D(tColor, p * uTexSizeInv);
2282}
2283
2284void main() {
2285    // Set up constants
2286    float con;
2287    FsrRcasCon(con, uSharpness);
2288
2289    // Perform RCAS pass
2290    vec3 col = FsrRcasF(gl_FragCoord.xy, con);
2291
2292    gl_FragColor = vec4(col, FsrRcasLoadF(gl_FragCoord.xy).a);
2293}
2294`,ed={sharpness:c.e.Numeric(.5,{min:0,max:1,step:.05}),denoise:c.e.Boolean(!0)};class ep{constructor(e,t){this.webgl=e,this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uSharpness:o.IO.create(.5),dDenoise:o.IO.create(!0)},c={...ef},d=(0,s.s8)(e,"triangles",em,c,i);return(0,l.T)(d,i)}(e,t)}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){o.IO.update(this.renderable.values.uTexSizeInv,u.Sg.set(this.renderable.values.uTexSizeInv.ref.value,1/e,1/t))}update(e,t){let{values:r}=this.renderable,{sharpness:a,denoise:n}=t,i=!1;r.tColor.ref.value!==e&&(o.IO.update(this.renderable.values.tColor,e),i=!0),o.IO.updateIfChanged(r.uSharpness,2-2*Math.pow(a,.25)),r.dDenoise.ref.value!==n&&(i=!0),o.IO.updateIfChanged(r.dDenoise,n),i&&this.renderable.update()}render(e,t){h.kM&&this.webgl.timer.mark("CasPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("CasPass.render")}}let ef={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uSharpness:(0,n.wt)("f"),dDenoise:(0,n.O0)("boolean")},em=(0,i.Lq)("cas",d.C,ec);var eh=r(12175),eg=r(57133),ev=r(59978),eb=r(12489);let ey=`
2295precision highp float;
2296precision highp int;
2297precision highp sampler2D;
2298
2299#include common
2300
2301uniform sampler2D tDepth;
2302uniform vec2 uTexSize;
2303uniform vec4 uBounds;
2304
2305uniform float uNear;
2306uniform float uFar;
2307
2308#if dLightCount != 0
2309    uniform vec3 uLightDirection[dLightCount];
2310    uniform vec3 uLightColor[dLightCount];
2311#endif
2312
2313uniform vec3 uAmbientColor;
2314
2315uniform mat4 uProjection;
2316uniform mat4 uInvProjection;
2317
2318uniform float uMaxDistance;
2319uniform float uTolerance;
2320
2321// Map full [0,1] coords -> bounds [0,1] coords
2322vec2 fullCoordsToBoundsCoords(vec2 fullCoords) {
2323    return (fullCoords - uBounds.xy) / (uBounds.zw - uBounds.xy);
2324}
2325
2326// Map bounds [0,1] coords -> full [0,1] coords
2327vec2 boundsCoordsToFullCoords(vec2 boundsCoords) {
2328    return uBounds.xy + (uBounds.zw - uBounds.xy) * boundsCoords;
2329}
2330
2331bool isBackground(const in float depth) {
2332    return depth == 1.0;
2333}
2334
2335bool outsideBounds(const in vec2 p) {
2336    return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
2337}
2338
2339float getViewZ(const in float depth) {
2340    #if dOrthographic == 1
2341        return orthographicDepthToViewZ(depth, uNear, uFar);
2342    #else
2343        return perspectiveDepthToViewZ(depth, uNear, uFar);
2344    #endif
2345}
2346
2347float getDepth(const in vec2 coords) {
2348    #ifdef depthTextureSupport
2349        return texture2D(tDepth, coords).r;
2350    #else
2351        return unpackRGBAToDepth(texture2D(tDepth, coords));
2352    #endif
2353}
2354
2355float screenFade(const in vec2 coords) {
2356    vec2 c = (coords - uBounds.xy) / (uBounds.zw - uBounds.xy);
2357    vec2 fade = max(12.0 * abs(c - 0.5) - 5.0, vec2(0.0));
2358    return saturate(1.0 - dot(fade, fade));
2359}
2360
2361// based on https://panoskarabelas.com/posts/screen_space_shadows/
2362vec3 screenSpaceShadow(const in vec3 position, const in vec3 lightDirection, const in vec3 lightColor, const in float stepLength) {
2363    // Ray position and direction (in view-space)
2364    vec3 rayPos = position;
2365    vec3 rayDir = -lightDirection;
2366
2367    // Compute ray step
2368    vec3 rayStep = rayDir * stepLength;
2369
2370    // Ray march towards the light
2371    vec4 rayCoords = vec4(0.0);
2372    for (int i = 0; i < dSteps; ++i) {
2373        // Step the ray
2374        rayPos += rayStep;
2375
2376        rayCoords = uProjection * vec4(rayPos, 1.0);
2377        rayCoords.xyz = (rayCoords.xyz / rayCoords.w) * 0.5 + 0.5;
2378        rayCoords.xy = boundsCoordsToFullCoords(rayCoords.xy);
2379
2380        if (outsideBounds(rayCoords.xy)) {
2381            return lightColor;
2382        }
2383
2384        // Compute the difference between the ray's and the camera's depth
2385        float depth = getDepth(rayCoords.xy);
2386        float viewZ = getViewZ(depth);
2387        float zDelta = rayPos.z - viewZ;
2388
2389        if (zDelta < uTolerance) {
2390            // Fade out as we approach the edges of the screen
2391            return mix(vec3(0.0), lightColor, 1.0 - screenFade(rayCoords.xy));
2392        }
2393    }
2394
2395    return lightColor;
2396}
2397
2398void main(void) {
2399    vec2 invTexSize = 1.0 / uTexSize;
2400    vec2 selfCoords = gl_FragCoord.xy * invTexSize;
2401    float selfDepth = getDepth(selfCoords);
2402
2403    if (isBackground(selfDepth)) {
2404        gl_FragColor = vec4(0.0);
2405        return;
2406    }
2407
2408    vec2 selfBoundsCoords = fullCoordsToBoundsCoords(selfCoords);
2409    if (any(lessThan(selfBoundsCoords, vec2(0.0))) || any(greaterThan(selfBoundsCoords, vec2(1.0)))) {
2410        gl_FragColor = vec4(0.0);
2411        return;
2412    }
2413
2414    vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfBoundsCoords, selfDepth), uInvProjection);
2415    float stepLength = uMaxDistance / float(dSteps);
2416
2417    float l = length(uAmbientColor);
2418    float a = l;
2419    #if dLightCount != 0
2420        vec3 s;
2421        #pragma unroll_loop_start
2422        for (int i = 0; i < dLightCount; ++i) {
2423            s = screenSpaceShadow(selfViewPos, uLightDirection[i], uLightColor[i], stepLength);
2424            l += length(s);
2425            a += length(uLightColor[i]);
2426        }
2427        #pragma unroll_loop_end
2428    #endif
2429
2430    gl_FragColor = vec4(l / a);
2431}
2432`,ex={steps:c.e.Numeric(1,{min:1,max:64,step:1}),maxDistance:c.e.Numeric(3,{min:0,max:256,step:1}),tolerance:c.e.Numeric(1,{min:0,max:10,step:.1})};class eS{static isEnabled(e){return e.enabled&&"off"!==e.shadow.name}constructor(e,t,r,n){this.webgl=e,this.invProjection=u.yb.identity(),this.invHeadRotation=u.yb.identity(),this.target=e.createRenderTarget(t,r,!1),this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),c={...a.GE,tDepth:o.IO.create(t),uTexSize:o.IO.create(u.Sg.create(r,n)),uProjection:o.IO.create(u.yb.identity()),uInvProjection:o.IO.create(u.yb.identity()),uBounds:o.IO.create((0,u.T8)()),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),dSteps:o.IO.create(1),uMaxDistance:o.IO.create(3),uTolerance:o.IO.create(1),uLightDirection:o.IO.create([]),uLightColor:o.IO.create([]),dLightCount:o.IO.create(0),uAmbientColor:o.IO.create((0,u.AO)())},p={...eT},f=(0,i.Lq)("shadows",d.C,ey),m=(0,s.s8)(e,"triangles",f,p,c);return(0,l.T)(m,c)}
2432(e,n)}getByteCount(){return this.target.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a){let n=!1,i="orthographic"===e.state.mode?1:0,[s,l]=this.renderable.values.uTexSize.ref.value,c=e.viewport;o.IO.update(this.renderable.values.uProjection,e.projection),o.IO.update(this.renderable.values.uInvProjection,u.yb.invert(this.invProjection,e.projection)),u.T8.set(this.renderable.values.uBounds.ref.value,c.x/s,c.y/l,(c.x+c.width)/s,(c.y+c.height)/l),o.IO.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFar,e.far),this.renderable.values.dOrthographic.ref.value!==i&&(o.IO.update(this.renderable.values.dOrthographic,i),n=!0),o.IO.updateIfChanged(this.renderable.values.uMaxDistance,a.maxDistance*e.scale),o.IO.updateIfChanged(this.renderable.values.uTolerance,a.tolerance*e.scale),this.renderable.values.dSteps.ref.value!==a.steps&&(o.IO.update(this.renderable.values.dSteps,a.steps),n=!0),u.yb.isZero(e.headRotation)?o.IO.update(this.renderable.values.uLightDirection,t.direction):o.IO.update(this.renderable.values.uLightDirection,(0,eb.bR)(t,u.yb.invert(this.invHeadRotation,e.headRotation))),o.IO.update(this.renderable.values.uLightColor,t.color),this.renderable.values.dLightCount.ref.value!==t.count&&(o.IO.update(this.renderable.values.dLightCount,t.count),n=!0),o.IO.update(this.renderable.values.uAmbientColor,r),n&&this.renderable.update()}render(){h.kM&&this.webgl.timer.mark("ShadowPass.render"),this.target.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("ShadowPass.render")}}let eT={...a.iz,tDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),uProjection:(0,n.wt)("m4"),uInvProjection:(0,n.wt)("m4"),uBounds:(0,n.wt)("v4"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),dSteps:(0,n.O0)("number"),uMaxDistance:(0,n.wt)("f"),uTolerance:(0,n.wt)("f"),uLightDirection:(0,n.wt)("v3[]"),uLightColor:(0,n.wt)("v3[]"),dLightCount:(0,n.O0)("number"),uAmbientColor:(0,n.wt)("v3")},eC=`
2433precision highp float;
2434precision highp int;
2435precision highp sampler2D;
2436
2437#include common
2438
2439
2440uniform sampler2D tDepth;
2441uniform sampler2D tDepthHalf;
2442uniform sampler2D tDepthQuarter;
2443
2444#if defined(dIncludeTransparent)
2445    uniform sampler2D tDepthTransparent;
2446    uniform sampler2D tDepthHalfTransparent;
2447    uniform sampler2D tDepthQuarterTransparent;
2448#endif
2449
2450uniform int uTransparencyFlag;
2451
2452uniform vec2 uTexSize;
2453uniform vec4 uBounds;
2454
2455uniform vec3 uSamples[dNSamples];
2456
2457uniform mat4 uProjection;
2458uniform mat4 uInvProjection;
2459
2460#ifdef dMultiScale
2461    uniform float uLevelRadius[dLevels];
2462    uniform float uLevelBias[dLevels];
2463    uniform float uNearThreshold;
2464    uniform float uFarThreshold;
2465#else
2466    uniform float uRadius;
2467#endif
2468uniform float uBias;
2469
2470float smootherstep(float edge0, float edge1, float x) {
2471    x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
2472    return x * x * x * (x * (x * 6.0 - 15.0) + 10.0);
2473}
2474
2475float noise(const in vec2 coords) {
2476    float a = 12.9898;
2477    float b = 78.233;
2478    float c = 43758.5453;
2479    float dt = dot(coords, vec2(a,b));
2480    float sn = mod(dt, PI);
2481    return abs(fract(sin(sn) * c)); // is abs necessary?
2482}
2483
2484vec2 getNoiseVec2(const in vec2 coords) {
2485    return vec2(noise(coords), noise(coords + vec2(PI, 2.71828)));
2486}
2487
2488bool isBackground(const in float depth) {
2489    return depth == 1.0;
2490}
2491
2492bool isOutsideBounds(const in vec2 coords) {
2493    return coords.x < uBounds.x || coords.x > uBounds.z || coords.y < uBounds.y || coords.y > uBounds.w;
2494}
2495
2496float getDepth(const in vec2 coords, const in int transparentFlag) {
2497    if (transparentFlag == 1){
2498        #if defined(dIncludeTransparent)
2499            return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
2500        #else
2501            return 1.0;
2502        #endif
2503    } else {
2504        #ifdef depthTextureSupport
2505            return texture2D(tDepth, coords).r;
2506        #else
2507            return unpackRGBAToDepth(texture2D(tDepth, coords));
2508        #endif
2509    }
2510}
2511
2512#if defined(dIncludeTransparent)
2513    vec2 getDepthTransparentWithAlpha(const in vec2 coords){
2514        return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
2515    }
2516#endif
2517
2518#define dQuarterThreshold 0.1
2519#define dHalfThreshold 0.05
2520
2521float getMappedDepth(const in vec2 coords, const in vec2 selfCoords) {
2522    float d = distance(coords, selfCoords);
2523    #ifdef depthTextureSupport
2524        if (d > dQuarterThreshold) {
2525            return texture2D(tDepthQuarter, coords).r;
2526        } else if (d > dHalfThreshold) {
2527            return texture2D(tDepthHalf, coords).r;
2528        } else {
2529            return texture2D(tDepth, coords).r;
2530        }
2531    #else
2532        if (d > dQuarterThreshold) {
2533            return unpackRGBAToDepth(texture2D(tDepthQuarter, coords));
2534        } else if (d > dHalfThreshold) {
2535            return unpackRGBAToDepth(texture2D(tDepthHalf, coords));
2536        } else {
2537            return unpackRGBAToDepth(texture2D(tDepth, coords));
2538        }
2539    #endif
2540}
2541
2542#if defined(dIncludeTransparent)
2543    vec2 getMappedDepthTransparentWithAlpha(const in vec2 coords, const in vec2 selfCoords) {
2544        float d = distance(coords, selfCoords);
2545        if (d > dQuarterThreshold) {
2546            return unpackRGBAToDepthWithAlpha(texture2D(tDepthQuarterTransparent, coords));
2547        } else if (d > dHalfThreshold) {
2548            return unpackRGBAToDepthWithAlpha(texture2D(tDepthHalfTransparent, coords));
2549        } else {
2550            return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
2551        }
2552    }
2553#endif
2554
2555// adapted from https://gist.github.com/bgolus/a07ed65602c009d5e2f753826e8078a0
2556vec3 viewNormalAtPixelPositionAccurate(const in vec2 vpos, const in int transparentFlag) {
2557    // current pixel's depth
2558    float c = getDepth(vpos, transparentFlag);
2559
2560    // get current pixel's view space position
2561    vec3 viewSpacePos_c = screenSpaceToViewSpace(vec3(vpos, c), uInvProjection);
2562
2563    // get view space position at 1 pixel offsets in each major direction
2564    vec3 viewSpacePos_l = screenSpaceToViewSpace(vec3(vpos + vec2(-1.0, 0.0) / uTexSize, getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection);
2565    vec3 viewSpacePos_r = screenSpaceToViewSpace(vec3(vpos + vec2( 1.0, 0.0) / uTexSize, getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection);
2566    vec3 viewSpacePos_d = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0,-1.0) / uTexSize, getDepth(vpos + vec2( 0.0,-1.0) / uTexSize, transparentFlag)), uInvProjection);
2567    vec3 viewSpacePos_u = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0, 1.0) / uTexSize, getDepth(vpos + vec2( 0.0, 1.0) / uTexSize, transparentFlag)), uInvProjection);
2568
2569    // get the difference between the current and each offset position
2570    vec3 l = viewSpacePos_c - viewSpacePos_l;
2571    vec3 r = viewSpacePos_r - viewSpacePos_c;
2572    vec3 d = viewSpacePos_c - viewSpacePos_d;
2573    vec3 u = viewSpacePos_u - viewSpacePos_c;
2574
2575    // get depth values at 1 & 2 pixels offsets from current along the horizontal axis
2576    vec4 H = vec4(
2577        getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag),
2578        getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag),
2579        getDepth(vpos + vec2(-2.0, 0.0) / uTexSize, transparentFlag),
2580        getDepth(vpos + vec2( 2.0, 0.0) / uTexSize, transparentFlag)
2581    );
2582
2583    // get depth values at 1 & 2 pixels offsets from current along the vertical axis
2584    vec4 V = vec4(
2585        getDepth(vpos + vec2(0.0,-1.0) / uTexSize, transparentFlag),
2586        getDepth(vpos + vec2(0.0, 1.0) / uTexSize, transparentFlag),
2587        getDepth(vpos + vec2(0.0,-2.0) / uTexSize, transparentFlag),
2588        getDepth(vpos + vec2(0.0, 2.0) / uTexSize, transparentFlag)
2589    );
2590
2591    // current pixel's depth difference from slope of offset depth samples
2592    // differs from original article because we're using non-linear depth values
2593    // see article's comments
2594    vec2 he = abs((2.0 * H.xy - H.zw) - c);
2595    vec2 ve = abs((2.0 * V.xy - V.zw) - c);
2596
2597    // pick horizontal and vertical diff with the smallest depth difference from slopes
2598    vec3 hDeriv = he.x < he.y ? l : r;
2599    vec3 vDeriv = ve.x < ve.y ? d : u;
2600
2601    // get view space normal from the cross product of the best derivatives
2602    vec3 viewNormal = normalize(cross(hDeriv, vDeriv));
2603
2604    return viewNormal;
2605}
2606
2607float getPixelSize(const in vec2 coords, const in float depth) {
2608    vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
2609    vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
2610    return distance(viewPos0, viewPos1);
2611}
2612
2613// StarCraft II Ambient Occlusion by [Filion and McNaughton 2008]
2614void main(void) {
2615    vec2 invTexSize = 1.0 / uTexSize;
2616    vec2 selfCoords = gl_FragCoord.xy * invTexSize;
2617    float selfDepth = getDepth(selfCoords, uTransparencyFlag);
2618    vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth);
2619
2620    if (isBackground(selfDepth)) {
2621        gl_FragColor = vec4(packUnitIntervalToRG(1.0), selfPackedDepth);
2622        return;
2623    }
2624
2625    vec3 selfViewNormal = viewNormalAtPixelPositionAccurate(selfCoords, uTransparencyFlag);
2626    vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfCoords, selfDepth), uInvProjection);
2627
2628    vec3 randomVec = normalize(vec3(getNoiseVec2(selfCoords) * 2.0 - 1.0, 0.0));
2629    vec3 tangent = normalize(randomVec - selfViewNormal * dot(randomVec, selfViewNormal));
2630    vec3 bitangent = cross(selfViewNormal, tangent);
2631    mat3 TBN = mat3(tangent, bitangent, selfViewNormal);
2632
2633    float occlusion = 0.0;
2634    #ifdef dMultiScale
2635        float pixelSize = getPixelSize(selfCoords, selfDepth);
2636
2637        for(int l = 0; l < dLevels; l++) {
2638            // TODO: smooth transition
2639            if (pixelSize * uNearThreshold > uLevelRadius[l]) continue;
2640            if (pixelSize * uFarThreshold < uLevelRadius[l]) continue;
2641
2642            float nSamples = float(dNSamples);
2643            float levelOcclusion = 0.0;
2644            for(int i = 0; i < dNSamples; i++) {
2645                // get sample position:
2646                vec3 sampleViewPos = TBN * uSamples[i];
2647                sampleViewPos = selfViewPos + sampleViewPos * uLevelRadius[l];
2648
2649                // project sample position:
2650                vec4 offset = vec4(sampleViewPos, 1.0);
2651                offset = uProjection * offset;
2652                offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
2653                if (isOutsideBounds(offset.xy)) {
2654                    nSamples -= 1.0;
2655                    continue;
2656                }
2657
2658                // get sample depth:
2659                float sampleOcc = 0.0;
2660                #ifdef dIllumination
2661                    if (uTransparencyFlag == 1) {
2662                #endif
2663                        float sampleDepth = getMappedDepth(offset.xy, selfCoords);
2664                        if (!isBackground(sampleDepth)) {
2665                            float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
2666                            sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZ)) * uLevelBias[l];
2667                        }
2668                #ifdef dIllumination
2669                    }
2670                #endif
2671                #if defined(dIncludeTransparent)
2672                    vec2 sampleDepthWithAlpha = getMappedDepthTransparentWithAlpha(offset.xy, selfCoords);
2673                    if (!isBackground(sampleDepthWithAlpha.x))  {
2674                        float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z;
2675                        sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZWithAlpha)) * uLevelBias[l] * sampleDepthWithAlpha.y);
2676                    }
2677                #endif
2678
2679                levelOcclusion += sampleOcc;
2680            }
2681            levelOcclusion /= nSamples;
2682            occlusion = max(occlusion, levelOcclusion);
2683        }
2684    #else
2685        float nSamples = float(dNSamples);
2686        for(int i = 0; i < dNSamples; i++) {
2687            vec3 sampleViewPos = TBN * uSamples[i];
2688            sampleViewPos = selfViewPos + sampleViewPos * uRadius;
2689
2690            vec4 offset = vec4(sampleViewPos, 1.0);
2691            offset = uProjection * offset;
2692            offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
2693            if (isOutsideBounds(offset.xy)) {
2694                nSamples -= 1.0;
2695                continue;
2696            }
2697
2698            float sampleOcc = 0.0;
2699            #ifdef dIllumination
2700                if (uTransparencyFlag == 1) {
2701            #endif
2702                    // NOTE: using getMappedDepth here causes issues on some mobile devices
2703                    float sampleDepth = getDepth(offset.xy, 0);
2704                    if (!isBackground(sampleDepth)) {
2705                        float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
2706                        sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ));
2707                    }
2708            #ifdef dIllumination
2709                }
2710            #endif
2711            #if defined(dIncludeTransparent)
2712                vec2 sampleDepthWithAlpha = getDepthTransparentWithAlpha(offset.xy);
2713                if (!isBackground(sampleDepthWithAlpha.x)) {
2714                    float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z;
2715                    sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZWithAlpha)) * sampleDepthWithAlpha.y);
2716                }
2717            #endif
2718
2719            occlusion += sampleOcc;
2720        }
2721
2722        occlusion /= nSamples;
2723    #endif
2724    occlusion = 1.0 - (uBias * occlusion);
2725
2726    vec2 packedOcclusion = packUnitIntervalToRG(clamp(occlusion, 0.01, 1.0));
2727
2728    gl_FragColor = vec4(packedOcclusion, selfPackedDepth);
2729}
2730`,eO=`
2731precision highp float;
2732precision highp int;
2733precision highp sampler2D;
2734
2735uniform sampler2D tSsaoDepth;
2736uniform vec2 uTexSize;
2737uniform vec4 uBounds;
2738
2739uniform float uKernel[dOcclusionKernelSize];
2740uniform float uBlurDepthBias;
2741
2742uniform float uBlurDirectionX;
2743uniform float uBlurDirectionY;
2744
2745uniform mat4 uInvProjection;
2746uniform float uNear;
2747uniform float uFar;
2748
2749#include common
2750
2751float getViewZ(const in float depth) {
2752    #if dOrthographic == 1
2753        return orthographicDepthToViewZ(depth, uNear, uFar);
2754    #else
2755        return perspectiveDepthToViewZ(depth, uNear, uFar);
2756    #endif
2757}
2758
2759bool isBackground(const in float depth) {
2760    return depth == 1.0;
2761}
2762
2763bool isNearClip(const in float depth) {
2764    return depth == 0.0;
2765}
2766
2767bool outsideBounds(const in vec2 p) {
2768    return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
2769}
2770
2771float getPixelSize(const in vec2 coords, const in float depth) {
2772    vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
2773    vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
2774    return distance(viewPos0, viewPos1);
2775}
2776
2777void main(void) {
2778    vec2 coords = gl_FragCoord.xy / uTexSize;
2779
2780    vec2 packedDepth = texture2D(tSsaoDepth, coords).zw;
2781
2782    if (outsideBounds(coords)) {
2783        gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
2784        return;
2785    }
2786
2787    float selfDepth = unpackRGToUnitInterval(packedDepth);
2788    // (if background and if second pass) or if near clip
2789    if ((isBackground(selfDepth) && uBlurDirectionY != 0.0) || isNearClip(selfDepth)) {
2790        gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
2791        return;
2792    }
2793
2794    float selfViewZ = getViewZ(selfDepth);
2795    float pixelSize = getPixelSize(coords, selfDepth);
2796
2797    vec2 offset = vec2(uBlurDirectionX, uBlurDirectionY) / uTexSize;
2798
2799    float sum = 0.0;
2800    float kernelSum = 0.0;
2801    const int halfKernelSize = dOcclusionKernelSize / 2;
2802    // only if kernelSize is odd
2803    for (int i = -halfKernelSize; i <= halfKernelSize; i++) {
2804        if (abs(float(i)) > 1.0 && abs(float(i)) * pixelSize > 0.8) continue;
2805
2806        vec2 sampleCoords = coords + float(i) * offset;
2807        if (outsideBounds(sampleCoords)) {
2808            continue;
2809        }
2810
2811        vec4 sampleSsaoDepth = texture2D(tSsaoDepth, sampleCoords);
2812
2813        float sampleDepth = unpackRGToUnitInterval(sampleSsaoDepth.zw);
2814        if (isBackground(sampleDepth) || isNearClip(sampleDepth)) {
2815            continue;
2816        }
2817
2818        float sampleViewZ = getViewZ(sampleDepth);
2819        if (abs(selfViewZ - sampleViewZ) >= uBlurDepthBias) {
2820            continue;
2821        }
2822
2823        float kernel = uKernel[int(abs(float(i)))]; // abs is not defined for int in webgl1
2824        float sampleValue = unpackRGToUnitInterval(sampleSsaoDepth.xy);
2825
2826        sum += kernel * sampleValue;
2827        kernelSum += kernel;
2828    }
2829    gl_FragColor = vec4(packUnitIntervalToRG(sum / kernelSum), packedDepth);
2830}
2831`;var eI=r(1571);let eA={samples:c.e.Numeric(32,{min:1,max:256,step:1}),multiScale:c.e.MappedStatic("off",{on:c.e.Group({levels:c.e.ObjectList({radius:c.e.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x"}),bias:c.e.Numeric(1,{min:0,max:3,step:.1})},e=>`${e.radius}, ${e.bias}`,{defaultValue:[{radius:2,bias:1},{radius:5,bias:1},{radius:8,bias:1},{radius:11,bias:1}]}),nearThreshold:c.e.Numeric(10,{min:0,max:50,step:1}),farThreshold:c.e.Numeric(1500,{min:0,max:1e4,step:100})}),off:c.e.Group({})},{cycle:!0}),radius:c.e.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x",hideIf:e=>(null==e?void 0:e.multiScale.name)==="on"}),bias:c.e.Numeric(.8,{min:0,max:3,step:.1}),blurKernelSize:c.e.Numeric(15,{min:1,max:25,step:2}
2831),blurDepthBias:c.e.Numeric(.5,{min:0,max:1,step:.01}),resolutionScale:c.e.Numeric(1,{min:.1,max:1,step:.05},{description:"Adjust resolution of occlusion calculation"}),color:c.e.Color((0,f.Il)(0)),transparentThreshold:c.e.Numeric(.4,{min:0,max:1,step:.05})};class ew{static isEnabled(e){return e.enabled&&"off"!==e.occlusion.name}static isTransparentEnabled(e,t){return e.opacityAverage<1&&e.transparencyMin<t.transparentThreshold}calcSsaoScale(e){return Math.min(1,1/this.webgl.pixelRatio)*e}getDepthTexture(){return 1===this.ssaoScale?this.depthTextureOpaque:this.downsampledDepthTargetOpaque.texture}getTransparentDepthTexture(){return 1===this.ssaoScale?this.depthTextureTransparent:this.downsampledDepthTargetTransparent.texture}constructor(e,t,r,n,c,p){this.webgl=e,this.invProjection=u.yb.identity(),this.levelsCameraScale=-1;let{textureFloatLinear:f}=e.extensions;this.depthTextureOpaque=c,this.depthTextureTransparent=p,this.nSamples=1,this.blurKernelSize=1,this.ssaoScale=this.calcSsaoScale(1),this.texSize=[t,r],this.levels=[],this.framebuffer=e.resources.framebuffer(),this.blurFirstPassFramebuffer=e.resources.framebuffer(),this.blurSecondPassFramebuffer=e.resources.framebuffer();let m=Math.floor(t*this.ssaoScale),h=Math.floor(r*this.ssaoScale),g=Math.max(1,Math.floor(.5*m)),b=Math.max(1,Math.floor(.5*h)),y=Math.max(1,Math.floor(.25*m)),x=Math.max(1,Math.floor(.25*h)),S=f?"linear":"nearest";this.downsampledDepthTargetOpaque=n?e.createRenderTarget(m,h,!1,"uint8","linear","rgba"):e.createRenderTarget(m,h,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.downsampleDepthRenderableOpaque=(0,a.Oz)(e,c);let T=this.getDepthTexture();this.depthHalfTargetOpaque=n?e.createRenderTarget(g,b,!1,"uint8","linear","rgba"):e.createRenderTarget(g,b,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.depthHalfRenderableOpaque=(0,a.Oz)(e,T),this.depthQuarterTargetOpaque=n?e.createRenderTarget(y,x,!1,"uint8","linear","rgba"):e.createRenderTarget(y,x,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.depthQuarterRenderableOpaque=(0,a.Oz)(e,this.depthHalfTargetOpaque.texture),this.downsampledDepthTargetTransparent=e.createRenderTarget(m,h,!1,"uint8","linear","rgba"),this.downsampleDepthRenderableTransparent=(0,a.Oz)(e,p);let C=this.getTransparentDepthTexture();this.depthHalfTargetTransparent=e.createRenderTarget(g,b,!1,"uint8","linear","rgba"),this.depthHalfRenderableTransparent=(0,a.Oz)(e,C),this.depthQuarterTargetTransparent=e.createRenderTarget(y,x,!1,"uint8","linear","rgba"),this.depthQuarterRenderableTransparent=(0,a.Oz)(e,this.depthHalfTargetTransparent.texture),this.ssaoDepthTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTexture.define(m,h),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.ssaoDepthTransparentTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTransparentTexture.define(m,h),this.depthBlurProxyTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.depthBlurProxyTexture.define(m,h),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0"),this.renderable=function(e,t,r,n,c,p,f){let m={...a.GE,tDepth:o.IO.create(t),tDepthHalf:o.IO.create(r),tDepthQuarter:o.IO.create(n),dIllumination:o.IO.create(!1),dIncludeTransparent:o.IO.create(!0),uTransparencyFlag:o.IO.create(0),tDepthTransparent:o.IO.create(c),tDepthHalfTransparent:o.IO.create(p),tDepthQuarterTransparent:o.IO.create(f),uSamples:o.IO.create(eR(32)),dNSamples:o.IO.create(32),uProjection:o.IO.create(u.yb.identity()),uInvProjection:o.IO.create(u.yb.identity()),uBounds:o.IO.create((0,u.T8)()),uTexSize:o.IO.create(u.Sg.create(e.gl.drawingBufferWidth,e.gl.drawingBufferHeight)),uRadius:o.IO.create(32),uBias:o.IO.create(.8),dMultiScale:o.IO.create(!1),dLevels:o.IO.create(3),uLevelRadius:o.IO.create([4,32,256]),uLevelBias:o.IO.create([.8,.8,.8]),uNearThreshold:o.IO.create(10),uFarThreshold:o.IO.create(1500)},h={...eD},g=(0,i.Lq)("ssao",d.C,eC),b=(0,s.s8)(e,"triangles",g,h,m);return(0,l.T)(b,m)}(e,T,this.depthHalfTargetOpaque.texture,this.depthQuarterTargetOpaque.texture,C,this.depthHalfTargetTransparent.texture,this.depthQuarterTargetTransparent.texture),this.blurFirstPassRenderable=eM(e,this.ssaoDepthTransparentTexture,"horizontal"),this.blurSecondPassRenderable=eM(e,this.depthBlurProxyTexture,"vertical")}getByteCount(){return this.downsampledDepthTargetOpaque.getByteCount()+this.depthHalfTargetOpaque.getByteCount()+this.depthQuarterTargetOpaque.getByteCount()+this.downsampledDepthTargetTransparent.getByteCount()+this.depthHalfTargetTransparent.getByteCount()+this.depthQuarterTargetTransparent.getByteCount()+this.ssaoDepthTexture.getByteCount()+this.ssaoDepthTransparentTexture.getByteCount()+this.depthBlurProxyTexture.getByteCount()}setSize(e,t){let[r,a]=this.texSize,n=this.calcSsaoScale(1);if(e!==r||t!==a||this.ssaoScale!==n){this.texSize.splice(0,2,e,t);let r=Math.floor(e*this.ssaoScale),a=Math.floor(t*this.ssaoScale);this.ssaoDepthTexture.define(r,a),this.ssaoDepthTransparentTexture.define(r,a),this.depthBlurProxyTexture.define(r,a);let n=Math.max(1,Math.floor(.5*r)),i=Math.max(1,Math.floor(.5*a)),s=Math.max(1,Math.floor(.25*r)),l=Math.max(1,Math.floor(.25*a));this.downsampledDepthTargetOpaque.setSize(r,a),this.depthHalfTargetOpaque.setSize(n,i),this.depthQuarterTargetOpaque.setSize(s,l),o.IO.update(this.downsampleDepthRenderableOpaque.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthHalfRenderableOpaque.values.uTexSize,u.Sg.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,n,i)),o.IO.update(this.depthQuarterRenderableOpaque.values.uTexSize,u.Sg.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,s,l)),this.downsampledDepthTargetTransparent.setSize(r,a),this.depthHalfTargetTransparent.setSize(n,i),this.depthQuarterTargetTransparent.setSize(s,l),o.IO.update(this.downsampleDepthRenderableTransparent.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthHalfRenderableTransparent.values.uTexSize,u.Sg.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,n,i)),o.IO.update(this.depthQuarterRenderableTransparent.values.uTexSize,u.Sg.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,s,l)),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,r,a)),o.IO.update(this.blurFirstPassRenderable.values.uTexSize,u.Sg.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,r,a)),o.IO.update(this.blurSecondPassRenderable.values.uTexSize,u.Sg.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,r,a));let c=this.getDepthTexture(),d=this.getTransparentDepthTexture();o.IO.update(this.depthHalfRenderableOpaque.values.tColor,c),o.IO.update(this.depthHalfRenderableTransparent.values.tColor,d),o.IO.update(this.renderable.values.tDepth,c),o.IO.update(this.renderable.values.tDepthTransparent,d),this.depthHalfRenderableOpaque.update(
2831),this.depthHalfRenderableTransparent.update(),this.renderable.update()}}reset(){this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0")}update(e,t,r,a=!1){let n=!1,i=!1,s=!1,l="orthographic"===e.state.mode?1:0,c=u.yb.invert(this.invProjection,e.projection),[d,p]=this.texSize,f=e.viewport;o.IO.update(this.renderable.values.uProjection,e.projection),o.IO.update(this.renderable.values.uInvProjection,c);let m=this.renderable.values.uBounds,h=this.ssaoScale;u.T8.set(m.ref.value,Math.floor(f.x*h)/(d*h),Math.floor(f.y*h)/(p*h),Math.ceil((f.x+f.width)*h)/(d*h),Math.ceil((f.y+f.height)*h)/(p*h)),o.IO.update(m,m.ref.value),o.IO.update(this.blurFirstPassRenderable.values.uBounds,m.ref.value),o.IO.update(this.blurSecondPassRenderable.values.uBounds,m.ref.value),o.IO.updateIfChanged(this.blurFirstPassRenderable.values.uNear,e.near),o.IO.updateIfChanged(this.blurSecondPassRenderable.values.uNear,e.near),o.IO.updateIfChanged(this.blurFirstPassRenderable.values.uFar,e.far),o.IO.updateIfChanged(this.blurSecondPassRenderable.values.uFar,e.far),o.IO.update(this.blurFirstPassRenderable.values.uInvProjection,c),o.IO.update(this.blurSecondPassRenderable.values.uInvProjection,c),o.IO.update(this.blurFirstPassRenderable.values.uBlurDepthBias,r.blurDepthBias*e.scale),o.IO.update(this.blurSecondPassRenderable.values.uBlurDepthBias,r.blurDepthBias*e.scale),this.blurFirstPassRenderable.values.dOrthographic.ref.value!==l&&(i=!0,o.IO.update(this.blurFirstPassRenderable.values.dOrthographic,l),o.IO.update(this.blurSecondPassRenderable.values.dOrthographic,l));let g=ew.isTransparentEnabled(t,r);this.renderable.values.dIncludeTransparent.ref.value!==g&&(n=!0,o.IO.update(this.renderable.values.dIncludeTransparent,g)),this.renderable.values.dIllumination.ref.value!==a&&(n=!0,o.IO.update(this.renderable.values.dIllumination,a)),this.nSamples!==r.samples&&(n=!0,this.nSamples=r.samples,o.IO.update(this.renderable.values.uSamples,eR(this.nSamples)),o.IO.updateIfChanged(this.renderable.values.dNSamples,this.nSamples));let b="on"===r.multiScale.name;if(this.renderable.values.dMultiScale.ref.value!==b&&(n=!0,o.IO.update(this.renderable.values.dMultiScale,b)),"on"===r.multiScale.name){let t=r.multiScale.params;if(this.levelsCameraScale!==e.scale||!(0,o.vZ)(this.levels,t.levels)){n=!0,this.levelsCameraScale=e.scale,this.levels=t.levels;let r=function(e,t,r){let a=e.length,{radius:n,bias:i}={radius:Array(3*a).fill(0),bias:Array(3*a).fill(0)};e=e.slice().sort((e,t)=>e.radius-t.radius);for(let r=0;r<a;++r){let a=e[r];n[r]=Math.pow(2,a.radius)*t,i[r]=a.bias}return{count:a,radius:n,bias:i}}(t.levels,e.scale);o.IO.updateIfChanged(this.renderable.values.dLevels,r.count),o.IO.update(this.renderable.values.uLevelRadius,r.radius),o.IO.update(this.renderable.values.uLevelBias,r.bias)}o.IO.updateIfChanged(this.renderable.values.uNearThreshold,t.nearThreshold),o.IO.updateIfChanged(this.renderable.values.uFarThreshold,t.farThreshold)}else o.IO.updateIfChanged(this.renderable.values.uRadius,Math.pow(2,r.radiu
2831s)*e.scale);if(o.IO.updateIfChanged(this.renderable.values.uBias,r.bias),this.blurKernelSize!==r.blurKernelSize){i=!0,this.blurKernelSize=r.blurKernelSize;let e=eP(this.blurKernelSize);o.IO.update(this.blurFirstPassRenderable.values.uKernel,e),o.IO.update(this.blurSecondPassRenderable.values.uKernel,e),o.IO.update(this.blurFirstPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize),o.IO.update(this.blurSecondPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize)}let y=this.calcSsaoScale(r.resolutionScale);if(this.ssaoScale!==y){n=!0,s=!0,this.ssaoScale=y;let e=Math.floor(d*this.ssaoScale),t=Math.floor(p*this.ssaoScale);this.ssaoDepthTexture.define(e,t),this.ssaoDepthTransparentTexture.define(e,t),this.depthBlurProxyTexture.define(e,t);let r=Math.floor(.5*e),a=Math.floor(.5*t),i=Math.floor(.25*e),l=Math.floor(.25*t);this.downsampledDepthTargetOpaque.setSize(e,t),this.depthHalfTargetOpaque.setSize(r,a),this.depthQuarterTargetOpaque.setSize(i,l);let c=this.getDepthTexture();o.IO.update(this.depthHalfRenderableOpaque.values.tColor,c),o.IO.update(this.renderable.values.tDepth,c),o.IO.update(this.renderable.values.tDepthHalf,this.depthHalfTargetOpaque.texture),o.IO.update(this.renderable.values.tDepthQuarter,this.depthQuarterTargetOpaque.texture),o.IO.update(this.downsampleDepthRenderableOpaque.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,e,t)),o.IO.update(this.depthHalfRenderableOpaque.values.uTexSize,u.Sg.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthQuarterRenderableOpaque.values.uTexSize,u.Sg.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,i,l)),this.downsampledDepthTargetTransparent.setSize(e,t),this.depthHalfTargetTransparent.setSize(r,a),this.depthQuarterTargetTransparent.setSize(i,l);let f=this.getTransparentDepthTexture();o.IO.update(this.depthHalfRenderableTransparent.values.tColor,f),o.IO.update(this.renderable.values.tDepthTransparent,f),o.IO.update(this.renderable.values.tDepthHalfTransparent,this.depthHalfTargetTransparent.texture),o.IO.update(this.renderable.values.tDepthQuarterTransparent,this.depthQuarterTargetTransparent.texture),o.IO.update(this.downsampleDepthRenderableTransparent.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,e,t)),o.IO.update(this.depthHalfRenderableTransparent.values.uTexSize,u.Sg.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthQuarterRenderableTransparent.values.uTexSize,u.Sg.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,i,l)),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)),o.IO.update(this.blurFirstPassRenderable.values.uTexSize,u.Sg.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,e,t)),o.IO.update(this.blurSecondPassRenderable.values.uTexSize,u.Sg.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,e,t))}n&&this.renderable.update(),i&&(this.blurFirstPassRenderable.update(),this.blurSecondPassRenderable.update()),s&&(this.depthHalfRenderableOpaque.update(),this.depthHalfRenderableTransparent.update())}render(e){h.kM&&this.webgl.timer.mark("SSAO.render");let{state:t}=this.webgl,{x:r,y:a,width:n,height:i}=e.viewport,s=this.renderable.values.dIncludeTransparent.ref.value,l=this.renderable.values.dMultiScale.ref.value,u=Math.floor(r*this.ssaoScale),c=Math.floor(a*this.ssaoScale),d=Math.ceil(n*this.ssaoScale),p=Math.ceil(i*this.ssaoScale);t.viewport(u,c,d,p),t.scissor(u,c,d,p),this.ssaoScale<1&&(h.kM&&this.webgl.timer.mark("SSAO.downsample"),this.downsampledDepthTargetOpaque.bind(),this.downsampleDepthRenderableOpaque.render(),s&&(this.downsampledDepthTargetTransparent.bind(),this.downsampleDepthRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.downsample")),h.kM&&this.webgl.timer.mark("SSAO.half"),l&&(this.depthHalfTargetOpaque.bind(),this.depthHalfRenderableOpaque.render()),l&&s&&(this.depthHalfTargetTransparent.bind(),this.depthHalfRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.half"),h.kM&&this.webgl.timer.mark("SSAO.quarter"),l&&(this.depthQuarterTargetOpaque.bind(),this.depthQuarterRenderableOpaque.render()),l&&s&&(this.depthQuarterTargetTransparent.bind(),this.depthQuarterRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.quarter"),h.kM&&this.webgl.timer.mark("SSAO.opaque"),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),o.IO.update(this.renderable.values.uTransparencyFlag,0),this.framebuffer.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.opaque"),h.kM&&this.webgl.timer.mark("SSAO.blurOpaque"),o.IO.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTexture),this.blurFirstPassRenderable.update(
2831),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.blurOpaque"),s&&(h.kM&&this.webgl.timer.mark("SSAO.transparent "),this.ssaoDepthTransparentTexture.attachFramebuffer(this.framebuffer,"color0"),o.IO.update(this.renderable.values.uTransparencyFlag,1),this.framebuffer.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.transparent "),h.kM&&this.webgl.timer.mark("SSAO.blurTransparent "),o.IO.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTransparentTexture),this.blurFirstPassRenderable.update(),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTransparentTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.blurTransparent ")),h.kM&&this.webgl.timer.markEnd("SSAO.render")}}let eD={...a.iz,tDepth:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthHalf:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthQuarter:(0,n.U2)("texture","rgba","ubyte","linear"),dIllumination:(0,n.O0)("boolean"),uTransparencyFlag:(0,n.wt)("i"),dIncludeTransparent:(0,n.O0)("boolean"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthHalfTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthQuarterTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),uSamples:(0,n.wt)("v3[]"),dNSamples:(0,n.O0)("number"),uProjection:(0,n.wt)("m4"),uInvProjection:(0,n.wt)("m4"),uBounds:(0,n.wt)("v4"),uTexSize:(0,n.wt)("v2"),uRadius:(0,n.wt)("f"),uBias:(0,n.wt)("f"),dMultiScale:(0,n.O0)("boolean"),dLevels:(0,n.O0)("number"),uLevelRadius:(0,n.wt)("f[]"),uLevelBias:(0,n.wt)("f[]"),uNearThreshold:(0,n.wt)("f"),uFarThreshold:(0,n.wt)("f")},eE={...a.iz,tSsaoDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),uKernel:(0,n.wt)("f[]"),dOcclusionKernelSize:(0,n.O0)("number"),uBlurDepthBias:(0,n.wt)("f"),uBlurDirectionX:(0,n.wt)("f"),uBlurDirectionY:(0,n.wt)("f"),uInvProjection:(0,n.wt)("m4"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uBounds:(0,n.wt)("v4"),dOrthographic:(0,n.O0)("number")};function eM(e,t,r){let n={...a.GE,tSsaoDepth:o.IO.create(t),uTexSize:o.IO.create(u.Sg.create(t.getWidth(),t.getHeight())),uKernel:o.IO.create(eP(15)),dOcclusionKernelSize:o.IO.create(15),uBlurDepthBias:o.IO.create(.5),uBlurDirectionX:o.IO.create("horizontal"===r?1:0),uBlurDirectionY:o.IO.create("vertical"===r?1:0),uInvProjection:o.IO.create(u.yb.identity()),uNear:o.IO.create(0),uFar:o.IO.create(1e4),uBounds:o.IO.create((0,u.T8)()),dOrthographic:o.IO.create(0)},c={...eE},p=(0,i.Lq)("ssao_blur",d.C,eO),f=(0,s.s8)(e,"triangles",p,c,n);return(0,l.T)(f,n)}function eP(e){let t=e/3,r=Math.floor((e+1)/2),a=[];for(let e=0;e<r;e++)a.push(1/(Math.sqrt(2*Math.PI)*t)*Math.exp(-e*e/(2*t*t)));return a}let ek=new eI._Q;function eB(){let e=(0,u.AO)();for(;;){let t=2*ek.float()-1,r=2*ek.float()-1;if(t*t+r*r<1){let a=2*Math.sqrt(1-t*t-r*r)*(.5>ek.float()?-1:1);u.AO.set(e,t,r,a),u.AO.normalize(e,e),u.AO.scale(e,e,ek.float());break}}return e[2]<0&&(e[2]=-e[2]),e}let e_=[];function eR(e){let t=(e_.length<e&&(e_=function(e,t){if(t.length>=e)return t;0===t.length&&t.push(eB());let r=Math.max(10,Math.min(30,Math.floor(e/10)));for(let a=t.length;a<e;a++){let e;let a=-1;for(let n=0;n<r;n++){let r=eB(),n=1/0;for(let e of t)n=Math.min(n,u.AO.distance(r,e));n>a&&(a=n,e=r)}t.push(e)}return t}(e,e_)),e_),r=[];for(let a=0;a<e;a++){let n=(a*a+2*a+1)/(e*e);n=.1+.9*n,r.push(t[a][0]*n),r.push(t[a][1]*n),r.push(t[a][2]*n)}return r}let eF={...a.iz,tSsaoDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),tColor:(0,n.U2)("texture","rgba","ubyte","nearest"),tTransparentColor:(0,n.U2)("texture","rgba","ubyte","nearest"),dBlendTransparency:(0,n.O0)("boolean"),tDepthOpaque:(0,n.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),tShadows:(0,n.U2)("texture","rgba","ubyte","nearest"),tOutlines:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uFogNear:(0,n.wt)("f"),uFogFar:(0,n.wt)("f"),uFogColor:(0,n.wt)("v3"),uOutlineColor:(0,n.wt)("v3"),uOcclusionColor:(0,n.wt)("v3"),uTransparentBackgroun
2831d:(0,n.wt)("b"),dOcclusionEnable:(0,n.O0)("boolean"),dOcclusionSingleDepth:(0,n.O0)("boolean"),dOcclusionIncludeOpacity:(0,n.O0)("boolean"),dOcclusionIncludeTransparency:(0,n.O0)("boolean"),uOcclusionOffset:(0,n.wt)("v2"),dShadowEnable:(0,n.O0)("boolean"),dOutlineEnable:(0,n.O0)("boolean"),dOutlineScale:(0,n.O0)("number"),dTransparentOutline:(0,n.O0)("boolean")},eL={enabled:c.e.Boolean(!0),occlusion:c.e.MappedStatic("on",{on:c.e.Group(eA),off:c.e.Group({})},{cycle:!0,description:"Darken occluded crevices with the ambient occlusion effect",hideIf:e=>!1===e.enabled}),shadow:c.e.MappedStatic("off",{on:c.e.Group(ex),off:c.e.Group({})},{cycle:!0,description:"Simplistic shadows",hideIf:e=>!1===e.enabled}),outline:c.e.MappedStatic("off",{on:c.e.Group(ev.TY),off:c.e.Group({})},{cycle:!0,description:"Draw outline around 3D objects",hideIf:e=>!1===e.enabled}),dof:c.e.MappedStatic("off",{on:c.e.Group(eh.$),off:c.e.Group({})},{cycle:!0,description:"DOF",hideIf:e=>!1===e.enabled}),antialiasing:c.e.MappedStatic("smaa",{fxaa:c.e.Group(g),smaa:c.e.Group(E),off:c.e.Group({})},{options:[["fxaa","FXAA"],["smaa","SMAA"],["off","Off"]],description:"Smooth pixel edges",hideIf:e=>!1===e.enabled}),sharpening:c.e.MappedStatic("off",{on:c.e.Group(ed),off:c.e.Group({})},{cycle:!0,description:"Contrast Adaptive Sharpening",hideIf:e=>!1===e.enabled}),background:c.e.Group(er,{isFlat:!0,hideIf:e=>!1===e.enabled}),bloom:c.e.MappedStatic("on",{on:c.e.Group(eg.z),off:c.e.Group({})},{cycle:!0,description:"Bloom",hideIf:e=>!1===e.enabled})};class ez{static isEnabled(e){return e.enabled&&(ew.isEnabled(e)||eS.isEnabled(e)||ev.f1.isEnabled(e)||"off"!==e.background.variant.name)}static isTransparentDepthRequired(e,t){return t.enabled&&(eh.z.isEnabled(t)||ev.f1.isEnabled(t)&&ez.isTransparentOutlineEnabled(t)||ew.isEnabled(t)&&ez.isTransparentSsaoEnabled(e,t))&&e.opacityAverage<1}static isTransparentOutlineEnabled(e){var t;return e.enabled&&ev.f1.isEnabled(e)&&(null===(t=e.outline.params.includeTransparent)||void 0===t||t)}static isTransparentSsaoEnabled(e,t){return t.enabled&&ew.isEnabled(t)&&ew.isTransparentEnabled(e,t.occlusion.params)}static isSsaoEnabled(e){return e.enabled&&ew.isEnabled(e)}constructor(e,t,r){this.webgl=e,this.drawPass=r,this.occlusionOffset=[0,0],this.transparentBackground=!1;let{colorTarget:n,transparentColorTarget:c,depthTextureOpaque:f,depthTextureTransparent:m,packedDepth:h}=r,g=n.getWidth(),b=n.getHeight();this.target=e.createRenderTarget(g,b,!1,"uint8","linear"),this.ssao=new ew(e,g,b,h,f,m),this.shadow=new eS(e,g,b,f),this.outline=new ev.f1(e,g,b,m,f),this.renderable=function(e,t,r,n,c,f,m,h,g,b){let y={...a.GE,tSsaoDepth:o.IO.create(h),tSsaoDepthTransparent:o.IO.create(g),tColor:o.IO.create(t),tTransparentColor:o.IO.create(r),dBlendTransparency:o.IO.create(!0),tDepthOpaque:o.IO.create(n),tDepthTransparent:o.IO.create(c),tShadows:o.IO.create(f),tOutlines:o.IO.create(m),uTexSize:o.IO.create(u.Sg.create(t.getWidth(),t.getHeight())),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),uFogNear:o.IO.create(1e4),uFogFar:o.IO.create(1e4),uFogColor:o.IO.create(u.AO.create(1,1,1)),uOutlineColor:o.IO.create(u.AO.create(0,0,0)),uOcclusionColor:o.IO.create(u.AO.create(0,0,0)),uTransparentBackground:o.IO.create(!1),dOcclusionEnable:o.IO.create(!0),dOcclusionSingleDepth:o.IO.create(!1),dOcclusionIncludeOpacity:o.IO.create(!0),dOcclusionIncludeTransparency:o.IO.create(!1),uOcclusionOffset:o.IO.create(u.Sg.create(0,0)),dShadowEnable:o.IO.create(!1),dOutlineEnable:o.IO.create(!1),dOutlineScale:o.IO.create(1),dTransparentOutline:o.IO.create(b)},x={...eF},S=(0,i.Lq)("postprocessing",d.C,p),T=(0,s.s8)(e,"triangles",S,x,y);return(0,l.T)(T,y)}(e,n.texture,c.texture,f,m,this.shadow.target.texture,this.outline.target.texture,this.ssao.ssaoDepthTexture,this.ssao.ssaoDepthTransparentTexture,!0),this.background=new ea(e,t,g,b)}getByteCount(){return this.target.getByteCount()+this.ssao.getByteCount()+this.shadow.getByteCount()+this.outline.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t))),this.ssao.setSize(e,t),this.shadow.setSize(e,t),this.outline.setSize(e,t),this.background.setSize(e,t)}reset(){this.ssao.reset()}updateState(e,t,r,a,n,i,s){let l=!1,u="orthographic"===e.state.mode?1:0,c=ev.f1.isEnabled(n),d=eS.isEnabled(n),p=ew.isEnabled(n);if(p){let r=n.occlusion.params;this.ssao.update(e,t,r);let a=ew.isTransparentEnabled(t,r);this.renderable.values.dOcclusionIncludeTransparency.ref.value!==a&&(l=!0,o.IO.update(this.renderable.values.dOcclusionIncludeTransparency,a)),o.IO.update(this.renderable.values.uOcclusionColor,f.Il.toVec3Normalized(this.renderable.values.uOcclusionColor.ref.value,r.color))}if(d&&this.shadow.update(e,i,s,n.shadow.params),c){let t=n.outline.params,{transparentOutline:r,outlineScale:a}=this.outline.update(e,t,this.drawPass.depthTextureTransparent,this.drawPass.depthTextureOpaque);o.IO.update(this.renderable.values.uOutlineColor,f.Il.toVec3Normalized(this.renderable.values.uOutlineColor.ref.value,t.color)),this.renderable.values.dOutlineScale.ref.value!==a&&(l=!0,o.IO.update(this.renderable.values.dOutlineScale,a)),this.renderable.values.dTransparentOutline.ref.value!==r&&(l=!0,o.IO.update(this.renderable.values.dTransparentOutline,r))}o.IO.updateIfChanged(this.renderable.values.uFar,e.far),o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFogFar,e.fogFar),o.IO.updateIfChanged(this.renderable.values.uFogNear,e.fogNear),o.IO.update(this.renderable.values.uFogColor,f.Il.toVec3Normalized(this.renderable.values.uFogColor.ref.value,a)),o.IO.updateIfChanged(this.renderable.values.uTransparentBackgroun
2831d,r),this.renderable.values.dOrthographic.ref.value!==u&&(l=!0,o.IO.update(this.renderable.values.dOrthographic,u)),this.renderable.values.dOutlineEnable.ref.value!==c&&(l=!0,o.IO.update(this.renderable.values.dOutlineEnable,c)),this.renderable.values.dShadowEnable.ref.value!==d&&(l=!0,o.IO.update(this.renderable.values.dShadowEnable,d)),this.renderable.values.dOcclusionEnable.ref.value!==p&&(l=!0,o.IO.update(this.renderable.values.dOcclusionEnable,p));let m=t.opacityAverage<1;this.renderable.values.dBlendTransparency.ref.value!==m&&(l=!0,o.IO.update(this.renderable.values.dBlendTransparency,m)),l&&this.renderable.update();let{gl:h,state:g}=this.webgl;g.enable(h.SCISSOR_TEST),g.disable(h.BLEND),g.disable(h.DEPTH_TEST),g.depthMask(!1)}setOcclusionOffset(e,t){this.occlusionOffset[0]=e,this.occlusionOffset[1]=t,o.IO.update(this.renderable.values.uOcclusionOffset,u.Sg.set(this.renderable.values.uOcclusionOffset.ref.value,e,t))}setTransparentBackground(e){this.transparentBackground=e}render(e,t,r,a,n,i,o,s){h.kM&&this.webgl.timer.mark("PostprocessingPass.render"),this.updateState(e,t,a,n,i,o,s);let{state:l}=this.webgl,{x:u,y:c,width:d,height:p}=e.viewport;"on"===i.occlusion.name&&0===this.occlusionOffset[0]&&0===this.occlusionOffset[1]&&this.ssao.render(e),l.viewport(u,c,d,p),l.scissor(u,c,d,p),"on"===i.outline.name&&this.outline.render(),"on"===i.shadow.name&&this.shadow.render(),r?this.webgl.bindDrawingBuffer():this.target.bind(),this.background.update(e,i.background),this.background.clear(i.background,this.transparentBackground,n),this.background.render(i.background),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("PostprocessingPass.render")}}class eN{static isEnabled(e){return e.enabled&&("off"!==e.antialiasing.name||"off"!==e.sharpening.name)}constructor(e,t,r){this.target=e.createRenderTarget(t,r,!1),this.internalTarget=e.createRenderTarget(t,r,!1),this.fxaa=new b(e,this.target.texture),this.smaa=new M(e,this.target.texture),this.cas=new ep(e,this.target.texture)}getByteCount(){return this.target.getByteCount()+this.internalTarget.getByteCount()+this.smaa.getByteCount()}setSize(e,t){let r=this.target.texture.getWidth(),a=this.target.texture.getHeight();(e!==r||t!==a)&&(this.target.setSize(e,t),this.internalTarget.setSize(e,t),this.fxaa.setSize(e,t),this.smaa.supported&&this.smaa.setSize(e,t),this.cas.setSize(e,t))}_renderFxaa(e,t,r,a){"fxaa"===a.antialiasing.name&&(this.fxaa.update(t,a.antialiasing.params),this.fxaa.render(e.viewport,r))}_renderSmaa(e,t,r,a){"smaa"===a.antialiasing.name&&(this.smaa.update(t,a.antialiasing.params),this.smaa.render(e.viewport,r))}_renderAntialiasing(e,t,r,a){"fxaa"===a.antialiasing.name?this._renderFxaa(e,t,r,a):"smaa"===a.antialiasing.name&&this._renderSmaa(e,t,r,a)}_renderCas(e,t,r,a){"on"===a.sharpening.name&&("off"!==a.antialiasing.name&&(t=this.internalTarget.texture),this.cas.update(t,a.sharpening.params),this.cas.render(e.viewport,r))}render(e,t,r,a){if("off"===a.antialiasing.name&&"off"===a.sharpening.name)return;if("smaa"===a.antialiasing.name&&!this.smaa.supported){console.error('SMAA not supported, missing "HTMLImageElement"');return}let n=!0===r?void 0:!1===r?this.target:r;"off"===a.sharpening.name?this._renderAntialiasing(e,t,n,a):("off"===a.antialiasing.name||this._renderAntialiasing(e,t,this.internalTarget,a),this._renderCas(e,t,n,a))}}},73118:function(e,t,r){function a(e,t,r=1){let a=window.innerWidth,n=window.innerHeight;t!==document.body&&(a=t.offsetWidth,n=t.offsetHeight),function(e,t,r,a=1){e.width=Math.round(window.devicePixelRatio*a*t),e.height=Math.round(window.devicePixelRatio*a*r),Object.assign(e.style,{width:`${t}px`,height:`${r}px`})}(e,a,n,r)}async function n(e,t,r){return new Promise((a,n)=>{let i=e=>{e?a(e):n("no blob returned")};HTMLCanvasElement.prototype.toBlob?e.toBlob(i,t,r):function(e,t,r,a){let n=atob(e.toDataURL(r,a).split(",")[1]),i=n.length,o=i>>2,s=new Uint8Array(i),l=new Uint32Array(s.buffer,0,o),u=0;for(let e=0;e<o;++e)l[e]=n.charCodeAt(u++)|n.charCodeAt(u++)<<8|n.charCodeAt(u++)<<16|n.charCodeAt(u++)<<24;let c=3&i;for(;c--;)s[u]=n.charCodeAt(u++);t(new Blob([s],{type:r||"image/png"}))}(e,i,t,r)})}r.d(t,{_c:function(){return n},eY:function(){return a}})},68332:function(e,t,r){function a(){return new i}function n(e){return{previous:null,next:null,inList:!0,value:e}}r.d(t,{S:function(){return a}});class i{constructor(){this.count=0,this.first=null,this.last=null}addFirst(e){let t=n(e);return t.inList=!0,this.first&&(this.first.previous=t),t.next=this.first,this.first=t,this.count++,this.last||(this.last=t),t}addLast(e){let t=n(e);return null!==this.last&&(this.last.next=t),t.previous=this.last,this.last=t,null===this.first&&(this.first=t),t.inList=!0,this.count++,t}removeFirst(){let e=this.first;if(e)return this.remove(e),e.value}removeLast(){let e=this.last;if(e)return this.remove(e),e.value}remove(e){e.inList&&(e.inList=!1,null!==e.previous?e.previous.next=e.next:null===e.previous&&(this.first=e.next),null!==e.next?e.next.previous=e.previous:null===e.next&&(this.last=e.previous),e.next=null,e.previous=null,this.count--)}find(e){let t=this.first;for(;null!==t;){if(t.value===e)return t;t=t.next}}}},54185:function(e,t,r){r.d(t,{IH:function(){return S},U$:function(){return x},ev:function(){return n},qC:function(){return T},w_:function(){return y}});var a,n,i=r(85764),o=r(72558),s=r(14086),l=r(41306),u=r(7922),c=r(71522),d=r(11204),p=r(98224),f=r(23833),m=r(34813),h=r(86276),g=r(43975),b=r(22934);let y=s.e.arrayToOptions(["custom","auto","highest","higher","high","medium","low","lower","lowest"]),x={smoothColors:s.e.MappedStatic("auto",{auto:s.e.Group({}),on:s.e.Group({resolutionFactor:s.e.Numeric(2,{min:.5,max:6,step:.1}),sampleStride:s.e.Numeric(3,{min:1,max:12,step:1})}),off:s.e.Group({})})};function S(e){return!!e.smoothColors}function T(e,t,r){if(("on"===e.name||"auto"===e.name&&t)&&r&&r<3){let t=3;return"on"===e.name?(r*=e.params.resolutionFactor,t=e.params.sampleStride):(r*=2-(0,f.CW)(0,1.1,r),(r=Math.max(.5,r))>1.2&&(t=2)),{resolution:r,stride:t}}}(a=n||(n={})).MaterialCategory={category:"Material"},a.ShadingCategory={category:"Shading"},a.CullingLodCategory={category:"Culling & LOD"},a.CustomQualityParamInfo={category:"Custom Quality",hideIf:e=>void 0!==e.quality&&"custom"!==e.quality}
2831,a.Params={alpha:s.e.Numeric(1,{min:0,max:1,step:.01},{label:"Opacity",isEssential:!0,description:"How opaque/transparent the representation is rendered."}),quality:s.e.Select("auto",y,{isEssential:!0,description:"Visual/rendering quality of the representation."}),material:m.F.getParam(),clip:s.e.Group(h.b.Params),emissive:s.e.Numeric(0,{min:0,max:1,step:.01}),density:s.e.Numeric(.2,{min:0,max:1,step:.01},{description:"Density value to estimate object thickness."}),instanceGranularity:s.e.Boolean(!1,{description:"Use instance granularity for marker, transparency, clipping, overpaint, substance data to save memory."}),lod:s.e.Vec3((0,g.A)(),void 0,{...a.CullingLodCategory,description:"Level of detail.",fieldLabels:{x:"Min Distance",y:"Max Distance",z:"Overlap (Shader)"}}),cellSize:s.e.Numeric(200,{min:0,max:5e3,step:100},{...a.CullingLodCategory,description:"Instance grid cell size."}),batchSize:s.e.Numeric(2e3,{min:0,max:5e4,step:500},{...a.CullingLodCategory,description:"Instance grid batch size."})},a.createSimple=function(e=u.t.grey,t=1,r){r||(r=(0,l.tx)());let a=(0,o.OF)(1,r.instanceCount.ref.value,1,()=>c.ad,!1,()=>!1);return{transform:r,locationIterator:a,theme:{color:(0,d.qY)({},{value:e,lightness:0,saturation:0}),size:(0,p._k)({},{value:t})}}},a.createValues=function(e,t){let r=h.b.getClip(e.clip);return{alpha:i.IO.create(e.alpha),uAlpha:i.IO.create(e.alpha),uVertexCount:i.IO.create(t.vertexCount),uGroupCount:i.IO.create(t.groupCount),drawCount:i.IO.create(t.drawCount),uMetalness:i.IO.create(e.material.metalness),uRoughness:i.IO.create(e.material.roughness),uBumpiness:i.IO.create(e.material.bumpiness),uEmissive:i.IO.create(e.emissive),uDensity:i.IO.create(e.density),dClipObjectCount:i.IO.create(r.objects.count),dClipVariant:i.IO.create(r.variant),uClipObjectType:i.IO.create(r.objects.type),uClipObjectInvert:i.IO.create(r.objects.invert),uClipObjectPosition:i.IO.create(r.objects.position),uClipObjectRotation:i.IO.create(r.objects.rotation),uClipObjectScale:i.IO.create(r.objects.scale),uClipObjectTransform:i.IO.create(r.objects.transform),instanceGranularity:i.IO.create(e.instanceGranularity),uLod:i.IO.create(b.T.create(e.lod[0],e.lod[1],e.lod[2],0))}},a.updateValues=function(e,t){i.IO.updateIfChanged(e.alpha,t.alpha),i.IO.updateIfChanged(e.uMetalness,t.material.metalness),i.IO.updateIfChanged(e.uRoughness,t.material.roughness),i.IO.updateIfChanged(e.uBumpiness,t.material.bumpiness),i.IO.updateIfChanged(e.uEmissive,t.emissive),i.IO.updateIfChanged(e.uDensity,t.density);let r=h.b.getClip(t.clip);i.IO.updateIfChanged(e.dClipObjectCount,r.objects.count),i.IO.updateIfChanged(e.dClipVariant,r.variant),i.IO.update(e.uClipObjectType,r.objects.type),i.IO.update(e.uClipObjectInvert,r.objects.invert),i.IO.update(e.uClipObjectPosition,r.objects.position),i.IO.update(e.uClipObjectRotation,r.objects.rotation),i.IO.update(e.uClipObjectScale,r.objects.scale),i.IO.update(e.uClipObjectTransform,r.objects.transform),i.IO.updateIfChanged(e.instanceGranularity,t.instanceGranularity),i.IO.update(e.uLod,b.T.set(e.uLod.ref.value,t.lod[0],t.lod[1],t.lod[2],0))},a.createRenderableState=function(e={}){let t=void 0===e.alpha||1===e.alpha;return{disposed:!1,visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,opaque:t,writeDepth:t}},a.updateRenderableState=function(e,t){e.opaque=t.alpha*e.alphaFactor>=1,e.writeDepth=e.opaque}},22444:function(e,t,r){r.d(t,{Q4:function(){return l},cO:function(){return c},ms:function(){return s},zr:function(){return o}});var a=r(68303),n=r(87144),i=r(62927);function o(e,t,r,a){return e.fill(a,t,r),!0}function s(e,t,r){e.fill(0,t,r)}function l(e,t,r){let o=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tClipping.ref.value.array);return r?(a.IO.update(r.tClipping,o),a.IO.update(r.uClippingTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.dClipping,e>0),a.IO.updateIfChanged(r.dClippingType,t),r):{tClipping:a.IO.create(o),uClippingTexDim:a.IO.create(n.Sg.create(o.width,o.height)),dClipping:a.IO.create(e>0),dClippingType:a.IO.create(t)}}let u={array:new Uint8Array(1),width:1,height:1};function c(e){return e?(a.IO.update(e.tClipping,u),a.IO.update(e.uClippingTexDim,n.Sg.create(1,1)),a.IO.updateIfChanged(e.dClipping,!1),e):{tClipping:a.IO.create(u),uClippingTexDim:a.IO.create(n.Sg.create(1,1)),dClipping:a.IO.create(!1),dClippingType:a.IO.create("groupInstance")}}},69587:function(e,t,r){r.d(t,{is:function(){return u}});var a=r(85764),n=r(62927),i=r(70371),o=r(87144),s=r(71522),l=r(91407);function u(e,t,r,u){var f;let m=function(e,t,r,u){switch(r.granularity){case"uniform":return function(e,t,r){var n;e.reset();let u=e.hasNext?e.move():{location:s.ad,isSecondary:!1};return n=t(u.location,u.isSecondary),r?(a.IO.update(r.uColor,i.Il.toVec3Normalized(r.uColor.ref.value,n)),a.IO.updateIfChanged(r.dColorType,"uniform"),r):{uColor:a.IO.create(i.Il.toVec3Normalized((0,o.AO)(),n)),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(1,1)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create("uniform"),dUsePalette:a.IO.create(!1)}}(e,r.color,u);case"instance":return e.nonInstanceable?d(e,r.color,u):function(e,t,r){let{instanceCount:a}=e,o=(0,n.l3)(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:r,isSecondary:a,instanceIndex:n}=e.move();i.Il.toArray(t(r,a),o.array,3*n),e.skipInstance()}return c(o,"instance",r)}(e,r.color,u);case"group":return d(e,r.color,u);case"groupInstance":return function(e,t,r){let{groupCount:a,instanceCount:o,hasLocation2:s}=e,l=(0,n.l3)(Math.max(1,o*a*(s?2:1)),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let u=s?6:3;for(;e.hasNext;){let{location:r,location2:a,isSecondary:n,index:o}=e.move();i.Il.toArray(t(r,n),l.array,o*u),s&&i.Il.toArray(t(a,n),l.array,o*u+3)}return c(l,"groupInstance",r)}(e,r.color,u);case"vertex":return function(e,t,r){let{groupCount:a,stride:o}=e,s=(0,n.l3)(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset(),e.voidInstances();e.hasNext&&!e.isNextNewInstance;){let{location:r,isSecondary:a,groupIndex:n}
2831=e.move(),l=t(r,a);for(let e=0;e<o;++e)i.Il.toArray(l,s.array,(n+e)*3)}return c(s,"vertex",r)}(t,r.color,u);case"vertexInstance":return function(e,t,r){let{groupCount:a,instanceCount:o,stride:s}=e,l=(0,n.l3)(Math.max(1,o*a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:r,isSecondary:a,index:n}=e.move(),o=t(r,a);for(let e=0;e<s;++e)i.Il.toArray(o,l.array,(n+e)*3)}return c(l,"vertexInstance",r)}(t,r.color,u);case"volume":return p(r.grid,"volume",u);case"volumeInstance":return p(r.grid,"volumeInstance",u);case"direct":return u?(a.IO.updateIfChanged(u.dColorType,"direct"),u):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(1,1)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create("direct"),dUsePalette:a.IO.create(!1)}}}(e,t,r,u);if(r.palette){a.IO.updateIfChanged(m.dUsePalette,!0);let[e,t]=r.palette.domain||[0,1];a.IO.update(m.uPaletteDomain,o.Sg.set(m.uPaletteDomain.ref.value,e,t)),a.IO.update(m.uPaletteDefault,i.Il.toVec3Normalized(m.uPaletteDefault.ref.value,null!==(f=r.palette.defaultColor)&&void 0!==f?f:(0,i.Il)(13421772))),function(e,t){let r=!0,n=t.ref.value;if(e.colors.length!==n.width||n.filter!==e.filter)r=!1;else{let t=n.array,a=0;for(let n of e.colors){let[e,o,s]=i.Il.toRgb(n);if(t[a++]!==e||t[a++]!==o||t[a++]!==s){r=!1;break}}}if(r)return;let o=new Uint8Array(3*e.colors.length),s=0;for(let t of e.colors){let[e,r,a]=i.Il.toRgb(t);o[s++]=e,o[s++]=r,o[s++]=a}a.IO.update(t,{array:o,height:1,width:e.colors.length,filter:e.filter})}(r.palette,m.tPalette)}else a.IO.updateIfChanged(m.dUsePalette,!1);return m}function c(e,t,r){return r?(a.IO.update(r.tColor,e),a.IO.update(r.uColorTexDim,o.Sg.create(e.width,e.height)),a.IO.updateIfChanged(r.dColorType,t),r):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create(e),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(e.width,e.height)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create(t),dUsePalette:a.IO.create(!1)}}function d(e,t,r){let{groupCount:a,hasLocation2:o}=e,s=(0,n.l3)(Math.max(1,a*(o?2:1)),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let l=o?6:3;for(;e.hasNext&&!e.isNextNewInstance;){let{location:r,location2:a,isSecondary:n,groupIndex:u}=e.move();i.Il.toArray(t(r,n),s.array,u*l),o&&i.Il.toArray(t(a,n),s.array,u*l+3)}return c(s,"group",r)}function p(e,t,r){let{colors:n,dimension:i,transform:s}=e,l=n.getWidth(),u=n.getHeight();return r?(a.IO.update(r.tColorGrid,n),a.IO.update(r.uColorTexDim,o.Sg.create(l,u)),a.IO.update(r.uColorGridDim,o.AO.clone(i)),a.IO.update(r.uColorGridTransform,o.T8.clone(s)),a.IO.updateIfChanged(r.dColorType,t),r):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create(n),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(l,u)),uColorGridDim:a.IO.create(o.AO.clone(i)),uColorGridTransform:a.IO.create(o.T8.clone(s)),dColorType:a.IO.create(t),dUsePalette:a.IO.create(!1)}}},51858:function(e,t,r){r.d(t,{B:function(){return a}});var a,n=r(69062),i=r(94900),o=r(87144);let s=(0,o.AO)(),l=(0,o.AO)(),u=(0,o.AO)(),c=n.pS.add,d=n.pS.add3;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),p=n.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),f=n.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),m=n.pS.create(Float32Array,1,t,r?r.scaleBuffer.ref.value:e),h=n.pS.create(Float32Array,1,t,r?r.capBuffer.ref.value:e),g=n.pS.create(Float32Array,1,t,r?r.colorModeBuffer.ref.value:e),b=(e,t,r,n,i,o,s,l,u,b,y)=>{for(let x=0;x<6;++x)d(p,e,t,r),d(f,n,i,o),c(a,y),c(m,s),c(h,(l?1:0)+(u?2:0)),c(g,b)},y=(e,t,r,a,n,i,c,d,p)=>{let f=o.AO.distance(e,t),m=r%2!=0,h=Math.floor((r+1)/2),g=2;o.AO.setMagnitude(u,o.AO.sub(u,t,e),f/(r+.5)),o.AO.copy(s,e);for(let r=0;r<h;++r)o.AO.add(s,s,u),m&&r===h-1?(o.AO.copy(l,t),c||(i=!1)):o.AO.add(l,s,u),d&&(g=o.AO.distance(e,l)/(2*f)),b(s[0],s[1],s[2],l[0],l[1],l[2],a,n,i,g,p),o.AO.add(s,s,u)};return{add:b,addFixedCountDashes:y,addFixedLengthDashes:(e,t,r,a,n,i,s,l)=>{let u=o.AO.distance(e,t);y(e,t,u/r,a,n,i,!0,s,l)},getCylinders:()=>{let e=a.elementCount/6,t=n.pS.compact(a,!0),o=n.pS.compact(p,!0),s=n.pS.compact(f,!0),l=n.pS.compact(m,!0),u=n.pS.compact(h,!0),c=n.pS.compact(g,!0),d=r&&e<=r.cylinderCount?r.mappingBuffer.ref.value:new Float32Array(18*e),b=r&&e<=r.cylinderCount?r.indexBuffer.ref.value:new Uint32Array(12*e);return(!r||e>r.cylinderCount)&&function(e,t,r){for(let r=0;r<e;++r){let e=18*r;t[e]=-1,t[e+1]=1,t[e+2]=-1,t[e+3]=-1,t[e+4]=-1,t[e+5]=-1,t[e+6]=1,t[e+7]=1,t[e+8]=-1,t[e+9]=1,t[e+10]=1,t[e+11]=1,t[e+12]=1,t[e+13]=-1,t[e+14]=-1,t[e+15]=1,t[e+16]=-1,t[e+17]=1}for(let t=0;t<e;++t){let e=6*t,a=12*t;r[a]=e,r[a+1]=e+1,r[a+2]=e+2,r[a+3]=e+1,r[a+4]=e+4,r[a+5]=e+2,r[a+6]=e+2,r[a+7]=e+4,r[a+8]=e+3,r[a+9]=e+4,r[a+10]=e+5,r[a+11]=e+3}}(e,d,b),i.A.create(d,b,t,o,s,l,u,c,e,r)}}}},94900:function(e,t,r){r.d(t,{A:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(14086),p=r(62927),f=r(48930),m=r(54185),h=r(5514),g=r(38788),b=r(69062),y=r(22444),x=r(41723),S=r(4249),T=r(64690);!function(e){function t(e,t,r,i,s,l,u,c,d,m){return m?(d>m.cylinderCount&&(n.IO.update(m.mappingBuffer,e),n.IO.update(m.indexBuffer,t)),m.cylinderCount=d,n.IO.update(m.groupBuffer,r),n.IO.update(m.startBuffer,i),n.IO.update(m.endBuffer,s),n.IO.update(m.scaleBuffer,l),n.IO.update(m.capBuffer,u),n.IO.update(m.colorModeBuffer,c),m):function(e,t,r,i,s,l,u,c,d){let m;let h=(0,f.CP)(),g=-1,b=-1,y={kind:"cylinders",cylinderCount:d,mappingBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),groupBuffer:n.IO.create(r),startBuffer:n.IO.create(i),endBuffer:n.IO.create(s),scaleBuffer:n.IO.create(l),capBuffer:n.IO.create(u),colorModeBuffer:n.IO.create(c),get boundingSphere(){let e=a(y);if(e!==g){let t=(0,p.Yx)(y.startBuffer.ref.value,6*y.cylinderCount,6),r=(0,p.Yx)(y.endBuffer.ref.value,6*y.cylinderCount,6);f.CP.expandBySphere(h,t,r),g=e}return h},get groupMapping(){return y.groupBuffer.ref.version!==b&&(m=(0,o.r8)(y.groupBuffer.ref.value,y.cylinderCount,6),b=y.groupBuffer.ref.version),m},setBoundingSphere(e){f.CP.copy(h,e),g=a(y)},hasBoundingSphere:()=>g===a(y)};return y}(e,t,r,i,s,l,u,c,d)}function r(e){let r=e?e.mappingBuffer.ref.value:new Float32Array(0),a=e?e.indexBuffer.ref.value:new Uint32Array(0),n=e?e.groupBuffer.ref.value:new Float32Array(0),i=e?e.startBuffer.ref.value:new Float32Array(0),o=e?e.endBuffer.ref.value:new Float32Array(0);return t(r,a,n,i,o,e?e.scaleBuffer.ref.value:new Float32Array(0),e?e.capBuffer.ref.value:new Float32Array(0),e?e.colorModeBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,b.nF)([e.cylinderCount,e.mappingBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.startBuffer.ref.version,e.endBuffer.ref.version,e.scaleBuffer.ref.version,e.capBuffer.ref.version,e.colorModeBuffer.ref.version]
2831)}function C(e,t){let r=6*e.cylinderCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.startBuffer.ref.value,l=e.endBuffer.ref.value,u=t.aTransform.ref.value;return(0,c.OF)(r,a,2,(e,t)=>{let r=e%6==0?s:l;return t<0?i.AO.fromArray(o,r,3*e):i.AO.transformMat4Offset(o,r,u,0,3*e,16*t),n})}function O(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,b=C(e,t),O=(0,s.is)(r,b,a.color),I=(0,u.H4)(r,b,a.size),A=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),w=(0,h.wS)(),D=(0,g.PG)(),E=(0,S.ur)(),M=(0,x.mQ)(),P=(0,y.cO)(),k={drawCount:12*e.cylinderCount,vertexCount:6*e.cylinderCount,groupCount:d,instanceCount:c},B=(0,u.Mu)(I)*o.sizeFactor,_=f.CP.clone(e.boundingSphere),R=(0,p.Lo)(_,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("cylinders"),aMapping:e.mappingBuffer,aGroup:e.groupBuffer,aStart:e.startBuffer,aEnd:e.endBuffer,aScale:e.scaleBuffer,aCap:e.capBuffer,aColorMode:e.colorModeBuffer,elements:e.indexBuffer,boundingSphere:n.IO.create(R),invariantBoundingSphere:n.IO.create(_),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(_)),...O,...I,...A,...w,...D,...E,...M,...P,...t,padding:n.IO.create(B),...m.ev.createValues(o,k),uSizeFactor:n.IO.create(o.sizeFactor*o.sizeAspectRatio),uDoubleSided:n.IO.create(o.doubleSided),dIgnoreLight:n.IO.create(o.ignoreLight),dCelShaded:n.IO.create(o.celShaded),dXrayShaded:n.IO.create("inverted"===o.xrayShaded?"inverted":!0===o.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(o.transparentBackfaces),dSolidInterior:n.IO.create(o.solidInterior),uBumpFrequency:n.IO.create(o.bumpFrequency),uBumpAmplitude:n.IO.create(o.bumpAmplitude),uInteriorColor:n.IO.create((0,T.Qy)(o.interior,(0,i.T8)())),uInteriorSubstance:n.IO.create((0,T.gt)(o.interior,(0,i.T8)())),dDualColor:n.IO.create("interpolate"===o.colorMode)}}function I(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.transform=function(e,t){let r=e.startBuffer.ref.value;(0,o.ST)(t,r,0,6*e.cylinderCount),n.IO.update(e.startBuffer,r);let a=e.endBuffer.ref.value;(0,o.ST)(t,a,0,6*e.cylinderCount),n.IO.update(e.endBuffer,a)},e.Params={...m.ev.Params,sizeFactor:d.e.Numeric(1,{min:0,max:10,step:.1}),sizeAspectRatio:d.e.Numeric(1,{min:0,max:3,step:.01}),doubleSided:d.e.Boolean(!1,m.ev.CustomQualityParamInfo),ignoreLight:d.e.Boolean(!1,m.ev.ShadingCategory),celShaded:d.e.Boolean(!1,m.ev.ShadingCategory),xrayShaded:d.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],m.ev.ShadingCategory),transparentBackfaces:d.e.Select("off",d.e.arrayToOptions(["off","on","opaque"]),m.ev.ShadingCategory),solidInterior:d.e.Boolean(!0,m.ev.ShadingCategory),bumpFrequency:d.e.Numeric(0,{min:0,max:10,step:.1},m.ev.ShadingCategory),bumpAmplitude:d.e.Numeric(1,{min:0,max:5,step:.1},m.ev.ShadingCategory),interior:(0,T.xA)(),colorMode:d.e.Select("default",d.e.arrayToOptions(["default","interpolate"]),m.ev.ShadingCategory)},e.Utils={Params:e.Params,createEmpty:r,createValues:O,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return O(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor*t.sizeAspectRatio),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.dSolidInterior,t.solidInterior),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,T.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,T.gt)(t.interior,e.uInteriorSubstance.ref.value)),n.IO.updateIfChanged(e.dDualColor,"interpolate"===t.colorMode)},updateBoundingSphere:function(e,t){let r=f.CP.clone(t.boundingSphere),a=(0,p.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);f.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),f.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return I(t,e),t},updateRenderableState:I,createPositionIterator:C}}(a||(a={}))},74219:function(e,t,r){r.d(t,{A:function(){return a}});var a,n=r(69062),i=r(72558),o=r(62927),s=r(91407),l=r(48930),u=r(87144),c=r(85764),d=r(14086),p=r(70759),f=r(54185),m=r(69587),h=r(85688),g=r(5514),b=r(38788),y=r(23833);function x(e){return e.map(e=>
2831({x:e[0],alpha:e[1]}))}function S(e,t){let r,a,n,i,o,s;let l=[{x:0,alpha:0},{x:0,alpha:0},...e,{x:1,alpha:0},{x:1,alpha:0}],u=t?t.ref.value.array:new Uint8Array(256),d=0,p=e.length+1;for(let e=0;e<p;++e){r=l[e+1].x,a=l[e+2].x,n=l[e].alpha,i=l[e+1].alpha,o=l[e+2].alpha,s=l[e+3].alpha;let t=Math.round((a-r)*256);for(let e=0;e<t;++e){let r=e/t;u[d]=Math.max(0,255*(0,y.$y)(n,i,o,s,r,.5)),++d}}let f={array:u,width:256,height:1};return t?(c.IO.update(t,f),t):c.IO.create(f)}var T=r(22444),C=r(1573),O=r(41723),I=r(4249);let A=(0,p.xu)();!function(e){function t(e,t,a,n,i,o,s,d,p,f,m){return m?function(e,t,r,a,n,i,o,s,l,d,p){let f=i.getWidth(),m=i.getHeight(),h=i.getDepth();return c.IO.update(p.gridDimension,t),c.IO.update(p.gridTexture,i),c.IO.update(p.gridTextureDim,u.AO.set(p.gridTextureDim.ref.value,f,m,h)),c.IO.update(p.gridStats,u.T8.set(p.gridStats.ref.value,o.min,o.max,o.mean,o.sigma)),c.IO.update(p.bboxMin,e.min),c.IO.update(p.bboxMax,e.max),c.IO.update(p.bboxSize,u.AO.sub(p.bboxSize.ref.value,e.max,e.min)),c.IO.update(p.transform,r),c.IO.update(p.cellDim,n),c.IO.update(p.unitToCartn,a),c.IO.update(p.cartnToUnit,u.yb.invert((0,u.yb)(),a)),c.IO.updateIfChanged(p.packedGroup,s),c.IO.updateIfChanged(p.axisOrder,u.AO.fromArray(p.axisOrder.ref.value,l,0)),c.IO.updateIfChanged(p.dataType,d),p}(e,t,a,n,i,o,s,d,p,f,m):function(e,t,a,n,i,o,s,d,p,f){let m=(0,l.CP)(),h=-1,g=o.getWidth(),b=o.getHeight(),y=o.getDepth(),x={kind:"direct-volume",gridDimension:c.IO.create(t),gridTexture:c.IO.create(o),gridTextureDim:c.IO.create(u.AO.create(g,b,y)),gridStats:c.IO.create(u.T8.create(s.min,s.max,s.mean,s.sigma)),bboxMin:c.IO.create(e.min),bboxMax:c.IO.create(e.max),bboxSize:c.IO.create(u.AO.sub((0,u.AO)(),e.max,e.min)),transform:c.IO.create(a),cellDim:c.IO.create(i),unitToCartn:c.IO.create(n),cartnToUnit:c.IO.create(u.yb.invert((0,u.yb)(),n)),get boundingSphere(){let e=r(x);if(e!==h){var S,T;let t=(S=x.gridDimension.ref.value,T=x.transform.ref.value,l.CP.fromDimensionsAndTransform((0,l.CP)(),S,T));l.CP.copy(m,t),h=e}return m},packedGroup:c.IO.create(d),axisOrder:c.IO.create(p),dataType:c.IO.create(f),setBoundingSphere(e){l.CP.copy(m,e),h=r(x)},hasBoundingSphere:()=>h===r(x),meta:{}};return x}(e,t,a,n,i,o,s,d,p,f)}function r(e){return(0,n.nF)([e.bboxSize.ref.version,e.gridDimension.ref.version,e.gridTexture.ref.version,e.transform.ref.version,e.gridStats.ref.version])}function a(e){let r=(0,l.XZ)(),a=(0,u.AO)(),n=u.yb.identity(),i=u.yb.identity(),o=(0,u.AO)(),c=(0,s.DU)();return t(r,a,n,i,o,c,C.r.One.stats,!1,u.AO.create(0,1,2),"byte",e)}function p(e,t){let r=e.transform.ref.value,[a,n,o]=e.gridDimension.ref.value,s=t.instanceCount.ref.value,l=(0,i.cH)(),c=l.position,d=t.aTransform.ref.value;return(0,i.OF)(a*n*o,s,1,(e,t)=>{let a=Math.floor(e/o);return c[0]=Math.floor(a/n),c[1]=a%n,c[2]=e%o,u.AO.transformMat4(c,c,r),t>=0&&u.AO.transformMat4Offset(c,c,d,0,0,16*t),l})}function y(e,t){return Math.ceil(u.AO.magnitude(e)*t)}function w(e,t){return 1/t*Math.min(...e)}function D(e,t,r,a,n){let{gridTexture:i,gridTextureDim:s,gridStats:d}=e,{bboxSize:C,bboxMin:D,bboxMax:E,gridDimension:M,transform:P}=e,{instanceCount:k,groupCount:B}=r,_=p(e,t),R=(0,m.is)(r,_,a.color),F=n.instanceGranularity?(0,h.eL)(k,"instance"):(0,h.eL)(k*B,"groupInstance"),L=(0,g.wS)(),z=(0,b.PG)(),N=(0,I.ur)(),G=(0,O.mQ)(),U=(0,T.cO)(),[V,j,H]=M.ref.value,q={drawCount:A.indices.length,vertexCount:V*j*H,groupCount:B,instanceCount:k},X=l.CP.clone(e.boundingSphere),W=(0,o.Lo)(X,t.aTransform.ref.value,k,0),K=S(x(n.controlPoints));return{dGeometryType:c.IO.create("directVolume"),...R,...F,...L,...z,...N,...G,...U,...t,...f.ev.createValues(n,q),aPosition:c.IO.create(A.vertices),elements:c.IO.create(A.indices),boundingSphere:c.IO.create(W),invariantBoundingSphere:c.IO.create(X),uInvariantBoundingSphere:c.IO.create(u.T8.ofSphere(X)),uBboxMin:D,uBboxMax:E,uBboxSize:C,uMaxSteps:c.IO.create(y(M.ref.value,n.stepsPerCell)),uStepScale:c.IO.create(w(e.cellDim.ref.value,n.stepsPerCell)),uJumpLength:c.IO.create(n.jumpLength),uTransform:P,uGridDim:M,tTransferTex:K,uTransferScale:c.IO.create(1/n.stepsPerCell),dGridTexType:c.IO.create(i.ref.value.getDepth()>0?"3d":"2d"),uGridTexDim:s,tGridTex:i,uGridStats:d,uCellDim:e.cellDim,uCartnToUnit:e.cartnToUnit,uUnitToCartn:e.unitToCartn,dPackedGroup:e.packedGroup,dAxisOrder:c.IO.create(e.axisOrder.ref.value.join("")),dIgnoreLight:c.IO.create(n.ignoreLight),dCelShaded:c.IO.create(n.celShaded),dXrayShaded:c.IO.create("inverted"===n.xrayShaded?"inverted":!0===n.xrayShaded?"on":"off"),meta:c.IO.create(e.meta)}}e.create=t,e.createEmpty=a,e.Params={...f.ev.Params,ignoreLight:d.e.Boolean(!1,f.ev.ShadingCategory),celShaded:d.e.Boolean(!1,f.ev.ShadingCategory),xrayShaded:d.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],f.ev.ShadingCategory),controlPoints:d.e.LineGraph([u.Sg.create(.19,0),u.Sg.create(.2,.05),u.Sg.create(.25,.05),u.Sg.create(.26,0),u.Sg.create(.79,0),u.Sg.create(.8,.05),u.Sg.create(.85,.05),u.Sg.create(.86,0)],{isEssential:!0}),stepsPerCell:d.e.Numeric(3,{min:1,max:10,step:1}),jumpLength:d.e.Numeric(0,{min:0,max:20,step:.1})},e.Utils={Params:e.Params,createEmpty:a,createValues:D,createValuesSimple:function(t,r,a,n,i){let o=f.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return D(t,o.transform,o.locationIterator,o.theme,s)}
2831,updateValues:function(e,t){f.ev.updateValues(e,t),c.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),c.IO.updateIfChanged(e.dCelShaded,t.celShaded),c.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),S(x(t.controlPoints),e.tTransferTex),c.IO.updateIfChanged(e.uMaxSteps,y(e.uGridDim.ref.value,t.stepsPerCell)),c.IO.updateIfChanged(e.uStepScale,w(e.uCellDim.ref.value,t.stepsPerCell)),c.IO.updateIfChanged(e.uTransferScale,1/t.stepsPerCell),c.IO.updateIfChanged(e.uJumpLength,t.jumpLength)},updateBoundingSphere:function(e,t){let r=l.CP.clone(t.boundingSphere),a=(0,o.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);l.CP.equals(a,e.boundingSphere.ref.value)||c.IO.update(e.boundingSphere,a),l.CP.equals(r,e.invariantBoundingSphere.ref.value)||(c.IO.update(e.invariantBoundingSphere,r),c.IO.update(e.uInvariantBoundingSphere,u.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=f.ev.createRenderableState(e);return t.opaque=!1,t.writeDepth=!1,t},updateRenderableState:function(e,t){f.ev.updateRenderableState(e,t),e.opaque=!1,e.writeDepth=!1},createPositionIterator:p}}(a||(a={}))},4249:function(e,t,r){r.d(t,{BF:function(){return c},DQ:function(){return u},JQ:function(){return l},rF:function(){return s},ur:function(){return p}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407);function s(e,t,r,a){for(let n=t;n<r;++n)e[n]=255*a;return!0}function l(e,t){if(0===t||e.length<t)return 0;let r=0;for(let a=0;a<t;++a)r+=e[a];return r/(255*t)}function u(e,t,r){e.fill(0,t,r)}function c(e,t,r){let s=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tEmissive.ref.value.array);return r?(a.IO.update(r.tEmissive,s),a.IO.update(r.uEmissiveTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dEmissive,e>0),a.IO.updateIfChanged(r.emissiveAverage,l(s.array,e)),a.IO.updateIfChanged(r.dEmissiveType,t),r):{tEmissive:a.IO.create(s),uEmissiveTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dEmissive:a.IO.create(e>0),emissiveAverage:a.IO.create(0),tEmissiveGrid:a.IO.create((0,o.DU)()),uEmissiveGridDim:a.IO.create(n.AO.create(1,1,1)),uEmissiveGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dEmissiveType:a.IO.create(t),uEmissiveStrength:a.IO.create(1)}}let d={array:new Uint8Array(1),width:1,height:1};function p(e){return e?(a.IO.update(e.tEmissive,d),a.IO.update(e.uEmissiveTexDim,n.Sg.create(1,1)),e):{tEmissive:a.IO.create(d),uEmissiveTexDim:a.IO.create(n.Sg.create(1,1)),dEmissive:a.IO.create(!1),emissiveAverage:a.IO.create(0),tEmissiveGrid:a.IO.create((0,o.DU)()),uEmissiveGridDim:a.IO.create(n.AO.create(1,1,1)),uEmissiveGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dEmissiveType:a.IO.create("groupInstance"),uEmissiveStrength:a.IO.create(1)}}},11803:function(e,t,r){r.d(t,{Z:function(){return a}});var a,n=r(4376),i=r(99696),o=r(21071),s=r(96046),l=r(74219),u=r(39857),c=r(36111),d=r(39446),p=r(98510),f=r(94900),m=r(81421);!function(e){function t(e){switch(e.kind){case"mesh":return 3*e.triangleCount;case"points":return e.pointCount;case"spheres":return 6*e.sphereCount;case"cylinders":return 12*e.cylinderCount;case"text":return 6*e.charCount;case"lines":return 6*e.lineCount;case"direct-volume":return 36;case"image":return 6;case"texture-mesh":return e.vertexCount}}e.getDrawCount=t,e.getVertexCount=function(e){switch(e.kind){case"mesh":case"lines":case"texture-mesh":return e.vertexCount;case"points":return e.pointCount;case"spheres":return 6*e.sphereCount;case"cylinders":return 6*e.cylinderCount;case"text":return 4*e.charCount;case"direct-volume":let[t,r,a]=e.gridDimension.ref.value;return t*r*a;case"image":return 4}},e.getGroupCount=function(e){switch(e.kind){case"mesh":case"points":case"spheres":case"cylinders":case"text":case"lines":return 0===t(e)?0:(0,c.uH)(e.groupBuffer.ref.value)+1;case"direct-volume":return 1;case"image":return(0,m.bC)(e.groupTexture.ref.value.array,4)+1;case"texture-mesh":return e.groupCount}},e.getUtils=function(e){switch(e.kind){case"mesh":return n.K.Utils;case"points":return i.w.Utils;case"spheres":return u.s.Utils;case"cylinders":return f.A.Utils;case"text":return o.x.Utils;case"lines":return s.x.Utils;case"direct-volume":return l.A.Utils;case"image":return p.Ee.Utils;case"texture-mesh":return d.q.Utils}},e.getGranularity=function(e,t){return"instance"===t&&e.nonInstanceable?"group":t}}(a||(a={}))},98510:function(e,t,r){r.d(t,{Ee:function(){return a},lo:function(){return I}});var a,n=r(69062),i=r(72558),o=r(62927),s=r(48930),l=r(87144),u=r(85764),c=r(14086),d=r(54185),p=r(69587),f=r(85688),m=r(5514),h=r(38788),g=r(36111),b=r(22444),y=r(71522),x=r(68971),S=r(41723),T=r(4249);let C=new Uint32Array([0,1,2,1,3,2]),O=new Float32Array([0,1,0,0,1,1,1,0]),I={nearest:"Nearest",catmulrom:"Catmulrom (Cubic)",mitchell:"Mitchell (Cubic)",bspline:"B-Spline (Cubic)"};Object.keys(I),function(e){function t(){return{type:0,center:(0,l.AO)(),rotation:(0,l.D6)(),scale:(0,l.AO)(),transform:(0,l.yb)()}}function r(e,t,r,n,i,o,c){return c?function(e,t,r,a,n,i,o){let s=e.width,c=e.height;return u.IO.update(o.imageTexture,e),u.IO.update(o.imageTextureDim,l.Sg.set(o.imageTextureDim.ref.value,s,c)),u.IO.update(o.cornerBuffer,t),u.IO.update(o.groupTexture,r),u.IO.update(o.valueTexture,a),u.IO.updateIfChanged(o.trimType,n.type),u.IO.update(o.trimCenter,l.AO.copy(o.trimCenter.ref.value,n.center)),u.IO.update(o.trimRotation,l.D6.copy(o.trimRotation.ref.value,n.rotation)),u.IO.update(o.trimScale,l.AO.copy(o.trimScale.ref.value,n.scale)),u.IO.update(o.trimTransform,l.yb.copy(o.trimTransform.ref.value,n.transform)),u.IO.updateIfChanged(o.isoLevel,i),o}(e,t,r,n,i,o,c):function(e,t,r,n,i,o){let c=(0,s.CP)(),d=-1,p=e.width,f=e.height,m={kind:"image",imageTexture:u.IO.create(e),imageTextureDim:u.IO.create(l.Sg.create(p,f)),cornerBuffer:u.IO.create(t),groupTexture:u.IO.create(r),valueTexture:u.IO.create(n),trimType:u.IO.create(i.type),trimCenter:u.IO.create(i.center),trimRotation:u.IO.create(i.rotation),trimScale:u.IO.create(i.scale),trimTransform:u.IO.create(i.transform),isoLevel:u.IO.create(o),get boundingSphere(){let e=a(m);if(e!==d){let t=function(e){let t=(0,l.AO)(),r=[];for(let a=0,n=e.length;a<n;a+=3){let n=l.AO.fromArray((0,l.AO)(),e,a);r.push(n),l.AO.add(t,t,n)}l.AO.scale(t,t,1/(e.length/3));let a=0;for(let e of r){let r=l.AO.distance(t,e);r>a&&(a=r)}let n=s.CP.create(t,a);return s.CP.setExtrema(n,r),n}(m.cornerBuffer.ref.value);s.CP.copy(c,t),d=e}return c},setBoundingSphere(e){s.CP.copy(c,e),d=a(m)},hasBoundingSphere:()=>d===a(m)};return m}(e,t,r,n,i,o)}
2831function a(e){return(0,n.nF)([e.cornerBuffer.ref.version])}function A(e){let a=(0,o.l3)(0,4,Uint8Array),n=e?e.cornerBuffer.ref.value:new Float32Array(24);return r(a,n,(0,o.l3)(0,4,Uint8Array),(0,o.l3)(0,1,Float32Array),t(),-1,e)}function w(e,t){return(0,i.OF)(1,1,1,()=>y.ad)}function D(e,t,r,a,n){let{instanceCount:i,groupCount:c}=r,y=w(e,t),I=(0,p.is)(r,y,a.color),A=n.instanceGranularity?(0,f.eL)(i,"instance"):(0,f.eL)(i*c,"groupInstance"),D=(0,m.wS)(),E=(0,h.PG)(),M=(0,T.ur)(),P=(0,S.mQ)(),k=(0,b.cO)(),B={drawCount:C.length,vertexCount:x.GK.length/3,groupCount:c,instanceCount:i},_=s.CP.clone(e.boundingSphere),R=(0,o.Lo)(_,t.aTransform.ref.value,i,0);return{dGeometryType:u.IO.create("image"),...I,...A,...D,...E,...M,...P,...k,...t,...d.ev.createValues(n,B),aPosition:e.cornerBuffer,aUv:u.IO.create(O),elements:u.IO.create(C),aGroup:u.IO.create((0,g.d_)(new Float32Array(4))),boundingSphere:u.IO.create(R),invariantBoundingSphere:u.IO.create(_),uInvariantBoundingSphere:u.IO.create(l.T8.ofSphere(_)),dInterpolation:u.IO.create(n.interpolation),uImageTexDim:e.imageTextureDim,tImageTex:e.imageTexture,tGroupTex:e.groupTexture,tValueTex:e.valueTexture,uTrimType:e.trimType,uTrimCenter:e.trimCenter,uTrimRotation:e.trimRotation,uTrimScale:e.trimScale,uTrimTransform:e.trimTransform,uIsoLevel:e.isoLevel}}e.createEmptyTrim=t,e.create=r,e.createEmpty=A,e.Params={...d.ev.Params,interpolation:c.e.Select("bspline",c.e.objectToOptions(I))},e.Utils={Params:e.Params,createEmpty:A,createValues:D,createValuesSimple:function(t,r,a,n,i){let o=d.ev.createSimple(a,n,i),s={...c.e.getDefaultValues(e.Params),...r};return D(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){d.ev.updateValues(e,t),u.IO.updateIfChanged(e.dInterpolation,t.interpolation)},updateBoundingSphere:function(e,t){let r=s.CP.clone(t.boundingSphere),a=(0,o.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);s.CP.equals(a,e.boundingSphere.ref.value)||u.IO.update(e.boundingSphere,a),s.CP.equals(r,e.invariantBoundingSphere.ref.value)||(u.IO.update(e.invariantBoundingSphere,r),u.IO.update(e.uInvariantBoundingSphere,l.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=d.ev.createRenderableState(e);return t.opaque=!1,t},updateRenderableState:function(e,t){d.ev.updateRenderableState(e,t),e.opaque=!1},createPositionIterator:w}}(a||(a={}))},64690:function(e,t,r){r.d(t,{Qy:function(){return l},St:function(){return s},gt:function(){return u},xA:function(){return o}});var a=r(34602),n=r(34813),i=r(14086);function o(){return i.e.Group({color:i.e.Color(a.Il.fromRgb(76,76,76)),colorStrength:i.e.Numeric(1,{min:0,max:1,step:.01}),substance:n.F.getParam(),substanceStrength:i.e.Numeric(1,{min:0,max:1,step:.01})})}function s(e,t){return e.color===t.color&&e.colorStrength===t.colorStrength&&n.F.areEqual(e.substance,t.substance)&&e.substanceStrength===t.substanceStrength}function l(e,t){return a.Il.toArrayNormalized(e.color,t,0),t[3]=e.colorStrength,t}function u(e,t){return n.F.toArrayNormalized(e.substance,t,0),t[3]=e.substanceStrength,t}},13070:function(e,t,r){r.d(t,{R:function(){return a},l:function(){return n}});var a,n,i=r(69062),o=r(96046),s=r(87144);let l=i.pS.add,u=i.pS.add2,c=i.pS.add3,d=(0,s.AO)(),p=(0,s.AO)(),f=(0,s.AO)();(a||(a={})).create=function(e=2048,t=1024,r){let a=i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),n=i.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),u=i.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),m=(e,t,r,i,o,s,d)=>{for(let p=0;p<4;++p)c(n,e,t,r),c(u,i,o,s),l(a,d)},h=(e,t,r,a)=>{let n=s.AO.distance(e,t),i=r%2!=0,o=Math.floor((r+1)/2);s.AO.setMagnitude(f,s.AO.sub(f,t,e),n/(r+.5)),s.AO.copy(d,e);for(let e=0;e<o;++e)s.AO.add(d,d,f),i&&e===o-1?s.AO.copy(p,t):s.AO.add(p,d,f),m(d[0],d[1],d[2],p[0],p[1],p[2],a),s.AO.add(d,d,f)};return{add:m,addVec:(e,t,r)=>{for(let i=0;i<4;++i)c(n,e[0],e[1],e[2]),c(u,t[0],t[1],t[2]),l(a,r)},addFixedCountDashes:h,addFixedLengthDashes:(e,t,r,a)=>{let n=s.AO.distance(e,t);h(e,t,n/r,a)},addCage:(e,t,r)=>{let{vertices:a,edges:n}=t;for(let t=0,i=n.length;t<i;t+=2)s.AO.fromArray(d,a,3*n[t]),s.AO.fromArray(p,a,3*n[t+1]),s.AO.transformMat4(d,d,e),s.AO.transformMat4(p,p,e),m(d[0],d[1],d[2],p[0],p[1],p[2],r)},getLines:()=>{let e=a.elementCount/4,t=a.elementCount,s=i.pS.compact(a,!0),l=i.pS.compact(n,!0),c=i.pS.compact(u,!0),d=r&&e<=r.lineCount&&0===r.stripCount.ref.value?r.mappingBuffer.ref.value:new Float32Array(8*e),p=r&&e<=r.lineCount&&0===r.stripCount.ref.value?r.indexBuffer.ref.value:new Uint32Array(6*e),f=r?r.stripBuffer.ref.value:new Uint32Array(0);return(!r||e>r.lineCount||r.stripCount.ref.value>0)&&function(e,t,r){for(let r=0;r<e;++r){let e=8*r;t[e]=-1,t[e+1]=-1,t[e+2]=1,t[e+3]=-1,t[e+4]=-1,t[e+5]=1,t[e+6]=1,t[e+7]=1}for(let t=0;t<e;++t){let e=4*t,a=6*t;r[a]=e,r[a+1]=e+1,r[a+2]=e+2,r[a+3]=e+1,r[a+4]=e+3,r[a+5]=e+2}}(e,d,p),o.x.create(d,p,s,l,c,f,e,t,0,r)}}},(n||(n={})).create=function(e=2048,t=1024,r){let a=i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),n=i.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),s=i.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),d=i.pS.create(Float32Array,2,t,r?r.mappingBuffer.ref.value:e),p=i.pS.create(Uint32Array,3,t,r?r.indexBuffer.ref.value:e),f=i.pS.create(Uint32Array,1,t,r?r.stripBuffer.ref.value:e),m=0,h=0,g=0,b=0,y=0,x=0,S=(e,t,r)=>{if(0===h){g=a.elementCount,b=e,y=t,x=r,h=1;return}let i=a.elementCount;
28311===h&&(c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,-1,-1),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,1,-1)),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,-1,1),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,1,1);let o=1===h?g:i-2,f=1===h?i+2:i;c(p,o,o+1,f),c(p,o+1,f+1,f),b=e,y=t,x=r,h++};return{start:e=>{m=e,h=0,0===f.elementCount&&l(f,0)},add:(e,t,r)=>{S(e,t,r)},addVec:e=>{S(e[0],e[1],e[2])},end:()=>{h=0,l(f,a.elementCount)},getLines:()=>{let e=p.elementCount/2,t=a.elementCount,l=f.elementCount-1,u=i.pS.compact(a,!0),c=i.pS.compact(n,!0),m=i.pS.compact(s,!0),h=i.pS.compact(d,!0),g=i.pS.compact(p,!0),b=i.pS.compact(f,!0);return o.x.create(h,g,u,c,m,b,e,t,l,r)}}}},96046:function(e,t,r){r.d(t,{x:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(13070),p=r(14086),f=r(62927),m=r(48930),h=r(54185),g=r(5514),b=r(38788),y=r(69062),x=r(22444),S=r(41723),T=r(4249);!function(e){function t(e,t,r,i,s,l,u,c,d,p){return p?((u>p.lineCount||d!==p.stripCount.ref.value||d>0)&&(n.IO.update(p.mappingBuffer,e),n.IO.update(p.indexBuffer,t)),p.lineCount=u,p.vertexCount=c,n.IO.update(p.groupBuffer,r),n.IO.update(p.startBuffer,i),n.IO.update(p.endBuffer,s),n.IO.updateIfChanged(p.stripCount,d),n.IO.update(p.stripBuffer,l),p):function(e,t,r,i,s,l,u,c,d){let p;let h=(0,m.CP)(),g=-1,b=-1,y={kind:"lines",lineCount:u,vertexCount:c,mappingBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),groupBuffer:n.IO.create(r),startBuffer:n.IO.create(i),endBuffer:n.IO.create(s),stripCount:n.IO.create(d),stripBuffer:n.IO.create(l),get boundingSphere(){let e=a(y);if(e!==g){let t=(0,f.Yx)(y.startBuffer.ref.value,4*y.lineCount,4),r=(0,f.Yx)(y.endBuffer.ref.value,4*y.lineCount,4);m.CP.expandBySphere(h,t,r),g=e}return h},get groupMapping(){return y.groupBuffer.ref.version!==b&&(p=(0,o.r8)(y.groupBuffer.ref.value,y.lineCount,4),b=y.groupBuffer.ref.version),p},setBoundingSphere(e){m.CP.copy(h,e),g=a(y)},hasBoundingSphere:()=>g===a(y)};return y}(e,t,r,i,s,l,u,c,d)}function r(e){let r=e?e.mappingBuffer.ref.value:new Float32Array(0),a=e?e.indexBuffer.ref.value:new Uint32Array(0),n=e?e.groupBuffer.ref.value:new Float32Array(0);return t(r,a,n,e?e.startBuffer.ref.value:new Float32Array(0),e?e.endBuffer.ref.value:new Float32Array(0),e?e.stripBuffer.ref.value:new Uint32Array(0),0,0,0,e)}function a(e){return(0,y.nF)([e.lineCount,e.vertexCount,e.mappingBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.startBuffer.ref.version,e.endBuffer.ref.version,e.stripCount.ref.version,e.stripBuffer.ref.version])}function C(e,t){let r=4*e.lineCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.startBuffer.ref.value,l=e.endBuffer.ref.value,u=t.aTransform.ref.value;return(0,c.OF)(r,a,2,(e,t)=>{let r=e%4==0?s:l;return t<0?i.AO.fromArray(o,r,3*e):i.AO.transformMat4Offset(o,r,u,0,3*e,16*t),n})}function O(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,p=C(e,t),y=(0,s.is)(r,p,a.color),O=(0,u.H4)(r,p,a.size),I=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),A=(0,g.wS)(),w=(0,b.PG)(),D=(0,T.ur)(),E=(0,S.mQ)(),M=(0,x.cO)(),P={drawCount:6*e.lineCount,vertexCount:e.vertexCount,groupCount:d,instanceCount:c},k=m.CP.clone(e.boundingSphere),B=(0,f.Lo)(k,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("lines"),aMapping:e.mappingBuffer,aGroup:e.groupBuffer,aStart:e.startBuffer,aEnd:e.endBuffer,elements:e.indexBuffer,boundingSphere:n.IO.create(B),invariantBoundingSphere:n.IO.create(k),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(k)),...y,...O,...I,...A,...w,...D,...E,...M,...t,...h.ev.createValues(o,P),uSizeFactor:n.IO.create(o.sizeFactor),dLineSizeAttenuation:n.IO.create(o.lineSizeAttenuation),uDoubleSided:n.IO.create(!0),dFlipSided:n.IO.create(!1),stripCount:e.stripCount,stripOffsets:e.stripBuffer}}e.create=t,e.createEmpty=r,e.fromMesh=function(e,t){let r=e.vertexBuffer.ref.value,a=e.indexBuffer.ref.value,n=e.groupBuffer.ref.value,i=d.R.create(3*e.triangleCount,e.triangleCount/10,t);for(let t=0,o=3*e.triangleCount;t<o;t+=3){let e=a[t],o=a[t+1],s=a[t+2],l=r[3*e],u=r[3*e+1],c=r[3*e+2],d=r[3*o],p=r[3*o+1],f=r[3*o+2],m=r[3*s],h=r[3*s+1],g=r[3*s+2];i.add(l,u,c,d,p,f,n[e]),i.add(l,u,c,m,h,g,n[e]),i.add(d,p,f,m,h,g,n[o])}return i.getLines()},e.transform=function(e,t){let r=e.startBuffer.ref.value;(0,o.ST)(t,r,0,e.vertexCount),n.IO.update(e.startBuffer,r);let a=e.endBuffer.ref.value;(0,o.ST)(t,a,0,e.vertexCount),n.IO.update(e.endBuffer,a)},e.Params={...h.ev.Params,sizeFactor:p.e.Numeric(2,{min:0,max:10,step:.1}),lineSizeAttenuation:p.e.Boolean(!1)},e.Utils={Params:e.Params,createEmpty:r,createValues:O,createValuesSimple:function(t,r,a,n,i){let o=h.ev.createSimple(a,n,i),s={...p.e.getDefaultValues(e.Params),...r};return O(t,o.transform,o.locationIterator,o.theme,s)}
2831,updateValues:function(e,t){h.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.dLineSizeAttenuation,t.lineSizeAttenuation)},updateBoundingSphere:function(e,t){let r=m.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);m.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),m.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:h.ev.createRenderableState,updateRenderableState:h.ev.updateRenderableState,createPositionIterator:C}}(a||(a={}))},85688:function(e,t,r){r.d(t,{eL:function(){return l},pq:function(){return s}});var a=r(68303),n=r(87144),i=r(62927);let o=new Uint8Array(772);function s(e,t){if(0===t)return 0;let r=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),a=t-4>>2,n=4*a,i=0;if(a<0)for(let r=0;r<t;++r)i+=e[r]&&1;else{for(let e=0;e<a;++e){let t=r[e];i+=o[65535&t]+o[t>>16]}for(let r=n;r<t;++r)i+=e[r]&&1}return i/t}function l(e,t,r){let o=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tMarker.ref.value.array),l=s(o.array,e),u=0===l?0:-1;return r?(a.IO.updateIfChanged(r.uMarker,0),a.IO.update(r.tMarker,o),a.IO.update(r.uMarkerTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.markerAverage,l),a.IO.updateIfChanged(r.markerStatus,u),a.IO.updateIfChanged(r.dMarkerType,t),r):{uMarker:a.IO.create(0),tMarker:a.IO.create(o),uMarkerTexDim:a.IO.create(n.Sg.create(o.width,o.height)),markerAverage:a.IO.create(l),markerStatus:a.IO.create(u),dMarkerType:a.IO.create(t)}}o[1]=1,o[2]=1,o[3]=1,o[256]=1,o[512]=1,o[768]=1,o[257]=2,o[513]=2,o[769]=2,o[258]=2,o[514]=2,o[770]=2,o[259]=2,o[515]=2,o[771]=2,new Uint8Array(1)},84785:function(e,t,r){r.d(t,{vA:function(){return I},mB:function(){return O},ZI:function(){return A},OA:function(){return w}});var a=r(87144),n=r(89623),i=r(81725);let o={radiusTop:1,radiusBottom:1,height:1,radialSegments:8,heightSegments:1,topCap:!1,bottomCap:!1,thetaStart:0,thetaLength:2*Math.PI};var s=r(32635),l=r(90308),u=r(69062);let c=new Map,d=a.AO.create(0,1,0),p=(0,a.AO)(),f=(0,a.AO)(),m=(0,a.AO)(),h=(0,a.yb)(),g=(0,a.yb)(),b=(0,a.AO)(),y=(0,a.AO)(),x=(0,a.AO)();function S(e,t,r,n,i){return a.AO.setMagnitude(f,r,n/2),a.AO.add(m,t,f),i?a.AO.matchDirection(x,d,f):a.AO.copy(x,d),a.AO.set(b,1,n,1),a.AO.makeRotation(g,x,f),a.yb.scale(e,g,b),a.yb.setTranslation(e,m)}let T=new Int32Array(9);function C(e){var t,r,n,d,p,f,m,h,g;let b=(T[0]=Math.round(1e3*(null!==(t=e.radiusTop)&&void 0!==t?t:o.radiusTop)),T[1]=Math.round(1e3*(null!==(r=e.radiusBottom)&&void 0!==r?r:o.radiusBottom)),T[2]=Math.round(1e3*(null!==(n=e.height)&&void 0!==n?n:o.height)),T[3]=null!==(d=e.radialSegments)&&void 0!==d?d:o.radialSegments,T[4]=null!==(p=e.heightSegments)&&void 0!==p?p:o.heightSegments,T[5]=(null!==(f=e.topCap)&&void 0!==f?f:
2831o.topCap)?1:0,T[6]=(null!==(m=e.bottomCap)&&void 0!==m?m:o.bottomCap)?1:0,T[7]=Math.round(1e3*(null!==(h=e.thetaStart)&&void 0!==h?h:o.thetaStart)),T[8]=Math.round(1e3*(null!==(g=e.thetaLength)&&void 0!==g?g:o.thetaLength)),(0,u.nF)(T)),y=c.get(b);if(void 0===y){if(e.radialSegments&&e.radialSegments<=4){let t=Math.max(3,e.radialSegments),r=(0,s.p1)((0,l.y)(t,!0,e.radiusTop),e);y=(0,i.ik)(r,a.yb.rotX90)}else y=function(e){let{radiusTop:t,radiusBottom:r,height:n,radialSegments:i,heightSegments:s,topCap:l,bottomCap:u,thetaStart:c,thetaLength:d}={...o,...e},p=[],f=[],m=[],h=0,g=[],b=n/2;return function(){let e=a.AO.zero(),o=(r-t)/n;for(let l=0;l<=s;++l){let u=[],p=l/s,y=p*(r-t)+t;for(let t=0;t<=i;++t){let r=t/i*d+c,s=Math.sin(r),l=Math.cos(r);f.push(y*s,-p*n+b,y*l),a.AO.normalize(e,a.AO.set(e,s,o,l)),m.push(...e),u.push(h++)}g.push(u)}for(let e=0;e<i;++e)for(let t=0;t<s;++t){let r=g[t][e],a=g[t+1][e],n=g[t+1][e+1],i=g[t][e+1];p.push(r,a,i),p.push(a,n,i)}}(),l&&t>0&&y(!0),u&&r>0&&y(!1),{vertices:new Float32Array(f),normals:new Float32Array(m),indices:new Uint32Array(p)};function y(e){let a=!0===e?t:r,n=!0===e?1:-1,o=h;for(let e=1;e<=i;++e)f.push(0,b*n,0),m.push(0,n,0),++h;let s=h;for(let e=0;e<=i;++e){let t=e/i*d+c,r=Math.cos(t),o=Math.sin(t);f.push(a*o,b*n,a*r),m.push(0,n,0),++h}for(let t=0;t<i;++t){let r=o+t,a=s+t;!0===e?p.push(a,a+1,r):p.push(a+1,a,r)}}}(e);c.set(b,y)}return y}function O(e,t,r,a){S(h,t.origin,t.direction,r,!1),n.V.addPrimitive(e,h,C(a))}function I(e,t,r,i,o){let s=a.AO.distance(t,r)*i;a.AO.sub(p,r,t),S(h,t,p,s,!0),n.V.addPrimitive(e,h,C(o))}function A(e,t,r,i,o,s){let l=a.AO.distance(t,r)*i,u=C(s);a.AO.sub(p,r,t),a.AO.add(y,t,o),S(h,y,p,l,!0),n.V.addPrimitive(e,h,u),a.AO.sub(y,t,o),S(h,y,p,l,!0),n.V.addPrimitive(e,h,u)}function w(e,t,r,i,o,s,l){let u=a.AO.distance(t,r)*i,c=o%2!=0,d=Math.floor((o+1)/2),f=u/(o+.5),m=C(l);a.AO.setMagnitude(p,a.AO.sub(p,r,t),f),a.AO.copy(y,t);for(let t=0;t<d;++t)a.AO.add(y,y,p),c&&t===d-1&&(!s&&l.topCap&&(l.topCap=!1,m=C(l)),f/=2),S(h,y,p,f,!1),n.V.addPrimitive(e,h,m),a.AO.add(y,y,p)}},98338:function(e,t,r){r.d(t,{j:function(){return l}});var a=r(87144),n=r(89623),i=r(34748);let o=a.yb.identity(),s=(0,a.AO)();function l(e,t,r,l,u,c){n.V.addPrimitive(e,(a.AO.add(s,t,r),a.yb.targetTo(o,t,s,l),a.yb.setTranslation(o,t),a.yb.scale(o,o,u)),(0,i.L)(c))}},34748:function(e,t,r){r.d(t,{H:function(){return u},L:function(){return l}});var a=r(87144),n=r(89623),i=r(93964);let o=new Map,s=a.yb.identity();function l(e){let t=o.get(e);return void 0===t&&(t=(0,i.a)(e),o.set(e,t)),t}
2831function u(e,t,r,i){n.V.addPrimitive(e,a.yb.scaleUniformly(s,a.yb.fromTranslation(s,t),r),l(i))}},53608:function(e,t,r){r.d(t,{x:function(){return C}});var a=r(87144),n=r(69062);let i=(0,a.AO)(),o=(0,a.AO)(),s=(0,a.AO)(),l=(0,a.AO)(),u=(0,a.AO)(),c=(0,a.AO)();function d(e,t,r,a,n){e[0]=t[0]*a+r[0]*n,e[1]=t[1]*a+r[1]*n,e[2]=t[2]*a+r[2]*n}function p(e,t,r,a,n,i){e[0]=t[0]*n+r[0]*i+a[0],e[1]=t[1]*n+r[1]*i+a[1],e[2]=t[2]*n+r[2]*i+a[2]}let f=a.AO.fromArray,m=a.AO.normalize,h=a.AO.scaleAndAdd,g=a.AO.cross,b=a.AO.slerp,y=a.AO.dot,x=a.AO.unitX,S=n.pS.add3,T=new Map;function C(e,t,r,a,C,O,I,A,w,D,E,M=!1){let P;let{currentGroup:k,vertices:B,normals:_,indices:R,groups:F}=e,L=B.elementCount,{cos:z,sin:N}=function(e,t){let r=t?1:0,a=(0,n.FY)(e,r);if(!T.has(a)){let t=[],n=[];for(let a=0;a<e;++a){let i=(2*a+r)/e*Math.PI;t[a]=Math.cos(i),n[a]=Math.sin(i)}T.set(a,{cos:t,sin:n})}return T.get(a)}(O,"rounded"===E),G=Math.round(O/4),U=3*G,V=M&&C&&(w||D),j=V&&w&&D;j&&(P=C/2);for(let e=0;e<=C;++e){let n;let T=3*e;f(u,r,T),f(c,a,T),f(l,t,T);let D=I[e],M=A[e];if(V){let t=j?e<=P:w;D*=n=j?Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((t?P-e:e-P)/P,2))):Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((t?C-e:e)/C,2))),M*=n,g(o,t?c:u,t?u:c),m(o,o)}let k="rounded"===E&&M>D;for(let e=0;e<O;++e)k?(p(s,u,c,l,D*z[e],D*N[e]),h(s,s,u,0>y(c,x)?e<G||e>=U?M-D:-M+D:e>=G&&e<U?-M+D:M-D),e===G||e===G-1?d(i,u,c,0,1):e===U||e===U-1?d(i,u,c,0,-1):d(i,u,c,z[e],N[e])):(p(s,u,c,l,M*z[e],D*N[e]),d(i,u,c,D*z[e],M*N[e])),m(i,i),S(B,s[0],s[1],s[2]),V&&b(i,o,i,n),S(_,i[0],i[1],i[2])}let H=Math.round(O/2);for(let e=0;e<C;++e){for(let t=0;t<H;++t)S(R,L+e*O+(t+1)%O,L+(e+1)*O+(t+1)%O,L+e*O+t),S(R,L+(e+1)*O+(t+1)%O,L+(e+1)*O+t,L+e*O+t);for(let t=H;t<O;++t)S(R,L+e*O+(t+1)%O,L+(e+1)*O+t,L+e*O+t),S(R,L+(e+1)*O+(t+1)%O,L+(e+1)*O+t,L+e*O+(t+1)%O)}if(w){let e=B.elementCount;f(u,r,0),f(c,a,0),f(l,t,0),g(i,c,u),S(B,l[0],l[1],l[2]),S(_,i[0],i[1],i[2]);let n=V?0:I[0],o=V?0:A[0],d="rounded"===E&&o>n;d&&(o-=n),L=B.elementCount;for(let t=0;t<O;++t)d?(p(s,u,c,l,n*z[t],n*N[t]),h(s,s,u,t<G||t>=U?o:-o)):p(s,u,c,l,o*z[t],n*N[t]),S(B,s[0],s[1],s[2]),S(_,i[0],i[1],i[2]),S(R,L+(t+1)%O,L+t,e)}if(D){let e=3*C,n=B.elementCount;f(u,r,e),f(c,a,e),f(l,t,e),g(i,u,c),S(B,l[0],l[1],l[2]),S(_,i[0],i[1],i[2]);let o=V?0:I[C],d=V?0:A[C],m="rounded"===E&&d>o;m&&(d-=o),L=B.elementCount;for(let e=0;e<O;++e)m?(p(s,u,c,l,o*z[e],o*N[e]),h(s,s,u,e<G||e>=U?d:-d)):p(s,u,c,l,d*z[e],o*N[e]),S(B,s[0],s[1],s[2]),S(_,i[0],i[1],i[2]),S(R,L+e,L+(e+1)%O,n)}n.pS.addRepeat(F,(C+1)*O+(w?O+1:0)+(D?O+1:0),k)}},82471:function(e,t,r){r.d(t,{EH:function(){return f},FK:function(){return p},Z9:function(){return m},hp:function(){return d},kU:function(){return c}});var a=r(62927),n=r(48930),i=r(23833),o=r(87144),s=r(39967),l=r(85764);function u(e,t,r,l){let{colorType:u,vertexCount:c,groupCount:d,positionBuffer:p,instanceBuffer:f,transformBuffer:m,groupBuffer:h,itemSize:g}=e,{resolution:b,stride:y}=t,x=u.endsWith("Instance"),S=n.XZ.fromSphere3D((0,n.XZ)(),x?e.boundingSphere:e.invariantBoundingSphere),T=1+b,C=n.XZ.expand((0,n.XZ)(),S,o.AO.create(T,T,T)),O=1/b,I=n.XZ.scale((0,n.XZ)(),C,O),A=n.XZ.size((0,o.AO)(),I);o.AO.ceil(A,A),o.AO.add(A,A,o.AO.create(2,2,2));let{min:w}=C,[D,E]=A,{width:M,height:P}=(0,s.f$)(A),k=new Float32Array(M*P*g),B=new Float32Array(M*P),_=new Uint8Array(M*P*g),R=x?e.instanceCount:1,F=e.colorData.array,[L,z,N]=A,G=(0,o.AO)();for(let e=0;e<R;++e){let t=r&&x?f[e]:e;for(let r=0;r<c;r+=y){o.AO.fromArray(G,p,3*r),x&&o.AO.transformMat4Offset(G,G,m,0,0,16*e),o.AO.sub(G,G,w),o.AO.scale(G,G,O);let[a,n,i]=G,s=Math.floor(a),l=Math.floor(n),u=Math.floor(i),c=(t*d+h[r])*g,f=Math.max(0,s-2),b=Math.max(0,l-2),y=Math.max(0,u-2),S=Math.min(L,s+2+2),T=Math.min(z,l+2+2),C=Math.min(N,u+2+2);for(let e=f;e<S;++e){let t=e-a;for(let r=b;r<T;++r){let a=r-n;for(let n=y;n<C;++n){let o=n-i,s=Math.sqrt(t*t+a*a+o*o);if(s>2)continue;let l=2-s,u=function(e,t,r){let a=Math.floor(r*D%M/D);return g*(Math.floor(r*D/M)*E*M+t*M+(a*D+e))}(e,r,n);for(let e=0;e<g;++e)k[u+e]+=F[c+e]*l;B[u/g]+=l}}}}}for(let e=0,t=B.length;e<t;++e){let t=e*g,r=B[e];for(let e=0;e<g;++e)_[t+e]=Math.round(k[t+e]/r)}let U=o.Sg.create(M,P),V=o.T8.create(w[0],w[1],w[2],O),j=x?"volumeInstance":"volume";if(r){if(!l){let e=4===g?"rgba":3===g?"rgb":"alpha";l=r.resources.texture("image-uint8",e,"ubyte","linear")}return l.load({array:_,width:M,height:P,filter:"linear"}),{kind:"volume",texture:l,gridTexDim:U,gridDim:A,gridTransform:V,type:j}}{let e=function(e){let{vertexCount:t,positionBuffer:r,transformBuffer:n,grid:s,gridDim:l,gridTexDim:u,gridTransform:c,vertexStride:d,colorStride:p}=e,f=e.itemOffset||0,m=e.outputStride;if(m+f>p)throw Error("outputStride + itemOffset must NOT be larger than colorStride");let h=e.colorType.endsWith("Instance"),g=h?e.instanceCount:1,b=(0,a.l3)(Math.max(1,g*t),m,Uint8Array),{array:y}=b,[x,S]=l,T=u[0],C=o.AO.fromArray((0,o.AO)(),c,0),O=c[3];function I(e,t,r){let a=Math.floor(r*x%T/x);return p*(Math.floor(r*x/T)*S*T+t*T+(a*x+e))}let A=(0,o.AO)(),w=(0,o.AO)(),D=(0,o.AO)(),E=(0,o.AO)();for(let e=0;e<g;++e)for(let a=0;a<t;
2831++a){o.AO.fromArray(A,r,a*d),h&&o.AO.transformMat4Offset(A,A,n,0,0,16*e),o.AO.sub(A,A,C),o.AO.scale(A,A,O),o.AO.floor(w,A),o.AO.ceil(D,A),o.AO.sub(E,A,w),o.AO.sub(A,D,w),o.AO.div(E,E,A);let[l,u,c]=w,[p,g,b]=D,[x,S,T]=E,M=I(l,u,c)+f,P=I(p,u,c)+f,k=I(l,u,b)+f,B=I(p,u,b)+f,_=I(l,g,c)+f,R=I(p,g,c)+f,F=I(l,g,b)+f,L=I(p,g,b)+f,z=(e*t+a)*m;for(let e=0;e<m;++e){let t=s[M+e],r=s[P+e],a=s[k+e],n=s[B+e],o=s[_+e],l=s[R+e],u=s[F+e],c=s[L+e],d=(0,i.t7)(t,r,x),p=(0,i.t7)(a,n,x),f=(0,i.t7)(o,l,x),m=(0,i.t7)(u,c,x),h=(0,i.t7)(d,f,S),g=(0,i.t7)(p,m,S);y[z+e]=(0,i.t7)(h,g,T)}}return b}({vertexCount:c,instanceCount:R,transformBuffer:m,positionBuffer:p,colorType:j,grid:_,gridDim:A,gridTexDim:U,gridTransform:V,vertexStride:3,colorStride:g,outputStride:g});return{kind:"vertex",texture:e,texDim:o.Sg.create(e.width,e.height),type:x?"vertexInstance":"vertex"}}}function c(e,t,r,a){var n;if(!("group"===(n=e.dColorType.ref.value)||"groupInstance"===n))return;let i=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tColor.ref.value,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:3},t,r,a);"volume"===i.kind?(l.IO.updateIfChanged(e.dColorType,i.type),l.IO.update(e.tColorGrid,i.texture),l.IO.update(e.uColorTexDim,i.gridTexDim),l.IO.update(e.uColorGridDim,i.gridDim),l.IO.update(e.uColorGridTransform,i.gridTransform)):"vertex"===i.kind&&(l.IO.updateIfChanged(e.dColorType,i.type),l.IO.update(e.tColor,i.texture),l.IO.update(e.uColorTexDim,i.texDim))}function d(e,t,r,a){if("groupInstance"!==e.dOverpaintType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tOverpaint.ref.value,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dOverpaintType,n.type),l.IO.update(e.tOverpaintGrid,n.texture),l.IO.update(e.uOverpaintTexDim,n.gridTexDim),l.IO.update(e.uOverpaintGridDim,n.gridDim),l.IO.update(e.uOverpaintGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dOverpaintType,n.type),l.IO.update(e.tOverpaint,n.texture),l.IO.update(e.uOverpaintTexDim,n.texDim))}function p(e,t,r,a){if("groupInstance"!==e.dTransparencyType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tTransparency.ref.value,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dTransparencyType,n.type),l.IO.update(e.tTransparencyGrid,n.texture),l.IO.update(e.uTransparencyTexDim,n.gridTexDim),l.IO.update(e.uTransparencyGridDim,n.gridDim),l.IO.update(e.uTransparencyGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dTransparencyType,n.type),l.IO.update(e.tTransparency,n.texture),l.IO.update(e.uTransparencyTexDim,n.texDim))}function f(e,t,r,a){if("groupInstance"!==e.dEmissiveType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tEmissive.ref.value,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dEmissiveType,n.type),l.IO.update(e.tEmissiveGrid,n.texture),l.IO.update(e.uEmissiveTexDim,n.gridTexDim),l.IO.update(e.uEmissiveGridDim,n.gridDim),l.IO.update(e.uEmissiveGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dEmissiveType,n.type),l.IO.update(e.tEmissive,n.texture),l.IO.update(e.uEmissiveTexDim,n.texDim))}function m(e,t,r,a){if("groupInstance"!==e.dSubstanceType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tSubstance.ref.value,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dSubstanceType,n.type),l.IO.update(e.tSubstanceGrid,n.texture),l.IO.update(e.uSubstanceTexDim,n.gridTexDim),l.IO.update(e.uSubstanceGridDim,n.gridDim),l.IO.update(e.uSubstanceGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dSubstanceType,n.type),l.IO.update(e.tSubstance,n.texture),l.IO.update(e.uSubstanceTexDim,n.texDim))}},89623:function(e,t,r){r.d(t,{V:function(){return a}});var a,n=r(87144),i=r(69062),o=r(4376),s=r(34748),l=r(84785);let u=(0,n.AO)(),c=(0,n.Tu)(),d=(0,n.AO)(),p=(0,n.AO)(),f=(0,n.AO)(),m=(0,n.AO)(),h=n.AO.fromArray,g=n.AO.triangleNormal,b=n.AO.copy,y=n.AO.transformMat4,x=n.AO.transformMat3,S=n.Tu.directionTransform,T=i.pS.add3,C=i.pS.add;!function(e){function t(e,t,r,a){let{vertices:n,normals:i,indices:o,groups:s,currentGroup:l}=e,c=n.elementCount;T(n,t[0],t[1],t[2]),T(n,r[0],r[1],r[2]),T(n,a[0],a[1],a[2]),g(u,t,r,a);for(let e=0;e<3;++e)T(i,u[0],u[1],u[2]),C(s,l);T(o,c,c+1,c+2)}function r(e,t,r,a,n){let{vertices:i,normals:o,indices:s,groups:l,currentGroup:u}=e,c=i.elementCount;T(i,t[0],t[1],t[2]),T(i,r[0],r[1],r[2]),T(i,a[0],a[1],a[2]);for(let e=0;e<3;++e)T(o,n[0],n[1],n[2]),C(l,u);T(s,c,c+1,c+2)}function a(e,t,r){let{vertices:a,normals:n,indices:i}=r,{vertices:o,normals:s,indices:l,groups:d,currentGroup:p}=e,f=o.elementCount,m=S(c,t);for(let e=0,r=a.length;e<r;e+=3)y(u,h(u,a,e),t),T(o,u[0],u[1],u[2]),x(u,h(u,n,e),m),T(s,u[0],u[1],u[2]),C(d,p);for(let e=0,t=i.length;e<t;e+=3)T(l,i[e]+f,i[e+1]+f,i[e+2]+f)}e.createState=function(e=2048,t=1024,r){return{currentGroup:-1,vertices:i.pS.create(Float32Array,3,t,r?r.vertexBuffer.ref.value:e),normals:i.pS.create(Float32Array,3,t,r?r.normalBuffer.ref.value:e),indices:i.pS.create(Uint32Array,3,3*t,r?r.indexBuffer.ref.value:3*e),groups:i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),mesh:r}},e.addTriangle=t,e.addTriangleWithNormal=r,e.addTriangleStrip=function(e,r,a){h(f,r,3*a[0]),h(m,r,3*a[1]);for(let n=2,i=a.length;n<i;n+=2)b(d,f),b(p,m),h(f,r,3*a[n]),h(m,r,3*a[n+1]),t(e,d,p,f),t(e,p,m,f)},e.addTriangleFan=function(e,r,a){h(d,r,3*a[0]);for(let n=2,i=a.length;n<i;++n)h(p,r,3*a[n-1]),h(f,r,3*a[n]),t(e,d,f,p)},e.addTriangleFanWithNormal=function(e,t,a,n){h(d,t,3*a[0]);for(let i=2,o=a.length;i<o;++i)h(p,t,3*a[i-1]),h(f,t,3*a[i]),r(e,d,f,p,n)},e.addPrimitive=a,e.addPrimitiveFlipped=function(e,t,r){let{vertices:a,normals:n,indices:i}=r,{vertices:o,normals:s,indices:l,groups:d,currentGroup:p}=e,f=o.elementCount,m=S(c,t);for(let e=0,r=a.length;e<r;e+=3)y(u,h(u,a,e),t),T(o,u[0],u[1],u[2]),x(u,h(u,n,e),m),T(s,-u[0],-u[1],-u[2]),C(d,p);for(let e=0,t=i.length;e<t;e+=3)T(l,i[e+2]+f,i[e+1]+f,i[e]+f)},e.addCage=function(e,t,r,a,n,i){let{vertices:o,edges:u}
2831=r,c={radiusTop:a,radiusBottom:a,radialSegments:i};for(let r=0,i=u.length;r<i;r+=2)h(d,o,3*u[r]),h(p,o,3*u[r+1]),y(d,d,t),y(p,p,t),(0,s.H)(e,d,a,n),(0,s.H)(e,p,a,n),(0,l.vA)(e,d,p,1,c)},e.addMesh=function(e,t,r){a(e,t,{vertices:r.vertexBuffer.ref.value.subarray(0,3*r.vertexCount),normals:r.normalBuffer.ref.value.subarray(0,3*r.vertexCount),indices:r.indexBuffer.ref.value.subarray(0,3*r.triangleCount)})},e.getMesh=function(e){let{vertices:t,normals:r,indices:a,groups:n,mesh:s}=e,l=i.pS.compact(t,!0),u=i.pS.compact(a,!0),c=i.pS.compact(r,!0),d=i.pS.compact(n,!0);return o.K.create(l,u,c,d,e.vertices.elementCount,e.indices.elementCount,s)}}(a||(a={}))},4376:function(e,t,r){r.d(t,{K:function(){return a}});var a,n=r(85764),i=r(87144),o=r(48930),s=r(23789),l=r(85688),u=r(72558),c=r(69587),d=r(69062),p=r(14086),f=r(62927),m=r(54185),h=r(5514),g=r(38788),b=r(22444),y=r(36111),x=r(58463),S=r(41723),T=r(4249),C=r(64690);!function(e){function t(e,t,r,i,l,u,c){return c?(c.vertexCount=l,c.triangleCount=u,n.IO.update(c.vertexBuffer,e),n.IO.update(c.indexBuffer,t),n.IO.update(c.normalBuffer,r),n.IO.update(c.groupBuffer,i),c):function(e,t,r,i,l,u){let c;let d=(0,o.CP)(),p=-1,m=-1,h={kind:"mesh",vertexCount:l,triangleCount:u,vertexBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),normalBuffer:n.IO.create(r),groupBuffer:n.IO.create(i),varyingGroup:n.IO.create(!1),get boundingSphere(){let e=a(h);if(e!==p){let t=(0,f.Yx)(h.vertexBuffer.ref.value,h.vertexCount,1);o.CP.copy(d,t),p=e}return d},get groupMapping(){return h.groupBuffer.ref.version!==m&&(c=(0,s.r8)(h.groupBuffer.ref.value,h.vertexCount),m=h.groupBuffer.ref.version),c},setBoundingSphere(e){o.CP.copy(d,e),p=a(h)},hasBoundingSphere:()=>p===a(h),meta:{}};return h}(e,t,r,i,l,u)}function r(e){let r=e?e.vertexBuffer.ref.value:new Float32Array(0);return t(r,e?e.indexBuffer.ref.value:new Uint32Array(0),e?e.normalBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,0,e)}function a(e){return(0,d.nF)([e.vertexCount,e.triangleCount,e.vertexBuffer.ref.version,e.indexBuffer.ref.version,e.normalBuffer.ref.version,e.groupBuffer.ref.version])}e.create=t,e.createEmpty=r,e.computeNormals=function(e){let{vertexCount:t,triangleCount:r}=e,a=e.vertexBuffer.ref.value,i=e.indexBuffer.ref.value,o=e.normalBuffer.ref.value.length>=3*t?e.normalBuffer.ref.value:new Float32Array(3*t);o===e.normalBuffer.ref.value&&o.fill(0,0,3*t),(0,s.wR)(a,i,o,t,r),n.IO.update(e.normalBuffer,o)},e.checkForDuplicateVertices=function(e,t=3){let r=e.vertexBuffer.ref.value,a=new Map,n=(e,t)=>`${e[0].toFixed(t)}|${e[1].toFixed(t)}|${e[2].toFixed(t)}`,o=0,s=(0,i.AO)();for(let l=0,u=e.vertexCount;l<u;++l){i.AO.fromArray(s,r,3*l);let e=n(s,t),u=a.get(e);void 0!==u?(o+=1,a.set(e,u+1)):a.set(e,1)}return o};let O=(0,i.Tu)();function I(e){let{vertexCount:t,triangleCount:r}=e,a=e.indexBuffer.ref.value,n=[];for(let e=0;e<t;++e)n[e]=[];for(let e=0;e<r;++e){let t=a[3*e],r=a[3*e+1],i=a[3*e+2];(0,y.S8)(n[t],r),(0,y.S8)(n[t],i),(0,y.S8)(n[r],t),(0,y.S8)(n[r],i),(0,y.S8)(n[i],t),(0,y.S8)(n[i],r)}return n}function A(e){let{triangleCount:t}=e,r=e.indexBuffer.ref.value,a=new Map,n=(e,t)=>{let r=(0,d.Yd)(e,t),n=a.get(r)||0;a.set(r,n+1)};for(let e=0;e<t;++e){let t=r[3*e],a=r[3*e+1],i=r[3*e+2];n(t,a),n(t,i),n(a,i)}return a}function w(e){let t=new Set,r=[0,0];return e.forEach((e,a)=>{1===e&&((0,d.zI)(r,a),t.add(r[0]),t.add(r[1]))}),t}function D(e,t,r){let a=new Map,n=(e,t)=>{a.has(e)?(0,y.S8)(a.get(e),t):a.set(e,[t])};return t.forEach(a=>{for(let i of e[a])t.has(i)&&1===r.get((0,d.Yd)(a,i))&&n(a,i)}),a}function E(e,t){let r=e.vertexCount,a=t.instanceCount.ref.value,n=(0,u.cH)(),o=n.position,s=n.normal,l=e.vertexBuffer.ref.value,c=e.normalBuffer.ref.value,d=t.aTransform.ref.value;return(0,u.OF)(r,a,1,(e,t)=>(t<0?(i.AO.fromArray(o,l,3*e),i.AO.fromArray(s,c,3*e)):(i.AO.transformMat4Offset(o,l,d,0,3*e,16*t),i.AO.transformDirectionOffset(s,c,d,0,3*e,16*t)),n))}function M(e,t,r,a,s){let{instanceCount:u,groupCount:d}=r,p=E(e,t),y=(0,c.is)(r,p,a.color),x=s.instanceGranularity?(0,l.eL)(u,"instance"):(0,l.eL)(u*d,"groupInstance"),O=(0,h.wS)(),I=(0,g.PG)(),A=(0,T.ur)(),w=(0,S.mQ)(),D=(0,b.cO)(),M={drawCount:3*e.triangleCount,vertexCount:e.vertexCount,groupCount:d,instanceCount:u},P=o.CP.clone(e.boundingSphere),k=(0,f.Lo)(P,t.aTransform.ref.value,u,0);return{dGeometryType:n.IO.create("mesh"),aPosition:e.vertexBuffer,aNormal:e.normalBuffer,aGroup:e.groupBuffer,elements:e.indexBuffer,dVaryingGroup:e.varyingGroup,boundingSphere:n.IO.create(k),invariantBoundingSphere:n.IO.create(P),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(P)),...y,...x,...O,...I,...A,...w,...D,...t,...m.ev.createValues(s,M),uDoubleSided:n.IO.create(s.doubleSided),dFlatShaded:n.IO.create(s.flatShaded),dFlipSided:n.IO.create(s.flipSided),dIgnoreLight:n.IO.create(s.ignoreLight),dCelShaded:n.IO.create(s.celShaded),dXrayShaded:n.IO.create("inverted"===s.xrayShaded?"inverted":!0===s.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(s.transparentBackfaces),uBumpFrequency:n.IO.create(s.bumpFrequency),uBumpAmplitude:n.IO.create(s.bumpAmplitude),uInteriorColor:n.IO.create((0,C.Qy)(s.interior,(0,i.T8)())),uInteriorSubstance:n.IO.create((0,C.gt)(s.interior,(0,i.T8)())),meta:n.IO.create(e.meta)}}function P(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xraySha
2831ded,e.writeDepth=e.opaque}e.transform=function(e,t){let r=e.vertexBuffer.ref.value;if((0,s.ST)(t,r,0,e.vertexCount),!i.yb.isTranslationAndUniformScaling(t)){let r=i.Tu.directionTransform(O,t);(0,s.f9)(r,e.normalBuffer.ref.value,0,e.vertexCount)}n.IO.update(e.vertexBuffer,r)},e.getOriginalData=function(e){let{originalData:t}="kind"in e?e.meta:e.meta.ref.value;return t},e.uniformTriangleGroup=function(e,t=!0){let{indexBuffer:r,vertexBuffer:a,groupBuffer:o,normalBuffer:s,triangleCount:l,vertexCount:u}=e,c=r.ref.value,p=a.ref.value,f=o.ref.value,m=s.ref.value,h=d.pS.create(Uint32Array,3,1024,l),g=d.pS.create(Float32Array,3,1024,p);g.currentIndex=3*u,g.elementCount=u;let b=d.pS.create(Float32Array,3,1024,m);b.currentIndex=3*u,b.elementCount=u;let y=d.pS.create(Float32Array,1,1024,f);y.currentIndex=u,y.elementCount=u;let x=(0,i.AO)(),S=(0,i.AO)(),T=(0,i.AO)(),C=(0,i.AO)(),O=(0,i.AO)(),I=(0,i.AO)();function A(e){i.AO.fromArray(x,p,3*e),i.AO.fromArray(C,m,3*e),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function w(e,t){i.AO.fromArray(x,p,3*e),i.AO.fromArray(S,p,3*t),i.AO.scale(x,i.AO.add(x,x,S),.5),i.AO.fromArray(C,m,3*e),i.AO.fromArray(O,m,3*t),i.AO.scale(C,i.AO.add(C,C,O),.5),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function D(e,t,r){i.AO.fromArray(x,p,3*e),i.AO.fromArray(S,p,3*t),i.AO.fromArray(T,p,3*r),i.AO.scale(x,i.AO.add(x,i.AO.add(x,x,S),T),1/3),i.AO.fromArray(C,m,3*e),i.AO.fromArray(O,m,3*t),i.AO.fromArray(I,m,3*r),i.AO.scale(C,i.AO.add(C,i.AO.add(C,C,O),I),1/3),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function E(e,t,r,a,n){++P,A(e),w(e,t),w(e,r),d.pS.add3(h,M,M+1,M+2);for(let e=0;e<3;++e)d.pS.add(y,a);M+=3,P+=2,A(t),A(r),w(e,t),w(e,r),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,n);M+=4}let M=u,P=0;if(t)for(let e=0;e<l;++e){let t=c[3*e],r=c[3*e+1],a=c[3*e+2],n=f[t],i=f[r],o=f[a];if(n===i&&n===o)++P,d.pS.add3(h,t,r,a);else if(n===i)E(a,t,r,o,n);else if(n===o)E(r,a,t,i,o);else if(i===o)E(t,r,a,n,i);else{P+=2,A(t),w(t,r),w(t,a),D(t,r,a),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,n);M+=4,P+=2,A(r),w(r,a),w(r,t),D(t,r,a),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,i);M+=4,P+=2,A(a),w(a,r),w(a,t),D(t,r,a),d.pS.add3(h,M+3,M+1,M),d.pS.add3(h,M+2,M+3,M);for(let e=0;e<4;++e)d.pS.add(y,o);M+=4}}else for(let e=0;e<l;++e){let t=c[3*e],r=c[3*e+1],a=c[3*e+2],n=f[t],i=f[r],o=f[a];if(n!==i||n!==o){++P,A(t),A(r),A(a),d.pS.add3(h,M,M+1,M+2);let e=i===o?i:n;for(let t=0;t<3;++t)d.pS.add(y,e);M+=3}else++P,d.pS.add3(h,t,r,a)}let k=d.pS.compact(h),B=d.pS.compact(g),_=d.pS.compact(b),R=d.pS.compact(y);return e.vertexCount=M,e.triangleCount=P,n.IO.update(a,B),n.IO.update(o,R),n.IO.update(r,k),n.IO.update(s,_),e.meta.originalData={indexBuffer:c,vertexCount:u,triangleCount:l},e},e.smoothEdges=function(e,t){!function(e,t){let{indexBuffer:r,triangleCount:a}=e,i=r.ref.value,o=d.pS.create(Uint32Array,3,1024,a),s=0;for(let e=0;e<a;++e){let r=i[3*e],a=i[3*e+1],n=i[3*e+2];2!==t[r].length&&2!==t[a].length&&2!==t[n].length&&(d.pS.add3(o,r,a,n),s+=1)}let l=d.pS.compact(o);e.triangleCount=s,n.IO.update(r,l)}(e,I(e));for(let r=0;r<10;++r){let r=e.triangleCount,a=A(e),o=I(e),s=D(o,w(a),a);if(function(e,t,r,a){var o;let{vertexBuffer:s,indexBuffer:l,normalBuffer:u,triangleCount:c}=e,p=s.ref.value,f=l.ref.value,m=u.ref.value,h=d.pS.create(Uint32Array,3,1024,c),g=0;for(let e=0;e<c;++e)d.pS.add3(h,f[3*e],f[3*e+1],f[3*e+2]),g+=1;let b=(0,i.AO)(),y=(0,i.AO)(),S=(0,i.AO)(),T=(0,i.AO)(),C=(0,i.AO)(),O=(0,i.AO)(),I=(0,i.AO)(),A=(0,i.AO)(),w=(0,i.AO)(),D=(0,i.AO)(),E=(0,x.Id)(120),M=new Set,P=Array.from(r.keys()).filter(e=>r.get(e).length<2).map(e=>{let t=r.get(e);return i.AO.fromArray(b,p,3*e),i.AO.fromArray(y,p,3*t[0]),i.AO.fromArray(S,p,3*t[1]),i.AO.sub(C,y,b),i.AO.sub(O,S,b),[e,i.AO.angle(C,O)]});for(let[e,n]of(P.sort(([,e],[,t])=>e-t),P)){if(M.has(e)||n>E)continue;let s=r.get(e);if(t[s[0]].includes(s[1])&&!(null===(o=r.get(s[0]))||void 0===o?void 0:o.includes(s[1]))||(i.AO.fromArray(b,p,3*e),i.AO.fromArray(y,p,3*s[0]),i.AO.fromArray(S,p,3*s[1]),i.AO.sub(C,y,b),i.AO.sub(O,S,b),i.AO.add(A,C,O),i.AO.squaredDistance(b,y)>=a))continue;let l=!1;for(let r of t[e])if(!s.includes(r)&&(i.AO.fromArray(T,p,3*r),i.AO.sub(I,T,b),0>i.AO.dot(A,I))){l=!0;break}l&&(i.AO.fromArray(w,m,3*e),i.AO.triangleNormal(D,b,y,S),i.AO.dot(D,w)>0?d.pS.add3(h,e,s[0],s[1]):d.pS.add3(h,s[1],s[0],e),M.add(e),M.add(s[0]),M.add(s[1]),g+=1)}let k=d.pS.compact(h);e.triangleCount=g,n.IO.update(l,k)}(e,o,s,t.maxNewEdgeLength*t.maxNewEdgeLength),e.triangleCount===r)break}let r=A(e),a=I(e);return function(e,t,r){let{iterations:a,lambda:o}=r,s=(0,i.AO)(),l=(0,i.AO)(),u=(0,i.AO)(),c=(0,i.AO)(),d=-o,p=new Float32Array(e.vertexBuffer.ref.value.length),f=r=>{let a=e.vertexBuffer.ref.value;p.set(a),t.forEach((e,t)=>{if(2!==e.length)return;i.AO.fromArray(s,a,3*t),i.AO.fromArray(l,a,3*e[0]),i.AO.fromArray(u,a,3*e[1]);let n=1/i.AO.distance(s,l),o=1/i.AO.distance(s,u);i.AO.scale(l,l,n),i.AO.scale(u,u,o),i.AO.add(c,l,u),i.AO.scale(c,c,1/(n+o)),i.AO.sub(c,c,s),i.AO.scale(c,c,r),i.AO.add(c,s,c
2831),i.AO.toArray(c,p,3*t)});let o=e.vertexBuffer.ref.value;n.IO.update(e.vertexBuffer,p),p=o};for(let e=0;e<a;++e)f(o),f(d)}(e,D(a,w(r),r),{iterations:t.iterations,lambda:.5}),e},e.Params={...m.ev.Params,doubleSided:p.e.Boolean(!1,m.ev.CustomQualityParamInfo),flipSided:p.e.Boolean(!1,m.ev.ShadingCategory),flatShaded:p.e.Boolean(!1,m.ev.ShadingCategory),ignoreLight:p.e.Boolean(!1,m.ev.ShadingCategory),celShaded:p.e.Boolean(!1,m.ev.ShadingCategory),xrayShaded:p.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],m.ev.ShadingCategory),transparentBackfaces:p.e.Select("off",p.e.arrayToOptions(["off","on","opaque"]),m.ev.ShadingCategory),bumpFrequency:p.e.Numeric(0,{min:0,max:10,step:.1},m.ev.ShadingCategory),bumpAmplitude:p.e.Numeric(1,{min:0,max:5,step:.1},m.ev.ShadingCategory),interior:(0,C.xA)()},e.Utils={Params:e.Params,createEmpty:r,createValues:M,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...p.e.getDefaultValues(e.Params),...r};return M(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dFlatShaded,t.flatShaded),n.IO.updateIfChanged(e.dFlipSided,t.flipSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,C.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,C.gt)(t.interior,e.uInteriorSubstance.ref.value))},updateBoundingSphere:function(e,t){let r=o.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);o.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),o.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return P(t,e),t},updateRenderableState:P,createPositionIterator:E}}(a||(a={}))},5514:function(e,t,r){r.d(t,{cr:function(){return u},jp:function(){return l},mS:function(){return c},wS:function(){return p}});var a=r(68303),n=r(87144),i=r(62927),o=r(70371),s=r(91407);function l(e,t,r,a){for(let n=t;n<r;++n)o.Il.toArray(a,e,4*n),e[4*n+3]=255;return!0}function u(e,t,r){return e.fill(0,4*t,4*r),!0}function c(e,t,r){let o=(0,i.l3)(Math.max(1,e),4,Uint8Array,r&&r.tOverpaint.ref.value.array);return r?(a.IO.update(r.tOverpaint,o),a.IO.update(r.uOverpaintTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.dOverpaint,e>0),a.IO.updateIfChanged(r.dOverpaintType,t),r):{tOverpaint:a.IO.create(o),uOverpaintTexDim:a.IO.create(n.Sg.create(o.width,o.height)),dOverpaint:a.IO.create(e>0),tOverpaintGrid:a.IO.create((0,s.DU)()),uOverpaintGridDim:a.IO.create(n.AO.create(1,1,1)),uOverpaintGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dOverpaintType:a.IO.create(t),uOverpaintStrength:a.IO.create(1)}}let d={array:new Uint8Array(4),width:1,height:1};function p(e){return e?(a.IO.update(e.tOverpaint,d),a.IO.update(e.uOverpaintTexDim,n.Sg.create(1,1)),e):{tOverpaint:a.IO.create(d),uOverpaintTexDim:a.IO.create(n.Sg.create(1,1)),dOverpaint:a.IO.create(!1),tOverpaintGrid:a.IO.create((0,s.DU)()),uOverpaintGridDim:a.IO.create(n.AO.create(1,1,1)),uOverpaintGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dOverpaintType:a.IO.create("groupInstance"),uOverpaintStrength:a.IO.create(1)}}},80898:function(e,t,r){var a,n;r.d(t,{i:function(){return a}}),(n=a||(a={})).Null=16777214,n.areSame=function(e,t){return e.objectId===t.objectId&&e.instanceId===t.instanceId&&e.groupId===t.groupId}},89017:function(e,t,r){r.d(t,{U:function(){return a}});var a,n=r(69062),i=r(99696);let o=n.pS.add3,s=n.pS.add;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,3,t,r?r.centerBuffer.ref.value:e),l=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e);return{add:(e,t,r,n)=>
2831{o(a,e,t,r),s(l,n)},getPoints:()=>{let e=n.pS.compact(a,!0),t=n.pS.compact(l,!0);return i.w.create(e,t,a.elementCount,r)}}}},99696:function(e,t,r){r.d(t,{w:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(14086),p=r(62927),f=r(48930),m=r(54185),h=r(5514),g=r(38788),b=r(69062),y=r(22444),x=r(41723),S=r(4249);!function(e){function t(e,t,r,i){return i?(i.pointCount=r,n.IO.update(i.centerBuffer,e),n.IO.update(i.groupBuffer,t),i):function(e,t,r){let i;let s=(0,f.CP)(),l=-1,u=-1,c={kind:"points",pointCount:r,centerBuffer:n.IO.create(e),groupBuffer:n.IO.create(t),get boundingSphere(){let e=a(c);if(e!==l){let t=(0,p.Yx)(c.centerBuffer.ref.value,c.pointCount,1);f.CP.copy(s,t),l=e}return s},get groupMapping(){return c.groupBuffer.ref.version!==u&&(i=(0,o.r8)(c.groupBuffer.ref.value,c.pointCount),u=c.groupBuffer.ref.version),i},setBoundingSphere(e){f.CP.copy(s,e),l=a(c)},hasBoundingSphere:()=>l===a(c)};return c}(e,t,r)}function r(e){return t(e?e.centerBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,b.nF)([e.pointCount,e.centerBuffer.ref.version,e.groupBuffer.ref.version])}function T(e,t){let r=e.pointCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,c.OF)(r,a,1,(e,t)=>(t<0?i.AO.fromArray(o,s,3*e):i.AO.transformMat4Offset(o,s,l,0,3*e,16*t),n))}function C(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,b=T(e,t),C=(0,s.is)(r,b,a.color),O=(0,u.H4)(r,b,a.size),I=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),A=(0,h.wS)(),w=(0,g.PG)(),D=(0,S.ur)(),E=(0,x.mQ)(),M=(0,y.cO)(),P={drawCount:e.pointCount,vertexCount:e.pointCount,groupCount:d,instanceCount:c},k=f.CP.clone(e.boundingSphere),B=(0,p.Lo)(k,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("points"),aPosition:e.centerBuffer,aGroup:e.groupBuffer,boundingSphere:n.IO.create(B),invariantBoundingSphere:n.IO.create(k),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(k)),...C,...O,...I,...A,...w,...D,...E,...M,...t,...m.ev.createValues(o,P),uSizeFactor:n.IO.create(o.sizeFactor),dPointSizeAttenuation:n.IO.create(o.pointSizeAttenuation),dPointStyle:n.IO.create(o.pointStyle)}}function O(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&"fuzzy"!==t.pointStyle,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.transform=function(e,t){let r=e.centerBuffer.ref.value;(0,o.ST)(t,r,0,e.pointCount),n.IO.update(e.centerBuffer,r)},e.StyleTypes={square:"Square",circle:"Circle",fuzzy:"Fuzzy"},e.StyleTypeNames=Object.keys(e.StyleTypes),e.Params={...m.ev.Params,sizeFactor:d.e.Numeric(3,{min:0,max:10,step:.1}),pointSizeAttenuation:d.e.Boolean(!1),pointStyle:d.e.Select("square",d.e.objectToOptions(e.StyleTypes))},e.Utils={Params:e.Params,createEmpty:r,createValues:C,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return C(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.dPointSizeAttenuation,t.pointSizeAttenuation),n.IO.updateIfChanged(e.dPointStyle,t.pointStyle)},updateBoundingSphere:function(e,t){let r=f.CP.clone(t.boundingSphere),a=(0,p.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);f.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),f.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return O(t,e),t},updateRenderableState:O,createPositionIterator:T}}(a||(a={}))},17411:function(e,t,r){r.d(t,{H4:function(){return u},Mu:function(){return c}});var a=r(85764),n=r(87144),i=r(62927),o=r(71522),s=r(11803),l=r(81421);function u(e,t,r,u){switch(s.Z.getGranularity(e,r.granularity)){case"uniform":var c,f,m,h;return c=e,f=r.size,m=u,c.reset(),h=f(c.hasNext?c.move().location:o.ad),m?(a.IO.update(m.uSize,h),a.IO.updateIfChanged(m.dSizeType,"uniform"),m):{uSize:a.IO.create(h),tSize:a.IO.create(d),uSizeTexDim:a.IO.create(n.Sg.create(1,1)),dSizeType:a.IO.create("uniform")};case"instance":return function(e,t,r){let{instanceCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.instanceIndex),e.skipInstance()}return p(n,"instance",r)}(e,r.size,u);case"group":return function(e,t,r){let{groupCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.groupIndex)}return p(n,"group",r)}(e,r.size,u);case"groupInstance":return function(e,t,r){let{groupCount:a,instanceCount:n}=e,o=(0,i.l3)(Math.max(1,n*a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),o.array,3*r.index)}return p(o,"groupInstance",r)}(e,r.size,u);case"vertex":return function(e,t,r){let{groupCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.index)}return p(n,"vertex",r)}(t,r.size,u);case"vertexInstance":return function(e,t,r){let{groupCount:a,instanceCount:n}=e,o=(0,i.l3)(Math.max(1,n*a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),o.array,3*r.index)}return p(o,"vertexInstance",r)}(t,r.size,u)}}function c(e){switch(e.dSizeType.ref.value){case"uniform":return e.uSize.ref.value;case"instance":case"group":case"groupInstance":case"vertex":case"vertexInstance":let t=0,r=e.tSize.ref.value.array;for(let e=0,a=r.length;e<a;e+=3){let a=(0,l.UF)(r[e],r[e+1],r[e+2]);t<a&&(t=a)}return t/100}}let d={array:new Uint8Array(3),width:1,height:1};function p(e,t,r){return r?(a.IO.update(r.tSize,e),a.IO.update(r.uSizeTexDim,n.Sg.create(e.width,e.height)),a.IO.updateIfChanged(r.dSizeType,t),r):{uSize:a.IO.create(0),tSize:a.IO.create(e),uSizeTexDim:a.IO.create(n.Sg.create(e.width,e.height)),dSizeType:a.IO.create(t)}}},2544:function(e,t,r){r.d(t,{L:function(){return a}});var a,n=r(69062),i=r(39857);let o=n.pS.add3,s=n.pS.add;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,3,t,r?r.centerBuffer.ref.value:e),l=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e);return{add:(e,t,r,n)=>
2831{o(a,e,t,r),s(l,n)},getSpheres:()=>{let e=n.pS.compact(a,!0),t=n.pS.compact(l,!0);return i.s.create(e,t,a.elementCount,r)}}}},39857:function(e,t,r){r.d(t,{s:function(){return a}});var a,n=r(85764),i=r(14086),o=r(72558),s=r(69587),l=r(85688),u=r(62927),c=r(48930),d=r(17411),p=r(54185),f=r(5514),m=r(38788),h=r(69062),g=r(23789),b=r(22444),y=r(87144),x=r(41723),S=r(4249),T=r(64690);!function(e){function t(e,t,r,i){return i?(i.sphereCount=r,n.IO.update(i.centerBuffer,e),n.IO.update(i.groupBuffer,t),i.shaderData.update(),i):function(e,t,r){let i;let o=(0,c.CP)(),s=-1,l=-1,d=n.IO.create((0,u.l3)(1,4,Float32Array)),p=n.IO.create(y.Sg.create(0,0)),f=n.IO.create([]),m=n.IO.create(0),h={kind:"spheres",sphereCount:r,centerBuffer:n.IO.create(e),groupBuffer:n.IO.create(t),get boundingSphere(){let e=a(h);if(e!==s){let t=(0,u.Yx)(h.centerBuffer.ref.value,h.sphereCount,1);c.CP.copy(o,t),s=e}return o},get groupMapping(){return h.groupBuffer.ref.version!==l&&(i=(0,g.r8)(h.groupBuffer.ref.value,h.sphereCount),l=h.groupBuffer.ref.version),i},setBoundingSphere(e){c.CP.copy(o,e),s=a(h)},hasBoundingSphere:()=>s===a(h),shaderData:{positionGroup:d,texDim:p,lodLevels:f,sizeFactor:m,update(e){var t,r;let a=null!==(t=null==e?void 0:e.lodLevels)&&void 0!==t?t:I(f.ref.value),i=null!==(r=null==e?void 0:e.sizeFactor)&&void 0!==r?r:m.ref.value,o=w(a,i),s=(0,u.l3)(h.sphereCount,4,Float32Array,d.ref.value.array),l=C(s,h.centerBuffer.ref.value,h.groupBuffer.ref.value,h.sphereCount,o),c=l?O(a,i,l,h.sphereCount):[];n.IO.update(d,s),n.IO.update(p,y.Sg.set(p.ref.value,s.width,s.height)),n.IO.update(f,c),n.IO.update(m,i)}}};return h.shaderData.update(),h}(e,t,r)}function r(e){return t(e?e.centerBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,h.nF)([e.sphereCount,e.centerBuffer.ref.version,e.groupBuffer.ref.version])}function C(e,t,r,a,n){let{array:i}=e;if(0===n.length){for(let e=0;e<a;++e)i[4*e+0]=t[3*e+0],i[4*e+1]=t[3*e+1],i[4*e+2]=t[3*e+2],i[4*e+3]=r[e];return}let o=[0],s=0;for(let e=0,l=n.length;e<l;++e){let l=n[e];for(let o=0;o<a;++o){let a=!1;for(let t=0;t<e;++t)if(o%n[t]==0){a=!0;break}a||o%l!=0||(i[4*s+0]=t[3*o+0],i[4*s+1]=t[3*o+1],i[4*s+2]=t[3*o+2],i[4*s+3]=r[o],s+=1)}o.push(6*s)}return o}function O(e,t,r,a){return e.map((e,n)=>{let i=A(e,t);return[e.minDistance,e.maxDistance,e.overlap,r[r.length-1-n],Math.pow(Math.min(a,i),1/e.scaleBias),e.stride,e.scaleBias]})}function I(e){return e.map(e=>({minDistance:e[0],maxDistance:e[1],overlap:e[2],stride:e[5],scaleBias:e[6]}))}function A(e,t){return Math.max(1,Math.round(e.stride/Math.pow(t,e.scaleBias)))}function w(e,t){return e.map(e=>A(e,t)).reverse()}function D(e,t){let r=e.sphereCount,a=t.instanceCount.ref.value,n=(0,o.cH)(),i=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,o.OF)(r,a,1,(e,t)=>(t<0?y.AO.fromArray(i,s,3*e):y.AO.transformMat4Offset(i,s,l,0,3*e,16*t),n))}function E(e,t,r,a,i){let{instanceCount:o,groupCount:h}=r,g=D(e,t),C=(0,s.is)(r,g,a.color),O=(0,d.H4)(r,g,a.size),I=i.instanceGranularity?(0,l.eL)(o,"instance"):(0,l.eL)(o*h,"groupInstance"),A=(0,f.wS)(),w=(0,m.PG)(),E=(0,S.ur)(),M=(0,x.mQ)(),P=(0,b.cO)(),k={drawCount:6*e.sphereCount,vertexCount:6*e.sphereCount,groupCount:h,instanceCount:o},B=e.boundingSphere.radius?(0,d.Mu)(O)*i.sizeFactor:0,_=c.CP.expand((0,c.CP)(),e.boundingSphere,B),R=(0,u.Lo)(_,t.aTransform.ref.value,o,0);return e.shaderData.update({lodLevels:i.lodLevels,sizeFactor:i.sizeFactor}),{dGeometryType:n.IO.create("spheres"),uTexDim:e.shaderData.texDim,tPositionGroup:e.shaderData.positionGroup,boundingSphere:n.IO.create(R),invariantBoundingSphere:n.IO.create(_),uInvariantBoundingSphere:n.IO.create(y.T8.ofSphere(_)),...C,...O,...I,...A,...w,...E,...M,...P,...t,padding:n.IO.create(B),...p.ev.createValues(i,k),uSizeFactor:e.shaderData.sizeFactor,uDoubleSided:n.IO.create(i.doubleSided),dIgnoreLight:n.IO.create(i.ignoreLight),dCelShaded:n.IO.create(i.celShaded),dXrayShaded:n.IO.create("inverted"===i.xrayShaded?"inverted":!0===i.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(i.transparentBackfaces),dSolidInterior:n.IO.create(i.solidInterior),dClipPrimitive:n.IO.create(i.clipPr
2831imitive),dApproximate:n.IO.create(i.approximate),uAlphaThickness:n.IO.create(i.alphaThickness),uBumpFrequency:n.IO.create(i.bumpFrequency),uBumpAmplitude:n.IO.create(i.bumpAmplitude),uInteriorColor:n.IO.create((0,T.Qy)(i.interior,(0,y.T8)())),uInteriorSubstance:n.IO.create((0,T.gt)(i.interior,(0,y.T8)())),lodLevels:e.shaderData.lodLevels,centerBuffer:e.centerBuffer,groupBuffer:e.groupBuffer}}function M(e,t){p.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.Params={...p.ev.Params,sizeFactor:i.e.Numeric(1,{min:0,max:10,step:.1}),doubleSided:i.e.Boolean(!1,p.ev.CustomQualityParamInfo),ignoreLight:i.e.Boolean(!1,p.ev.ShadingCategory),celShaded:i.e.Boolean(!1,p.ev.ShadingCategory),xrayShaded:i.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],p.ev.ShadingCategory),transparentBackfaces:i.e.Select("off",i.e.arrayToOptions(["off","on","opaque"]),p.ev.ShadingCategory),solidInterior:i.e.Boolean(!0,p.ev.ShadingCategory),clipPrimitive:i.e.Boolean(!1,{...p.ev.ShadingCategory,description:"Clip whole sphere instead of cutting it."}),approximate:i.e.Boolean(!1,{...p.ev.ShadingCategory,description:"Faster rendering, but has artifacts."}),alphaThickness:i.e.Numeric(0,{min:0,max:20,step:1}
2831,{...p.ev.ShadingCategory,description:"If not zero, adjusts alpha for radius."}),bumpFrequency:i.e.Numeric(0,{min:0,max:10,step:.1},p.ev.ShadingCategory),bumpAmplitude:i.e.Numeric(1,{min:0,max:5,step:.1},p.ev.ShadingCategory),interior:(0,T.xA)(),lodLevels:i.e.ObjectList({minDistance:i.e.Numeric(0),maxDistance:i.e.Numeric(0),overlap:i.e.Numeric(0),stride:i.e.Numeric(0),scaleBias:i.e.Numeric(3,{min:.1,max:10,step:.1})},e=>`${e.stride}`,{...p.ev.CullingLodCategory,defaultValue:[]})},e.Utils={Params:e.Params,createEmpty:r,createValues:E,createValuesSimple:function(t,r,a,n,o){let s=p.ev.createSimple(a,n,o),l={...i.e.getDefaultValues(e.Params),...r};return E(t,s.transform,s.locationIterator,s.theme,l)},updateValues:function(e,t){p.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.dSolidInterior,t.solidInterior),n.IO.updateIfChanged(e.dClipPrimitive,t.clipPrimitive),n.IO.updateIfChanged(e.dApproximate,t.approximate),n.IO.updateIfChanged(e.uAlphaThickness,t.alphaThickness),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,T.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,T.gt)(t.interior,e.uInteriorSubstance.ref.value));let r=I(e.lodLevels.ref.value);if(!function(e,t){if(e.length!==t.length)return!1;for(let r=0,a=e.length;r<a;++r)if(e[r].maxDistance!==t[r].maxDistance||e[r].minDistance!==t[r].minDistance||e[r].overlap!==t[r].overlap||e[r].stride!==t[r].stride||e[r].scaleBias!==t[r].scaleBias)return!1;return!0}(t.lodLevels,r)){let r=e.uVertexCount.ref.value/6,a=w(t.lodLevels,t.sizeFactor),i=C(e.tPositionGroup.ref.value,e.centerBuffer.ref.value,e.groupBuffer.ref.value,r,a),o=i?O(t.lodLevels,t.sizeFactor,i,r):[];n.IO.update(e.tPositionGroup,e.tPositionGroup.ref.value),n.IO.update(e.lodLevels,o)}},updateBoundingSphere:function(e,t){let r=t.boundingSphere.radius?(0,d.Mu)(e)*e.uSizeFactor.ref.value:0,a=c.CP.expand((0,c.CP)(),t.boundingSphere,r),i=(0,u.Lo)(a,e.aTransform.ref.value,e.instanceCount.ref.value,0);c.CP.equals(i,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,i),c.CP.equals(a,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,a),n.IO.update(e.uInvariantBoundingSphere,y.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,a))),n.IO.update(e.padding,r)},createRenderableState:function(e){let t=p.ev.createRenderableState(e);return M(t,e),t},updateRenderableState:M,createPositionIterator:D}}(a||(a={}))},41723:function(e,t,r){r.d(t,{$l:function(){return c},fR:function(){return u},mQ:function(){return p},wD:function(){return l}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407),s=r(34813);function l(e,t,r,a){for(let n=t;n<r;++n)s.F.toArray(a,e,4*n),e[4*n+3]=255;return!0}function u(e,t,r){return e.fill(0,4*t,4*r),!0}function c(e,t,r){let s=(0,i.l3)(Math.max(1,e),4,Uint8Array,r&&r.tSubstance.ref.value.array);return r?(a.IO.update(r.tSubstance,s),a.IO.update(r.uSubstanceTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dSubstance,e>0),a.IO.updateIfChanged(r.dSubstanceType,t),r):{tSubstance:a.IO.create(s),uSubstanceTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dSubstance:a.IO.create(e>0),tSubstanceGrid:a.IO.create((0,o.DU)()),uSubstanceGridDim:a.IO.create(n.AO.create(1,1,1)),uSubstanceGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dSubstanceType:a.IO.create(t),uSubstanceStrength:a.IO.create(1)}}let d={array:new Uint8Array(4),width:1,height:1};function p(e){return e?(a.IO.update(e.tSubstance,d),a.IO.update(e.uSubstanceTexDim,n.Sg.create(1,1)),e):{tSubstance:a.IO.create(d),uSubstanceTexDim:a.IO.create(n.Sg.create(1,1)),dSubstance:a.IO.create(!1),tSubstanceGrid:a.IO.create((0,o.DU)()),uSubstanceGridDim:a.IO.create(n.AO.create(1,1,1)),uSubstanceGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dSubstanceType:a.IO.create("groupInstance"),uSubstanceStrength:a.IO.create(1)}}},47115:function(e,t,r){let a;r.d(t,{Uq:function(){return d},yW:function(){return c}});var n=r(14086);function i(e,t,r,a,n,i,s){for(let l=0;l<t;l++){for(let n=0;n<r;n++)a[n]=e[n*t+l];o(a,n,i,s,r);for(let a=0;a<r;a++)e[a*t+l]=n[a]}for(let l=0;l<r;l++){for(let r=0;r<t;r++)a[r]=e[l*t+r];o(a,n,i,s,t);for(let r=0;r<t;r++)e[l*t+r]=Math.sqrt(n[r])}}function o(e,t,r,a,n){r[0]=0,a[0]=Number.MIN_SAFE_INTEGER,a[1]=Number.MAX_SAFE_INTEGER;for(let t=1,i=0;t<n;t++){let n=(e[t]+t*t-(e[r[i]]+r[i]*r[i]))/(2*t-2*r[i]);for(;n<=a[i];)i--,n=(e[t]+t*t-(e[r[i]]+r[i]*r[i]))/(2*t-2*r[i]);r[++i]=t,a[i]=n,a[i+1]=Number.MAX_SAFE_INTEGER}for(let i=0,o=0;i<n;i++){for(;a[o+1]<i;)o++;t[i]=(i-r[o])*(i-r[o])+e[r[o]]}}var s=r(62927),l=r(11059);let u={};function c(e){let t=JSON.stringify(e);return void 0===u[t]&&(u[t]=new p(e)),u[t]}let d={fontFamily:n.e.Select("sans-serif",[["sans-serif","Sans Serif"],["monospace","Monospace"],["serif","Serif"],["cursive","Cursive"]]),fontQuality:n.e.Select(3,[[0,"lower"],[1,"low"],[2,"medium"],[3,"high"],[4,"higher"]]),fontStyle:n.e.Select("normal",[["normal","Normal"],["italic","Italic"],["oblique","Oblique"]]),fontVariant:n.e.Select("normal",[["normal","Normal"],["small-caps","Small Caps"]]),fontWeight:n.e.Select("normal",[["normal","Normal"],["bold","Bold"]])};class p{constructor(e={}){this.mapped={},this.scratchW=0,this.scratchH=0,this.currentX=0,this.currentY=0,this.cutoff=.5;let t={...n.e.getDefaultValues(d),...e};this.props=t;let r=64*(t.fontQuality+1);this.buffer=r/8,this.radius=r/3,this.lineHeight=Math.round(r+2*this.buffer+this.radius),this.maxWidth=Math.round(.75*this.lineHeight),this.texture=(0,s.l3)(350*this.lineHeight*this.maxWidth,1,Uint8Array),this.scratchContext=function(e,t,r){if(l.g)return(function(){if(!a)throw Error("When running in Node.js and wanting to use Canvas API, call mol-util/data-source's setCanvasModule function first and pass imported `canvas` module to it.");return a})().createCanvas(e,t).getContext("2d",r);{let a=document.createElement("canvas");return a.width=e,a.height=t,a.getContext("2d",r)}}(this.maxWidth,this.lineHeight,{willReadFrequently:!0}),this.scratchContext.font=`${t.fontStyle} ${t.fontVariant} ${t.fontWeight} ${r}px ${t.fontFamily}`,this.scratchContext.fillStyle="black",this.scratchContext.textBaseline="middle",this.scratchData=new Uint8Array(this.lineHeight*this.maxWidth),this.gridOuter=new Float64Array(this.lineHeight*this.maxWidth),this.gridInner=new Float64Array(this.lineHeight*this.maxWidth),this.f=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.d=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.z=new Float64Array(Math.max(this.lineHeight,this.maxWidth)+1),this.v=new Int16Array(Math.max(this.lineHeight,this.maxWidth)),this.middle=Math.ceil(this.lineHeight/2),this.placeholder=this.get(String.fromCharCode(65533))}get(e){if(void 0===this.mapped[e]){this.draw(e);let{array:t,width:r,height:a}=this.texture,n=this.scratchData;if(this.currentX+this.scratchW>r&&(this.currentX=0,this.currentY+=this.scratchH),this.currentY+this.scratchH>a)return console.warn("canvas to small"),this.placeholder;this.mapped[e]={x:this.currentX,y:this.currentY,w:this.scratchW,h:this.scratchH,nw:this.scratchW/this.lineHeight,nh:this.scratchH/this.lineHeight};for(let e=0;e<this.scratchH;++e)for(let a=0;a<this.scratchW;++a)t[r*(this.currentY+e)+this.currentX+a]=n[e*this.scratchW+a];this.currentX+=this.scratchW}return this.mapped[e]}draw(e){let t=this.lineHeight,r=this.scratchContext,a=this.scratchData,n=r.measureText(e),o=Math.min(this.maxWidth,Math.ceil(n.width+2*this.buffer)),s=o*t;r.clearRect(0,0,o,t),r.fillText(e,this.buffer,this.middle);let l=r.getImageData(0,0,o,t);for(let e=0;e<s;e++){let t=l.data[4*e+3]/255;this.gridOuter[e]=1===t?0:0===t?Number.MAX_SAFE_INTEGER:Math.pow(Math.max(0,.5-t),2),this.gridInner[e]=1===t?Number.MAX_SAFE_INTEGER:0===t?0:Math.pow(Math.max(0,t-.5),2)}i(this.gridOuter,o,t,this.f,this.d,this.v,this.z),i(this.gridInner,o,t,this.f,this.d,this.v,this.z);for(let e=0;e<s;e++){let t=this.gridOuter[e]-this.gridInner[e];a[e]=Math.max(0,Math.min(255,Math.round(255-255*(t/this.radius+this.cutoff))))}this.scratchW=o,this.scratchH=t}}},23844:function(e,t,r){r.d(t,{w:function(){return a}});var a,n=r(14086),i=r(69062),o=r(21071),s=r(47115),l=r(97667);let u=new Uint16Array([0,1,2,1,3,2]),c=i.pS.add3,d=i.pS.add2,p=i.pS.add;(a||(a={})).create=function(e={},t=2048,r=1024,a){t*=2,r*=2;let f=i.pS.create(Float32Array,3,r,a?a.centerBuffer.ref.value:t),m=i.pS.create(Float32Array,2,r,a?a.mappingBuffer.ref.value:t),h=i.pS.create(Float32Array,1,r,a?a.depthBuffer.ref.value:t),g=i.pS.create(Uint32Array,3,r,a?a.indexBuffer.ref.value:t),b=i.pS.create(Float32Array,1,r,a?a.groupBuffer.ref.value:t),y=i.pS.create(Float32Array,2,r,a?a.tcoordBuffer.ref.value:t),x={...n.e.getDefaultValues(o.x.Param
2831s),...e},{attachment:S,background:T,backgroundMargin:C,tether:O,tetherLength:I,tetherBaseWidth:A}=x,w=(0,s.yW)(x),D=.4*C,E=w.buffer/w.lineHeight,M=(e,t,r,a,n)=>{c(f,e,t,r),p(h,a),p(b,n)};return{add:(e,t,r,a,n,i,o)=>{let s,p,h=0,b=e.length;for(let t=0;t<b;++t)h+=w.get(e[t]).nw-2*E;if(s=S.startsWith("top")?.8:S.startsWith("middle")?.4:0,p=S.endsWith("right")?h:S.endsWith("center")?h/2:0,O)switch(S){case"bottom-left":p-=I/2+D+.1,s-=I/2+D;break;case"bottom-center":s-=I+D;break;case"bottom-right":p+=I/2+D+.1,s-=I/2+D;break;case"middle-left":p-=I+D+.1;break;case"middle-center":break;case"middle-right":p+=I+D+.1;break;case"top-left":p-=I/2+D+.1,s+=I/2+D;break;case"top-center":s+=I+D;break;case"top-right":p+=I/2+D+.1,s+=I/2+D}let x=(-p-D-.1)*i,C=(h-p+D+.1)*i,P=.5-s-.5*E,k=(P+.4+D)*i,B=(P-.4-D)*i;if(T){d(m,x,k),d(m,x,B),d(m,C,k),d(m,C,B);let e=f.elementCount;for(let e=0;e<4;++e)d(y,10,10),M(t,r,a,n,o);c(g,e+u[0],e+u[1],e+u[2]),c(g,e+u[3],e+u[4],e+u[5])}if(O){let e,s,u,p,h,b,T,O;let w=I*i,D=A*i;switch(S){case"bottom-left":e=x-w/2,u=x+D/2,h=x,T=x,s=B-w/2,p=B,b=B+D/2,O=B;break;case"bottom-center":e=0,u=D/2,h=-D/2,T=0,s=B-w,p=B,b=B,O=B;break;case"bottom-right":e=C+w/2,u=C,h=C-D/2,T=C,s=B-w/2,p=B+D/2,b=B,O=B;break;case"middle-left":e=x-w,u=x,h=x,T=x,s=0,p=-D/2,b=D/2,O=0;break;case"middle-center":e=0,u=0,h=0,T=0,s=0,p=0,b=0,O=0;break;case"middle-right":e=C+w,u=C,h=C,T=C,s=0,p=D/2,b=-D/2,O=0;break;case"top-left":e=x-w/2,u=x+D/2,h=x,T=x,s=k+w/2,p=k,b=k-D/2,O=k;break;case"top-center":e=0,u=D/2,h=-D/2,T=0,s=k+w,p=k,b=k,O=k;break;case"top-right":e=C+w/2,u=C,h=C-D/2,T=C,s=k+w/2,p=k-D/2,b=k,O=k;break;default:(0,l.UT)(S)}d(m,e,s),d(m,u,p),d(m,h,b),d(m,T,O);let E=f.elementCount;for(let e=0;e<4;++e)d(y,10,10),M(t,r,a,n,o);c(g,E,E+1,E+3),c(g,E,E+3,E+2)}p+=E,s+=E;let _=0;for(let l=0;l<b;++l){let h=w.get(e[l]),b=(_-p)*i,x=(_+h.nw-p)*i,S=(h.nh-s)*i,T=-s*i;d(m,b,S),d(m,b,T),d(m,x,S),d(m,x,T);let C=w.texture.width,O=w.texture.height;d(y,h.x/C,h.y/O),d(y,h.x/C,(h.y+h.h)/O),d(y,(h.x+h.w)/C,h.y/O),d(y,(h.x+h.w)/C,(h.y+h.h)/O),_+=h.nw-2*E;let I=f.elementCount;for(let e=0;e<4;++e)M(t,r,a,n,o);c(g,I+u[0],I+u[1],I+u[2]),c(g,I+u[3],I+u[4],I+u[5])}},getText:()=>{let e=w.texture,t=i.pS.compact(f,!0),r=i.pS.compact(m,!0),n=i.pS.compact(h,!0),s=i.pS.compact(g,!0),l=i.pS.compact(b,!0),u=i.pS.compact(y,!0);return o.x.create(e,t,r,n,s,l,u,g.elementCount/2,a)}}}},21071:function(e,t,r){r.d(t,{x:function(){return a}});var a,n=r(14086),i=r(85764),o=r(72558),s=r(69587),l=r(17411),u=r(85688),c=r(7922),d=r(48930),p=r(62927),f=r(70371),m=r(87144),h=r(47115),g=r(23833),b=r(54185),y=r(5514),x=r(38788),S=r(69062),T=r(23789),C=r(22444),O=r(41723),I=r(4249);function A(e,t,r,a){let n=0,i=0,o=0;for(let a=0,s=4*r;a<s;++a){let r=2*a,s=Math.abs(e[r]);s>n&&(n=s);let l=Math.abs(e[r+1]);l>i&&(i=l);let u=Math.abs(t[a]);u>o&&(o=u)}return Math.max(o,a*Math.sqrt(n*n+i*i))}!function(e){function t(e,t,r,n,o,s,l,u,c){return c?(c.charCount=u,i.IO.update(c.fontTexture,e),i.IO.update(c.centerBuffer,t),i.IO.update(c.mappingBuffer,r),i.IO.update(c.depthBuffer,n),i.IO.update(c.indexBuffer,o),i.IO.update(c.groupBuffer,s),i.IO.update(c.tcoordBuffer,l),c):function(e,t,r,n,o,s,l,u){let c;let f=(0,d.CP)(),m=-1,h=-1,g={kind:"text",charCount:u,fontTexture:i.IO.create(e),centerBuffer:i.IO.create(t),mappingBuffer:i.IO.create(r),depthBuffer:i.IO.create(n),indexBuffer:i.IO.create(o),groupBuffer:i.IO.create(s),tcoordBuffer:i.IO.create(l),get boundingSphere(){let e=a(g);if(e!==m){let t=(0,p.Yx)(g.centerBuffer.ref.value,4*g.charCount,4);d.CP.copy(f,t),m=e}return f},get groupMapping(){return g.groupBuffer.ref.version!==h&&(c=(0,T.r8)(g.groupBuffer.ref.value,g.charCount,4),h=g.groupBuffer.ref.version),c},setBoundingSphere(e){d.CP.copy(f,e),m=a(g)},hasBoundingSphere:()=>m===a(g)};return g}(e,t,r,n,o,s,l,u)}function r(e){let r=e?e.fontTexture.ref.value:(0,p.l3)(0,1,Uint8Array),a=e?e.centerBuffer.ref.value:new Float32Array(0),n=e?e.mappingBuffer.ref.value:new Float32Array(0),i=e?e.depthBuffer.ref.value:new Float32Array(0);return t(r,a,n,i,e?e.indexBuffer.ref.value:new Uint32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),e?e.tcoordBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,S.nF)([e.charCount,e.fontTexture.ref.version,e.centerBuffer.ref.version,e.mappingBuffer.ref.version,e.depthBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.tcoordBuffer.ref.version]
2831)}function w(e,t){let r=4*e.charCount,a=t.instanceCount.ref.value,n=(0,o.cH)(),i=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,o.OF)(r,a,4,(e,t)=>(t<0?m.AO.fromArray(i,s,3*e):m.AO.transformMat4Offset(i,s,l,0,3*e,16*t),n))}function D(e,t,r,a,n){let{instanceCount:o,groupCount:c}=r,h=w(e,t),S=(0,s.is)(r,h,a.color),T=(0,l.H4)(r,h,a.size),D=n.instanceGranularity?(0,u.eL)(o,"instance"):(0,u.eL)(o*c,"groupInstance"),E=(0,y.wS)(),M=(0,x.PG)(),P=(0,I.ur)(),k=(0,O.mQ)(),B=(0,C.cO)(),_={drawCount:6*e.charCount,vertexCount:4*e.charCount,groupCount:c,instanceCount:o},R=(0,l.Mu)(T)*n.sizeFactor,F=A(e.mappingBuffer.ref.value,e.depthBuffer.ref.value,e.charCount,R),L=d.CP.expand((0,d.CP)(),e.boundingSphere,F),z=(0,p.Lo)(L,t.aTransform.ref.value,o,0);return{dGeometryType:i.IO.create("text"),aPosition:e.centerBuffer,aMapping:e.mappingBuffer,aDepth:e.depthBuffer,aGroup:e.groupBuffer,elements:e.indexBuffer,boundingSphere:i.IO.create(z),invariantBoundingSphere:i.IO.create(L),uInvariantBoundingSphere:i.IO.create(m.T8.ofSphere(L)),...S,...T,...D,...E,...M,...P,...k,...B,...t,aTexCoord:e.tcoordBuffer,tFont:e.fontTexture,padding:i.IO.create(F),...b.ev.createValues(n,_),uSizeFactor:i.IO.create(n.sizeFactor),uBorderWidth:i.IO.create((0,g.uZ)(n.borderWidth,0,.5)),uBorderColor:i.IO.create(f.Il.toArrayNormalized(n.borderColor,m.AO.zero(),0)),uOffsetX:i.IO.create(n.offsetX),uOffsetY:i.IO.create(n.offsetY),uOffsetZ:i.IO.create(n.offsetZ),uBackgroun
2831dColor:i.IO.create(f.Il.toArrayNormalized(n.backgroundColor,m.AO.zero(),0)),uBackgroundOpacity:i.IO.create(n.backgroundOpacity)}}function E(e,t){b.ev.updateRenderableState(e,t),e.pickable=!1,e.opaque=!1,e.writeDepth=!0}e.create=t,e.createEmpty=r,e.Params={...b.ev.Params,...h.Uq,sizeFactor:n.e.Numeric(1,{min:0,max:10,step:.1}),borderWidth:n.e.Numeric(0,{min:0,max:.5,step:.01}),borderColor:n.e.Color(c.t.grey),offsetX:n.e.Numeric(0,{min:0,max:10,step:.1}),offsetY:n.e.Numeric(0,{min:0,max:10,step:.1}),offsetZ:n.e.Numeric(0,{min:0,max:10,step:.1}),background:n.e.Boolean(!1),backgroundMargin:n.e.Numeric(.2,{min:0,max:1,step:.01}),backgroundColor:n.e.Color(c.t.grey),backgroundOpacity:n.e.Numeric(1,{min:0,max:1,step:.01}),tether:n.e.Boolean(!1),tetherLength:n.e.Numeric(1,{min:0,max:5,step:.1}),tetherBaseWidth:n.e.Numeric(.3,{min:0,max:1,step:.01}),attachment:n.e.Select("middle-center",[["bottom-left","bottom-left"],["bottom-center","bottom-center"],["bottom-right","bottom-right"],["middle-left","middle-left"],["middle-center","middle-center"],["middle-right","middle-right"],["top-left","top-left"],["top-center","top-center"],["top-right","top-right"]])},e.Utils={Params:e.Params,createEmpty:r,createValues:D,createValuesSimple:function(t,r,a,i,o){let s=b.ev.createSimple(a,i,o),l={...n.e.getDefaultValues(e.Params),...r};return D(t,s.transform,s.locationIterator,s.theme,l)},updateValues:function(e,t){b.ev.updateValues(e,t),i.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),i.IO.updateIfChanged(e.uBorderWidth,t.borderWidth),f.Il.fromNormalizedArray(e.uBorderColor.ref.value,0)!==t.borderColor&&(f.Il.toArrayNormalized(t.borderColor,e.uBorderColor.ref.value,0),i.IO.update(e.uBorderColor,e.uBorderColor.ref.value)),i.IO.updateIfChanged(e.uOffsetX,t.offsetX),i.IO.updateIfChanged(e.uOffsetY,t.offsetY),i.IO.updateIfChanged(e.uOffsetZ,t.offsetZ),f.Il.fromNormalizedArray(e.uBackgroundColor.ref.value,0)!==t.backgroundColor&&(f.Il.toArrayNormalized(t.backgroundColor,e.uBackgroundColor.ref.value,0),i.IO.update(e.uBackgroundColor,e.uBackgroundColor.ref.value)),i.IO.updateIfChanged(e.uBackgroundOpacity,t.backgroundOpacity)},updateBoundingSphere:function(e,t){let r=(0,l.Mu)(e)*e.uSizeFactor.ref.value,a=A(e.aMapping.ref.value,e.aDepth.ref.value,t.charCount,r),n=d.CP.expand((0,d.CP)(),t.boundingSphere,a),o=(0,p.Lo)(n,e.aTransform.ref.value,e.instanceCount.ref.value,0);d.CP.equals(o,e.boundingSphere.ref.value)||i.IO.update(e.boundingSphere,o),d.CP.equals(n,e.invariantBoundingSphere.ref.value)||(i.IO.update(e.invariantBoundingSphere,n),i.IO.update(e.uInvariantBoundingSphere,m.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,n))),i.IO.update(e.padding,a)},createRenderableState:function(e){let t=b.ev.createRenderableState(e);return E(t,e),t},updateRenderableState:E,createPositionIterator:w}}(a||(a={}))},94133:function(e,t,r){r.d(t,{jW:function(){return E},Pl:function(){return k},xp:function(){return M},z6:function(){return B},qZ:function(){return P}});var a=r(85764),n=r(62113),i=r(91407),o=r(45705),s=r(57155),l=r(18406),u=r(10410);let c=`
2832precision highp float;
2833precision highp sampler2D;
2834
2835uniform sampler2D tColor;
2836uniform sampler2D tCount;
2837uniform vec2 uTexSize;
2838
2839void main(void) {
2840    vec2 coords = gl_FragCoord.xy / uTexSize;
2841    vec4 color = texture2D(tColor, coords);
2842    float count = texture2D(tCount, coords).r;
2843
2844    gl_FragColor = color / count;
2845}
2846`;var d=r(68971),p=r(87144),f=r(48930);let m=`
2847precision highp float;
2848
2849varying vec3 vPosition;
2850varying vec4 vColor;
2851
2852uniform float uCurrentSlice;
2853uniform float uCurrentX;
2854uniform float uCurrentY;
2855uniform float uResolution;
2856
2857const float p = 2.0;
2858
2859void main() {
2860    vec2 v = gl_FragCoord.xy - vec2(uCurrentX, uCurrentY) - 0.5;
2861    vec3 fragPos = vec3(v.x, v.y, uCurrentSlice);
2862    float dist = distance(fragPos, vPosition);
2863    if (dist > p) discard;
2864
2865    float f = p - dist;
2866    gl_FragColor = vColor * f;
2867    gl_FragData[1] = vec4(f);
2868}
2869`,h=`
2870precision highp float;
2871
2872#include common
2873#include read_from_texture
2874
2875uniform int uGroupCount;
2876
2877attribute float aSample;
2878#define SampleID int(aSample)
2879
2880attribute mat4 aTransform;
2881attribute float aInstance;
2882
2883uniform vec2 uGeoTexDim;
2884uniform sampler2D tPosition;
2885uniform sampler2D tGroup;
2886
2887uniform vec2 uColorTexDim;
2888uniform sampler2D tColor;
2889
2890varying vec3 vPosition;
2891varying vec4 vColor;
2892
2893uniform vec3 uBboxSize;
2894uniform vec3 uBboxMin;
2895uniform float uResolution;
2896
2897void main() {
2898    vec3 position = readFromTexture(tPosition, SampleID, uGeoTexDim).xyz;
2899    float group = unpackRGBToInt(readFromTexture(tGroup, SampleID, uGeoTexDim).rgb);
2900
2901    position = (aTransform * vec4(position, 1.0)).xyz;
2902    gl_PointSize = 7.0;
2903    vPosition = (position - uBboxMin) / uResolution;
2904    gl_Position = vec4(((position - uBboxMin) / uBboxSize) * 2.0 - 1.0, 1.0);
2905
2906    #if defined(dColorType_group)
2907        vColor = readFromTexture(tColor, group, uColorTexDim);
2908    #elif defined(dColorType_groupInstance)
2909        vColor = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim);
2910    #endif
2911}
2912`;var g=r(62131),b=r(48502);let y={drawCount:(0,l.R$)("number"),instanceCount:(0,l.R$)("number"),stride:(0,l.R$)("number"),uGroupCount:(0,l.wt)("i","material"),aTransform:(0,l.LQ)("float32",16,1),aInstance:(0,l.LQ)("float32",1,1),aSample:(0,l.LQ)("float32",1,0),uGeoTexDim:(0,l.wt)("v2","material"),tPosition:(0,l.U2)("texture","rgba","float","nearest","material"),tGroup:(0,l.U2)("texture","rgba","float","nearest","material"),uColorTexDim:(0,l.wt)("v2","material"),tColor:(0,l.U2)("texture","rgba","ubyte","nearest","material"),dColorType:(0,l.O0)("string",["group","groupInstance","vertex","vertexInstance"]),uCurrentSlice:(0,l.wt)("f"),uCurrentX:(0,l.wt)("f"),uCurrentY:(0,l.wt)("f"),uBboxMin:(0,l.wt)("v3","material"),uBboxSize:(0,l.wt)("v3","material"),uResolution:(0,l.wt)("f","material")},x="color-accumulate",S="color-count";function T(e,t){let r=new Float32Array(e);for(let a=0;a<e;++a)r[a]=a*t;return r}let C={...d.iz,tColor:(0,l.U2)("texture","rgba","float","nearest"),tCount:(0,l.U2)("texture","alpha","float","nearest"),uTexSize:(0,l.wt)("v2")},O="color-normalize";function I(e,t,r,l){let{drawBuffers:I}=r.extensions;if(!I)throw Error("need WebGL draw buffers");b.kM&&r.timer.mark("calcTextureMeshColorSmoothing");let{gl:A,resources:w,state:D,extensions:{colorBufferHalfFloat:E,textureHalfFloat:M}}=r,{resolution:P,stride:k}=t,B=e.colorType.endsWith("Instance"),_=f.XZ.fromSphere3D((0,f.XZ)(),B?e.boundingSphere:e.invariantBoundingSphere),R=1+P,F=f.XZ.expand((0,f.XZ)(),_,p.AO.create(R,R,R));B||(e.instanceCount=1,e.instanceBuffer=new Float32Array([0]),e.transformBuffer=new Float32Array(p.yb.id));let L=1/P,z=f.XZ.scale((0,f.XZ)(),F,L),N=f.XZ.size((0,p.AO)(),z);p.AO.ceil(N,N),p.AO.add(N,N,p.AO.create(2,2,2));let{min:G}=F,[U,V,j]=N,{texDimX:H,texDimY:q,texCols:X}=function(e){let t=Math.pow(2,Math.ceil(Math.log(Math.sqrt(e[0]*e[1]*e[2]))/Math.log(2))),r=0,a=e[1],n=1,i=e[2];return t<e[0]*e[2]?(i=Math.floor(t/e[0]),n=Math.ceil(e[2]/i),r=i*e[0],a*=n):r=e[0]*e[2],{texDimX:r,texDimY:a,texRows:n,texCols:i,powerOfTwoSize:a<t?t:2*t}}(N);r.namedFramebuffers[x]||(r.namedFramebuffers[x]=r.resources.framebuffer());let W=r.namedFramebuffers[x];(0,g.D0)(A)?(r.namedTextures[x]||(r.namedTextures[x]=E&&M?w.texture("image-float16","rgba","fp16","nearest"):w.texture("image-float32","rgba","float","nearest")),r.namedTextures[S]||(r.namedTextures[S]=w.texture("image-float32","alpha","float","nearest"))):(r.namedTextures[x]||(r.namedTextures[x]=w.texture("image-float32","rgba","float","nearest")),r.namedTextures[S]||(r.namedTextures[S]=w.texture("image-float32","rgba","float","nearest")));let K=r.namedTextures[x],Q=r.namedTextures[S];K.define(H,q),Q.define(H,q),K.attachFramebuffer(W,0),Q.attachFramebuffer(W,1);let Z=function(e,t,r,i,l){if(e.namedComputeRenderables[x]){let n=p.AO.sub((0,p.AO)(),r.max,r.min),o=e.namedComputeRenderables[x].values,s=Math.round(t.vertexCount/l);(s>o.drawCount.ref.value||l!==o.stride.ref.value)&&a.IO.update(o.aSample,T(s,l)),a.IO.updateIfChanged(o.drawCount,s),a.IO.updateIfChanged(o.instanceCount,t.instanceCount),a.IO.updateIfChanged(o.stride,l),a.IO.updateIfChanged(o.uGroupCount,t.groupCount),a.IO.update(o.aTransform,t.transformBuffer),a.IO.update(o.aInstance,t.instanceBuffer),a.IO.update(o.uGeoTexDim,p.Sg.set(o.uGeoTexDim.ref.value,t.positionTexture.getWidth(),t.positionTexture.getHeight())),a.IO.update(o.tPosition,t.positionTexture),a.IO.update(o.tGroup,t.groupTexture),a.IO.update(o.uColorTexDim,p.Sg.set(o.uColorTexDim.ref.value,t.colorData.getWidth(),t.colorData.getHeight())),a.IO.update(o.tColor,t.colorData),a.IO.updateIfChanged(o.dColorType,t.colorType),a.IO.updateIfChanged(o.uCurrentSlice,0),a.IO.updateIfChanged(o.uCurrentX,0),a.IO.updateIfChanged(o.uCurrentY,0),a.IO.update(o.uBboxMin,r.min),a.IO.update(o.uBboxSize,n),a.IO.updateIfChanged(o.uResolution,i),e.namedComputeRenderables[x].update()}else e.namedComputeRenderables[x]=function(e,t,r,i,l){let u=p.AO.sub((0,p.AO)(),r.max,r.min),c=Math.round(t.vertexCount/l),d={drawCount:a.IO.create(c),instanceCount:a.IO.create(t.instanceCount),stride:a.IO.create(l),uGroupCount:a.IO.create(t.groupCount),aTransform:a.IO.create(t.transformBuffer),aInstance:a.IO.create(t.instanceBuffer),aSample:a.IO.create(T(c,l)),uGeoTexDim:a.IO.create(p.Sg.create(t.positionTexture.getWidth(),t.positionTexture.getHeight())),tPosition:a.IO.create(t.positionTexture),tGroup:a.IO.create(t.groupTexture),uColorTexDim:a.IO.create(p.Sg.create(t.colorData.getWidth(),t.colorData.getHeight())),tColor:a.IO.create(t.colorData),dColorType:a.IO.create(t.colorType),uCurrentSlice:a.IO.create(0),uCurrentX:a.IO.create(0),uCurrentY:a.IO.create(0),uBboxMin:a.IO.create(r.min),uBboxSize:a.IO.create(u),uResolution:a.IO.create(i)},f={...y},g=(0,o.Lq)("accumulate",h,m,{drawBuffers:"required"}),b=(0,s.s8)(e,"points",g,f,d);return(0,n.T)(b,d)}(e,t,r,i,l);return e.namedComputeRenderables[x]}(r,e,F,P,k);D.currentRenderItemId=-1,W.bind(),I.drawBuffers([I.COLOR_ATTACHMENT0,I.COLOR_ATTACHMENT1]);let{uCurrentSlice:Y,uCurrentX:$,uCurrentY:J}=Z.values;b.kM&&r.timer.mark("ColorAccumulate.render"),function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}(r),D.viewport(0,0,H,q),D.scissor(0,0,H,q),A.clear(A.COLOR_BUFFER_BIT),a.IO.update(J,0);let ee=0,et=0,er=0;for(let e=0;e<j;++e)ee>=X&&(ee-=X,et+=V,er=0,a.IO.update(J,et)),a.IO.update($,er),a.IO.update(Y,e),D.viewport(er,et,U,V
2912),D.scissor(er,et,U,V),Z.render(),++ee,er+=U;K.detachFramebuffer(W,0),Q.detachFramebuffer(W,1),I.drawBuffers([A.COLOR_ATTACHMENT0,A.NONE]),b.kM&&r.timer.markEnd("ColorAccumulate.render"),b.kM&&r.timer.mark("ColorNormalize.render"),(!l||(0,i.q9)(l))&&(l=w.texture("image-uint8","rgba","ubyte","linear")),l.define(H,q);let ea=function(e,t,r){if(e.namedComputeRenderables[O]){let n=e.namedComputeRenderables[O].values;a.IO.update(n.tColor,t),a.IO.update(n.tCount,r),a.IO.update(n.uTexSize,p.Sg.set(n.uTexSize.ref.value,t.getWidth(),t.getHeight())),e.namedComputeRenderables[O].update()}else e.namedComputeRenderables[O]=function(e,t,r){let i={...d.GE,tColor:a.IO.create(t),tCount:a.IO.create(r),uTexSize:a.IO.create(p.Sg.create(t.getWidth(),t.getHeight()))},l={...C},f=(0,o.Lq)("normalize",u.C,c),m=(0,s.s8)(e,"triangles",f,l,i);return(0,n.T)(m,i)}(e,t,r);return e.namedComputeRenderables[O]}(r,K,Q);D.currentRenderItemId=-1,function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}(r),l.attachFramebuffer(W,0),D.viewport(0,0,H,q),D.scissor(0,0,H,q),A.clear(A.COLOR_BUFFER_BIT),ea.render(),b.kM&&r.timer.markEnd("ColorNormalize.render");let en=p.T8.create(G[0],G[1],G[2],L);return b.kM&&r.timer.markEnd("calcTextureMeshColorSmoothing"),{texture:l,gridDim:N,gridTexDim:p.Sg.create(H,q),gridTransform:en,type:B?"volumeInstance":"volume"}}let A="color-smoothing-rgb",w="color-smoothing-rgba",D="color-smoothing-alpha";function E(e,t,r,n){var i;if(!("group"===(i=e.dColorType.ref.value)||"groupInstance"===i))return;t={...t,stride:3*t.stride},r.namedTextures[A]||(r.namedTextures[A]=r.resources.texture("image-uint8","rgb","ubyte","nearest"));let o=r.namedTextures[A];o.load(e.tColor.ref.value);let s=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dColorType,s.type),a.IO.update(e.tColorGrid,s.texture),a.IO.update(e.uColorTexDim,s.gridTexDim),a.IO.update(e.uColorGridDim,s.gridDim),a.IO.update(e.uColorGridTransform,s.gridTransform)}function M(e,t,r,n){if("groupInstance"!==e.dOverpaintType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[w]||(r.namedTextures[w]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let i=r.namedTextures[w];i.load(e.tOverpaint.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dOverpaintType,o.type),a.IO.update(e.tOverpaintGrid,o.texture),a.IO.update(e.uOverpaintTexDim,o.gridTexDim),a.IO.update(e.uOverpaintGridDim,o.gridDim),a.IO.update(e.uOverpaintGridTransform,o.gridTransform)}function P(e,t,r,n){if("groupInstance"!==e.dTransparencyType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[D]||(r.namedTextures[D]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let i=r.namedTextures[D];i.load(e.tTransparency.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dTransparencyType,o.type),a.IO.update(e.tTransparencyGri
2912d,o.texture),a.IO.update(e.uTransparencyTexDim,o.gridTexDim),a.IO.update(e.uTransparencyGridDim,o.gridDim),a.IO.update(e.uTransparencyGridTransform,o.gridTransform)}function k(e,t,r,n){if("groupInstance"!==e.dEmissiveType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[D]||(r.namedTextures[D]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let i=r.namedTextures[D];i.load(e.tEmissive.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dEmissiveType,o.type),a.IO.update(e.tEmissiveGrid,o.texture),a.IO.update(e.uEmissiveTexDim,o.gridTexDim),a.IO.update(e.uEmissiveGridDim,o.gridDim),a.IO.update(e.uEmissiveGridTransform,o.gridTransform)}function B(e,t,r,n){if("groupInstance"!==e.dSubstanceType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[w]||(r.namedTextures[w]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let i=r.namedTextures[w];i.load(e.tSubstance.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dSubstanceType,o.type),a.IO.update(e.tSubstanceGrid,o.texture),a.IO.update(e.uSubstanceTexDim,o.gridTexDim),a.IO.update(e.uSubstanceGridDim,o.gridDim),a.IO.update(e.uSubstanceGridTransform,o.gridTransform)}},39446:function(e,t,r){r.d(t,{q:function(){return a}});var a,n=r(85764),i=r(48930),o=r(14086),s=r(72558),l=r(69587),u=r(85688),c=r(54185),d=r(5514),p=r(38788),f=r(62927),m=r(91407),h=r(87144),g=r(22444),b=r(71522),y=r(41723),x=r(4249),S=r(64690);!function(e){class t{constructor(){this.index=0,this.textures=[]}get(){return this.textures[this.index]}set(e,t,r){this.textures[this.index]=Object.assign(this.textures[this.index]||{},{vertex:e,group:t,normal:r}),this.index=(this.index+1)%2}destroy(){for(let e of this.textures)e.vertex.destroy(),e.group.destroy(),e.normal.destroy()}}function r(e,r,a,o,s,l,u){let c=a.getWidth(),d=a.getHeight();return u?(u.vertexCount=e,u.groupCount=r,n.IO.update(u.geoTextureDim,h.Sg.set(u.geoTextureDim.ref.value,c,d)),n.IO.update(u.vertexTexture,a),n.IO.update(u.groupTexture,o),n.IO.update(u.normalTexture,s),u.doubleBuffer.set(a,o,s),i.CP.copy(u.boundingSphere,l),u):{kind:"texture-mesh",vertexCount:e,groupCount:r,geoTextureDim:n.IO.create(h.Sg.create(c,d)),vertexTexture:n.IO.create(a),groupTexture:n.IO.create(o),normalTexture:n.IO.create(s),varyingGroup:n.IO.create(!1),doubleBuffer:new t,boundingSphere:i.CP.clone(l),meta:{}}}function a(e){let t=e?e.vertexTexture.ref.value:(0,m.DU)();return r(0,0,t,e?e.groupTexture.ref.value:(0,m.DU)(),e?e.normalTexture.ref.value:(0,m.DU)(),e?e.boundingSphere:(0,i.CP)(),e)}e.DoubleBuffer=t,e.create=r,e.createEmpty=a,e.Params={...c.ev.Params,doubleSided:o.e.Boolean(!1,c.ev.CustomQualityParamInfo),flipSided:o.e.Boolean(!1,c.ev.ShadingCategory),flatShaded:o.e.Boolean(!1,c.ev.ShadingCategory),ignoreLight:o.e.Boolean(!1,c.ev.ShadingCategory),celShaded:o.e.Boolean(!1,c.ev.ShadingCategory),xrayShaded:o.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],c.ev.ShadingCategory),transparentBackfaces:o.e.Select("off",o.e.arrayToOptions(["off","on","opaque"]),c.ev.ShadingCategory),bumpFrequency:o.e.Numeric(0,{min:0,max:10,step:.1},c.ev.ShadingCategory),bumpAmplitude:o.e.Numeric(1,{min:0,max:5,step:.1},c.ev.ShadingCategory),interior:(0,S.xA)()},e.Utils={Params:e.Params,createEmpty:a,createValues:C,createValuesSimple:function(t,r,a,n,i){let s=c.ev.createSimple(a,n,i),l={...o.e.getDefaultValues(e.Params),...r};return C(t,s.transform,s.locationIterator,s.theme,l)}
2912,updateValues:function(e,t){c.ev.updateValues(e,t),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dFlatShaded,t.flatShaded),n.IO.updateIfChanged(e.dFlipSided,t.flipSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,S.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,S.gt)(t.interior,e.uInteriorSubstance.ref.value))},updateBoundingSphere:function(e,t){let r=i.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);i.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),i.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,h.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=c.ev.createRenderableState(e);return O(t,e),t},updateRenderableState:O,createPositionIterator:function(e,t){let r;let a=e.meta.webgl;if(!a)return(0,s.OF)(1,1,1,()=>b.ad);a.namedFramebuffers[T]||(a.namedFramebuffers[T]=a.resources.framebuffer());let n=a.namedFramebuffers[T],[i,o]=e.geoTextureDim.ref.value,l=()=>{if(!r){let t=new Float32Array(i*o*4);n.bind(),e.vertexTexture.ref.value.attachFramebuffer(n,0),a.readPixels(0,0,i,o,t);let s=new Float32Array(i*o*4);n.bind(),e.normalTexture.ref.value.attachFramebuffer(n,0),a.readPixels(0,0,i,o,s),r={vertices:t,normals:s}}return r},u=e.vertexCount,c=t.instanceCount.ref.value,d=(0,s.cH)(),p=d.position,f=d.normal,m=t.aTransform.ref.value;return(0,s.OF)(u,c,1,(e,t)=>{let{vertices:r,normals:a}=l();return t<0?(h.AO.fromArray(p,r,4*e),h.AO.fromArray(f,a,4*e)):(h.AO.transformMat4Offset(p,r,m,0,4*e,16*t),h.AO.transformDirectionOffset(f,a,m,0,4*e,16*t)),d})}};let T="texture-mesh";function C(t,r,a,o,s){let{instanceCount:m,groupCount:b}=a,T=e.Utils.createPositionIterator(t,r),C=(0,l.is)(a,T,o.color),O=s.instanceGranularity?(0,u.eL)(m,"instance"):(0,u.eL)(m*b,"groupInstance"),I=(0,d.wS)(),A=(0,p.PG)(),w=(0,x.ur)(),D=(0,y.mQ)(),E=(0,g.cO)(),M={drawCount:t.vertexCount,vertexCount:t.vertexCount,groupCount:b,instanceCount:m},P=i.CP.clone(t.boundingSphere),k=(0,f.Lo)(P,r.aTransform.ref.value,m,0);return{dGeometryType:n.IO.create("textureMesh"),uGeoTexDim:t.geoTextureDim,tPosition:t.vertexTexture,tGroup:t.groupTexture,tNormal:t.normalTexture,dVaryingGroup:t.varyingGroup,boundingSphere:n.IO.create(k),invariantBoundingSphere:n.IO.create(P),uInvariantBoundingSphere:n.IO.create(h.T8.ofSphere(P)),...C,...O,...I,...A,...w,...D,...E,...r,...c.ev.createValues(s,M),uDoubleSided:n.IO.create(s.doubleSided),dFlatShaded:n.IO.create(s.flatShaded),dFlipSided:n.IO.create(s.flipSided),dIgnoreLight:n.IO.create(s.ignoreLight),dCelShaded:n.IO.create(s.celShaded),dXrayShaded:n.IO.create("inverted"===s.xrayShaded?"inverted":!0===s.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(s.transparentBackfaces),uBumpFrequency:n.IO.create(s.bumpFrequency),uBumpAmplitude:n.IO.create(s.bumpAmplitude),uInteriorColor:n.IO.create((0,S.Qy)(s.interior,(0,h.T8)())),uInteriorSubstance:n.IO.create((0,S.gt)(s.interior,(0,h.T8)())),meta:n.IO.create(t.meta)}}function O(e,t){c.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}}(a||(a={}))},41306:function(e,t,r){r.d(t,{tx:function(){return y},pH:function(){return g},Sj:function(){return x},WC:function(){return S}});var a=r(85764),n=r(87144),i=r(36111),o=r(67330),s=r(88575),l=r(43975),u=r(21604),c=r(30441);let d=l.A.transformMat4Offset,p=l.A.fromArray,f=s.X.add,m=(0,n.Tu)(),h=(0,n.yb)();function g(e,t,r,o,s,l){let u=function(e,t){for(let r=0;r<t;r++)if(n.Tu.fromMat4(m,n.yb.fromArray(h,e,16*r)),0>n.Tu.determinant(m))return!0;return!1}(e,t);if(l){a.IO.update(l.matrix,l.matrix.ref.value);let r=l.transform.ref.value.length>=16*t?l.transform.ref.value:new Float32Array(16*t);r.set(e),a.IO.update(l.transform,r),a.IO.updateIfChanged(l.uInstanceCount,t),a.IO.updateIfChanged(l.instanceCount,t);let n=l.aTransform.ref.value.length>=16*t?l.aTransform.ref.value:new Float32Array(16*t);a.IO.update(l.aTransform,n);let o=l.extraTransform.ref.value.length>=16*t?l.extraTransform.ref.value:new Float32Array(16*t);a.IO.update(l.extraTransform,x(o,t));let s=l.aInstance.ref.value.length>=t?l.aInstance.ref.value:new Float32Array(t);a.IO.update(l.aInstance,(0,i.d_)(s,t)),a.IO.update(l.hasReflection,u)}else l={aTransform:a.IO.create(new Float32Array(16*t)),matrix:a.IO.create(n.yb.identity()),transform:a.IO.create(new Float32Array(e)),extraTransform:a.IO.create(x(new Float32Array(16*t),t)),uInstanceCount:a.IO.create(t),instanceCount:a.IO.create(t),aInstance:a.IO.create((0,i.d_)(new Float32Array(t))),hasReflection:a.IO.create(u),instanceGrid:a.IO.create({cellSize:0,cellCount:0,cellOffsets:new Uint32Array,cellSpheres:new Float32Array,cellTransform:new Float32Array,cellInstance:new Float32Array,batchSize:0,batchCount:0,batchOffsets:new Uint32Array,batchSpheres:new Float32Array,batchCell:new Uint32Array})};return S(l,r,o,s),l}let b=new Float32Array(16);function y(e){return g(new Float32Array(b),1,void 0,0,0,e)}function x(e,t){for(let r=0;r<t;r++)e.set(b,16*r);return e}function S(e,t,r,m){let h=e.aTransform.ref.value,g=e.aInstance.ref.value,b=e.instanceCount.ref.value,y=e.matrix.ref.value,x=e.transform.ref.value,S=e.extraTransform.ref.value;for(let e=0;e<b;e++){let t=16*e;n.yb.mulOffset(h,S,x,t,t,t),n.yb.mulOffset(h,y,h,t,0,t),g[e]=e}if(t&&b>0){let n=function(e,t,r){let a=function(e,t){let{instanceCount:r,instance:a,transform:n,invariantBoundingSphere:i}=e,p=new Float32Array(r),m=new Float32Array(r),h=new Float32Array(r),g=o.h.ofBounds(0,r),b=s.X.setEmpty((0,s.X)()),{center:y,radius:x}=i,S=l.A.create(x,x,x),T=(0,l.A)();for(let e=0;e<r;++e)d(T,y,n,0,0,16*e),p[e]=T[0],m[e]=T[1],h[e]=T[2],f(b,T);s.X.expand(b,b,S);let C={box:b,sphere:c.C.fromBox3D((0,c.C)(),b)}
2912,{array:O,offset:I,count:A}=(0,u.t)({x:p,y:m,z:h,indices:g},C,l.A.create(t,t,t)).buckets,w=I.length,D=new Uint32Array(w+1),E=new Float32Array(4*w),M=new Float32Array(16*r),P=new Float32Array(r),k=(0,s.X)(),B=(0,c.C)(),_=0;for(let e=0;e<w;++e){let t=I[e],r=A[e];D[e]=t;let i=_;for(let e=t,i=t+r;e<i;++e){let t=O[e];P[_]=a[t];for(let e=0;e<16;++e)M[16*_+e]=n[16*t+e];_+=1}if(1===r)d(E,y,M,4*e,0,16*i),E[4*e+3]=x;else{s.X.setEmpty(k);let t=16*i;for(let e=0;e<r;++e)d(T,y,M,0,0,16*e+t),f(k,T);s.X.expand(k,k,S),c.C.fromBox3D(B,k),c.C.toArray(B,E,4*e)}}return D[w]=I[w-1]+A[w-1],{cellSize:t,cellCount:w,cellOffsets:D,cellSpheres:E,cellTransform:M,cellInstance:P}}(e,t),n=function(e,t){let{cellCount:r,cellSpheres:a}=e,n=new Float32Array(r),i=new Float32Array(r),d=new Float32Array(r),m=o.h.ofBounds(0,r),h=s.X.setEmpty((0,s.X)()),g=(0,l.A)(),b=0;for(let e=0;e<r;++e){let t=4*e;p(g,a,t),n[e]=g[0],i[e]=g[1],d[e]=g[2],f(h,g),b=Math.max(b,a[t+3])}let y=l.A.create(b,b,b);s.X.expand(h,h,y);let x={box:h,sphere:c.C.fromBox3D((0,c.C)(),h)},{array:S,offset:T,count:C}=(0,u.t)({x:n,y:i,z:d,indices:m},x,l.A.create(t,t,t)).buckets,O=T.length,I=new Uint32Array(O+1),A=new Float32Array(4*O),w=new Uint32Array(r),D=(0,s.X)(),E=(0,c.C)(),M=0;for(let e=0;e<O;++e){let t=T[e],r=C[e];I[e]=t;for(let e=t,a=t+r;e<a;++e)w[M]=S[e],M+=1;if(1===r){let r=S[t];A[4*e]=a[4*r],A[4*e+1]=a[4*r+1],A[4*e+2]=a[4*r+2],A[4*e+3]=a[4*r+3]}else{s.X.setEmpty(D),b=0;for(let e=t,n=t+r;e<n;++e){let t=S[e];g[0]=a[4*t],g[1]=a[4*t+1],g[2]=a[4*t+2],f(D,g),b=Math.max(b,a[4*t+3])}l.A.set(y,b,b,b),s.X.expand(D,D,y),c.C.fromBox3D(E,D),c.C.toArray(E,A,4*e)}}return I[O]=T[O-1]+C[O-1],{batchSize:t,batchCount:O,batchOffsets:I,batchSpheres:A,batchCell:w}}(a,r),m=new Uint32Array(a.cellOffsets.length),h=new Float32Array(a.cellSpheres.length),g=new Float32Array(a.cellInstance.length),b=0;for(let t=0,r=n.batchCell.length;t<r;++t){let r=n.batchCell[t],i=a.cellOffsets[r],o=a.cellOffsets[r+1]-i;m[t+1]=m[t]+o;for(let e=0;e<4;++e)h[4*t+e]=a.cellSpheres[4*r+e];for(let t=0;t<o;++t){let r=i+t,n=a.cellInstance[r];for(let t=0;t<16;++t)a.cellTransform[16*b+t]=e.transform[16*n+t];g[b]=n,b+=1}}return{cellSize:a.cellSize,cellCount:a.cellCount,cellOffsets:m,cellSpheres:h,cellTransform:a.cellTransform,cellInstance:g,batchSize:n.batchSize,batchCount:n.batchCount,batchOffsets:n.batchOffsets,batchSpheres:n.batchSpheres,batchCell:(0,i.d_)(n.batchCell)}}({instanceCount:b,instance:g,transform:h,invariantBoundingSphere:t},r,m);a.IO.update(e.instanceGrid,n),a.IO.update(e.aInstance,n.cellInstance),a.IO.update(e.aTransform,n.cellTransform)}else a.IO.update(e.aInstance,g),a.IO.update(e.aTransform,h)}n.yb.toArray(n.yb.identity(),b,0)},38788:function(e,t,r){r.d(t,{Bb:function(){return u},PG:function(){return f},ei:function(){return d},gj:function(){return c},iM:function(){return l},r_:function(){return s}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407);function s(e,t,r,a){for(let n=t;n<r;++n)e[n]=255*a;return!0}function l(e,t){if(0===t||e.length<t)return 0;let r=0;for(let a=0;a<t;++a)r+=e[a];return r/(255*t)}function u(e,t){if(0===t||e.length<t)return 1;let r=255;for(let a=0;a<t;++a)e[a]>0&&e[a]<r&&(r=e[a]);return r/255}function c(e,t,r){e.fill(0,t,r)}function d(e,t,r){let s=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tTransparency.ref.value.array);return r?(a.IO.update(r.tTransparency,s),a.IO.update(r.uTransparencyTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dTransparency,e>0),a.IO.updateIfChanged(r.transparencyAverage,l(s.array,e)),a.IO.updateIfChanged(r.transparencyMin,u(s.array,e)),a.IO.updateIfChanged(r.dTransparencyType,t),r):{tTransparency:a.IO.create(s),uTransparencyTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dTransparency:a.IO.create(e>0),transparencyAverage:a.IO.create(0),transparencyMin:a.IO.create(1),tTransparencyGrid:a.IO.create((0,o.DU)()),uTransparencyGridDim:a.IO.create(n.AO.create(1,1,1)),uTransparencyGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dTransparencyType:a.IO.create(t),uTransparencyStrength:a.IO.create(1)}}let p={array:new Uint8Array(1),width:1,height:1};function f(e){return e?(a.IO.update(e.tTransparency,p),a.IO.update(e.uTransparencyTexDim,n.Sg.create(1,1)),e):{tTransparency:a.IO.create(p),uTransparencyTexDim:a.IO.create(n.Sg.create(1,1)),dTransparency:a.IO.create(!1),transparencyAverage:a.IO.create(0),transparencyMin:a.IO.create(1),tTransparencyGri
2912d:a.IO.create((0,o.DU)()),uTransparencyGridDim:a.IO.create(n.AO.create(1,1,1)),uTransparencyGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dTransparencyType:a.IO.create("groupInstance"),uTransparencyStrength:a.IO.create(1)}}},70759:function(e,t,r){let a,n,i;r.d(t,{Jo:function(){return b},pE:function(){return y},xu:function(){return g}});var o=r(87144),s=r(81725),l=r(90308),u=r(16207);let c=(0,o.AO)(),d=(0,o.AO)(),p=(0,o.AO)(),f=(0,o.AO)(),m=(0,l.y)(4,!0);function h(e){let t=(0,s.Gz)(12,e?36:24);for(let r=0;r<4;++r){let a=(r+1)%4;o.AO.set(c,m[3*r],m[3*r+1],-.5),o.AO.set(d,m[3*a],m[3*a+1],-.5),o.AO.set(p,m[3*a],m[3*a+1],.5),o.AO.set(f,m[3*r],m[3*r+1],.5),e?t.add(c,d,p):t.addQuad(c,d,p,f)}return o.AO.set(c,m[0],m[1],-.5),o.AO.set(d,m[3],m[4],-.5),o.AO.set(p,m[6],m[7],-.5),o.AO.set(f,m[9],m[10],-.5),e?t.add(p,d,c):t.addQuad(f,p,d,c),o.AO.set(c,m[0],m[1],.5),o.AO.set(d,m[3],m[4],.5),o.AO.set(p,m[6],m[7],.5),o.AO.set(f,m[9],m[10],.5),e?t.add(c,d,p):t.addQuad(c,d,p,f),t.getPrimitive()}function g(){return a||(a=h(!1)),a}function b(){return n||(n=h(!0)),n}function y(){return i||(i=(0,u.aK)([.5,.5,-.5,-.5,.5,-.5,-.5,-.5,-.5,.5,-.5,-.5,.5,.5,.5,-.5,.5,.5,-.5,-.5,.5,.5,-.5,.5],[0,4,1,5,2,6,3,7,0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4])),i}},16207:function(e,t,r){r.d(t,{aK:function(){return n},gW:function(){return s},iC:function(){return i}});var a=r(87144);function n(e,t){return{vertices:e,edges:t}}function i(e){return{vertices:new Float32Array(e.vertices),edges:new Uint32Array(e.edges)}}let o=a.AO.zero();function s(e,t){let{vertices:r}=e;for(let e=0,n=r.length;e<n;e+=3)a.AO.transformMat4(o,a.AO.fromArray(o,r,e),t),a.AO.toArray(o,r,e);return e}},90308:function(e,t,r){r.d(t,{y:function(){return a}});function a(e,t,r=-1){let a=new Float32Array(3*e),n=-1===r?e<=4?Math.sqrt(2)/2:.6:r,i=t?1:0;for(let t=0;t<e;++t){let r=(2*t+i)/e*Math.PI;a[3*t]=Math.cos(r)*n,a[3*t+1]=Math.sin(r)*n,a[3*t+2]=0}return a}},81725:function(e,t,r){r.d(t,{Gz:function(){return u},aJ:function(){return s},ik:function(){return p}});var a=r(87144);let n=(0,a.AO)(),i=(0,a.AO)(),o=(0,a.AO)();function s(e,t){let r=t.length,s=u(r/3);for(let l=0;l<r;l+=3)a.AO.fromArray(n,e,3*t[l]),a.AO.fromArray(i,e,3*t[l+1]),a.AO.fromArray(o,e,3*t[l+2]),s.add(n,i,o);return s.getPrimitive()}let l=(0,a.AO)();function u(e,t){void 0===t&&(t=3*e);let r=new Float32Array(3*t),n=new Float32Array(3*t),i=new Uint32Array(3*e),o=0,s=0;return{add:(e,t,u)=>{a.AO.toArray(e,r,o),a.AO.toArray(t,r,o+3),a.AO.toArray(u,r,o+6),a.AO.triangleNormal(l,e,t,u);for(let e=0;e<3;++e)a.AO.toArray(l,n,o+3*e),i[s+e]=o/3+e;o+=9,s+=3},addQuad:(e,t,u,c)=>{a.AO.toArray(e,r,o),a.AO.toArray(t,r,o+3),a.AO.toArray(u,r,o+6),a.AO.toArray(c,r,o+9),a.AO.triangleNormal(l,e,t,u);for(let e=0;e<4;++e)a.AO.toArray(l,n,o+3*e);let d=o/3;i[s]=d,i[s+1]=d+1,i[s+2]=d+2,i[s+3]=d+2,i[s+4]=d+3,i[s+5]=d,o+=12,s+=6},getPrimitive:()=>({vertices:r,normals:n,indices:i})}}let c=(0,a.AO)(),d=(0,a.Tu)();function p(e,t){let{vertices:r,normals:n}=e,i=a.Tu.directionTransform(d,t);for(let e=0,o=r.length;e<o;e+=3)a.AO.transformMat4(c,a.AO.fromArray(c,r,e),t),a.AO.toArray(c,r,e),a.AO.transformMat3(c,a.AO.fromArray(c,n,e),i),a.AO.toArray(c,n,e);return e}},32635:function(e,t,r){let a,n,i,o,s;r.d(t,{DE:function(){return T},If:function(){return O},Ut:function(){return C},Xm:function(){return x},bp:function(){return S},p1:function(){return y}});var l=r(87144),u=r(81725),c=r(90308);let d=(0,l.AO)(),p=(0,l.AO)(),f=(0,l.AO)(),m=(0,l.AO)(),h=(0,l.AO)(),g=(0,l.AO)(),b={height:1,topCap:!0,bottomCap:!0};function y(e,t){let r=e.length/3;if(r<3)throw Error("need at least 3 points to build a prism");let{height:a,topCap:n,bottomCap:i}={...b,...t},o=2*r,s=4*r,c=(n?1:0)+(i?1:0);3===r?(o+=c,s+=3*c):4===r?(o+=2*c,s+=4*c):(o+=c*r,s+=c*r*3);let y=(0,u.Gz)(o,s),x=.5*a;l.AO.set(d,0,0,-x),l.AO.set(p,0,0,x);for(let t=0;t<r;++t){let a=(t+1)%r;l.AO.set(f,e[3*t],e[3*t+1],-x),l.AO.set(m,e[3*a],e[3*a+1],-x),l.AO.set(h,e[3*a],e[3*a+1],x),l.AO.set(g,e[3*t],e[3*t+1],x),y.addQuad(f,m,h,g)}if(3===r)n&&(l.AO.set(f,e[0],e[1],-x),l.AO.set(m,e[3],e[4],-x),l.AO.set(h,e[6],e[7],-x),y.add(h,m,f)),i&&(l.AO.set(f,e[0],e[1],x),l.AO.set(m,e[3],e[4],x),l.AO.set(h,e[6],e[7],x),y.add(f,m,h));else if(4===r)n&&(l.AO.set(f,e[0],e[1],-x),l.AO.set(m,e[3],e[4],-x),l.AO.set(h,e[6],e[7],-x),l.AO.set(g,e[9],e[10],-x),y.addQuad(g,h,m,f)),i&&(l.AO.set(f,e[0],e[1],x),l.AO.set(m,e[3],e[4],x),l.AO.set(h,e[6],e[7],x),l.AO.set(g,e[9],e[10],x),y.addQuad(f,m,h,g));else for(let t=0;t<r;++t){let a=(t+1)%r;n&&(l.AO.set(f,e[3*t],e[3*t+1],-x),l.AO.set(m,e[3*a],e[3*a+1],-x),y.add(d,m,f)),i&&(l.AO.set(f,e[3*t],e[3*t+1],x),l.AO.set(m,e[3*a],e[3*a+1],x),y.add(f,m,p))}return y.getPrimitive()}function x(){return a||(a=y((0,c.y)(4,!1))),a}function S(){return n||(n=y((0,c.y)(5,!1))),n}
2912function T(){return i||(i=y((0,c.y)(6,!1))),i}function C(){return o||(o=y((0,c.y)(6,!0))),o}function O(){return s||(s=y((0,c.y)(7,!1))),s}},93964:function(e,t,r){let a;r.d(t,{a:function(){return m},U:function(){return f}});var n=r(87144),i=r(23789);let o={radius:1,detail:0};var s=r(81725),l=r(16207);let u=(1+Math.sqrt(5))/2,c=[-1,u,0,1,u,0,-1,-u,0,1,-u,0,0,-1,u,0,1,u,0,-1,-u,0,1,-u,u,0,-1,u,0,1,-u,0,-1,-u,0,1];(0,l.aK)(c,[0,11,5,11,0,5,1,5,0,1,1,7,0,7,7,10,0,10,10,11,5,9,4,11,2,10,6,7,1,8,3,9,4,9,3,4,2,4,2,3,2,6,3,6,6,8,3,8,8,9,4,5,2,11,6,10,7,8,1,9]);let{vertices:d,indices:p}=(a||(a=(0,s.aJ)(c,[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1])),a);function f(e){return 10*Math.pow(Math.pow(2,e),2)+2}function m(e){return function(e,t,r){let{radius:a,detail:s}={...o,...r},l=function(){let e=[],t=[],r=new Map;function a(t){let a=`${t[0].toFixed(5)}|${t[1].toFixed(5)}|${t[2].toFixed(5)}`,n=r.get(a);return void 0===n&&(n=e.length/3,r.set(a,n),e.push(...t)),n}return{vertices:e,indices:t,add:(e,r,n)=>{t.push(a(e),a(r),a(n))}}}(),{vertices:u,indices:c}=l;(function(r){let a=(0,n.AO)(),i=(0,n.AO)(),o=(0,n.AO)();for(let s=0;s<t.length;s+=3)n.AO.fromArray(a,e,3*t[s+0]),n.AO.fromArray(i,e,3*t[s+1]),n.AO.fromArray(o,e,3*t[s+2]),function(e,t,r,a){let i=Math.pow(2,a),o=[];for(let a=0;a<=i;++a){o[a]=[];let s=(0,n.AO)();n.AO.lerp(s,e,r,a/i);let l=(0,n.AO)();n.AO.lerp(l,t,r,a/i);let u=i-a;for(let e=0;e<=u;++e)if(0===e&&a===i)o[a][e]=s;else{let t=(0,n.AO)();n.AO.lerp(t,s,l,e/u),o[a][e]=t}}for(let e=0;e<i;++e)for(let t=0;t<2*(i-e)-1;++t){let r=Math.floor(t/2);t%2==0?l.add(o[e][r+1],o[e+1][r],o[e][r]):l.add(o[e][r+1],o[e+1][r+1],o[e+1][r])}}(a,i,o,r)})(s),(0,i.zL)(u,a);let d=new Float32Array(u.length);return(0,i.wR)(u,c,d,u.length/3,c.length/3),{vertices:new Float32Array(u),normals:new Float32Array(d),indices:new Uint32Array(c)}}(d,p,{detail:e,radius:1})}},23789:function(e,t,r){r.d(t,{ST:function(){return o},f9:function(){return s},r8:function(){return h},wR:function(){return m},zL:function(){return l}});var a=r(87144),n=r(36111);let i=(0,a.AO)();function o(e,t,r,n){for(let o=0,s=3*n;o<s;o+=3)a.AO.fromArray(i,t,r+o),a.AO.transformMat4(i,i,e),a.AO.toArray(i,t,r+o)}function s(e,t,r,n){for(let o=0,s=3*n;o<s;o+=3)a.AO.fromArray(i,t,r+o),a.AO.transformMat3(i,i,e),a.AO.toArray(i,t,r+o)}function l(e,t){for(let r=0,n=e.length;r<n;r+=3)a.AO.fromArray(i,e,r),a.AO.normalize(i,i),a.AO.scale(i,i,t),a.AO.toArray(i,e,r)}let u=(0,a.AO)(),c=(0,a.AO)(),d=(0,a.AO)(),p=(0,a.AO)(),f=(0,a.AO)();function m(e,t,r,n,i){for(let n=0,o=3*i;n<o;n+=3){let i=3*t[n],o=3*t[n+1],s=3*t[n+2];a.AO.fromArray(u,e,i),a.AO.fromArray(c,e,o),a.AO.fromArray(d,e,s),a.AO.sub(p,d,c),a.AO.sub(f,u,c),a.AO.cross(p,p,f),r[i]+=p[0],r[i+1]+=p[1],r[i+2]+=p[2],r[o]+=p[0],r[o+1]+=p[1],r[o+2]+=p[2],r[s]+=p[0],r[s+1]+=p[1],r[s+2]+=p[2]}return function(e,t){for(let r=0,a=3*t;r<a;r+=3){let t=e[r],a=e[r+1],n=e[r+2],i=1/Math.sqrt(t*t+a*a+n*n);e[r]=t*i,e[r+1]=a*i,e[r+2]=n*i}return e}(r,n)}function h(e,t,r=1){let a=new Int32Array((0,n.uH)(e)+2),i=new Int32Array(t),o=new Int32Array(t);for(let a=0,n=t*r;a<n;a+=r)++o[e[a]];let s=0;for(let e=0;e<t;e++)a[e]=s,s+=o[e];a[t]=s;let l=new Int32Array(s);for(let n=0,o=t*r;n<o;n+=r){let t=e[n];l[a[t]+i[t]]=n,++i[t]}return{indices:l,offsets:a}}},72558:function(e,t,r){r.d(t,{OF:function(){return i},TO:function(){return l},cH:function(){return s},dJ:function(){return o}});var a=r(87144),n=r(71522);function i(e,t,r,a,i=!1,o=()=>!1,s){if(e%r!=0)throw Error("incompatible groupCount and stride");let l={location:n.ad,location2:n.ad,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1},u=l.groupIndex<e,c=!1,d=0,p=0,f=!1,m=!!s;return{get hasNext(){return u},get isNextNewInstance(){return c},groupCount:e,instanceCount:t,count:e*t,stride:r,nonInstanceable:i,hasLocation2:m,move:()=>(u&&(l.groupIndex=d,l.instanceIndex=p,l.index=p*e+d,l.location=a(d,f?-1:p),m&&(l.location2=s(d,f?-1:p)),l.isSecondary=o(d,f?-1:p),(d+=r)===e?(++p,c=!0,p<t&&(d=0)):c=!1,u=d<e),l),reset(){l.location=n.ad,l.location2=n.ad,l.index=0,l.groupIndex=0,l.instanceIndex=0,l.isSecondary=!1,u=l.groupIndex<e,c=!1,d=0,p=0,f=!1},skipInstance(){u&&l.instanceIndex===p&&(++p,d=0,u=p<t)},voidInstances(){f=!0}}}let o={get hasNext(){return!1},get isNextNewInstance(){return!1},groupCount:0,instanceCount:0,count:0,stride:0,nonInstanceable:!1,hasLocation2:!1,move:()=>({location:n.ad,location2:n.ad,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1}),reset(){},skipInstance(){},voidInstances(){}};function s(e,t){return{kind:"position-location",position:e?a.AO.clone(e):(0,a.AO)(),normal:t?a.AO.clone(t):(0,a.AO)()}}function l(e){return!!e&&"position-location"===e.kind}},91564:function(e,t,r){r.d(t,{X:function(){return p},Y:function(){return d}});var a=r(54854),n=r(95068),i=r(85764),o=r(69062),s=r(4376),l=r(13070);function u(e){return{...e,bottomLeft:(0,i.ce)(e.bottomLeft,[0,0,0]),topRight:(0,i.ce)(e.topRight,e.scalarField.space.dimensions)}}function c(e){return{dX:e.topRight[0]-e.bottomLeft[0],dY:e.topRight[1]-e.bottomLeft[1],dZ:e.topRight[2]-e.bottomLeft[2]}}function d(e,t){return a.iQ.create("Marching Cubes Mesh",async r=>{let a=u(e),{dX:n,dY:i,dZ:l}=c(a),d=function(e,t){let r=Math.min(65536,4*e),a=o.pS.create(Float32Array,3,e,t&&t.vertexBuffer.ref.value),n=o.pS.create(Float32Array,3,e,t&&t.normalBuffer.ref.value),i=o.pS.create(Float32Array,1,e,t&&t.groupBuffer.ref.value),l=o.pS.
2912create(Uint32Array,3,r,t&&t.indexBuffer.ref.value),u=0,c=0;return{addVertex:(e,t,r)=>(++u,o.pS.add3(a,e,t,r)),addNormal:(e,t,r)=>{o.pS.add3(n,e,t,r)},addGroup:e=>{o.pS.add(i,e)},addTriangle:(e,t,r,a)=>{let n=e[t],i=e[r],s=e[a];n>=0&&i>=0&&s>=0&&(++c,o.pS.add3(l,n,i,s))},get:()=>{let e=o.pS.compact(a,!0),r=o.pS.compact(n,!0),d=o.pS.compact(l,!0),p=o.pS.compact(i,!0);return s.K.create(e,d,r,p,u,c,t)}}}(Math.min(262144,Math.max(n*i*l/32,1024)),t);return await new f(r,d,a).run(),d.get()})}function p(e,t){return a.iQ.create("Marching Cubes Lines",async r=>{let a=u(e),{dX:s,dY:d,dZ:p}=c(a),m=function(e,t){let r=o.pS.create(Float32Array,3,e),a=o.pS.create(Float32Array,1,e),s=o.pS.create(Float32Array,2,e),u=0;return{addVertex:(e,t,a)=>o.pS.add3(r,e,t,a),addNormal:()=>i.ZT,addGroup:e=>{o.pS.add(a,e)},addTriangle:(e,t,r,a,i)=>{let l=e[t],c=e[r],d=e[a];l>=0&&c>=0&&d>=0&&(n.bR[t][r]&i&&(++u,o.pS.add2(s,e[t],e[r])),n.bR[r][a]&i&&(++u,o.pS.add2(s,e[r],e[a])),n.bR[t][a]&i&&(++u,o.pS.add2(s,e[t],e[a])))},get:()=>{let e=o.pS.compact(r,!0),n=o.pS.compact(s,!0),i=o.pS.compact(a,!0),c=l.R.create(u,u/10,t);for(let t=0;t<u;++t){let r=n[2*t],a=n[2*t+1];c.add(e[3*r],e[3*r+1],e[3*r+2],e[3*a],e[3*a+1],e[3*a+2],i[r])}return c.getLines()}}}(Math.min(262144,Math.max(s*d*p/32,1024)),t);return await new f(r,m,a).run(),m.get()})}class f{async doSlices(){let e=0;this.edgeFilter=15;for(let t=this.minZ;t<this.maxZ;t++,this.edgeFilter&=-5)this.slice(t),e+=this.sliceSize,this.ctx.shouldUpdate&&await this.ctx.update({message:"Computing surface...",current:e,max:this.size})}slice(e){this.edgeFilter|=2;for(let t=this.minY;t<this.maxY;t++,this.edgeFilter&=-3){this.edgeFilter|=1;for(let r=this.minX;r<this.maxX;r++,this.edgeFilter&=-2)this.state.processCell(r,t,e,this.edgeFilter)}this.state.clearEdgeVertexIndexSlice(e)}async run(){await this.doSlices()}constructor(e,t,r){this.ctx=e,this.minX=0,this.minY=0,this.minZ=0,this.maxX=0,this.maxY=0,this.maxZ=0,this.state=new m(t,r),this.minX=r.bottomLeft[0],this.minY=r.bottomLeft[1],this.minZ=r.bottomLeft[2],this.maxX=r.topRight[0]-1,this.maxY=r.topRight[1]-1,this.maxZ=r.topRight[2]-1,this.size=(this.maxX-this.minX)*(this.maxY-this.minY)*(this.maxZ-this.minZ),this.sliceSize=(this.maxX-this.minX)*(this.maxY-this.minY)}}class m{get3dOffsetFromEdgeInfo(e){return this.nX*((this.k+e.k)%2*this.nY+this.j+e.j)+this.i+e.i}clearEdgeVertexIndexSlice(e){let t=e%2==0?0:3*this.nX*this.nY,r=e%2==0?3*this.nX*this.nY:this.verticesOnEdges.length;this.verticesOnEdges.fill(0,t,r)}interpolate(e){let t=n.bY[e],r=3*this.get3dOffsetFromEdgeInfo(t)+t.e,a=this.verticesOnEdges[r];if(a>0)return a-1;let i=this.scalarField,o=this.scalarFieldGet,s=n.dP[e],l=s.a,u=s.b,c=l.i+this.i,d=l.j+this.j,p=l.k+this.k,f=u.i+this.i,m=u.j+this.j,h=u.k+this.k,g=o(i,c,d,p),b=o(i,f,m,h),y=(this.isoLevel-g)/(g-b);if(this.idField){let e=this.idFieldGet(this.idField,c,d,p),t=this.idFieldGet(this.idField,f,m,h),r=y<.5?e:t;if(-1===r&&(r=y<.5?t:e),-2===r)return -1;this.builder.addGroup(r)}else this.builder.addGroup(0);let x=this.builder.addVertex(c+y*(c-f),d+y*(d-m),p+y*(p-h));this.verticesOnEdges[r]=x+1;let S=o(i,Math.max(0,c-1),d,p)-o(i,Math.min(this.nX-1,c+1),d,p),T=o(i,c,Math.max(0,d-1),p)-o(i,c,Math.min(this.nY-1,d+1),p),C=o(i,c,d,Math.max(0,p-1))-o(i,c,d,Math.min(this.nZ-1,p+1)),O=o(i,Math.max(0,f-1),m,h)-o(i,Math.min(this.nX-1,f+1),m,h),I=o(i,f,Math.max(0,m-1),h)-o(i,f,Math.min(this.nY-1,m+1),h),A=o(i,f,m,Math.max(0,h-1))-o(i,f,m,Math.min(this.nZ-1,h+1)),w=S+y*(S-O),D=T+y*(T-I),E=C+y*(C-A);return this.isoLevel>=0?this.builder.addNormal(w,D,E):this.builder.addNormal(-w,-D,-E),x}constructor(e,t){this.builder=e,this.vertList=[0,0,0,0,0,0,0,0,0,0,0,0],this.i=0,this.j=0,this.k=0;let r=t.scalarField.space.dimensions;this.nX=r[0],this.nY=r[1],this.nZ=r[2],this.isoLevel=t.isoLevel,this.scalarFieldGet=t.scalarField.space.get,this.scalarField=t.scalarField.data,t.idField&&(this.idField=t.idField.data,this.idFieldGet=t.idField.space.get),this.verticesOnEdges=new Int32Array(3*this.nX*this.nY*2)}get(e,t,r){return this.scalarFieldGet(this.scalarField,e,t,r)}processCell(e,t,r,a){let i=0;if(this.get(e,t,r)<this.isoLevel&&(i|=1),this.get(e+1,t,r)<this.isoLevel&&(i|=2),this.get(e+1,t+1,r)<this.isoLevel&&(i|=4),this.get(e,t+1,r)<this.isoLevel&&(i|=8),this.get(e,t,r+1)<this.isoLevel&&(i|=16),this.get(e+1,t,r+1)<this.isoLevel&&(i|=32),this.get(e+1,t+1,r+1)<this.isoLevel&&(i|=64),this.get(e,t+1,r+1)<this.isoLevel&&(i|=128),0===i||255===i)return;this.i=e,this.j=t,this.k=r;let o=n.$6[i];(1&o)>0&&(this.vertList[0]=this.interpolate(0)),(2&o)>0&&(this.vertList[1]=this.interpolate(1)),(4&o)>0&&(this.vertList[2]=this.interpolate(2)),(8&o)>0&&(this.vertList[3]=this.interpolate(3)),(16&o)>0&&(this.vertList[4]=this.interpolate(4)),(32&o)>0&&(this.vertList[5]=this.interpolate(5)),(64&o)>0&&(this.vertList[6]=this.interpolate(6)),(128&o)>0&&(this.vertList[7]=this.interpolate(7)),(256&o)>0&&(this.vertList[8]=this.interpolate(8)),(512&o)>0&&(this.vertList[9]=this.interpolate(9)),(1024&o)>
29120&&(this.vertList[10]=this.interpolate(10)),(2048&o)>0&&(this.vertList[11]=this.interpolate(11));let s=n._w[i];for(let e=0;e<s.length;e+=3){let t=s[e],r=s[e+1],n=s[e+2];this.isoLevel>=0?this.builder.addTriangle(this.vertList,t,r,n,a):this.builder.addTriangle(this.vertList,n,r,t,a)}}}},95068:function(e,t,r){r.d(t,{$6:function(){return o},_w:function(){return s},bR:function(){return l},bY:function(){return i},dP:function(){return n}});let a=[{i:0,j:0,k:0},{i:1,j:0,k:0},{i:1,j:1,k:0},{i:0,j:1,k:0},{i:0,j:0,k:1},{i:1,j:0,k:1},{i:1,j:1,k:1},{i:0,j:1,k:1}],n=[{a:a[0],b:a[1]},{a:a[1],b:a[2]},{a:a[2],b:a[3]},{a:a[3],b:a[0]},{a:a[4],b:a[5]},{a:a[5],b:a[6]},{a:a[6],b:a[7]},{a:a[7],b:a[4]},{a:a[0],b:a[4]},{a:a[1],b:a[5]},{a:a[2],b:a[6]},{a:a[3],b:a[7]}],i=[{i:0,j:0,k:0,e:0},{i:1,j:0,k:0,e:1},{i:0,j:1,k:0,e:0},{i:0,j:0,k:0,e:1},{i:0,j:0,k:1,e:0},{i:1,j:0,k:1,e:1},{i:0,j:1,k:1,e:0},{i:0,j:0,k:1,e:1},{i:0,j:0,k:0,e:2},{i:1,j:0,k:0,e:2},{i:1,j:1,k:0,e:2},{i:0,j:1,k:0,e:2}],o=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0],s=[[],[0,8,3],[0,1,9],[1,8,3,9,8,1],[1,2,10],[0,8,3,1,2,10],[9,2,10,0,2,9],[2,8,3,2,10,8,10,9,8],[3,11,2],[0,11,2,8,11,0],[1,9,0,2,3,11],[1,11,2,1,9,11,9,8,11],[3,10,1,11,10,3],[0,10,1,0,8,10,8,11,10],[3,9,0,3,11,9,11,10,9],[9,8,10,10,8,11],[4,7,8],[4,3,0,7,3,4],[0,1,9,8,4,7],[4,1,9,4,7,1,7,3,1],[1,2,10,8,4,7],[3,4,7,3,0,4,1,2,10],[9,2,10,9,0,2,8,4,7],[2,10,9,2,9,7,2,7,3,7,9,4],[8,4,7,3,11,2],[11,4,7,11,2,4,2,0,4],[9,0,1,8,4,7,2,3,11],[4,7,11,9,4,11,9,11,2,9,2,1],[3,10,1,3,11,10,7,8,4],[1,11,10,1,4,11,1,0,4,7,11,4],[4,7,8,9,0,11,9,11,10,11,0,3],[4,7,11,4,11,9,9,11,10],[9,5,4],[9,5,4,0,8,3],[0,5,4,1,5,0],[8,5,4,8,3,5,3,1,5],[1,2,10,9,5,4],[3,0,8,1,2,10,4,9,5],[5,2,10,5,4,2,4,0,2],[2,10,5,3,2,5,3,5,4,3,4,8],[9,5,4,2,3,11],[0,11,2,0,8,11,4,9,5],[0,5,4,0,1,5,2,3,11],[2,1,5,2,5,8,2,8,11,4,8,5],[10,3,11,10,1,3,9,5,4],[4,9,5,0,8,1,8,10,1,8,11,10],[5,4,0,5,0,11,5,11,10,11,0,3],[5,4,8,5,8,10,10,8,11],[9,7,8,5,7,9],[9,3,0,9,5,3,5,7,3],[0,7,8,0,1,7,1,5,7],[1,5,3,3,5,7],[9,7,8,9,5,7,10,1,2],[10,1,2,9,5,0,5,3,0,5,7,3],[8,0,2,8,2,5,8,5,7,10,5,2],[2,10,5,2,5,3,3,5,7],[7,9,5,7,8,9,3,11,2],[9,5,7,9,7,2,9,2,0,2,7,11],[2,3,11,0,1,8,1,7,8,1,5,7],[11,2,1,11,1,7,7,1,5],[9,5,8,8,5,7,10,1,3,10,3,11],[5,7,0,5,0,9,7,11,0,1,0,10,11,10,0],[11,10,0,11,0,3,10,5,0,8,0,7,5,7,0],[11,10,5,7,11,5],[10,6,5],[0,8,3,5,10,6],[9,0,1,5,10,6],[1,8,3,1,9,8,5,10,6],[1,6,5,2,6,1],[1,6,5,1,2,6,3,0,8],[9,6,5,9,0,6,0,2,6],[5,9,8,5,8,2,5,2,6,3,2,8],[2,3,11,10,6,5],[11,0,8,11,2,0,10,6,5],[0,1,9,2,3,11,5,10,6],[5,10,6,1,9,2,9,11,2,9,8,11],[6,3,11,6,5,3,5,1,3],[0,8,11,0,11,5,0,5,1,5,11,6],[3,11,6,0,3,6,0,6,5,0,5,9],[6,5,9,6,9,11,11,9,8],[5,10,6,4,7,8],[4,3,0,4,7,3,6,5,10],[1,9,0,5,10,6,8,4,7],[10,6,5,1,9,7,1,7,3,7,9,4],[6,1,2,6,5,1,4,7,8],[1,2,5,5,2,6,3,0,4,3,4,7],[8,4,7,9,0,5,0,6,5,0,2,6],[7,3,9,7,9,4,3,2,9,5,9,6,2,6,9],[3,11,2,7,8,4,10,6,5],[5,10,6,4,7,2,4,2,0,2,7,11],[0,1,9,4,7,8,2,3,11,5,10,6],[9,2,1,9,11,2,9,4,11,7,11,4,5,10,6],[8,4,7,3,11,5,3,5,1,5,11,6],[5,1,11,5,11,6,1,0,11,7,11,4,0,4,11],[0,5,9,0,6,5,0,3,6,11,6,3,8,4,7],[6,5,9,6,9,11,4,7,9,7,11,9],[10,4,9,6,4,10],[4,10,6,4,9,10,0,8,3],[10,0,1,10,6,0,6,4,0],[8,3,1,8,1,6,8,6,4,6,1,10],[1,4,9,1,2,4,2,6,4],[3,0,8,1,2,9,2,4,9,2,6,4],[0,2,4,4,2,6],[8,3,2,8,2,4,4,2,6],[10,4,9,10,6,4,11,2,3],[0,8,2,2,8,11,4,9,10,4,10,6],[3,11,2,0,1,6,0,6,4,6,1,10],[6,4,1,6,1,10,4,8,1,2,1,11,8,11,1],[9,6,4,9,3,6,9,1,3,11,6,3],[8,11,1,8,1,0,11,6,1,9,1,4,6,4,1],[3,11,6,3,6,0,0,6,4],[6,4,8,11,6,8],[7,10,6,7,8,10,8,9,10],[0,7,3,0,10,7,0,9,10,6,7,10],[10,6,7,1,10,7,1,7,8,1,8,0],[10,6,7,10,7,1,1,7,3],[1,2,6,1,6,8,1,8,9,8,6,7],[2,6,9,2,9,1,6,7,9,0,9,3,7,3,9],[7,8,0,7,0,6,6,0,2],[7,3,2,6,7,2],[2,3,11,10,6,8,10,8,9,8,6,7],[2,0,7,2,7,11,0,9,7,6,7,10,9,10,7],[1,8,0,1,7,8,1,10,7,6,7,10,2,3,11],[11,2,1,11,1,7,10,6,1,6,7,1],[8,9,6,8,6,7,9,1,6,11,6,3,1,3,6],[0,9,1,11,6,7],[7,8,0,7,0,6,3,11,0,11,6,0],[7,11,6],[7,6,11],[3,0,8,11,7,6],[0,1,9,11,7,6],[8,1,9,8,3,1,11,7,6],[10,1,2,6,11,7],[1,2,10,3,0,8,6,11,7],[2,9,0,2,10,9,6,11,7],[6,11,7,2,10,3,10,8,3,10,9,8],[7,2,3,6,2,7],[7,0,8,7,6,0,6,2,0],[2,7,6,2,3,7,0,1,9],[1,6,2,1,8,6,1,9,8,8,7,6],[10,7,6,10,1,7,1,3,7],[10,7,6,1,7,10,1,8,7,1,0,8],[0,3,7,0,7,10,0,10,9,6,10,7],[7,6,10,7,10,8,8,10,9],[6,8,4,11,8,6],[3,6,11,3,0,6,0,4,6],[8,6,11,8,4,6,9,0,1],[9,4,6,9,6,3,9,3,1,11,3,6],[6,8,4,6,11,8,2,10,1],[1,2,10,3,0,11,0,6,11,0,4,6],[4,11,8,4,6,11,0,2,9,2,10,9],[10,9,3,10,3,2,9,4,3,11,3,6,4,6,3],[8,2,3,8,4,2,4,6,2],[0,4,2,4,6,2],[1,9,0,2,3,4,2,4,6,4,3,8],[1,9,4,1,4,2,2,4,6],[8,1,3,8,6,1,8,4,6,6,10,1],[10,1,0,10,0,6,6,0,4],[4,6,3,4,3,8,6,10,3,0,3,9,10,9,3],[10,9,4,6,10,4],[4,9,5,7,6,11],[0,8,3,4,9,5,11,7,6],[5,0,1,5,4,0,7,6,11],[11,7,6,8,3,4,3,5,4,3,1,5],[9,5,4,10,1,2,7,6,11],[6,11,7,1,2,10,0,8,3,4,9,5],[7,6,11,5,4,10,4,2,10,4,0,2],[3,4,8,3,5,4,3,2,5,10,5,2,11,7,6],[7,2,3,7,6,2,5,4,9],[9,5,4,0,8,6,0,6,2,6,8,7],[3,6,2,3,7,6,1,5,0,5,4,0],[6,2,8,6,8,7,2,1,8,4,8,5,1,5,8],[9,5,4,10,1,6,1,7,6,1,3,7],[1,6,10,1,7,
29126,1,0,7,8,7,0,9,5,4],[4,0,10,4,10,5,0,3,10,6,10,7,3,7,10],[7,6,10,7,10,8,5,4,10,4,8,10],[6,9,5,6,11,9,11,8,9],[3,6,11,0,6,3,0,5,6,0,9,5],[0,11,8,0,5,11,0,1,5,5,6,11],[6,11,3,6,3,5,5,3,1],[1,2,10,9,5,11,9,11,8,11,5,6],[0,11,3,0,6,11,0,9,6,5,6,9,1,2,10],[11,8,5,11,5,6,8,0,5,10,5,2,0,2,5],[6,11,3,6,3,5,2,10,3,10,5,3],[5,8,9,5,2,8,5,6,2,3,8,2],[9,5,6,9,6,0,0,6,2],[1,5,8,1,8,0,5,6,8,3,8,2,6,2,8],[1,5,6,2,1,6],[1,3,6,1,6,10,3,8,6,5,6,9,8,9,6],[10,1,0,10,0,6,9,5,0,5,6,0],[0,3,8,5,6,10],[10,5,6],[11,5,10,7,5,11],[11,5,10,11,7,5,8,3,0],[5,11,7,5,10,11,1,9,0],[10,7,5,10,11,7,9,8,1,8,3,1],[11,1,2,11,7,1,7,5,1],[0,8,3,1,2,7,1,7,5,7,2,11],[9,7,5,9,2,7,9,0,2,2,11,7],[7,5,2,7,2,11,5,9,2,3,2,8,9,8,2],[2,5,10,2,3,5,3,7,5],[8,2,0,8,5,2,8,7,5,10,2,5],[9,0,1,5,10,3,5,3,7,3,10,2],[9,8,2,9,2,1,8,7,2,10,2,5,7,5,2],[1,3,5,3,7,5],[0,8,7,0,7,1,1,7,5],[9,0,3,9,3,5,5,3,7],[9,8,7,5,9,7],[5,8,4,5,10,8,10,11,8],[5,0,4,5,11,0,5,10,11,11,3,0],[0,1,9,8,4,10,8,10,11,10,4,5],[10,11,4,10,4,5,11,3,4,9,4,1,3,1,4],[2,5,1,2,8,5,2,11,8,4,5,8],[0,4,11,0,11,3,4,5,11,2,11,1,5,1,11],[0,2,5,0,5,9,2,11,5,4,5,8,11,8,5],[9,4,5,2,11,3],[2,5,10,3,5,2,3,4,5,3,8,4],[5,10,2,5,2,4,4,2,0],[3,10,2,3,5,10,3,8,5,4,5,8,0,1,9],[5,10,2,5,2,4,1,9,2,9,4,2],[8,4,5,8,5,3,3,5,1],[0,4,5,1,0,5],[8,4,5,8,5,3,9,0,5,0,3,5],[9,4,5],[4,11,7,4,9,11,9,10,11],[0,8,3,4,9,7,9,11,7,9,10,11],[1,10,11,1,11,4,1,4,0,7,4,11],[3,1,4,3,4,8,1,10,4,7,4,11,10,11,4],[4,11,7,9,11,4,9,2,11,9,1,2],[9,7,4,9,11,7,9,1,11,2,11,1,0,8,3],[11,7,4,11,4,2,2,4,0],[11,7,4,11,4,2,8,3,4,3,2,4],[2,9,10,2,7,9,2,3,7,7,4,9],[9,10,7,9,7,4,10,2,7,8,7,0,2,0,7],[3,7,10,3,10,2,7,4,10,1,10,0,4,0,10],[1,10,2,8,7,4],[4,9,1,4,1,7,7,1,3],[4,9,1,4,1,7,0,8,1,8,7,1],[4,0,3,7,4,3],[4,8,7],[9,10,8,10,11,8],[3,0,9,3,9,11,11,9,10],[0,1,10,0,10,8,8,10,11],[3,1,10,11,3,10],[1,2,11,1,11,9,9,11,8],[3,0,9,3,9,11,1,2,9,2,11,9],[0,2,11,8,0,11],[3,2,11],[2,3,8,2,8,10,10,8,9],[9,10,2,0,9,2],[2,3,8,2,8,10,0,1,8,1,10,8],[1,10,2],[1,3,8,9,1,8],[0,9,1],[0,3,8],[]],l=[[0,4,4,4,2,0,0,0,2,2,0,0],[4,0,4,4,0,8,0,0,0,8,8,0],[4,4,0,4,0,0,8,0,0,0,8,8],[4,4,4,0,0,0,0,1,1,0,0,1],[2,0,0,0,0,8,8,8,2,2,0,0],[0,8,0,0,8,0,8,8,0,8,8,0],[0,0,8,0,8,8,0,8,0,0,8,8],[0,0,0,1,8,8,8,0,1,0,0,1],[2,0,0,1,2,0,0,1,0,2,0,1],[2,8,0,0,2,8,0,0,2,0,8,0],[0,8,8,0,0,8,8,0,0,8,0,8],[0,0,8,1,0,0,8,1,1,0,8,0]]},6579:function(e,t,r){let a,n;r.d(t,{a:function(){return z}});var i=r(62113),o=r(57155),s=r(18406),l=r(45705),u=r(85764),c=r(87144),d=r(68971),p=r(81421),f=r(10410);let m=`
2913precision highp float;
2914precision highp int;
2915
2916#if __VERSION__ == 100
2917    precision highp sampler2D;
2918    uniform sampler2D tTexture;
2919#else
2920    precision highp isampler2D;
2921    uniform isampler2D tTexture;
2922#endif
2923
2924void main(void) {
2925    #if __VERSION__ == 100
2926        gl_FragColor = texture2D(tTexture, vec2(0.5));
2927    #else
2928        gl_FragColor = ivec4(texture2D(tTexture, vec2(0.5)).r);
2929    #endif
2930}
2931`;var h=r(62131),g=r(48502);let b={...d.iz,tTexture:(0,s.U2)("texture","rgba","float","nearest")},y="histopyramid-sum",x=new Uint8Array(4),S=new Int32Array(4);var T=r(58463);let C=`
2932precision highp float;
2933precision highp int;
2934precision highp sampler2D;
2935
2936uniform sampler2D tInputLevel;
2937
2938// previous level used to evaluate the new level
2939#if __VERSION__ == 100
2940    uniform sampler2D tPreviousLevel;
2941#else
2942    precision highp isampler2D;
2943    uniform isampler2D tPreviousLevel;
2944#endif
2945
2946// inverted size of the previous level texture.
2947uniform float uSize;
2948uniform float uTexSize;
2949uniform bool uFirst;
2950
2951#include common
2952
2953void main(void) {
2954    float k = 0.5 * uSize;
2955    vec2 position = floor((gl_FragCoord.xy / uTexSize) / uSize) * uSize;
2956
2957    #if __VERSION__ == 100
2958        float a, b, c, d;
2959
2960        if (uFirst) {
2961            a = texture2D(tInputLevel, position).r * 255.0;
2962            b = texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0;
2963            c = texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0;
2964            d = texture2D(tInputLevel, position + vec2(k, k)).r * 255.0;
2965        } else {
2966            a = unpackRGBToInt(texture2D(tPreviousLevel, position).rgb);
2967            b = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, 0.0
2967)).rgb);
2968            c = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(0.0, k)).rgb);
2969            d = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, k)).rgb);
2970        }
2971        gl_FragColor = vec4(packIntToRGB(a + b + c + d), 1.0);
2972    #else
2973        int a, b, c, d;
2974
2975        if (uFirst) {
2976            a = int(texture2D(tInputLevel, position).r * 255.0);
2977            b = int(texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0);
2978            c = int(texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0);
2979            d = int(texture2D(tInputLevel, position + vec2(k, k)).r * 255.0);
2980        } else {
2981            a = texture2D(tPreviousLevel, position).r;
2982            b = texture2D(tPreviousLevel, position + vec2(k, 0.0)).r;
2983            c = texture2D(tPreviousLevel, position + vec2(0.0, k)).r;
2984            d = texture2D(tPreviousLevel, position + vec2(k, k)).r;
2985        }
2986        gl_FragColor = ivec4(a + b + c + d);
2987    #endif
2988}
2989`,O={...d.iz,tInputLevel:(0,s.U2)("texture","rgba","float","nearest"),tPreviousLevel:(0,s.U2)("texture","rgba","float","nearest"),uSize:(0,s.wt)("f"),uTexSize:(0,s.wt)("f"),uFirst:(0,s.wt)("b")},I="histogram-pyramid";function A(e,t){let r=`${I}-${e}`;return t.namedFramebuffers[r]||(t.namedFramebuffers[r]=t.resources.framebuffer()),t.namedFramebuffers[r]}function w(e,t,r,a,n,i){let o=`${I}-${e}`;return t.namedTextures[o]||(t.namedTextures[o]=t.resources.texture(r,a,n,i)),t.namedTextures[o]}var D=r(95068),E=r(62927);let M=`
2990precision highp float;
2991precision highp int;
2992precision highp sampler2D;
2993
2994#if __VERSION__ == 100
2995    uniform sampler2D tActiveVoxelsPyramid;
2996#else
2997    precision highp isampler2D;
2998    uniform isampler2D tActiveVoxelsPyramid;
2999#endif
3000
3001uniform sampler2D tActiveVoxelsBase;
3002uniform sampler2D tVolumeData;
3003uniform sampler2D tTriIndices;
3004
3005uniform float uIsoValue;
3006uniform float uLevels;
3007uniform float uSize;
3008uniform float uCount;
3009uniform bool uInvert;
3010
3011uniform vec3 uGridDim;
3012uniform vec3 uGridTexDim;
3013uniform vec3 uGridDataDim;
3014uniform mat4 uGridTransform;
3015uniform mat3 uGridTransformAdjoint;
3016
3017// scale to volume data coord
3018uniform vec2 uScale;
3019
3020#include common
3021
3022// cube corners (excluding origin)
3023const vec3 c1 = vec3(1., 0., 0.);
3024const vec3 c2 = vec3(1., 1., 0.);
3025const vec3 c3 = vec3(0., 1., 0.);
3026const vec3 c4 = vec3(0., 0., 1.);
3027const vec3 c5 = vec3(1., 0., 1.);
3028const vec3 c6 = vec3(1., 1., 1.);
3029const vec3 c7 = vec3(0., 1., 1.);
3030
3031vec3 index3dFrom2d(vec2 coord) {
3032    vec2 gridTexPos = coord * uGridTexDim.xy;
3033    vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
3034    vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
3035    float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
3036    return vec3(posXY, posZ);
3037}
3038
3039vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
3040    float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
3041    float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
3042    float row = intDiv(zSlice * gridDim.x, texDim.x);
3043    vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
3044    return texture2D(tex, coord + 0.5 / (texDim / uScale));
3045}
3046
3047vec4 voxel(vec3 pos) {
3048    pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
3049    return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
3050}
3051
3052float voxelValuePadded(vec3 pos) {
3053    pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
3054    vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
3055    #ifdef dValueChannel_red
3056        return v.r;
3057    #else
3058        return v.a;
3059    #endif
3060}
3061
3062int idot2(const in ivec2 a, const in ivec2 b) {
3063    return a.x * b.x + a.y * b.y;
3064}
3065
3066int idot4(const in ivec4 a, const in ivec4 b) {
3067    return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
3068}
3069
3070#if __VERSION__ == 100
3071    int pyramidVoxel(vec2 pos) {
3072        return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
3073    }
3074#else
3075    int pyramidVoxel(vec2 pos) {
3076        return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
3077    }
3078#endif
3079
3080vec4 baseVoxel(vec2 pos) {
3081    return texture2D(tActiveVoxelsBase, pos / uSize);
3082}
3083
3084vec4 getGroup(const in vec3 p) {
3085    // note that we swap x and z because the texture is flipped around y
3086    #if defined(dAxisOrder_012)
3087        float group = p.z + p.y * uGridDataDim.z + p.x * uGridDataDim.z * uGridDataDim.y; // 210
3088    #elif defined(dAxisOrder_021)
3089        float group = p.y + p.z * uGridDataDim.y + p.x * uGridDataDim.y * uGridDataDim.z; // 120
3090    #elif defined(dAxisOrder_102)
3091        float group = p.z + p.x * uGridDataDim.z + p.y * uGridDataDim.z * uGridDataDim.x; // 201
3092    #elif defined(dAxisOrder_120)
3093        float group = p.x + p.z * uGridDataDim.x + p.y * uGridDataDim.x * uGridDataDim.z; // 021
3094    #elif defined(dAxisOrder_201)
3095        float group = p.y + p.x * uGridDataDim.y + p.z * uGridDataDim.y * uGridDataDim.x; // 102
3096    #elif defined(dAxisOrder_210)
3097        float group = p.x + p.y * uGridDataDim.x + p.z * uGridDataDim.x * uGridDataDim.y; // 012
3098    #endif
3099    return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
3100}
3101
3102void main(void) {
3103    // get 1D index
3104    int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
3105
3106    // ignore 1D indices outside of the grid
3107    if(vI >= int(uCount)) discard;
3108
3109    ivec2 offset = ivec2(int(uSize) - 2, 0);
3110
3111    int start = 0;
3112    ivec4 starts = ivec4(0);
3113    ivec4 ends = ivec4(0);
3114    int diff = 2;
3115    ivec4 m = ivec4(0);
3116    ivec2 position = ivec2(0);
3117    ivec4 vI4 = ivec4(vI);
3118
3119    ivec2 relativePosition = ivec2(0);
3120    int end = 0;
3121    ivec2 pos1 = ivec2(0);
3122    ivec2 pos2 = ivec2(0);
3123    ivec2 pos3 = ivec2(0);
3124    ivec2 pos4 = ivec2(0);
3125    ivec3 vI3 = ivec3(vI);
3126    ivec3 mask = ivec3(0);
3127
3128    // traverse the different levels of the pyramid
3129    for(int i = 1; i < 14; i++) {
3130        if(float(i) >= uLevels) break;
3131
3132        offset.x -= diff;
3133        diff *= 2;
3134        relativePosition = position + offset;
3135
3136        end = start + pyramidVoxel(vec2(relativePosition));
3137        pos1 = ivec2(relativePosition);
3138        starts.x = start;
3139        ends.x = end;
3140        pos2 = ivec2(relativePosition + ivec2(1, 0));
3141        starts.y = ends.x;
3142        ends.y = ends.x + pyramidVoxel(vec2(pos2));
3143        pos3 = relativePosition + ivec2(0, 1);
3144        starts.z = ends.y;
3145        ends.z = ends.y + pyramidVoxel(vec2(pos3));
3146        pos4 = relativePosition + ivec2(1, 1);
3147        starts.w = ends.z;
3148        mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
3149        m = ivec4(mask, 1 - int(any(bvec3(mask))));
3150
3151        relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
3152        start = idot4(m, starts);
3153        position = 2 * (relativePosition - offset);
3154    }
3155
3156    end = start + int(baseVoxel(vec2(position)).r * 255.0);
3157    pos1 = position;
3158    starts.x = start;
3159    ends.x = end;
3160    pos2 = position + ivec2(1, 0);
3161    starts.y = ends.x;
3162    ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
3163    pos3 = position + ivec2(0, 1);
3164    starts.z = ends.y;
3165    ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
3166    pos4 = position + ivec2(1, 1);
3167    starts.w = ends.z;
3168    mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
3169    m = ivec4(mask, 1 - int(any(bvec3(mask))));
3170    position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
3171
3172    vec2 coord2d = (vec2(position) / uSize) / uScale;
3173    vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
3174
3175    float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
3176
3177    // current vertex for the up to 15 MC cases
3178    int currentVertex = vI - idot4(m, starts);
3179
3180    // ensure winding-order is the same for negative and positive iso-levels
3181    if (uInvert) {
3182        int v = imod(currentVertex + 1, 3);
3183        if (v == 1) currentVertex += 2;
3184        else if (v == 0) currentVertex -= 2;
3185    }
3186
3187    // get index into triIndices table
3188    int mcIndex = 16 * int(edgeIndex) + currentVertex;
3189    vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
3190
3191    // bit mask to avoid conditionals (see comment below) for getting MC case corner
3192    vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
3193
3194    // get edge value masks
3195    vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
3196    vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
3197    vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
3198
3199    // apply bit masks
3200    vec3 b0 = coord3d +
3201                m1.y * c1 +
3202                m1.z * c2 +
3203                m1.w * c3 +
3204                m2.x * c4 +
3205                m2.y * c5 +
3206                m2.z * c6 +
3207                m2.w * c7 +
3208                m3.y * c1 +
3209                m3.z * c2 +
3210                m3.w * c3;
3211    vec3 b1 = coord3d +
3212                m1.x * c1 +
3213                m1.y * c2 +
3214                m1.z * c3 +
3215                m2.x * c5 +
3216                m2.y * c6 +
3217                m2.z * c7 +
3218                m2.w * c4 +
3219                m3.x * c4 +
3220                m3.y * c5 +
3221                m3.z * c6 +
3222                m3.w * c7;
3223
3224    // the conditionals that are avoided by above bitmasks
3225    // vec3 b0 = coord3d;
3226    // vec3 b1 = coord3d;
3227    // if (mcIndex == 0.0) {
3228    //     b1 += c1;
3229    // } else if (mcIndex == 1.0) {
3230    //     b0 += c1; b1 += c2;
3231    // } else if (mcIndex == 2.0) {
3232    //     b0 += c2; b1 += c3;
3233    // } else if (mcIndex == 3.0) {
3234    //     b0 += c3;
3235    // } else if (mcIndex == 4.0) {
3236    //     b0 += c4; b1 += c5;
3237    // } else if (mcIndex == 5.0) {
3238    //     b0 += c5; b1 += c6;
3239    // } else if (mcIndex == 6.0) {
3240    //     b0 += c6; b1 += c7;
3241    // } else if (mcIndex == 7.0) {
3242    //     b0 += c7; b1 += c4;
3243    // } else if (mcIndex == 8.0) {
3244    //     b1 += c4;
3245    // } else if (mcIndex == 9.0) {
3246    //     b0 += c1; b1 += c5;
3247    // } else if (mcIndex == 10.0) {
3248    //     b0 += c2; b1 += c6;
3249    // } else if (mcIndex == 11.0) {
3250    //     b0 += c3; b1 += c7;
3251    // }
3252    // b0 = floor(b0 + 0.5);
3253    // b1 = floor(b1 + 0.5);
3254
3255    vec4 d0 = voxel(b0);
3256    vec4 d1 = voxel(b1);
3257
3258    #ifdef dValueChannel_red
3259        float v0 = d0.r;
3260        float v1 = d1.r;
3261    #else
3262        float v0 = d0.a;
3263        float v1 = d1.a;
3264    #endif
3265
3266    float t = (uIsoValue - v0) / (v0 - v1);
3267    gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
3268
3269    // group id
3270    #if __VERSION__ == 100 || defined(dConstantGroup)
3271        // webgl1 does not support 'flat' interpolation (i.e. no interpolation)
3272        // ensure a constant group id per triangle as needed
3273        #ifdef dPackedGroup
3274            gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
3275        #else
3276            gl_FragData[1] = getGroup(coord3d);
3277        #endif
3278    #else
3279        #ifdef dPackedGroup
3280            gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
3281        #else
3282            gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
3283        #endif
3284    #endif
3285
3286    // normals from gradients
3287    vec3 n0 = -normalize(vec3(
3288        voxelValuePadded(b0 - c1) - voxelValuePadded(b0 + c1),
3289        voxelValuePadded(b0 - c3) - voxelValuePadded(b0 + c3),
3290        voxelValuePadded(b0 - c4) - voxelValuePadded(b0 + c4)
3291    ));
3292    vec3 n1 = -normalize(vec3(
3293        voxelValuePadded(b1 - c1) - voxelValuePadded(b1 + c1),
3294        voxelValuePadded(b1 - c3) - voxelValuePadded(b1 + c3),
3295        voxelValuePadded(b1 - c4) - voxelValuePadded(b1 + c4)
3296    ));
3297    gl_FragData[2].xyz = -vec3(
3298        n0.x + t * (n0.x - n1.x),
3299        n0.y + t * (n0.y - n1.y),
3300        n0.z + t * (n0.z - n1.z)
3301    );
3302
3303    // ensure normal-direction is the same for negative and positive iso-levels
3304    if (uInvert) {
3305        gl_FragData[2].xyz *= -1.0;
3306    }
3307
3308    // apply normal matrix
3309    gl_FragData[2].xyz = uGridTransformAdjoint * gl_FragData[2].xyz;
3310}
3311`,P=`
3312precision highp float;
3313precision highp int;
3314precision highp sampler2D;
3315
3316uniform sampler2D tTriCount;
3317uniform sampler2D tVolumeData;
3318
3319uniform float uIsoValue;
3320uniform vec3 uGridDim;
3321uniform vec3 uGridTexDim;
3322uniform vec2 uScale;
3323
3324#include common
3325
3326// cube corners (excluding origin)
3327const vec3 c1 = vec3(1., 0., 0.);
3328const vec3 c2 = vec3(1., 1., 0.);
3329const vec3 c3 = vec3(0., 1., 0.);
3330const vec3 c4 = vec3(0., 0., 1.);
3331const vec3 c5 = vec3(1., 0., 1.);
3332const vec3 c6 = vec3(1., 1., 1.);
3333const vec3 c7 = vec3(0., 1., 1.);
3334
3335vec3 index3dFrom2d(vec2 coord) {
3336    vec2 gridTexPos = coord * uGridTexDim.xy;
3337    vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
3338    vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
3339    float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
3340    return vec3(posXY, posZ);
3341}
3342
3343vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
3344    float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
3345    float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
3346    float row = intDiv(zSlice * gridDim.x, texDim.x);
3347    vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
3348    return texture2D(tex, coord);
3349}
3350
3351float voxelValue(vec3 pos) {
3352    pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
3353    vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
3354    #ifdef dValueChannel_red
3355        return v.r;
3356    #else
3357        return v.a;
3358    #endif
3359}
3360
3361void main(void) {
3362    vec2 uv = gl_FragCoord.xy / uGridTexDim.xy;
3363    vec3 posXYZ = index3dFrom2d(uv);
3364
3365    // get MC case as the sum of corners that are below the given iso level
3366    float c = step(voxelValue(posXYZ), uIsoValue)
3367        + 2. * step(voxelValue(posXYZ + c1), uIsoValue)
3368        + 4. * step(voxelValue(posXYZ + c2), uIsoValue)
3369        + 8. * step(voxelValue(posXYZ + c3), uIsoValue)
3370        + 16. * step(voxelValue(posXYZ + c4), uIsoValue)
3371        + 32. * step(voxelValue(posXYZ + c5), uIsoValue)
3372        + 64. * step(voxelValue(posXYZ + c6), uIsoValue)
3373        + 128. * step(voxelValue(posXYZ + c7), uIsoValue);
3374    c *= step(c, 254.);
3375
3376    // handle out of bounds positions
3377    posXYZ += 1.0;
3378    posXYZ.xy += 1.0; // pixel padding (usually ok even if the texture has no padding)
3379    if (posXYZ.x >= uGridDim.x || posXYZ.y >= uGridDim.y || posXYZ.z >= uGridDim.z)
3380        c = 0.0;
3381
3382    // get total triangles to generate for calculated MC case from triCount texture
3383    float totalTrianglesToGenerate = texture2D(tTriCount, vec2(intMod(c, 16.), floor(c / 16.)) / 16.).a;
3384    gl_FragColor = vec4(vec3(totalTrianglesToGenerate * 3.0), c / 255.0);
3385}
3386`,k={...d.iz,tTriCount:(0,s.U2)("image-uint8","alpha","ubyte","nearest"),tVolumeData:(0,s.U2)("texture","rgba","ubyte","nearest"),dValueChannel:(0,s.O0)("str
3386ing",["red","alpha"]),uIsoValue:(0,s.wt)("f"),uGridDim:(0,s.wt)("v3"),uGridTexDim:(0,s.wt)("v3"),uScale:(0,s.wt)("v2")},B="active-voxels";function _(e,t){return(0,h.D0)(e.gl)&&t.format===e.gl.RED?"red":"alpha"}let R={...d.iz,tTriIndices:(0,s.U2)("image-uint8","alpha","ubyte","nearest"),tActiveVoxelsPyramid:(0,s.U2)("texture","rgba","float","nearest"),tActiveVoxelsBase:(0,s.U2)("texture","rgba","float","nearest"),tVolumeData:(0,s.U2)("texture","rgba","ubyte","nearest"),dValueChannel:(0,s.O0)("string",["red","alpha"]),uIsoValue:(0,s.wt)("f"),uSize:(0,s.wt)("f"),uLevels:(0,s.wt)("f"),uCount:(0,s.wt)("f"),uInvert:(0,s.wt)("b"),uGridDim:(0,s.wt)("v3"),uGridTexDim:(0,s.wt)("v3"),uGridDataDim:(0,s.wt)("v3"),uGridTransform:(0,s.wt)("m4"),uGridTransformAdjoint:(0,s.wt)("m3"),uScale:(0,s.wt)("v2"),dPackedGroup:(0,s.O0)("boolean"),dAxisOrder:(0,s.O0)("string",["012","021","102","120","201","210"]),dConstantGroup:(0,s.O0)("boolean")},F="isosurface";function L(e,t){return(0,h.D0)(e.gl)&&t.format===e.gl.RED?"red":"alpha"}function z(e,t,r,s,z,N,G,U,V,j,H,q,X,W,K){g.kM&&e.timer.mark("extractIsosurface");let Q=function(e,t,r,n,s,c){g.kM&&e.timer.mark("calcActiveVoxels");let{gl:p,state:m,resources:h}=e,b=t.getWidth(),y=t.getHeight();e.namedFramebuffers[B]||(e.namedFramebuffers[B]=h.framebuffer());let x=e.namedFramebuffers[B];x.bind(),e.namedTextures[B]||(e.namedTextures[B]=h.texture("image-uint8","rgba","ubyte","nearest"));let S=e.namedTextures[B];S.define(b,y);let T=function(e,t,r,n,s,c){if(e.namedComputeRenderables[B]){let a=e.namedComputeRenderables[B].values;u.IO.update(a.uQuadScale,c),u.IO.update(a.tVolumeData,t),u.IO.update(a.dValueChannel,_(e,t)),u.IO.updateIfChanged(a.uIsoValue,s),u.IO.update(a.uGridDim,r),u.IO.update(a.uGridTexDim,n),u.IO.update(a.uScale,c),e.namedComputeRenderables[B].update()}else e.namedComputeRenderables[B]=function(e,t,r,n,s,c){let p={...d.GE,tTriCount:u.IO.create(function(){if(void 0!==a)return a;let{array:e}=a=(0,E.l3)(256,1,Uint8Array);for(let t=0,r=D._w.length;t<r;++t)e[t]=D._w[t].length/3;return a}()),uQuadScale:u.IO.create(c),tVolumeData:u.IO.create(t),dValueChannel:u.IO.create(_(e,t)),uIsoValue:u.IO.create(s),uGridDim:u.IO.create(r),uGridTexDim:u.IO.create(n),uScale:u.IO.create(c)},m={...k},h=(0,l.Lq)("active-voxels",f.C,P),g=(0,o.s8)(e,"triangles",h,m,p);return(0,i.T)(g,p)}(e,t,r,n,s,c);return e.namedComputeRenderables[B]}(e,t,r,n,s,c);return e.state.currentRenderItemId=-1,S.attachFramebuffer(x,0),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}(e),m.viewport(0,0,b,y),m.scissor(0,0,b,y),p.clear(p.COLOR_BUFFER_BIT),m.scissor(0,0,n[0],n[1]),T.render(),p.finish(),g.kM&&e.timer.markEnd("calcActiveVoxels"),S}(e,t,r,s,U,N),Z=function(e,t,r,a){g.kM&&e.timer.mark("createHistogramPyramid");let{gl:n,state:s}=e,c=t.getWidth();if(c!==t.getHeight()||!(0,T.wt)(c))throw Error("inputTexture must be of square power-of-two size");let D=Math.ceil(Math.log(c)/Math.log(2)),E=Math.pow(2,D),M=Math.pow(2,D),P=Math.pow(2,D-1),k=e.isWebGL2?w("pyramid",e,"image-int32","alpha","int","nearest"):w("pyramid",e,"image-uint8","rgba","ubyte","nearest");k.define(M,P);let B=A("pyramid",e);k.attachFramebuffer(B,0),s.viewport(0,0,M,P),(0,h.D0)(n)?n.clearBufferiv(n.COLOR,0,[0,0,0,0]):n.clear(n.COLOR_BUFFER_BIT);let _=[];for(let t=0;t<D;++t)_.push(function(e,t){let r=Math.pow(2,t),a=`level${t}`,n=e.isWebGL2?w(a,e,"image-int32","alpha","int","nearest"):w(a,e,"image-uint8","rgba","ubyte","nearest");n.define(r,r);let i=function(e,t){let r=`${I}-${e}`;return t.namedFramebuffers[r]}(a,e);return i||(i=A(a,e)),n.attachFramebuffer(i,0),{texture:n,framebuffer:i}}(e,t));let R=function(e,t,r){if(e.namedComputeRenderables[I]){let a=e.namedComputeRenderables[I].values;u.IO.update(a.tInputLevel,t),u.IO.update(a.tPreviousLevel,r),e.namedComputeRenderables[I].update()}else e.namedComputeRenderables[I]=function(e,t,r){let a={...d.GE,tInputLevel:u.IO.create(t),tPreviousLevel:u.IO.create(r),uSize:u.IO.create(0),uTexSize:u.IO.create(0),uFirst:u.IO.create(!0)},n={...O},s=(0,l.Lq)("reduction",f.C,C,{},{0:"ivec4"}),c=(0,o.s8)(e,"triangles",s,n,a);return(0,i.T)(c,a)}(e,t,r);return e.namedComputeRenderables[I]}(e,t,_[0].texture);s.currentRenderItemId=-1,function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,
3386!0,!0),r.clearColor(0,0,0,0)}(e);let F=0;for(let e=0;e<D;e++){let t=D-1-e;_[t].framebuffer.bind();let r=Math.pow(2,t);u.IO.update(R.values.uSize,Math.pow(2,e+1)/E),u.IO.update(R.values.uTexSize,r),u.IO.updateIfChanged(R.values.uFirst,0===e),e>0&&(u.IO.update(R.values.tPreviousLevel,_[D-e].texture),R.update()),s.currentRenderItemId=-1,s.viewport(0,0,r,r),s.scissor(0,0,r,r),(0,h.D0)(n)?n.clearBufferiv(n.COLOR,0,[0,0,0,0]):n.clear(n.COLOR_BUFFER_BIT),s.scissor(0,0,a[0],a[1]),R.render(),k.bind(0),n.copyTexSubImage2D(n.TEXTURE_2D,0,F,0,0,0,r,r),k.unbind(0),F+=r}n.finish(),g.kM&&e.timer.markEnd("createHistogramPyramid");let L=Math.max(1,function(e,t){g.kM&&e.timer.mark("getHistopyramidSum");let{gl:r,state:a,resources:n}=e,s=function(e,t){if(e.namedComputeRenderables[y]){let r=e.namedComputeRenderables[y].values;u.IO.update(r.tTexture,t),e.namedComputeRenderables[y].update()}else e.namedComputeRenderables[y]=function(e,t){let r={...d.GE,tTexture:u.IO.create(t)},a={...b},n=(0,l.Lq)("sum",f.C,m,{},{0:"ivec4"}),s=(0,o.s8)(e,"triangles",n,a,r);return(0,i.T)(s,r)}(e,t);return e.namedComputeRenderables[y]}(e,t);e.state.currentRenderItemId=-1,e.namedFramebuffers[y]||(e.namedFramebuffers[y]=n.framebuffer());let c=e.namedFramebuffers[y];return e.namedTextures[y]||(e.namedTextures[y]=(0,h.D0)(r)?n.texture("image-int32","rgba","int","nearest"):n.texture("image-uint8","rgba","ubyte","nearest"),e.namedTextures[y].define(1,1)),e.namedTextures[y].attachFramebuffer(c,0),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}(e),a.viewport(0,0,1,1),s.render(),r.finish(),e.readPixels(0,0,1,1,(0,h.D0)(r)?S:x),r.bindFramebuffer(r.FRAMEBUFFER,null),g.kM&&e.timer.markEnd("getHistopyramidSum"),(0,h.D0)(r)?S[0]:(0,p.UF)(x[0],x[1],x[2])}(e,_[0].texture)),z=Math.ceil(L/Math.pow(2,D));return{pyramidTex:k,count:L,height:z,levels:D,scale:r}}(e,Q,N,s),Y=function(e,t,r,a,s,p,m,b,y,x,S,T,C,O,I,A){let{drawBuffers:w}=e.extensions;if(!w)throw Error("need WebGL draw buffers");g.kM&&e.timer.mark("createIsosurfaceBuffers");let{gl:P,state:k,resources:B,extensions:_}=e,{pyramidTex:z,height:N,levels:G,scale:U,count:V}=a,j=z.getWidth();e.namedFramebuffers[F]||(e.namedFramebuffers[F]=B.framebuffer());let H=e.namedFramebuffers[F];(0,h.D0)(P)?(O||(O=B.texture("image-float32","rgba","float","nearest")),I||(I=B.texture("image-uint8","rgba","ubyte","nearest")),A||(A=_.colorBufferHalfFloat&&_.textureHalfFloat?B.texture("image-float16","rgba","fp16","nearest"):B.texture("image-float32","rgba","float","nearest"))):(O||(O=B.texture("image-float32","rgba","float","nearest")),I||(I=B.texture("image-float32","rgba","float","nearest")),A||(A=B.texture("image-float32","rgba","float","nearest"))),O.define(j,N),I.define(j,N),A.define(j,N),O.attachFramebuffer(H,0),I.attachFramebuffer(H,1),A.attachFramebuffer(H,2);let q=function(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O){if(e.namedComputeRenderables[F]){let n=e.namedComputeRenderables[F].values;u.IO.update(n.tActiveVoxelsPyramid,t),u.IO.update(n.tActiveVoxelsBase,r),u.IO.update(n.tVolumeData,a),u.IO.update(n.dValueChannel,L(e,a)),u.IO.updateIfChanged(n.uIsoValue,g),u.IO.updateIfChanged(n.uSize,Math.pow(2,b)),u.IO.updateIfChanged(n.uLevels,b),u.IO.updateIfChanged(n.uCount,x),u.IO.updateIfChanged(n.uInvert,S),u.IO.update(n.uGridDim,s),u.IO.update(n.uGridTexDim,p),u.IO.update(n.uGridDataDim,m),u.IO.update(n.uGridTransform,h),u.IO.update(n.uGridTransformAdjoint,c.Tu.adjointFromMat4((0,c.Tu)(),h)),u.IO.update(n.uScale,y),u.IO.updateIfChanged(n.dPackedGroup,T),u.IO.updateIfChanged(n.dAxisOrder,C.join("")),u.IO.updateIfChanged(n.dConstantGroup,O),e.namedComputeRenderables[F].update()}else e.namedComputeRenderables[F]=function(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O){let I={...d.GE,tTriIndices:u.IO.create(function(){if(void 0!==n)return n;let{array:e}=n=(0,E.l3)(4096,1,Uint8Array);for(let t=0,r=D._w.length;t<r;++t)for(let r=0;r<16;++r)r<D._w[t].length?e[16*t+r]=D._w[t][r]:e[16*t+r]=255;return n}()),tActiveVoxelsPyramid:u.IO.create(t),tActiveVoxelsBase:u.IO.create(r),tVolumeData:u.IO.create(a),dValueChannel:u.IO.create(L(e,a)),uIsoValue:u.IO.create(g),uSize:u.IO.create(Math.pow(2,b)),uLevels:u.IO.create(b),uCount:u.IO.create(x),uInvert:u.IO.create(S),uGridDim:u.IO.create(s),uGridTexDim:u.IO.create(p),uGridDataDim:u.IO.create(m),uGridTransform:u.IO.create(h),uGridTransformAdjoint:u.IO.create(c.Tu.adjointFromMat4((0,c.Tu)(),h)),uScale:u.IO.create(y),dPackedGroup:u.IO.create(T),dAxisOrder:u.IO.create(C.join("")),dConstantGroup:u.IO.create(O)},A={...R},w=(0,l.Lq)("isosurface",f.C,M,{drawBuffers:"required"}),P=(0,o.s8)(e,"triangles",w,A,I);return(0,i.T)(P,I)}(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O);return e.namedComputeRenderables[F]}(e,z,t,r,s,p,m,b,y,G,U,V,x,S,T,C);return e.state.currentRenderItemId=-1,H.bind(),w.drawBuffers([w.COLOR_ATTACHMENT0,w.COLOR_ATTACHMENT1,w.COLOR_ATTACHMENT2]),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,
3386!0,!0),r.clearColor(0,0,0,0)}(e),k.viewport(0,0,j,N),P.clear(P.COLOR_BUFFER_BIT),q.render(),P.finish(),g.kM&&e.timer.markEnd("createIsosurfaceBuffers"),{vertexTexture:O,groupTexture:I,normalTexture:A,vertexCount:V}}(e,Q,t,Z,r,s,z,G,U,V,j,H,q,X,W,K);return g.kM&&e.timer.markEnd("extractIsosurface"),Y}},68971:function(e,t,r){r.d(t,{GK:function(){return d},iz:function(){return p},GE:function(){return f},Oz:function(){return g}}),r(91407);var a=r(85764),n=r(18406),i=r(87144),o=r(45705);let s=`
3387precision highp float;
3388precision highp sampler2D;
3389
3390uniform sampler2D tColor;
3391uniform vec2 uTexSize;
3392
3393void main() {
3394    vec2 coords = gl_FragCoord.xy / uTexSize;
3395    gl_FragColor = texture2D(tColor, coords);
3396}
3397`;var l=r(10410),u=r(57155),c=r(62113);let d=new Float32Array([1,1,-1,1,-1,-1,-1,-1,1,-1,1,1]),p={drawCount:(0,n.R$)("number"),instanceCount:(0,n.R$)("number"),aPosition:(0,n.LQ)("float32",2,0),uQuadScale:(0,n.wt)("v2")},f={drawCount:a.IO.create(6),instanceCount:a.IO.create(1),aPosition:a.IO.create(d),uQuadScale:a.IO.create(i.Sg.create(1,1))},m={...p,tColor:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2")},h=(0,o.Lq)("copy",l.C,s);function g(e,t){let r={...f,tColor:a.IO.create(t),uTexSize:a.IO.create(i.Sg.create(t.getWidth(),t.getHeight()))},n={...m},o=(0,u.s8)(e,"triangles",h,n,r);return(0,c.T)(o,r)}},67241:function(e,t,r){r.d(t,{Hq:function(){return C},OG:function(){return O},xH:function(){return T}});var a=r(16252),n=r(62113),i=r(57155),o=r(18406),s=r(45705),l=r(85764);let u={...o.Pp,aPosition:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),uBboxMin:(0,o.wt)("v3"),uBboxMax:(0,o.wt)("v3"),uBboxSize:(0,o.wt)("v3"),uMaxSteps:(0,o.wt)("i"),uStepScale:(0,o.wt)("f"),uJumpLength:(0,o.wt)("f"),uTransform:(0,o.wt)("m4"),uGridDim:(0,o.wt)("v3"),tTransferTex:(0,o.U2)("image-uint8","alpha","ubyte","linear"),uTransferScale:(0,o.wt)("f","material"),dGridTexType:(0,o.O0)("str
3397ing",["2d","3d"]),uGridTexDim:(0,o.wt)("v3"),tGridTex:(0,o.U2)("texture","rgba","ubyte","linear"),uGridStats:(0,o.wt)("v4"),uCellDim:(0,o.wt)("v3"),uCartnToUnit:(0,o.wt)("m4"),uUnitToCartn:(0,o.wt)("m4"),dPackedGroup:(0,o.O0)("boolean"),dAxisOrder:(0,o.O0)("string",["012","021","102","120","201","210"]),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),meta:(0,o.R$)("unknown")},c={...o.Pp,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aNormal:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),dVaryingGroup:(0,o.O0)("boolean"),dFlatShaded:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),meta:(0,o.R$)("unknown")},d={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),dPointSizeAttenuation:(0,o.O0)("boolean"),dPointStyle:(0,o.O0)("str
3397ing",["square","circle","fuzzy"])},p={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aMapping:(0,o.LQ)("float32",2,0),aStart:(0,o.LQ)("float32",3,0),aEnd:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),dLineSizeAttenuation:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),stripCount:(0,o.R$)("number"),stripOffsets:(0,o.R$)("uint32")},f={...o.Pp,...o.rM,uTexDim:(0,o.wt)("v2"),tPositionGroup:(0,o.U2)("image-float32","rgba","float","nearest"),padding:(0,o.R$)("number"),uDoubleSided:(0,o.wt)("b","material"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),dSolidInterior:(0,o.O0)("boolean"),dClipPrimitive:(0,o.O0)("boolean"),dApproximate:(0,o.O0)("boolean"),uAlphaThickness:(0,o.wt)("f"),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),lodLevels:(0,o.R$)("unknown"),centerBuffer:(0,o.R$)("float32"),groupBuffer:(0,o.R$)("float32")},m={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aMapping:(0,o.LQ)("float32",2,0),aDepth:(0,o.LQ)("float32",1,0),elements:(0,o.xU)("uint32"),aTexCoord:(0,o.LQ)("float32",2,0),tFont:(0,o.U2)("image-uint8","alpha","ubyte","linear"),padding:(0,o.R$)("number"),uBorderWidth:(0,o.wt)("f","material"),uBorderColor:(0,o.wt)("v3","material"),uOffsetX:(0,o.wt)("f","material"),uOffsetY:(0,o.wt)("f","material"),uOffsetZ:(0,o.wt)("f","material"),uBackgroundColor:(0,o.wt)("v3","material"),uBackgroundOpacity:(0,o.wt)("f","material")},h={...o.Pp,uGeoTexDim:(0,o.wt)("v2","buffered"),tPosition:(0,o.U2)("texture","rgb","float","nearest"),tGroup:(0,o.U2)("texture","alpha","float","nearest"),tNormal:(0,o.U2)("texture","rgb","float","nearest"),dVaryingGroup:(0,o.O0)("boolean"),dFlatShaded:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("str
3397ing",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),meta:(0,o.R$)("unknown")};var g=r(68303);let b={...o.Pp,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aUv:(0,o.LQ)("float32",2,0),elements:(0,o.xU)("uint32"),uImageTexDim:(0,o.wt)("v2"),tImageTex:(0,o.U2)("image-uint8","rgba","ubyte","nearest"),tGroupTex:(0,o.U2)("image-uint8","rgba","ubyte","nearest"),tValueTex:(0,o.U2)("image-float32","alpha","float","linear"),uTrimType:(0,o.wt)("i"),uTrimCenter:(0,o.wt)("v3"),uTrimRotation:(0,o.wt)("q"),uTrimScale:(0,o.wt)("v3"),uTrimTransform:(0,o.wt)("m4"),uIsoLevel:(0,o.wt)("f"),dInterpolation:(0,o.O0)("string",["nearest","catmulrom","mitchell","bspline"])},y={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aStart:(0,o.LQ)("float32",3,0),aEnd:(0,o.LQ)("float32",3,0),aMapping:(0,o.LQ)("float32",3,0),aScale:(0,o.LQ)("float32",1,0),aCap:(0,o.LQ)("float32",1,0),aColorMode:(0,o.LQ)("float32",1,0),elements:(0,o.xU)("uint32"),padding:(0,o.R$)("number"),uDoubleSided:(0,o.wt)("b","material"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("str
3397ing",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),dSolidInterior:(0,o.O0)("boolean"),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),dDualColor:(0,o.O0)("boolean")};var x=r(97667);let S=(0,a.s)(0,2147483647),T=(0,a.s)(0,2147483647);function C(e,t,r,a){return{id:S(),type:e,values:t,state:r,materialId:a}}function O(e,t,r,a){switch(t.type){case"mesh":return function(e,t,r,a,u,d,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...c},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.pb,g=(0,i.ww)(e,"triangles",h,f,m,u,d);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"points":return function(e,t,r,a,u,c,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...d},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.lx,g=(0,i.ww)(e,"points",h,f,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"spheres":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...f},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.fj,g=(0,i.ww)(e,"triangles",h,p,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"cylinders":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...y},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},m=s.gz,h=(0,i.ww)(e,"triangles",m,p,f,u,c);return(0,n.O)(h,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"text":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...m},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.cs,g=(0,i.ww)(e,"triangles",h,p,f,u,c);return(0,n.O)(g,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"lines":return function(e,t,r,a,u,c,d){let f={...o.U6,...o.SY,...o.yX,...o.P_,...p},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.tc,g=(0,i.ww)(e,"triangles",h,f,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"direct-volume":return function(e,t,r,a,c,d,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...u};e.isWebGL2||(f.uMaxSteps=(0,o.O0)("number"));let m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.mE,g=(0,i.ww)(e,"triangles",h,f,m,c,d);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"image":return function(e,t,r,a,l,u,c){let d={...o.U6,...o.SY,...o.yX,...o.P_,...b},p={...r,uObjectId:g.IO.create(t),dLightCount:g.IO.create(c.dLightCount),dColorMarker:g.IO.create(c.dColorMarker)},f=s.Oc,m=(0,i.ww)(e,"triangles",f,d,p,l,u);return(0,n.O)(m,p,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"texture-mesh":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...h},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},m=s.pb,g=(0,i.ww)(e,"triangles",m,p,f,u,c);return(0,n.O)(g,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a)}(0,x.UT)(t.type)}},62113:function(e,t,r){r.d(t,{O:function(){return g},T:function(){return b}});var a=r(68303),n=r(16252),i=r(23833),o=r(99592),s=r(2941),l=r(30441),u=r(22934),c=r(48502);let d=s.H.distanceToPoint,p=o.u.intersectsSphere3D,f=l.C.fromArray,m=(0,n.s)();function h(e,t){return t&&t.instanceCounts.length>=e?t:{firsts:new Int32Array(e),counts:new Int32Array(e),offsets:new Int32Array(e),instanceCounts:new Int32Array(e),baseVertices:new Int32Array(e),baseInstances:new Uint32Array(e),count:0,uniforms:[]}}function g(e,t,r){let n=m(),o=h(0),s=[],g=!1,b=-1,y=(0,l.C)(),x=()=>{var e;let r=null===(e=t.lodLevels)||void 0===e?void 0:e.ref.value;if(r&&r.length>0){let{cellCount:e}=t.instanceGrid.ref.value;s.length=r.length;for(let t=0,a=r.length;t<a;++t)s[t]=h(e,s[t]),s[t].count=0;
3397if(t.lodLevels.ref.version!==b){for(let e=0,t=r.length;e<t;++e)1!==s[e].uniforms.length&&(s[e].uniforms.length=1,s[e].uniforms[0]=["uLod",a.IO.create((0,u.T)())]),a.IO.update(s[e].uniforms[0][1],u.T.set(s[e].uniforms[0][1].ref.value,r[e][0],r[e][1],r[e][2],r[e][4]));b=t.lodLevels.ref.version}}};return x(),{id:n,materialId:e.materialId,values:t,state:r,cull:(e,r,a,n)=>{var i,l;if(g=!1,0===t.drawCount.ref.value||0===t.instanceCount.ref.value||t.instanceGrid.ref.value.cellSize<=1)return;let{cellOffsets:u,cellSpheres:m,cellCount:S,batchOffsets:T,batchSpheres:C,batchCount:O,batchCell:I,batchSize:A}=t.instanceGrid.ref.value,[w,D]=t.uLod.ref.value,E=0!==w||0!==D,M=2*A,P=null===(i=t.lodLevels)||void 0===i?void 0:i.ref.value;if(P&&P.length>0){if((null===(l=t.lodLevels)||void 0===l?void 0:l.ref.version)!==b)x();else for(let e=0,t=P.length;e<t;++e)s[e].count=0;for(let t=0;t<O;++t){let i=T[t],o=T[t+1];if(0==o-i)continue;f(y,C,4*t);let l=d(e,y.center);if(E&&(l+y.radius<w||l-y.radius>D)){c.kM&&(n.culled.lod+=u[I[o-1]+1]-u[I[i]]);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=u[I[o-1]+1]-u[I[i]]);continue}if(null!==a&&a(y)){c.kM&&(n.culled.occlusion+=u[I[o-1]+1]-u[I[i]]);continue}for(let t=i;t<o;++t){let i=I[t],o=u[i],l=u[i+1]-o;if(0===l)continue;f(y,m,4*i);let h=d(e,y.center);if(E&&(h+y.radius<w||h-y.radius>D)){c.kM&&(n.culled.lod+=l);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=l);continue}if(null!==a&&h-y.radius<M&&a(y)){c.kM&&(n.culled.occlusion+=l);continue}for(let e=0,t=P.length;e<t;++e){if(h+y.radius<P[e][0]||h-y.radius>P[e][1])continue;let t=s[e],r=t.count;r>0&&t.baseInstances[r-1]+t.instanceCounts[r-1]===o&&t.counts[r-1]===P[e][3]?t.instanceCounts[r-1]+=l:(t.counts[r]=P[e][3],t.instanceCounts[r]=l,t.baseInstances[r]=o,t.count+=1)}}}}else{let{baseInstances:i,instanceCounts:l,counts:g}=o=h(S,o),b=0;for(let o=0;o<O;++o){let s=T[o],h=T[o+1];if(0!=h-s){if(f(y,C,4*o),E){let t=d(e,y.center);if(t+y.radius<w||t-y.radius>D){c.kM&&(n.culled.lod+=u[I[h-1]+1]-u[I[s]]);continue}}if(!p(r,y)){c.kM&&(n.culled.frustum+=u[I[h-1]+1]-u[I[s]]);continue}if(null!==a&&a(y)){c.kM&&(n.culled.occlusion+=u[I[h-1]+1]-u[I[s]]);continue}for(let o=s;o<h;++o){let s=I[o],h=u[s],x=u[s+1]-h;if(0===x)continue;f(y,m,4*s);let S=d(e,y.center);if(E&&(S+y.radius<w||S-y.radius>D)){c.kM&&(n.culled.lod+=x);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=x);continue}if(null!==a&&S-y.radius<M&&a(y)){c.kM&&(n.culled.occlusion+=x);continue}b>0&&i[b-1]+l[b-1]===h?l[b-1]+=x:(g[b]=t.drawCount.ref.value,l[b]=x,i[b]=h,b+=1)}}}o.count=b,s.length=1,s[0]=o,s[0].uniforms.length=0}g=!0},uncull:()=>{g=!1},cullSimple:(e,r,a)=>{var n,i;let o=null===(n=t.lodLevels)||void 0===n?void 0:n.ref.value;if(o&&0!==o.length){if((null===(i=t.lodLevels)||void 0===i?void 0:i.ref.version)!==b)x();else for(let e=0,t=o.length;e<t;++e)s[e].count=0;for(let n=0,i=o.length;n<i;++n)if(e+r<o[n][1]*a){let e=s[n],r=e.count;e.counts[r]=o[n][3],e.instanceCounts[r]=t.instanceCount.ref.value,e.baseInstances[r]=0,e.count+=1;break}g=!0}},render:(n,o)=>{t.uAlpha&&t.alpha&&a.IO.updateIfChanged(t.uAlpha,(0,i.uZ)(t.alpha.ref.value*r.alphaFactor,0,1)),e.render(n,o,g?s:void 0)},getByteCount:()=>e.getByteCount(),getProgram:t=>e.getProgram(t),setTransparency:t=>e.setTransparency(t),update:()=>{e.update(),x()},dispose:()=>e.destroy()}}function b(e,t){return{id:m(),values:t,render:()=>{e.getProgram("compute").finalize(!0),e.render("compute",0)},update:()=>e.update(),dispose:()=>e.destroy()}}},18406:function(e,t,r){function a(e,t){let r={},a={},n={},i={},o={},s={},l={};return Object.keys(e).forEach(u=>{let c=e[u];"attribute"===c.type&&(r[u]=t[u]),"define"===c.type&&(a[u]=t[u]),"texture"===c.type&&void 0!==t[u]&&("material"===c.variant?i[u]=t[u]:n[u]=t[u]),"uniform"===c.type&&void 0!==t[u]&&("material"===c.variant?s[u]=t[u]:"buffered"===c.variant?l[u]=t[u]:o[u]=t[u])}),{attributeValues:r,defineValues:a,textureValues:n,materialTextureValues:i,uniformValues:o,materialUniformValues:s,bufferedUniformValues:l}}function n(e){let t={};return Object.keys(e).forEach(r=>{t[r]=e[r].ref.version}),t}function i(e,t,r){return{type:"attribute",kind:e,itemSize:t,divisor:r}}function o(e,t){return{type:"uniform",kind:e,variant:t}}function s(e,t,r,a,n){return{type:"texture",kind:e,format:t,dataType:r,filter:a,variant:n}}function l(e){return{type:"elements",kind:e}}function u(e,t){return{type:"define",kind:e,options:t}}function c(e){return{type:"value",kind:e}}r.d(t,{LQ:function(){return i},O0:function(){return u},P_:function(){return m},Pp:function(){return O},R$:function(){return c}
3397,SY:function(){return p},U2:function(){return s},U6:function(){return d},Xe:function(){return n},kA:function(){return a},rM:function(){return g},wt:function(){return o},xU:function(){return l},yX:function(){return f}});let d={uDrawId:o("i"),uModel:o("m4"),uView:o("m4"),uInvView:o("m4"),uModelView:o("m4"),uInvModelView:o("m4"),uProjection:o("m4"),uInvProjection:o("m4"),uModelViewProjection:o("m4"),uInvModelViewProjection:o("m4"),uHasHeadRotation:o("b"),uInvHeadRotation:o("m4"),uIsAsymmetricProjection:o("b"),uHasEyeCamera:o("b"),uModelViewEye:o("m4"),uInvModelViewEye:o("m4"),uIsOrtho:o("f"),uPixelRatio:o("f"),uViewport:o("v4"),uViewOffset:o("v2"),uModelScale:o("f"),uDrawingBufferSize:o("v2"),uCameraPosition:o("v3"),uCameraDir:o("v3"),uCameraPlane:o("v4"),uNear:o("f"),uFar:o("f"),uFog:o("b"),uFogNear:o("f"),uFogFar:o("f"),uFogColor:o("v3"),uTransparentBackground:o("b"),uLightDirection:o("v3[]"),uLightColor:o("v3[]"),uAmbientColor:o("v3"),uPickingAlphaThreshold:o("f"),uHighlightColor:o("v3"),uSelectColor:o("v3"),uDimColor:o("v3"),uHighlightStrength:o("f"),uSelectStrength:o("f"),uDimStrength:o("f"),uMarkerPriority:o("i"),uMarkerAverage:o("f"),uXrayEdgeFalloff:o("f"),uCelSteps:o("f"),uExposure:o("f"),uRenderMask:o("i"),uMarkingDepthTest:o("b"),uMarkingType:o("i"),uPickType:o("i")},p={tDepth:s("texture","depth","ushort","nearest"),tDpoitDepth:s("texture","rg","float","nearest"),tDpoitFrontColor:s("texture","rgba","float","nearest"),tDpoitBackColor:s("texture","rgba","float","nearest")},f={dLightCount:u("number"),dColorMarker:u("boolean")},m={uObjectId:o("i")},h={uColor:o("v3","material"),uColorTexDim:o("v2"),uColorGridDim:o("v3"),uColorGridTransform:o("v4"),uPaletteDomain:o("v2"),uPaletteDefault:o("v3"),tColor:s("image-uint8","rgb","ubyte","nearest"),tPalette:s("image-uint8","rgb","ubyte","nearest"),tColorGrid:s("texture","rgb","ubyte","linear"),dColorType:u("string",["uniform","attribute","instance","group","groupInstance","vertex","vertexInstance","volume","volumeInstance","direct"]),dUsePalette:u("boolean")},g={uSize:o("f","material"),uSizeTexDim:o("v2"),tSize:s("image-uint8","rgb","ubyte","nearest"),dSizeType:u("string",["uniform","attribute","instance","group","groupInstance"]),uSizeFactor:o("f","material")},b={uMarker:o("f"),uMarkerTexDim:o("v2"),tMarker:s("image-uint8","alpha","ubyte","nearest"),markerAverage:c("number"),markerStatus:c("number"),dMarkerType:u("string",["instance","groupInstance"])},y={uOverpaintTexDim:o("v2"),tOverpaint:s("image-uint8","rgba","ubyte","nearest"),dOverpaint:u("boolean"),uOverpaintGridDim:o("v3"),uOverpaintGridTransform:o("v4"),tOverpaintGrid:s("texture","rgba","ubyte","linear"),dOverpaintType:u("string",["instance","groupInstance","volumeInstance"]),uOverpaintStrength:o("f","material")},x={uTransparencyTexDim:o("v2"),tTransparency:s("image-uint8","alpha","ubyte","nearest"),dTransparency:u("boolean"),transparencyAverage:c("number"),transparencyMin:c("number"),uTransparencyGridDim:o("v3"),uTransparencyGridTransform:o("v4"),tTransparencyGrid:s("texture","alpha","ubyte","linear"),dTransparencyType:u("string",["instance","groupInstance","volumeInstance"]),uTransparencyStrength:o("f","material")},S={uEmissiveTexDim:o("v2"),tEmissive:s("image-uint8","alpha","ubyte","nearest"),dEmissive:u("boolean"),emissiveAverage:c("number"),uEmissiveGridDim:o("v3"),uEmissiveGridTransform:o("v4"),tEmissiveGrid:s("texture","alpha","ubyte","linear"),dEmissiveType:u("string",["instance","groupInstance","volumeInstance"]),uEmissiveStrength:o("f","material")},T={uSubstanceTexDim:o("v2"),tSubstance:s("image-uint8","rgba","ubyte","nearest"),dSubstance:u("boolean"),uSubstanceGridDim:o("v3"),uSubstanceGridTransform:o("v4"),tSubstanceGrid:s("texture","rgba","ubyte","linear"),dSubstanceType:u("string",["instance","groupInstance","volumeInstance"]),uSubstanceStrength:o("f","material")},C={uClippingTexDim:o("v2"),tClipping:s("image-uint8","alpha","ubyte","nearest"),dClipping:u("boolean"),dClippingType:u("string",["instance","groupInstance"])},O={dGeometryType:u("string",["cylinders","directVolume","image","lines","mesh","points","spheres","text","textureMesh"]),...h,...b,...y,...x,...S,...T,...C,dClipObjectC
3397ount:u("number"),dClipVariant:u("string",["instance","pixel"]),uClipObjectType:o("i[]","material"),uClipObjectInvert:o("b[]","material"),uClipObjectPosition:o("v3[]","material"),uClipObjectRotation:o("v4[]","material"),uClipObjectScale:o("v3[]","material"),uClipObjectTransform:o("m4[]","material"),aInstance:i("float32",1,1),aTransform:i("float32",16,1),uAlpha:o("f","material"),uMetalness:o("f","material"),uRoughness:o("f","material"),uBumpiness:o("f","material"),uEmissive:o("f","material"),uDensity:o("f","material"),uVertexCount:o("i"),uInstanceCount:o("i"),uGroupCount:o("i"),uInvariantBoundingSphere:o("v4"),uLod:o("v4"),drawCount:c("number"),instanceCount:c("number"),alpha:c("number"),matrix:c("m4"),transform:c("float32"),extraTransform:c("float32"),hasReflection:c("boolean"),instanceGranularity:c("boolean"),boundingSphere:c("sphere"),invariantBoundingSphere:c("sphere"),instanceGrid:c("instanceGrid")}},62927:function(e,t,r){r.d(t,{Lo:function(){return h},Yx:function(){return f},l3:function(){return l}});var a=r(48930),n=r(87144),i=r(83576);r(36111);let o=n.AO.fromArray,s=n.AO.transformMat4Offset;function l(e,t,r,a){let{length:n,width:i,height:o}=function(e,t){let r=Math.ceil(Math.sqrt(e=Math.max(e,2)));r+=(t-r%t)%t;let a=r>0?Math.ceil(e/r):0;return{width:r,height:a,length:r*a*t}}(e,t);return{array:a=a&&a.length>=n?a:new r(n),width:i,height:o}}let u=(0,n.AO)(),c=new i.q("14"),d=new i.q("98");function p(e){return e>1e5?c:d}function f(e,t,r){let i=3*r,s=p(t);s.reset();for(let r=0,a=3*t;r<a;r+=i)o(u,e,r),s.includePosition(u);s.finishedIncludeStep();for(let r=0,a=3*t;r<a;r+=i)o(u,e,r),s.radiusPosition(u);let l=s.getSphere();if(t<=14){let r=[];for(let a=0,s=3*t;a<s;a+=i)r.push(o((0,n.AO)(),e,a));a.CP.setExtrema(l,r)}return l}let m=(0,n.yb)();function h(e,t,r,i){if(1===r){n.yb.fromArray(m,t,i);let r=a.CP.clone(e);return n.yb.isIdentity(m)?r:a.CP.transform(r,r,m)}let o=p(r);o.reset();let{center:l,radius:c,extrema:d}=e;if(d&&r<=14){for(let e=0;e<r;++e)for(let r of d)s(u,r,t,0,0,16*e+i),o.includePosition(u);o.finishedIncludeStep();for(let e=0;e<r;++e)for(let r of d)s(u,r,t,0,0,16*e+i),o.radiusPosition(u)}else{for(let e=0;e<r;++e)s(u,l,t,0,0,16*e+i),o.includePositionRadius(u,c);o.finishedIncludeStep();for(let e=0;e<r;++e)s(u,l,t,0,0,16*e+i),o.radiusPositionRadius(u,c)}return o.getSphere()}},12489:function(e,t,r){let a,n;r.d(t,{N4:function(){return c},Th:function(){return p},bR:function(){return M},g4:function(){return A}});var i,o,s,l,u,c,d,p,f=r(85409),m=r(87144),h=r(70371),g=r(85764),b=r(14086),y=r(58463),x=r(36111),S=r(23833),T=r(48502),C=r(99592),O=r(2941),I=r(48930);(i=c||(c={}))[i.None=0]="None",i[i.Object=1]="Object",i[i.Instance=2]="Instance",i[i.Group=3]="Group",(o=d||(d={}))[o.None=0]="None",o[o.Depth=1]="Depth",o[o.Mask=2]="Mask";let A={backgroundColor:b.e.Color((0,h.Il)(0),{description:"Background color of the 3D canvas"}),pickingAlphaThreshold:b.e.Numeric(.5,{min:0,max:1,step:.01},{description:"The minimum opacity value needed for an object to be pickable."}),colorMarker:b.e.Boolean(!0,{description:"Enable color marker"}),highlightColor:b.e.Color(h.Il.fromNormalizedRgb(1,.4,.6)),selectColor:b.e.Color(h.Il.fromNormalizedRgb(.2,1,.1)),dimColor:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),highlightStrength:b.e.Numeric(.3,{min:0,max:1,step:.1}),selectStrength:b.e.Numeric(.3,{min:0,max:1,step:.1}),dimStrength:b.e.Numeric(0,{min:0,max:1,step:.1}),markerPriority:b.e.Select(1,[[1,"Highlight"],[2,"Select"]]),xrayEdgeFalloff:b.e.Numeric(1,{min:0,max:3,step:.1}),celSteps:b.e.Numeric(5,{min:2,max:16,step:1}),exposure:b.e.Numeric(1,{min:0,max:3,step:.01}),light:b.e.ObjectList({inclination:b.e.Numeric(150,{min:0,max:180,step:1}),azimuth:b.e.Numeric(320,{min:0,max:360,step:1}),color:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),intensity:b.e.Numeric(.6,{min:0,max:5,step:.01})},e=>h.Il.toHexString(e.color),{defaultValue:[{inclination:150,azimuth:320,color:h.Il.fromNormalizedRgb(1,1,1),intensity:.6}]}),ambientColor:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),ambientIntensity:b.e.Numeric(.4,{min:0,max:2,step:.01})},w=(0,m.AO)(),D=(0,m.AO)();function E(e,t){let r=e.length,{direction:a,color:n}=t||{direction:Array(3*r).fill(0),color:Array(3*r).fill(0)};for(let t=0;t<r;++t){let r=e[t];m.AO.directionFromSpherical(w,(0,y.Id)(r.inclination),(0,y.Id)(r.azimuth),1),m.AO.toArray(w,a,3*t),m.AO.scale(D,h.Il.toVec3Normalized(D,r.color),r.intensity),m.AO.toArray(D,n,3*t)}return{count:r,direction:a,color:n}}function M(e,t){let r=Array(3*e.count);for(let a=0,n=e.count;a<n;++a)m.AO.fromArray(w,e.direction,3*a),m.AO.transformDirection(w,w,t),m.AO.toArray(w,r,3*a);return r}s=p||(p={}),(l=a||(a={}))[l.None=0]="None",l[l.BlendedFront=1]="BlendedFront",l[l.BlendedBack=2]="BlendedBack",(u=n||(n={}))[u.All=0]="All",u[u.Opaque=1]="Opaque",u[u.Transparent=2]="Transparent",s.create=function(e,t={}){let{gl:r,state:i,stats:o}=e,s=b.e.merge(A,b.e.getDefaultValues(A),t),l=E(s.light),u=(0,f.l_)(),p=m.Sg.create(r.drawingBufferWidth,r.drawingBufferHeight),y=h.Il.toVec3Normalized((0,m.AO)(),s.backgroundColor),w=!1,D=null,P=e.resources.texture("image-uint8","rgba","ubyte","nearest");P.define(1,1),P.load({array:new Uint8Array([255,255,255,255]),width:1,height:1});let k=[["tDepth",P]],B=(0,m.yb)(),_=(0,m.yb)(),R=(0,m.yb)(),F=(0,m.yb)(),L=(0,m.yb)(),z=(0,m.yb)(),N=(0,m.yb)(),G=(0,m.yb)(),U=(0,m.yb)(),V=(0,m.yb)(),j=(0,m.yb)(),H=(0,m.AO)(),q=(0,m.AO)(),X=(0,m.AO)(),W=(0,O.H)(),K=(0,m.Sg)(),Q=(0,C.u)(),Z=1,Y=(0,I.CP)(),$=(0,m.AO)();m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity);let J={uDrawId:g.IO.create(0),uModel:g.IO.create(m.yb.identity()),uView:g.IO.create(_),uInvView:g.IO.create(R),uModelView:g.IO.create(F),uInvModelView:g.IO.create(L),uInvProjection:g.IO.create(z),uProjection:g.IO.create((0,m.yb)()),uModelViewProjection:g.IO.create(N),uInvModelViewProjection:g.IO.create(G),uHasHeadRotation:g.IO.create(!1),uInvHeadRotation:g.IO.create(U),uHasEyeCamera:g.IO.create(!1),uModelViewEye:g.IO.create(V),uInvModelViewEye:g.IO.create(j),uIsAsymmetricProjection:g.IO.create(!1),uIsOrtho:g.IO.create(1),uViewOffset:g.IO.create(K),uModelScale:g.IO.create(1),uPixelRatio:g.IO.create(e.pixelRatio),uViewport:g.IO.create(f.l_.toVec4((0,m.T8)(),u)),uDrawingBufferSize:g.IO.create(p),uCameraPosition:g.IO.create(q),uCameraDir:g.IO.create(H),uCameraPlane:g.IO.create(O.H.toArray(W,(0,m.T8)(),0)),uNear:g.IO.create(1),uFar:g.IO.create(1e4),uFog:g.IO.create(!0),uFogNear:g.IO.create(1),uFogFar:g.IO.create(1e4),uFogColor:g.IO.create(y),uRenderMask:g.IO.create(0),uMarkingDepthTest:g.IO.create(!1),uPickType:g.IO.create(c.None),uMarkingType:g.IO.create(d.None),uTransparentBackgroun
3397d:g.IO.create(!1),uLightDirection:g.IO.create(l.direction),uLightColor:g.IO.create(l.color),uAmbientColor:g.IO.create($),uPickingAlphaThreshold:g.IO.create(s.pickingAlphaThreshold),uHighlightColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.highlightColor)),uSelectColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.selectColor)),uDimColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.dimColor)),uHighlightStrength:g.IO.create(s.highlightStrength),uSelectStrength:g.IO.create(s.selectStrength),uDimStrength:g.IO.create(s.dimStrength),uMarkerPriority:g.IO.create(s.markerPriority),uMarkerAverage:g.IO.create(0),uXrayEdgeFalloff:g.IO.create(s.xrayEdgeFalloff),uCelSteps:g.IO.create(s.celSteps),uExposure:g.IO.create(s.exposure)},ee=Object.entries(J),et=!0,er=(t,n,o)=>{var s,l,u;if(t.state.disposed||!t.state.visible||!t.state.pickable&&"pick"===n||!t.values.drawCount.ref.value||(I.CP.scaleNX(Y,t.values.boundingSphere.ref.value,Z),!C.u.intersectsSphere3D(Q,Y)))return;let[c,d]=t.values.uLod.ref.value;if(0!==c||0!==d){let{center:e,radius:t}=Y,r=O.H.distanceToPoint(W,e);if(r+t<c*Z||r-t>d*Z)return}if(1===Z){if(null!==D&&D(Y))return;let r=t.values.instanceGrid.ref.value.cellSize>0,a=t.values.uInstanceCount.ref.value>1;r&&(a||t.values.lodLevels)?t.cull(W,Q,D,e.stats):t.uncull()}else if(t.values.lodLevels){let{center:e,radius:r}=Y,a=O.H.distanceToPoint(W,e);t.cullSimple(a,r,Z)}else t.uncull();let p=t.getProgram(n);if(i.currentProgramId!==p.id&&(et=!0,p.use()),et&&(p.setUniforms(ee),p.bindTextures(k,0),et=!1),"directVolume"===t.values.dGeometryType.ref.value){if("color"!==n)return;i.disable(r.CULL_FACE),i.frontFace(r.CCW)}else o===a.BlendedFront?(i.enable(r.CULL_FACE),(null===(s=t.values.dFlipSided)||void 0===s?void 0:s.ref.value)?(i.frontFace(r.CW),i.cullFace(r.FRONT)):(i.frontFace(r.CCW),i.cullFace(r.BACK))):o===a.BlendedBack?(i.enable(r.CULL_FACE),(null===(l=t.values.dFlipSided)||void 0===l?void 0:l.ref.value)?(i.frontFace(r.CW),i.cullFace(r.BACK)):(i.frontFace(r.CCW),i.cullFace(r.FRONT))):(t.values.uDoubleSided?t.values.uDoubleSided.ref.value||t.values.hasReflection.ref.value?i.disable(r.CULL_FACE):i.enable(r.CULL_FACE):i.disable(r.CULL_FACE),(null===(u=t.values.dFlipSided)||void 0===u?void 0:u.ref.value)?(i.frontFace(r.CW),i.cullFace(r.FRONT)):(i.frontFace(r.CCW),i.cullFace(r.BACK)));t.render(n,k.length)},ea=(e,t,a,n,o)=>{(0,x.H0)(k,"tDepth",a||P),Z=t.scale,g.IO.update(J.uModel,m.yb.scaleUniformly(B,e.view,Z)),g.IO.update(J.uModelView,m.yb.mul(F,t.view,B)),g.IO.update(J.uInvModelView,m.yb.invert(L,F)),g.IO.update(J.uModelViewProjection,m.yb.mul(N,F,t.projection)),g.IO.update(J.uInvModelViewProjection,m.yb.invert(G,N)),g.IO.updateIfChanged(J.uRenderMask,n),g.IO.updateIfChanged(J.uMarkingDepthTest,o),m.yb.isZero(t.viewEye)?(g.IO.updateIfChanged(J.uHasEyeCamera,!1),g.IO.updateIfChanged(J.uModelViewEye,m.yb.id),g.IO.updateIfChanged(J.uInvModelViewEye,m.yb.id)):(g.IO.updateIfChanged(J.uHasEyeCamera,!0),g.IO.update(J.uModelViewEye,m.yb.mul(V,t.viewEye,B)),g.IO.update(J.uInvModelViewEye,m.yb.invert(j,V))),i.enable(r.SCISSOR_TEST),i.colorMask(!0,!0,!0,!0);let{x:s,y:l,width:c,height:d}=u;i.viewport(s,l,c,d),i.scissor(s,l,c,d),et=!0,i.currentRenderItemId=-1},en=function(e){var t,r,a,n;let i=(0,S.uZ)(e.values.alpha.ref.value*e.state.alphaFactor,0,1),o=(null===(t=e.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="on"||(null===(r=e.values.dXrayShaded)||void 0===r?void 0:r.ref.value)==="inverted";return 1===i&&1!==e.values.transparencyAverage.ref.value&&"directVolume"!==e.values.dGeometryType.ref.value&&(null===(a=e.values.dPointStyle)||void 0===a?void 0:a.ref.value)!=="fuzzy"&&!o||(null===(n=e.values.dTransparentBackfaces)||void 0===n?void 0:n.ref.value)==="opaque"},ei=function(e){var t,r,a;let n=(0,S.uZ)(e.values.alpha.ref.value*e.state.alphaFactor,0,1),i=(null===(t=e.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="on"||(null===(r=e.values.dXrayShaded)||void 0===r?void 0:r.ref.value)==="inverted";return 0!==n&&(n<1||e.values.transparencyAverage.ref.value>0||"directVolume"===e.values.dGeometryType.ref.value||(null===(a=e.values.dPointStyle)||void 0===a?void 0:a.ref.value)==="fuzzy"||"text"===e.values.dGeometryType.ref.value||"image"===e.values.dGeometryType.ref.value||i)},eo=(t,o)=>{T.kM&&e.timer.mark("Renderer.renderOpaque"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;
3397for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderOpaque")},es=(t,o)=>{var s,l;T.kM&&e.timer.mark("Renderer.renderBlendedTransparent"),w?i.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA):i.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),i.enable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!1),ea(t,o,null,n.Transparent,!1);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e){let t=u[e];ei(t)&&((null===(s=t.values.uDoubleSided)||void 0===s?void 0:s.ref.value)?((null===(l=t.values.dTransparentBackfaces)||void 0===l?void 0:l.ref.value)!=="opaque"&&er(t,"color",a.BlendedBack),er(t,"color",a.BlendedFront)):er(t,"color",a.None))}T.kM&&e.timer.markEnd("Renderer.renderBlendedTransparent")};return{clear:(e,t,a)=>{i.enable(r.SCISSOR_TEST),i.enable(r.DEPTH_TEST),i.colorMask(!0,!0,!0,!0),i.depthMask(!0),a||w&&!t?i.clearColor(0,0,0,0):e?i.clearColor(y[0],y[1],y[2],1):i.clearColor(1,1,1,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT)},clearDepth:(e=!1)=>{i.enable(r.SCISSOR_TEST),i.enable(r.DEPTH_TEST),i.depthMask(!0),e?(i.colorMask(!0,!0,!0,!0),i.clearColor(1,1,1,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT)):r.clear(r.DEPTH_BUFFER_BIT)},update:(e,t)=>{g.IO.update(J.uView,e.view),g.IO.update(J.uInvView,m.yb.invert(R,e.view)),g.IO.update(J.uProjection,e.projection),g.IO.update(J.uInvProjection,m.yb.invert(z,e.projection)),g.IO.updateIfChanged(J.uIsOrtho,"orthographic"===e.state.mode?1:0),g.IO.update(J.uViewOffset,e.viewOffset.enabled?m.Sg.set(K,16*e.viewOffset.offsetX,16*e.viewOffset.offsetY):m.Sg.set(K,0,0)),g.IO.updateIfChanged(J.uModelScale,e.scale),g.IO.update(J.uCameraPosition,m.yb.getTranslation(q,R)),m.AO.scale(X,e.state.target,e.scale),m.AO.normalize(H,m.AO.sub(H,X,q)),g.IO.update(J.uCameraDir,H),g.IO.updateIfChanged(J.uFar,e.far),g.IO.updateIfChanged(J.uNear,e.near),g.IO.updateIfChanged(J.uFog,e.state.fog>0),g.IO.updateIfChanged(J.uFogFar,e.fogFar),g.IO.updateIfChanged(J.uFogNear,e.fogNear),g.IO.updateIfChanged(J.uTransparentBackground,w),C.u.fromProjectionMatrix(Q,e.projectionView),O.H.copy(W,Q[C.u.PlaneIndex.Near]),W.constant-=O.H.distanceToPoint(W,q),g.IO.update(J.uCameraPlane,O.H.toArray(W,J.uCameraPlane.ref.value,0)),g.IO.updateIfChanged(J.uMarkerAverage,t.markerAverage),m.yb.isZero(e.headRotation)?(g.IO.updateIfChanged(J.uHasHeadRotation,!1),g.IO.updateIfChanged(J.uInvHeadRotation,m.yb.id),g.IO.update(J.uLightDirection,l.direction)):(g.IO.updateIfChanged(J.uHasHeadRotation,!0),g.IO.update(J.uInvHeadRotation,m.yb.invert(U,e.headRotation)),g.IO.update(J.uLightDirection,M(l,U))),g.IO.update(J.uIsAsymmetricProjection,e.isAsymmetricProjection)},renderPick:(t,o,s,l)=>{T.kM&&e.timer.mark("Renderer.renderPick"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1),g.IO.updateIfChanged(J.uPickType,l);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e)u[e].state.colorOnly||er(u[e],s,a.None);T.kM&&e.timer.markEnd("Renderer.renderPick")},renderDepth:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepth"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e)er(s[e],"depth",a.None);T.kM&&e.timer.markEnd("Renderer.renderDepth")},renderDepthOpaque:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepthOpaque"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"depth",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDepthOpaque")},renderDepthOpaqueBack:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepthOpaqueBack"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),i.depthFunc(r.GREATER),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"depth",a.BlendedBack)}i.depthFunc(r.LESS),T.kM&&e.timer.markEnd("Renderer.renderDepthOpaqueBack")},renderDepthTransparent:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderDepthTransparent"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,s,n.Transparent,!1);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e){let t=l[e];ei(t)&&er(t,"depth",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDepthTransparent")},renderMarkingDepth:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderMarkingDepth"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1),g.IO.updateIfChanged(J.uMarkingType,d.Depth);let{renderables:s}=t;
3397for(let e=0,t=s.length;e<t;++e){let t=s[e];0!==(0,S.uZ)(t.values.alpha.ref.value*t.state.alphaFactor,0,1)&&1!==t.values.transparencyAverage.ref.value&&1!==t.values.markerAverage.ref.value&&er(s[e],"marking",a.None)}T.kM&&e.timer.markEnd("Renderer.renderMarkingDepth")},renderMarkingMask:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderMarkingMask"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,s,n.All,!!s),g.IO.updateIfChanged(J.uMarkingType,d.Mask);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e)l[e].values.markerAverage.ref.value>0&&er(l[e],"marking",a.None);T.kM&&e.timer.markEnd("Renderer.renderMarkingMask")},renderEmissive:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderEmissive"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"emissive",a.None)}T.kM&&e.timer.markEnd("Renderer.renderEmissive")},renderTracing:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderTracing"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"tracing",a.None)}T.kM&&e.timer.markEnd("Renderer.renderTracing")},renderBlended:(e,t)=>{e.hasOpaque&&eo(e,t),e.opacityAverage<1&&es(e,t)},renderOpaque:eo,renderBlendedTransparent:es,renderVolume:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderVolume"),i.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),i.enable(r.BLEND),i.disable(r.DEPTH_TEST),i.depthMask(!1),ea(t,o,s,n.Transparent,!1);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e){let t=l[e];"directVolume"===t.values.dGeometryType.ref.value&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderVolume")},renderWboitTransparent:(t,r,i)=>{T.kM&&e.timer.mark("Renderer.renderWboitTransparent"),ea(t,r,i,n.Transparent,!1);let{renderables:o}=t;for(let e=0,t=o.length;e<t;++e){let t=o[e];ei(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderWboitTransparent")},renderDpoitTransparent:(t,o,s,l)=>{T.kM&&e.timer.mark("Renderer.renderDpoitTransparent"),i.enable(r.BLEND),(0,x.H0)(k,"tDpoitDepth",l.depth),(0,x.H0)(k,"tDpoitFrontColor",l.frontColor),(0,x.H0)(k,"tDpoitBackColor",l.backColor),ea(t,o,s,n.Transparent,!1);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e){let t=u[e];ei(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDpoitTransparent")},setProps:e=>{void 0!==e.backgroundColor&&e.backgroundColor!==s.backgroundColor&&(s.backgroundColor=e.backgroundColor,h.Il.toVec3Normalized(y,s.backgroundColor),g.IO.update(J.uFogColor,m.AO.copy(J.uFogColor.ref.value,y))),void 0!==e.pickingAlphaThreshold&&e.pickingAlphaThreshold!==s.pickingAlphaThreshold&&(s.pickingAlphaThreshold=e.pickingAlphaThreshold,g.IO.update(J.uPickingAlphaThreshold,s.pickingAlphaThreshold)),void 0!==e.colorMarker&&e.colorMarker!==s.colorMarker&&(s.colorMarker=e.colorMarker),void 0!==e.highlightColor&&e.highlightColor!==s.highlightColor&&(s.highlightColor=e.highlightColor,g.IO.update(J.uHighlightColor,h.Il.toVec3Normalized(J.uHighlightColor.ref.value,s.highlightColor))),void 0!==e.selectColor&&e.selectColor!==s.selectColor&&(s.selectColor=e.selectColor,g.IO.update(J.uSelectColor,h.Il.toVec3Normalized(J.uSelectColor.ref.value,s.selectColor))),void 0!==e.dimColor&&e.dimColor!==s.dimColor&&(s.dimColor=e.dimColor,g.IO.update(J.uDimColor,h.Il.toVec3Normalized(J.uDimColor.ref.value,s.dimColor))),void 0!==e.highlightStrength&&e.highlightStrength!==s.highlightStrength&&(s.highlightStrength=e.highlightStrength,g.IO.update(J.uHighlightStrength,s.highlightStrength)),void 0!==e.selectStrength&&e.selectStrength!==s.selectStrength&&(s.selectStrength=e.selectStrength,g.IO.update(J.uSelectStrength,s.selectStrength)),void 0!==e.dimStrength&&e.dimStrength!==s.dimStrength&&(s.dimStrength=e.dimStrength,g.IO.update(J.uDimStrength,s.dimStrength)),void 0!==e.markerPriority&&e.markerPriority!==s.markerPriority&&(s.markerPriority=e.markerPriority,g.IO.update(J.uMarkerPriority,s.markerPriority)),void 0!==e.xrayEdgeFalloff&&e.xrayEdgeFalloff!==s.xrayEdgeFalloff&&(s.xrayEdgeFalloff=e.xrayEdgeFalloff,g.IO.update(J.uXrayEdgeFalloff,s.xrayEdgeFalloff)),void 0!==e.celSteps&&e.celSteps!==s.celSteps&&(s.celSteps=e.celSteps,g.IO.update(J.uCelSteps,s.celSteps)),void 0!==e.exposure&&e.exposure!==s.exposure&&(s.exposure=e.exposure,g.IO.update(J.uExposure,s.exposure)),void 0===e.light||(0,g.vZ)(e.light,s.light)||(s.light=e.light,Object.assign(l,E(e.light,l)),g.IO.update(J.uLightDirection,l.direction),g.IO.update(J.uLightColor,l.color)),void 0!==e.ambientColor&&e.ambientColor!==s.ambientColor&&(s.ambientColor=e.ambientColor,m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity),g.IO.update(J.uAmbientColor,$)),void 0!==e.ambientIntensity&&e.ambientIntensity!==s.ambientIntensity&&(s.ambientIntensity=e.ambientIntensity,m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity),g.IO.update(J.uAmbientColor,$))}
3397,setViewport:(e,t,r,a)=>{i.viewport(e,t,r,a),i.scissor(e,t,r,a),(e!==u.x||t!==u.y||r!==u.width||a!==u.height)&&(f.l_.set(u,e,t,r,a),g.IO.update(J.uViewport,m.T8.set(J.uViewport.ref.value,e,t,r,a)))},setTransparentBackground:e=>{w=e},setDrawingBufferSize:(e,t)=>{(e!==p[0]||t!==p[1])&&g.IO.update(J.uDrawingBufferSize,m.Sg.set(p,e,t))},setPixelRatio:e=>{g.IO.update(J.uPixelRatio,e)},setOcclusionTest:e=>{D=e},props:s,get stats(){return{programCount:e.stats.resourceCounts.program,shaderCount:e.stats.resourceCounts.shader,attributeCount:e.stats.resourceCounts.attribute,elementsCount:e.stats.resourceCounts.elements,framebufferCount:e.stats.resourceCounts.framebuffer,renderbufferCount:e.stats.resourceCounts.renderbuffer,textureCount:e.stats.resourceCounts.texture,vertexArrayCount:e.stats.resourceCounts.vertexArray,drawCount:o.drawCount,instanceCount:o.instanceCount,instancedDrawCount:o.instancedDrawCount}},get light(){return l},get ambientColor(){return J.uAmbientColor.ref.value},dispose:()=>{}}}},32747:function(e,t,r){r.d(t,{x:function(){return n}});var a,n,i=r(67241),o=r(38675),s=r(43975);(a||(a={})).create=function(){return{view:o.y.identity(),position:s.A.create(0,0,0),direction:s.A.create(0,0,-1),up:s.A.create(0,1,0)}};var l=r(30441),u=r(68332);class c{constructor(){this.removeList=(0,u.S)(),this.removeMap=new Map,this.addList=(0,u.S)(),this.addMap=new Map}get isEmpty(){return 0===this.removeList.count&&0===this.addList.count}get size(){return this.removeMap.size+this.addMap.size}add(e){if(this.removeMap.has(e)){let t=this.removeMap.get(e);this.removeMap.delete(e),this.removeList.remove(t)}if(this.addMap.has(e))return;let t=this.addList.addLast(e);this.addMap.set(e,t)}remove(e){if(this.addMap.has(e)){let t=this.addMap.get(e);this.addMap.delete(e),this.addList.remove(t)}if(this.removeMap.has(e))return;let t=this.removeList.addLast(e);this.removeMap.set(e,t)}tryGetRemove(){let e=this.removeList.removeFirst();return e&&this.removeMap.delete(e),e}tryGetAdd(){let e=this.addList.removeFirst();return e&&this.addMap.delete(e),e}}var d=r(58400),p=r(36111),f=r(83576),m=r(69062),h=r(23833),g=r(68303);let b=new f.q("98");function y(e,t,r){b.reset();for(let t=0,a=e.length;t<a;++t){if(r&&!e[t].state.visible||!e[t].values.drawCount.ref.value)continue;let a=e[t].values.boundingSphere.ref.value;a.radius&&b.includeSphere(a)}b.finishedIncludeStep();for(let t=0,a=e.length;t<a;++t){if(r&&!e[t].state.visible||!e[t].values.drawCount.ref.value)continue;let a=e[t].values.boundingSphere.ref.value;a.radius&&b.radiusSphere(a)}return b.getSphere(t)}function x(e,t){let r=e.getProgram("color").id,a=t.getProgram("color").id,n=e.materialId,i=t.materialId;return r!==a?r-a:n!==i?n-i:e.id-t.id}(n||(n={})).create=function(e,t="blended",r={dColorMarker:!0,dLightCount:1}){let n=new Map,o=[],s=(0,l.C)(),u=(0,l.C)(),f=[],b=[],S=!0,T=!0,C=!0,O=!0,I=!0,A=!0,w=!0,D=0,E=0,M=0,P=0,k=!1,{view:B,position:_,direction:R,up:F}=a.create(),L=new c,z=-1;function N(){let e=function(){let e=23;for(let t=0,r=o.length;t<r;++t)o[t].state.visible&&(e=31*e+o[t].id|0);return -1===(e=(0,m.Z0)(e))&&(e=0),e}();return e!==z&&(T=!0,C=!0,O=!0,I=!0,A=!0,w=!0,z=e,!0)}return{view:B,position:_,direction:R,up:F,renderables:o,primitives:{view:B,position:_,direction:R,up:F,renderables:f},volumes:{view:B,position:_,direction:R,up:F,renderables:b},syncVisibility:N,setTransparency:e=>{t=e;for(let t=0,r=o.length;t<r;++t)o[t].setTransparency(e)},setGlobals:e=>{for(let t of(r=e,o))g.IO.updateIfChanged(t.values.dColorMarker,e.dColorMarker),g.IO.updateIfChanged(t.values.dLightCount,e.dLightCount),t.update()},update(e,t){var r;if(e)for(let t=0,a=e.length;t<a;++t)null===(r=n.get(e[t]))||void 0===r||r.update();else for(let e=0,t=o.length;e<t;++e)o[e].update();t?N():(S=!0,T=!0),C=!0,O=!0,I=!0,A=!0,w=!0},add:e=>L.add(e),remove:e=>L.remove(e),commit:(a=Number.MAX_VALUE)=>(function(a){let s=(0,d.z)(),l=0;for(;;){let e=L.tryGetRemove();if(!e)break;if(!function(e){let t=n.get(e);t&&(t.dispose(),(0,p.iV)(o,t),(0,p.iV)(f,t),(0,p.iV)(b,t),n.delete(e),S=!0,T=!0)}(e),++l%100==0&&(0,d.z)()-s>a)return!1}for(;;){let u=L.tryGetAdd();if(!u)break;
3397if(!function(a){if(n.has(a))console.warn(`RenderObject with id '${a.id}' already present`);else{let s=(0,i.OG)(e,a,t,r);o.push(s),"direct-volume"===a.type?b.push(s):f.push(s),n.set(a,s),S=!0,T=!0}}(u),++l%100==0&&(0,d.z)()-s>a)return!1}return o.sort(x),C=!0,O=!0,I=!0,A=!0,w=!0,!0})(a),get commitQueueSize(){return L.size},get needsCommit(){return!L.isEmpty},has:e=>n.has(e),clear:()=>{for(let e=0,t=o.length;e<t;++e)o[e].dispose();o.length=0,f.length=0,b.length=0,n.clear(),S=!0,T=!0},forEach:e=>{n.forEach(e)},get count(){return o.length},get boundingSphere(){return S&&(y(o,s,!1),S=!1),s},get boundingSphereVisible(){return T&&(y(o,u,!0),T=!1),u},get transparency(){return t},get markerAverage(){return C&&(D=function(){if(0===f.length)return 0;let e=0,t=0;for(let r=0,a=f.length;r<a;++r)f[r].state.visible&&(t+=f[r].values.markerAverage.ref.value,e+=1);return e>0?t/e:0}(),C=!1),D},get emissiveAverage(){return O&&(E=function(){if(0===f.length)return 0;let e=0,t=0;for(let r=0,a=f.length;r<a;++r)f[r].state.visible&&(t+=f[r].values.emissiveAverage.ref.value+f[r].values.uEmissive.ref.value,e+=1);return e>0?t/e:0}(),O=!1),E},get opacityAverage(){return I&&(M=function(){var e,t,r;if(0===f.length)return 0;let a=0,n=0;for(let i=0,o=f.length;i<o;++i){let o=f[i];if(!o.state.visible)continue;let s=(0,h.uZ)(o.values.alpha.ref.value*o.state.alphaFactor,0,1),l=(null===(e=o.values.dXrayShaded)||void 0===e?void 0:e.ref.value)==="on"||(null===(t=o.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="inverted"?.5:1,u=(null===(r=o.values.dPointStyle)||void 0===r?void 0:r.ref.value)==="fuzzy"?.5:1,c="text"===o.values.dGeometryType.ref.value?.5:1,d="image"===o.values.dGeometryType.ref.value?.5:1;n+=(1-o.values.transparencyAverage.ref.value)*s*l*u*c*d,a+=1}return a>0?n/a:0}(),I=!1),M},get transparencyMin(){return A&&(P=function(){var e,t,r;if(0===f.length)return 1;let a=1,n=[];for(let i=0,o=f.length;i<o;++i){let o=f[i];if(!o.state.visible)continue;n.length=0;let s=(0,h.uZ)(o.values.alpha.ref.value*o.state.alphaFactor,0,1);s<1&&n.push(1-s),((null===(e=o.values.dXrayShaded)||void 0===e?void 0:e.ref.value)==="on"||(null===(t=o.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="inverted"||(null===(r=o.values.dPointStyle)||void 0===r?void 0:r.ref.value)==="fuzzy"||"text"===o.values.dGeometryType.ref.value||"image"===o.values.dGeometryType.ref.value)&&n.push(.5),o.values.transparencyMin.ref.value>0&&n.push(o.values.transparencyMin.ref.value),a=Math.min(a,...n)}return a}(),A=!1),P},get hasOpaque(){return w&&(k=function(){var e;if(0===f.length)return!1;for(let t=0,r=f.length;t<r;++t){let r=f[t];if(r.state.visible&&(r.state.opaque||1===r.state.alphaFactor&&1===r.values.alpha.ref.value&&1!==r.values.transparencyAverage.ref.value||(null===(e=r.values.dTransparentBackfaces)||void 0===e?void 0:e.ref.value)==="opaque"))return!0}return!1}(),w=!1),k}}}},45705:function(e,t,r){r.d(t,{gz:function(){return ev},mE:function(){return eS},Oc:function(){return eT},tc:function(){return ey},pb:function(){return ex},lx:function(){return eh},Lq:function(){return ep},fj:function(){return eg},cs:function(){return eb},AA:function(){return eA}});var a=r(16252),n=r(62131),i=r(97667);let o=`
3398float preFogAlpha = gl_FragColor.a;
3399if (uFog) {
3400    float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
3401    float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
3402    float fogAlpha = (1.0 - fogFactor) * gl_FragColor.a;
3403    if (!uTransparentBackground) {
3404        if (gl_FragColor.a < 1.0) {
3405            // transparent objects are blended with background color
3406            gl_FragColor.a = fogAlpha;
3407        } else {
3408            // mix opaque objects with background color
3409            gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor);
3410        }
3411    } else {
3412        #if defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume)
3413            if (gl_FragColor.a < 1.0) {
3414                // transparent objects are blended with background color
3415                gl_FragColor.a = fogAlpha;
3416            } else {
3417                // opaque objects need to be pre-multiplied alpha
3418                gl_FragColor.rgb *= fogAlpha;
3419                gl_FragColor.a = fogAlpha;
3420            }
3421        #else
3422            // pre-multiplied alpha expected for transparent background
3423            gl_FragColor.rgb *= fogAlpha;
3424            gl_FragColor.a = fogAlpha;
3425        #endif
3426    }
3427}
3427 else if (uTransparentBackground) {
3428    #if !defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume)
3429        // pre-multiplied alpha expected for transparent background
3430        gl_FragColor.rgb *= gl_FragColor.a;
3431    #endif
3432}
3433`,s=`
3434if (interior) {
3435    material.rgb = mix(material.rgb, uInteriorColor.rgb, uInteriorColor.a);
3436
3437    float isf = clamp(uInteriorSubstance.a, 0.0, 0.99); // clamp to avoid artifacts
3438    metalness = mix(metalness, uInteriorSubstance.r, isf);
3439    roughness = mix(roughness, uInteriorSubstance.g, isf);
3440    bumpiness = mix(bumpiness, uInteriorSubstance.b, isf);
3441
3442    #ifdef dTransparentBackfaces_opaque
3443        material.a = 1.0;
3444    #endif
3445}
3446`,l=`
3447#if defined(dIgnoreLight)
3448    #ifdef bumpEnabled
3449        if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {
3450            material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness;
3451            material.rgb -= 0.5 * uBumpAmplitude * bumpiness;
3452        }
3453    #endif
3454
3455    #if defined(dRenderVariant_color)
3456        material.rgb += material.rgb * emissive;
3457    #endif
3458
3459    gl_FragColor = material;
3460#else
3461    #ifdef bumpEnabled
3462        if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {
3463            normal = perturbNormal(-vViewPosition, normal, fbm(vModelPosition * uBumpFrequency), (uBumpAmplitude * bumpiness) / uBumpFrequency);
3464        }
3465    #endif
3466
3467    vec4 color = material;
3468
3469    #if defined(dCelShaded)
3470        // clamp to avoid artifacts
3471        metalness = clamp(metalness, 0.0, 0.99);
3472        roughness = clamp(roughness, 0.05, 1.0);
3473    #endif
3474
3475    GeometricContext geometry;
3476    geometry.position = -vViewPosition;
3477    geometry.normal = normal;
3478    geometry.viewDir = normalize(vViewPosition);
3479
3480    PhysicalMaterial physicalMaterial;
3481    physicalMaterial.diffuseColor = color.rgb * (1.0 - metalness);
3482    #ifdef enabledFragDepth
3483        physicalMaterial.roughness = min(max(roughness, 0.0525), 1.0);
3484    #else
3485        vec3 dxy = max(abs(dFdx(normal)), abs(dFdy(normal)));
3486        float geometryRoughness = max(max(dxy.x, dxy.y), dxy.z);
3487        physicalMaterial.roughness = min(max(roughness, 0.0525) + geometryRoughness, 1.0);
3488    #endif
3489    physicalMaterial.specularColor = mix(vec3(0.04), color.rgb, metalness);
3490    physicalMaterial.specularF90 = 1.0;
3491
3492    IncidentLight directLight;
3493
3494    vec3 outgoingLight = vec3(0.0);
3495
3496    #if defined(dCelShaded)
3497        float celDiffuse;
3498        float celSpecular;
3499        float celIntensity;
3500
3501        #pragma unroll_loop_start
3502        for (int i = 0; i < dLightCount; ++i) {
3503            directLight.direction = uLightDirection[i];
3504            directLight.color = uLightColor[i] * PI; // * PI for punctual light
3505
3506            celDiffuse = RECIPROCAL_PI * max(dot(geometry.normal, directLight.direction), 0.0) * (1.0 - metalness);
3507            celSpecular = luminance(saturate(dot(geometry.normal, directLight.direction)) * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, physicalMaterial.specularColor, physicalMaterial.specularF90, roughness));
3508
3509            celIntensity = celDiffuse + celSpecular;
3510            celIntensity = ceil(celIntensity * uCelSteps) / uCelSteps;
3511
3512            outgoingLight += color.rgb * directLight.color * celIntensity;
3513        }
3514        #pragma unroll_loop_end
3515
3516        outgoingLight += physicalMaterial.diffuseColor * luminance(uAmbientColor);
3517    #else
3518        ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0));
3519
3520        #pragma unroll_loop_start
3521        for (int i = 0; i < dLightCount; ++i) {
3522            directLight.direction = uLightDirection[i];
3523            directLight.color = uLightColor[i] * PI; // * PI for punctual light
3524            RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight);
3525        }
3526        #pragma unroll_loop_end
3527
3528        vec3 irradiance = uAmbientColor * PI; // * PI for punctual light
3529        RE_IndirectDiffuse_Physical(irradiance, geometry, physicalMaterial, reflectedLight);
3530
3531        // indirect specular only metals
3532        vec3 radiance = uAmbientColor * metalness;
3533        vec3 iblIrradiance = uAmbientColor * metalness;
3534        vec3 clearcoatRadiance = vec3(0.0);
3535        RE_IndirectSpecular_Physical(radiance, iblIrradiance, clearcoatRadiance, geometry, physicalMaterial, reflectedLight);
3536
3537        outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;
3538    #endif
3539    outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background
3540
3541    #if defined(dRenderVariant_color)
3542        outgoingLight += color.rgb * emissive;
3543    #endif
3544
3545    gl_FragColor = vec4(outgoingLight, color.a);
3546#endif
3547
3548gl_FragColor.rgb *= uExposure;
3549`,u=`
3550
3551#if defined(dColorMarker)
3552    if (marker > 0.0) {
3553        if ((uMarkerPriority == 1 && marker != 2.0) || (uMarkerPriority != 1 && marker == 1.0)) {
3554            gl_FragColor.rgb = mix(gl_FragColor.rgb, uHighlightColor, uHighlightStrength);
3555            gl_FragColor.a = max(gl_FragColor.a, uHighlightStrength * 0.002); // for direct-volume rendering
3556        } else {
3557            gl_FragColor.rgb = mix(gl_FragColor.rgb, uSelectColor, uSelectStrength);
3558            gl_FragColor.a = max(gl_FragColor.a, uSelectStrength * 0.002); // for direct-volume rendering
3559        }
3560    } else if (uMarkerAverage > 0.0) {
3561        gl_FragColor.rgb = mix(gl_FragColor.rgb, uDimColor, uDimStrength);
3562        gl_FragColor.a = max(gl_FragColor.a, uDimStrength * 0.002); // for direct-volume rendering
3563    }
3564#endif
3565`,c=`
3566#if dClipObjectCount != 0 && defined(dClipping)
3567    #if defined(dClippingType_instance)
3568        vClipping = readFromTexture(tClipping, aInstance, uClippingTexDim).a;
3569    #elif defined(dMarkerType_groupInstance)
3570        vClipping = readFromTexture(tClipping, aInstance * float(uGroupCount) + group, uClippingTexDim).a;
3571    #endif
3572#endif
3573`,d=`
3574#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
3575    #if defined(dColorType_attribute)
3576        vColor.rgb = aColor;
3577    #elif defined(dColorType_instance)
3578        vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb;
3579    #elif defined(dColorType_group)
3580        #if defined(dDualColor)
3581            vec4 color2;
3582            if (aColorMode == 2.0) {
3583                vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
3584            } else {
3585                vColor.rgb = readFromTexture(tColor, group * 2.0, uColorTexDim).rgb;
3586                color2.rgb = readFromTexture(tColor, group * 2.0 + 1.0, uColorTexDim).rgb;
3587            }
3588        #else
3589            vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
3590        #endif
3591    #elif defined(dColorType_groupInstance)
3592        #if defined(dDualColor)
3593            vec4 color2;
3594            if (aColorMode == 2.0) {
3595                vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;
3596            } else {
3597                vColor.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0, uColorTexDim).rgb;
3598                color2.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0 + 1.0, uColorTexDim).rgb;
3599            }
3600        #else
3601            vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;
3602        #endif
3603    #elif defined(dColorType_vertex)
3604        vColor.rgb = readFromTexture(tColor, vertexId, uColorTexDim).rgb;
3605    #elif defined(dColorType_vertexInstance)
3606        vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + vertexId, uColorTexDim).rgb;
3607    #elif defined(dColorType_volume)
3608        vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim;
3609        vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
3610    #elif defined(dColorType_volumeInstance)
3611        vec3 cgridPos = (uColorGridTransform.w * (vModelPosition / uModelScale - uColorGridTransform.xyz)) / uColorGridDim;
3612        vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
3613    #endif
3614
3615    #ifdef dUsePalette
3616        vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / PALETTE_SCALE;
3617    #endif
3618
3619    #ifdef dOverpaint
3620        #if defined(dOverpaintType_instance)
3621            vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim);
3622        #elif defined(dOverpaintType_groupInstance)
3623            vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim);
3624        #elif defined(dOverpaintType_vertexInstance)
3625            vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + vertexId, uOverpaintTexDim);
3626        #elif defined(dOverpaintType_volumeInstance)
3627            vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition / uModelScale - uOverpaintGridTransform.xyz)) / uOverpaintGridDim;
3628            vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim);
3629        #endif
3630
3631        // pre-mix to avoid darkening due to empty overpaint
3632        #ifdef dColorType_uniform
3633            vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a);
3634        #else
3635            vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a);
3636        #endif
3637        vOverpaint *= uOverpaintStrength;
3638    #endif
3639
3640    #ifdef dEmissive
3641        #if defined(dEmissiveType_instance)
3642            vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
3643        #elif defined(dEmissiveType_groupInstance)
3644            vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
3645        #elif defined(dEmissiveType_vertexInstance)
3646            vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a;
3647        #elif defined(dEmissiveType_volumeInstance)
3648            vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
3649            vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
3650        #endif
3651        vEmissive *= uEmissiveStrength;
3652    #endif
3653
3654    #ifdef dSubstance
3655        #if defined(dSubstanceType_instance)
3656            vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);
3657        #elif defined(dSubstanceType_groupInstance)
3658            vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim);
3659        #elif defined(dSubstanceType_vertexInstance)
3660            vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + vertexId, uSubstanceTexDim);
3661        #elif defined(dSubstanceType_volumeInstance)
3662            vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition / uModelScale - uSubstanceGridTransform.xyz)) / uSubstanceGridDim;
3663            vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim);
3664        #endif
3665
3666        // pre-mix to avoid artifacts due to empty substance
3667        vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);
3668        vSubstance *= uSubstanceStrength;
3669    #endif
3670#elif defined(dRenderVariant_emissive)
3671    #ifdef dEmissive
3672        #if defined(dEmissiveType_instance)
3673            vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
3674        #elif defined(dEmissiveType_groupInstance)
3675            vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
3676        #elif defined(dEmissiveType_vertexInstance)
3677            vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a;
3678        #elif defined(dEmissiveType_volumeInstance)
3679            vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
3680            vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
3681        #endif
3682        vEmissive *= uEmissiveStrength;
3683    #endif
3684#elif defined(dRenderVariant_pick)
3685    #ifdef requiredDrawBuffers
3686        vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);
3687        vInstance = vec4(packIntToRGB(aInstance), 1.0);
3688        vGroup = vec4(packIntToRGB(group), 1.0);
3689    #else
3690        if (uPickType == 1) {
3691            vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
3692        } else if (uPickType == 2) {
3693            vColor = vec4(packIntToRGB(aInstance), 1.0);
3694        } else {
3695            vColor = vec4(packIntToRGB(group), 1.0);
3696        }
3697    #endif
3698#endif
3699
3700#ifdef dTransparency
3701    #if defined(dTransparencyType_instance)
3702        vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a;
3703    #elif defined(dTransparencyType_groupInstance)
3704        vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a;
3705    #elif defined(dTransparencyType_vertexInstance)
3706        vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + vertexId, uTransparencyTexDim).a;
3707    #elif defined(dTransparencyType_volumeInstance)
3708        vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition / uModelScale - uTransparencyGridTransform.xyz)) / uTransparencyGridDim;
3709        vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a;
3710    #endif
3711    vTransparency *= uTransparencyStrength;
3712#endif
3713`,p=`
3714#ifdef dGeometryType_textureMesh
3715    float group = unpackRGBToInt(readFromTexture(tGroup, vertexId, uGeoTexDim).rgb);
3716#else
3717    float group = aGroup;
3718#endif
3719`,f=`
3720#if defined(dNeedsMarker)
3721    #if defined(dMarkerType_instance)
3722        vMarker = readFromTexture(tMarker, aInstance, uMarkerTexDim).a;
3723    #elif defined(dMarkerType_groupInstance)
3724        vMarker = readFromTexture(tMarker, aInstance * float(uGroupCount) + group, uMarkerTexDim).a;
3725    #endif
3726#endif
3727`,m=`
3728#if defined(dNeedsMarker)
3729    float marker = uMarker;
3730    if (uMarker == -1.0) {
3731        marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win
3732    }
3733#endif
3734
3735#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
3736    #if defined(dUsePalette)
3737        vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);
3738    #elif defined(dColorType_uniform)
3739        vec4 material = vec4(uColor, uAlpha);
3740    #elif defined(dColorType_varying)
3741        vec4 material = vec4(vColor.rgb, uAlpha);
3742    #endif
3743
3744    // mix material with overpaint
3745    #if defined(dOverpaint)
3746        material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);
3747    #endif
3748
3749    float emissive = uEmissive;
3750    #ifdef dEmissive
3751        emissive += vEmissive;
3752    #endif
3753
3754    float metalness = uMetalness;
3755    float roughness = uRoughness;
3756    float bumpiness = uBumpiness;
3757    #ifdef dSubstance
3758        float sf = clamp(vSubstance.a, 0.0, 0.99); // clamp to avoid artifacts
3759        metalness = mix(metalness, vSubstance.r, sf);
3760        roughness = mix(roughness, vSubstance.g, sf);
3761        bumpiness = mix(bumpiness, vSubstance.b, sf);
3762    #endif
3763
3764    #if defined(dXrayShaded)
3765        material.a = calcXrayShadedAlpha(material.a, normal);
3766    #endif
3767#elif defined(dRenderVariant_depth)
3768    if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {
3769        discard;
3770    }
3771    vec4 material;
3772    if (uRenderMask == MaskOpaque) {
3773        #if defined(dXrayShaded)
3774            discard;
3775        #endif
3776        #if defined(dTransparency)
3777            float dta = 1.0 - vTransparency;
3778            #if __VERSION__ == 100 || defined(dVaryingGroup)
3779                if (vTransparency < 0.1) dta = 1.0; // hard cutoff to avoid artifacts
3780            #endif
3781
3782            if (uAlpha * dta < 1.0) {
3783                discard;
3784            }
3785        #else
3786            if (uAlpha < 1.0) {
3787                discard;
3788            }
3789        #endif
3790        material = packDepthToRGBA(fragmentDepth);
3791    } else if (uRenderMask == MaskTransparent) {
3792        float alpha = uAlpha;
3793        #if defined(dTransparency)
3794            float dta = 1.0 - vTransparency;
3795            alpha *= dta;
3796        #endif
3797
3798        #ifdef dXrayShaded
3799            alpha = calcXrayShadedAlpha(alpha, normal);
3800        #else
3801            if (alpha == 1.0) {
3802                discard;
3803            }
3804        #endif
3805        material = packDepthWithAlphaToRGBA(fragmentDepth, alpha);
3806    }
3807#elif defined(dRenderVariant_marking)
3808    vec4 material;
3809    if(uMarkingType == 1) {
3810        if (marker > 0.0)
3811            discard;
3812        #ifdef enabledFragDepth
3813            material = packDepthToRGBA(gl_FragDepthEXT);
3814        #else
3815            material = packDepthToRGBA(gl_FragCoord.z);
3816        #endif
3817    } else {
3818        if (marker == 0.0)
3819            discard;
3820        float depthTest = 1.0;
3821        if (uMarkingDepthTest) {
3822            depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;
3823        }
3824        bool isHighlight = intMod(marker, 2.0) > 0.1;
3825        float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
3826        float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
3827        if (fogFactor == 1.0)
3828            discard;
3829        material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);
3830    }
3831#elif defined(dRenderVariant_emissive)
3832    float emissive = uEmissive;
3833    #ifdef dEmissive
3834        emissive += vEmissive;
3835    #endif
3836    vec4 material = vec4(emissive);
3837#endif
3838
3839// apply per-group transparency
3840#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing))
3841    float ta = 1.0 - vTransparency;
3842    if (vTransparency < 0.09) ta = 1.0; // hard cutoff looks better
3843
3844    #if defined(dRenderVariant_pick)
3845        if (ta * uAlpha < uPickingAlphaThreshold)
3846            discard; // ignore so the element below can be picked
3847    #elif defined(dRenderVariant_emissive)
3848        if (ta < 1.0)
3849            discard; // emissive not supported with transparency
3850    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
3851        material.a *= ta;
3852    #endif
3853#endif
3854`,h=`
3855mat4 model = uModel * aTransform;
3856mat4 modelView = uView * model;
3857#ifdef dGeometryType_textureMesh
3858    vec3 position = readFromTexture(tPosition, vertexId, uGeoTexDim).xyz;
3859#else
3860    vec3 position = aPosition;
3861#endif
3862vec4 position4 = vec4(position, 1.0);
3863// for accessing tColorGrid in vert shader and for clipping in frag shader
3864vModelPosition = (model * position4).xyz;
3865vec4 mvPosition = modelView * position4;
3866vViewPosition = mvPosition.xyz;
3867gl_Position = uProjection * mvPosition;
3868`,g=`
3869#if defined(dSizeType_uniform)
3870    float size = uSize;
3871#elif defined(dSizeType_attribute)
3872    float size = aSize;
3873#elif defined(dSizeType_instance)
3874    float size = unpackRGBToInt(readFromTexture(tSize, aInstance, uSizeTexDim).rgb);
3875#elif defined(dSizeType_group)
3876    float size = unpackRGBToInt(readFromTexture(tSize, group, uSizeTexDim).rgb);
3877#elif defined(dSizeType_groupInstance)
3878    float size = unpackRGBToInt(readFromTexture(tSize, aInstance * float(uGroupCount) + group, uSizeTexDim).rgb);
3879#elif defined(dSizeType_vertex)
3880    float size = unpackRGBToInt(readFromTexture(tSize, vertexId, uSizeTexDim).rgb);
3881#elif defined(dSizeType_vertexInstance)
3882    float size = unpackRGBToInt(readFromTexture(tSize, int(aInstance) * uVertexCount + vertexId, uSizeTexDim).rgb);
3883#endif
3884
3885#if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance)
3886    size /= 100.0; // NOTE factor also set in TypeScript
3887#endif
3888
3889size *= uSizeFactor;
3890`,b=`
3891float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
3892float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
3893float fogAlpha = (1.0 - fogFactor) * uAlpha;
3894float alpha = uAlpha;
3895#ifdef dXrayShaded
3896    // add bias to make picking xray shaded elements easier
3897    alpha = calcXrayShadedAlpha(alpha, normal) + (0.3 * uPickingAlphaThreshold);
3898#endif
3899// if not opaque enough ignore so the element below can be picked
3900if (alpha < uPickingAlphaThreshold || fogAlpha < 0.1) {
3901    #ifdef dTransparentBackfaces_opaque
3902        if (!interior) discard;
3903    #else
3904        discard;
3905    #endif
3906}
3907`,y=`
3908#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
3909    #if defined(dTransparentBackfaces_off)
3910        if (interior && material.a < 1.0) discard;
3911    #elif defined(dTransparentBackfaces_opaque)
3912        if (interior) material.a = 1.0;
3913    #endif
3914
3915    #if !defined(dXrayShaded)
3916        if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
3917            (uRenderMask == MaskTransparent && material.a == 1.0)
3918        ) {
3919            discard;
3920        }
3921    #endif
3922#endif
3923
3924#if defined(dRenderVariant_depth)
3925    #if defined(dTransparentBackfaces_off)
3926        if (interior) discard;
3927    #endif
3928#endif
3929`,x=`
3930#if defined(dClipVariant_instance) && dClipObjectCount != 0
3931    vec3 mCenter = (uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz;
3932    if (clipTest(mCenter / uModelScale)) {
3933        // move out of [ -w, +w ] to 'discard' in vert shader
3934        gl_Position.z = 2.0 * gl_Position.w;
3935    }
3936#endif
3937`,S=`
3938#if defined(dClipVariant_pixel) && dClipObjectCount != 0
3939    if (clipTest(vModelPosition / uModelScale))
3940        discard;
3941#endif
3942`,T=`
3943uniform float uMetalness;
3944uniform float uRoughness;
3945uniform float uBumpiness;
3946#ifdef bumpEnabled
3947    uniform float uBumpFrequency;
3948    uniform float uBumpAmplitude;
3949#endif
3950uniform float uEmissive;
3951
3952// Density value to estimate object thickness
3953uniform float uDensity;
3954
3955#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
3956    #if defined(dColorType_uniform)
3957        uniform vec3 uColor;
3958    #elif defined(dColorType_varying)
3959        varying vec4 vColor;
3960    #endif
3961
3962    #ifdef dUsePalette
3963        uniform sampler2D tPalette;
3964        varying float vPaletteV;
3965    #endif
3966
3967    #ifdef dOverpaint
3968        varying vec4 vOverpaint;
3969    #endif
3970
3971    #ifdef dEmissive
3972        varying float vEmissive;
3973    #endif
3974
3975    #ifdef dSubstance
3976        varying vec4 vSubstance;
3977    #endif
3978#elif defined(dRenderVariant_emissive)
3979    #ifdef dEmissive
3980        varying float vEmissive;
3981    #endif
3982#elif defined(dRenderVariant_pick)
3983    #if __VERSION__ == 100 || !defined(dVaryingGroup)
3984        #ifdef requiredDrawBuffers
3985            varying vec4 vObject;
3986            varying vec4 vInstance;
3987            varying vec4 vGroup;
3988        #else
3989            varying vec4 vColor;
3990        #endif
3991    #else
3992        #ifdef requiredDrawBuffers
3993            flat in vec4 vObject;
3994            flat in vec4 vInstance;
3995            flat in vec4 vGroup;
3996        #else
3997            flat in vec4 vColor;
3998        #endif
3999    #endif
4000#endif
4001
4002#ifdef dTransparency
4003    varying float vTransparency;
4004#endif
4005`,C=`
4006uniform float uMetalness;
4007uniform float uRoughness;
4008uniform float uBumpiness;
4009
4010#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
4011    #if defined(dColorType_uniform)
4012        uniform vec3 uColor;
4013    #elif defined(dColorType_attribute)
4014        varying vec4 vColor;
4015        attribute vec3 aColor;
4016    #elif defined(dColorType_texture)
4017        varying vec4 vColor;
4018        uniform vec2 uColorTexDim;
4019        uniform sampler2D tColor;
4020    #elif defined(dColorType_grid)
4021        varying vec4 vColor;
4022        uniform vec2 uColorTexDim;
4023        uniform vec3 uColorGridDim;
4024        uniform vec4 uColorGridTransform;
4025        uniform sampler2D tColorGrid;
4026    #elif defined(dColorType_direct)
4027        varying vec4 vColor;
4028    #endif
4029
4030    #ifdef dUsePalette
4031        varying float vPaletteV;
4032    #endif
4033
4034    #ifdef dOverpaint
4035        #if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance)
4036            varying vec4 vOverpaint;
4037            uniform vec2 uOverpaintTexDim;
4038            uniform sampler2D tOverpaint;
4039        #elif defined(dOverpaintType_volumeInstance)
4040            varying vec4 vOverpaint;
4041            uniform vec2 uOverpaintTexDim;
4042            uniform vec3 uOverpaintGridDim;
4043            uniform vec4 uOverpaintGridTransform;
4044            uniform sampler2D tOverpaintGrid;
4045        #endif
4046        uniform float uOverpaintStrength;
4047    #endif
4048
4049    #ifdef dEmissive
4050        #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance)
4051            varying float vEmissive;
4052            uniform vec2 uEmissiveTexDim;
4053            uniform sampler2D tEmissive;
4054        #elif defined(dEmissiveType_volumeInstance)
4055            varying float vEmissive;
4056            uniform vec2 uEmissiveTexDim;
4057            uniform vec3 uEmissiveGridDim;
4058            uniform vec4 uEmissiveGridTransform;
4059            uniform sampler2D tEmissiveGrid;
4060        #endif
4061        uniform float uEmissiveStrength;
4062    #endif
4063
4064    #ifdef dSubstance
4065        #if defined(dSubstanceType_instance) || defined(dSubstanceType_groupInstance) || defined(dSubstanceType_vertexInstance)
4066            varying vec4 vSubstance;
4067            uniform vec2 uSubstanceTexDim;
4068            uniform sampler2D tSubstance;
4069        #elif defined(dSubstanceType_volumeInstance)
4070            varying vec4 vSubstance;
4071            uniform vec2 uSubstanceTexDim;
4072            uniform vec3 uSubstanceGridDim;
4073            uniform vec4 uSubstanceGridTransform;
4074            uniform sampler2D tSubstanceGrid;
4075        #endif
4076        uniform float uSubstanceStrength;
4077    #endif
4078#elif defined(dRenderVariant_emissive)
4079    #ifdef dEmissive
4080        #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance)
4081            varying float vEmissive;
4082            uniform vec2 uEmissiveTexDim;
4083            uniform sampler2D tEmissive;
4084        #elif defined(dEmissiveType_volumeInstance)
4085            varying float vEmissive;
4086            uniform vec2 uEmissiveTexDim;
4087            uniform vec3 uEmissiveGridDim;
4088            uniform vec4 uEmissiveGridTransform;
4089            uniform sampler2D tEmissiveGrid;
4090        #endif
4091        uniform float uEmissiveStrength;
4092    #endif
4093#elif defined(dRenderVariant_pick)
4094    #if __VERSION__ == 100 || !defined(dVaryingGroup)
4095        #ifdef requiredDrawBuffers
4096            varying vec4 vObject;
4097            varying vec4 vInstance;
4098            varying vec4 vGroup;
4099        #else
4100            varying vec4 vColor;
4101        #endif
4102    #else
4103        #ifdef requiredDrawBuffers
4104            flat out vec4 vObject;
4105            flat out vec4 vInstance;
4106            flat out vec4 vGroup;
4107        #else
4108            flat out vec4 vColor;
4109        #endif
4110    #endif
4111#endif
4112
4113#ifdef dTransparency
4114    #if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance) || defined(dTransparencyType_vertexInstance)
4115        varying float vTransparency;
4116        uniform vec2 uTransparencyTexDim;
4117        uniform sampler2D tTransparency;
4118    #elif defined(dTransparencyType_volumeInstance)
4119        varying float vTransparency;
4120        uniform vec2 uTransparencyTexDim;
4121        uniform vec3 uTransparencyGridDim;
4122        uniform vec4 uTransparencyGridTransform;
4123        uniform sampler2D tTransparencyGrid;
4124    #endif
4125    uniform float uTransparencyStrength;
4126#endif
4127`,O=`
4128vec3 quaternionTransform(const in vec4 q, const in vec3 v) {
4129    vec3 t = 2.0 * cross(q.xyz, v);
4130    return v + q.w * t + cross(q.xyz, t);
4131}
4132
4133vec4 computePlane(const in vec3 normal, const in vec3 inPoint) {
4134    return vec4(normalize(normal), -dot(normal, inPoint));
4135}
4136
4137float planeSD(const in vec4 plane, const in vec3 center) {
4138    return -dot(plane.xyz, center - plane.xyz * -plane.w);
4139}
4140
4141float sphereSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
4142    return (
4143        length(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position) / size) - 1.0
4144    ) * min(min(size.x, size.y), size.z);
4145}
4146
4147float cubeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
4148    vec3 d = abs(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position)) - size;
4149    return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0));
4150}
4151
4152float cylinderSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
4153    vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position);
4154
4155    vec2 d = abs(vec2(length(t.xz), t.y)) - size.xy;
4156    return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
4157}
4158
4159float infiniteConeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
4160    vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position);
4161
4162    float q = length(t.xy);
4163    return dot(size.xy, vec2(q, t.z));
4164}
4165
4166float getSignedDistance(const in vec3 center, const in int type, const in vec3 position, const in vec4 rotation, const in vec3 scale, const in mat4 transform) {
4167    vec3 c = (transform * vec4(center, 1.0)).xyz;
4168    if (type == 1) {
4169        vec3 normal = quaternionTransform(rotation, vec3(0.0, 1.0, 0.0));
4170        vec4 plane = computePlane(normal, position);
4171        return planeSD(plane, c);
4172    } else if (type == 2) {
4173        return sphereSD(position, rotation, scale * 0.5, c);
4174    } else if (type == 3) {
4175        return cubeSD(position, rotation, scale * 0.5, c);
4176    } else if (type == 4) {
4177        return cylinderSD(position, rotation, scale * 0.5, c);
4178    } else if (type == 5) {
4179        return infiniteConeSD(position, rotation, scale * 0.5, c);
4180    } else {
4181        return 0.1;
4182    }
4183}
4184
4185#if __VERSION__ == 100
4186    // 8-bit
4187    int bitwiseAnd(in int a, in int b) {
4188        int d = 128;
4189        int result = 0;
4190        for (int i = 0; i < 8; ++i) {
4191            if (d <= 0) break;
4192            if (a >= d && b >= d) result += d;
4193            if (a >= d) a -= d;
4194            if (b >= d) b -= d;
4195            d /= 2;
4196        }
4197        return result;
4198    }
4199
4200    bool hasBit(const in int mask, const in int bit) {
4201        return bitwiseAnd(mask, bit) == 0;
4202    }
4203#else
4204    bool hasBit(const in int mask, const in int bit) {
4205        return (mask & bit) == 0;
4206    }
4207#endif
4208
4209#if dClipObjectCount != 0
4210    bool clipTest(const in vec3 center) {
4211        // flag is a bit-flag for clip-objects to ignore (note, object ids start at 1 not 0)
4212        #if defined(dClipping)
4213            int flag = int(floor(vClipping * 255.0 + 0.5));
4214        #else
4215            int flag = 0;
4216        #endif
4217
4218        #pragma unroll_loop_start
4219        for (int i = 0; i < dClipObjectCount; ++i) {
4220            if (flag == 0 || hasBit(flag, UNROLLED_LOOP_INDEX + 1)) {
4221                bool test = getSignedDistance(center, uClipObjectType[i], uClipObjectPosition[i], uClipObjectRotation[i], uClipObjectScale[i], uClipObjectTransform[i]) <= 0.0;
4222                if ((!uClipObjectInvert[i] && test) || (uClipObjectInvert[i] && !test)) {
4223                    return true;
4224                }
4225            }
4226        }
4227        #pragma unroll_loop_end
4228        return false;
4229    }
4230#endif
4231`,I=`
4232uniform int uObjectId;
4233uniform int uInstanceCount;
4234uniform int uGroupCount;
4235
4236uniform int uPickType;
4237uniform int uMarkingType;
4238
4239uniform vec4 uCameraPlane;
4240uniform vec4 uLod;
4241
4242#if dClipObjectCount != 0
4243    uniform int uClipObjectType[dClipObjectCount];
4244    uniform bool uClipObjectInvert[dClipObjectCount];
4245    uniform vec3 uClipObjectPosition[dClipObjectCount];
4246    uniform vec4 uClipObjectRotation[dClipObjectCount];
4247    uniform vec3 uClipObjectScale[dClipObjectCount];
4248    uniform mat4 uClipObjectTransform[dClipObjectCount];
4249
4250    #if defined(dClipping)
4251        #if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup)
4252            varying float vClipping;
4253        #else
4254            flat in float vClipping;
4255        #endif
4256    #endif
4257#endif
4258
4259#if defined(dColorMarker)
4260    uniform vec3 uHighlightColor;
4261    uniform vec3 uSelectColor;
4262    uniform vec3 uDimColor;
4263    uniform float uHighlightStrength;
4264    uniform float uSelectStrength;
4265    uniform float uDimStrength;
4266    uniform int uMarkerPriority;
4267    uniform float uMarkerAverage;
4268#endif
4269
4270#if defined(dNeedsMarker)
4271    uniform float uMarker;
4272    #if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup)
4273        varying float vMarker;
4274    #else
4275        flat in float vMarker;
4276    #endif
4277#endif
4278
4279#if defined(dRenderVariant_colorDpoit)
4280    #define MAX_DPOIT_DEPTH 99999.0 // NOTE constant also set in TypeScript
4281    uniform sampler2D tDpoitDepth;
4282    uniform sampler2D tDpoitFrontColor;
4283#endif
4284
4285varying vec3 vModelPosition;
4286varying vec3 vViewPosition;
4287
4288uniform vec2 uViewOffset;
4289uniform float uModelScale;
4290
4291uniform float uNear;
4292uniform float uFar;
4293uniform float uIsOrtho;
4294
4295uniform bool uFog;
4296uniform float uFogNear;
4297uniform float uFogFar;
4298uniform vec3 uFogColor;
4299
4300uniform float uAlpha;
4301uniform float uPickingAlphaThreshold;
4302uniform bool uTransparentBackground;
4303
4304uniform bool uDoubleSided;
4305bool interior;
4306
4307uniform float uXrayEdgeFalloff;
4308uniform float uCelSteps;
4309uniform float uExposure;
4310
4311uniform mat4 uProjection;
4312
4313uniform int uRenderMask;
4314uniform bool uMarkingDepthTest;
4315
4316uniform sampler2D tDepth;
4317uniform vec2 uDrawingBufferSize;
4318
4319float getDepthPacked(const in vec2 coords) {
4320    return unpackRGBAToDepth(texture2D(tDepth, coords));
4321}
4322
4323float getDepth(const in vec2 coords) {
4324    #ifdef depthTextureSupport
4325        return texture2D(tDepth, coords).r;
4326    #else
4327        return unpackRGBAToDepth(texture2D(tDepth, coords));
4328    #endif
4329}
4330
4331float calcDepth(const in vec3 pos) {
4332    vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;
4333    return 0.5 + 0.5 * clipZW.x / clipZW.y;
4334}
4335
4336// "Bump Mapping Unparametrized Surfaces on the GPU" Morten S. Mikkelsen
4337// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
4338vec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {
4339    vec3 sigmaS = dFdx(position);
4340    vec3 sigmaT = dFdy(position);
4341
4342    vec3 r1 = cross(sigmaT, normal);
4343    vec3 r2 = cross(normal, sigmaS);
4344    float det = dot(sigmaS, r1);
4345    if (det == 0.0) return normal;
4346
4347    float bs = dFdx(height);
4348    float bt = dFdy(height);
4349
4350    vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);
4351    return normalize(abs(det) * normal - scale * surfGrad);
4352}
4353
4354float hash(in float h) {
4355    return fract(sin(h) * 43758.5453123);
4356}
4357
4358float noise(in vec3 x) {
4359    vec3 p = floor(x);
4360    vec3 f = fract(x);
4361    f = f * f * (3.0 - 2.0 * f);
4362
4363    float n = p.x + p.y * 157.0 + 113.0 * p.z;
4364    return mix(
4365        mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),
4366            mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),
4367        mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),
4368            mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);
4369}
4370
4371float fbm(in vec3 p) {
4372    float f = 0.0;
4373    f += 0.5 * noise(p);
4374    p *= 2.01;
4375    f += 0.25 * noise(p);
4376    p *= 2.02;
4377    f += 0.125 * noise(p);
4378
4379    return f;
4380}
4381
4382#ifdef dXrayShaded
4383    float calcXrayShadedAlpha(in float alpha, const in vec3 normal) {
4384        #if defined(dXrayShaded_on)
4385            alpha *= 1.0 - pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);
4386        #elif defined(dXrayShaded_inverted)
4387            alpha *= pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);
4388        #endif
4389        return clamp(alpha, 0.001, 0.999);
4390    }
4391#endif
4392`,A=`
4393uniform mat4 uProjection, uModel, uView;
4394uniform vec3 uCameraPosition;
4395uniform vec4 uCameraPlane;
4396
4397uniform int uObjectId;
4398uniform int uVertexCount;
4399uniform int uInstanceCount;
4400uniform int uGroupCount;
4401uniform vec4 uInvariantBoundingSphere;
4402uniform vec4 uLod;
4403
4404uniform bool uDoubleSided;
4405uniform int uPickType;
4406
4407#if dClipObjectCount != 0
4408    uniform int uClipObjectType[dClipObjectCount];
4409    uniform bool uClipObjectInvert[dClipObjectCount];
4410    uniform vec3 uClipObjectPosition[dClipObjectCount];
4411    uniform vec4 uClipObjectRotation[dClipObjectCount];
4412    uniform vec3 uClipObjectScale[dClipObjectCount];
4413    uniform mat4 uClipObjectTransform[dClipObjectCount];
4414
4415    #if defined(dClipping)
4416        uniform vec2 uClippingTexDim;
4417        uniform sampler2D tClipping;
4418        #if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup)
4419            varying float vClipping;
4420        #else
4421            flat out float vClipping;
4422        #endif
4423    #endif
4424#endif
4425
4426#if defined(dNeedsMarker)
4427    uniform float uMarker;
4428    uniform vec2 uMarkerTexDim;
4429    uniform sampler2D tMarker;
4430    #if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup)
4431        varying float vMarker;
4432    #else
4433        flat out float vMarker;
4434    #endif
4435#endif
4436
4437varying vec3 vModelPosition;
4438varying vec3 vViewPosition;
4439
4440uniform float uModelScale;
4441
4442#if defined(noNonInstancedActiveAttribs)
4443    // int() is needed for some Safari versions
4444    // see https://bugs.webkit.org/show_bug.cgi?id=244152
4445    #define VertexID int(gl_VertexID)
4446#else
4447    attribute float aVertex;
4448    #define VertexID int(aVertex)
4449#endif
4450
4451#if defined(enabledMultiDraw)
4452    #define DrawID gl_DrawID
4453#else
4454    #define DrawID uDrawId
4455#endif
4456`,w=`
4457// TODO find a better place for these convenience defines
4458
4459#if defined(dRenderVariant_colorBlended) || defined(dRenderVariant_colorWboit) || defined(dRenderVariant_colorDpoit)
4460    #define dRenderVariant_color
4461#endif
4462
4463#if defined(dColorType_instance) || defined(dColorType_group) || defined(dColorType_groupInstance) || defined(dColorType_vertex) || defined(dColorType_vertexInstance)
4464    #define dColorType_texture
4465#endif
4466
4467#if defined(dColorType_volume) || defined(dColorType_volumeInstance)
4468    #define dColorType_grid
4469#endif
4470
4471#if defined(dColorType_attribute) || defined(dColorType_texture) || defined(dColorType_grid)
4472    #define dColorType_varying
4473#endif
4474
4475#if ((defined(dRenderVariant_color) || defined(dRenderVariant_tracing)) && defined(dColorMarker)) || defined(dRenderVariant_marking)
4476    #define dNeedsMarker
4477#endif
4478
4479#if defined(dXrayShaded_on) || defined(dXrayShaded_inverted)
4480    #define dXrayShaded
4481#endif
4482
4483#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || ((defined(dRenderVariant_depth) || defined(dRenderVariant_pick)) && defined(dXrayShaded))
4484    #define dNeedsNormal
4485#endif
4486
4487#define MaskAll 0
4488#define MaskOpaque 1
4489#define MaskTransparent 2
4490
4491//
4492
4493#define PI 3.14159265
4494#define RECIPROCAL_PI 0.31830988618
4495#define EPSILON 1e-6
4496#define ONE_MINUS_EPSILON 1.0 - EPSILON
4497#define TWO_PI 6.2831853
4498#define HALF_PI 1.570796325
4499
4500#define PALETTE_SCALE 16777214.0 // (1 << 24) - 2
4501
4502#define saturate(a) clamp(a, 0.0, 1.0)
4503
4504#if __VERSION__ == 100
4505    #define round(x) floor((x) + 0.5)
4506#endif
4507
4508float intDiv(const in float a, const in float b) { return float(int(a) / int(b)); }
4509vec2 ivec2Div(const in vec2 a, const in vec2 b) { return vec2(ivec2(a) / ivec2(b)); }
4510float intMod(const in float a, const in float b) { return a - b * float(int(a) / int(b)); }
4511int imod(const in int a, const in int b) { return a - b * (a / b); }
4512
4513float pow2(const in float x) { return x * x; }
4514
4515vec3 packIntToRGB(in float value) {
4516    value = clamp(round(value), 0.0, 16777216.0 - 1.0) + 1.0;
4517    vec3 c = vec3(0.0);
4518    c.b = mod(value, 256.0);
4519    value = floor(value / 256.0);
4520    c.g = mod(value, 256.0);
4521    value = floor(value / 256.0);
4522    c.r = mod(value, 256.0);
4523    return c / 255.0;
4524}
4525float unpackRGBToInt(const in vec3 rgb) {
4526    return (floor(rgb.r * 255.0 + 0.5) * 256.0 * 256.0 + floor(rgb.g * 255.0 + 0.5) * 256.0 + floor(rgb.b * 255.0 + 0.5)) - 1.0;
4527}
4528
4529vec2 packUnitIntervalToRG(const in float v) {
4530    vec2 enc;
4531    enc.xy = vec2(fract(v * 256.0), v);
4532    enc.y -= enc.x * (1.0 / 256.0);
4533    enc.xy *=  256.0 / 255.0;
4534
4535    return enc;
4536}
4537
4538float unpackRGToUnitInterval(const in vec2 enc) {
4539    return dot(enc, vec2(255.0 / (256.0 * 256.0), 255.0 / 256.0));
4540}
4541
4542float pack2x4(vec2 v) {
4543    vec2 clamped_v = clamp(v, 0.0, 1.0);
4544    vec2 scaled_v = floor(clamped_v * 15.0 + 0.5); // round to 0–15
4545    float c = scaled_v.x + scaled_v.y * 16.0;
4546    return c / 255.0;
4547}
4548
4549vec2 unpack2x4(float f) {
4550    float c = floor(f * 255.0 + 0.5);
4551    float lo = mod(c, 16.0);
4552    float hi = floor(c / 16.0);
4553    return vec2(lo, hi) / 15.0;
4554}
4555
4556vec3 screenSpaceToViewSpace(const in vec3 ssPos, const in mat4 invProjection) {
4557    vec4 p = vec4(ssPos * 2.0 - 1.0, 1.0);
4558    p = invProjection * p;
4559    return p.xyz / p.w;
4560}
4561
4562const float PackUpscale = 256.0 / 255.0; // fraction -> 0..1 (including 1)
4563const float UnpackDownscale = 255.0 / 256.0; // 0..1 -> fraction (excluding 1)
4564const vec3 PackFactors = vec3(256.0 * 256.0 * 256.0, 256.0 * 256.0,  256.0);
4565const vec4 UnpackFactors = UnpackDownscale / vec4(PackFactors, 1.0);
4566const float ShiftRight8 = 1.0 / 256.0;
4567
4568vec4 packDepthToRGBA(const in float v) {
4569    vec4 r = vec4(fract(v * PackFactors), v);
4570    r.yzw -= r.xyz * ShiftRight8; // tidy overflow
4571    return r * PackUpscale;
4572}
4573float unpackRGBAToDepth(const in vec4 v) {
4574    return dot(v, UnpackFactors);
4575}
4576
4577vec4 packDepthWithAlphaToRGBA(const in float depth, const in float alpha){
4578    vec3 r = vec3(fract(depth * PackFactors.yz), depth);
4579    r.yz -= r.xy * ShiftRight8;
4579 // tidy overflow
4580    return vec4(r * PackUpscale, alpha);
4581}
4582vec2 unpackRGBAToDepthWithAlpha(const in vec4 v) {
4583    return vec2(dot(v.xyz, UnpackFactors.yzw), v.w);
4584}
4585
4586vec4 sRGBToLinear(const in vec4 c) {
4587    return vec4(mix(pow(c.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), c.rgb * 0.0773993808, vec3(lessThanEqual(c.rgb, vec3(0.04045)))), c.a);
4588}
4589vec4 linearTosRGB(const in vec4 c) {
4590    return vec4(mix(pow(c.rgb, vec3(0.41666)) * 1.055 - vec3(0.055), c.rgb * 12.92, vec3(lessThanEqual(c.rgb, vec3(0.0031308)))), c.a);
4591}
4592
4593float luminance(vec3 c) {
4594    // https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
4595    const vec3 W = vec3(0.2125, 0.7154, 0.0721);
4596    return dot(c, W);
4597}
4598
4599float linearizeDepth(const in float depth, const in float near, const in float far) {
4600    return (2.0 * near) / (far + near - depth * (far - near));
4601}
4602
4603float perspectiveDepthToViewZ(const in float invClipZ, const in float near, const in float far) {
4604    return (near * far) / ((far - near) * invClipZ - far);
4605}
4606
4607float orthographicDepthToViewZ(const in float linearClipZ, const in float near, const in float far) {
4608    return linearClipZ * (near - far) - near;
4609}
4610
4611float depthToViewZ(const in float isOrtho, const in float linearClipZ, const in float near, const in float far) {
4612    return isOrtho == 1.0 ? orthographicDepthToViewZ(linearClipZ, near, far) : perspectiveDepthToViewZ(linearClipZ, near, far);
4613}
4614
4615// see https://github.com/graphitemaster/normals_revisited and https://www.shadertoy.com/view/3s33zj
4616mat3 adjoint(const in mat4 m) {
4617    return mat3(
4618        cross(m[1].xyz, m[2].xyz),
4619        cross(m[2].xyz, m[0].xyz),
4620        cross(m[0].xyz, m[1].xyz)
4621    );
4622}
4623
4624#if __VERSION__ == 100
4625    // transpose
4626
4627    float transpose(const in float m) {
4628        return m;
4629    }
4630
4631    mat2 transpose2(const in mat2 m) {
4632        return mat2(
4633            m[0][0], m[1][0],
4634            m[0][1], m[1][1]
4635        );
4636    }
4637
4638    mat3 transpose3(const in mat3 m) {
4639        return mat3(
4640            m[0][0], m[1][0], m[2][0],
4641            m[0][1], m[1][1], m[2][1],
4642            m[0][2], m[1][2], m[2][2]
4643        );
4644    }
4645
4646    mat4 transpose4(const in mat4 m) {
4647        return mat4(
4648            m[0][0], m[1][0], m[2][0], m[3][0],
4649            m[0][1], m[1][1], m[2][1], m[3][1],
4650            m[0][2], m[1][2], m[2][2], m[3][2],
4651            m[0][3], m[1][3], m[2][3], m[3][3]
4652        );
4653    }
4654
4655    // inverse
4656
4657    float inverse(const in float m) {
4658        return 1.0 / m;
4659    }
4660
4661    mat2 inverse2(const in mat2 m) {
4662        return mat2(m[1][1],-m[0][1],
4663                -m[1][0], m[0][0]) / (m[0][0]*m[1][1] - m[0][1]*m[1][0]);
4664    }
4665
4666    mat3 inverse3(const in mat3 m) {
4667        float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];
4668        float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];
4669        float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];
4670
4671        float b01 = a22 * a11 - a12 * a21;
4672        float b11 = -a22 * a10 + a12 * a20;
4673        float b21 = a21 * a10 - a11 * a20;
4674
4675        float det = a00 * b01 + a01 * b11 + a02 * b21;
4676
4677        return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),
4678                    b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),
4679                    b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;
4680    }
4681
4682    mat4 inverse4(const in mat4 m) {
4683        float
4684            a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],
4685            a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],
4686            a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],
4687            a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],
4688
4689            b00 = a00 * a11 - a01 * a10,
4690            b01 = a00 * a12 - a02 * a10,
4691            b02 = a00 * a13 - a03 * a10,
4692            b03 = a01 * a12 - a02 * a11,
4693            b04 = a01 * a13 - a03 * a11,
4694            b05 = a02 * a13 - a03 * a12,
4695            b06 = a20 * a31 - a21 * a30,
4696            b07 = a20 * a32 - a22 * a30,
4697            b08 = a20 * a33 - a23 * a30,
4698            b09 = a21 * a32 - a22 * a31,
4699            b10 = a21 * a33 - a23 * a31,
4700            b11 = a22 * a33 - a23 * a32,
4701
4702            det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
4703
4704        return mat4(
4705            a11 * b11 - a12 * b10 + a13 * b09,
4706            a02 * b10 - a01 * b11 - a03 * b09,
4707            a31 * b05 - a32 * b04 + a33 * b03,
4708            a22 * b04 - a21 * b05 - a23 * b03,
4709            a12 * b08 - a10 * b11 - a13 * b07,
4710            a00 * b11 - a02 * b08 + a03 * b07,
4711            a32 * b02 - a30 * b05 - a33 * b01,
4712            a20 * b05 - a22 * b02 + a23 * b01,
4713            a10 * b10 - a11 * b08 + a13 * b06,
4714            a01 * b08 - a00 * b10 - a03 * b06,
4715            a30 * b04 - a31 * b02 + a33 * b00,
4716            a21 * b02 - a20 * b04 - a23 * b00,
4717            a11 * b07 - a10 * b09 - a12 * b06,
4718            a00 * b09 - a01 * b07 + a02 * b06,
4719            a31 * b01 - a30 * b03 - a32 * b00,
4720            a20 * b03 - a21 * b01 + a22 * b00) / det;
4721    }
4722
4723    #define isNaN(x) ((x) != (x))
4724    #define isInf(x) ((x) == (x) + 1.0)
4725#else
4726    #define transpose2(m) transpose(m)
4727    #define transpose3(m) transpose(m)
4728    #define transpose4(m) transpose(m)
4729
4730    #define inverse2(m) inverse(m)
4731    #define inverse3(m) inverse(m)
4732    #define inverse4(m) inverse(m)
4733
4734    #define isNaN isnan
4735    #define isInf isinf
4736#endif
4737`,D=`
4738if (uLod.w == 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
4739    float d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale;
4740    float ta = min(
4741        smoothstep(uLod.x, uLod.x + uLod.z, d),
4742        1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d)
4743    );
4744
4745    #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
4746        float at = 0.0;
4747
4748        // shift by view-offset during multi-sample rendering to allow for blending
4749        vec2 coord = gl_FragCoord.xy + uViewOffset * 0.25;
4750
4751        const mat4 thresholdMatrix = mat4(
4752            1.0 / 17.0,  9.0 / 17.0,  3.0 / 17.0, 11.0 / 17.0,
4753            13.0 / 17.0,  5.0 / 17.0, 15.0 / 17.0,  7.0 / 17.0,
4754            4.0 / 17.0, 12.0 / 17.0,  2.0 / 17.0, 10.0 / 17.0,
4755            16.0 / 17.0,  8.0 / 17.0, 14.0 / 17.0,  6.0 / 17.0
4756        );
4757        int ci = int(intMod(coord.x, 4.0));
4758        int ri = int(intMod(coord.y, 4.0));
4759        #if __VERSION__ == 100
4760            vec4 i = vec4(float(ci * 4 + ri));
4761            vec4 v = thresholdMatrix[0] * vec4(equal(i, vec4(0.0, 1.0, 2.0, 3.0))) +
4762                thresholdMatrix[1] * vec4(equal(i, vec4(4.0, 5.0, 6.0, 7.0))) +
4763                thresholdMatrix[2] * vec4(equal(i, vec4(8.0, 9.0, 10.0, 11.0))) +
4764                thresholdMatrix[3] * vec4(equal(i, vec4(12.0, 13.0, 14.0, 15.0)));
4765            at = v.x + v.y + v.z + v.w;
4766        #else
4767            at = thresholdMatrix[ci][ri];
4768        #endif
4769
4770        if (ta < 0.99 && (ta < 0.01 || ta < at)) {
4771            discard;
4772        }
4773    #else
4774        if (ta < uPickingAlphaThreshold) {
4775            discard;
4776        }
4777    #endif
4778}
4779`,E=`
4780    // floatToRgba adapted from https://github.com/equinor/glsl-float-to-rgba
4781    // MIT License, Copyright (c) 2020 Equinor
4782
4783    float shiftRight (float v, float amt) {
4784    v = floor(v) + 0.5;
4785    return floor(v / exp2(amt));
4786    }
4787    float shiftLeft (float v, float amt) {
4788        return floor(v * exp2(amt) + 0.5);
4789    }
4790    float maskLast (float v, float bits) {
4791        return mod(v, shiftLeft(1.0, bits));
4792    }
4793    float extractBits (float num, float from, float to) {
4794        from = floor(from + 0.5); to = floor(to + 0.5);
4795        return maskLast(shiftRight(num, from), to - from);
4796    }
4797
4798    vec4 floatToRgba(float texelFloat, bool littleEndian) {
4799        if (texelFloat == 0.0) return vec4(0.0, 0.0, 0.0, 0.0);
4800        float sign = texelFloat > 0.0 ? 0.0 : 1.0;
4801        texelFloat = abs(texelFloat);
4802        float exponent = floor(log2(texelFloat));
4803        float biased_exponent = exponent + 127.0;
4804        float fraction = ((texelFloat / exp2(exponent)) - 1.0) * 8388608.0;
4805        float t = biased_exponent / 2.0;
4806        float last_bit_of_biased_exponent = fract(t) * 2.0;
4807        float remaining_bits_of_biased_exponent = floor(t);
4808        float byte4 = extractBits(fraction, 0.0, 8.0) / 255.0;
4809        float byte3 = extractBits(fraction, 8.0, 16.0) / 255.0;
4810        float byte2 = (last_bit_of_biased_exponent * 128.0 + extractBits(fraction, 16.0, 23.0)) / 255.0;
4811        float byte1 = (sign * 128.0 + remaining_bits_of_biased_exponent) / 255.0;
4812        return (
4813            littleEndian
4814                ? vec4(byte4, byte3, byte2, byte1)
4815                : vec4(byte1, byte2, byte3, byte4)
4816        );
4817    }
4818`,M=`
4819#if dLightCount != 0
4820    uniform vec3 uLightDirection[dLightCount];
4821    uniform vec3 uLightColor[dLightCount];
4822#endif
4823uniform vec3 uAmbientColor;
4824
4825struct PhysicalMaterial {
4826    vec3 diffuseColor;
4827    float roughness;
4828    vec3 specularColor;
4829    float specularF90;
4830};
4831
4832struct IncidentLight {
4833    vec3 color;
4834    vec3 direction;
4835};
4836
4837struct ReflectedLight {
4838    vec3 directDiffuse;
4839    vec3 directSpecular;
4840    vec3 indirectDiffuse;
4841    vec3 indirectSpecular;
4842};
4843
4844struct GeometricContext {
4845    vec3 position;
4846    vec3 normal;
4847    vec3 viewDir;
4848};
4849
4850vec3 BRDF_Lambert(const in vec3 diffuseColor) {
4851    return RECIPROCAL_PI * diffuseColor;
4852}
4853
4854vec3 F_Schlick(const in vec3 f0, const in float f90, const in float dotVH) {
4855    // Original approximation by Christophe Schlick '94
4856    // float fresnel = pow( 1.0 - dotVH, 5.0 );
4857    // Optimized variant (presented by Epic at SIGGRAPH '13)
4858    // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
4859    float fresnel = exp2((-5.55473 * dotVH - 6.98316) * dotVH);
4860    return f0 * (1.0 - fresnel) + (f90 * fresnel);
4861}
4862
4863// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
4864// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
4865float V_GGX_SmithCorrelated(const in float alpha, const in float dotNL, const in float dotNV) {
4866    float a2 = pow2(alpha);
4867    float gv = dotNL * sqrt(a2 + (1.0 - a2) * pow2(dotNV));
4868    float gl = dotNV * sqrt(a2 + (1.0 - a2) * pow2(dotNL));
4869    return 0.5 / max(gv + gl, EPSILON);
4870}
4871
4872// Microfacet Models for Refraction through Rough Surfaces - equation (33)
4873// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
4874// alpha is "roughness squared" in Disney’s reparameterization
4875float D_GGX(const in float alpha, const in float dotNH) {
4876    float a2 = pow2(alpha);
4877    float denom = pow2(dotNH) * (a2 - 1.0) + 1.0; // avoid alpha = 0 with dotNH = 1
4878    return RECIPROCAL_PI * a2 / pow2(denom);
4879}
4880
4881// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
4882vec3 BRDF_GGX(const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness) {
4883    float alpha = pow2(roughness); // UE4's roughness
4884    vec3 halfDir = normalize( lightDir + viewDir);
4885    float dotNL = saturate(dot(normal, lightDir));
4886    float dotNV = saturate(dot(normal, viewDir));
4887    float dotNH = saturate(dot(normal, halfDir));
4888    float dotVH = saturate(dot(viewDir, halfDir));
4889    vec3 F = F_Schlick(f0, f90, dotVH);
4890    float V = V_GGX_SmithCorrelated(alpha, dotNL, dotNV);
4891    float D = D_GGX(alpha, dotNH);
4892    return F * (V * D);
4893}
4894
4895// Analytical approximation of the DFG LUT, one half of the
4896// split-sum approximation used in indirect specular lighting.
4897// via 'environmentBRDF' from "Physically Based Shading on Mobile"
4898// https://www.unrealengine.com/blog/physically-based-shading-on-mobile
4899vec2 DFGApprox(const in vec3 normal, const in vec3 viewDir, const in float roughness) {
4900    float dotNV = saturate(dot(normal, viewDir));
4901    const vec4 c0 = vec4(-1, -0.0275, -0.572, 0.022);
4902    const vec4 c1 = vec4(1, 0.0425, 1.04, -0.04);
4903    vec4 r = roughness * c0 + c1;
4904    float a004 = min(r.x * r.x, exp2(-9.28 * dotNV)) * r.x + r.y;
4905    vec2 fab = vec2(-1.04, 1.04) * a004 + r.zw;
4906    return fab;
4907}
4908
4909// Fdez-Ag\xfcera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
4910// Approximates multiscattering in order to preserve energy.
4911// http://www.jcgt.org/published/0008/01/03/
4912void computeMultiscattering(const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter) {
4913    vec2 fab = DFGApprox(normal, viewDir, roughness);
4914    vec3 FssEss = specularColor * fab.x + specularF90 * fab.y;
4915    float Ess = fab.x + fab.y;
4916    float Ems = 1.0 - Ess;
4917    vec3 Favg = specularColor + (1.0 - specularColor) * 0.047619; // 1/21
4918    vec3 Fms = FssEss * Favg / (1.0 - Ems * Favg);
4919    singleScatter += FssEss;
4920    multiScatter += Fms * Ems;
4921}
4922
4923void RE_Direct_Physical(const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
4924    float dotNL = saturate(dot(geometry.normal, directLight.direction));
4925    vec3 irradiance = dotNL * directLight.color;
4926    reflectedLight.directSpecular += irradiance * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness);
4927    reflectedLight.directDiffuse += irradiance * BRDF_Lambert(material.diffuseColor);
4928}
4929
4930void RE_IndirectDiffuse_Physical(const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
4931    reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert(material.diffuseColor);
4932}
4933
4934void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
4935    // Both indirect specular and indirect diffuse light accumulate here
4936    vec3 singleScattering = vec3(0.0);
4937    vec3 multiScattering = vec3(0.0);
4938    vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
4939    computeMultiscattering(geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering);
4940    vec3 diffuse = material.diffuseColor * (1.0 - ( singleScattering + multiScattering));
4941    reflectedLight.indirectSpecular += radiance * singleScattering;
4942    reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
4943    reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
4944}
4945`,P=`
4946varying vec3 vNormal;
4947`,k=`
4948vec4 readFromTexture(const in sampler2D tex, const in float i, const in vec2 dim) {
4949    float x = intMod(i, dim.x);
4950    float y = floor(intDiv(i, dim.x));
4951    vec2 uv = (vec2(x, y) + 0.5) / dim;
4952    return texture2D(tex, uv);
4953}
4954
4955vec4 readFromTexture(const in sampler2D tex, const in int i, const in vec2 dim) {
4956    int x = imod(i, int(dim.x));
4957    int y = i / int(dim.x);
4958    vec2 uv = (vec2(x, y) + 0.5) / dim;
4959    return texture2D(tex, uv);
4960}
4961`,B=`
4962    // rgbaToFloat adapted from https://github.com/ihmeuw/glsl-rgba-to-float
4963    // BSD 3-Clause License
4964    //
4965    // Copyright (c) 2019, Institute for Health Metrics and Evaluation All rights reserved.
4966    // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4967    //  - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
4968    //  - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
4969    //  - Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
4970    //
4971    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4972    // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
4973    // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
4974    // OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4975    // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
4976    // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
4977    // OF THE POSSIBILITY OF SUCH DAMAGE.
4978
4979    ivec4 floatsToBytes(vec4 inputFloats, bool littleEndian) {
4980        ivec4 bytes = ivec4(inputFloats * 255.0);
4981        return (
4982            littleEndian
4983                ? bytes.abgr
4984                : bytes
4985        );
4986    }
4987
4988    // Break the four bytes down into an array of 32 bits.
4989    void bytesToBits(const in ivec4 bytes, out bool bits[32]) {
4990        for (int channelIndex = 0; channelIndex < 4; ++channelIndex) {
4991            float acc = float(bytes[channelIndex]);
4992            for (int indexInByte = 7; indexInByte >= 0; --indexInByte) {
4993                float powerOfTwo = exp2(float(indexInByte));
4994                bool bit = acc >= powerOfTwo;
4995                bits[channelIndex * 8 + (7 - indexInByte)] = bit;
4996                acc = mod(acc, powerOfTwo);
4997            }
4998        }
4999    }
5000
5001    // Compute the exponent of the 32-bit float.
5002    float getExponent(bool bits[32]) {
5003        const int startIndex = 1;
5004        const int bitStringLength = 8;
5005        const int endBeforeIndex = startIndex + bitStringLength;
5006        float acc = 0.0;
5007        int pow2 = bitStringLength - 1;
5008        for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) {
5009            acc += float(bits[bitIndex]) * exp2(float(pow2--));
5010        }
5011        return acc;
5012    }
5013
5014    // Compute the mantissa of the 32-bit float.
5015    float getMantissa(bool bits[32], bool subnormal) {
5016        const int startIndex = 9;
5017        const int bitStringLength = 23;
5018        const int endBeforeIndex = startIndex + bitStringLength;
5019        // Leading/implicit/hidden bit convention:
5020        // If the number is not subnormal (with exponent 0), we add a leading 1 digit.
5021        float acc = float(!subnormal) * exp2(float(bitStringLength));
5022        int pow2 = bitStringLength - 1;
5023        for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) {
5024            acc += float(bits[bitIndex]) * exp2(float(pow2--));
5025        }
5026        return acc;
5027    }
5028
5029    // Parse the float from its 32 bits.
5030    float bitsToFloat(bool bits[32]) {
5031        float signBit = float(bits[0]) * -2.0 + 1.0;
5032        float exponent = getExponent(bits);
5033        bool subnormal = abs(exponent - 0.0) < 0.01;
5034        float mantissa = getMantissa(bits, subnormal);
5035        float exponentBias = 127.0;
5036        return signBit * mantissa * exp2(exponent - exponentBias - 23.0);
5037    }
5038
5039    float rgbaToFloat(vec4 texelRGBA, bool littleEndian) {
5040        ivec4 rgbaBytes = floatsToBytes(texelRGBA, littleEndian);
5041        bool bits[32];
5042        bytesToBits(rgbaBytes, bits);
5043        return bitsToFloat(bits);
5044    }
5045`,_=`
5046#if defined(dSizeType_uniform)
5047    uniform float uSize;
5048#elif defined(dSizeType_attribute)
5049    attribute float aSize;
5050#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance)
5051    uniform vec2 uSizeTexDim;
5052    uniform sampler2D tSize;
5053#endif
5054
5055uniform float uSizeFactor;
5056`,R=`
5057vec4 texture3dFrom1dTrilinear(const in sampler2D tex, const in vec3 pos, const in vec3 gridDim, const in vec2 texDim, const in float offset) {
5058    float gdYZ = gridDim.z * gridDim.y;
5059    float gdZ = gridDim.z;
5060    vec3 p0 = floor(pos * gridDim);
5061    vec3 p1 = ceil(pos * gridDim);
5062    vec3 pd = (pos * gridDim - p0) / (p1 - p0);
5063    vec4 s000 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p0.x * gdYZ, texDim);
5064    vec4 s100 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p1.x * gdYZ, texDim);
5065    vec4 s001 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p0.x * gdYZ, texDim);
5066    vec4 s101 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p1.x * gdYZ, texDim);
5067    vec4 s010 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p0.x * gdYZ, texDim);
5068    vec4 s110 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p1.x * gdYZ, texDim);
5069    vec4 s011 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p0.x * gdYZ, texDim);
5070    vec4 s111 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p1.x * gdYZ, texDim);
5071    vec4 s00 = mix(s000, s100, pd.x);
5072    vec4 s01 = mix(s001, s101, pd.x);
5073    vec4 s10 = mix(s010, s110, pd.x);
5074    vec4 s11 = mix(s011, s111, pd.x);
5075    vec4 s0 = mix(s00, s10, pd.y);
5076    vec4 s1 = mix(s01, s11, pd.y);
5077    return mix(s0, s1, pd.z);
5078}
5079`,F=`
5080vec4 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
5081    float zSlice0 = floor(pos.z * gridDim.z);
5082    float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x;
5083    float row0 = floor(intDiv(zSlice0 * gridDim.x, texDim.x));
5084    vec2 coord0 = (vec2(column0 * gridDim.x, row0 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
5085    vec4 color0 = texture2D(tex, coord0);
5086
5087    float zSlice1 = zSlice0 + 1.0;
5088    float column1 = intMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x;
5089    float row1 = floor(intDiv(zSlice1 * gridDim.x, texDim.x));
5090    vec2 coord1 = (vec2(column1 * gridDim.x, row1 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
5091    vec4 color1 = texture2D(tex, coord1);
5092
5093    float delta0 = abs((pos.z * gridDim.z) - zSlice0);
5094    return mix(color0, color1, delta0);
5095}
5096`,L=`
5097vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
5098    float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
5099    float column = intMod(zSlice * gridDim.x, texDim.x) / gridDim.x;
5100    float row = floor(intDiv(zSlice * gridDim.x, texDim.x));
5101    vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
5102    return texture2D(tex, coord);
5103}
5104`,z=`
5105#if defined(dRenderVariant_colorWboit)
5106    if (uRenderMask == MaskOpaque) {
5107        if (preFogAlpha < 1.0) {
5108            discard;
5109        }
5110    } else if (uRenderMask == MaskTransparent) {
5111        if (preFogAlpha != 1.0 && fragmentDepth < getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {
5112            #ifdef dTransparentBackfaces_off
5113                if (interior) discard;
5114            #endif
5115            float alpha = gl_FragColor.a;
5116            float wboitWeight = alpha * clamp(pow(1.0 - fragmentDepth, 2.0), 0.01, 1.0);
5117            gl_FragColor = vec4(gl_FragColor.rgb * alpha * wboitWeight, alpha);
5118            // extra alpha is to handle pre-multiplied alpha
5119            #ifndef dGeometryType_directVolume
5120                gl_FragData[1] = vec4((uTransparentBackground ? alpha : 1.0) * alpha * wboitWeight);
5121            #else
5122                gl_FragData[1] = vec4(alpha * alpha * wboitWeight);
5123            #endif
5124        } else {
5125            discard;
5126        }
5127    }
5128#endif
5129`,N=`
5130#if defined(dRenderVariant_colorDpoit)
5131    if (uRenderMask == MaskOpaque) {
5132        if (preFogAlpha < 1.0) {
5133            discard;
5134        }
5135    } else if (uRenderMask == MaskTransparent) {
5136        vec2 coords = gl_FragCoord.xy / uDrawingBufferSize;
5137        if (preFogAlpha != 1.0 && fragmentDepth < getDepth(coords)) {
5138            #ifdef dTransparentBackfaces_off
5139                if (interior) discard;
5140            #endif
5141
5142            // adapted from https://github.com/tsherif/webgl2examples
5143            // The MIT License, Copyright 2017 Tarek Sherif, Shuai Shao
5144
5145            vec2 lastDepth = texture2D(tDpoitDepth, coords).rg;
5146            vec4 lastFrontColor = texture2D(tDpoitFrontColor, coords);
5147
5148            vec4 fragColor = gl_FragColor;
5149
5150            // depth value always increases
5151            // so we can use MAX blend equation
5152            gl_FragData[2].rg = vec2(-MAX_DPOIT_DEPTH);
5153
5154            // front color always increases
5155            // so we can use MAX blend equation
5156            gl_FragColor = lastFrontColor;
5157
5158            // back color is separately blend afterwards each pass
5159            gl_FragData[1] = vec4(0.0);
5160
5161            float nearestDepth = -lastDepth.x;
5162            float furthestDepth = lastDepth.y;
5163            float alphaMultiplier = 1.0 - lastFrontColor.a;
5164
5165            if (fragmentDepth < nearestDepth || fragmentDepth > furthestDepth) {
5166                // Skip this depth since it's been peeled.
5167                return;
5168            }
5169
5170            if (fragmentDepth > nearestDepth && fragmentDepth < furthestDepth) {
5171                // This needs to be peeled.
5172                // The ones remaining after MAX blended for
5173                // all need-to-peel will be peeled next pass.
5174                gl_FragData[2].rg = vec2(-fragmentDepth, fragmentDepth);
5175                return;
5176            }
5177
5178            // write to back and front color buffer
5179            if (fragmentDepth == nearestDepth) {
5180                gl_FragColor.rgb += fragColor.rgb * fragColor.a * alphaMultiplier;
5181                gl_FragColor.a = 1.0 - alphaMultiplier * (1.0 - fragColor.a);
5182            } else {
5183                gl_FragData[1] += fragColor;
5184            }
5185
5186        } else {
5187            discard;
5188        }
5189    }
5190#endif
5191`,G=`
5192precision highp float;
5193precision highp int;
5194
5195#include common
5196#include read_from_texture
5197#include common_vert_params
5198#include color_vert_params
5199#include size_vert_params
5200#include common_clip
5201
5202uniform float uPixelRatio;
5203uniform vec4 uViewport;
5204
5205attribute vec3 aPosition;
5206attribute mat4 aTransform;
5207attribute float aInstance;
5208attribute float aGroup;
5209
5210void main(){
5211    int vertexId = VertexID;
5212
5213    #include assign_group
5214    #include assign_color_varying
5215    #include assign_marker_varying
5216    #include assign_clipping_varying
5217    #include assign_position
5218    #include assign_size
5219
5220    #ifdef dPointSizeAttenuation
5221        gl_PointSize = size * uPixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 5.0;
5222    #else
5223        gl_PointSize = size * uPixelRatio;
5224    #endif
5225    gl_PointSize = max(1.0, gl_PointSize);
5226
5227    gl_Position = uProjection * mvPosition;
5228
5229    #include clip_instance
5230}
5231`,U=`
5232precision highp float;
5233precision highp int;
5234
5235#include common
5236#include common_frag_params
5237#include color_frag_params
5238#include common_clip
5239
5240const vec2 center = vec2(0.5);
5241const float radius = 0.5;
5242
5243void main(){
5244    #include fade_lod
5245    #include clip_pixel
5246
5247    float fragmentDepth = gl_FragCoord.z;
5248    #include assign_material_color
5249
5250    #if defined(dPointStyle_circle)
5251        float dist = distance(gl_PointCoord, center);
5252        if (dist > radius) discard;
5253    #elif defined(dPointStyle_fuzzy)
5254        float dist = distance(gl_PointCoord, center);
5255        float fuzzyAlpha = 1.0 - smoothstep(0.0, radius, dist);
5256        if (fuzzyAlpha < 0.0001) discard;
5257    #endif
5258
5259    #if defined(dPointStyle_fuzzy) && (defined(dRenderVariant_color) || defined(dRenderVariant_tracing))
5260        material.a *= fuzzyAlpha;
5261    #endif
5262
5263    #include check_transparency
5264
5265    #if defined(dRenderVariant_pick)
5266        #include check_picking_alpha
5267        #ifdef requiredDrawBuffers
5268            gl_FragColor = vObject;
5269            gl_FragData[1] = vInstance;
5270            gl_FragData[2] = vGroup;
5271            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
5272        #else
5273            gl_FragColor = vColor;
5274        #endif
5275    #elif defined(dRenderVariant_depth)
5276        gl_FragColor = material;
5277    #elif defined(dRenderVariant_marking)
5278        gl_FragColor = material;
5279    #elif defined(dRenderVariant_emissive)
5280        gl_FragColor = material;
5281    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
5282        gl_FragColor = material;
5283        #include apply_marker_color
5284
5285        #if defined(dRenderVariant_color)
5286            #include apply_fog
5287            #include wboit_write
5288            #include dpoit_write
5289        #elif defined(dRenderVariant_tracing)
5290            gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
5291            gl_FragData[2] = vec4(material.rgb, uDensity);
5292        #endif
5293    #endif
5294}
5295`,V=`
5296precision highp float;
5297precision highp int;
5298
5299#include common
5300#include read_from_texture
5301#include common_vert_params
5302#include color_vert_params
5303#include size_vert_params
5304#include common_clip
5305
5306uniform mat4 uModelView;
5307uniform mat4 uInvProjection;
5308uniform float uIsOrtho;
5309uniform bool uIsAsymmetricProjection;
5310
5311uniform vec2 uTexDim;
5312uniform sampler2D tPositionGroup;
5313
5314attribute mat4 aTransform;
5315attribute float aInstance;
5316
5317varying float vRadius;
5318varying vec3 vPoint;
5319varying vec3 vPointViewPosition;
5320
5321/**
5322 * Bounding rectangle of a clipped, perspective-projected 3D Sphere.
5323 * Michael Mara, Morgan McGuire. 2013
5324 *
5325 * Specialization by Arseny Kapoulkine, MIT License Copyright (c) 2018
5326 * https://github.com/zeux/niagara
5327 *
5328 * Only works for for symmetric projections.
5329 */
5330void sphereProjection(const in vec3 p, const in float r, const in vec2 mapping) {
5331    vec3 pr = p * r;
5332    float pzr2 = p.z * p.z - r * r;
5333
5334    float vx = sqrt(p.x * p.x + pzr2);
5335    float minx = ((vx * p.x - pr.z) / (vx * p.z + pr.x)) * uProjection[0][0];
5336    float maxx = ((vx * p.x + pr.z) / (vx * p.z - pr.x)) * uProjection[0][0];
5337
5338    float vy = sqrt(p.y * p.y + pzr2);
5339    float miny = ((vy * p.y - pr.z) / (vy * p.z + pr.y)) * uProjection[1][1];
5340    float maxy = ((vy * p.y + pr.z) / (vy * p.z - pr.y)) * uProjection[1][1];
5341
5342    gl_Position.xy = vec2(maxx + minx, maxy + miny) * -0.5;
5343    gl_Position.xy -= mapping * vec2(maxx - minx, maxy - miny) * 0.5;
5344    gl_Position.xy *= gl_Position.w;
5345}
5346
5347const mat4 D = mat4(
5348    1.0, 0.0, 0.0, 0.0,
5349    0.0, 1.0, 0.0, 0.0,
5350    0.0, 0.0, 1.0, 0.0,
5351    0.0, 0.0, 0.0, -1.0
5352);
5353
5354/**
5355 * Compute point size and center using the technique described in:
5356 * "GPU-Based Ray-Casting of Quadratic Surfaces" http://dl.acm.org/citation.cfm?id=2386396
5357 * by Christian Sigg, Tim Weyrich, Mario Botsch, Markus Gross.
5358 */
5359void quadraticProjection(const in vec3 position, const in float radius, const in vec2 mapping) {
5360    vec2 xbc, ybc;
5361
5362    mat4 T = mat4(
5363        radius, 0.0, 0.0, 0.0,
5364        0.0, radius, 0.0, 0.0,
5365        0.0, 0.0, radius, 0.0,
5366        position.x, position.y, position.z, 1.0
5367    );
5368
5369    mat4 R = transpose4(uProjection * uModelView * aTransform * T);
5370    float A = dot(R[3], D * R[3]);
5371    float B = -2.0 * dot(R[0], D * R[3]);
5372    float C = dot(R[0], D * R[0]);
5373    xbc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
5374    xbc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
5375    float sx = abs(xbc[0] - xbc[1]) * 0.5;
5376
5377    A = dot(R[3], D * R[3]);
5378    B = -2.0 * dot(R[1], D * R[3]);
5379    C = dot(R[1], D * R[1]);
5380    ybc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
5381    ybc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
5382    float sy = abs(ybc[0] - ybc[1]) * 0.5;
5383
5384    gl_Position.xy = vec2(0.5 * (xbc.x + xbc.y), 0.5 * (ybc.x + ybc.y));
5385    gl_Position.xy -= mapping * vec2(sx, sy);
5386    gl_Position.xy *= gl_Position.w;
5387}
5388
5389void main(void){
5390    vec2 mapping = vec2(1.0, 1.0); // vertices 2 and 5
5391    #if __VERSION__ == 100
5392        int m = imod(VertexID, 6);
5393    #else
5394        int m = VertexID % 6;
5395    #endif
5396    if (m == 0) {
5397        mapping = vec2(-1.0, 1.0);
5398    } else if (m == 1 || m == 3) {
5399        mapping = vec2(-1.0, -1.0);
5400    } else if (m == 4) {
5401        mapping = vec2(1.0, -1.0);
5402    }
5403
5404    int vertexId = VertexID / 6;
5405
5406    vec4 positionGroup = readFromTexture(tPositionGroup, vertexId, uTexDim);
5407    vec3 position = positionGroup.rgb;
5408    float group = positionGroup.a;
5409
5410    #include assign_color_varying
5411    #include assign_marker_varying
5412    #include assign_clipping_varying
5413    #include assign_size
5414
5415    vRadius = size * uModelScale;
5416
5417    vec4 position4 = vec4(position, 1.0);
5418    vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader
5419
5420    float d;
5421    if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
5422        if (uModelScale != 1.0) {
5423            vRadius *= uLod.w;
5424        } else {
5425            d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale;
5426            float f = min(
5427                smoothstep(uLod.x, uLod.x + uLod.z, d),
5428                1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d)
5429            ) * uLod.w;
5430            vRadius *= f;
5431        }
5432    }
5433
5434    vec4 mvPosition = uModelView * aTransform * position4;
5435
5436    #ifdef dApproximate
5437        vec4 mvCorner = vec4(mvPosition.xyz, 1.0);
5438        mvCorner.xy += mapping * vRadius;
5439        gl_Position = uProjection * mvCorner;
5440    #else
5441        if (uIsOrtho == 1.0) {
5442            vec4 mvCorner = vec4(mvPosition.xyz, 1.0);
5443            mvCorner.xy += mapping * vRadius;
5444            gl_Position = uProjection * mvCorner;
5445        } else if (uIsAsymmetricProjection) {
5446            gl_Position = uProjection * vec4(mvPosition.xyz, 1.0);
5447            quadraticProjection(position, vRadius / uModelScale, mapping);
5448        } else {
5449            gl_Position = uProjection * vec4(mvPosition.xyz, 1.0);
5450            sphereProjection(mvPosition.xyz, vRadius, mapping);
5451        }
5452    #endif
5453
5454    vec4 vPoint4 = uInvProjection * gl_Position;
5455    vPoint = vPoint4.xyz / vPoint4.w;
5456    vPointViewPosition = -mvPosition.xyz / mvPosition.w;
5457
5458    if (gl_Position.z < -gl_Position.w) {
5459        mvPosition.z -= 2.0 * vRadius; // avoid clipping
5460        gl_Position.z = (uProjection * vec4(mvPosition.xyz, 1.0)).z;
5461    }
5462
5463    if (uModelScale == 1.0) {
5464        if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
5465            if (d < uLod.x || d > uLod.y) {
5466                // move out of [ -w, +w ] to 'discard' in vert shader
5467                gl_Position.z = 2.0 * gl_Position.w;
5468            }
5469        }
5470    }
5471
5472    #if defined(dClipPrimitive) && !defined(dClipVariant_instance) && dClipObjectCount != 0
5473        if (clipTest(vModelPosition / uModelScale)) {
5474            // move out of [ -w, +w ] to 'discard' in vert shader
5475            gl_Position.z = 2.0 * gl_Position.w;
5476        }
5477    #else
5478        #include clip_instance
5479    #endif
5480}
5481`,j=`
5482precision highp float;
5483precision highp int;
5484
5485#define bumpEnabled
5486
5487#include common
5488#include common_frag_params
5489#include color_frag_params
5490#include light_frag_params
5491#include common_clip
5492
5493uniform mat4 uInvView;
5494uniform float uAlphaThickness;
5495
5496uniform vec4 uInteriorColor;
5497uniform vec4 uInteriorSubstance;
5498
5499varying float vRadius;
5500varying vec3 vPoint;
5501varying vec3 vPointViewPosition;
5502
5503#ifdef dSolidInterior
5504    const bool solidInterior = true;
5505#else
5506    const bool solidInterior = false;
5507#endif
5508
5509bool SphereImpostor(out vec3 modelPos, out vec3 cameraPos, out vec3 cameraNormal, out bool interior, out float fragmentDepth){
5510    vec3 cameraSpherePos = -vPointViewPosition;
5511
5512    vec3 rayOrigin = mix(vec3(0.0, 0.0, 0.0), vPoint, uIsOrtho);
5513    vec3 rayDirection = mix(normalize(vPoint), vec3(0.0, 0.0, 1.0), uIsOrtho);
5514    vec3 cameraSphereDir = mix(cameraSpherePos, rayOrigin - cameraSpherePos, uIsOrtho);
5515
5516    float B = dot(rayDirection, cameraSphereDir);
5517    float det = B * B + vRadius * vRadius - dot(cameraSphereDir, cameraSphereDir);
5518
5519    if (det < 0.0) return false;
5520
5521    float sqrtDet = sqrt(det);
5522    float posT = mix(B + sqrtDet, B - sqrtDet, uIsOrtho);
5523    float negT = mix(B - sqrtDet, B + sqrtDet, uIsOrtho);
5524
5525    cameraPos = rayDirection * negT + rayOrigin;
5526    modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
5527    fragmentDepth = calcDepth(cameraPos);
5528
5529    bool objectClipped = false;
5530
5531    #if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0
5532        if (clipTest(modelPos)) {
5533            objectClipped = true;
5534            fragmentDepth = -1.0;
5535        }
5536    #endif
5537
5538    if (fragmentDepth > 0.0) {
5539        cameraNormal = normalize(cameraPos - cameraSpherePos);
5540        interior = false;
5541        return true;
5542    } else if (uDoubleSided || solidInterior) {
5543        cameraPos = rayDirection * posT + rayOrigin;
5544        modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
5545        fragmentDepth = calcDepth(cameraPos);
5546        cameraNormal = -normalize(cameraPos - cameraSpherePos);
5547        interior = true;
5548        if (fragmentDepth > 0.0) {
5549            #ifdef dSolidInterior
5550                if (!objectClipped) {
5551                    fragmentDepth = 0.0 + (0.0000001 / vRadius);
5552                    cameraNormal = -mix(normalize(vPoint), vec3(0.0, 0.0, -1.0), uIsOrtho);
5553
5554                    // intersection of ray with near plane
5555                    float nearT = - (uNear + dot(rayOrigin, vec3(0.0, 0.0, 1.0))) / dot(rayDirection, vec3(0.0, 0.0, 1.0));
5556                    cameraPos = rayDirection * nearT + rayOrigin;
5557                    modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
5558                }
5559            #endif
5560            return true;
5561        }
5562    }
5563
5564    return false;
5565}
5566
5567void main(void){
5568    vec3 cameraNormal;
5569    float fragmentDepth;
5570
5571    #ifdef dApproximate
5572        vec3 pointDir = -vPointViewPosition - vPoint;
5573        if (dot(pointDir, pointDir) > vRadius * vRadius) discard;
5574        vec3 vViewPosition = -vPointViewPosition;
5575        fragmentDepth = gl_FragCoord.z;
5576        #if !defined(dIgnoreLight) || defined(dXrayShaded) || defined(dRenderVariant_tracing)
5577            pointDir.z -= cos(length(pointDir)) * vRadius * 0.5;
5578            cameraNormal = -normalize(pointDir);
5579        #endif
5580        interior = false;
5581    #else
5582        vec3 modelPos;
5583        vec3 cameraPos;
5584        bool hit = SphereImpostor(modelPos, cameraPos, cameraNormal, interior, fragmentDepth);
5585        if (!hit) discard;
5586
5587        if (fragmentDepth < 0.0) discard;
5588        if (fragmentDepth > 1.0) discard;
5589
5590        gl_FragDepthEXT = fragmentDepth;
5591
5592        vec3 vModelPosition = modelPos;
5593        vec3 vViewPosition = cameraPos;
5594    #endif
5595
5596    #include fade_lod
5597    #if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0
5598        #include clip_pixel
5599    #endif
5600
5601    #ifdef dNeedsNormal
5602        vec3 normal = -cameraNormal;
5603    #endif
5604
5605    #include assign_material_color
5606
5607    #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
5608        if (uRenderMask == MaskTransparent && uAlphaThickness > 0.0) {
5609            material.a *= min(1.0, vRadius / (uAlphaThickness * uModelScale));
5610        }
5611    #endif
5612
5613    #include check_transparency
5614
5615    #if defined(dRenderVariant_pick)
5616        #include check_picking_alpha
5617        #ifdef requiredDrawBuffers
5618            gl_FragColor = vObject;
5619            gl_FragData[1] = vInstance;
5620            gl_FragData[2] = vGroup;
5621            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
5622        #else
5623            gl_FragColor = vColor;
5624        #endif
5625    #elif defined(dRenderVariant_depth)
5626        gl_FragColor = material;
5627    #elif defined(dRenderVariant_marking)
5628        gl_FragColor = material;
5629    #elif defined(dRenderVariant_emissive)
5630        gl_FragColor = material;
5631    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
5632        #include apply_interior_color
5633        #include apply_light_color
5634        #include apply_marker_color
5635
5636        #if defined(dRenderVariant_color)
5637            #include apply_fog
5638            #include wboit_write
5639            #include dpoit_write
5640        #elif defined(dRenderVariant_tracing)
5641            gl_FragData[1] = vec4(normal, emissive);
5642            gl_FragData[2] = vec4(material.rgb, uDensity);
5643        #endif
5644    #endif
5645}
5646`,H=`
5647precision highp float;
5648precision highp int;
5649
5650#include common
5651#include read_from_texture
5652#include common_vert_params
5653#include color_vert_params
5654#include size_vert_params
5655#include common_clip
5656
5657uniform mat4 uModelView;
5658
5659attribute mat4 aTransform;
5660attribute float aInstance;
5661attribute float aGroup;
5662
5663attribute vec3 aMapping;
5664attribute vec3 aStart;
5665attribute vec3 aEnd;
5666attribute float aScale;
5667attribute float aCap;
5668attribute float aColorMode;
5669
5670varying mat4 vTransform;
5671varying vec3 vStart;
5672varying vec3 vEnd;
5673varying float vSize;
5674varying float vCap;
5675
5676uniform float uIsOrtho;
5677uniform vec3 uCameraDir;
5678
5679void main() {
5680    int vertexId = VertexID;
5681
5682    #include assign_group
5683    #include assign_color_varying
5684    #include assign_marker_varying
5685    #include assign_clipping_varying
5686    #include assign_size
5687
5688    mat4 modelTransform = uModel * aTransform;
5689
5690    vTransform = modelTransform;
5691    vStart = (modelTransform * vec4(aStart, 1.0)).xyz;
5692    vEnd = (modelTransform * vec4(aEnd, 1.0)).xyz;
5693    vSize = size * aScale * uModelScale;
5694    vCap = aCap;
5695
5696    vModelPosition = (vStart + vEnd) * 0.5;
5697    vec3 camDir = -mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
5698    vec3 dir = vEnd - vStart;
5699    float f = aMapping.x > 0.0 ? 1.0 : 0.0;
5700    // ensure cylinder 'dir' is pointing towards the camera
5701    if(dot(camDir, dir) < 0.0) {
5702        dir = -dir;
5703        f = 1.0 - f;
5704    }
5705
5706    vec3 left = cross(camDir, dir);
5707    vec3 up = cross(left, dir);
5708    left = vSize * normalize(left);
5709    up = vSize * normalize(up);
5710
5711    // move vertex in object-space from center to corner
5712    vModelPosition += aMapping.x * dir + aMapping.y * left + aMapping.z * up;
5713
5714    vec4 mvPosition = uView * vec4(vModelPosition, 1.0);
5715    vViewPosition = mvPosition.xyz;
5716    gl_Position = uProjection * mvPosition;
5717
5718    if (gl_Position.z < -gl_Position.w) {
5719        mvPosition.z -= 2.0 * (length(vEnd - vStart) + vSize); // avoid clipping
5720        gl_Position.z = (uProjection * mvPosition).z;
5721    }
5722
5723    #if defined(dDualColor) && defined(dRenderVariant_color) && (defined(dColorType_group) || defined(dColorType_groupInstance))
5724        // dual-color mixing
5725        // - for aColorMode between 0 and 1 use aColorMode to interpolate
5726        // - for aColorMode == 2 do nothing, i.e., use vColor
5727        // - for aColorMode == 3 use position on cylinder axis to interpolate
5728        if (aColorMode <= 1.0){
5729            vColor.rgb = mix(vColor.rgb, color2.rgb, aColorMode);
5730        } else if (aColorMode == 3.0) {
5731            vColor.rgb = mix(vColor.rgb, color2.rgb, mix(-0.25, 1.25, f / 1.5));
5732        }
5733    #endif
5734
5735    #include clip_instance
5736}
5737`,q=`
5738precision highp float;
5739precision highp int;
5740
5741#define bumpEnabled
5742
5743uniform mat4 uView;
5744
5745varying mat4 vTransform;
5746varying vec3 vStart;
5747varying vec3 vEnd;
5748varying float vSize;
5749varying float vCap;
5750
5751uniform vec3 uCameraDir;
5752uniform vec3 uCameraPosition;
5753uniform mat4 uInvView;
5754
5755uniform vec4 uInteriorColor;
5756uniform vec4 uInteriorSubstance;
5757
5758#include common
5759#include common_frag_params
5760#include color_frag_params
5761#include light_frag_params
5762#include common_clip
5763
5764#ifdef dSolidInterior
5765    const bool solidInterior = true;
5766#else
5767    const bool solidInterior = false;
5768#endif
5769
5770// adapted from https://www.shadertoy.com/view/4lcSRn
5771// The MIT License, Copyright 2016 Inigo Quilez
5772bool CylinderImpostor(
5773    in vec3 rayOrigin, in vec3 rayDir,
5774    in vec3 start, in vec3 end, in float radius,
5775    out vec3 cameraNormal, out bool interior,
5776    out vec3 modelPosition, out vec3 viewPosition, out float fragmentDepth
5777){
5778    vec3 ba = end - start;
5779    vec3 oc = rayOrigin - start;
5780
5781    float baba = dot(ba, ba);
5782    float bard = dot(ba, rayDir);
5783    float baoc = dot(ba, oc);
5784
5785    float k2 = baba - bard * bard;
5786    float k1 = baba * dot(oc, rayDir) - baoc * bard;
5787    float k0 = baba * dot(oc, oc) - baoc * baoc - radius * radius * baba;
5788
5789    float h = k1 * k1 - k2 * k0;
5790    if (h < 0.0) return false;
5791
5792    bool topCap = (vCap > 0.9 && vCap < 1.1) || vCap >= 2.9;
5793    bool bottomCap = (vCap > 1.9 && vCap < 2.1) || vCap >= 2.9;
5794
5795    #ifdef dSolidInterior
5796        bool topInterior = !topCap;
5797        bool bottomInterior = !bottomCap;
5798        topCap = true;
5799        bottomCap = true;
5800    #else
5801        bool topInterior = false;
5802        bool bottomInterior = false;
5803    #endif
5804
5805    bool clipped = false;
5806    bool objectClipped = false;
5807
5808    // body outside
5809    h = sqrt(h);
5810    float t = (-k1 - h) / k2;
5811    float y = baoc + t * bard;
5812    if (y > 0.0 && y < baba) {
5813        interior = false;
5814        cameraNormal = (oc + t * rayDir - ba * y / baba) / radius;
5815        modelPosition = rayOrigin + t * rayDir;
5816        viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5817        fragmentDepth = calcDepth(viewPosition);
5818        #if defined(dClipVariant_pixel) && dClipObjectCount != 0
5819            if (clipTest(modelPosition)) {
5820                objectClipped = true;
5821                fragmentDepth = -1.0;
5822                #ifdef dSolidInterior
5823                    topCap = !topInterior;
5824                    bottomCap = !bottomInterior;
5825                #endif
5826            }
5827        #endif
5828        if (fragmentDepth > 0.0) return true;
5829        clipped = true;
5830    }
5831
5832    if (!clipped) {
5833        if (topCap && y < 0.0) {
5834            // top cap
5835            t = -baoc / bard;
5836            if (abs(k1 + k2 * t) < h) {
5837                interior = topInterior;
5838                cameraNormal = -ba / baba;
5839                modelPosition = rayOrigin + t * rayDir;
5840                viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5841                fragmentDepth = calcDepth(viewPosition);
5842                #if defined(dClipVariant_pixel) && dClipObjectCount != 0
5843                    if (clipTest(modelPosition)) {
5844                        objectClipped = true;
5845                        fragmentDepth = -1.0;
5846                        #ifdef dSolidInterior
5847                            topCap = !topInterior;
5848                            bottomCap = !bottomInterior;
5849                        #endif
5850                    }
5851                #endif
5852                if (fragmentDepth > 0.0) {
5853                    #ifdef dSolidInterior
5854                        if (interior) cameraNormal = -rayDir;
5855                    #endif
5856                    #if defined(dClipVariant_pixel) && dClipObjectCount != 0
5857                        return true;
5858                    #else
5859                        return !interior;
5860                    #endif
5861                }
5862            }
5863        } else if (bottomCap && y >= 0.0) {
5864            // bottom cap
5865            t = (baba - baoc) / bard;
5866            if (abs(k1 + k2 * t) < h) {
5867                interior = bottomInterior;
5868                cameraNormal = ba / baba;
5869                modelPosition = rayOrigin + t * rayDir;
5870                viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5871                fragmentDepth = calcDepth(viewPosition);
5872                #if defined(dClipVariant_pixel) && dClipObjectCount != 0
5873                    if (clipTest(modelPosition)) {
5874                        objectClipped = true;
5875                        fragmentDepth = -1.0;
5876                        #ifdef dSolidInterior
5877                            topCap = !topInterior;
5878                            bottomCap = !bottomInterior;
5879                        #endif
5880                    }
5881                #endif
5882                if (fragmentDepth > 0.0) {
5883                    #ifdef dSolidInterior
5884                        if (interior) cameraNormal = -rayDir;
5885                    #endif
5886                    #if defined(dClipVariant_pixel) && dClipObjectCount != 0
5887                        return true;
5888                    #else
5889                        return !interior;
5890                    #endif
5891                }
5892            }
5893        }
5894    }
5895
5896    if (uDoubleSided || solidInterior) {
5897        // body inside
5898        h = -h;
5899        t = (-k1 - h) / k2;
5900        y = baoc + t * bard;
5901        if (y > 0.0 && y < baba) {
5902            interior = true;
5903            cameraNormal = -(oc + t * rayDir - ba * y / baba) / radius;
5904            modelPosition = rayOrigin + t * rayDir;
5905            viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5906            fragmentDepth = calcDepth(viewPosition);
5907            if (fragmentDepth > 0.0) {
5908                #ifdef dSolidInterior
5909                    if (!objectClipped) {
5910                        fragmentDepth = 0.0 + (0.0000002 / vSize);
5911                        cameraNormal = -rayDir;
5912
5913                        // intersection of ray in model space with near plane in camera space
5914                        vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
5915                        vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
5916                        float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
5917                        viewPosition = cameraRayOrigin + nearT * cameraRayDir;
5918                        modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
5919                    }
5920                #endif
5921                return true;
5922            }
5923        }
5924
5925        if (topCap && y < 0.0) {
5926            // top cap
5927            t = -baoc / bard;
5928            if (abs(k1 + k2 * t) < -h) {
5929                interior = true;
5930                cameraNormal = ba / baba;
5931                modelPosition = rayOrigin + t * rayDir;
5932                viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5933                fragmentDepth = calcDepth(viewPosition);
5934                if (fragmentDepth > 0.0) {
5935                    #ifdef dSolidInterior
5936                        if (!objectClipped) {
5937                            fragmentDepth = 0.0 + (0.0000002 / vSize);
5938                            cameraNormal = -rayDir;
5939
5940                            // intersection of ray in model space with near plane in camera space
5941                            vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
5942                            vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
5943                            float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
5944                            viewPosition = cameraRayOrigin + nearT * cameraRayDir;
5945                            modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
5946                        }
5947                    #endif
5948                    return true;
5949                }
5950            }
5951        } else if (bottomCap && y >= 0.0) {
5952            // bottom cap
5953            t = (baba - baoc) / bard;
5954            if (abs(k1 + k2 * t) < -h) {
5955                interior = true;
5956                cameraNormal = -ba / baba;
5957                modelPosition = rayOrigin + t * rayDir;
5958                viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
5959                fragmentDepth = calcDepth(viewPosition);
5960                if (fragmentDepth > 0.0) {
5961                    #ifdef dSolidInterior
5962                        if (!objectClipped) {
5963                            fragmentDepth = 0.0 + (0.0000002 / vSize);
5964                            cameraNormal = -rayDir;
5965
5966                            // intersection of ray in model space with near plane in camera space
5967                            vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
5968                            vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
5969                            float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
5970                            viewPosition = cameraRayOrigin + nearT * cameraRayDir;
5971                            modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
5972                        }
5973                    #endif
5974                    return true;
5975                }
5976            }
5977        }
5978    }
5979
5980    return false;
5981}
5982
5983void main() {
5984    vec3 rayOrigin = vModelPosition;
5985    vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
5986
5987    vec3 cameraNormal;
5988    vec3 modelPosition;
5989    vec3 viewPosition;
5990    float fragmentDepth;
5991    bool hit = CylinderImpostor(rayOrigin, rayDir, vStart, vEnd, vSize, cameraNormal, interior, modelPosition, viewPosition, fragmentDepth);
5992    if (!hit) discard;
5993
5994    if (fragmentDepth < 0.0) discard;
5995    if (fragmentDepth > 1.0) discard;
5996
5997    gl_FragDepthEXT = fragmentDepth;
5998
5999    vec3 vViewPosition = viewPosition;
6000    vec3 vModelPosition = modelPosition;
6001
6002    #include fade_lod
6003    #include clip_pixel
6004
6005    #ifdef dNeedsNormal
6006        mat3 normalMatrix = adjoint(uView);
6007        vec3 normal = normalize(normalMatrix * -normalize(cameraNormal));
6008    #endif
6009
6010    #include assign_material_color
6011    #include check_transparency
6012
6013    #if defined(dRenderVariant_pick)
6014        #include check_picking_alpha
6015        #ifdef requiredDrawBuffers
6016            gl_FragColor = vObject;
6017            gl_FragData[1] = vInstance;
6018            gl_FragData[2] = vGroup;
6019            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
6020        #else
6021            gl_FragColor = vColor;
6022        #endif
6023    #elif defined(dRenderVariant_depth)
6024        gl_FragColor = material;
6025    #elif defined(dRenderVariant_marking)
6026        gl_FragColor = material;
6027    #elif defined(dRenderVariant_emissive)
6028        gl_FragColor = material;
6029    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6030        #include apply_interior_color
6031        #include apply_light_color
6032        #include apply_marker_color
6033
6034        #if defined(dRenderVariant_color)
6035            #include apply_fog
6036            #include wboit_write
6037            #include dpoit_write
6038        #elif defined(dRenderVariant_tracing)
6039            gl_FragData[1] = vec4(normal, emissive);
6040            gl_FragData[2] = vec4(material.rgb, uDensity);
6041        #endif
6042    #endif
6043}
6044`,X=`
6045precision highp float;
6046precision highp int;
6047
6048#include common
6049#include read_from_texture
6050#include common_vert_params
6051#include color_vert_params
6052#include size_vert_params
6053#include common_clip
6054
6055uniform mat4 uModelView;
6056
6057attribute vec3 aPosition;
6058attribute vec2 aMapping;
6059attribute float aDepth;
6060attribute vec2 aTexCoord;
6061attribute mat4 aTransform;
6062attribute float aInstance;
6063attribute float aGroup;
6064
6065uniform float uOffsetX;
6066uniform float uOffsetY;
6067uniform float uOffsetZ;
6068
6069uniform float uIsOrtho;
6070uniform float uPixelRatio;
6071uniform vec4 uViewport;
6072uniform mat4 uInvHeadRotation;
6073uniform bool uHasHeadRotation;
6074uniform mat4 uModelViewEye;
6075uniform mat4 uInvModelViewEye;
6076uniform bool uHasEyeCamera;
6077
6078varying vec2 vTexCoord;
6079
6080void main(void){
6081    int vertexId = VertexID;
6082
6083    #include assign_group
6084    #include assign_color_varying
6085    #include assign_marker_varying
6086    #include assign_clipping_varying
6087    #include assign_size
6088
6089    vTexCoord = aTexCoord;
6090
6091    float scale = uModelScale;
6092
6093    float offsetX = uOffsetX * scale;
6094    float offsetY = uOffsetY * scale;
6095    float offsetZ = (uOffsetZ + aDepth * 0.95) * scale;
6096
6097    vec4 position4 = vec4(aPosition, 1.0);
6098    vec4 mvPosition = uHasEyeCamera
6099         ? uModelViewEye * aTransform * position4
6100         : uModelView * aTransform * position4;
6101
6102    vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader
6103
6104    // TODO
6105    // #ifdef FIXED_SIZE
6106    //     if (ortho) {
6107    //         scale /= pixelRatio * ((uViewport.w / 2.0) / -uCameraPosition.z) * 0.1;
6108    //     } else {
6109    //         scale /= pixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 0.1;
6110    //     }
6111    // #endif
6112
6113    vec4 mvCenter = vec4(mvPosition.xyz, 1.0);
6114
6115    if (vTexCoord.x == 10.0) { // indicates background plane
6116        // move a bit to the back, taking distance to camera into account to avoid z-fighting
6117        offsetZ -= 0.001 * distance(uCameraPosition, (uProjection * mvCenter).xyz);
6118    }
6119
6120    // apply Z offset in view space
6121    if (!uHasEyeCamera) {
6122        if (uIsOrtho == 1.0) {
6123            mvCenter.z += offsetZ;
6124        } else {
6125            mvCenter.xyz += normalize(-mvCenter.xyz) * offsetZ;
6126        }
6127    }
6128
6129    if (uHasEyeCamera) {
6130        mvCenter = uModelView * uInvModelViewEye * mvCenter;
6131    }
6132
6133    // project center to clip space
6134    vec4 clip = uProjection * mvCenter;
6135
6136    // compute corner offset in screen-space units
6137    vec2 cornerOffset = aMapping * size * scale;
6138    cornerOffset.x += offsetX;
6139    cornerOffset.y += offsetY;
6140
6141    if (uHasHeadRotation) {
6142        vec3 rotatedOffset = (uInvHeadRotation * vec4(cornerOffset, 0.0, 0.0)).xyz;
6143        clip += uProjection * vec4(rotatedOffset, 0.0);
6144    } else {
6145        // apply offset in clip space to avoid perspective distortion on the quad
6146        clip.xy += vec2(uProjection[0][0], uProjection[1][1]) * cornerOffset;
6147    }
6148
6149    gl_Position = clip;
6150
6151    vViewPosition = -mvCenter.xyz;
6152
6153    #include clip_instance
6154}
6155`,W=`
6156precision highp float;
6157precision highp int;
6158
6159#include common
6160#include common_frag_params
6161#include color_frag_params
6162#include common_clip
6163
6164uniform sampler2D tFont;
6165
6166uniform vec3 uBorderColor;
6167uniform float uBorderWidth;
6168uniform vec3 uBackgroundColor;
6169uniform float uBackgroundOpacity;
6170
6171varying vec2 vTexCoord;
6172
6173void main(){
6174    #include fade_lod
6175    #include clip_pixel
6176
6177    float fragmentDepth = gl_FragCoord.z;
6178
6179    // determine if this is a background or glyph fragment
6180    bool isBackground = vTexCoord.x > 1.0;
6181
6182    // discard background for non-visual variants (depth, pick, marking, emissive)
6183    #if !defined(dRenderVariant_color) && !defined(dRenderVariant_tracing)
6184        if (isBackground) discard;
6185    #endif
6186
6187    // SDF test for glyph fragments — discard pixels outside glyph+border
6188    float rawSdf = 0.0;
6189    if (!isBackground) {
6190        rawSdf = texture2D(tFont, vTexCoord).a;
6191        float sdf = rawSdf + min(uBorderWidth, 0.49); // clamp to avoid exceeding max SDF range
6192        if (sdf < 0.5) discard;
6193    }
6194
6195    #ifdef enabledFragDepth
6196        gl_FragDepthEXT = fragmentDepth;
6197    #endif
6198
6199    #include assign_material_color
6200
6201    if (isBackground) {
6202        #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6203            material = vec4(uBackgroundColor, uBackgroundOpacity * material.a);
6204        #endif
6205    } else {
6206        #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6207            if (uBorderWidth > 0.0 && rawSdf < 0.5) {
6208                material.xyz = uBorderColor;
6209            } else {
6210                // push text fragments forward in depth so they render in front of border
6211                #ifdef enabledFragDepth
6212                    gl_FragDepthEXT = fragmentDepth - 0.0001;
6213                #endif
6214            }
6215        #endif
6216    }
6217
6218    #include check_transparency
6219
6220    #if defined(dRenderVariant_pick)
6221        #include check_picking_alpha
6222        #ifdef requiredDrawBuffers
6223            gl_FragColor = vObject;
6224            gl_FragData[1] = vInstance;
6225            gl_FragData[2] = vGroup;
6226            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
6227        #else
6228            gl_FragColor = vColor;
6229        #endif
6230    #elif defined(dRenderVariant_depth)
6231        gl_FragColor = material;
6232    #elif defined(dRenderVariant_marking)
6233        gl_FragColor = material;
6234    #elif defined(dRenderVariant_emissive)
6235        gl_FragColor = material;
6236    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6237        gl_FragColor = material;
6238        #include apply_marker_color
6239
6240        #if defined(dRenderVariant_color)
6241            #include apply_fog
6242            #include wboit_write
6243            #include dpoit_write
6244        #elif defined(dRenderVariant_tracing)
6245            gl_FragData[1] = vec4(-normalize(vViewPosition), emissive);
6246            gl_FragData[2] = vec4(material.rgb, uDensity);
6247        #endif
6248    #endif
6249}
6250`,K=`
6251precision highp float;
6252precision highp int;
6253
6254#include common
6255#include read_from_texture
6256#include common_vert_params
6257#include color_vert_params
6258#include size_vert_params
6259#include common_clip
6260
6261uniform float uPixelRatio;
6262uniform vec4 uViewport;
6263
6264attribute mat4 aTransform;
6265attribute float aInstance;
6266attribute float aGroup;
6267
6268attribute vec2 aMapping;
6269attribute vec3 aStart;
6270attribute vec3 aEnd;
6271
6272void trimSegment(const in vec4 start, inout vec4 end) {
6273    // trim end segment so it terminates between the camera plane and the near plane
6274    // conservative estimate of the near plane
6275    float a = uProjection[2][2];  // 3rd entry in 3rd column
6276    float b = uProjection[3][2];  // 3rd entry in 4th column
6277    float nearEstimate = -0.5 * b / a;
6278    float alpha = (nearEstimate - start.z) / (end.z - start.z);
6279    end.xyz = mix(start.xyz, end.xyz, alpha);
6280}
6281
6282void main(){
6283    float aspect = uViewport.z / uViewport.w;
6284    int vertexId = VertexID;
6285
6286    #include assign_group
6287    #include assign_color_varying
6288    #include assign_marker_varying
6289    #include assign_clipping_varying
6290    #include assign_size
6291
6292    mat4 modelView = uView * uModel * aTransform;
6293
6294    // camera space
6295    vec4 start = modelView * vec4(aStart, 1.0);
6296    vec4 end = modelView * vec4(aEnd, 1.0);
6297
6298    // assign position
6299    vec4 position4 = vec4((aMapping.y < 0.5) ? aStart : aEnd, 1.0);
6300    vec4 mvPosition = modelView * position4;
6301    vViewPosition = mvPosition.xyz;
6302
6303    vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader
6304
6305    // special case for perspective projection, and segments that terminate either in, or behind, the camera plane
6306    // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
6307    // but we need to perform ndc-space calculations in the shader, so we must address this issue directly
6308    // perhaps there is a more elegant solution -- WestLangley
6309    bool perspective = (uProjection[2][3] == -1.0); // 4th entry in the 3rd column
6310    if (perspective) {
6311        if (start.z < 0.0 && end.z >= 0.0) {
6312            trimSegment(start, end);
6313        } else if (end.z < 0.0 && start.z >= 0.0) {
6314            trimSegment(end, start);
6315        }
6316    }
6317
6318    // clip space
6319    vec4 clipStart = uProjection * start;
6320    vec4 clipEnd = uProjection * end;
6321
6322    // ndc space
6323    vec2 ndcStart = clipStart.xy / clipStart.w;
6324    vec2 ndcEnd = clipEnd.xy / clipEnd.w;
6325
6326    // direction
6327    vec2 dir = ndcEnd - ndcStart;
6328
6329    // account for clip-space aspect ratio
6330    dir.x *= aspect;
6331    dir = normalize(dir);
6332
6333    // perpendicular to dir
6334    vec2 offset = vec2(dir.y, - dir.x);
6335
6336    // undo aspect ratio adjustment
6337    dir.x /= aspect;
6338    offset.x /= aspect;
6339
6340    // sign flip
6341    if (aMapping.x < 0.0) offset *= -1.0;
6342
6343    // calculate linewidth
6344    float linewidth;
6345    #ifdef dLineSizeAttenuation
6346        linewidth = size * uPixelRatio * ((uViewport.w / 2.0) / -start.z) * 5.0;
6347    #else
6348        linewidth = size * uPixelRatio;
6349    #endif
6350    linewidth = max(1.0, linewidth);
6351
6352    // adjust for linewidth
6353    offset *= linewidth;
6354
6355    // adjust for clip-space to screen-space conversion
6356    offset /= uViewport.w;
6357
6358    // select end
6359    vec4 clip = (aMapping.y < 0.5) ? clipStart : clipEnd;
6360
6361    // back to clip space
6362    offset *= clip.w;
6363    clip.xy += offset;
6364    gl_Position = clip;
6365
6366    #include clip_instance
6367}
6368`,Q=`
6369precision highp float;
6370precision highp int;
6371
6372#include common
6373#include common_frag_params
6374#include color_frag_params
6375#include common_clip
6376
6377void main(){
6378    #include fade_lod
6379    #include clip_pixel
6380
6381    float fragmentDepth = gl_FragCoord.z;
6382    #include assign_material_color
6383    #include check_transparency
6384
6385    #if defined(dRenderVariant_pick)
6386        #include check_picking_alpha
6387        #ifdef requiredDrawBuffers
6388            gl_FragColor = vObject;
6389            gl_FragData[1] = vInstance;
6390            gl_FragData[2] = vGroup;
6391            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
6392        #else
6393            gl_FragColor = vColor;
6394        #endif
6395    #elif defined(dRenderVariant_depth)
6396        gl_FragColor = material;
6397    #elif defined(dRenderVariant_marking)
6398        gl_FragColor = material;
6399    #elif defined(dRenderVariant_emissive)
6400        gl_FragColor = material;
6401    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6402        gl_FragColor = material;
6403        #include apply_marker_color
6404
6405        #if defined(dRenderVariant_color)
6406            #include apply_fog
6407            #include wboit_write
6408            #include dpoit_write
6409        #elif defined(dRenderVariant_tracing)
6410            gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
6411            gl_FragData[2] = vec4(material.rgb, uDensity);
6412        #endif
6413    #endif
6414}
6415`,Z=`
6416precision highp float;
6417precision highp int;
6418precision highp sampler2D;
6419
6420#include common
6421#include read_from_texture
6422#include common_vert_params
6423#include color_vert_params
6424#include common_clip
6425#include texture3d_from_2d_linear
6426
6427#ifdef dGeometryType_textureMesh
6428    uniform vec2 uGeoTexDim;
6429    uniform sampler2D tPosition;
6430    uniform sampler2D tGroup;
6431    uniform sampler2D tNormal;
6432#else
6433    attribute vec3 aPosition;
6434    attribute float aGroup;
6435    attribute vec3 aNormal;
6436#endif
6437attribute mat4 aTransform;
6438attribute float aInstance;
6439
6440varying vec3 vNormal;
6441
6442void main(){
6443    int vertexId = VertexID;
6444
6445    #include assign_group
6446    #include assign_marker_varying
6447    #include assign_clipping_varying
6448    #include assign_position
6449    #include assign_color_varying
6450    #include clip_instance
6451
6452    #ifdef dGeometryType_textureMesh
6453        vec3 normal = readFromTexture(tNormal, vertexId, uGeoTexDim).xyz;
6454    #else
6455        vec3 normal = aNormal;
6456    #endif
6457    mat3 normalMatrix = adjoint(modelView);
6458    vec3 transformedNormal = normalize(normalMatrix * normalize(normal));
6459    #if defined(dFlipSided)
6460        if (!uDoubleSided) { // TODO checking uDoubleSided should not be required, ASR
6461            transformedNormal = -transformedNormal;
6462        }
6463    #endif
6464    vNormal = transformedNormal;
6465}
6466`,Y=`
6467precision highp float;
6468precision highp int;
6469
6470#define bumpEnabled
6471
6472#include common
6473#include common_frag_params
6474#include color_frag_params
6475#include light_frag_params
6476#include normal_frag_params
6477#include common_clip
6478
6479uniform vec4 uInteriorColor;
6480uniform vec4 uInteriorSubstance;
6481
6482void main() {
6483    #include fade_lod
6484    #include clip_pixel
6485
6486    interior = !gl_FrontFacing;
6487
6488    float fragmentDepth = gl_FragCoord.z;
6489
6490    #ifdef dNeedsNormal
6491        #if defined(dFlatShaded)
6492            vec3 fdx = dFdx(vViewPosition);
6493            vec3 fdy = dFdy(vViewPosition);
6494            vec3 normal = -normalize(cross(fdx,fdy));
6495        #else
6496            vec3 normal = -normalize(vNormal);
6497            if (uDoubleSided) normal *= float(gl_FrontFacing) * 2.0 - 1.0;
6498        #endif
6499
6500        #if defined(dFlipSided)
6501            normal *= -1.0;
6502        #endif
6503    #endif
6504
6505    #include assign_material_color
6506    #include check_transparency
6507
6508    #if defined(dRenderVariant_pick)
6509        #include check_picking_alpha
6510        #ifdef requiredDrawBuffers
6511            gl_FragColor = vObject;
6512            gl_FragData[1] = vInstance;
6513            gl_FragData[2] = vGroup;
6514            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
6515        #else
6516            gl_FragColor = vColor;
6517        #endif
6518    #elif defined(dRenderVariant_depth)
6519        gl_FragColor = material;
6520    #elif defined(dRenderVariant_marking)
6521        gl_FragColor = material;
6522    #elif defined(dRenderVariant_emissive)
6523        gl_FragColor = material;
6524    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6525        #include apply_interior_color
6526        #include apply_light_color
6527        #include apply_marker_color
6528
6529        #if defined(dRenderVariant_color)
6530            #include apply_fog
6531            #include wboit_write
6532            #include dpoit_write
6533        #elif defined(dRenderVariant_tracing)
6534            gl_FragData[1] = vec4(normal, emissive);
6535            gl_FragData[2] = vec4(material.rgb, uDensity);
6536        #endif
6537    #endif
6538}
6539`,$=`
6540precision highp float;
6541
6542attribute vec3 aPosition;
6543attribute mat4 aTransform;
6544attribute float aInstance;
6545
6546uniform mat4 uModel;
6547uniform mat4 uModelView;
6548uniform mat4 uProjection;
6549uniform vec4 uInvariantBoundingSphere;
6550uniform float uModelScale;
6551
6552varying vec3 vModelPosition;
6553varying float vInstance;
6554varying vec4 vBoundingSphere;
6555varying mat4 vTransform;
6556
6557uniform vec3 uBboxSize;
6558uniform vec3 uBboxMin;
6559uniform vec3 uBboxMax;
6560uniform vec3 uGridDim;
6561uniform mat4 uTransform;
6562
6563uniform mat4 uUnitToCartn;
6564
6565void main() {
6566    vec4 unitCoord = vec4(aPosition + vec3(0.5), 1.0);
6567    vec4 mvPosition = uModelView * aTransform * uUnitToCartn * unitCoord;
6568
6569    vModelPosition = (uModel * aTransform * uUnitToCartn * unitCoord).xyz;
6570    vInstance = aInstance;
6571    vBoundingSphere = vec4(
6572        (uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz,
6573        uModelScale * uInvariantBoundingSphere.w
6574    );
6575    vTransform = aTransform;
6576
6577    gl_Position = uProjection * mvPosition;
6578
6579    // move z position to near clip plane (but not too close to get precision issues)
6580    gl_Position.z = gl_Position.w - 0.01;
6581}
6582`,J=`
6583precision highp float;
6584precision highp int;
6585
6586#include common
6587#include light_frag_params
6588
6589#if dClipObjectCount != 0
6590    uniform int uClipObjectType[dClipObjectCount];
6591    uniform bool uClipObjectInvert[dClipObjectCount];
6592    uniform vec3 uClipObjectPosition[dClipObjectCount];
6593    uniform vec4 uClipObjectRotation[dClipObjectCount];
6594    uniform vec3 uClipObjectScale[dClipObjectCount];
6595    uniform mat4 uClipObjectTransform[dClipObjectCount];
6596#endif
6597#include common_clip
6598
6599#include read_from_texture
6600#include texture3d_from_1d_trilinear
6601#include texture3d_from_2d_nearest
6602#include texture3d_from_2d_linear
6603
6604uniform mat4 uProjection, uTransform, uModelView, uModel, uView;
6605uniform vec3 uCameraDir;
6606uniform float uModelScale;
6607
6608uniform sampler2D tDepth;
6609uniform vec2 uDrawingBufferSize;
6610
6611varying vec3 vModelPosition;
6612varying float vInstance;
6613varying vec4 vBoundingSphere;
6614varying mat4 vTransform;
6615
6616uniform mat4 uInvView;
6617uniform vec3 uGridDim;
6618uniform vec3 uBboxSize;
6619uniform sampler2D tTransferTex;
6620uniform float uTransferScale;
6621uniform float uStepScale;
6622uniform float uJumpLength;
6623
6624uniform int uObjectId;
6625uniform int uVertexCount;
6626uniform int uInstanceCount;
6627uniform int uGroupCount;
6628
6629#if defined(dColorMarker)
6630    uniform vec3 uHighlightColor;
6631    uniform vec3 uSelectColor;
6632    uniform vec3 uDimColor;
6633    uniform float uHighlightStrength;
6634    uniform float uSelectStrength;
6635    uniform float uDimStrength;
6636    uniform int uMarkerPriority;
6637    uniform float uMarkerAverage;
6638
6639    uniform float uMarker;
6640    uniform vec2 uMarkerTexDim;
6641    uniform sampler2D tMarker;
6642#endif
6643
6644uniform float uMetalness;
6645uniform float uRoughness;
6646uniform float uEmissive;
6647
6648// Density value to estimate object thickness
6649uniform float uDensity;
6650
6651uniform bool uFog;
6652uniform float uFogNear;
6653uniform float uFogFar;
6654uniform vec3 uFogColor;
6655
6656uniform float uAlpha;
6657uniform bool uTransparentBackground;
6658uniform float uXrayEdgeFalloff;
6659uniform float uCelSteps;
6660uniform float uExposure;
6661
6662uniform int uRenderMask;
6663
6664uniform float uNear;
6665uniform float uFar;
6666uniform float uIsOrtho;
6667
6668uniform vec3 uCellDim;
6669uniform vec3 uCameraPosition;
6670uniform mat4 uCartnToUnit;
6671
6672#if __VERSION__ != 100
6673    // for webgl1 this is given as a 'define'
6674    uniform int uMaxSteps;
6675#endif
6676
6677#if defined(dGridTexType_2d)
6678    precision highp sampler2D;
6679    uniform sampler2D tGridTex;
6680    uniform vec3 uGridTexDim;
6681#elif defined(dGridTexType_3d)
6682    precision highp sampler3D;
6683    uniform sampler3D tGridTex;
6684#endif
6685
6686#if defined(dColorType_uniform)
6687    uniform vec3 uColor;
6688#elif defined(dColorType_texture)
6689    uniform vec2 uColorTexDim;
6690    uniform sampler2D tColor;
6691#endif
6692
6693#ifdef dOverpaint
6694    #if defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance)
6695        uniform vec2 uOverpaintTexDim;
6696        uniform sampler2D tOverpaint;
6697    #endif
6698#endif
6699
6700#ifdef dUsePalette
6701    uniform vec2 uPaletteDomain;
6702    uniform sampler2D tPalette;
6703#endif
6704
6705#if defined(dGridTexType_2d)
6706    vec4 textureVal(vec3 pos) {
6707        return texture3dFrom2dLinear(tGridTex, pos + (vec3(0.5, 0.5, 0.0
6707) / uGridDim), uGridDim, uGridTexDim.xy);
6708    }
6709    vec4 textureGroup(vec3 pos) {
6710        return texture3dFrom2dNearest(tGridTex, pos + (vec3(0.5, 0.5, 0.0) / uGridDim), uGridDim, uGridTexDim.xy);
6711    }
6712#elif defined(dGridTexType_3d)
6713    vec4 textureVal(vec3 pos) {
6714        return texture(tGridTex, pos + (vec3(0.5) / uGridDim));
6715    }
6716    vec4 textureGroup(vec3 pos) {
6717        return texelFetch(tGridTex, ivec3(pos * uGridDim), 0);
6718    }
6719#endif
6720
6721float calcDepth(const in vec3 pos) {
6722    vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;
6723    return 0.5 + 0.5 * clipZW.x / clipZW.y;
6724}
6725
6726float transferFunction(float value) {
6727    return texture2D(tTransferTex, vec2(value, 0.0)).a;
6728}
6729
6730float getDepth(const in vec2 coords) {
6731    #ifdef depthTextureSupport
6732        return texture2D(tDepth, coords).r;
6733    #else
6734        return unpackRGBAToDepth(texture2D(tDepth, coords));
6735    #endif
6736}
6737
6738const float gradOffset = 0.5;
6739
6740vec3 v3m4(vec3 p, mat4 m) {
6741    return (m * vec4(p, 1.0)).xyz;
6742}
6743
6744float preFogAlphaBlended = 0.0;
6745
6746vec4 raymarch(vec3 startLoc, vec3 step, vec3 rayDir) {
6747    mat3 normalMatrix = adjoint(uModelView * vTransform);
6748    mat4 cartnToUnit = uCartnToUnit * inverse4(vTransform);
6749    #if defined(dClipVariant_pixel) && dClipObjectCount != 0
6750        mat4 modelTransform = uModel * vTransform * uTransform;
6751    #endif
6752    mat4 modelViewTransform = uModelView * vTransform * uTransform;
6753
6754    vec3 scaleVol = vec3(1.0) / uGridDim;
6755    vec3 pos = startLoc;
6756    vec4 cell;
6757    float prevValue = -1.0;
6758    float value = 0.0;
6759    vec4 src = vec4(0.0);
6760    vec4 dst = vec4(0.0);
6761    float fragmentDepth;
6762
6763    vec3 posMin = vec3(0.0);
6764    vec3 posMax = vec3(1.0) - vec3(1.0) / uGridDim;
6765
6766    vec3 unitPos;
6767
6768    vec3 nextPos;
6769    float nextValue;
6770
6771    vec4 material;
6772    vec4 overpaint;
6773    float metalness = uMetalness;
6774    float roughness = uRoughness;
6775    float emissive = uEmissive;
6776
6777    vec3 gradient = vec3(1.0);
6778    vec3 dx = vec3(gradOffset * scaleVol.x, 0.0, 0.0);
6779    vec3 dy = vec3(0.0, gradOffset * scaleVol.y, 0.0);
6780    vec3 dz = vec3(0.0, 0.0, gradOffset * scaleVol.z);
6781
6782    float maxDist = min(vBoundingSphere.w * 2.0, uFar - uNear);
6783    float maxDistSq = maxDist * maxDist;
6784
6785    for (int i = 0; i < uMaxSteps; ++i) {
6786        // break when beyond bounding-sphere or far-plane
6787        vec3 distVec = startLoc - pos;
6788        if (dot(distVec, distVec) > maxDistSq) break;
6789
6790        unitPos = v3m4(pos / uModelScale, cartnToUnit);
6791
6792        // continue when outside of grid
6793        if (unitPos.x > posMax.x || unitPos.y > posMax.y || unitPos.z > posMax.z ||
6794            unitPos.x < posMin.x || unitPos.y < posMin.y || unitPos.z < posMin.z
6795        ) {
6796            prevValue = value;
6797            pos += step;
6798            continue;
6799        }
6800
6801        cell = textureVal(unitPos);
6802        value = cell.a; // current voxel value
6803
6804        if (uJumpLength > 0.0 && value < 0.01) {
6805            nextPos = pos + rayDir * uJumpLength;
6806            nextValue = textureVal(v3m4(nextPos / uModelScale, cartnToUnit)).a;
6807            if (nextValue < 0.01) {
6808                prevValue = nextValue;
6809                pos = nextPos;
6810                continue;
6811            }
6812        }
6813
6814        vec4 mvPosition = modelViewTransform * vec4(unitPos * uGridDim, 1.0);
6815        if (calcDepth(mvPosition.xyz) > getDepth(gl_FragCoord.xy / uDrawingBufferSize))
6816            break;
6817
6818        #if defined(dClipVariant_pixel) && dClipObjectCount != 0
6819            vec3 modelPosition = v3m4(unitPos * uGridDim, modelTransform);
6820            if (clipTest(modelPosition)) {
6821                prevValue = value;
6822                pos += step;
6823                continue;
6824            }
6825        #endif
6826
6827        vec3 vViewPosition = mvPosition.xyz;
6828        material.a = transferFunction(value);
6829
6830        #ifdef dPackedGroup
6831            float group = unpackRGBToInt(textureGroup(floor(unitPos * uGridDim + 0.5) / uGridDim).rgb);
6832        #else
6833            vec3 g = floor(unitPos * uGridDim + 0.5);
6834            // note that we swap x and z because the texture is flipped around y
6835            #if defined(dAxisOrder_012)
6836                float group = g.z + g.y * uGridDim.z + g.x * uGridDim.z * uGridDim.y; // 210
6837            #elif defined(dAxisOrder_021)
6838                float group = g.y + g.z * uGridDim.y + g.x * uGridDim.y * uGridDim.z; // 120
6839            #elif defined(dAxisOrder_102)
6840                float group = g.z + g.x * uGridDim.z + g.y * uGridDim.z * uGridDim.x; // 201
6841            #elif defined(dAxisOrder_120)
6842                float group = g.x + g.z * uGridDim.x + g.y * uGridDim.x * uGridDim.z; // 021
6843            #elif defined(dAxisOrder_201)
6844                float group = g.y + g.x * uGridDim.y + g.z * uGridDim.y * uGridDim.x; // 102
6845            #elif defined(dAxisOrder_210)
6846                float group = g.x + g.y * uGridDim.x + g.z * uGridDim.x * uGridDim.y; // 012
6847            #endif
6848        #endif
6849
6850        #if defined(dColorType_direct) && defined(dUsePalette)
6851            float paletteValue = (value - uPaletteDomain[0]) / (uPaletteDomain[1] - uPaletteDomain[0]);
6852            material.rgb = texture2D(tPalette, vec2(clamp(paletteValue, 0.0, 1.0), 0.0)).rgb;
6853        #elif defined(dColorType_uniform)
6854            material.rgb = uColor;
6855        #elif defined(dColorType_instance)
6856            material.rgb = readFromTexture(tColor, vInstance, uColorTexDim).rgb;
6857        #elif defined(dColorType_group)
6858            material.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
6859        #elif defined(dColorType_groupInstance)
6860            material.rgb = readFromTexture(tColor, vInstance * float(uGroupCount) + group, uColorTexDim).rgb;
6861        #elif defined(dColorType_vertex)
6862            material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, 0.0).rgb;
6863        #elif defined(dColorType_vertexInstance)
6864            material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, vInstance * float(uVertexCount)).rgb;
6865        #endif
6866
6867        #ifdef dOverpaint
6868            #if defined(dOverpaintType_groupInstance)
6869                overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim);
6870            #elif defined(dOverpaintType_vertexInstance)
6871                overpaint = texture3dFrom1dTrilinear(tOverpaint, unitPos, uGridDim, uOverpaintTexDim, vInstance * float(uVertexCount));
6872            #endif
6873
6874            material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a);
6875        #endif
6876
6877        #if defined(dIgnoreLight)
6878            gl_FragColor.rgb = material.rgb;
6879        #else
6880            if (material.a >= 0.01) {
6881                #ifdef dPackedGroup
6882                    // compute gradient by central differences
6883                    gradient.x = textureVal(unitPos - dx).a - textureVal(unitPos + dx).a;
6884                    gradient.y = textureVal(unitPos - dy).a - textureVal(unitPos + dy).a;
6885                    gradient.z = textureVal(unitPos - dz).a - textureVal(unitPos + dz).a;
6886                #else
6887                    gradient = cell.xyz * 2.0 - 1.0;
6888                #endif
6889                vec3 normal = -normalize(normalMatrix * normalize(gradient));
6890                #include apply_light_color
6891            } else {
6892                gl_FragColor.rgb = material.rgb;
6893            }
6894        #endif
6895
6896        gl_FragColor.a = material.a * uAlpha * uTransferScale;
6897
6898        #if defined(dColorMarker)
6899            float marker = uMarker;
6900            if (uMarker == -1.0) {
6901                marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
6902                marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
6903            }
6904        #endif
6905        #include apply_marker_color
6906
6907        preFogAlphaBlended = (1.0 - preFogAlphaBlended) * gl_FragColor.a + preFogAlphaBlended;
6908        fragmentDepth = calcDepth(mvPosition.xyz);
6909        #include apply_fog
6910
6911        src = gl_FragColor;
6912
6913        if (!uTransparentBackground || !uFog) {
6914            // done in 'apply_fog' otherwise
6915            src.rgb *= src.a;
6916        }
6917        dst = (1.0 - dst.a) * src + dst; // standard blending
6918
6919        // break if the color is opaque enough
6920        if (dst.a > 0.95)
6921            break;
6922
6923        pos += step;
6924    }
6925
6926    return dst;
6927}
6928
6929// TODO: support float texture for higher precision values???
6930// TODO: support clipping exclusion texture support
6931
6932void main() {
6933    #if defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
6934        discard;
6935    #else
6936        if (gl_FrontFacing)
6937            discard;
6938
6939        vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
6940        vec3 step = rayDir * uStepScale * uModelScale;
6941
6942        float boundingSphereNear = distance(vBoundingSphere.xyz, uCameraPosition) - vBoundingSphere.w;
6943        float d = max(uNear, boundingSphereNear) - mix(0.0, distance(vModelPosition, uCameraPosition), uIsOrtho);
6944        vec3 start = mix(uCameraPosition, vModelPosition, uIsOrtho) + (d * rayDir);
6945        gl_FragColor = raymarch(start, step, rayDir);
6946
6947        float fragmentDepth = calcDepth((uView * vec4(start, 1.0)).xyz);
6948        float preFogAlpha = clamp(preFogAlphaBlended, 0.0, 1.0);
6949        #include wboit_write
6950    #endif
6951}
6952`,ee=`
6953precision highp float;
6954precision highp int;
6955
6956#include common
6957#include common_vert_params
6958
6959attribute vec3 aPosition;
6960attribute vec2 aUv;
6961attribute mat4 aTransform;
6962attribute float aInstance;
6963
6964varying vec2 vUv;
6965varying float vInstance;
6966
6967void main() {
6968    int vertexId = VertexID;
6969
6970    #include assign_position
6971
6972    vUv = aUv;
6973    vInstance = aInstance;
6974}
6975`,et=`
6976precision highp float;
6977precision highp int;
6978
6979#include common
6980#include read_from_texture
6981#include common_frag_params
6982#include common_clip
6983
6984uniform float uEmissive;
6985
6986// Density value to estimate object thickness
6987uniform float uDensity;
6988
6989#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
6990    #ifdef dOverpaint
6991        #if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance)
6992            varying vec4 vOverpaint;
6993            uniform vec2 uOverpaintTexDim;
6994            uniform sampler2D tOverpaint;
6995        #endif
6996        uniform float uOverpaintStrength;
6997    #endif
6998#endif
6999
7000#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
7001    #ifdef dEmissive
7002        #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance)
7003            varying float vEmissive;
7004            uniform vec2 uEmissiveTexDim;
7005            uniform sampler2D tEmissive;
7006        #endif
7007        uniform float uEmissiveStrength;
7008    #endif
7009#endif
7010
7011#ifdef dTransparency
7012    #if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance)
7013        varying float vTransparency;
7014        uniform vec2 uTransparencyTexDim;
7015        uniform sampler2D tTransparency;
7016    #endif
7017    uniform float uTransparencyStrength;
7018#endif
7019
7020uniform vec2 uImageTexDim;
7021uniform sampler2D tImageTex;
7022uniform sampler2D tGroupTex;
7023uniform sampler2D tValueTex;
7024
7025uniform vec2 uMarkerTexDim;
7026uniform sampler2D tMarker;
7027
7028varying vec2 vUv;
7029varying float vInstance;
7030
7031#ifdef dUsePalette
7032    uniform sampler2D tPalette;
7033    uniform vec3 uPaletteDefault;
7034#endif
7035
7036uniform int uTrimType;
7037uniform vec3 uTrimCenter;
7038uniform vec4 uTrimRotation;
7039uniform vec3 uTrimScale;
7040uniform mat4 uTrimTransform;
7041
7042uniform float uIsoLevel;
7043
7044#if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell) || defined(dInterpolation_bspline)
7045    #define dInterpolation_cubic
7046#endif
7047
7048#if defined(dInterpolation_cubic)
7049    #if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell)
7050        #if defined(dInterpolation_catmulrom)
7051            const float B = 0.0;
7052            const float C = 0.5;
7053        #elif defined(dInterpolation_mitchell)
7054            const float B = 0.333;
7055            const float C = 0.333;
7056        #endif
7057
7058        float cubicFilter(float x){
7059            float f = x;
7060            if (f < 0.0) {
7061                f = -f;
7062            }
7063            if (f < 1.0) {
7064                return ((12.0 - 9.0 * B - 6.0 * C) * (f * f * f) +
7065                    (-18.0 + 12.0 * B + 6.0 * C) * (f * f) +
7066                    (6.0 - 2.0 * B)) / 6.0;
7067            }else if (f >= 1.0 && f < 2.0){
7068                return ((-B - 6.0 * C) * ( f * f * f)
7069                    + (6.0 * B + 30.0 * C) * (f * f) +
7070                    (-(12.0 * B) - 48.0 * C) * f +
7071                    8.0 * B + 24.0 * C) / 6.0;
7072            }else{
7073                return 0.0;
7074            }
7075        }
7076    #elif defined(dInterpolation_bspline)
7077        float cubicFilter(float x) {
7078            float f = x;
7079            if (f < 0.0) {
7080                f = -f;
7081            }
7082            if (f >= 0.0 && f <= 1.0){
7083                return (2.0 / 3.0) + (0.5) * (f * f * f) - (f * f);
7084            } else if (f > 1.0 && f <= 2.0) {
7085                return 1.0 / 6.0 * pow((2.0 - f), 3.0);
7086            }
7087            return 1.0;
7088        }
7089    #endif
7090
7091    vec4 biCubic(sampler2D tex, vec2 texCoord) {
7092        vec2 texelSize = 1.0 / uImageTexDim;
7093        texCoord -= texelSize / 2.0;
7094        vec4 nSum = vec4(0.0);
7095        float nDenom = 0.0;
7096        vec2 cell = fract(texCoord * uImageTexDim);
7097        for (float m = -1.0; m <= 2.0; ++m) {
7098            for (float n = -1.0; n <= 2.0; ++n) {
7099                vec4 vecData = texture2D(tex, texCoord + texelSize * vec2(m, n));
7100                float c = abs(cubicFilter(m - cell.x) * cubicFilter(-n + cell.y));
7101                nSum += vecData * c;
7102                nDenom += c;
7103            }
7104        }
7105        return nSum / nDenom;
7106    }
7107#endif
7108
7109void main() {
7110    if (uTrimType != 0 && getSignedDistance(vModelPosition, uTrimType, uTrimCenter, uTrimRotation, uTrimScale, uTrimTransform) > 0.0) discard;
7111
7112    #include fade_lod
7113    #include clip_pixel
7114
7115    #if defined(dInterpolation_cubic)
7116        #ifdef dUsePalette
7117            vec4 material = texture2D(tImageTex, vUv);
7118            if (material.rgb != vec3(1.0)) {
7119                material = biCubic(tImageTex, vUv);
7120            }
7121        #else
7122            vec4 material = biCubic(tImageTex, vUv);
7123        #endif
7124    #else
7125        vec4 material = texture2D(tImageTex, vUv);
7126    #endif
7127
7128    if (uIsoLevel >= 0.0) {
7129        if (texture2D(tValueTex, vUv).r < uIsoLevel) discard;
7130
7131        material.a = uAlpha;
7132    } else {
7133        if (material.a == 0.0) discard;
7134
7135        material.a *= uAlpha;
7136    }
7137
7138    float fragmentDepth = gl_FragCoord.z;
7139
7140    vec3 packedGroup = texture2D(tGroupTex, vUv).rgb;
7141    float group = packedGroup == vec3(0.0) ? -1.0 : unpackRGBToInt(packedGroup);
7142
7143    // apply per-group transparency
7144    #if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing))
7145        float transparency = 0.0;
7146        #if defined(dTransparencyType_instance)
7147            transparency = readFromTexture(tTransparency, vInstance, uTransparencyTexDim).a;
7148        #elif defined(dTransparencyType_groupInstance)
7149            transparency = readFromTexture(tTransparency, vInstance * float(uGroupCount) + group, uTransparencyTexDim).a;
7150        #endif
7151        transparency *= uTransparencyStrength;
7152
7153        float ta = 1.0 - transparency;
7154        if (transparency < 0.09) ta = 1.0; // hard cutoff looks better
7155
7156        #if defined(dRenderVariant_pick)
7157            if (ta * uAlpha < uPickingAlphaThreshold)
7158                discard; // ignore so the element below can be picked
7159        #elif defined(dRenderVariant_emissive)
7160            if (ta < 1.0)
7161                discard; // emissive not supported with transparency
7162        #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
7163            material.a *= ta;
7164        #endif
7165    #endif
7166
7167    if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
7168        (uRenderMask == MaskTransparent && material.a == 1.0)
7169    ) {
7170        discard;
7171    }
7172
7173    #if defined(dNeedsMarker)
7174        float marker = uMarker;
7175        if (group == -1.0) {
7176            marker = 0.0;
7177        } else if (uMarker == -1.0) {
7178            marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
7179            marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
7180        }
7181    #endif
7182
7183    #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
7184        float emissive = uEmissive;
7185        if (group == -1.0) {
7186            emissive = 0.0;
7187        } else {
7188            #ifdef dEmissive
7189                #if defined(dEmissiveType_instance)
7190                    emissive += readFromTexture(tEmissive, vInstance, uEmissiveTexDim).a * uEmissiveStrength;
7191                #elif defined(dEmissiveType_groupInstance)
7192                    emissive += readFromTexture(tEmissive, vInstance * float(uGroupCount) + group, uEmissiveTexDim).a * uEmissiveStrength;
7193                #endif
7194            #endif
7195        }
7196    #endif
7197
7198    #if defined(dRenderVariant_pick)
7199        if (group == -1.0) discard;
7200
7201        #include check_picking_alpha
7202        #ifdef requiredDrawBuffers
7203            gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
7204            gl_FragData[1] = vec4(packIntToRGB(vInstance), 1.0);
7205            gl_FragData[2] = vec4(packIntToRGB(group), 1.0);
7206            gl_FragData[3] = packDepthToRGBA(fragmentDepth);
7207        #else
7208            gl_FragColor = vColor;
7209            if (uPickType == 1) {
7210                gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
7211            } else if (uPickType == 2) {
7212                gl_FragColor = vec4(packIntToRGB(vInstance), 1.0);
7213            } else {
7214                gl_FragColor = vec4(packIntToRGB(group), 1.0);
7215            }
7216        #endif
7217    #elif defined(dRenderVariant_depth)
7218        if (uRenderMask == MaskOpaque) {
7219            gl_FragColor = packDepthToRGBA(fragmentDepth);
7220        } else if (uRenderMask == MaskTransparent) {
7221            gl_FragColor = packDepthWithAlphaToRGBA(fragmentDepth, material.a);
7222        }
7223    #elif defined(dRenderVariant_marking)
7224        if (uMarkingType == 1) {
7225            if (marker > 0.0)
7226                discard;
7227            gl_FragColor = packDepthToRGBA(fragmentDepth);
7228        } else {
7229            if (marker == 0.0)
7230                discard;
7231            float depthTest = 1.0;
7232            if (uMarkingDepthTest) {
7233                depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;
7234            }
7235            bool isHighlight = intMod(marker, 2.0) > 0.1;
7236            float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
7237            float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
7238            if (fogFactor == 1.0)
7239                discard;
7240            gl_FragColor = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);
7241        }
7242    #elif defined(dRenderVariant_emissive)
7243        gl_FragColor = vec4(emissive);
7244    #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
7245        #ifdef dUsePalette
7246            if (material.rgb == vec3(1.0)) {
7247                material.rgb = uPaletteDefault;
7248            } else {
7249                float v = ((material.r * 256.0 * 256.0 * 255.0 + material.g * 256.0 * 255.0 + material.b * 255.0) - 1.0) / PALETTE_SCALE;
7250                material.rgb = texture2D(tPalette, vec2(v, 0.0)).rgb;
7251            }
7252        #endif
7253
7254        // mix material with overpaint
7255        #if defined(dOverpaint)
7256            vec4 overpaint = vec4(0.0);
7257            if (group != -1.0) {
7258                #if defined(dOverpaintType_instance)
7259                    overpaint = readFromTexture(tOverpaint, vInstance, uOverpaintTexDim);
7260                #elif defined(dOverpaintType_groupInstance)
7261                    overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim);
7262                #endif
7263                overpaint *= uOverpaintStrength;
7264            }
7265            material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a);
7266        #endif
7267
7268        gl_FragColor = material;
7269        #include apply_marker_color
7270
7271        #if defined(dRenderVariant_color)
7272            #include apply_fog
7273            #include wboit_write
7274            #include dpoit_write
7275        #elif defined(dRenderVariant_tracing)
7276            gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
7277            gl_FragData[2] = vec4(material.rgb, uDensity);
7278        #endif
7279    #endif
7280}
7281`,er=(0,a.s)(),ea={apply_fog:o,apply_interior_color:s,apply_light_color:l,apply_marker_color:u,assign_clipping_varying:c,assign_color_varying:d,assign_group:p,assign_marker_varying:f,assign_material_color:m,assign_position:h,assign_size:g,check_picking_alpha:b,check_transparency:y,clip_instance:x,clip_pixel:S,color_frag_params:T,color_vert_params:C,common_clip:O,common_frag_params:I,common_vert_params:A,common:w,fade_lod:D,float_to_rgba:E,light_frag_params:M,normal_frag_params:P,read_from_texture:k,rgba_to_float:B,size_vert_params:_,texture3d_from_1d_trilinear:R,texture3d_from_2d_linear:F,texture3d_from_2d_nearest:L,wboit_write:z,dpoit_write:N},en=/^(?!\/\/)\s*#include\s+(\S+)/gm,ei=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*\+\+i\s*\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g,eo=/[ \t]*\/\/.*\n/g,es=/[ \t]*\/\*[\s\S]*?\*\//g,el=/\n{2,}/g;function eu(e){return e.replace(en,(e,t)=>{let r=ea[t];if(!r)throw Error(`empty chunk, '${t}'`);return r}).trim().replace(eo,"\n").replace(es,"\n").replace(el,"\n")}function ec(e,t,r,a){let n="";for(let e=parseInt(t);e<parseInt(r);++e)n+=a.replace(/\[\s*i\s*\]/g,`[${e}]`).replace(/UNROLLED_LOOP_INDEX/g,`${e}`);return n}function ed(e,t){var r;return(r=e,t.dLightCount&&(r=r.replace(/dLightCount/g,`${t.dLightCount.ref.value}
7281`)),t.dClipObjectCount&&(r=r.replace(/dClipObjectCount/g,`${t.dClipObjectCount.ref.value}`)),r).replace(ei,ec)}function ep(e,t,r,a={},n={},i){return{id:er(),name:e,vert:eu(t),frag:eu(r),extensions:a,outTypes:n,ignoreDefine:i}}function ef(e,t,r){var a;if(t.startsWith("color")||"tracing"===t){if("dLightCount"===e)return!!(null===(a=r.dIgnoreLight)||void 0===a?void 0:a.ref.value)}else{let r=["dColorType","dUsePalette","dOverpaintType","dOverpaint","dSubstanceType","dSubstance","dColorMarker","dCelShaded","dLightCount"];return"depth"===t||t.startsWith("pick")||r.push("dXrayShaded"),"emissive"!==t&&r.push("dEmissiveType","dEmissive"),r.includes(e)}return!1}function em(e,t,r){return"dLightCount"===e||ef(e,t,r)}let eh=ep("points",G,U,{drawBuffers:"optional"},{},em),eg=ep("spheres",V,j,{fragDepth:"required",drawBuffers:"optional"},{},ef),ev=ep("cylinders",H,q,{fragDepth:"required",drawBuffers:"optional"},{},ef),eb=ep("text",X,W,{fragDepth:"optional",drawBuffers:"optional"},{},em),ey=ep("lines",K,Q,{drawBuffers:"optional"},{},em),ex=ep("mesh",Z,Y,{drawBuffers:"optional"},{},ef),eS=ep("direct-volume",$,J,{fragDepth:"optional",drawBuffers:"optional"},{},ef),eT=ep("image",ee,et,{drawBuffers:"optional"},{},em);function eC(e,t){var r;if(void 0===e)return"";let a=(null===(r=e.dRenderVariant)||void 0===r?void 0:r.ref.value)||"",n=[];for(let r in e){if(null==t?void 0:t(r,a,e))continue;let o=e[r].ref.value;void 0!==o&&("string"==typeof o?n.push(`#define ${r}_${o}`):"number"==typeof o?n.push(`#define ${r} ${o}`):"boolean"==typeof o?o&&n.push(`#define ${r}`):(0,i.UT)(o))}return n.join("\n")+"\n"}let eO=`
7282#define attribute in
7283#define varying out
7284#define texture2D texture
7285`,eI=`
7286#define varying in
7287#define texture2D texture
7288#define textureCube texture
7289#define texture2DLodEXT textureLod
7290#define textureCubeLodEXT textureLod
7291
7292#define gl_FragColor out_FragData0
7293#define gl_FragDepthEXT gl_FragDepth
7294`;function eA(e,t,r,a,i){let o=eC(a,i.ignoreDefine),s=eC(a,i.ignoreDefine),l=(0,n.D0)(e)?function(e,t){let r=["#version 300 es"];if(t.drawBuffers&&e.drawBuffers&&r.push("#define requiredDrawBuffers"),t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if("required"===t.multiDraw)throw Error("required 'GL_ANGLE_multi_draw' extension not available")}if(t.clipCullDistance){if(e.clipCullDistance)r.push("#extension GL_ANGLE_clip_cull_distance : enable"),r.push("#define enabledClipCullDistance");else if("required"===t.clipCullDistance)throw Error("required 'GL_ANGLE_clip_cull_distance' extension not available")}if(t.conservativeDepth){if(e.conservativeDepth)r.push("#extension GL_EXT_conservative_depth : enable"),r.push("#define enabledConservativeDepth");else if("required"===t.conservativeDepth)throw Error("required 'GL_EXT_conservative_depth' extension not available")}if(t.multiview2){if(e.multiview2)r.push("#extension GL_OVR_multiview2 : require"),r.push("#define enabledMultiview2");else if("required"===t.multiview2)throw Error("required 'GL_OVR_multiview2' extension not available")}return e.noNonInstancedActiveAttribs&&r.push("#define noNonInstancedActiveAttribs"),r.push(eO),r.join("\n")+"\n"}(t,i.extensions):function(e,t){let r=[];if(t.drawBuffers){if(e.drawBuffers)r.push("#define requiredDrawBuffers");else if("required"===t.drawBuffers)throw Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if("required"===t.multiDraw)throw Error("required 'GL_ANGLE_multi_draw' extension not available")}return r.join("\n")+"\n"}(t,i.extensions),u=(0,n.D0)(e)?function(e,t,r,a){let n=["#version 300 es",`layout(location = 0) out highp ${a[0]||"vec4"} out_FragData0;`];if(r.fragDepth&&e.fragDepth&&n.push("#define enabledFragDepth"),r.drawBuffers&&e.drawBuffers){n.push("#define requiredDrawBuffers");for(let e=1,r=t.maxDrawBuffers;e<r;++e)n.push(`layout(location = ${e}) out highp ${a[e]||"vec4"} out_FragData${e};`)}return r.shaderTextureLod&&e.shaderTextureLod&&n.push("#define enabledShaderTextureLod"),e.depthTexture&&n.push("#define depthTextureSupport"),n.push(eI),n.join("\n")+"\n"}(t,r,i.extensions,i.outTypes):function(e,t){let r=["#extension GL_OES_standard_derivatives : enable"];
7294if(t.fragDepth){if(e.fragDepth)r.push("#extension GL_EXT_frag_depth : enable"),r.push("#define enabledFragDepth");else if("required"===t.fragDepth)throw Error("required 'GL_EXT_frag_depth' extension not available")}if(t.drawBuffers){if(e.drawBuffers)r.push("#extension GL_EXT_draw_buffers : require"),r.push("#define requiredDrawBuffers"),r.push("#define gl_FragColor gl_FragData[0]");else if("required"===t.drawBuffers)throw Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.shaderTextureLod){if(e.shaderTextureLod)r.push("#extension GL_EXT_shader_texture_lod : enable"),r.push("#define enabledShaderTextureLod");else if("required"===t.shaderTextureLod)throw Error("required 'GL_EXT_shader_texture_lod' extension not available")}return e.depthTexture&&r.push("#define depthTextureSupport"),r.join("\n")+"\n"}(t,i.extensions),c=(0,n.D0)(e)?i.frag.replace(/gl_FragData\[([0-9]+)\]/g,"out_FragData$1"):i.frag;return{id:er(),name:i.name,vert:`${l}${o}${ed(i.vert,a)}`,frag:`${u}${s}${ed(c,a)}`,extensions:i.extensions,outTypes:i.outTypes}}},10410:function(e,t,r){r.d(t,{C:function(){return a}});let a=`
7295precision highp float;
7296
7297attribute vec2 aPosition;
7298uniform vec2 uQuadScale;
7299
7300void main(void) {
7301    vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
7302    gl_Position = vec4(position, 0.0, 1.0);
7303}
7304`},62763:function(e,t,r){r.d(t,{Ej:function(){return c},HK:function(){return f},MX:function(){return p},R8:function(){return m},ny:function(){return d}});var a=r(16252),n=r(97667),i=r(62131),o=r(91407);let s=(0,a.s)();function l(e){let t=e.createBuffer();if(null===t)throw Error("Could not create WebGL buffer");return t}function u(e,t,r,a){let o=l(e),u=function(e,t){switch(t){case"static":return e.STATIC_DRAW;case"dynamic":return e.DYNAMIC_DRAW;case"stream":return e.STREAM_DRAW;default:(0,n.UT)(t)}}(e,r),c=function(e,t){switch(t){case"attribute":return e.ARRAY_BUFFER;case"elements":return e.ELEMENT_ARRAY_BUFFER;case"uniform":if((0,i.D0)(e))return e.UNIFORM_BUFFER;throw Error("WebGL2 is required for uniform buffers");case"pixel-pack":if((0,i.D0)(e))return e.PIXEL_PACK_BUFFER;throw Error("WebGL2 is required for pixel-pack buffers")}}(e,a),d=function(e,t){if(t instanceof Uint8Array)return e.UNSIGNED_BYTE;if(t instanceof Int8Array)return e.BYTE;if(t instanceof Uint16Array)return e.UNSIGNED_SHORT;if(t instanceof Int16Array)return e.SHORT;if(t instanceof Uint32Array)return e.UNSIGNED_INT;if(t instanceof Int32Array)return e.INT;if(t instanceof Float32Array)return e.FLOAT;(0,n.UT)(t)}(e,t),p=t.BYTES_PER_ELEMENT,f=t.length;function m(t){e.bindBuffer(c,o),e.bufferData(c,t,u)}m(t);let h=!1;return{id:s(),_usageHint:u,_bufferType:c,_dataType:d,_bpe:p,length:f,getByteCount:()=>p*f,getBuffer:()=>o,updateData:m,updateSubData:(t,r,a)=>{e.bindBuffer(c,o),a-r===t.length?e.bufferSubData(c,0,t):e.bufferSubData(c,r*p,t.subarray(r,r+a))},reset:()=>{o=l(e),m(t)},destroy:()=>{h||(e.deleteBuffer(o),h=!0)}}}function c(e,t,r){if("float32"===t)switch(r){case 1:return e.FLOAT;case 2:return e.FLOAT_VEC2;case 3:return e.FLOAT_VEC3;case 4:return e.FLOAT_VEC4;case 16:return e.FLOAT_MAT4}(0,n.UT)(t)}function d(e,t,r,a,n,i,o="static"){let{instancedArrays:s}=r,l=u(e,a,o,"attribute"),{_bufferType:c,_dataType:d,_bpe:p}=l;return{...l,divisor:i,bind:r=>{if(e.bindBuffer(c,l.getBuffer()),16===n)for(let a=0;a<4;++a)t.enableVertexAttrib(r+a),e.vertexAttribPointer(r+a,4,d,!1,16*p,4*a*p),s.vertexAttribDivisor(r+a,i);else t.enableVertexAttrib(r),e.vertexAttribPointer(r,n,d,!1,0,0),s.vertexAttribDivisor(r,i)},changeOffset:(t,r)=>{let a=r*p*n;if(e.bindBuffer(c,l.getBuffer()),16===n)for(let r=0;r<4;++r)e.vertexAttribPointer(t+r,4,d,!1,16*p,4*r*p+a);else e.vertexAttribPointer(t,n,d,!1,0,a)}}}function p(e,t,r){let a=[];return Object.keys(t).forEach(n=>{let i=t[n];"attribute"===i.type&&(a[a.length]=[n,e.resources.attribute(r[n].ref.value,i.itemSize,i.divisor)])}),a}function f(e,t,r="static"){let a=u(e,t,r,"elements");return{...a,bind:()=>{e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a.getBuffer())}}}function m(e,t,r,a){let n=l(e),i=(0,o.oL)(e,t,a),u=(0,o.y6)(e,r,a),c=(0,o.tX)(r,a),d=0,p=0,f=!1;return{id:s(),_type:i,_format:u,_bpe:c,getByteCount:()=>c*d*p,read:function(t,r,a,o){d=a,p=o,e.bindBuffer(e.PIXEL_PACK_BUFFER,n),e.bufferData(e.PIXEL_PACK_BUFFER,a*o*c,e.STREAM_READ),e.readPixels(t,r,a,o,u,i,0),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)},getSubData:function(t){e.bindBuffer(e.PIXEL_PACK_BUFFER,n),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,t),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)},reset:()=>{n=l(e)},destroy:()=>{f||(e.deleteBuffer(n),f=!0)}}}}
7304,62131:function(e,t,r){r.d(t,{$H:function(){return D},A4:function(){return c},B$:function(){return x},B5:function(){return l},Cw:function(){return m},D0:function(){return s},HN:function(){return d},IV:function(){return P},Lg:function(){return w},M:function(){return G},Nm:function(){return O},OQ:function(){return L},Oh:function(){return k},PI:function(){return N},Pm:function(){return p},QL:function(){return y},Rc:function(){return F},UQ:function(){return A},Vp:function(){return b},ZC:function(){return f},_$:function(){return U},aT:function(){return V},dl:function(){return z},gT:function(){return g},i7:function(){return h},iV:function(){return M},j7:function(){return T},p8:function(){return C},q:function(){return u},qE:function(){return E},qt:function(){return I},s$:function(){return _},u_:function(){return S},wI:function(){return R},xx:function(){return B}});var a=r(48502),n=r(75404),i=r(717),o=r(59837);function s(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext}function l(e){if(s(e))return{drawArraysInstanced:e.drawArraysInstanced.bind(e),drawElementsInstanced:e.drawElementsInstanced.bind(e),vertexAttribDivisor:e.vertexAttribDivisor.bind(e),VERTEX_ATTRIB_ARRAY_DIVISOR:e.VERTEX_ATTRIB_ARRAY_DIVISOR};{let t=e.getExtension("ANGLE_instanced_arrays");return null===t?null:{drawArraysInstanced:t.drawArraysInstancedANGLE.bind(t),drawElementsInstanced:t.drawElementsInstancedANGLE.bind(t),vertexAttribDivisor:t.vertexAttribDivisorANGLE.bind(t),VERTEX_ATTRIB_ARRAY_DIVISOR:t.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE}}}function u(e){if(s(e))return{FRAGMENT_SHADER_DERIVATIVE_HINT:e.FRAGMENT_SHADER_DERIVATIVE_HINT};{let t=e.getExtension("OES_standard_derivatives");return null===t?null:{FRAGMENT_SHADER_DERIVATIVE_HINT:t.FRAGMENT_SHADER_DERIVATIVE_HINT_OES}}}function c(e){return s(e)?{}:e.getExtension("OES_element_index_uint")}function d(e){if(s(e))return{VERTEX_ARRAY_BINDING:e.VERTEX_ARRAY_BINDING,bindVertexArray:e.bindVertexArray.bind(e),createVertexArray:e.createVertexArray.bind(e),deleteVertexArray:e.deleteVertexArray.bind(e),isVertexArray:e.isVertexArray.bind(e)};{let t=e.getExtension("OES_vertex_array_object");return null===t?null:{VERTEX_ARRAY_BINDING:t.VERTEX_ARRAY_BINDING_OES,bindVertexArray:t.bindVertexArrayOES.bind(t),createVertexArray:t.createVertexArrayOES.bind(t),deleteVertexArray:t.deleteVertexArrayOES.bind(t),isVertexArray:t.isVertexArrayOES.bind(t)}}}function p(e){return s(e)?{}:e.getExtension("OES_texture_float")}function f(e){return e.getExtension("OES_texture_float_linear")}function m(e){if(s(e))return{HALF_FLOAT:e.HALF_FLOAT};{let t=e.getExtension("OES_texture_half_float");return null===t?null:{HALF_FLOAT:t.HALF_FLOAT_OES}}}function h(e){return e.getExtension("OES_texture_half_float_linear")}function g(e){if(s(e))return{MIN:e.MIN,MAX:e.MAX};{let t=e.getExtension("EXT_blend_minmax");return null===t?null:{MIN:t.MIN_EXT,MAX:t.MAX_EXT}}}function b(e){return s(e)?{}:e.getExtension("EXT_frag_depth")}function y(e){if(s(e))return null===e.getExtension("EXT_color_buffer_float")?null:(e.getExtension("EXT_float_blend"),{RGBA32F:e.RGBA32F});{let t=e.getExtension("WEBGL_color_buffer_float");return null===t?(e.getExtension("OES_texture_float"),X(e,e.FLOAT)?{RGBA32F:34836}:null):(e.getExtension("EXT_float_blend"),{RGBA32F:t.RGBA32F_EXT})}}function x(e){if(s(e))return null===e.getExtension("EXT_color_buffer_half_float")?null:(e.getExtension("EXT_float_blend"),{RGBA16F:e.RGBA16F});{let t=e.getExtension("EXT_color_buffer_half_float");return null===t?(e.getExtension("OES_texture_half_float"),X(e,36193)?{RGBA16F:34842}:null):(e.getExtension("EXT_float_blend"),{RGBA16F:t.RGBA16F_EXT})}}function S(e){if(s(e))return{drawBuffers:e.drawBuffers.bind(e),COLOR_ATTACHMENT0:e.COLOR_ATTACHMENT0,COLOR_ATTACHMENT1:e.COLOR_ATTACHMENT1,COLOR_ATTACHMENT2:e.COLOR_ATTACHMENT2,COLOR_ATTACHMENT3:e.COLOR_ATTACHMENT3,COLOR_ATTACHMENT4:e.COLOR_ATTACHMENT4,COLOR_ATTACHMENT5:e.COLOR_ATTACHMENT5,COLOR_ATTACHMENT6:e.COLOR_ATTACHMENT6,COLOR_ATTACHMENT7:e.COLOR_ATTACHMENT7,DRAW_BUFFER0:e.DRAW_BUFFER0,DRAW_BUFFER1:e.DRAW_BUFFER1,DRAW_BUFFER2:e.DRAW_BUFFER2,DRAW_BUFFER3:e.DRAW_BUFFER3,DRAW_BUFFER4:e.DRAW_BUFFER4,DRAW_BUFFER5:e.DRAW_BUFFER5,DRAW_BUFFER6:e.DRAW_BUFFER6,DRAW_BUFFER7:e.DRAW_BUFFER7,MAX_COLOR_ATTACHMENTS:e.MAX_COLOR_ATTACHMENTS,MAX_DRAW_BUFFERS:e.MAX_DRAW_BUFFERS};{let t=e.getExtension("WEBGL_draw_buffers");return null===t?null:{drawBuffers:t.drawBuffersWEBGL.bind(t),COLOR_ATTACHMENT0:t.COLOR_ATTACHMENT0_WEBGL,COLOR_ATTACHMENT1:t.COLOR_ATTACHMENT1_WEBGL,COLOR_ATTACHMENT2:t.COLOR_ATTACHMENT2_WEBGL,COLOR_ATTACHMENT3:t.COLOR_ATTACHMENT3_WEBGL,COLOR_ATTACHMENT4:t.COLOR_ATTACHMENT4_WEBGL,COLOR_ATTACHMENT5:t.COLOR_ATTACHMENT5_WEBGL,COLOR_ATTACHMENT6:t.COLOR_ATTACHMENT6_WEBGL,COLOR_ATTACHMENT7:t.COLOR_ATTACHMENT7_WEBGL,DRAW_BUFFER0:t.DRAW_BUFFER0_WEBGL,DRAW_BUFFER1:t.DRAW_BUFFER1_WEBGL,DRAW_BUFFER2:t.DRAW_BUFFER2_WEBGL,DRAW_BUFFER3:t.DRAW_BUFFER3_WEBGL,DRAW_BUFFER4:t.DRAW_BUFFER4_WEBGL,DRAW_BUFFER5:t.DRAW_BUFFER5_WEBGL,DRAW_BUFFER6:t.DRAW_BUFFER6_WEBGL,DRAW_BUFFER7:t.DRAW_BUFFER7_WEBGL,MAX_COLOR_ATTACHMENTS:t.MAX_COLOR_ATTACHMENTS_WEBGL,MAX_DRAW_BUFFERS:t.MAX_DRAW_BUFFERS_WEBGL}}}function T(e){let t=e.getExtension("OES_draw_buffers_indexed");return null===t?null:{enablei:t.enableiOES.bind(t),disablei:t.disableiOES.bind(t),blendEquationi:t.blendEquationiOES.bind(t),blendEquationSeparatei:t.blendEquationSeparateiOES.bind(t),blendFunci:t.blendFunciOES.bind(t),blendFuncSeparatei:t.blendFuncSeparateiOES.bind(t),colorMaski:t.colorMaskiOES.bind(t)}}function C(e){return s(e)?{}:e.getExtension("EXT_shader_texture_lod")}function O(e){if(s(e))return{UNSIGNED_INT_24_8:e.UNSIGNED_INT_24_8};{let t=e.getExtension("WEBGL_depth_texture");return null===t?null:{UNSIGNED_INT_24_8:t.UNSIGNED_INT_24_8_WEBGL}}}function I(e){if(s(e))return{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,SRGB8_ALPHA8:e.SRGB8_ALPHA8,SRGB8:e.SRGB8,SRGB:e.SRGB};{let t=e.getExtension("EXT_sRGB");return null===t?null:{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:t.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT,S
7304RGB8_ALPHA8:t.SRGB8_ALPHA8_EXT,SRGB8:t.SRGB_ALPHA_EXT,SRGB:t.SRGB_EXT}}}function A(e){if(s(e)){let t=e.getExtension("EXT_disjoint_timer_query_webgl2")||e.getExtension("EXT_disjoint_timer_query");return null===t?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:e.CURRENT_QUERY,QUERY_RESULT:e.QUERY_RESULT,QUERY_RESULT_AVAILABLE:e.QUERY_RESULT_AVAILABLE,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:e.createQuery.bind(e),deleteQuery:e.deleteQuery.bind(e),isQuery:e.isQuery.bind(e),beginQuery:e.beginQuery.bind(e),endQuery:e.endQuery.bind(e),queryCounter:t.queryCounterEXT.bind(t),getQuery:e.getQuery.bind(e),getQueryParameter:e.getQueryParameter.bind(e)}}{let t=e.getExtension("EXT_disjoint_timer_query");return null===t?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:t.CURRENT_QUERY_EXT,QUERY_RESULT:t.QUERY_RESULT_EXT,QUERY_RESULT_AVAILABLE:t.QUERY_RESULT_AVAILABLE_EXT,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:t.createQueryEXT.bind(t),deleteQuery:t.deleteQueryEXT.bind(t),isQuery:t.isQueryEXT.bind(t),beginQuery:t.beginQueryEXT.bind(t),endQuery:t.endQueryEXT.bind(t),queryCounter:t.queryCounterEXT.bind(t),getQuery:t.getQueryEXT.bind(t),getQueryParameter:t.getQueryObjectEXT.bind(t)}}}function w(e){let t=e.getExtension("WEBGL_multi_draw");return t?{multiDrawArrays:t.multiDrawArraysWEBGL.bind(t),multiDrawElements:t.multiDrawElementsWEBGL.bind(t),multiDrawArraysInstanced:t.multiDrawArraysInstancedWE
7304BGL.bind(t),multiDrawElementsInstanced:t.multiDrawElementsInstancedWEBGL.bind(t)}:null}function D(e){let t=e.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");return t?{drawArraysInstancedBaseInstance:t.drawArraysInstancedBaseInstanceWEBGL.bind(t),drawElementsInstancedBaseVertexBaseInstance:t.drawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function E(e){let t=e.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");return t?{multiDrawArraysInstancedBaseInstance:t.multiDrawArraysInstancedBaseInstanceWEBGL.bind(t),multiDrawElementsInstancedBaseVertexBaseInstance:t.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function M(e){let t=e.getExtension("KHR_parallel_shader_compile");return null===t?null:{COMPLETION_STATUS:t.COMPLETION_STATUS_KHR}}function P(e){return s(e)?{}:e.getExtension("OES_fbo_render_mipmap")}function k(e){if(s(e)){let t=e.getExtension("WEBGL_provoking_vertex");if(t)return{FIRST_VERTEX_CONVENTION:t.FIRST_VERTEX_CONVENTION_WEBGL,LAST_VERTEX_CONVENTION:t.LAST_VERTEX_CONVENTION_WEBGL,PROVOKING_VERTEX:t.PROVOKING_VERTEX_WEBGL,provokingVertex:t.provokingVertexWEBGL.bind(t)}}return null}function B(e){if(s(e)){let t=e.getExtension("WEBGL_clip_cull_distance");if(t)return{MAX_CLIP_DISTANCES:t.MAX_CLIP_DISTANCES_WEBGL,MAX_CULL_DISTANCES:t.MAX_CULL_DISTANCES_WEBGL,MAX_COMBINED_CLIP_AND_CULL_DISTANCES:t.MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL,CLIP_DISTANCE0:t.CLIP_DISTANCE0_WEBGL,CLIP_DISTANCE1:t.CLIP_DISTANCE1_WEBGL,CLIP_DISTANCE2:t.CLIP_DISTANCE2_WEBGL,CLIP_DISTANCE3:t.CLIP_DISTANCE3_WEBGL,CLIP_DISTANCE4:t.CLIP_DISTANCE4_WEBGL,CLIP_DISTANCE5:t.CLIP_DISTANCE5_WEBGL,CLIP_DISTANCE6:t.CLIP_DISTANCE6_WEBGL,CLIP_DISTANCE7:t.CLIP_DISTANCE7_WEBGL}}return null}function _(e){return s(e)&&e.getExtension("EXT_conservative_depth")?{}:null}function R(e){if(s(e)){let t=e.getExtension("WEBGL_stencil_texturing");if(t)return{DEPTH_STENCIL_TEXTURE_MODE:t.DEPTH_STENCIL_TEXTURE_MODE_WEBGL,STENCIL_INDEX:t.STENCIL_INDEX_WEBGL}}return null}function F(e){let t=e.getExtension("EXT_clip_control");return t?{LOWER_LEFT:t.LOWER_LEFT_EXT,UPPER_LEFT:t.UPPER_LEFT_EXT,NEGATIVE_ONE_TO_ONE:t.NEGATIVE_ONE_TO_ONE_EXT,ZERO_TO_ONE:t.ZERO_TO_ONE_EXT,CLIP_ORIGIN:t.CLIP_ORIGIN_EXT,CLIP_DEPTH_MODE:t.CLIP_DEPTH_MODE_EXT,clipControl:t.clipControlEXT.bind(t)}:null}function L(e){return s(e)&&e.getExtension("EXT_render_snorm")?{}:null}function z(e){return s(e)&&e.getExtension("WEBGL_render_shared_exponent")?{}:null}function N(e){let t=e.getExtension("EXT_texture_norm16");return t?{R16:t.R16_EXT,RG16:t.RG16_EXT,RGB16:t.RGB16_EXT,RGBA16:t.RGBA16_EXT,R16_SNORM:t.R16_SNORM_EXT,RG16_SNORM:t.RG16_SNORM_EXT,RGB16_SNORM:t.RGB16_SNORM_EXT,RGBA16_SNORM:t.RGBA16_SNORM_EXT}:null}function G(e){let t=e.getExtension("EXT_depth_clamp");return t?{DEPTH_CLAMP:t.DEPTH_CLAMP_EXT}:null}function U(e){if(s(e)){let t=e.getExtension("OVR_multiview2");if(t)return{FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR,FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR,MAX_VIEWS:t.MAX_VIEWS_OVR,FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS:t.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR,framebufferTextureMultiview:t.framebufferTextureMultiviewOVR.bind(t)}}return null}function V(e){if(!s(e))return!1;if("undefined"!=typeof navigator){let e=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);return!e||parseInt(e[1])>=85}return!1}let j=`
7305attribute vec4 aPosition;
7306
7307void main() {
7308    gl_Position = aPosition;
7309}`,H=`
7310precision mediump float;
7311uniform vec4 uColor;
7312uniform sampler2D uTexture;
7313
7314void main() {
7315    gl_FragColor = texture2D(uTexture, vec2(0.5, 0.5)) * uColor;
7316}`,q=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function X(e,t){let r=(0,o.X)(e,{type:"vert",source:j}),s=(0,o.X)(e,{type:"frag",source:H});if(!r||!s)return!1;let l=(0,i.E)(e);e.attachShader(l,r),e.attachShader(l,s),e.linkProgram(l),e.useProgram(l);let u=e.getAttribLocation(l,"aPosition"),c=e.getUniformLocation(l,"uColor");if(!c)return a.Au&&console.log("error getting 'uColor' uniform location"),!1;let d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,q,e.STATIC_DRAW),e.enableVertexAttribArray(u),e.vertexAttribPointer(u,2,e.FLOAT,!1,0,0);let p=e.createTexture(),f=new Uint8Array([255,255,255,255]);e.bindTexture(e.TEXTURE_2D,p),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,f);let m=e.createTexture();e.bindTexture(e.TEXTURE_2D,m),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,t,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);let h=e.createFramebuffer();if(e.bindFramebuffer(e.FRAMEBUFFER,h),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,m,0),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE)return a.Au&&console.log(`error creating framebuffer for '${t}'`),!1;e.bindTexture(e.TEXTURE_2D,p),e.uniform4fv(c,[0,10,20,1]),e.drawArrays(e.TRIANGLES,0,6),e.bindTexture(e.TEXTURE_2D,m),e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(1,0,0,1),e.clear(e.COLOR_BUFFER_BIT),e.uniform4fv(c,[0,.1,.05,1]),e.drawArrays(e.TRIANGLES,0,6);let g=new Uint8Array(4);if(e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,g),0!==g[0]||g[1]<248||g[2]<248||g[3]<254)return a.Au&&console.log(`not able to actually render to '${t}' texture`),!1;if(t===e.FLOAT){e.bindFramebuffer(e.FRAMEBUFFER,h);let t=new Float32Array(4);e.readPixels(0,0,1,1,e.RGBA,e.FLOAT,t);let r=e.getError();if(r)return a.Au&&console.log(`error reading float pixels: '${(0,n.Gi)(e,r)}'`),!1}return!0}},75404:function(e,t,r){r.d(t,{kr:function(){return U},Gi:function(){return P},Qe:function(){return M}});var a=r(62131),n=r(16252);let i=(0,n.s)();function o(e,t){let r=e.checkFramebufferStatus(e.FRAMEBUFFER);if(r!==e.FRAMEBUFFER_COMPLETE){let n=function(e,t){switch(t){case e.FRAMEBUFFER_COMPLETE:return"complete";case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"incomplete attachment";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"incomplete missing attachment";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"incomplete dimensions";case e.FRAMEBUFFER_UNSUPPORTED:return"unsupported"}if((0,a.D0)(e))switch(t){case e.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:return"incomplete multisample";case e.RENDERBUFFER_SAMPLES:return"renderbuffer samples"}return"unknown error"}(e,r);throw Error(`Framebuffer status: ${n}${t?` (${t})`:""}`)}}function s(e){let t=e.createFramebuffer();if(null===t)throw Error("Could not create WebGL framebuffer");return t}
7316var l=r(54854),u=r(48502),c=r(67546);function d(e){let t=(0,a.B5)(e);if(null===t)throw Error('Could not find support for "instanced_arrays"');let r=(0,a.A4)(e);if(null===r)throw Error('Could not find support for "element_index_uint"');let n=(0,a.q)(e);if(null===n)throw Error('Could not find support for "standard_derivatives"');let i=(0,a.Pm)(e);u.Au&&null===i&&console.log('Could not find support for "texture_float"');let o=(0,a.ZC)(e);u.Au&&null===o&&console.log('Could not find support for "texture_float_linear"');let s=(0,a.Cw)(e);u.Au&&null===s&&console.log('Could not find support for "texture_half_float"');let l=(0,a.i7)(e);u.Au&&null===l&&console.log('Could not find support for "texture_half_float_linear"');let c=(0,a.Nm)(e);u.Au&&null===c&&console.log('Could not find support for "depth_texture"');let d=(0,a.gT)(e);u.Au&&null===d&&console.log('Could not find support for "blend_minmax"');let p=(0,a.HN)(e);u.Au&&null===p&&console.log('Could not find support for "vertex_array_object"');let f=(0,a.Vp)(e);u.Au&&null===f&&console.log('Could not find support for "frag_depth"');let m=(0,a.QL)(e);u.Au&&null===m&&console.log('Could not find support for "color_buffer_float"');let h=(0,a.B$)(e);u.Au&&null===h&&console.log('Could not find support for "color_buffer_half_float"');let g=(0,a.u_)(e);u.Au&&null===g&&console.log('Could not find support for "draw_buffers"');let b=(0,a.j7)(e);u.Au&&null===b&&console.log('Could not find support for "draw_buffers_indexed"');let y=(0,a.p8)(e);u.Au&&null===y&&console.log('Could not find support for "shader_texture_lod"');let x=(0,a.qt)(e);u.Au&&null===x&&console.log('Could not find support for "sRGB"');let S=(0,a.UQ)(e);u.Au&&null===S&&console.log('Could not find support for "disjoint_timer_query"');let T=(0,a.Lg)(e);u.Au&&null===T&&console.log('Could not find support for "multi_draw"');let C=(0,a.$H)(e);u.Au&&null===C&&console.log('Could not find support for "draw_instanced_base_vertex_base_instance"');let O=(0,a.qE)(e);u.Au&&null===O&&console.log('Could not find support for "multi_draw_instanced_base_vertex_base_instance"');let I=(0,a.iV)(e);u.Au&&null===I&&console.log('Could not find support for "parallel_shader_compile"');let A=(0,a.IV)(e);u.Au&&null===A&&console.log('Could not find support for "fbo_render_mipmap"');let w=(0,a.Oh)(e);u.Au&&null===w&&console.log('Could not find support for "provoking_vertex"');let D=(0,a.xx)(e);u.Au&&null===D&&console.log('Could not find support for "clip_cull_distance"');let E=(0,a.s$)(e);u.Au&&null===E&&console.log('Could not find support for "conservative_depth"');let M=(0,a.wI)(e);u.Au&&null===M&&console.log('Could not find support for "stencil_texturing"');let P=(0,a.Rc)(e);u.Au&&null===P&&console.log('Could not find support for "clip_control"');let k=(0,a.OQ)(e);u.Au&&null===k&&console.log('Could not find support for "render_snorm"');let B=(0,a.dl)(e);u.Au&&null===B&&console.log('Could not find support for "render_shared_exponent"');let _=(0,a.PI)(e);u.Au&&null===_&&console.log('Could not find support for "texture_norm16"');let R=(0,a.M)(e);u.Au&&null===R&&console.log('Could not find support for "depth_clamp"');let F=(0,a._$)(e);return u.Au&&null===F&&console.log('Could not find support for "multiview2"'),{instancedArrays:t,standardDerivatives:n,elementIndexUint:r,textureFloat:i,textureFloatLinear:o,textureHalfFloat:s,textureHalfFloatLinear:l,depthTexture:c,blendMinMax:d,vertexArrayObject:p,fragDepth:f,colorBufferFloat:m,colorBufferHalfFloat:h,drawBuffers:g,drawBuffersIndexed:b,shaderTextureLod:y,sRGB:x,disjointTimerQuery:S,multiDraw:T,drawInstancedBaseVertexBaseInstance:C,multiDrawInstancedBaseVertexBaseInstance:O,parallelShaderCompile:I,fboRenderMipmap:A,provokingVertex:w,clipCullDistance:D,conservativeDepth:E,stencilTexturing:M,clipControl:P,renderSnorm:k,renderSharedExponent:B,textureNorm16:_,depthClamp:R,multiview2:F,noNonInstancedActiveAttribs:(0,a.aT)(e)}}var p=r(717),f=r(59837),m=r(62763),h=r(36111);function g(e,t,r){let a=new Map,n=[];return{get:r=>{var i;let o=e(r),s=a.get(o);return s||(s=function(e,t=0){return{value:e,usageCount:t}}(t(r)),a.set(o,s),n.push(s.value)),s.usageCount+=1,{free:()=>{i.usageCount-=1},value:(i=s).value}},clear:()=>{a.forEach((e,t)=>{e.usageCount<=0&&(e.usageCount<0&&console.warn("Reference usageCount below zero."),r(e.value),a.delete(t),(0,h.KQ)(n,e.value))})},get count(){return a.size},values:n,dispose:()=>
7316{a.forEach(e=>r(e.value)),a.clear(),n.length=0}}}var b=r(69062);let y=(0,n.s)();function x(e){let t=e.createRenderbuffer();if(null===t)throw Error("Could not create WebGL renderbuffer");return t}var S=r(91407);let T=(0,n.s)();function C(e){let{vertexArrayObject:t}=e;if(!t)throw Error("VertexArrayObject not supported");let r=t.createVertexArray();if(!r)throw Error("Could not create WebGL vertex array");return r}function O(e){let{vertexArrayObject:t}=e;if(null===t)throw Error("VertexArrayObject not supported");return t}var I=r(58400);function A(e){return{...e.value,destroy:()=>{e.free()}}}let w=(0,n.s)();var D=r(89987),E=r(44712);function M(e,t){function r(r){try{return e.getContext(r,t)}catch(e){return null}}let n=((null==t?void 0:t.preferWebGl1)?null:r("webgl2"))||r("webgl")||r("experimental-webgl");return u.Au&&console.log(`isWebgl2: ${(0,a.D0)(n)}`),n}function P(e,t){switch(t){case e.NO_ERROR:return"no error";case e.INVALID_ENUM:return"invalid enum";case e.INVALID_VALUE:return"invalid value";case e.INVALID_OPERATION:return"invalid operation";case e.INVALID_FRAMEBUFFER_OPERATION:return"invalid framebuffer operation";case e.OUT_OF_MEMORY:return"out of memory";case e.CONTEXT_LOST_WEBGL:return"context lost"}return"unknown error"}function k(e,t){let r=e.getError();r!==e.NO_ERROR&&console.log(`WebGL error: '${P(e,r)}'${t?` (${t})`:""}`)}let B=new Uint8Array(4);function _(e,t,r){e.getSyncParameter(t,e.SYNC_STATUS)===e.SIGNALED?(e.deleteSync(t),r()):l.b2.setImmediate(_,e,t,r)}let R=!1;function F(e){e.bindFramebuffer(e.FRAMEBUFFER,null),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,B)}function L(e,t){t?e.bindFramebuffer(e.FRAMEBUFFER,t.framebuffer):e.bindFramebuffer(e.FRAMEBUFFER,null)}function z(e,t,r){var a,n;let i=null!==(a=null==t?void 0:t.framebufferWidth)&&void 0!==a?a:e.drawingBufferWidth;return"screen-space"===r&&(i*=2),{width:i,height:null!==(n=null==t?void 0:t.framebufferHeight)&&void 0!==n?n:e.drawingBufferHeight}}function N(e,t,r,a){let n="vertex"===t?e.VERTEX_SHADER:e.FRAGMENT_SHADER,i=e[`${r.toUpperCase()}_${a.toUpperCase()}`];return e.getShaderPrecisionFormat(n,i)}function G(e,t){return{lowFloat:N(e,t,"low","float"),mediumFloat:N(e,t,"medium","float"),highFloat:N(e,t,"high","float"),lowInt:N(e,t,"low","int"),mediumInt:N(e,t,"medium","int"),highInt:N(e,t,"high","int")}}function U(e,t={}){let r=d(e),n=function(e,t){let r={},a=e.getParameter(e.FRONT_FACE),n=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),o=e.getParameter(e.DEPTH_CLEAR_VALUE),s=e.getParameter(e.DEPTH_FUNC),l=e.getParameter(e.COLOR_WRITEMASK),u=e.getParameter(e.COLOR_CLEAR_VALUE),c=e.getParameter(e.BLEND_SRC_RGB),d=e.getParameter(e.BLEND_DST_RGB),p=e.getParameter(e.BLEND_SRC_ALPHA),f=e.getParameter(e.BLEND_DST_ALPHA),m=e.getParameter(e.BLEND_COLOR),h=e.getParameter(e.BLEND_EQUATION_RGB),g=e.getParameter(e.BLEND_EQUATION_ALPHA),b=e.getParameter(e.STENCIL_FUNC),y=e.getParameter(e.STENCIL_VALUE_MASK),x=e.getParameter(e.STENCIL_REF),S=e.getParameter(e.STENCIL_BACK_FUNC),T=e.getParameter(e.STENCIL_BACK_VALUE_MASK),C=e.getParameter(e.STENCIL_BACK_REF),O=e.getParameter(e.STENCIL_WRITEMASK),I=e.getParameter(e.STENCIL_BACK_WRITEMASK),A=e.getParameter(e.STENCIL_FAIL),w=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),D=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),E=e.getParameter(e.STENCIL_BACK_FAIL),M=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),P=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),k=e.getParameter(e.MAX_VERTEX_ATTRIBS),B=[],_=e.getParameter(e.VIEWPORT),R=e.getParameter(e.SCISSOR_BOX),F=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,L=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1,z=()=>{for(let e=0;e<k;++e)B[e]=0};return z(),{currentProgramId:-1,currentMaterialId:-1,currentRenderItemId:-1,enable:t=>{!0!==r[t]&&(e.enable(t),r[t]=!0)},disable:t=>{!1!==r[t]&&(e.disable(t),r[t]=!1)},frontFace:t=>{t!==a&&(e.frontFace(t),a=t)},cullFace:t=>{t!==n&&(e.cullFace(t),n=t)},depthMask:t=>{t!==i&&(e.depthMask(t),i=t)},clearDepth:t=>{t!==o&&(e.clearDepth(t),o=t)},depthFunc:t=>{t!==s&&(e.depthFunc(t),s=t)},colorMask:(t,r,a,n)=>{(t!==l[0]||r!==l[1]||a!==l[2]||n!==l[3])&&(e.colorMask(t,r,a,n),l[0]=t,l[1]=r,l[2]=a,l[3]=n)},clearColor:(t,r,a,n)=>{(t!==u[0]||r!==u[1]||a!==u[2]||n!==u[3])&&(e.clearColor(t,r,a,n),u[0]=t,u[1]=r,u[2]=a,u[3]=n)},blendFunc:(t,r)=>{(t!==c||r!==d||t!==p||r!==f)&&(e.blendFunc(t,r),c=t,d=r,p=t,f=r)},blendFuncSeparate:(t,r,a,n)=>{(t!==c||r!==d||a!==p||n!==f)&&(e.blendFuncSeparate(t,r,a,n),c=t,d=r,p=a,f=n)},blendEquation:t=>{(t!==h||t!==g)&&(e.blendEquation(t),h=t,g=t)},blendEquationSeparate:(t,r)=>{(t!==h||r!==g)&&(e.blendEquationSeparate(t,r),h=t,g=r)},blendColor:(t,r,a,n)=>
7316{(t!==m[0]||r!==m[1]||a!==m[2]||n!==m[3])&&(e.blendColor(t,r,a,n),m[0]=t,m[1]=r,m[2]=a,m[3]=n)},stencilFunc:(t,r,a)=>{(t!==b||r!==x||a!==y||t!==S||r!==C||a!==T)&&(e.stencilFunc(t,r,a),b=t,x=r,y=a,S=t,C=r,T=a)},stencilFuncSeparate:(t,r,a,n)=>{t===e.FRONT?(r!==b||a!==x||n!==y)&&(e.stencilFuncSeparate(t,r,a,n),b=r,x=a,y=n):t===e.BACK?(r!==S||a!==C||n!==T)&&(e.stencilFuncSeparate(t,r,a,n),S=r,C=a,T=n):t===e.FRONT_AND_BACK&&(r!==b||a!==x||n!==y||r!==S||a!==C||n!==T)&&(e.stencilFuncSeparate(t,r,a,n),b=r,x=a,y=n,S=r,C=a,T=n)},stencilMask:t=>{(t!==O||t!==I)&&(e.stencilMask(t),O=t,I=t)},stencilMaskSeparate:(t,r)=>{t===e.FRONT?r!==O&&(e.stencilMaskSeparate(t,r),O=r):t===e.BACK?r!==I&&(e.stencilMaskSeparate(t,r),I=r):t===e.FRONT_AND_BACK&&(r!==O||r!==I)&&(e.stencilMaskSeparate(t,r),O=r,I=r)},stencilOp:(t,r,a)=>{(t!==A||r!==D||a!==w||t!==E||r!==P||a!==M)&&(e.stencilOp(t,r,a),A=t,D=r,w=a,E=t,P=r,M=a)},stencilOpSeparate:(t,r,a,n)=>{t===e.FRONT?(r!==A||a!==D||n!==w)&&(e.stencilOpSeparate(t,r,a,n),A=r,D=a,w=n):t===e.BACK?(r!==E||a!==P||n!==M)&&(e.stencilOpSeparate(t,r,a,n),E=r,P=a,M=n):t===e.FRONT_AND_BACK&&(r!==A||a!==D||n!==w||r!==E||a!==P||n!==M)&&(e.stencilOpSeparate(t,r,a,n),A=r,D=a,w=n,E=r,P=a,M=n)},enableVertexAttrib:t=>{e.enableVertexAttribArray(t),B[t]=1},clearVertexAttribsState:z,disableUnusedVertexAttribs:()=>{for(let t=0;t<k;++t)0===B[t]&&e.disableVertexAttribArray(t)},viewport:(t,r,a,n)=>{(t!==_[0]||r!==_[1]||a!==_[2]||n!==_[3])&&(e.viewport(t,r,a,n),_[0]=t,_[1]=r,_[2]=a,_[3]=n)},scissor:(t,r,a,n)=>{(t!==R[0]||r!==R[1]||a!==R[2]||n!==R[3])&&(e.scissor(t,r,a,n),R[0]=t,R[1]=r,R[2]=a,R[3]=n)},clipControl:t.clipControl?(e,r)=>{(e!==F||r!==L)&&(t.clipControl.clipControl(e,r),F=e,L=r)}:void 0,reset:()=>{r={},a=e.getParameter(e.FRONT_FACE),n=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),o=e.getParameter(e.DEPTH_CLEAR_VALUE),s=e.getParameter(e.DEPTH_FUNC),l=e.getParameter(e.COLOR_WRITEMASK),u=e.getParameter(e.COLOR_CLEAR_VALUE),c=e.getParameter(e.BLEND_SRC_RGB),d=e.getParameter(e.BLEND_DST_RGB),p=e.getParameter(e.BLEND_SRC_ALPHA),f=e.getParameter(e.BLEND_DST_ALPHA),m=e.getParameter(e.BLEND_COLOR),h=e.getParameter(e.BLEND_EQUATION_RGB),g=e.getParameter(e.BLEND_EQUATION_ALPHA),b=e.getParameter(e.STENCIL_FUNC),y=e.getParameter(e.STENCIL_VALUE_MASK),x=e.getParameter(e.STENCIL_REF),S=e.getParameter(e.STENCIL_BACK_FUNC),T=e.getParameter(e.STENCIL_BACK_VALUE_MASK),C=e.getParameter(e.STENCIL_BACK_REF),O=e.getParameter(e.STENCIL_WRITEMASK),I=e.getParameter(e.STENCIL_BACK_WRITEMASK),A=e.getParameter(e.STENCIL_FAIL),w=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),D=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),E=e.getParameter(e.STENCIL_BACK_FAIL),M=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),P=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),k=e.getParameter(e.MAX_VERTEX_ATTRIBS),B.length=0;for(let e=0;e<k;++e)B[e]=0;_=e.getParameter(e.VIEWPORT),R=e.getParameter(e.SCISSOR_BOX),F=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,L=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1}}}(e,r),h={resourceCounts:{attribute:0,elements:0,pixelPack:0,framebuffer:0,program:0,renderbuffer:0,shader:0,texture:0,cubeTexture:0,vertexArray:0},drawCount:0,instanceCount:0,instancedDrawCount:0,calls:{drawInstanced:0,drawInstancedBase:0,multiDrawInstancedBase:0,counts:0},culled:{lod:0,frustum:0,occlusion:0}},M={maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),max3dTextureSize:(0,a.D0)(e)?e.getParameter(e.MAX_3D_TEXTURE_SIZE):0,maxRenderbufferSize:e.getParameter(e.MAX_RENDERBUFFER_SIZE),maxDrawBuffers:r.drawBuffers?e.getParameter(r.drawBuffers.MAX_DRAW_BUFFERS):0,maxTextureImageUnits:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),maxVertexTextureImageUnits:e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)},P=function(e,t,r,n,l){let c={attribute:new Set,elements:new Set,pixelPack:new Set,framebuffer:new Set,program:new Set,renderbuffer:new Set,shader:new Set,texture:new Set,cubeTexture:new Set,vertexArray:new Set};function d(e,t){return c[e].add(t),r.resourceCounts[e]+=1,{...t,destroy:()=>{t.destroy(),c[e].delete(t),r.resourceCounts[e]-=1}}}let h=g(e=>JSON.stringify(e),t=>d("shader",(0,f.e)(e,t)),e=>{e.destroy()});function w(e,t){return A(h.get({type:e,source:t}))}let D=new Set,E=g(e=>{var t;let r=[e.shaderCode.id],a=(null===(t=e.defineValues.dRenderVariant)||void 0===t?void 0:t.ref.value)||"";
7316return Object.keys(e.defineValues).forEach(t=>{var n,i,o;(null===(i=(n=e.shaderCode).ignoreDefine)||void 0===i?void 0:i.call(n,t,a,e.defineValues))||r.push((0,b.Wu)(t),"boolean"==typeof(o=e.defineValues[t].ref.value)?o?1:0:"number"==typeof o?1e4*o:(0,b.Wu)(o))}),(0,b.nF)(r).toString()},r=>{let a=(0,p.H)(e,t,n,l,w,r);return"compute"!==a.variant&&D.add(a),d("program",a)},e=>{D.delete(e),e.destroy()});return{attribute:(r,a,i,o)=>d("attribute",(0,m.ny)(e,t,n,r,a,i,o)),elements:(t,r)=>d("elements",(0,m.HK)(e,t,r)),pixelPack:(t,r)=>{if(!(0,a.D0)(e))throw Error("WebGL2 is required for pixel-pack buffers");return d("pixelPack",(0,m.R8)(e,n,t,r))},framebuffer:()=>{let t,r;return d("framebuffer",(t=s(e),r=!1,{id:i(),bind:()=>e.bindFramebuffer(e.FRAMEBUFFER,t),reset:()=>{t=s(e)},destroy:()=>{r||(e.deleteFramebuffer(t),r=!0)}}))},program:(e,t,r)=>A(E.get({defineValues:e,shaderCode:t,schema:r})),renderbuffer:(t,r,n,i)=>d("renderbuffer",function(e,t,r,n,i){let s=x(e),l=()=>e.bindRenderbuffer(e.RENDERBUFFER,s),c=function(e,t){switch(t){case"depth16":return e.DEPTH_COMPONENT16;case"stencil8":return e.STENCIL_INDEX8;case"rgba4":return e.RGBA4;case"depth-stencil":return e.DEPTH_STENCIL;case"depth24":if((0,a.D0)(e))return e.DEPTH_COMPONENT24;throw Error("WebGL2 needed for `depth24` renderbuffer format");case"depth32f":if((0,a.D0)(e))return e.DEPTH_COMPONENT32F;throw Error("WebGL2 needed for `depth32f` renderbuffer format");case"depth24-stencil8":if((0,a.D0)(e))return e.DEPTH24_STENCIL8;throw Error("WebGL2 needed for `depth24-stencil8` renderbuffer format");case"depth32f-stencil8":if((0,a.D0)(e))return e.DEPTH32F_STENCIL8;throw Error("WebGL2 needed for `depth32f-stencil8` renderbuffer format")}}(e,t),d=function(e,t){switch(t){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"depth-stencil":return e.DEPTH_STENCIL_ATTACHMENT;case"color0":return e.COLOR_ATTACHMENT0}}(e,r);function p(){l(),e.renderbufferStorage(e.RENDERBUFFER,c,n,i)}p();let f=!1;return{id:y(),getByteCount:()=>(function(e){switch(e){case"depth16":case"rgba4":case"depth-stencil":case"depth32f":case"depth24-stencil8":return 4;case"stencil8":return 2;case"depth24":return 3;case"depth32f-stencil8":return 5}})(t)*n*i,bind:l,attachFramebuffer:t=>{t.bind(),l(),e.framebufferRenderbuffer(e.FRAMEBUFFER,d,e.RENDERBUFFER,s),u.Au&&o(e)},detachFramebuffer:t=>{t.bind(),l(),e.framebufferRenderbuffer(e.FRAMEBUFFER,d,e.RENDERBUFFER,null),u.Au&&o(e)},setSize:(e,t)=>
7316{n=e,i=t,p()},reset:()=>{s=x(e),p()},destroy:()=>{f||(e.deleteRenderbuffer(s),f=!0)}}}(e,t,r,n,i)),shader:w,texture:(t,r,a,i)=>d("texture",(0,S.cU)(e,n,t,r,a,i)),cubeTexture:(t,r,a)=>d("cubeTexture",(0,S.aN)(e,t,r,a)),vertexArray:(t,r,a)=>d("vertexArray",function(e,t,r,a,n){let i=T(),o=C(t),s=O(t);function l(){s.bindVertexArray(o),n&&n.bind(),r.bindAttributes(a),s.bindVertexArray(null),u=!0}let u=!1,c=!1;return{id:i,bind:()=>{u||l(),s.bindVertexArray(o)},update:l,reset:()=>{o=C(t),s=O(t),u=!1},destroy:()=>{c||(n&&(s.bindVertexArray(o),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),s.deleteVertexArray(o),c=!0)}}}(e,n,t,r,a)),getByteCounts:()=>{let e=0;c.texture.forEach(t=>{e+=t.getByteCount()});let t=0;c.cubeTexture.forEach(e=>{t+=e.getByteCount()});let r=0;c.attribute.forEach(e=>{r+=e.getByteCount()});let a=0;c.elements.forEach(e=>{a+=e.getByteCount()});let n=0;c.pixelPack.forEach(e=>{n+=e.getByteCount()});let i=0;return c.renderbuffer.forEach(e=>{i+=e.getByteCount()}),{texture:e,cubeTexture:t,attribute:r,elements:a,pixelPack:n,renderbuffer:i}},linkPrograms:e=>{for(let t of D)(!e||e.includes(t.variant))&&t.link()},finalizePrograms:(e,t)=>{let r=!0,a=0;for(let t of D)t.isReady()&&D.delete(t),(!e||e.includes(t.variant))&&(r=!1,a+=1);if(r)return!0;let n=!0,i=0,o=(0,I.z)();for(let r of D)if((!e||e.includes(r.variant))&&(r.finalize(t)?(D.delete(r),i+=1):n=!1,!t&&(0,I.z)()-o>16)){n=!1;break}return u.kM&&console.log(`Finalized ${i} of ${a} programs (${e?e.join(", "):"all"}) in ${((0,I.z)()-o).toFixed(2)} ms`),n},reset:()=>{c.attribute.forEach(e=>e.reset()),c.elements.forEach(e=>e.reset()),c.pixelPack.forEach(e=>e.reset()),c.framebuffer.forEach(e=>e.reset()),c.renderbuffer.forEach(e=>e.reset()),c.shader.forEach(e=>e.reset()),c.program.forEach(e=>e.reset()),c.vertexArray.forEach(e=>e.reset()),c.texture.forEach(e=>e.reset()),c.cubeTexture.forEach(e=>e.reset())},destroy:()=>{c.attribute.forEach(e=>e.destroy()),c.elements.forEach(e=>e.destroy()),c.pixelPack.forEach(e=>e.destroy()),c.framebuffer.forEach(e=>e.destroy()),c.renderbuffer.forEach(e=>e.destroy()),c.shader.forEach(e=>e.destroy()),c.program.forEach(e=>e.destroy()),c.vertexArray.forEach(e=>e.destroy()),c.texture.forEach(e=>e.destroy()),c.cubeTexture.forEach(e=>e.destroy()),h.clear(),E.clear(),D.clear()}}}(e,n,h,r,M),N=(0,E.e)(e,r,h);if(M.maxVertexTextureImageUnits<8)throw Error('Need "MAX_VERTEX_TEXTURE_IMAGE_UNITS" >= 8');let U={vertex:G(e,"vertex"),fragment:G(e,"fragment")};u.Au&&console.log({parameters:M,shaderPrecisionFormats:U});let V=r.provokingVertex;null==V||V.provokingVertex(V.FIRST_VERTEX_CONVENTION);let j=!1,H=new D.x,q=t.pixelScale||1,X={session:void 0,layer:void 0,changed:new D.x,clear:()=>{X.layer=void 0,X.session=void 0,X.changed.next()}},W=new Set;return{gl:e,isWebGL2:(0,a.D0)(e),get pixelRatio(){return("undefined"!=typeof window&&window.devicePixelRatio||1)*(q||1)},extensions:r,state:n,stats:h,resources:P,timer:N,get maxTextureSize(){return M.maxTextureSize},get max3dTextureSize(){return M.max3dTextureSize},get maxRenderbufferSize(){return M.maxRenderbufferSize},get maxDrawBuffers(){return M.maxDrawBuffers},get maxTextureImageUnits(){return M.maxTextureImageUnits},get shaderPrecisionFormats(){return U},namedComputeRenderables:Object.create(null),namedFramebuffers:Object.create(null),namedTextures:Object.create(null),get isContextLost(){return j||e.isContextLost()},contextRestored:H,setContextLost:()=>{j=!0,N.clear()},handleContextRestored:t=>{!function(e,t){let r=d(e);(0,c.mt)(t,(e,a)=>{"noNonInstancedActiveAttribs"===a?t.noNonInstancedActiveAttribs=r.noNonInstancedActiveAttribs:null!==e&&(null===r[a]?t[a]=null:Object.assign(e,r[a]))})}(e,r),n.reset(),n.currentMaterialId=-1,n.currentProgramId=-1,n.currentRenderItemId=-1,P.reset(),W.forEach(e=>e.reset()),null==t||t(),j=!1,H.next((0,I.z)())},xr:{get session(){return X.session},changed:X.changed,set:async(t,r)=>{var a,n;if(X.session!==t&&(await (null===(a=X.session)||void 0===a?void 0:a.end()),void 0!==t))try{await e.makeXRCompatible(),X.session=t,X.layer=new XRWebGLLayer(X.session,e,{antialias:!0,alpha:!0,depth:!0,framebufferScaleFactor:q*(null!==(n=null==r?void 0:r.resolutionScale)&&void 0!==n?n:1)}),await X.session.updateRenderState({baseLayer:X.layer}),X.session.addEventListener("end",X.clear),X.changed.next()}catch(e){throw t?await t.end():(X.layer=void 0,X.session=void 0),e}},end:async()=>{var e;return null===(e=X.session)||void 0===e?void 0:e.end()}},setPixelScale:e=>{q=e},createRenderTarget:(t,r,n,i,o,s)=>{let l=function(e,t,r,n,i=!0,o="uint8",s="nearest",l="rgba"){if("alpha"===l&&!(0,a.D0)(e))throw Error("cannot render to alpha format in webgl1");let u=t.framebuffer(),c="fp16"===o?t.texture("image-float16",l,"fp16",s):"float32"===o?t.texture("image-float32",l,"float",s):t.texture("image-uint8",l,"ubyte",s),d=i?(0,a.D0)(e)?t.renderbuffer("depth32f","depth",r,n):t.renderbuffer("depth16","depth",r,n):null;function p(){c.define(r,n),c.attachFramebuffer(u,"color0"),d&&d.attachFramebuffer(u)}p();let f=!1;return{id:w(),texture:c,framebuffer:u,depthRenderbuffer:d,getByteCount:()=>c.getByteCount()+(d?d.getByteCount():0),getWidth:()=>r,getHeight:()=>n,bind:()=>{u.bind()},setSize:(e,t)=>
7316{(r!==e||n!==t)&&(r=e,n=t,c.define(r,n),d&&d.setSize(r,n))},reset:()=>{p()},destroy:()=>{f||(c.destroy(),u.destroy(),d&&d.destroy(),f=!0)}}}(e,P,t,r,n,i,o,s);return W.add(l),{...l,destroy:()=>{l.destroy(),W.delete(l)}}},createDrawTarget:()=>({id:-1,texture:(0,S.DU)(e),framebuffer:{id:i(),bind:()=>{},reset:()=>{},destroy:()=>{}},depthRenderbuffer:null,getByteCount:()=>0,getWidth:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode).width},getHeight:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode).height},bind:()=>{L(e,X.layer)},setSize:()=>{},reset:()=>{},destroy:()=>{}}),bindDrawingBuffer:()=>L(e,X.layer),getDrawingBufferSize:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode)},readPixels:(t,r,n,i,s)=>{!function(e,t,r,n,i,s){if(u.Au&&o(e),s instanceof Uint8Array)e.readPixels(t,r,n,i,e.RGBA,e.UNSIGNED_BYTE,s);else if(s instanceof Float32Array)e.readPixels(t,r,n,i,e.RGBA,e.FLOAT,s);else if(s instanceof Int32Array&&(0,a.D0)(e))e.readPixels(t,r,n,i,e.RGBA_INTEGER,e.INT,s);else throw Error("unsupported readPixels buffer type");u.Au&&k(e)}(e,t,r,n,i,s)},waitForGpuCommandsComplete:()=>new Promise(t=>{(0,a.D0)(e)?function(e,t){let r=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0);r?l.b2.setImmediate(_,e,r,t):(console.warn("Could not create a WebGLSync object"),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,B),t())}(e,t):(R||(console.info("Sync object not supported in WebGL"),R=!0),F(e),t())}),waitForGpuCommandsCompleteSync:()=>F(e),getFenceSync:()=>(0,a.D0)(e)?e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0):null,checkSyncStatus:t=>!(0,a.D0)(e)||e.getSyncParameter(t,e.SYNC_STATUS)===e.SIGNALED&&(e.deleteSync(t),!0),deleteSync:t=>{(0,a.D0)(e)&&e.deleteSync(t)},clear:(t,r,a,i)=>{let o=z(e,X.layer);L(e,X.layer),n.enable(e.SCISSOR_TEST),n.depthMask(!0),n.colorMask(!0,!0,!0,!0),n.clearColor(t,r,a,i),n.viewport(0,0,o.width,o.height),n.scissor(0,0,o.width,o.height),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)},checkError:t=>{k(e,t)},checkFramebufferStatus:t=>{o(e,t)},destroy:t=>{var r,n,i,o;P.destroy(),function(e){let t=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);for(let r=0;r<t;++r)e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null),(0,a.D0)(e)&&(e.bindTexture(e.TEXTURE_2D_ARRAY,null),e.bindTexture(e.TEXTURE_3D,null));let r=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,r);let n=e.getParameter(e.MAX_VERTEX_ATTRIBS);for(let t=0;t<n;++t)e.vertexAttribPointer(t,1,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),(0,a.D0)(e)&&(e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBuffer(e.PIXEL_PACK_BUFFER,null))}(e),null===(r=X.session)||void 0===r||r.removeEventListener("end",X.clear),null===(n=X.session)||void 0===n||n.end(),H.complete(),X.changed.complete(),(null==t?void 0:t.doNotForceWebGLContextLoss)||(null===(i=e.getExtension("WEBGL_lose_context"))||void 0===i||i.loseContext(),null===(o=e.getExtension("STACKGL_destroy_context"))||void 0===o||o.destroy())}}}},717:function(e,t,r){r.d(t,{E:function(){return c},H:function(){return d}});var a=r(45705),n=r(25770),i=r(62763),o=r(16252),s=r(48502),l=r(62131);let u=(0,o.s)();function c(e){let t=e.createProgram();if(null===t)throw Error("Could not create WebGL program");return t}function d(e,t,r,o,d,p){let f,m;let{defineValues:h,shaderCode:g,schema:b}=p,y=c(e),x=u(),S=function(e){if("string"!=typeof e)throw Error(`unknown program variant: ${e}`);return e.startsWith("color")?"color":e.startsWith("pick")?"pick":e}(h.dRenderVariant.ref.value),T=(0,a.AA)(e,r,o,h,g),C=d("vert",T.vert),O=d("frag",T.frag),I=!1,A=!1,w=!1;function D(){C.attach(y),O.attach(y),e.linkProgram(y),s.Au&&function(e,t){if(!e.getProgramParameter(t,e.LINK_STATUS))throw Error(`Could not compile WebGL program. 
7317
7318${e.getProgramInfoLog(t)}`)}(e,y),I=!0}function E(){f=function(e,t,r){let a={};return Object.keys(r).forEach(i=>{let o=r[i];if("attribute"===o.type){let r=e.getAttribLocation(t,i);a[i]=r}else if("uniform"===o.type){let r=e.getUniformLocation(t,i);null===r&&(0,n.Dh)(o.kind)&&(r=e.getUniformLocation(t,i+"[0]")),a[i]=r}else if("texture"===o.type){let r=e.getUniformLocation(t,i);a[i]=r}}),a}(e,y,b),m=(0,n.ko)(b),s.Au&&(function(e,t,r){let a=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let n=0;n<a;++n){let a=e.getActiveAttrib(t,n);if(a){let{name:t,type:n}=a;if(t.startsWith("__activeAttribute")||"gl_InstanceID"===t||"gl_VertexID"===t||"gl_DrawID"===t||"gl_ViewID_OVR"===t)continue;let o=r[t];if(void 0===o)throw Error(`missing 'uniform' or 'texture' with name '${t}' in schema`);if("attribute"!==o.type)throw Error(`'${t}' must be of type 'attribute' but is '${o.type}'`);let s=(0,i.Ej)(e,o.kind,o.itemSize);if(s!==n)throw Error(`unexpected attribute type '${s}' for ${t}, expected '${n}'`)}}}(e,y,b),function(e,t,r){let a=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let i=0;i<a;++i){let a=e.getActiveUniform(t,i);if(a){let{name:t,type:i}=a;if(t.startsWith("__activeUniform")||"gl_InstanceID"===t||"gl_VertexID"===t||"gl_DrawID"===t||"gl_ViewID_OVR"===t)continue;let o=r[t.replace(/[[0-9]+\]$/,"")];if(void 0===o)throw Error(`missing 'uniform' or 'texture' with name '${t}' in schema`);if("uniform"===o.type){if((0,n.Yn)(e,o.kind)!==i)throw Error(`unexpected uniform type for ${t}`)}else if("texture"===o.type){if("image-float32"===o.kind||"image-uint8"===o.kind){if(i!==e.
7318SAMPLER_2D)throw Error(`unexpected sampler type for '${t}'`)}else if("volume-float32"===o.kind||"volume-uint8"===o.kind){if((0,l.D0)(e)){if(i!==e.SAMPLER_3D)throw Error(`unexpected sampler type for '${t}'`)}else throw Error("WebGL2 is required to use SAMPLER_3D")}}else throw Error(`'${t}' must be of type 'uniform' or 'texture' but is '${o.type}'`)}}}(e,y,b)),A=!0}return"compute"===S&&D(),{id:x,variant:S,isReady:()=>A,link:()=>{I||D()},finalize:t=>(I||D(),!A&&(t||!r.parallelShaderCompile||e.getProgramParameter(y,r.parallelShaderCompile.COMPLETION_STATUS))&&E(),A),use:()=>{if(s.Au&&!A)throw Error(`program not finalized: ${S}`);t.currentProgramId=x,e.useProgram(y)},setUniforms:t=>{for(let r=0,a=t.length;r<a;++r){let[a,n]=t[r];if(n){let t=f[a];null!==t&&m[a](e,t,n.ref.value)}}},uniform:(t,r)=>{let a=f[t];null!==a&&m[t](e,a,r)},bindAttributes:e=>{t.clearVertexAttribsState();for(let t=0,r=e.length;t<r;++t){let[r,a]=e[t],n=f[r];-1!==n&&a.bind(n)}t.disableUnusedVertexAttribs()},offsetAttributes:(e,t)=>{for(let r=0,a=e.length;r<a;++r){let[a,n]=e[r],i=f[a];-1!==i&&n.changeOffset(i,t)}},bindTextures:(t,r)=>{for(let a=0,n=t.length;a<n;++a){let[n,i]=t[a],o=f[n];null!=o&&(i.bind(a+r),m[n](e,o,a+r))}},reset:()=>{y=c(e),I&&D(),A&&E()},destroy:()=>{w||(C.destroy(),O.destroy(),e.deleteProgram(y),w=!0)}}}},57155:function(e,t,r){r.d(t,{s8:function(){return y},ww:function(){return b}});var a=r(62763),n=r(91407),i=r(18406),o=r(16252),s=r(85764),l=r(48502),u=r(36111),c=r(67546),d=r(25770);let p=(0,o.s)(),f=["color","pick","depth","marking","emissive","tracing"],m=["compute"];function h(e,t,r,a,n){return r={...r,dRenderVariant:s.IO.create(t)},void 0===n.dRenderVariant&&Object.defineProperty(n,"dRenderVariant",{value:(0,i.O0)("string")}),e.resources.program(r,a,n)}function g(e,t){if("color"===e)switch(t){case"blended":return"colorBlended";case"wboit":return"colorWboit";case"dpoit":return"colorDpoit"}return e}function b(e,t,r,a,n,i,o){return x(e,t,r,a,n,i,f,o)}function y(e,t,r,a,n,i=-1){return x(e,t,r,a,n,i,m,void 0)}function x(e,t,r,o,f,m,b,y){let x;let S=p(),{stats:T,state:C,resources:O}=e,{instancedArrays:I,vertexArrayObject:A,multiDrawInstancedBaseVertexBaseInstance:w,drawInstancedBaseVertexBaseInstance:D}=e.extensions;if(b=b.filter(t=>"tracing"!==t||!!e.extensions.drawBuffers),f.uVertexCount&&!e.extensions.noNonInstancedActiveAttribs){let e=f.uVertexCount.ref.value;f.aVertex=s.IO.create((0,u.d_)(new Float32Array(e))),o.aVertex=(0,i.LQ)("float32",1,0)}let{attributeValues:E,defineValues:M,textureValues:P,materialTextureValues:k,uniformValues:B,materialUniformValues:_,bufferedUniformValues:R}=(0,i.kA)(o,f),F=Object.entries(B),L=Object.entries(_),z=Object.entries(R),N=Object.entries((0,d.vZ)(R)),G=Object.entries(M),U=(0,i.Xe)(f),V=function(e,t){let{gl:r}=e;switch(t){case"points":return r.POINTS;case"lines":return r.LINES;case"line-strip":return r.LINE_STRIP;case"line-loop":return r.LINE_LOOP;case"triangles":return r.TRIANGLES;case"triangle-strip":return r.TRIANGLE_STRIP;case"triangle-fan":return r.TRIANGLE_FAN}}(e,t),j={};for(let t of b)j[t]=h(e,g(t,y),M,r,o);let H=(0,n.cE)(e,o,P),q=(0,n.cE)(e,o,k),X=(0,a.MX)(e,o,E),W=[];for(let e=0,t=X.length;e<t;++e){let t=X[e];
73181===t[1].divisor&&W.push(t)}let K=f.elements;K&&K.ref.value&&(x=O.elements(K.ref.value));let Q={};for(let e of b)Q[e]=A?O.vertexArray(j[e],X,x):null;let Z=f.drawCount.ref.value,Y=f.instanceCount.ref.value;T.drawCount+=Z,T.instanceCount+=Y,T.instancedDrawCount+=Y*Z;let $={attributes:!1,defines:!1,elements:!1,textures:!1},J=!1,ee=-1;return{id:S,materialId:m,getByteCount(){let e=0;for(let t=0,r=X.length;t<r;++t)e+=X[t][1].getByteCount();x&&(e+=x.getByteCount());for(let t=0,r=H.length;t<r;++t)e+=H[t][1].getByteCount();for(let t=0,r=q.length;t<r;++t)e+=q[t][1].getByteCount();return e},getProgram:e=>j[e],setTransparency:t=>{if(t!==y)for(let a of(y=t,b))j[a].destroy(),j[a]=h(e,g(a,y),M,r,o)},render:(t,r,a)=>{if(0===Z||0===Y)return;let n=j[t];if(n.id===ee&&C.currentRenderItemId===S)n.setUniforms(F),n.bindTextures(H,r);else{let e=Q[t];(n.id!==C.currentProgramId||n.id!==ee||-1===m||m!==C.currentMaterialId)&&(n.id!==C.currentProgramId&&n.use(),n.setUniforms(L),n.bindTextures(q,r+H.length),C.currentMaterialId=m,ee=n.id),n.setUniforms(F),n.setUniforms(N),n.bindTextures(H,r),e?(e.bind(),x&&x.bind()):(x&&x.bind(),n.bindAttributes(X)),C.currentRenderItemId=S}if(l.Au&&e.checkFramebufferStatus(`Framebuffer error rendering item id ${S}`),a){for(let e of a)if(0!==e.count){if(n.setUniforms(e.uniforms),w)x?w.multiDrawElementsInstancedBaseVertexBaseInstance(V,e.counts,0,x._dataType,e.offsets,0,e.instanceCounts,0,e.baseVertices,0,e.baseInstances,0,e.count):w.multiDrawArraysInstancedBaseInstance(V,e.firsts,0,e.counts,0,e.instanceCounts,0,e.baseInstances,0,e.count);else if(D){if(x)for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),D.drawElementsInstancedBaseVertexBaseInstance(V,e.counts[t],x._dataType,e.offsets[t],e.instanceCounts[t],e.baseVertices[t],e.baseInstances[t]));else for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),D.drawArraysInstancedBaseInstance(V,e.firsts[t],e.counts[t],e.instanceCounts[t],e.baseInstances[t]))}else if(x)for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),n.offsetAttributes(W,e.baseInstances[t]),I.drawElementsInstanced(V,e.counts[t],x._dataType,e.offsets[t],e.instanceCounts[t]));else for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),n.offsetAttributes(W,e.baseInstances[t]),I.drawArraysInstanced(V,0,e.counts[t],e.instanceCounts[t]));if(l.kM){w?T.calls.multiDrawInstancedBase+=1:D?T.calls.drawInstancedBase+=e.count:T.calls.drawInstanced+=e.count;for(let t=0;t<e.count;++t)T.calls.counts+=e.instanceCounts[t]}}}else{let e=0;for(;;){let t=Math.min(Z-e,3e7);if(x?I.drawElementsInstanced(V,t,x._dataType,e*x._bpe,Y):I.drawArraysInstanced(V,e,t,Y),(e+=t)>=Z)break}l.kM&&(T.calls.drawInstanced+=1,T.calls.counts+=Y)}l.Au&&e.checkError(`Draw error rendering item id ${S}`)},update:()=>{if($.attributes=!1,$.defines=!1,$.elements=!1,$.textures=!1,f.aVertex){let e=f.uVertexCount.ref.value;f.aVertex.ref.value.length<e&&s.IO.update(f.aVertex,(0,u.d_)(new Float32Array(e)))}for(let e=0,t=G.length;e<t;++e){let[t,r]=G[e];r.ref.version!==U[t]&&($.defines=!0,U[t]=r.ref.version)}if($.defines)for(let t of b)j[t].destroy(),j[t]=h(e,g(t,y),M,r,o);f.drawCount.ref.version!==U.drawCount&&(T.drawCount+=f.drawCount.ref.value-Z,T.instancedDrawCount+=Y*f.drawCount.ref.value-Y*Z,Z=f.drawCount.ref.value,U.drawCount=f.drawCount.ref.version),f.instanceCount.ref.version!==U.instanceCount&&(T.instanceCount+=f.instanceCount.ref.value-Y,T.instancedDrawCount+=f.instanceCount.ref.value*Z-Y*Z,Y=f.instanceCount.ref.value,U.instanceCount=f.instanceCount.ref.version);for(let e=0,t=X.length;e<t;++e){let[t,r]=X[e],a=E[t];if(a.ref.version!==U[t]){if(r.length>=a.ref.value.length)r.updateSubData(a.ref.value,0,r.length);else{r.destroy();let{itemSize:n,divisor:i}=o[t];X[e][1]=O.attribute(a.ref.value,n,i),$.attributes=!0}U[t]=a.ref.version}}if(x&&f.elements.ref.version!==U.elements&&(x.length>=f.elements.ref.value.length?x.updateSubData(f.elements.ref.value,0,x.length):(x.destroy(),x=O.elements(f.elements.ref.value),$.elements=!0),U.elements=f.elements.ref.version),$.attributes||$.defines||$.elements)for(let e of b){let t=Q[e];t&&t.destroy(),Q[e]=A?O.vertexArray(j[e],X,x):null}for(let e=0,t=H.length;e<t;++e){let[t,r]=H[e],a=P[t];a.ref.version!==U[t]&&("texture"!==o[t].kind?(r.load(a.ref.value),$.textures=!0):H[e][1]=a.ref.value,U[t]=a.ref.version)}for(let e=0,t=q.length;e<t;++e){let[t,r]=q[e],a=k[t];a.ref.version!==U[t]&&("texture"!==o[t].kind?(r.load(a.ref.value),$.textures=!0):q[e][1]=a.ref.value,U[t]=a.ref.version)}for(let e=0,t=z.length;e<t;++e){let[t,r]=z[e];r.ref.version!==U[t]&&(s.IO.update(N[e][1],(0,c.I8)(r.ref.value)),U[t]=r.ref.version)}},destroy:()=>
7318{if(!J){for(let e of b){j[e].destroy();let t=Q[e];t&&t.destroy()}H.forEach(([e,t])=>{"texture"!==o[e].kind&&t.destroy()}),q.forEach(([e,t])=>{"texture"!==o[e].kind&&t.destroy()}),X.forEach(([e,t])=>t.destroy()),x&&x.destroy(),T.drawCount-=Z,T.instanceCount-=Y,T.instancedDrawCount-=Y*Z,J=!0}}}}},59837:function(e,t,r){r.d(t,{X:function(){return o},e:function(){return s}});var a=r(16252),n=r(48502);let i=(0,a.s)();function o(e,t){let{type:r,source:a}=t,i=e.createShader("vert"===r?e.VERTEX_SHADER:e.FRAGMENT_SHADER);if(null===i)throw Error(`Error creating ${r} shader`);if(e.shaderSource(i,a),e.compileShader(i),n.Au&&!1===e.getShaderParameter(i,e.COMPILE_STATUS))throw console.warn(`'${r}' shader info log '${e.getShaderInfoLog(i)}'
7319${function(e){let t=e.split("\n");for(let e=0;e<t.length;++e)t[e]=e+1+": "+t[e];return t.join("\n")}(a)}`),Error(`Error compiling ${r} shader`);return i}function s(e,t){let r=o(e,t);return{id:i(),attach:t=>{e.attachShader(t,r)},reset:()=>{r=o(e,t)},destroy:()=>{e.deleteShader(r)}}}},91407:function(e,t,r){r.d(t,{DU:function(){return O},aN:function(){return T},cE:function(){return x},cU:function(){return y},eP:function(){return S},oL:function(){return p},q9:function(){return C},tX:function(){return d},y6:function(){return c}});var a=r(85764),n=r(16252),i=r(62131),o=r(97667),s=r(67546),l=r(58463);let u=(0,n.s)();function c(e,t,r){switch(t){case"alpha":if((0,i.D0)(e)&&("float"===r||"fp16"===r))return e.RED;if((0,i.D0)(e)&&"int"===r)return e.RED_INTEGER;return e.ALPHA;case"rgb":if((0,i.D0)(e)&&"int"===r)return e.RGB_INTEGER;return e.RGB;case"rg":if((0,i.D0)(e)&&("float"===r||"fp16"===r))return e.RG;if((0,i.D0)(e)&&"int"===r)return e.RG_INTEGER;throw Error('texture format "rg" requires webgl2 and type "float" or int"');case"rgba":if((0,i.D0)(e)&&"int"===r)return e.RGBA_INTEGER;return e.RGBA;case"depth":return e.DEPTH_COMPONENT}}function d(e,t){return function(e){switch(e){case"alpha":return 1;case"rg":return 2;case"rgb":return 3;case"rgba":case"depth":return 4}}(e)*function(e){switch(e){case"ubyte":return 1;case"ushort":case"fp16":return 2;case"float":case"int":return 4}}(t)}function p(e,t,r){switch(r){case"ubyte":return e.UNSIGNED_BYTE;case"ushort":return e.UNSIGNED_SHORT;case"float":return e.FLOAT;case"fp16":if(t.textureHalfFloat)return t.textureHalfFloat.HALF_FLOAT;throw Error('extension "texture_half_float" unavailable');case"int":if((0,i.D0)(e))return e.INT;throw Error('texture type "int" requires webgl2')}}function f(e,t){switch(t){case"nearest":return e.NEAREST;case"linear":return e.LINEAR}}function m(e,t,r){switch(r){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"color0":case 0:return e.COLOR_ATTACHMENT0}if(t.drawBuffers)switch(r){case"color1":case 1:return t.drawBuffers.COLOR_ATTACHMENT1;case"color2":case 2:return t.drawBuffers.COLOR_ATTACHMENT2;case"color3":case 3:return t.drawBuffers.COLOR_ATTACHMENT3;case"color4":case 4:return t.drawBuffers.COLOR_ATTACHMENT4;case"color5":case 5:return t.drawBuffers.COLOR_ATTACHMENT5;case"color6":case 6:return t.drawBuffers.COLOR_ATTACHMENT6;case"color7":case 7:return t.drawBuffers.COLOR_ATTACHMENT7}throw Error("unknown texture attachment")}function h(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement}function g(e,t,r){return t===r.TEXTURE_3D}function b(e){let t=e.createTexture();if(null===t)throw Error("Could not create WebGL texture");return t}function y(e,t,r,a,n,o){let s;let y=u(),x=b(e);if(r.endsWith("float32")&&"float"!==n||r.endsWith("float16")&&"fp16"!==n||r.endsWith("uint8")&&"ubyte"!==n||r.endsWith("int32")&&"int"!==n||r.endsWith("depth")&&"ushort"!==n&&"float"!==n)throw Error(`texture kind '${r}' and type '${n}' are incompatible`);
7319if(!t.depthTexture&&"depth"===a)throw Error("extension 'WEBGL_depth_texture' needed for 'depth' texture format");let S=function(e,t){switch(t){case"image-uint8":case"image-float32":case"image-float16":case"image-depth":return e.TEXTURE_2D}if((0,i.D0)(e))switch(t){case"image-int32":return e.TEXTURE_2D;case"volume-uint8":case"volume-float32":case"volume-float16":return e.TEXTURE_3D}throw Error(`unknown texture kind '${t}'`)}(e,r),T=f(e,o),C=c(e,a,n),O=function(e,t,r){if((0,i.D0)(e))switch(t){case"alpha":switch(r){case"ubyte":return e.ALPHA;case"float":return e.R32F;case"fp16":return e.R16F;case"int":return e.R32I}case"rg":switch(r){case"ubyte":return e.RG;case"float":return e.RG32F;case"fp16":return e.RG16F;case"int":return e.RG32I}case"rgb":switch(r){case"ubyte":return e.RGB;case"float":return e.RGB32F;case"fp16":return e.RGB16F;case"int":return e.RGB32I}case"rgba":switch(r){case"ubyte":return e.RGBA;case"float":return e.RGBA32F;case"fp16":return e.RGBA16F;case"int":return e.RGBA32I}case"depth":switch(r){case"ushort":return e.DEPTH_COMPONENT16;case"float":return e.DEPTH_COMPONENT32F}}return c(e,t,r)}(e,a,n),I=p(e,t,n);function A(){e.bindTexture(S,x),e.texParameteri(S,e.TEXTURE_MAG_FILTER,T),e.texParameteri(S,e.TEXTURE_MIN_FILTER,T),e.texParameteri(S,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(S,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(S,null)}A();let w=0,D=0,E=0,M=!1,P=!1;function k(t,r,a){if(0===t||0===r||(0,i.D0)(e)&&S===e.TEXTURE_3D&&0===a)throw Error("empty textures are not allowed");if(w!==t||D!==r||E!==(a||0)){if(w=t,D=r,E=a||0,e.bindTexture(S,x),S===e.TEXTURE_2D)e.texImage2D(S,0,O,w,D,0,C,I,null);else if((0,i.D0)(e)&&S===e.TEXTURE_3D&&void 0!==E)e.texImage3D(S,0,O,w,D,E,0,C,I,null);else throw Error("unknown texture target")}}function B(t,r=!1){if(0===t.width||0===t.height||!h(t)&&(0,i.D0)(e)&&g(t,S,e)&&0===t.depth)throw Error("empty textures are not allowed");if(e.bindTexture(S,x),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),h(t))w=t.width,D=t.height,e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(e.TEXTURE_2D,x),e.texImage2D(e.TEXTURE_2D,0,O,C,I,t);else if(S===e.TEXTURE_2D){let a=t.filter?f(e,t.filter):T;e.texParameteri(S,e.TEXTURE_MAG_FILTER,a),e.texParameteri(S,e.TEXTURE_MIN_FILTER,a),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!!t.flipY),r?e.texSubImage2D(S,0,0,0,t.width,t.height,C,I,t.array):(w=t.width,D=t.height,e.texImage2D(S,0,O,w,D,0,C,I,t.array))}else if((0,i.D0)(e)&&g(t,S,e))e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),r?e.texSubImage3D(S,0,0,0,0,t.width,t.height,t.depth,C,I,t.array):(w=t.width,D=t.height,E=t.depth,e.texImage3D(S,0,O,w,D,E,0,C,I,t.array));else throw Error("unknown texture target");e.bindTexture(S,null),s=t}function _(){if(S!==e.TEXTURE_2D)throw Error("mipmap only supported for 2d textures");if((0,i.D0)(e)||(0,l.wt)(w)&&(0,l.wt)(D))e.bindTexture(S,x),e.texParameteri(S,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(S),e.bindTexture(S,null),M=!0;else throw Error("mipmap unsupported for non-power-of-two textures and webgl1")}return k(1,1,(0,i.D0)(e)&&S===e.TEXTURE_3D?1:0),{id:y,target:S,format:C,internalFormat:O,type:I,filter:T,getWidth:()=>w,getHeight:()=>D,getDepth:()=>E,getByteCount:()=>{var e,t,r;return e=w,t=D,r=E,d(a,n)*e*t*(r||1)},define:k,load:B,mipmap:_,bind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(S,x)},unbind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(S,null)},attachFramebuffer:function(r,a,n){if(r.bind(),S===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,m(e,t,a),e.TEXTURE_2D,x,0);else if((0,i.D0)(e)&&S===e.TEXTURE_3D){if(void 0===n)throw Error("need `layer` to attach 3D texture");e.framebufferTextureLayer(e.FRAMEBUFFER,m(e,t,a),x,0,n)}else throw Error("unknown/unsupported texture target")},detachFramebuffer:(r,a)=>{if(r.bind(),S===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,m(e,t,a),e.TEXTURE_2D,null,0);else if((0,i.D0)(e)&&S===e.TEXTURE_3D)e.framebufferTextureLayer(e.FRAMEBUFFER,m(e,t,a),null,0,0);else throw Error("unknown texture target")},reset:()=>{x=b(e),A();let[t,r,a]=[w,D,E];w=0,D=0,E=0,k(t,r,a),s&&B(s),M&&_()},destroy:()=>{P||(e.deleteTexture(x),P=!0)}}}function x(e,t,r){let{resources:a}=e,n=[];
7319return Object.keys(t).forEach(e=>{let i=t[e];if("texture"===i.type){let t=r[e];if(t){if("texture"===i.kind)n[n.length]=[e,t.ref.value];else{let r=a.texture(i.kind,i.format,i.dataType,i.filter);r.load(t.ref.value),n[n.length]=[e,r]}}}}),n}function S(e,t,r){let n=new Image;n.onload=function(){r.load(n),a.IO.update(t,r)},n.src=e}function T(e,t,r,a){let n=e.TEXTURE_CUBE_MAP,i=e.LINEAR,l=e.RGBA,c=e.RGBA,p=e.UNSIGNED_BYTE,f=0,m=e.createTexture();function h(t,o,s,u){0===f&&(f=s.width),e.bindTexture(n,m),e.texImage2D(t,o,l,f,f,0,c,p,null),e.pixelStorei(e.UNPACK_ALIGNMENT,4),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(n,m),e.texImage2D(t,o,l,c,p,s),6!==(y+=1)||(x||(r?(e.texParameteri(n,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(n)):e.texParameteri(n,e.TEXTURE_MIN_FILTER,i),e.texParameteri(n,e.TEXTURE_MAG_FILTER,i)),u||null==a||a(x))}e.bindTexture(n,m);let g=[],y=0;(0,s.mt)(t,(t,r)=>{if(!t)return;let n=function(e,t){switch(t){case"nx":return e.TEXTURE_CUBE_MAP_NEGATIVE_X;case"ny":return e.TEXTURE_CUBE_MAP_NEGATIVE_Y;case"nz":return e.TEXTURE_CUBE_MAP_NEGATIVE_Z;case"px":return e.TEXTURE_CUBE_MAP_POSITIVE_X;case"py":return e.TEXTURE_CUBE_MAP_POSITIVE_Y;case"pz":return e.TEXTURE_CUBE_MAP_POSITIVE_Z}}(e,r),i=new Image;t instanceof File?i.src=URL.createObjectURL(t):(0,o.y8)(t)?t.then(e=>{i.src=URL.createObjectURL(e)}):i.src=t,g.push({cubeTarget:n,level:0,image:i}),i.addEventListener("load",()=>{h(n,0,i,!1)}),i.addEventListener("error",()=>{null==a||a(!0)})});let x=!1;return{id:u(),target:n,format:c,internalFormat:l,type:p,filter:i,getWidth:()=>f,getHeight:()=>f,getDepth:()=>0,getByteCount:()=>{var e,t,a,n;return 6*(e="rgba",t="ubyte",a=f,n=f,d(e,t)*a*n*1)*(r?2:1)},define:()=>{},load:()=>{},mipmap:()=>{},bind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(n,m)},unbind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(n,null)},attachFramebuffer:()=>{},detachFramebuffer:()=>{},reset:()=>{for(let{cubeTarget:t,level:r,image:a}of(m=b(e),e.bindTexture(n,m),y=0,g))h(t,r,a,!0)},destroy:()=>{x||(e.deleteTexture(m),x=!0)}}}function C(e){return -1===e.format}function O(e){var t;let r=null!==(t=null==e?void 0:e.TEXTURE_2D)&&void 0!==t?t:3553;return{id:u(),target:r,format:-1,internalFormat:0,type:0,filter:0,getWidth:()=>0,getHeight:()=>0,getDepth:()=>0,getByteCount:()=>0,define:()=>{},load:()=>{},mipmap:()=>{},bind:t=>{e&&(e.activeTexture(e.TEXTURE0+t),e.bindTexture(r,null))},unbind:t=>{e&&(e.activeTexture(e.TEXTURE0+t),e.bindTexture(r,null))},attachFramebuffer:()=>{throw Error("cannot attach null-texture to a framebuffer")},detachFramebuffer:()=>{throw Error("cannot detach null-texture from a framebuffer")},reset:()=>{},destroy:()=>{}}}},44712:function(e,t,r){r.d(t,{e:function(){return i},y:function(){return function e(t){t.map(t=>{let r=function(e){let t=`${(e.gpuElapsed/1e3/1e3).toFixed(2)}`,r=`${(e.gpuAvg/1e3/1e3).toFixed(2)}`,a=`${e.cpuElapsed.toFixed(2)}`,n=`${e.cpuAvg.toFixed(2)}`;return`${e.label} ${t} ms (avg. ${r} ms) | CPU: ${a} ms (avg. ${n} ms)`}(t);t.children.length||t.calls||t.note?(console.groupCollapsed(r),t.calls&&console.log(t.calls),t.note&&console.log(t.note),e(t.children),console.groupEnd()):console.log(r)})}}});var a=r(58400);class n{add(e,t){var r,a;let n=this.avgs.get(e)||t;return r=n,a=this.count,r-=r/a,n=r+=t/a,this.avgs.set(e,n),n}get(e){return this.avgs.get(e)}stats(){return Object.fromEntries(this.avgs.entries())}clear(){this.avgs.clear()}constructor(e){this.count=e,this.avgs=new Map}}function i(e,t,r,i){var o;let s=t.disjointTimerQuery,l=null!==(o=null==i?void 0:i.avgCount)&&void 0!==o?o:30,u=new Map,c=new Map,d=[],p=new n(l),f=new n(l),m=[],h=null,g=!1,b=()=>{c.clear(),d.length=0,p.clear(),f.clear(),m=[],h=null,g=!1,s&&u.forEach((e,t)=>{s.deleteQuery(t)}),u.clear()},y=()=>{if(!s)return;let e=t.disjointTimerQuery?t.disjointTimerQuery.createQuery():null;e&&(s.beginQuery(s.TIME_ELAPSED,e),c.forEach((t,r)=>{t.queries.push(e)}),u.set(e,{refCount:c.size}),h=e)};return{resolve:()=>{let t=[];if(!s||!m.length||g)return t;u.forEach((t,r)=>{if(void 0!==t.timeElapsed)return;let a=s.getQueryParameter(r,s.QUERY_RESULT_AVAILABLE),n=e.getParameter(s.GPU_DISJOINT);if(a&&!n){let e=s.getQueryParameter(r,s.QUERY_RESULT);t.timeElapsed=e}(a||n)&&s.deleteQuery(r)});let r=[];for(let e of m)if(e.queries.every(e=>{var t;
7319return(null===(t=u.get(e))||void 0===t?void 0:t.timeElapsed)!==void 0})){let r=0;for(let t of e.queries){let e=u.get(t);r+=e.timeElapsed,e.refCount-=1}if(e.timeElapsed=r,e.root){let a=[],n=(e,t)=>{for(let r of e){let e=r.timeElapsed,a=r.cpu.end-r.cpu.start,i={label:r.label,gpuElapsed:e,gpuAvg:p.add(r.label,e),cpuElapsed:a,cpuAvg:f.add(r.label,a),children:[],calls:r.calls,note:r.note};t.push(i),n(r.children,i.children)}};n(e.children,a);let i=e.cpu.end-e.cpu.start;t.push({label:e.label,gpuElapsed:r,gpuAvg:p.add(e.label,r),cpuElapsed:i,cpuAvg:f.add(e.label,i),children:a,calls:e.calls,note:e.note})}}else r.push(e);return m=r,u.forEach((e,t)=>{0===e.refCount&&u.delete(t)}),t},mark:(e,t)=>{var n;if(!s)return;if(c.has(e))throw Error(`Timer mark for '${e}' already exists`);let i=null!==(n=null==t?void 0:t.captureStats)&&void 0!==n&&n;null!==h&&s.endQuery(s.TIME_ELAPSED);let o={label:e,queries:[],children:[],root:null===h,cpu:{start:(0,a.z)(),end:-1},captureStats:i};if((null==t?void 0:t.note)&&(o.note=t.note),c.set(e,o),d.length&&d[d.length-1].children.push(o),d.push(o),i){if(g)throw Error("Already capturing stats");r.calls.drawInstanced=0,r.calls.drawInstancedBase=0,r.calls.multiDrawInstancedBase=0,r.calls.counts=0,r.culled.lod=0,r.culled.frustum=0,r.culled.occlusion=0,g=!0}y()},markEnd:e=>{var t;if(!s)return;let n=c.get(e);if(!n)throw Error(`Timer mark for '${e}' does not exist`);if((null===(t=d.pop())||void 0===t?void 0:t.label)!==e)throw Error(`Timer mark for '${e}' has pending nested mark`);s.endQuery(s.TIME_ELAPSED),c.delete(e),n.cpu.end=(0,a.z)(),n.captureStats&&(n.calls={...r.calls},g=!1),m.push(n),c.size>0?y():h=null},stats:()=>({gpu:p.stats(),cpu:f.stats()}),formatedStats:()=>{let e={},t=p.stats(),r=f.stats();for(let a of Object.keys(t)){let n=`${(t[a]/1e3/1e3).toFixed(2)}`,i=`${r[a].toFixed(2)}`;e[a]=`${n} ms | CPU: ${i} ms`}return e},clear:b,destroy:()=>{b()}}}},25770:function(e,t,r){r.d(t,{Dh:function(){return o},Yn:function(){return i},ko:function(){return S},vZ:function(){return T}});var a=r(85764),n=r(67546);function i(e,t){switch(t){case"b":case"b[]":return e.BOOL;case"f":case"f[]":return e.FLOAT;case"i":case"i[]":return e.INT;case"v2":case"v2[]":return e.FLOAT_VEC2;case"v3":case"v3[]":return e.FLOAT_VEC3;case"v4":case"v4[]":case"q":case"q[]":return e.FLOAT_VEC4;case"iv2":case"iv2[]":return e.INT_VEC2;case"iv3":case"iv3[]":return e.INT_VEC3;case"iv4":case"iv4[]":return e.INT_VEC4;case"m3":case"m3[]":return e.FLOAT_MAT3;case"m4":case"m4[]":return e.FLOAT_MAT4;default:console.error(`unknown uniform kind '${t}'`)}}function o(e){return e.endsWith("[]")}function s(e,t,r){e.uniform1f(t,r)}function l(e,t,r){e.uniform1fv(t,r)}function u(e,t,r){e.uniform1i(t,r)}function c(e,t,r){e.uniform1iv(t,r)}function d(e,t,r){e.uniform2fv(t,r)}function p(e,t,r){e.uniform3fv(t,r)}function f(e,t,r){e.uniform4fv(t,r)}function m(e,t,r){e.uniform2iv(t,r)}function h(e,t,r){e.uniform3iv(t,r)}function g(e,t,r){e.uniform4iv(t,r)}function b(e,t,r){e.uniformMatrix3fv(t,!1,r)}function y(e,t,r){e.uniformMatrix4fv(t,!1,r)}function x(e){switch(e){case"f":return s;case"f[]":return l;case"i":case"t":case"b":return u;case"i[]":case"t[]":case"b[]":return c;case"v2":case"v2[]":return d;case"v3":case"v3[]":return p;case"v4":case"v4[]":case"q":case"q[]":return f;case"iv2":case"iv2[]":return m;case"iv3":case"iv3[]":return h;case"iv4":case"iv4[]":return g;case"m3":case"m3[]":return b;case"m4":case"m4[]":return y}}function S(e){let t={};return Object.keys(e).forEach(r=>{let a=e[r];"uniform"===a.type?t[r]=x(a.kind):"texture"===a.type&&(t[r]=x("t"))}),t}function T(e){let t={};return Object.keys(e).forEach(r=>{t[r]=a.IO.create((0,n.I8)(e[r].ref.value))}),t}},94284:function(e,t,r){r.d(t,{l:function(){return a}});var a,n=r(85764),i=r(27594);(a||(a={})).fromBuffer=function(e,t){return{name:t,readBuffer:(t,r,a,o)=>{let s,l;if("number"==typeof r){a=(0,n.ce)(a,r);let o=Math.min(e.length,t+a);s=o-t,l=i.z.fromUint8Array(new Uint8Array(e.buffer,t,o-t))}else{a=(0,n.ce)(a,r.length);let i=Math.min(e.length,t+a);r.set(e.subarray(t,i),o),s=i-t,l=r}return a!==s&&console.warn(`byteCount ${a} and bytesRead ${s} differ`),Promise.resolve({bytesRead:s,buffer:l})},writeBuffer:(e,t,r)=>(r=(0,n.ce)(r,t.length),console.error(".writeBuffer not implemented for FileHandle.fromBuffer"),Promise.resolve(0)),writeBufferSync:(e,t,r)=>(r=(0,n.ce)(r,t.length),console.error(".writeSync not implemented for FileHandle.fromBuffer"),0),close:n.ZT}}},27594:function(e,t,r){r.d(t,{z:function(){return a}});var a,n=r(85764);!function(e){function t(e){let t=new DataView(e.buffer);return Object.assign(e.subarray(0),{readInt8:e=>t.getInt8(e),readUInt8:e=>t.getUint8(e),writeInt8:(e,r)=>t.setInt8(r,e),writeUInt8:(e,r)=>t.setUint8(r,e),readInt16LE:e=>t.getInt16(e,!0),readInt32LE:e=>t.getInt32(e,!0),readUInt16LE:e=>t.getUint16(e,!0),readUInt32LE:e=>t.getUint32(e,!0),readFloatLE:e=>t.getFloat32(e,!0),readDoubleLE:e=>t.getFloat64(e,!0),writeInt16LE:(e,r)=>t.setInt16(r,e,!0),writeInt32LE:(e,r)=>t.setInt32(r,e,!0),writeUInt16LE:(e,r)=>t.setUint16(r,e,!0),writeUInt32LE:(e,r)=>t.setUint32(r,e,!0),writeFloatLE:(e,r)=>t.setFloat32(r,e,!0),writeDoubleLE:(e,r)=>t.setFloat64(r,e,!0),readInt16BE:e=>t.getInt16(e,!1),readInt32BE:e=>t.getInt32(e,!1),readUInt16BE:e=>t.getUint16(e,!1),readUInt32BE:e=>t.getUint32(e,!1),readFloatBE:e=>t.getFloat32(e,!1),readDoubleBE:e=>t.getFloat64(e,!1),writeInt16BE:(e,r)=>t.setInt16(r,e,!1),writeInt32BE:(e,r)=>t.setInt32(r,e,!1),writeUInt16BE:(e,r)=>t.setUint16(r,e,!1),writeUInt32BE:(e,r)=>t.setUint32(r,e,!1),writeFloatBE:(e,r)=>t.setFloat32(r,e,!1),writeDoubleBE:(e,r)=>t.setFloat64(r,e,!1),copy:(t,r,a,i)=>(r=(0,n.ce)(r,0),a=(0,n.ce)(a,0),i=(0,n.ce)(i,e.length),t.set(e.subarray(a,i),r),i-a)})}function r(e,t,r,a,n){for(let i=0;i<r;i+=a)for(let r=0;r<a;r++)t[n+i+a-r-1]=e[n+i+r]}e.fromUint8Array=t,e.fromArrayBuffer=function(e){return t(new Uint8Array(e))},e.fromBuffer=function(e){return e},e.IsNativeEndianLittle=13330===new Uint16Array(new Uint8Array([18,52]).buffer)[0],e.flipByteOrder=r,e.flipByteOrderInPlace2=function(e,t=0,r){let a=new Int16Array(e,t,r);for(let e=0,t=a.length;e<t;++e){let t=a[e];a[e]=(255&t)<<8|t>>8&255}},e.ensureLittleEndian=function(t,a,n,i,o){e.IsNativeEndianLittle||!n||i<=1||r(t,a,n,i,o)}}(a||(a={}))},35849:function(e,t,r){r.d(t,{$2:function(){return o},FS:function(){return s},SD:function(){return l},xT:function(){return n}});var a,n,i=r(27594);function o(e){return e===n.Float32?4:e===n.Int16||e===n.Uint16?2:1}function s(e,t){let r=o(t),a=new ArrayBuffer(r*e),s=i.z.fromArrayBuffer(a),l=i.z.IsNativeEndianLittle?a:new ArrayBuffer(r*e);return{type:t,elementByteSize:r,readBuffer:s,valuesBuffer:new Uint8Array(l),values:function(e,t,r=0,a){return e===n.Float32?new Float32Array(t,r,void 0):e===n.Int16?new Int16Array(t,r,void 0):e===n.Uint16?new Uint16Array(t,r,void 0):new Int8Array(t,r,a)}(t,l)}}async function l(e,t,r,a,n,o){return await t.readBuffer(r,e.readBuffer,a,n),e.elementByteSize>1&&(void 0!==o&&o!==i.z.IsNativeEndianLittle||!i.z.IsNativeEndianLittle)&&i.z.flip
7319ByteOrder(e.readBuffer,e.valuesBuffer,a,e.elementByteSize,n),e.values}(a=n||(n={})).Float32="float32",a.Int8="int8",a.Int16="int16",a.Uint16="uint16"},37461:function(e,t,r){r.d(t,{Qc:function(){return m},hc:function(){return p}});var a=r(54854),n=r(7600),i=r(94284),o=r(27594),s=r(35849);async function l(e){let{buffer:t}=await e.readBuffer(0,1024),r=String.fromCharCode(t.readUInt8(208),t.readUInt8(209),t.readUInt8(210),t.readUInt8(211));if("MAP "!==r)throw Error('ccp4 format error, missing "MAP " string');let a=[t.readUInt8(212),t.readUInt8(213)],n=!1;68===a[0]&&65===a[1]?n=!0:17===a[0]&&17===a[1]?n=!1:16>=t.readInt32LE(12)&&(n=!0);let i=n?e=>t.readInt32LE(4*e):e=>t.readInt32BE(4*e),o=n?e=>t.readFloatLE(4*e):e=>t.readFloatBE(4*e);return{header:{NC:i(0),NR:i(1),NS:i(2),MODE:i(3),NCSTART:i(4),NRSTART:i(5),NSSTART:i(6),NX:i(7),NY:i(8),NZ:i(9),xLength:o(10),yLength:o(11),zLength:o(12),alpha:o(13),beta:o(14),gamma:o(15),MAPC:i(16),MAPR:i(17),MAPS:i(18),AMIN:o(19),AMAX:o(20),AMEAN:o(21),ISPG:i(22),NSYMBT:i(23),LSKFLG:i(24),SKWMAT:[],SKWTRN:[],userFlag1:i(39),userFlag2:i(40),originX:o(49),originY:o(50),originZ:o(51),MAP:r,MACHST:a,ARMS:o(54)},littleEndian:n}}async function u(e,t,r,a,n,i){if(d(e)){let i=3*n;await r.readBuffer(a,t.readBuffer,n,i);let o=new Int8Array(t.valuesBuffer.buffer,i),s=(e.AMAX-e.AMIN)/255,l=.5*(e.AMIN+e.AMAX+s);for(let e=0;e<n;++e)t.values[e]=s*o[e]+l}else await (0,s.SD)(t,r,a,n,0,i)}function c(e){switch(e){case 0:return s.xT.Int8;case 1:return s.xT.Int16;case 2:return s.xT.Float32;case 3:throw Error("mode 3 unsupported, complex 16-bit integers");case 4:throw Error("mode 4 unsupported, complex 32-bit reals");case 6:s.xT.Uint16;case 16:throw Error("mode 16 unsupported, unsigned char * 3 (for rgb data, non-standard)")}throw Error(`unknown mode '${e}'`)}function d(e){return -128===e.userFlag1&&127===e.userFlag2}function p(e){return d(e)?s.xT.Float32:c(e.MODE)}async function f(e,t,r){await r.update({message:"Parsing CCP4/MRC/MAP file..."});let{header:a,littleEndian:n}=await l(e),i=1024+a.NSYMBT,o=c(a.MODE),d=p(a),f=a.NC*a.NR*a.NS,m=f*(0,s.$2)(o),h=(0,s.FS)(f,d);return u(a,h,e,i,m,n),{header:a,values:h.values,name:e.name}}function m(e,t){var r,s;return r=i.l.fromBuffer(o.z.fromUint8Array(e),t),s=e.length,a.iQ.create("Parse CCP4/MRC/MAP",async e=>{try{return n.X.success(await f(r,s,e))}catch(e){return n.X.error(e)}})}},49309:function(e,t,r){r.d(t,{Fz:function(){return p},i_:function(){return s}});let a=new ArrayBuffer(4);new Int32Array(a),new Float32Array(a);let n=new ArrayBuffer(4),i=new Int32Array(n),o=new Float32Array(n);function s(e){var t;return t=1.44269504*e,i[0]=8388608*((t<-126?-126:t)+126.94269504),o[0]}let l=new ArrayBuffer(8);new Int32Array(l),new Float32Array(l);let u=new ArrayBuffer(4),c=new Int32Array(u),d=new Float32Array(u);function p(e){return d[0]=e,11920928955078125e-23*c[0]-126.94269504}let f=new ArrayBuffer(16);new Int32Array(f),new Float32Array(f);let m=new ArrayBuffer(8);new Int32Array(m),new Float32Array(m);let h=new ArrayBuffer(4);new Int32Array(h),new Float32Array(h)},99592:function(e,t,r){r.d(t,{u:function(){return i}});var a=r(43975),n=r(2941);function i(){return i.create((0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)())}!function(e){var t;function r(e,t){for(let r=0;r<6;++r)n.H.copy(e[r],t[r]);return e}(t=e.PlaneIndex||(e.PlaneIndex={}))[t.Right=0]="Right",t[t.Left=1]="Left",t[t.Bottom=2]="Bottom",t[t.Top=3]="Top",t[t.Far=4]="Far",t[t.Near=5]="Near",e.create=function(e,t,r,a,n,i){return[e,t,r,a,n,i]},e.copy=r,e.clone=function(t){return r(e(),t)},e.fromProjectionMatrix=function(e,t){let r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],p=t[9],f=t[10],m=t[11],h=t[12],g=t[13],b=t[14],y=t[15];return n.H.setUnnormalized(e[0],o-r,c-s,m-d,y-h),n.H.setUnnormalized(e[1],o+r,c+s,m+d,y+h),n.H.setUnnormalized(e[2],o+a,c+l,m+p,y+g),n.H.setUnnormalized(e[3],o-a,c-l,m-p,y-g),n.H.setUnnormalized(e[4],o-i,c-u,m-f,y-b),n.H.setUnnormalized(e[5],o+i,c+u,m+f,y+b),e},e.intersectsSphere3D=function(e,t){let r=t.center,a=-t.radius;for(let t=0;t<6;++t)if(n.H.distanceToPoint(e[t],r)<a)return!1;return!0};let i=(0,a.A)();e.intersectsBox3D=function(e,t){for(let r=0;r<6;++r){let a=e[r];if(i[0]=a.normal[0]>0?t.max[0]:t.min[0],i[1]=a.normal[1]>0?t.max[1]:t.min[1],i[2]=a.normal[2]>0?t.max[2]:t.min[2],0>n.H.distanceToPoint(a,i))return!1}return!0},e.containsPoint=function(e,t){for(let r=0;r<6;++r)if(0>n.H.distanceToPoint(e[r],t))return!1;return!0}}(i||(i={}))},2941:function(e,t,r){r.d(t,{H:function(){return n}});var a=r(43975);function n(){return n.create(a.A.create(1,0,0),0)}!function(e){function t(e,t){return a.A.copy(e.normal,t.normal),e.constant=t.constant,e}function r(e,t,r){return a.A.copy(e.normal,t),e.constant=-a.A.dot(e.normal,r),e}e.create=function(e,t){return{normal:e,constant:t}},e.copy=t,e.clone=function(r){return t(e(),r)},e.normalize=function(e,t){let r=1/a.A.magnitude(t.normal);return a.A.scale(e.normal,t.normal,r),e.constant=t.constant*r,e},e.negate=function(e,t){return a.A.negate(e.normal,t.normal),e.constant=-t.constant,e},e.toArray=function(e,t,r){return a.A.toArray(e.normal,t,r),t[r+3]=e.constant,t},e.fromArray=function(e,t,r){return a.A.fromArray(e.normal,t,r),e.constant=t[r+3],e},e.fromNormalAndCoplanarPoint=r,e.fromCoplanarPoints=function(e,t,n,i){return r(e,a.A.triangleNormal((0,a.A)(),t,n,i),t),e};let n=(0,a.A)();function i(e,t){return a.A.dot(e.normal,t)+e.constant}e.setUnnormalized=function(e,t,r,i,o){a.A.set(n,t,r,i);let s=1/a.A.magnitude(n);return a.A.scale(e.normal,n,s),e.constant=o*s,e},e.distanceToPoint=i,e.distanceToSphere3D=function(e,t){return i(e,t.center)-t.radius},e.projectPoint=function(e,t,r){return a.A.scaleAndAdd(e,r,t.normal,-i(t,r))},e.intersectRay3D=function(e,t,r){let n=a.A.dot(t.normal,r.direction);if(0===n)return!1;let i=-(a.A.dot(t.normal,r.origin)+t.constant)/n;return!(i<0)&&(a.A.scaleAndAdd(e,r.origin,r.direction,i),!0)}}(n||(n={}))},27994:function(e,t,r){r.d(t,{o:function(){return n}});var a,n,i=r(31348);(a=n||(n={})).Descriptor={name:"atom_partial_charge"},a.Provider=i.n.create(a.Descriptor)},67370:function(e,t,r){r.d(t,{g:function(){return n},j:function(){return u}});var a,n,i=r(87144),o=r(54854),s=r(36111),l=r(67646);function u(e,t){return o.iQ.create("Create Volume",async()=>{let r;let{header:a,values:o}=e,u=i.es.Space(a.dim,[0,1,2],Float64Array);if(0===a.dataSetIds.length)r=o;else{let[e,n,i]=a.dim,s=((null==t?void 0:t.dataIndex)||0)+1,l=0,u=0;r=new Float64Array(e*n*i);for(let t=0;t<e;t++)for(let e=0;e<n;e++)for(let e=0;e<i;e++)r[l++]=o[u],u+=s}let c=i.es.create(u,i.es.Data1(r)),d=i.yb.fromTranslation((0,i.yb)(),a.origin),p=i.yb.fromBasis((0,i.yb)(),a.basisX,a.basisY,a.basisZ);return i.yb.mul(d,d,p),{label:null==t?void 0:t.label,entryId:null==t?void 0:t.entryId,grid:{transform:{kind:"matrix",matrix:d},cells:c,stats:{min:(0,s.GI)(r),max:(0,s.uH)(r),mean:(0,s.p7)(r),sigma:(0,s.Ud)(r)}},instances:[{transform:i.yb.identity()}],sourceData:n.create(e),customProperties:new l.S,_propertyData:Object.create(null)}})}(a=n||(n={})).is=function(e){return(null==e?void 0:e.kind)==="cube"},a.create=function(e){return{kind:"cube",name:e.name,data:e}}},23643:function(e,t,r){r.d(t,{I:function(){return n},N:function(){return u}});var a,n,i=r(54854),o=r(48930),s=r(87144),l=r(67646);function u(e,t){return i.iQ.create("Create Volume",async r=>{let{volume_data_3d_info:a,volume_data_3d:i}=e,u=o.EO.create(a.spacegroup_number.value(0)||"P 1",s.AO.ofArray(a.spacegroup_cell_size.value(0)),s.AO.scale(s.AO.zero(),s.AO.ofArray(a.spacegroup_cell_angles.value(0)),Math.PI/180)
7319),c=a.axis_order.value(0),d=s.es.convertToCanonicalAxisIndicesFastToSlow(c),p=d(a.sample_count.value(0)),f=s.es.Space(p,s.es.invertAxisOrder(c),Float32Array),m=s.es.create(f,s.es.Data1(i.values.toArray({array:Float32Array}))),h=s.AO.ofArray(d(a.origin.value(0))),g=s.AO.ofArray(d(a.dimensions.value(0)));return{label:null==t?void 0:t.label,entryId:null==t?void 0:t.entryId,periodicity:s.AO.isInteger(g)?"xyz":"none",grid:{transform:{kind:"spacegroup",cell:u,fractionalBox:o.XZ.create(h,s.AO.add(s.AO.zero(),h,g))},cells:m,stats:{min:a.min_sampled.value(0),max:a.max_sampled.value(0),mean:a.mean_sampled.value(0),sigma:a.sigma_sampled.value(0)}},instances:[{transform:s.yb.identity()}],sourceData:n.create(e),customProperties:new l.S,_propertyData:Object.create(null)}})}(a=n||(n={})).is=function(e){return(null==e?void 0:e.kind)==="dscif"},a.create=function(e){return{kind:"dscif",name:e._name,data:e}}},24407:function(e,t,r){r.d(t,{DN:function(){return f},Eq:function(){return u},L$:function(){return i},Qh:function(){return c},VF:function(){return d},um:function(){return s},vd:function(){return l},wp:function(){return o}});var a=r(34985);r(91044);var n=r(84942);function i(e,t,r){return(0,n.TZ)(t,r)===a.eK.N&&4===(0,n.ui)(e,t,r)&&0===(0,n.ls)(e,t,r,a.eK.H)}function o(e,t,r){return(0,n.TZ)(t,r)===a.eK.S&&3===(0,n.ls)(e,t,r,a.eK.O)}function s(e,t,r){return(0,n.TZ)(t,r)===a.eK.S&&4===(0,n.ls)(e,t,r,a.eK.O)}function l(e,t,r){return(0,n.TZ)(t,r)===a.eK.P&&(0,n.ls)(e,t,r,a.eK.O)===(0,n.ui)(e,t,r)}function u(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&2===(0,n.ls)(e,t,r,a.eK.O)&&1===(0,n.ls)(e,t,r,a.eK.C)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.TZ)(t,r)===a.eK.O&&(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}function c(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&3===(0,n.ui)(e,t,r)&&3===(0,n.ls)(e,t,r,a.eK.N)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}function d(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&3===(0,n.ui)(e,t,r)&&2===(0,n.ls)(e,t,r,a.eK.N)&&1===(0,n.ls)(e,t,r,a.eK.C)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}let p=new Set(["N","O","S","F","CL","BR","I"]);function f(e,t,r){let a=!1;return(0,n.KM)(e,t,r,(e,t)=>{var r;r=(0,n.TZ)(e,t),p.has(r)&&(a=!0)}),a}},14507:function(e,t,r){r.d(t,{BC:function(){return b},K8:function(){return d},Qq:function(){return n},VD:function(){return y},Yz:function(){return c},cP:function(){return u},xv:function(){return x}});var a,n,i=r(58463),o=r(87144),s=r(84942),l=r(34985);function u(e){switch(e){case n.Spherical:return"Spherical";case n.Terminal:return"Terminal";case n.Linear:return"Linear";case n.Trigonal:return"Trigonal";case n.Tetrahedral:return"Tetrahedral";case n.TrigonalBiPyramidal:return"Trigonal Bi-Pyramidal";case n.Octahedral:return"Octahedral";case n.SquarePlanar:return"Square Planar";case n.Unknown:return"Unknown"}}function c(e){switch(e){case 0:return n.Spherical;case 1:return n.Terminal;case 2:return n.Linear;case 3:return n.Trigonal;case 4:return n.Tetrahedral;default:return n.Unknown}}(a=n||(n={}))[a.Spherical=0]="Spherical",a[a.Terminal=1]="Terminal",a[a.Linear=2]="Linear",a[a.Trigonal=3]="Trigonal",a[a.Tetrahedral=4]="Tetrahedral",a[a.TrigonalBiPyramidal=5]="TrigonalBiPyramidal",a[a.Octahedral=6]="Octahedral",a[a.SquarePlanar=7]="SquarePlanar",a[a.Unknown=8]="Unknown";let d=new Map([[n.Linear,(0,i.Id)(180)],[n.Trigonal,(0,i.Id)(120)],[n.Tetrahedral,(0,i.Id)(109.4721)],[n.Octahedral,(0,i.Id)(90)]]),p=(0,o.AO)(),f=(0,o.AO)(),m=(0,o.AO)(),h=(0,o.AO)(),g=(0,o.AO)();function b(e,t,r,a,n,i=!0){let u=[],c=[];return t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m),(0,s.KM)(e,t,r,(e,t)=>{(0,s.TZ)(e,t)!==l.eK.H?(e.conformation.position(e.elements[t],g),o.AO.sub(f,g,m),u.push(o.AO.angle(p,f))):i||(e.conformation.position(e.elements[t],g),o.AO.sub(f,g,m),c.push(o.AO.angle(p,f)))}),[u,c]}function y(e,t,r,a,n){let i,u;t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m);let c=[(0,o.AO)(),(0,o.AO)()],d=0;if((0,s.KM)(e,t,r,(e,t)=>{d>
73191||(0,s.TZ)(e,t)===l.eK.H||(i=e,u=t,e.conformation.position(e.elements[t],g),o.AO.sub(c[d++],g,m))}),1===d&&i&&u&&(0,s.KM)(e,i,u,(e,a)=>{d>1||e===t&&a===r||(0,s.TZ)(e,a)===l.eK.H||(e.conformation.position(e.elements[a],g),o.AO.sub(c[d++],g,m))}),2===d)return o.AO.cross(f,c[0],c[1]),Math.abs(Math.PI/2-o.AO.angle(f,p))}function x(e,t,r,a,n){let i=r;t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m);let u=o.AO.squaredDistance(m,h);return(0,s.KM)(e,t,r,(e,t)=>{if((0,s.TZ)(e,t)===l.eK.H){e.conformation.position(e.elements[t],g);let r=o.AO.squaredDistance(g,h);r<u&&(u=r,i=t)}}),i}},84942:function(e,t,r){r.d(t,{E3:function(){return i},Fp:function(){return d},Il:function(){return s},KM:function(){return f},NT:function(){return l},TZ:function(){return n},ls:function(){return c},rY:function(){return p},rt:function(){return o},ui:function(){return u}});var a=r(91044);function n(e,t){return e.model.atomicHierarchy.atoms.type_symbol.value(e.elements[t])}function i(e,t){return e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(e.elements[t])}function o(e,t){return e.model.atomicHierarchy.atoms.label_atom_id.value(e.elements[t])}function s(e,t){return e.model.atomicHierarchy.atoms.label_alt_id.value(e.elements[t])}function l(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(e.elements[t])}function u(e,t,r){return function(e,t,r){let n=0,i=e.interUnitBonds.getEdgeIndices(r,t.id);for(let t=0,r=i.length;t<r;++t){let r=e.interUnitBonds.edges[i[t]];a.BondType.isCovalent(r.props.flag)&&(n+=1)}return n}(e,t,r)+function(e,t){let r=0,{offset:n,edgeProps:{flags:i}}=e.bonds;for(let e=n[t],o=n[t+1];e<o;++e)a.BondType.isCovalent(i[e])&&(r+=1);return r}(t,r)}function c(e,t,r,a){let i=0;return f(e,t,r,(e,t)=>{n(e,t)===a&&(i+=1)}),i}function d(e,t,r,n,i){return t===n?function(e,t,r){let{offset:n,b:i,edgeProps:{flags:o}}=e.bonds;a.BondType.is;for(let e=n[t],s=n[t+1];e<s;++e)if(i[e]===r&&a.BondType.isCovalent(o[e]))return!0;return!1}(t,r,i):function(e,t,r,n,i){let o=e.interUnitBonds.getEdge(r,t.id,i,n.id);return o&&a.BondType.isCovalent(o.props.flag)}(e,t,r,n,i)}function p(e,t,r){let{offset:n,b:i,edgeProps:{flags:o}}=e.bonds;for(let s=n[t],l=n[t+1];s<l;++s)a.BondType.isCovalent(o[s])&&r(e,i[s])}function f(e,t,r,n){!function(e,t,r,n){let i=e.interUnitBonds.getEdgeIndices(r,t.id);for(let t=0,r=i.length;t<r;++t){let r=e.interUnitBonds.edges[i[t]],o=e.unitMap.get(r.unitB);a.BondType.isCovalent(r.props.flag)&&n(o,r.indexB)}}(e,t,r,n),p(t,r,n)}r(34526)},21300:function(e,t,r){r.d(t,{D:function(){return l}});var a=r(14086),n=r(48984),i=r(20292),o=r(67646);let s={...n.P_},l=i.b.createProvider({label:"Interactions",descriptor:(0,o.d)({name:"molstar_computed_interactions"}),type:"local",defaultParams:s,getParams:e=>s,isApplicable:e=>!e.isCoarseGrained,obtain:async(e,t,r)=>{let i={...a.e.getDefaultValues(s),...r};return{value:await (0,n.uO)(e,t,i)}}})},65410:function(e,t,r){r.d(t,{$v:function(){return f},Bs:function(){return u},Te:function(){return d},Xx:function(){return y},bD:function(){return b},kf:function(){return h},s_:function(){return c},xz:function(){return g},yH:function(){return l}});var a,n,i,o,s,l,u,c,d,p,f,m=r(53288);(l||(l={})).createElementsIndex=function(e,t,r){let a=new Int32Array(r+1),n=new Int32Array(r),i=new Int32Array(r),{members:o,offsets:s}=t;for(let t=0,r=2*e.edgeCount;t<r;++t){let r=e.a[t],a=e.b[t];if(!(r>a)){for(let e=s[r],t=s[r+1];e<t;++e)++i[o[e]];for(let e=s[a],t=s[a+1];e<t;++e)++i[o[e]]}}let l=0;for(let e=0;e<r;e++)a[e]=l,l+=i[e];a[r]=l;let u=new Int32Array(l);for(let t=0,r=2*e.edgeCount;t<r;++t){let r=e.a[t],i=e.b[t];if(!(r>i)){for(let e=s[r],i=s[r+1];e<i;++e){let r=o[e];u[a[r]+n[r]]=t,++n[r]}for(let e=s[i],r=s[i+1];e<r;++e){let r=o[e];u[a[r]+n[r]]=t,++n[r]}}}return{indices:u,offsets:a}};class h extends m.G{getContactIndicesForElement(e,t){return this.elementKeyIndex.get(this.getElementKey(e,t.id))||[]}getElementKey(e,t){return`${e}|${t}`}constructor(e,t){super(e),this.elementKeyIndex=new Map;for(let e=0,r=this.edges.length;e<r;++e){let{unitA:r,indexA:a}=this.edges[e],{offsets:n,members:i}=t.get(r);for(let t=n[a],o=n[a+1];t<o;
7319++t){let a=this.getElementKey(i[t],r),n=this.elementKeyIndex.get(a);void 0===n?this.elementKeyIndex.set(a,[e]):n.push(e)}}}}function g(e){switch(e){case c.HydrogenBond:return"Hydrogen Bond";case c.Hydrophobic:return"Hydrophobic Contact";case c.HalogenBond:return"Halogen Bond";case c.Ionic:return"Ionic Interaction";case c.MetalCoordination:return"Metal Coordination";case c.CationPi:return"Cation-Pi Interaction";case c.PiStacking:return"Pi Stacking";case c.WeakHydrogenBond:return"Weak Hydrogen Bond";case c.Unknown:return"Unknown Interaction"}}function b(e){switch(e){case d.None:return"None";case d.PositiveCharge:return"Positive Charge";case d.NegativeCharge:return"Negative Charge";case d.AromaticRing:return"Aromatic Ring";case d.HydrogenDonor:return"Hydrogen Donor";case d.HydrogenAcceptor:return"Hydrogen Acceptor";case d.HalogenDonor:return"Halogen Donor";case d.HalogenAcceptor:return"Halogen Acceptor";case d.HydrophobicAtom:return"HydrophobicAtom";case d.WeakHydrogenDonor:return"Weak Hydrogen Donor";case d.IonicTypePartner:return"Ionic Type Partner";case d.DativeBondPartner:return"Dative Bond Partner";case d.TransitionMetal:return"Transition Metal";case d.IonicTypeMetal:return"Ionic Type Metal"}}function y(e){switch(e){case f.None:return"None";case f.QuaternaryAmine:return"Quaternary Amine";case f.TertiaryAmine:return"Tertiary Amine";case f.Sulfonium:return"Sulfonium";case f.SulfonicAcid:return"Sulfonic Acid";case f.Sulfate:return"Sulfate";case f.Phosphate:return"Phosphate";case f.Halocarbon:return"Halocarbon";case f.Guanidine:return"Guanidine";case f.Acetamidine:return"Acetamidine";case f.Carboxylate:return"Carboxylate"}}(a=u||(u={}))[a.None=0]="None",a[a.Filtered=1]="Filtered",(n=c||(c={}))[n.Unknown=0]="Unknown",n[n.Ionic=1]="Ionic",n[n.CationPi=2]="CationPi",n[n.PiStacking=3]="PiStacking",n[n.HydrogenBond=4]="HydrogenBond",n[n.HalogenBond=5]="HalogenBond",n[n.Hydrophobic=6]="Hydrophobic",n[n.MetalCoordination=7]="MetalCoordination",n[n.WeakHydrogenBond=8]="WeakHydrogenBond",(i=d||(d={}))[i.None=0]="None",i[i.PositiveCharge=1]="PositiveCharge",i[i.NegativeCharge=2]="NegativeCharge",i[i.AromaticRing=3]="AromaticRing",i[i.HydrogenDonor=4]="HydrogenDonor",i[i.HydrogenAcceptor=5]="HydrogenAcceptor",i[i.HalogenDonor=6]="HalogenDonor",i[i.HalogenAcceptor=7]="HalogenAcceptor",i[i.HydrophobicAtom=8]="HydrophobicAtom",i[i.WeakHydrogenDonor=9]="WeakHydrogenDonor",i[i.IonicTypePartner=10]="IonicTypePartner",i[i.DativeBondPartner=11]="DativeBondPartner",i[i.TransitionMetal=12]="TransitionMetal",i[i.IonicTypeMetal=13]="IonicTypeMetal",(o=p||(p={}))[o.None=0]="None",o[o.PositiveCharge=1]="PositiveCharge",o[o.NegativeCharge=2]="NegativeCharge",o[o.AromaticRing=3]="AromaticRing",o[o.HydrogenDonor=4]="HydrogenDonor",o[o.HydrogenAcceptor=5]="HydrogenAcceptor",o[o.HalogenDonor=6]="HalogenDonor",o[o.HalogenAcceptor=7]="HalogenAcceptor",o[o.HydrophobicAtom=8]="HydrophobicAtom",o[o.WeakHydrogenDonor=9]="WeakHydrogenDonor",o[o.IonicTypePartner=10]="IonicTypePartner",o[o.DativeBondPartner=11]="DativeBondPartner",o[o.TransitionMetal=12]="TransitionMetal",o[o.IonicTypeMetal=13]="IonicTypeMetal",(s=f||(f={}))[s.None=0]="None",s[s.QuaternaryAmine=1]="QuaternaryAmine",s[s.TertiaryAmine=2]="TertiaryAmine",s[s.Sulfonium=3]="Sulfonium",s[s.SulfonicAcid=4]="SulfonicAcid",s[s.Sulfate=5]="Sulfate",s[s.Phosphate=6]="Phosphate",s[s.Halocarbon=7]="Halocarbon",s[s.Guanidine=8]="Guanidine",s[s.Acetamidine=9]="Acetamidine",s[s.Carboxylate=10]="Carboxylate"},48984:function(e,t,r){r.d(t,{yd:function(){return s},P_:function(){return eq},uO:function(){return eX}});var a,n,i,o,s,l=r(14086),u=r(30502),c=r(69062),d=r(48930),p=r(34526),f=r(6017),m=r(87144),h=r(89615);!function(e){function t(e,t){let r=new Int32Array(t+1),a=new Int32Array(t),n=new Int32Array(t),{members:i,count:o,offsets:s}=e;for(let e=0,t=s[o];e<t;++e)++n[i[e]];let l=0;for(let e=0;e<t;e++)r[e]=l,l+=n[e];r[t]=l;let u=new Int32Array(l);for(let e=0;e<o;++e)for(let t=s[e],n=s[e+1];t<n;++t){let n=i[t];u[r[n]+a[n]]=e,++a[n]}return{indices:u,offsets:r}}function r(e,t){let r;let{count:a,types:n}=e,i=[];for(let e=0;e<a;++e)t.has(n[e])&&i.push(e);let o=p.SortedArray.ofSortedArray(i);return{indices:o,get lookup3d(){if(!r){let t={x:e.x,y:e.y,z:e.z,indices:o};r=(0,d.tN)(t,(0,h.z)(t))}return r}}}e.setPosition=function(e,t,r,a){return m.AO.set(e,a.x[r],a.y[r],a.z[r]),m.AO.transformMat4(e,e,t.conformation.operator.matrix),e},e.createElementsIndex=t,e.create=function(e,a){let n,i;return{...a,get lookup3d(){if(!n){let e={x:a.x,y:a.y,z:a.z,indices:p.hU.ofBounds(0,a.count)};n=(0,d.tN)(e,(0,h.z)(e))}return n}
7319,get elementsIndex(){return i||(i=t(a,e))},subset:e=>r(a,e)}},e.createSubset=r,e.Info=function(e,t,r){let a=f.g.get(e).value;if(!a||!a.has(t.id))throw Error("valence model required");return{unit:t,types:r.types,feature:-1,x:r.x,y:r.y,z:r.z,members:r.members,offsets:r.offsets,idealGeometry:a.get(t.id).idealGeometry}},e.position=function(e,t){return m.AO.set(e,t.x[t.feature],t.y[t.feature],t.z[t.feature]),m.AO.transformMat4(e,e,t.unit.conformation.operator.matrix),e};let a=(0,m.AO)(),n=(0,m.AO)();e.distance=function(e,t){let r=e.members[e.offsets[e.feature]],i=t.members[t.offsets[t.feature]];return e.unit.conformation.position(e.unit.elements[r],a),t.unit.conformation.position(t.unit.elements[i],n),m.AO.distance(a,n)},e.Provider=function(e,t){return{types:new Set(e),add:t}}}(a||(a={})),(n||(n={})).create=function(e=2048,t=1024,r){let n=c.pS.create(Float32Array,1,t,r?r.x:e),i=c.pS.create(Float32Array,1,t,r?r.y:e),o=c.pS.create(Float32Array,1,t,r?r.z:e),s=c.pS.create(Uint8Array,1,t,r?r.types:e),l=c.pS.create(Uint8Array,1,t,r?r.groups:e),u=c.pS.create(Uint32Array,1,t,r?r.offsets:e),d=c.pS.create(Uint32Array,1,t,r?r.members:e),p={x:0,y:0,z:0,offset:0,count:0};return{startState:()=>{p.x=0,p.y=0,p.z=0,p.offset=d.elementCount,p.count=0},pushMember:(e,t,r,a)=>{c.pS.add(d,a),p.x+=e,p.y+=t,p.z+=r,p.count+=1},markMember:e=>{c.pS.add(d,e)},finishState:(e,t)=>{let{count:r}=p;0!==r&&(c.pS.add(s,e),c.pS.add(l,t),c.pS.add(n,p.x/r),c.pS.add(i,p.y/r),c.pS.add(o,p.z/r),c.pS.add(u,p.offset))},add:(e,t,r,a,p,f)=>{c.pS.add(s,e),c.pS.add(l,t),c.pS.add(n,r),c.pS.add(i,a),c.pS.add(o,p),c.pS.add(u,d.elementCount),c.pS.add(d,f)},getFeatures:e=>{c.pS.add(u,d.elementCount);let t=c.pS.compact(n,!0),r=c.pS.compact(i,!0),p=c.pS.compact(o,!0),f=n.elementCount;return a.create(e,{x:t,y:r,z:p,count:f,types:c.pS.compact(s,!0),groups:c.pS.compact(l,!0),offsets:c.pS.compact(u,!0),members:c.pS.compact(d,!0)})}}};var g=r(65410),b=r(17814),y=r(53288);(i||(i={})).create=function(e,t){let r=[],a=[],n=[];return{add(e,t,i){r[r.length]=e,a[a.length]=t,n[n.length]=i},getContacts(){let i;let o=new b.a.EdgeBuilder(e.count,r,a),s=new Int8Array(o.slotCount),l=new Int8Array(o.slotCount);for(let e=0,t=o.edgeCount;e<t;e++)o.addNextEdge(),o.assignProperty(s,n[e]);let u=o.createGraph({type:s,flag:l});return Object.defineProperty(u,"elementsIndex",{get:()=>i||(i=g.yH.createElementsIndex(u,e,t))})}}},(o||(o={})).create=function(){let e=new y.G.Builder;return{startUnitPair(t,r){e.startUnitPair(t.id,r.id)},finishUnitPair(){e.finishUnitPair()},add(t,r,a){e.add(t,r,{type:a,flag:g.Bs.None})},getContacts:t=>new g.kf(e.getMap(),t)}};var x=r(53478),S=r(34985),T=r(125),C=r(84942);let O={lineOfSightDistFactor:l.e.Numeric(1,{min:0,max:3,step:.1})};function I(e,t,r){let a=t.members[t.offsets[t.feature]],n=r.members[r.offsets[r.feature]];if(a===n&&t.unit===r.unit)return!1;let i=(0,C.Il)(t.unit,a),o=(0,C.Il)(r.unit,n);return!(i&&o&&i!==o||t.unit===r.unit&&t.unit.model.atomicHierarchy.residueAtomSegments.count>1&&t.unit.residueIndex[t.unit.elements[a]]===r.unit.residueIndex[r.unit.elements[n]]||(0,C.Fp)(e,t.unit,a,r.unit,n))}function A(e,t,r,a){let n=(0,C.Il)(e,t),i=(0,C.Il)(r,a);return n&&i&&n!==i}function w(e,t){let{feature:r,offsets:a,members:n}=t;for(let t=a[r],i=a[r+1];t<i;++t)if(n[t]===e)return!0;return!1}let D=(0,m.AO)(),E=(0,m.AO)(),M=(0,m.AO)(),P=(0,T.ws)();function k(e,t,r,n){let i=t.feature,o=r.feature,s=t.members[t.offsets[i]],l=r.members[r.offsets[o]];a.position(E,t),a.position(M,r),m.AO.scale(D,m.AO.add(D,E,M),.5);let{count:c,indices:d,units:p,squaredDistances:f}=e.lookup3d.find(D[0],D[1],D[2],3*n,P);if(0===c)return!0;for(let e=0;e<c;++e){let a=d[e],i=p[e];if(!u.Unit.isAtomic(i))continue;let o=(0,C.TZ)(i,a);if(o===S.eK.H)continue;let c=(0,x.lT)(o);if(!(c*c*n*n<=f[e]||A(i,a,t.unit,s)||A(i,a,r.unit,l)||t.unit===i&&w(a,t)||r.unit===i&&w(a,r))&&(i.conformation.position(i.elements[a],D),!(1>m.AO.squaredDistance(D,E)||1>m.AO.squaredDistance(D,M))))return!1}return!0}let B=(0,m.yb)();var _=r(14507),R=r(58463);let F={distanceMax:l.e.Numeric(4,{min:1,max:5,step:.1}),angleMax:l.e.Numeric(30,{min:0,max:60,step:1})},L=[S.eK.CL,S.eK.BR,S.eK.I,S.eK.AT],z=[S.eK.N,S.eK.O,S.eK.S],N=[S.eK.C,S.eK.N,S.eK.P,S.eK.S],G=(0,R.Id)(180),U=(0,R.Id)(120),V=a.Provider([g.Te.HalogenDonor],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e);L.includes(s)&&r.add(g.Te.HalogenDonor,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}}),j=a.Provider([g.Te.HalogenAcceptor],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let s=0,l=a.length;s<l;++s){let l=(0,C.TZ)(t,s);if(z.includes(l)){let l=!1;(0,C.KM)(e,t,s,(e,t)=>{N.includes((0,C.TZ)(e,t))&&(l=!0)}),l&&r.add(g.Te.HalogenAcceptor,g.$v.None,n[a[s]],i[a[s]],o[a[s]],s)}}});var H=r(91044);let q={distanceMax:l.e.Numeric(3.5,{min:1,max:5,step:.1}),backbone:l.e.Boolean(!0,{description:"Include backbone-to-backbone hydrogen bonds"}),accAngleDevMax:l.e.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal acceptor angle"}),ignoreHydrogens:l.e.Boolean(!1,{description:"Ignore explicit hydrogens in geometric constraints"}),donAngleDevMax:l.e.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal donor angle"}),accOutOfPlaneAngleMax:l.e.Numeric(90,{min:0,max:180,step:1}),donOutOfPlaneAngleMax:l.e.Numeric(45,{min:0,max:180,step:1})},X={...q,water:l.e.Boolean(!1,{description:"Include water-to-water hydrogen bonds"}),sulfurDistanceMax:l.e.Numeric(4.1,{min:1,max:5,step:.1})},W={...q};function K(e,t){let r=f.g.get(e).value;if(!r)throw Error("expected valence model to be available");let a=r.get(t.id);if(!a)throw Error("expected valence model for unit to be available");return a}function Q(e,t){return e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[e.elements[t]]]===H.MoleculeType.Water}function Z(e,t){return H.ProteinBackboneAtoms.has((0,C.rt)(e,t))}function Y(e,t){return"HIS"===(0,C.NT)(e,t)&&(0,C.TZ)(e,t)===S.eK.N&&e.rings.elementRingIndices.has(t)}function $(e){return{ignoreHydrogens:e.ignoreHydrogens,includeBackbone:e.backbone,maxAccAngleDev:(0,R.Id)(e.accAngleDevMax),maxDonAngleDev:(0,R.Id)(e.donAngleDevMax),maxAccOutOfPlaneAngle:(0,R.Id)(e.accOutOfPlaneAngleMax),maxDonOutOfPlaneAngle:(0,R.Id)(e.donOutOfPlaneAngleMax)}}let J=(0,R.Id)(120);function ee(e,t,r,a){var n,i;let o=t.members[t.offsets[t.feature]],s=r.members[r.offsets[r.feature]];if(!a.includeBackbone&&(n=t.unit,i=r.unit,Z(n,o)&&Z(i,s)))return;let[l,u]=(0,_.BC)(e,t.unit,o,r.unit,s,a.ignoreHydrogens),c=_.K8.get(t.idealGeometry[o])||J;if(l.some(e=>Math.abs(c-e)>a.maxDonAngleDev)||u.length&&!u.some(e=>e<a.maxDonAngleDev))return;if(t.idealGeometry[o]===_.Qq.Trigonal){let n=(0,_.VD)(e,t.unit,o,r.unit,s);if(void 0!==n&&n>a.maxDonOutOfPlaneAngle)return}let d=o;!a.ignoreHydrogens&&u.length>0&&(d=(0,_.xv)(e,t.unit,o,r.unit,s));let[p,f]=(0,_.BC)(e,r.unit,s,t.unit,d,a.ignoreHydrogens),m=_.K8.get(r.idealGeometry[s])||J;if(!p.some(e=>m-e>a.maxAccAngleDev)&&!f.some(e=>m-e>a.maxAccAngleDev)){if(r.idealGeometry[s]===_.Qq.Trigonal){let n=(0,_.VD)(e,r.unit,s,t.unit,o);if(void 0!==n&&n>a.maxAccOutOfPlaneAngle)return}return!0}}let et=a.Provider([g.Te.HydrogenDonor],function(e,t,r){let{totalH:a}=K(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation;for(let e=0,l=n.length;e<l;++e){let l=(0,C.TZ)(t,e);(Y(t,e)||a[e]>0&&(l===S.eK.N||l===S.eK.O||l===S.eK.S))&&r.add(g.Te.HydrogenDonor,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}),er=a.Provider([g.Te.WeakHydrogenDonor],function(e,t,r){let{totalH:a}=K(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation;for(let l=0,u=n.length;l<u;++l)(0,C.TZ)(t,l)===S.eK.C&&a[l]>0&&((0,C.ls)(e,t,l,S.eK.N)>0||(0,C.ls)(e,t,l,S.eK.O)>0||function(e,t){let{elementAromaticRingIndices:r,all:a}=e.rings,n=r.get(t);if(void 0===n)return!1;for(let t=0,r=n.length;t<r;++t){let r=a[n[t]];for(let t=0,a=r.length;t<a;++t){let a=(0,C.TZ)(e,r[t]);if(a===S.eK.N||a===S.eK.O)return!0}}return!1}(t,l))&&r.add(g.Te.WeakHydrogenDonor,g.$v.None,i[n[l]],o[n[l]],s[n[l]],l)}),ea=a.Provider([g.Te.HydrogenAcceptor],function(e,t,r){let{charge:a,implicitH:n,idealGeometry:i}=K(e,t),{elements:o}=t,{x:s,y:l,z:u}=t.model.atomicConformation,c=e=>{r.add(g.Te.HydrogenAcceptor,g.$v.None,s[o[e]],l[o[e]],u[o[e]],e)};for(let r=0,s=o.length;r<s;++r){let o=(0,C.TZ)(t,r);if(o===S.eK.O)c(r);else if(o===S.eK.N){if(Y(t,r))c(r);else if(a[r]<1){let a=(0,C.ui)(e,t,r)+n[r],o=i[r];(o===_.Qq.Tetrahedral&&a<4||o===_.Qq.Trigonal&&a<3||o===_.Qq.Linear&&a<2)&&c(r)}}else if(o===S.eK.S){let e=(0,C.NT)(t,r);("CYS"===e||"MET"===e||-1===(0,C.E3)(t,r))&&c(r)}}});var en=r(24407);let ei={distanceMax:l.e.Numeric(5,{min:0,max:8,step:.1})},eo={distanceMax:l.e.Numeric(5.5,{min:1,max:8,step:.1}),offsetMax:l.e.Numeric(2,{min:0,max:4,step:.1}),angleDevMax:l.e.Numeric(30,{min:0,max:180,step:1})},es={distanceMax:l.e.Numeric(6,{min:1,max:8,step:.1}),offsetMax:l.e.Numeric(2,{min:0,max:4,step:.1})},el=["ARG","HIS","LYS"],eu=["GLU","ASP"];function ec(e,t){let r=f.g.get(e).value;if(!r)throw Error("expected valence model to be available");let a=r.get(t.id);if(!a)throw Error("expected valence model for unit to be available");return a}let ed=(0,m.AO)(),ep=(0,m.AO)(),ef=(0,m.AO)(),em=(0,m.AO)(),eh=(0,m.AO)(),eg=(0,m.AO)();function ev(e,t){let{unit:r,feature:a,offsets:n,members:i}=t,{elements:o}=r,s=n[a];return t.unit.conformation.position(o[i[s]],ef),t.unit.conformation.position(o[i[s+1]],em),t.unit.conformation.position(o[i[s+2]],eh),m.AO.triangleNormal(e,ef,em,eh)}let eb=function(e,t,r){return a.position(ef,e),a.position(em,t),m.AO.sub(eh,ef,em),m.AO.projectOnPlane(eg,eh,r),m.AO.add(eg,eg,em),m.AO.distance(eg,em)},ey=(0,R.Id)(180),ex=(0,R.Id)(90),eS=(0,m.AO)(),eT=(0,m.AO)(),eC=a.Provider([g.Te.NegativeCharge],function(e,t,r){let{charge:a}=ec(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation,l=new Set,{label_comp_id:u}=t.model.atomicHierarchy.atoms,c=p.vI.transientSegments(t.model.atomicHierarchy.residueAtomSegments,n);for(;c.hasNext;){let{index:d,start:p,end:f}=c.move(),m=u.value(t.model.atomicHierarchy.residueAtomSegments.offsets[d]);if(eu.includes(m)){r.startState();for(let e=p;e<f;++e)(0,C.TZ)(t,e)!==S.eK.O||H.ProteinBackboneAtoms.has((0,C.rt)(t,e))||r.pushMember(i[n[e]],o[n[e]],s[n[e]],e);r.finishState(g.Te.NegativeCharge,g.$v.None)}else if(H.BaseNames.has(m))for(let a=p;a<f;++a)(0,en.vd)(e,t,a)&&(r.startState(),(0,C.KM)(e,t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.O&&r.pushMember(i[n[a]],o[n[a]],s[n[a]],a)}),r.finishState(g.Te.NegativeCharge,g.$v.Phosphate));else if(!H.PolymerNames.has(m)){for(let a=p;a<f;++a){r.startState(),(0,C.TZ)(t,a)!==S.eK.N||H.ProteinBackboneAtoms.has((0,C.rt)(t,a))||r.pushMember(i[n[a]],o[n[a]],s[n[a]],a),r.finishState(g.Te.NegativeCharge,g.$v.None);let u=g.$v.None;(0,en.wp)(e,t,a)?u=g.$v.SulfonicAcid:(0,en.vd)(e,t,a)?u=g.$v.Phosphate:(0,en.um)(e,t,a)?u=g.$v.Sulfate:(0,en.Eq)(e,t,a)&&(u=g.$v.Carboxylate),u&&(r.startState(),(0,C.KM)(e,t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.O&&(l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a))}),r.finishState(g.Te.NegativeCharge,u))}for(let e=p;e<f;++e)a[e]<0&&!l.has(e)&&r.add(g.Te.NegativeCharge,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}}),eO=a.Provider([g.Te.PositiveCharge],function(e,t,r){let{charge:a}=ec(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation,l=new Set,{label_comp_id:u}=t.model.atomicHierarchy.atoms,c=p.vI.transientSegments(t.model.atomicHierarchy.residueAtomSegments,n);for(;c.hasNext;){let{index:d,start:p,end:f}=c.move(),m=u.value(t.model.atomicHierarchy.residueAtomSegments.offsets[d]);if(el.includes(m)){r.startState();for(let e=p;e<f;++e)(0,C.TZ)(t,e)!==S.eK.N||H.ProteinBackboneAtoms.has((0,C.rt)(t,e))||r.pushMember(i[n[e]],o[n[e]],s[n[e]],e);r.finishState(g.Te.PositiveCharge,g.$v.None)}else if(!H.PolymerNames.has(m)){l.clear();for(let a=p;a<f;++a){let u=g.$v.None;if((0,en.Qh)(e,t,a))u=g.$v.Guanidine;
7319else if((0,en.VF)(e,t,a))u=g.$v.Acetamidine;else if((0,en.L$)(e,t,a)){u=g.$v.QuaternaryAmine,r.startState(),l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a),(0,C.rY)(t,a,(e,t)=>{l.add(t),r.markMember(t)}),r.finishState(g.Te.PositiveCharge,u);continue}u&&(r.startState(),(0,C.rY)(t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.N&&(l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a))}),r.finishState(g.Te.PositiveCharge,u))}for(let e=p;e<f;++e)a[e]>0&&!l.has(e)&&r.add(g.Te.PositiveCharge,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}}),eI=a.Provider([g.Te.AromaticRing],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e of t.rings.aromaticRings){let s=t.rings.all[e];r.startState();for(let e=0,t=s.length;e<t;++e){let t=s[e];r.pushMember(n[a[t]],i[a[t]],o[a[t]],t)}r.finishState(g.Te.AromaticRing,g.$v.None)}}),eA={distanceMax:l.e.Numeric(4,{min:1,max:5,step:.1})},ew=a.Provider([g.Te.HydrophobicAtom],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let s=0,l=a.length;s<l;++s){let l=(0,C.TZ)(t,s),u=!1;l===S.eK.C?(u=!0,(0,C.KM)(e,t,s,(e,t)=>{let r=(0,C.TZ)(e,t);r!==S.eK.C&&r!==S.eK.H&&(u=!1)})):l===S.eK.F&&(u=!0),u&&r.add(g.Te.HydrophobicAtom,g.$v.None,n[a[s]],i[a[s]],o[a[s]],s)}});var eD=r(63964);let eE={distanceMax:l.e.Numeric(3,{min:1,max:5,step:.1})},eM=[S.eK.LI,S.eK.NA,S.eK.K,S.eK.RB,S.eK.CS,S.eK.MG,S.eK.CA,S.eK.SR,S.eK.BA,S.eK.AL,S.eK.GA,S.eK.IN,S.eK.TL,S.eK.SC,S.eK.SN,S.eK.PB,S.eK.BI,S.eK.SB,S.eK.HG];function eP(e){return!H.ProteinBackboneAtoms.has(e)}function ek(e,t){return e===g.Te.TransitionMetal?t===g.Te.DativeBondPartner||t===g.Te.TransitionMetal:e===g.Te.IonicTypeMetal?t===g.Te.IonicTypePartner:void 0}let eB=a.Provider([g.Te.IonicTypeMetal,g.Te.TransitionMetal],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e),l=g.Te.None;eM.includes(s)?l=g.Te.IonicTypeMetal:((0,S.VQ)(s)||s===S.eK.ZN||s===S.eK.CD)&&(l=g.Te.TransitionMetal),l&&r.add(l,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}}),e_=a.Provider([g.Te.IonicTypePartner,g.Te.DativeBondPartner],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e),l=(0,C.NT)(t,e),u=(0,C.rt)(t,e),c=!1,d=!1,p=H.AminoAcidNames.has(l),f=H.BaseNames.has(l);p||f?p?s===S.eK.O?["ASP","GLU","SER","THR","TYR","ASN","GLN"].includes(l)&&eP(u)?(c=!0,d=!0):H.ProteinBackboneAtoms.has(u)&&(c=!0,d=!0):s===S.eK.S&&("CYS"===l||"MET"===l)?(c=!0,d=!0):s===S.eK.N&&"HIS"===l&&eP(u)&&(c=!0):f&&(s===S.eK.O&&H.NucleicBackboneAtoms.has(u)?(c=!0,d=!0):["N3","N4","N7"].includes(u)?c=!0:["O2","O4","O6"].includes(u)&&(c=!0,d=!0)):(0,S.Rt)(s)||s===S.eK.O||s===S.eK.S?(c=!0,d=!0):s===S.eK.N&&(c=!0),c&&r.add(g.Te.DativeBondPartner,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e),d&&r.add(g.Te.IonicTypePartner,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}});function eR(e,t,r,a,n){let{offsets:i,feature:o}=r,{offsets:s,feature:l}=a;for(let u=i[o],c=i[o+1];u<c;++u){let i=r.members[u],o=n.getContactIndicesForElement(i,r.unit);for(let r=0,i=o.length;r<i;++r){let i=o[r];if(e.includes(n.edges[i].props.type))for(let e=s[l],r=s[l+1];e<r;++e){let r=a.members[e];if(n.getContactIndicesForElement(r,a.unit).includes(i)){n.edges[t].props.flag=g.Bs.Filtered;return}}}}}function eF(e,t,r,a,n){let{edgeProps:{type:i,flag:o},elementsIndex:{offsets:s,indices:l}}=n,{offsets:u,feature:c}=r,{offsets:d,feature:p}=a;for(let n=u[c],f=u[c+1];n<f;++n){let u=r.members[n];for(let r=s[u],n=s[u+1];r<n;++r){let n=l[r];if(e.includes(i[n]))for(let e=d[p],r=d[p+1];e<r;++e){let r=a.members[e];for(let e=s[r],a=s[r+1];e<a;++e)if(n===l[e]){o[t]=g.Bs.Filtered;return}}}}}var eL=r(71522),ez=r(43398),eN=r(67589),eG=r(58202),eU=r(97667);!function(e){function t(e,t){let{unitA:r,indexA:a,unitB:n,indexB:i}=t,{contacts:o,unitsContacts:s}=e;if(r===n){let e=s.get(r.id),t=e.getDirectedEdgeIndex(a,i);return(0,g.xz)(e.edgeProps.type[t])}{let e=o.getEdgeIndex(a,r.id,i,n.id);return(0,g.xz)(o.edges[e].props.type)}}function r(e,t,r){let{unitsFeatures:n}=e;return ez.B.fromPairProvider(t.length,(e,r,i)=>{let o=t[e];a.setPosition(r,o.unitA,o.indexA,n.get(o.unitA.id)),a.setPosition(i,o.unitB,o.indexB,n.get(o.unitB.id))},r)}function n(e,r,a){let n=a[0];if(void 0===n)return"";let{unitA:i,indexA:o,unitB:s,indexB:l}=n,{unitsFeatures:c}=r,{members:d,offsets:p}=c.get(i.id),{members:f,offsets:m}=c.get(s.id),h={granularity:"element"};return(p[o+1]-p[o]>1||m[l+1]-m[l]>1)&&(h.granularity="residue"),[t(r,n),(0,eG.Gg)(u.Bond.Location(e,i,d[p[o]],e,s,f[m[l]]),h)].join("</br>")}e.Location=function(e,t,r,a,n,i){return(0,eL.o0)("interactions",{structure:t,interactions:e},{unitA:r,indexA:a,unitB:n,indexB:i})},e.isLocation=function(e){return!!e&&"data-location"===e.kind&&"interactions"===e.tag},e.areLocationsEqual=function(e,t){return e.data.structure===t.data.structure&&e.data.interactions===t.data.interactions&&e.element.indexA===t.element.indexA&&e.element.indexB===t.element.indexB&&e.element.unitA===t.element.unitA&&e.element.unitB===t.element.unitB},e.locationLabel=function(e){return t(e.data.interactions,e.element)},e.Loci=function(e,t,a){return(0,eN.SL)("interactions",{structure:e,interactions:t},a,e=>r(t,a,e),()=>n(e,t,a))},e.isLoci=function(e){return!!e&&"data-loci"===e.kind&&"interactions"===e.tag},e.getBoundingSphere=r,e.getLabel=n}(s||(s={}));let eV=[et,er,ea,eC,eO,eI,V,j,ew,eB,e_],ej={ionic:{name:"ionic",params:ei,createTester:e=>{let t={distanceMaxSq:e.distanceMax*e.distanceMax};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.NegativeCharge,g.Te.PositiveCharge]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if((i===g.Te.NegativeCharge&&o===g.Te.PositiveCharge||i===g.Te.PositiveCharge&&o===g.Te.NegativeCharge)&&function(e,t,r){let{feature:a,offsets:n,members:i}=e,{feature:o,offsets:s,members:l}=t;for(let u=n[a],c=n[a+1];u<c;++u){let a=i[u];e.unit.conformation.position(e.unit.elements[a],ed);for(let e=s[o],a=s[o+1];e<a;++e){let a=l[e];
7319if(t.unit.conformation.position(t.unit.elements[a],ep),m.AO.squaredDistance(ed,ep)<r)return!0}}return!1}(t,r,n.distanceMaxSq))return g.s_.Ionic})(0,r,a,0,t)}}},"pi-stacking":{name:"pi-stacking",params:eo,createTester:e=>{let t={offsetMax:e.offsetMax,angleDevMax:(0,R.Id)(e.angleDevMax)};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.AromaticRing]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if(i===g.Te.AromaticRing&&o===g.Te.AromaticRing){ev(eS,t),ev(eT,r);let e=m.AO.angle(eS,eT);if(Math.min(eb(t,r,eT),eb(r,t,eS))<=n.offsetMax&&(e<=n.angleDevMax||e>=ey-n.angleDevMax||e<=n.angleDevMax+ex&&e>=ex-n.angleDevMax))return g.s_.PiStacking}})(0,r,a,0,t)}}},"cation-pi":{name:"cation-pi",params:es,createTester:e=>{let t={offsetMax:e.offsetMax};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.AromaticRing,g.Te.PositiveCharge]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if(i===g.Te.AromaticRing&&o===g.Te.PositiveCharge||i===g.Te.PositiveCharge&&o===g.Te.AromaticRing){let[e,a]=i===g.Te.AromaticRing?[t,r]:[r,t];if(ev(eS,e),eb(a,e,eS)<=n.offsetMax)return g.s_.CationPi}})(0,r,a,0,t)}}},"halogen-bonds":{name:"halogen-bonds",params:F,createTester:e=>{let t={angleMax:(0,R.Id)(e.angleMax)};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.HalogenDonor,g.Te.HalogenAcceptor]),getType:(e,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if((n!==g.Te.HalogenAcceptor||i!==g.Te.HalogenDonor)&&(n!==g.Te.HalogenDonor||i!==g.Te.HalogenAcceptor))return;let[o,s]=n===g.Te.HalogenDonor?[t,r]:[r,t],l=o.members[o.offsets[o.feature]],u=s.members[s.offsets[s.feature]],[c]=(0,_.BC)(e,o.unit,l,s.unit,u);if(1!==c.length||G-c[0]>a.angleMax)return;let[d]=(0,_.BC)(e,s.unit,u,o.unit,l);if(0!==d.length&&!d.some(e=>U-e>a.angleMax))return g.s_.HalogenBond})(e,r,a,t)}}},"hydrogen-bonds":{name:"hydrogen-bonds",params:X,createTester:e=>{let t=Math.max(e.distanceMax,e.sulfurDistanceMax),r={...$(e),includeWater:e.water,maxSulfurDistSq:e.sulfurDistanceMax*e.sulfurDistanceMax,maxDistSq:e.distanceMax*e.distanceMax};return{maxDistance:t,requiredFeatures:new Set([g.Te.HydrogenDonor,g.Te.HydrogenAcceptor]),getType:(e,t,a,n)=>(function(e,t,r,a,n){var i,o;let s=t.types[t.feature],l=r.types[r.feature];if((s!==g.Te.HydrogenAcceptor||l!==g.Te.HydrogenDonor)&&(s!==g.Te.HydrogenDonor||l!==g.Te.HydrogenAcceptor))return;let[u,c]=l===g.Te.HydrogenAcceptor?[t,r]:[r,t],d=u.members[u.offsets[u.feature]],p=c.members[c.offsets[c.feature]];if(!(a>((0,C.TZ)(u.unit,d)===S.eK.S||(0,C.TZ)(c.unit,p)===S.eK.S?n.maxSulfurDistSq:n.maxDistSq))&&!(!n.includeWater&&(i=u.unit,o=c.unit,Q(i,d)&&Q(o,p)))&&ee(e,u,c,n))return g.s_.HydrogenBond})(e,t,a,n,r)}}},"weak-hydrogen-bonds":{name:"weak-hydrogen-bonds",params:W,createTester:e=>{let t=$(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.WeakHydrogenDonor,g.Te.HydrogenAcceptor]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if((i!==g.Te.WeakHydrogenDonor||o!==g.Te.HydrogenAcceptor)&&(i!==g.Te.HydrogenAcceptor||o!==g.Te.WeakHydrogenDonor))return;let[s,l]=o===g.Te.HydrogenAcceptor?[t,r]:[r,t];if(ee(e,s,l,n))return g.s_.WeakHydrogenBond})(e,r,a,0,t)}}},hydrophobic:{name:"hydrophobic",params:eA,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.HydrophobicAtom]),getType:(e,t,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if(n!==g.Te.HydrophobicAtom||i!==g.Te.HydrophobicAtom)return;let o=t.members[t.offsets[t.feature]],s=r.members[r.offsets[r.feature]];if((0,C.TZ)(t.unit,o)!==S.eK.F||(0,C.TZ)(r.unit,s)!==S.eK.F)return g.s_.Hydrophobic})(0,t,r,0)})},"metal-coordination":{name:"metal-coordination",params:eE,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.IonicTypeMetal,g.Te.TransitionMetal,g.Te.IonicTypePartner,g.Te.DativeBondPartner]),getType:(e,t,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if(ek(n,i)||ek(i,n))return g.s_.MetalCoordination})(0,t,r,0)})}},eH=function(e=[]){let t=Object.create(null);
7319return Object.keys(ej).forEach(r=>{t[r]=l.e.MappedStatic(e.includes(r)?"on":"off",{on:l.e.Group(ej[r].params),off:l.e.Group({})},{cycle:!0})}),t}(["cation-pi","pi-stacking","hydrogen-bonds","halogen-bonds","metal-coordination"]),eq={providers:l.e.Group(eH,{isFlat:!0}),contacts:l.e.Group(O,{label:"Advanced Options"})};async function eX(e,t,r,s){let c={...l.e.getDefaultValues(eq),...r},d=JSON.stringify(c);await f.g.attach(e,t);let h=[];(0,eU._2)(ej).forEach(e=>{let{name:t,params:r}=c.providers[e];"on"===t&&h.push(ej[e].createTester(r))});let b=new Set;h.forEach(e=>eD.F.add(b,e.requiredFeatures));let y=eV.filter(e=>eD.F.areIntersecting(b,e.types)),x=p.Ol.Mutable(),S=p.Ol.Mutable();for(let r=0,o=t.unitSymmetryGroups.length;r<o;++r){let l=t.unitSymmetryGroups[r];e.runtime.shouldUpdate&&await e.runtime.update({message:"computing interactions",current:r,max:o});let f=function(e,t,r,a){let i=`features-${a}`;if(t.transientCache.has(i))return t.transientCache.get(i);let o=t.elements.length,s=n.create(o,o/2);if(u.Unit.isAtomic(t))for(let a of r)a.add(e,t,s);let l=s.getFeatures(o);return t.transientCache.set(i,l),l}(t,l.units[0],y,d);for(let e=0,t=l.units.length;e<t;++e){let t=l.units[e];x.set(t.id,f)}if(null==s?void 0:s.skipIntraContacts)continue;let m=function(e,t,r,n,o){let s=i.create(r,t.elements.length);return u.Unit.isAtomic(t)&&function(e,t,r,n,i,o){for(let s of i)(function(e,t,r,n,i,o){let{x:s,y:l,z:u}=r,{lookup3d:c,indices:d}=r.subset(i.requiredFeatures),f=a.Info(e,t,r),m={...f},h=o.lineOfSightDistFactor;for(let t=0,r=p.hU.size(d);t<r;++t){let r=p.hU.getAt(d,t),{count:a,indices:o,squaredDistances:g}=c.find(s[r],l[r],u[r],i.maxDistance);if(0!==a){f.feature=r;for(let t=0;t<a;++t){let a=p.hU.getAt(d,o[t]);if(a<=r||(m.feature=a,!I(e,f,m)))continue;let s=i.getType(e,f,m,g[t]);s&&k(e,f,m,h)&&n.add(r,a,s)}}}})(e,t,r,n,s,o)}(e,t,r,s,n,o),s.getContacts()}(t,l.units[0],f,h,c.contacts);for(let e=0,t=l.units.length;e<t;++e){let t=l.units[e];S.set(t.id,m)}}let T=function(e,t,r,n,i){let s=o.create();return u.Structure.eachUnitPair(e,(i,o)=>{let l=t.get(i.id),u=t.get(o.id);!function(e,t,r,n,i,o,s,l){let{count:u,x:c,y:d,z:p}=r,{lookup3d:f}=i,h=m.yb.mul(B,n.conformation.operator.inverse,t.conformation.operator.matrix),g=!m.yb.isIdentity(h),b=(0,m.AO)(),y=Math.max(...s.map(e=>e.maxDistance)),{center:x,radius:S}=f.boundary.sphere,T=(S+y)*(S+y),C=l.lineOfSightDistFactor,O=a.Info(e,t,r),A=a.Info(e,n,i);o.startUnitPair(t,n);for(let t=0;t<u;++t){if(m.AO.set(b,c[t],d[t],p[t]),g&&m.AO.transformMat4(b,b,h),m.AO.squaredDistance(b,x)>T)continue;let{indices:r,count:a,squaredDistances:n}=f.find(b[0],b[1],b[2],y);if(0!==a){O.feature=t;for(let i=0;i<a;++i){let a=r[i];if(A.feature=a,!I(e,O,A))continue;let l=n[i];for(let r of s)if(l<r.maxDistance*r.maxDistance){let n=r.getType(e,O,A,l);if(n&&k(e,O,A,C)){o.add(t,a,n);break}}}}}o.finishUnitPair()}(e,i,l,o,u,s,r,n)},{maxRadius:Math.max(...r.map(e=>e.maxDistance)),validUnit:e=>u.Unit.isAtomic(e),validUnitPair:(t,r)=>(null==i?void 0:i.unitPairTest)?i.unitPairTest(t,r):u.Structure.validUnitPair(e,t,r)}),s.getContacts(t)}(t,x,h,c.contacts,s),C={unitsFeatures:x,unitsContacts:S,contacts:T};return!function(e,t){let{contacts:r,unitsContacts:n,unitsFeatures:i}=t,o=[function(e,t){let r,n;let{contacts:i}=t,o=function(e,t,r,a,n){let[i,o]=a.get(r)||[1/0,-1];e<i?(-1!==o&&n(o),a.set(r,[e,t])):n(t)};function s(e,t,r,n,i){let s=t.members[t.offsets[t.feature]],l=r.members[r.offsets[r.feature]],u=t.unit.getResidueIndex(s),c=r.unit.getResidueIndex(l),d=`${s}|${t.unit.id}|${c}|${r.unit.id}|A`,p=`${l}|${r.unit.id}|${u}|${t.unit.id}|B`,f=a.distance(t,r);o(f,e,d,n,i),o(f,e,p,n,i)}let l=new Map,u=e=>i.edges[e].props.flag=g.Bs.Filtered;return{isApplicable:e=>e===g.s_.Hydrophobic,handleInterContact:(e,t,r)=>{s(e,t,r,l,u)},startUnit:(e,t,a)=>{r=new Map,n=e=>t.edgeProps.flag[e]=g.Bs.Filtered},handleIntraContact:(e,t,a)=>{s(e,t,a,r,n)}}}(0,t),function(e,t){let{contacts:r}=t,a=(e,a)=>{let n=e.types[e.feature]===g.Te.WeakHydrogenDonor?a:e,i=n.members[n.offsets[n.feature]],{edgeProps:{type:o},elementsIndex:{offsets:s,indices:l}}=t.unitsContacts.get(n.unit.id);for(let e=s[i],t=s[i+1];e<t;++e)if(o[l[e]]===g.s_.HydrogenBond)return!0;let u=r.getEdgeIndices(n.feature,n.unit.id);for(let e=0,t=u.length;e<t;++e)if(r.edges[u[e]].props.type===g.s_.HydrogenBond)return!0;return!1};return{isApplicable:e=>
7319e===g.s_.WeakHydrogenBond,handleInterContact:(e,t,n)=>{a(t,n)&&(r.edges[e].props.flag=g.Bs.Filtered)},startUnit:()=>{},handleIntraContact:(e,r,n)=>{if(a(r,n)){let{flag:a}=t.unitsContacts.get(r.unit.id).edgeProps;a[e]=g.Bs.Filtered}}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Ionic,handleInterContact:(e,t,a)=>{eR([g.s_.HydrogenBond,g.s_.WeakHydrogenBond],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.HydrogenBond,g.s_.WeakHydrogenBond],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Hydrophobic||e===g.s_.CationPi,handleInterContact:(e,t,a)=>{eR([g.s_.PiStacking],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.PiStacking],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Ionic,handleInterContact:(e,t,a)=>{eR([g.s_.MetalCoordination],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.MetalCoordination],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t)];for(let t=0,n=r.edgeCount;t<n;++t){let n=r.edges[t],s=e.unitMap.get(n.unitA),l=e.unitMap.get(n.unitB),u=a.Info(e,s,i.get(n.unitA));u.feature=n.indexA;let c=a.Info(e,l,i.get(n.unitB));for(let e of(c.feature=n.indexB,o))e.isApplicable(n.props.type)&&e.handleInterContact(t,u,c)}let s=n.keys();for(;;){let{done:t,value:r}=s.next();if(t)break;let l=n.get(r),c=i.get(r),d=e.unitMap.get(r);if(!u.Unit.isAtomic(d))continue;let p=a.Info(e,d,c),f=a.Info(e,d,c);for(let e of o)e.startUnit(d,l,c);for(let e=0,t=2*l.edgeCount;e<t;++e)for(let t of(p.feature=l.a[e],f.feature=l.b[e],o))t.isApplicable(l.edgeProps.type[e])&&t.handleIntraContact(e,p,f)}}(t,C),C}},11056:function(e,t,r){r.d(t,{Wt:function(){return j}});var a=r(14086),n=r(7791),i=r(84894),o=r(30502),s=r(87144),l=r(67589),u=r(34526),c=r(4376),d=r(21300),p=r(84889),f=r(31745),m=r(72558),h=r(48984),g=r(65410),b=r(48930),y=r(42743),x=r(97667);let S={sizeFactor:a.e.Numeric(.3,{min:0,max:10,step:.01}),dashCount:a.e.Numeric(6,{min:1,max:10,step:1}),dashScale:a.e.Numeric(.4,{min:0,max:2,step:.1}),ignoreHydrogens:a.e.Boolean(!1),ignoreHydrogensVariant:a.e.Select("all",a.e.arrayToOptions(["all","non-polar"])),includeParent:a.e.Boolean(!1),parentDisplay:a.e.Select("stub",a.e.arrayToOptions(["stub","full","between"]),{description:'Only has an effect when "includeParent" is enabled. "Stub" shows just the child side of interactions to the parent. "Full" shows both sides of interactions to the parent. "Between" shows only interactions to the parent.'})};var T=r(84942);async function C(e,t,r,a,n,i){if(!o.Unit.isAtomic(t))return c.K.createEmpty(i);let{child:l}=r,f=null==l?void 0:l.unitMap.get(t.id);if(l&&!f)return c.K.createEmpty(i);let m=o.StructureElement.Location.create(r,t),h=d.D.get(r).value,S=h.unitsFeatures.get(t.id),C=h.unitsContacts.get(t.id),{x:O,y:I,z:A,members:w,offsets:D,types:E}=S,{edgeCount:M,a:P,b:k,edgeProps:{flag:B,type:_}}=C,{sizeFactor:R,ignoreHydrogens:F,ignoreHydrogensVariant:L,parentDisplay:z}=n;if(!M)return c.K.createEmpty(i);let{elements:N,conformation:G}=t,U=(0,s.AO)(),V=(0,s.AO)(),j=(0,s.AO)(),{mesh:H,boundingSphere:q}=(0,p.fV)(e,{linkCount:2*M,position:(e,a,n)=>{let i=_[n];if(F&&"all"===L||i!==g.s_.HydrogenBond&&(i!==g.s_.WeakHydrogenBond||"non-polar"===L))s.AO.set(e,O[P[n]],I[P[n]],A[P[n]]),s.AO.set(a,O[k[n]],I[k[n]],A[k[n]]);else{let o=w[D[P[n]]],l=w[D[k[n]]];G.invariantPosition(N[o],V),G.invariantPosition(N[l],j);let u=s.AO.distance(V,j),c=u;s.AO.copy(e,V),s.AO.copy(a,j);let d=i===g.s_.HydrogenBond?g.Te.HydrogenDonor:g.Te.WeakHydrogenDonor;E[D[P[n]]]===d?(0,T.rY)(t,o,(a,n)=>{if((0,y.oy)(r,t,N[n],"all")){G.invariantPosition(N[n],U);let t=s.AO.distance(U,j);t<u&&(u=t,s.AO.copy(e,U))}}):(0,T.rY)(t,l,(e,n)=>{if((0,y.oy)(r,t,N[n],"all")){G.invariantPosition(N[n],U);let e=s.AO.distance(U,V);e<c&&(c=e,s.AO.copy(a,U))}})}},style:e=>p.uj.Dashed,radius:e=>{m.element=N[w[D[P[e]]]];let t=a.size.size(m);return m.element=N[w[D[k[e]]]],Math.min(t,a.size.size(m))*R},ignore:e=>{if(B[e]===g.Bs.Filtered)return!0;if(f){if("stub"===z){let t=P[e];for(let e=D[t],r=D[t+1];e<r;++e){let t=N[w[D[e]]];if(!u.SortedArray.has(f.elements,t))return!0}}else if("full"===z||"between"===z){let t=!1,r=!1,a=P[e];
7319for(let e=D[a],r=D[a+1];e<r;++e){let r=N[w[D[e]]];u.SortedArray.has(f.elements,r)||(t=!0)}let n=k[e];for(let e=D[n],t=D[n+1];e<t;++e){let t=N[w[D[e]]];u.SortedArray.has(f.elements,t)||(r=!0)}return"full"===z?t&&r:t===r}else(0,x.UT)(z)}return!1}},n,i);if(q)H.setBoundingSphere(q);else if(H.triangleCount>0){let e=b.CP.expand((0,b.CP)(),(null!=f?f:t).boundary.sphere,1*R);H.setBoundingSphere(e)}return H}let O={...f.PO,...p.Vj,...S};function I(e){return(0,f.UJ)({defaultProps:a.e.getDefaultValues(O),createGeometry:C,createLocationIterator:E,getLoci:A,eachLocation:D,setUpdateState:(e,t,r,a,n,i,o)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.dashCount!==r.dashCount||t.dashScale!==r.dashScale||t.dashCap!==r.dashCap||t.radialSegments!==r.radialSegments||t.ignoreHydrogens!==r.ignoreHydrogens||t.ignoreHydrogensVariant!==r.ignoreHydrogensVariant||t.parentDisplay!==r.parentDisplay;let s=d.D.get(i.structure).version;e.info.interactionsHash!==s&&(e.createGeometry=!0,e.updateTransform=!0,e.updateColor=!0,e.info.interactionsHash=s)}},e)}function A(e,t,r){let{objectId:a,instanceId:n,groupId:i}=e;if(r===a){let{structure:e,group:r}=t,a=e.unitMap.get(r.units[n].id),o=d.D.get(e).value,{a:s,b:l}=o.unitsContacts.get(a.id);return h.yd.Loci(e,o,[{unitA:a,indexA:s[i],unitB:a,indexB:l[i]},{unitA:a,indexA:l[i],unitB:a,indexB:s[i]}])}return l.Rh}let w=new Set;function D(e,t,r,a){let n=!1;if(h.yd.isLoci(e)){let{structure:a,group:i}=t;if(!o.Structure.areEquivalent(e.data.structure,a))return!1;let s=d.D.get(a).value;if(e.data.interactions!==s)return!1;let l=i.units[0],c=s.unitsContacts.get(l.id),p=2*c.edgeCount;for(let t of e.elements){if(t.unitA!==t.unitB)continue;let e=i.unitIndexMap.get(t.unitA.id);if(void 0!==e){let a=c.getDirectedEdgeIndex(t.indexA,t.indexB);-1!==a&&r(u.Xp.ofSingleton(e*p+a))&&(n=!0)}}}else if(o.StructureElement.Loci.is(e)){let{structure:i,group:s}=t;if(!o.Structure.areEquivalent(e.structure,i))return!1;let l=d.D.get(i).value;if(!l)return!1;let c=s.units[0],p=l.unitsContacts.get(c.id),f=l.unitsFeatures.get(c.id),m=2*p.edgeCount,{offset:h}=p,{offsets:g,indices:b}=f.elementsIndex,{members:y,offsets:x}=f;for(let t of e.elements){let e=s.unitIndexMap.get(t.unit.id);void 0!==e&&(u.hU.forEach(t.indices,e=>{for(let t=g[e],r=g[e+1];t<r;++t){let e=b[t];for(let t=h[e],r=h[e+1];t<r;++t)w.add(t)}}
7319),w.forEach(i=>{if(a){let e=p.a[i];for(let r=x[e],a=x[e+1];r<a;++r)if(!u.hU.has(t.indices,y[r]))return;let r=p.b[i];for(let e=x[r],a=x[r+1];e<a;++e)if(!u.hU.has(t.indices,y[e]))return}r(u.Xp.ofSingleton(e*m+i))&&(n=!0)}),w.clear())}}return n}function E(e){let{structure:t,group:r}=e,a=r.units[0],n=d.D.get(t).value,i=n.unitsContacts.get(a.id),o=2*i.edgeCount,s=r.units.length,l=h.yd.Location(n,t),{element:u}=l;return(0,m.OF)(o,s,1,(e,t)=>{let a=r.units[t];return u.unitA=a,u.indexA=i.a[e],u.unitB=a,u.indexB=i.b[e],l})}var M=r(43091),P=r(91327);function k(e,t,r,a,n){if(!t.hasAtomic)return c.K.createEmpty(n);let i=o.StructureElement.Location.create(t),{contacts:l,unitsFeatures:f}=d.D.get(t).value,{edgeCount:m,edges:h}=l,{sizeFactor:S,ignoreHydrogens:C,ignoreHydrogensVariant:O,parentDisplay:I}=a;if(!m)return c.K.createEmpty(n);let{child:A}=t,w=(0,s.AO)(),D=(0,s.AO)(),E=(0,s.AO)(),{mesh:M,boundingSphere:P}=(0,p.fV)(e,{linkCount:m,position:(e,r,a)=>{let{unitA:n,indexA:i,unitB:o,indexB:l,props:{type:u}}=h[a],c=f.get(n),d=f.get(o),p=t.unitMap.get(n),m=t.unitMap.get(o);if(C&&"all"===O||u!==g.s_.HydrogenBond&&(u!==g.s_.WeakHydrogenBond||"non-polar"===O))s.AO.set(e,c.x[i],c.y[i],c.z[i]),s.AO.transformMat4(e,e,p.conformation.operator.matrix),s.AO.set(r,d.x[l],d.y[l],d.z[l]),s.AO.transformMat4(r,r,m.conformation.operator.matrix);else{let a=c.members[c.offsets[i]],n=d.members[d.offsets[l]];p.conformation.position(p.elements[a],D),m.conformation.position(m.elements[n],E);let o=s.AO.distance(D,E),f=o;s.AO.copy(e,D),s.AO.copy(r,E);let h=u===g.s_.HydrogenBond?g.Te.HydrogenDonor:g.Te.WeakHydrogenDonor;c.types[c.offsets[i]]===h?(0,T.KM)(t,p,a,(r,a)=>{let n=r.elements[a];if((0,y.oy)(t,r,n,"all")){r.conformation.position(n,w);let t=s.AO.distance(w,E);t<o&&(o=t,s.AO.copy(e,w))}}):(0,T.KM)(t,m,n,(e,a)=>{let n=e.elements[a];if((0,y.oy)(t,e,n,"all")){e.conformation.position(n,w);let t=s.AO.distance(w,D);t<f&&(f=t,s.AO.copy(r,w))}})}},style:e=>p.uj.Dashed,radius:e=>{let a=h[e],n=f.get(a.unitA);i.unit=t.unitMap.get(a.unitA),i.element=i.unit.elements[n.members[n.offsets[a.indexA]]];let o=r.size.size(i),s=f.get(a.unitB);return i.unit=t.unitMap.get(a.unitB),i.element=i.unit.elements[s.members[s.offsets[a.indexB]]],Math.min(o,r.size.size(i))*S},ignore:e=>{if(h[e].props.flag===g.Bs.Filtered)return!0;if(A){let r=h[e];if("stub"===I){let e=A.unitMap.get(r.unitA);if(!e)return!0;let a=t.unitMap.get(r.unitA),{offsets:n,members:i}=f.get(r.unitA);for(let t=n[r.indexA],o=n[r.indexA+1];t<o;++t){let r=a.elements[i[t]];if(!u.SortedArray.has(e.elements,r))return!0}}else if("full"===I||"between"===I){let e=!1,a=!1,n=A.unitMap.get(r.unitA);if(n){let a=t.unitMap.get(r.unitA),{offsets:i,members:o}=f.get(r.unitA);for(let t=i[r.indexA],s=i[r.indexA+1];t<s;++t){let r=a.elements[o[t]];u.SortedArray.has(n.elements,r)||(e=!0)}}else e=!0;let i=A.unitMap.get(r.unitB);if(i){let e=t.unitMap.get(r.unitB),{offsets:n,members:o}=f.get(r.unitB);for(let t=n[r.indexB],s=n[r.indexB+1];t<s;++t){let r=e.elements[o[t]];u.SortedArray.has(i.elements,r)||(a=!0)}}else a=!0;return"full"===I?e&&a:e===a}else(0,x.UT)(I)}return!1}},a,n);if(P)M.setBoundingSphere(P);else if(M.triangleCount>0){let{child:e}=t,r=b.CP.expand((0,b.CP)(),(null!=e?e:t).boundary.sphere,1*S);M.setBoundingSphere(r)}return M}let B={...M.kN,...p.Vj,...S};function _(e){return(0,M.uS)({defaultProps:a.e.getDefaultValues(B),createGeometry:k,createLocationIterator:N,getLoci:R,eachLocation:z,setUpdateState:(e,t,r,a,n,i,o)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.dashCount!==r.dashCount||t.dashScale!==r.dashScale||t.dashCap!==r.dashCap||t.radialSegments!==r.radialSegments||t.ignoreHydrogens!==r.ignoreHydrogens||t.ignoreHydrogensVariant!==r.ignoreHydrogensVariant||t.parentDisplay!==r.parentDisplay;let s=d.D.get(i).version;e.info.interactionsHash!==s&&(e.createGeometry=!0,e.updateTransform=!0,e.updateColor=!0,e.info.interactionsHash=s)}},e)}function R(e,t,r){let{objectId:a,groupId:n}=e;if(r===a){let e=d.D.get(t).value,r=e.contacts.edges[n],a=t.unitMap.get(r.unitA),i=t.unitMap.get(r.unitB);return h.yd.Loci(t,e,[{unitA:a,indexA:r.indexA,unitB:i,indexB:r.indexB},{unitA:i,indexA:r.indexB,unitB:a,indexB:r.indexA}])}return l.Rh}let F=new Map,L=new Set;function z(e,t,r,a){let n=!1;if(h.yd.isLoci(e)){if(!o.Structure.areEquivalent(e.data.structure,t))return!1;let a=d.D.get(t).value;if(e.data.interactions!==a)return!1;let{contacts:i}=a;for(let t of e.elements){let e=i.getEdgeIndex(t.indexA,t.unitA.id,t.indexB,t.unitB.id);-1!==e&&r(u.Xp.ofSingleton(e))&&(n=!0)}}
7319else if(o.StructureElement.Loci.is(e)){if(!o.Structure.areEquivalent(e.structure,t)||a&&1===e.elements.length)return!1;let i=d.D.get(t).value;if(!i)return!1;let{contacts:s,unitsFeatures:l}=i;for(let t of e.elements)F.set(t.unit.id,t.indices);for(let t of e.elements){let{unit:e}=t;P.fb.isAtomic(e)&&u.hU.forEach(t.indices,t=>{for(let r of s.getContactIndicesForElement(t,e))L.add(r)})}L.forEach(e=>{if(a){let{indexA:t,unitA:r,indexB:a,unitB:n}=s.edges[e],i=F.get(r),o=F.get(n);if(!i||!o)return;let{offsets:c,members:d}=l.get(r);for(let e=c[t],r=c[t+1];e<r;++e)if(!u.hU.has(i,d[e]))return;let{offsets:p,members:f}=l.get(n);for(let e=p[a],t=p[a+1];e<t;++e)if(!u.hU.has(o,f[e]))return}r(u.Xp.ofSingleton(e))&&(n=!0)}),F.clear(),L.clear()}return n}function N(e){let t=d.D.get(e).value,{contacts:r}=t,a=r.edgeCount,n=h.yd.Location(t,e),{element:i}=n;return(0,m.OF)(a,1,1,t=>{let a=r.edges[t];return i.unitA=e.unitMap.get(a.unitA),i.indexA=a.indexA,i.unitB=e.unitMap.get(a.unitB),i.indexB=a.indexB,n},!0)}var G=r(25945);let U={"intra-unit":(e,t)=>(0,i.kV)("Intra-unit interactions cylinder",e,t,I),"inter-unit":(e,t)=>(0,i.sh)("Inter-unit interactions cylinder",e,t,_)},V={...O,...B,unitKinds:(0,G.I4)(["atomic"]),sizeFactor:a.e.Numeric(.2,{min:.01,max:1,step:.01}),visuals:a.e.MultiSelect(["intra-unit","inter-unit"],a.e.objectToOptions(U))},j=(0,i.Xz)({name:"interactions",label:"Non-covalent Interactions",description:"Displays non-covalent interactions as dashed cylinders.",factory:function(e,t){return n.hX.createMulti("Interactions",e,t,i.U_,U)},getParams:function(e,t){return a.e.clone(V)},defaultValues:a.e.getDefaultValues(V),defaultColorTheme:{name:"interaction-type"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0&&d.D.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>d.D.attach(e,t,void 0,!0),detach:e=>d.D.ref(e,!1)},getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent})},85471:function(e,t,r){r.d(t,{qN:function(){return g}});var a=r(70371),n=r(14086),i=r(21300),o=r(65410),s=r(79455),l=r(48984),u=r(69062),c=r(28253);let d=(0,a.Il)(13421772),p=(0,a.E)({HydrogenBond:2851770,Hydrophobic:8421504,HalogenBond:4259775,Ionic:15779860,MetalCoordination:9191577,CationPi:16744448,PiStacking:9220966,WeakHydrogenBond:12967404}),f=[["Hydrogen Bond",p.HydrogenBond],["Hydrophobic",p.Hydrophobic],["Halogen Bond",p.HalogenBond],["Ionic",p.Ionic],["Metal Coordination",p.MetalCoordination],["Cation Pi",p.CationPi],["Pi Stacking",p.PiStacking],["Weak HydrogenBond",p.WeakHydrogenBond]];function m(e){switch(e){case o.s_.HydrogenBond:return p.HydrogenBond;case o.s_.Hydrophobic:return p.Hydrophobic;case o.s_.HalogenBond:return p.HalogenBond;case o.s_.Ionic:return p.Ionic;case o.s_.MetalCoordination:return p.MetalCoordination;case o.s_.CationPi:return p.CationPi;case o.s_.PiStacking:return p.PiStacking;case o.s_.WeakHydrogenBond:return p.WeakHydrogenBond;case o.s_.Unknown:return d}}let h={},g={name:"interaction-type",label:"Interaction Type",category:c.J.Misc,factory:function e(t,r){let a=t.structure?i.D.get(t.structure):void 0,n=a?(0,u.TO)(a.id,a.version):-1;return{factory:e,granularity:"group",color:a&&a.value?e=>{if(l.yd.isLocation(e)){let{unitsContacts:t,contacts:r}=e.data.interactions,{unitA:a,unitB:n,indexA:i,indexB:o}=e.element;if(a===n){let e=t.get(a.id),r=e.getDirectedEdgeIndex(i,o);return m(e.edgeProps.type[r])}{let e=r.getEdgeIndex(i,a.id,o,n.id);return m(r.edges[e].props.type)}}return d}:()=>d,props:r,contextHash:n,description:"Assigns colors according the interaction type of a link.",legend:(0,s.Z)(f)}},getParams:function(e){return h},defaultValues:n.e.getDefaultValues(h),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?i.D.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&i.D.ref(e.structure,!1)}}},6017:function(e,t,r){r.d(t,{g:function(){return S}});var a=r(14086),n=r(30502),i=r(34985),o=r(14507),s=r(84942),l=r(48502),u=r(34526),c=r(91044);let d=new n.Bond.ElementBondIterator,p=new n.Bond.ElementBondIterator,f=new n.Bond.ElementBondIterator,m=new n.Bond.ElementBondIterator,h={assignCharge:a.e.Select("auto",[["always","always"],["auto","auto"],["never","never"]]),assignH:a.e.Select("auto",[["always","always"],["auto","auto"],["never","never"]])};async function g(e,t,r){let g={...a.e.getDefaultValues(h),...r},b=new Map,y=`valence-model-${JSON.stringify(g)}`;for(let e=0,r=t.units.length;e<r;++e){let r=t.units[e];if(n.Unit.isAtomic(r)){let e;r.transientCache.has(y)?e=r.transientCache.get(y):(e=function(e,t,r){let a;let n=t.elements.length,h=new Int8Array(n),g=new Int8Array(n),b=new Int8Array(n),y=new Int8Array(n),x=!!e.parent;if(x){let r=e.root.unitMap.get(t.id);if((a=u.SortedArray.indicesOf(r.elements,t.elements)).length!==t.elements.length)throw Error("expected to find an index for every element");t=r,e=e.root}let S=!1;for(let e=0;e<n;++e){let r=x?a[e]:e;if((0,s.TZ)(t,r)===i.eK.H){S=!0;break}}for(let u=0;u<n;++u){let[n,T,C,O]=function(e,t,r,a,n){let u=(0,s.ls)(e,t,r,i.eK.H),h=(0,s.TZ)(t,r),g=(0,s.E3)(t,r),b="always"===a.assignCharge||"auto"===a.assignCharge&&0===g,y="al
7319ways"===a.assignH||"auto"===a.assignH&&!n&&0===u,x=(0,s.ui)(e,t,r),S=function(e,t,r){let a=0,{offset:n,edgeProps:{flags:i,order:o}}=t.bonds;for(let e=n[r],t=n[r+1];e<t;++e)c.BondType.isCovalent(i[e])&&(a+=o[e]);return e.interUnitBonds.getEdgeIndices(r,t.id).forEach(t=>{let r=e.interUnitBonds.edges[t];c.BondType.isCovalent(r.props.flag)&&(a+=r.props.order)}),a}(e,t,r),T=function(e,t,r){let a=(0,s.TZ)(t,r),n=a===i.eK.O||a===i.eK.N;if(n&&4===(0,s.ui)(e,t,r))return!1;for(d.setElement(e,t,r);d.hasNext;){let t=d.move();if(t.order>1)return!0;if(n){let r=(0,s.TZ)(t.otherUnit,t.otherIndex);for(p.setElement(e,t.otherUnit,t.otherIndex);p.hasNext;){let e=p.move();if(e.order>1){if((r===i.eK.P||r===i.eK.S)&&(0,s.TZ)(e.otherUnit,e.otherIndex)===i.eK.O)continue;return!0}}}}return!1}(e,t,r),C=S-x>0,O=0,I=o.Qq.Unknown;switch(h){case i.eK.H:b&&(0===x?(g=1,I=o.Qq.Spherical):1===x&&(g=0,I=o.Qq.Terminal));break;case i.eK.C:b&&(g=0),y&&(O=Math.max(0,4-S-Math.abs(g))),I=(0,o.Yz)(x+O+Math.max(0,-g));break;case i.eK.N:if(b){if(y){if(T&&S<4)g=x-u==1&&S-u==2?1:0;else for(f.setElement(e,t,r);f.hasNext;){let e=f.move(),t=(0,s.TZ)(e.otherUnit,e.otherIndex);if(t===i.eK.S||(0,i.IP)(t)){g=0;break}g=1}}else g=S-3}y&&(O=Math.max(0,3-S+g)),I=T&&!C?(0,o.Yz)(x+O-g):(0,o.Yz)(x+O+1-g);break;case i.eK.O:if(b&&(y||(g=S-2),1===S)){f.setElement(e,t,r);e:for(;f.hasNext;){let a=f.move();for(m.setElement(e,a.otherUnit,a.otherIndex);m.hasNext;){let e=m.move();if(!(e.otherUnit===t&&e.otherIndex===r)&&(0,s.TZ)(e.otherUnit,e.otherIndex)===i.eK.O&&2===e.order){g=-1;break e}}}}y&&(O=Math.max(0,2-S+g)),I=T&&!C?(0,o.Yz)(x+O-g+1):(0,o.Yz)(x+O-g+2);break;case i.eK.S:b&&!y&&(g=S<=3&&0===(0,s.ls)(e,t,r,i.eK.O)?S-2:0),y&&S<2&&(O=Math.max(0,2-S+g)),S<=3&&(I=(0,o.Yz)(x+O-g+2));break;case i.eK.F:case i.eK.CL:case i.eK.BR:case i.eK.I:case i.eK.AT:b&&(g=S-1);break;case i.eK.LI:case i.eK.NA:case i.eK.K:case i.eK.RB:case i.eK.CS:case i.eK.FR:b&&(g=1-S);break;case i.eK.BE:case i.eK.MG:case i.eK.CA:case i.eK.SR:case i.eK.BA:case i.eK.RA:b&&(g=2-S);break;default:l.Au&&console.warn("Requested charge, protonation for an unhandled element",h)}return[g,O,O+u,I]}(e,t,x?a[u]:u,r,S);h[u]=n,g[u]=T,b[u]=C,y[u]=O}return{charge:h,implicitH:g,totalH:b,idealGeometry:y}}(t,r,g),r.transientCache.set(y,e)),b.set(r.id,e)}}return b}var b=r(20292),y=r(67646);let x={...h},S=b.b.createProvider({label:"Valence Model",descriptor:(0,y.d)({name:"molstar_computed_valence_model"}),type:"local",defaultParams:x,getParams:e=>x,isApplicable:e=>!0,obtain:async(e,t,r)=>{let n={...a.e.getDefaultValues(x),...r};return{value:await g(e.runtime,t,n)}}})},71522:function(e,t,r){r.d(t,{ad:function(){return a},o0:function(){return n}});let a={kind:"null-location"};function n(e,t,r){return{kind:"data-location",tag:e,data:t,element:r}}},67589:function(e,t,r){r.d(t,{GK:function(){return g},Rh:function(){return y},SL:function(){return T},dh:function(){return S},h:function(){return b},jF:function(){return x},o_:function(){return a}});var a,n=r(30502),i=r(20341),o=r(93898),s=r(48930),l=r(87144),u=r(91327),c=r(14086),d=r(85764),p=r(83576),f=r(75042),m=r(40424),h=r(34526);let g={kind:"every-loci"};function b(e){return!!e&&"every-loci"===e.kind}let y={kind:"empty-loci"};function x(e){return!!e&&"empty-loci"===e.kind}function S(e){return!!e&&"data-loci"===e.kind}function T(e,t,r,a,n){return{kind:"data-loci",tag:e,data:t,elements:r,getBoundingSphere:a,getLabel:n}}!function(e){let t=new p.q("98");function r(e,t){var r;if("every-loci"!==e.kind&&"empty-loci"!==e.kind){if(t||(t=(0,s.CP)()),"structure-loci"===e.kind)return s.CP.copy(t,e.structure.boundary.sphere);if("element-loci"===e.kind)return s.CP.copy(t,n.StructureElement.Loci.getBoundary(e).sphere);if("bond-loci"===e.kind)return i.fY.getBoundingSphere(e,t);if("shape-loci"===e.kind)return s.CP.copy(t,e.shape.geometry.boundingSphere);else if("group-loci"===e.kind)return o.F.getBoundingSphere(e,t);else if("data-loci"===e.kind)return null===(r=e.getBoundingSphere)||void 0===r?void 0:r.call(e,t);else if("volume-loci"===e.kind)return m.f.getBoundingSphere(e.volume,t);else if("isosurface-loci"===e.kind)return m.f.Isosurface.getBoundingSphere(e.volume,e.isoValue,t);else if("cell-loci"===e.kind)return m.f.Cell.getBoundingSphere(e.volume,e.elements,t);else if("segment-loci"===e.kind)return m.f.Segment.getBoundingSphere(e.volume,e.elements,t)}}e.getBundleBoundingSphere=function(e){let a=e.loci.map(e=>r(e)).filter(e=>!!e);for(let e of(t.reset(),a))t.includePositionRadius(e.center,e.radius);for(let e of(t.finishedIncludeStep(),a))t.radiusPositionRadius(e.center,e.radius);return t.getSphere()},e.areEqual=function(e,t){return!!(b(e)&&b(t)||x(e)&&x(t))||(S(e)&&S(t)?function(e,t){if(!(0,d.wU)(e.data,t.data)||e.tag!==t.tag||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r)if(!(0,d.wU)(e.elements[r],t.elements[r]))return!1;return!0}(e,t):u.vA.isLoci(e)&&u.vA.isLoci(t)?u.vA.areLociEqual(e,t):n.StructureElement.Loci.is(e)&&n.StructureElement.Loci.is(t)?n.StructureElement.Loci.areEqual(e,t):i.fY.isLoci(e)&&i.fY.isLoci(t)?i.fY.areLociEqual(e,t):o.b.isLoci(e)&&o.b.isLoci(t)?o.b.areLociEqual(e,t):o.F.isLoci(e)&&o.F.isLoci(t)?o.F.areLociEqual(e,t):m.f.isLoci(e)&&m.f.isLoci(t)?m.f.areLociEqual(e,t):m.f.Isosurface.isLoci(e)&&m.f.Isosurface.isLoci(t)?m.f.Isosurface.areLociEqual(e,t):m.f.Cell.isLoci(e)&&m.f.Cell.isLoci(t)?m.f.Cell.areLociEqual(e,t):!!(m.f.Segment.isLoci(e)&&m.f.Segment.isLoci(t))&&m.f.Segment.areLociEqual(e,t))},e.isEvery=function(e){return!!e&&"every-loci"===e.kind},e.isEmpty=function(e){return!b(e)&&(!!x(e)||(S(e)?0===e.elements.length:u.vA.isLoci(e)?u.vA.isLociEmpty(e):n.StructureElement.Loci.is(e)?n.StructureElement.Loci.isEmpty(e):i.fY.isLoci(e)?i.fY.isLociEmpty(e):o.b.isLoci(e)?o.b.isLociEmpty(e):o.F.isLoci(e)?o.F.isLociEmpty(e):m.f.isLoci(e)?m.f.isLociEmpty(e):m.f.Isosurface.isLoci(e)?m.f.Isosurface.isLociEmpty(e):m.f.Cell.isLoci(e)?m.f.Cell.isLociEmpty(e):!!m.f.Segment.isLoci(e)&&m.f.Segment.isLociEmpty(e)))},e.remap=function(e,t){return t instanceof u.vA&&(n.StructureElement.Loci.is(e)?e=n.StructureElement.Loci.remap(e,t):u.vA.isLoci(e)?e=u.vA.remapLoci(e,t):i.fY.isLoci(e)&&(e=i.fY.remapLoci(e,t))),e},e.getBoundingSphere=r;let a=s.CP.zero();e.getCenter=function(e,t){let n=r(e,a);return n?l.AO.copy(t||(0,l.AO)(),n.center):void 0},e.getPrincipalAxes=function(e){if("every-loci"!==e.kind&&"empty-loci"!==e.kind){if("structure-loci"===e.kind)return n.StructureElement.Loci.getPrincipalAxes(u.vA.toStructureElementLoci(e.structure));if("element-loci"===e.kind)return n.StructureElement.Loci.getPrincipalAxes(e);if("bond-loci"===e.kind)return;else if("shape-loci"===e.kind)return;else if("group-loci"===e.kind)return;else if("data-loci"===e.kind)return;else if("volume-loci"===e.kind)return;else if("isosurface-loci"===e.kind)return;else if("cell-loci"===e.kind)return;else if("segment-loci"===e.kind)return}};let g={element:e=>e,residue:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeResidues(e,!0):e,chain:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeChains(e):e,entity:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeEntities(e):e,model:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeModels(e):e,operator:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeOperators(e):e,structure:e=>n.StructureElement.Loci.is(e)?u.vA.toStructureElementLoci(e.structure):o.F.isLoci(e)?o.b.Loci(e.shape):m.f.Cell.isLoci(e)?m.f.Loci(e.volume,h.Xp.ofLength(e.volume.instances.length)):m.f.Isosurface.isLoci(e)?m.f.Loci(e.volume,h.Xp.ofLength(e.volume.instances.length)):e,elementInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(e):e,residueInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(n.StructureElement.Loci.extendToWholeResidues(e,!0)):e,chainInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(n.StructureElement.Loci.extendToWholeChains(e)):e};function y(e,t){return g[t](e)}e.GranularityOptions=c.e.objectToOptions(g,e=>{switch(e){case"element":return"Atom/Coarse Element";case"elementInstances":return["Atom/Coarse Element Instances","With Symmetry"];case"structure":return"Structure/Shape";default:return e.indexOf("Instances")?[(0,f.ce)(e),"With Symmetry"]:(0,f.ce)(e)}}),e.simpleGranularity=function(e){return e.replace("Instances","")},e.applyGranularity=y,e.normalize=function(e,t,r=!1){return("element"!==t||r)&&i.fY.isLoci(e)&&(e=i.fY.toStructureElementLoci(e)),u.vA.
7319isLoci(e)&&(e=u.vA.toStructureElementLoci(e.structure)),n.StructureElement.Loci.is(e)&&(e=n.StructureElement.Loci.remap(e,e.structure.root)),t&&(e=y(e,t)),e}}(a||(a={}))},93898:function(e,t,r){r.d(t,{F:function(){return a.F},b:function(){return a.b}});var a=r(2462)},2462:function(e,t,r){r.d(t,{F:function(){return n},b:function(){return a}});var a,n,i=r(85764),o=r(34526),s=r(11803),l=r(87144),u=r(48930),c=r(43398),d=r(87909),p=r(62590),f=r(41306),m=r(67241),h=r(72558);!function(e){function t(e){return{color:(0,p.lS)({shape:e},{}),size:(0,d.wo)({shape:e},{})}}function r(e){let t=e.transforms.length,r=n.Location(e);return(0,h.OF)(e.groupCount,t,1,(e,t)=>(r.group=e,r.instance=t,r))}function a(e,t,r,a,n){let i=n&&n.aTransform.ref.value.length>=16*e.length?n.aTransform.ref.value:new Float32Array(16*e.length);for(let t=0,r=e.length;t<r;++t)l.yb.toArray(e[t],i,16*t);return(0,f.pH)(i,e.length,t,r,a,n)}e.create=function(e,t,r,a,n,o,u,c){return{id:i.hb.create22(),name:e,sourceData:t,geometry:r,transforms:u||[l.yb.identity()],get groupCount(){return null!=c?c:s.Z.getGroupCount(r)},getColor:a,getSize:n,getLabel:o}},e.getTheme=t,e.groupIterator=r,e.createTransform=a,e.createRenderObject=function(e,n){let i=t(e),o=s.Z.getUtils(e.geometry),l=(0,m.xH)(),u=r(e),c=a(e.transforms,e.geometry.boundingSphere,n.cellSize,n.batchSize),d=o.createValues(e.geometry,c,u,i,n),p=o.createRenderableState(n);return(0,m.Hq)(e.geometry.kind,d,p,l)},e.Loci=function(e){return{kind:"shape-loci",shape:e}},e.isLoci=function(e){return!!e&&"shape-loci"===e.kind},e.areLociEqual=function(e,t){return e.shape===t.shape},e.isLociEmpty=function(e){return 0===e.shape.groupCount}}(a||(a={})),function(e){function t(e){let t=0;for(let r of e.groups)t+=o.hU.size(r.ids);return t}e.Location=function(e,t=0,r=0){return{kind:"group-location",shape:e,group:t,instance:r}},e.isLocation=function(e){return!!e&&"group-location"===e.kind},e.Loci=function(e,t){return{kind:"group-loci",shape:e,groups:t}},e.isLoci=function(e){return!!e&&"group-loci"===e.kind},e.areLociEqual=function(e,t){if(e.shape!==t.shape||e.groups.length!==t.groups.length)return!1;for(let r=0,a=e.groups.length;r<a;++r){let{ids:a,instance:n}=e.groups[r],{ids:i,instance:s}=t.groups[r];if(n!==s||!o.hU.areEqual(a,i))return!1}return!0},e.isLociEmpty=function(e){return 0===t(e)},e.size=t;let r=new c.B,a=l.AO.zero();function n(e,t,n,i){let{indices:s,offsets:u}=t;for(let{ids:t,instance:c}of e)o.hU.forEach(t,e=>{for(let t=u[e],o=u[e+1];t<o;++t)l.AO.fromArray(a,n,3*s[t]),l.AO.transformMat4(a,a,i[c]),r.includeStep(a)})}function i(e,t,n,i){let{indices:s,offsets:u}=t;for(let{ids:t,instance:c}of e)o.hU.forEach(t,e=>{for(let t=u[e],o=u[e+1];t<o;++t)l.AO.fromArray(a,n,3*s[t]),l.AO.transformMat4(a,a,i[c]),r.radiusStep(a)})}e.getBoundingSphere=function(e,t){t||(t=(0,u.CP)()),r.reset();let a=0,{geometry:s,transforms:c}=e.shape;if("mesh"===s.kind||"points"===s.kind){let t="mesh"===s.kind?s.vertexBuffer.ref.value:s.centerBuffer.ref.value;n(e.groups,s.groupMapping,t,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,t,c)}else if("lines"===s.kind){let t=s.startBuffer.ref.value,a=s.endBuffer.ref.value;n(e.groups,s.groupMapping,t,c),n(e.groups,s.groupMapping,a,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,t,c),i(e.groups,s.groupMapping,a,c)}else{if("spheres"!==s.kind&&"text"!==s.kind)return u.CP.copy(t,s.boundingSphere);let l=s.centerBuffer.ref.value;for(let{ids:t,instance:u}of(n(e.groups,s.groupMapping,l,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,l,c),e.groups))o.hU.forEach(t,t=>{let r=e.shape.getSize(t,u);a<r&&(a=r)})}return l.AO.copy(t.center,r.center),t.radius=Math.sqrt(r.radiusSq),u.CP.expand(t,t,a),t}}(n||(n={}))},1573:function(e,t,r){r.d(t,{f:function(){return a.f},r:function(){return n.r}});var a=r(40424),n=r(27203)},27203:function(e,t,r){r.d(t,{r:function(){return a}});var a,n=r(48930),i=r(87144),o=r(36111);function s(e,t,r,a){let n=(a-r)/t;0===n&&(n=1);let i=new Int32Array(t);for(let a=0,o=e.length;a<o;a++){let o=Math.floor((e[a]-r)/n);o>=t?o=t-1:o<0&&(o=0),i[o]++}return{min:r,max:a,binWidth:n,counts:i}}var l=r(23833);let u=i.AO.transformMat4,c=i.AO.lerp;!function(e){e.One={transform:{kind:"matrix",matrix:i.yb.identity()},cells:i.es.create(i.es.Space([1,1,1],[0,1,2]),i.es.Data1([0])),stats:{min:0,max:0,mean:0,sigma:0}};let t=(0,i.yb)(),r=(0,i.yb)();function a(e,t,r,a,n){let i=Math.trunc(e[0]),o=Math.trunc(e[1]),s=Math.trunc(e[2]);if(i<0||i>=t||o<0||o>=r||s<0||s>=a)return Number.NaN;let u=e[0]-i,c=e[1]-o,d=e[2]-s,p=Math.min(i+1,t-1),f=Math.min(o+1,r-1),m=Math.min(s+1,a-1),h=n(i,o,s),g=n(p,o,s),b=n(i,f,s),y=n(p,f,s),x=(0,l.t7)((0,l.t7)(h,g,u),(0,l.t7)(b,y,u),
7319c);h=n(i,o,m),g=n(p,o,m),b=n(i,f,m),y=n(p,f,m);let S=(0,l.t7)((0,l.t7)(h,g,u),(0,l.t7)(b,y,u),c);return(0,l.t7)(x,S,d)}e.getGridToCartesianTransform=function(e){if("matrix"===e.transform.kind)return i.yb.copy((0,i.yb)(),e.transform.matrix);if("spacegroup"===e.transform.kind){let{cells:{space:a}}=e,o=i.yb.fromScaling(t,i.AO.div((0,i.AO)(),n.XZ.size((0,i.AO)(),e.transform.fractionalBox),i.AO.ofArray(a.dimensions))),s=i.yb.fromTranslation(r,e.transform.fractionalBox.min);return i.yb.mul3((0,i.yb)(),e.transform.cell.fromFractional,s,o)}return i.yb.identity()},e.areEquivalent=function(e,t){return e===t},e.isEmpty=function(e){return 0===e.cells.data.length},e.getBoundingSphere=function(t,r){r||(r=(0,n.CP)());let a=t.cells.space.dimensions,i=e.getGridToCartesianTransform(t);return n.CP.fromDimensionsAndTransform(r,a,i)},e.getHistogram=function(e,t){let r=e._historams;return r||(r=e._historams={}),r[t]||(r[t]=function(e,t,r){if(r)return s(e,t,r.min,r.max);{let[r,a]=(0,o.V0)(e);return s(e,t,r,a)}}(e.cells.data,t,{min:e.stats.min,max:e.stats.max})),r[t]},e.makeGetTrilinearlyInterpolated=function(t,r){let n=e.getGridToCartesianTransform(t);i.yb.invert(n,n);let o=(0,i.AO)(),{stats:s}=t,{dimensions:l,get:c}=t.cells.space,d=t.cells.data,[p,f,m]=l,h=(e,t,r)=>c(d,e,t,r);return function(e){u(o,e,n);let t=a(o,p,f,m,h);return Number.isNaN(t)?t:"relative"===r?(t-s.mean)/s.sigma:t}},e.trilinearlyInterpolate=a;let d=(0,i.AO)(),p=(0,i.AO)(),f=(0,i.AO)(),m=(0,i.AO)(),h=(0,i.AO)(),g=(0,i.AO)(),b=(0,i.AO)(),y=(0,i.AO)();function x(e,t,r,a,n,i){let o=Math.trunc(e[0]),s=Math.trunc(e[1]),l=Math.trunc(e[2]);if(o<0||o>=t||s<0||s>=r||l<0||l>=a)return!1;let u=e[0]-o,x=e[1]-s,S=e[2]-l,T=Math.min(o+1,t-1),C=Math.min(s+1,r-1),O=Math.min(l+1,a-1);return n(o,s,l,d),n(T,s,l,p),n(o,C,l,f),n(T,C,l,m),c(h,d,p,u),c(g,f,m,u),c(b,h,g,x),n(o,s,O,d),n(T,s,O,p),n(o,C,O,f),n(T,C,O,m),c(h,d,p,u),c(g,f,m,u),c(y,h,g,x),c(i,b,y,S),!0}function S(e){if(e._gradients)return e._gradients;let t=function(e){let{dimensions:t,get:r,dataOffset:a}=e.cells.space,n=e.cells.data,[i,o,s]=t,l=i*o*s,u=new Float32Array(3*l),c=1/0,d=-1/0,p=0,f=0;for(let e=0;e<s;++e)for(let t=0;t<o;++t)for(let l=0;l<i;++l){let m=3*a(l,t,e),h=Math.max(0,l-1),g=Math.min(i-1,l+1),b=Math.max(0,t-1),y=Math.min(o-1,t+1),x=Math.max(0,e-1),S=Math.min(s-1,e+1),T=(r(n,g,t,e)-r(n,h,t,e))/(g-h||1),C=(r(n,l,y,e)-r(n,l,b,e))/(y-b||1),O=(r(n,l,t,S)-r(n,l,t,x))/(S-x||1);u[m]=T,u[m+1]=C,u[m+2]=O;let I=T*T+C*C+O*O;I<c&&(c=I),I>d&&(d=I),p+=I,f+=I*I}c===1/0&&(c=0),d===-1/0&&(d=1);let m=p/l,h=Math.sqrt(f/l);return{values:u,magnitude:{min:c=Math.sqrt(c),max:d=Math.sqrt(d),mean:m,sigma:h}}}(e);return e._gradients=t,t}e.trilinearlyInterpolateVec3=x,e.getGradients=S,e.makeGetInterpolatedGradient=function(e){let{values:t}=S(e),{dimensions:r,dataOffset:a}=e.cells.space,[n,i,o]=r,s=(e,r,n,i)=>{let o=3*a(e,r,n);i[0]=t[o],i[1]=t[o+1],i[2]=t[o+2]};return function(e,t){return x(e,n,i,o,s,t)}}}(a||(a={}))},40424:function(e,t,r){r.d(t,{f:function(){return a}});var a,n=r(27203),i=r(34526),o=r(48930),s=r(87144),l=r(83576),u=r(67370),c=r(22177),d=r(67646),p=r(14086),f=r(61445),m=r(23643);!function(e){let t;e.is=function(e){var t,r,a,n;return(null===(n=null===(a=null===(r=null===(t=null==e?void 0:e.grid)||void 0===t?void 0:t.cells)||void 0===r?void 0:r.space)||void 0===a?void 0:a.dimensions)||void 0===n?void 0:n.length)&&(null==e?void 0:e.sourceData)&&(null==e?void 0:e.customProperties)&&(null==e?void 0:e._propertyData)},function(e){function t(t,r){return"absolute"===t.kind?t:{kind:"absolute",absoluteValue:e.calcAbsolute(r,t.relativeValue)}}e.areSame=function(e,r,a){return(0,c.q)(t(e,a).absoluteValue,t(r,a).absoluteValue,a.sigma/100)},e.absolute=function(e){return{kind:"absolute",absoluteValue:e}},e.relative=function(e){return{kind:"relative",relativeValue:e}},e.calcAbsolute=function(e,t){return t*e.sigma+e.mean},e.calcRelative=function(e,t){return 0===e.sigma?0:(t-e.mean)/e.sigma},e.toAbsolute=t,e.toRelative=function(t,r){return"relative"===t.kind?t:{kind:"relative",relativeValue:e.calcRelative(r,t.absoluteValue)}},e.toString=function(e){return"relative"===e.kind?`${e.relativeValue.toFixed(2)} σ`:`${e.absoluteValue.toPrecision(4)}`}}(t=e.IsoValue||(e.IsoValue={})),e.adjustedIsoValue=function(r,a,n){if("relative"===n)return t.relative(a);let i=t.absolute(a);if(m.I.is(r.sourceData)){let t={min:r.sourceData.data.volume_data_3d_info.min_source.value(0),max:r.sourceData.data.volume_data_3d_info.max_source.value(0),mean:r.sourceData.data.volume_data_3d_info.mean_source.value(0),sigma:r.sourceData.data.volume_data_3d_info.sigma_source.value(0)};return e.IsoValue.toRelative(i,t)}return i};let r={min:-1,max:1,mean:0,sigma:.1};function a(t,a){let i=a||r,{min:o,max:s,mean:l,sigma:u}=i,c=(o-l)/u,d=(s-l)/u,m=t;return"absolute"===t.kind?t.absoluteValue<o?m=e.IsoValue.absolute(o):t.absoluteValue>s&&(m=e.IsoValue.absolute(s)):t.relativeValue<c?m=e.IsoValue.relative(c):t.relativeValue>d&&(m=e.IsoValue.relative(d)),p.e.Conditioned(m,{absolute:p.e.Converted(t=>e.IsoValue.toAbsolute(t,n.r.One.stats).absoluteValue,t=>e.IsoValue.absolute(t),p.e.Numeric(l,{min:o,max:s,step:(0,f.Zd)(u/100,2)},{immediateUpdate:!0})),relative:p.e.Converted(t=>e.IsoValue.toRelative(t,n.r.One.stats).relativeValue,t=>e.IsoValue.relative(t),p.e.Numeric(Math.min(1,d),{min:c,max:d,step:(0,f.Zd)(Math.round((s-o)/u)/100,2)},{immediateUpdate:!0}))},e=>"absolute"===e.kind?"absolute":"relative",(t,r)=>"absolute"===r?e.IsoValue.toAbsolute(t,i):e.IsoValue.toRelative(t,i),{isEssential:!0})}function h(e,t){if(e.instances.length!==t.instances.length)return!1;for(let r=0,a=e.instances.length;r<a;++r)if(!s.yb.areEqual(e.instances[r].transform,t.instances[r].transform,c.I))return!1;return!0}function g(e){return n.r.isEmpty(e.grid)||0===e.instances.length}e.createIsoValueParam=a,e.IsoValueParam=a(e.IsoValue.relative(2)),e.One={label:"",grid:n.r.One,instances:[],sourceData:{kind:"",name:"",data:{}},customProperties:new d.S,_propertyData:Object.create(null)},e.areEquivalent=function(e,t){return n.r.areEquivalent(e.grid,t.grid)&&h(e,t)},e.areInstanceTransformsEqual=h,e.isEmpty=g,e.isOrbitals=function(e){return!!u.g.is(e.sourceData)&&e.sourceData.data.header.orbitals},e.Loci=function(e,t){return{kind:"volume-loci",volume:e,instances:t}}
7319,e.isLoci=function(e){return!!e&&"volume-loci"===e.kind},e.areLociEqual=function(e,t){return e.volume===t.volume&&i.hU.areEqual(e.instances,t.instances)},e.isLociEmpty=function(e){return g(e.volume)||i.hU.isEmpty(e.instances)},e.getBoundingSphere=function(e,t){return n.r.getBoundingSphere(e.grid,t)},function(t){t.Loci=function(e,t,r){return{kind:"isosurface-loci",volume:e,isoValue:t,instances:r}},t.isLoci=function(e){return!!e&&"isosurface-loci"===e.kind},t.areLociEqual=function(t,r){return t.volume===r.volume&&e.IsoValue.areSame(t.isoValue,r.isoValue,t.volume.grid.stats)&&i.hU.areEqual(t.instances,r.instances)},t.isLociEmpty=function(e){return g(e.volume)||i.hU.isEmpty(e.instances)};let r=(0,o.XZ)();t.getBoundingSphere=function(t,a,i){let l=e.IsoValue.toAbsolute(a,t.grid.stats).absoluteValue,u=l<0,c=[0,0,0],d=t.grid.cells.space.getCoords,p=t.grid.cells.data,[f,m,h]=t.grid.cells.space.dimensions,g=f-1,b=m-1,y=h-1,x=0,S=0,T=0;for(let e=0,t=p.length;e<t;++e)(u&&p[e]<=l||!u&&p[e]>=l)&&(d(e,c),c[0]<g&&(g=c[0]),c[1]<b&&(b=c[1]),c[2]<y&&(y=c[2]),c[0]>x&&(x=c[0]),c[1]>S&&(S=c[1]),c[2]>T&&(T=c[2]));s.AO.set(r.min,g-1,b-1,y-1),s.AO.set(r.max,x+1,S+1,T+1);let C=n.r.getGridToCartesianTransform(t.grid);return o.XZ.transform(r,r,C),o.CP.fromBox3D(i||(0,o.CP)(),r)}}(e.Isosurface||(e.Isosurface={})),function(e){e.Loci=function(e,t){return{kind:"cell-loci",volume:e,elements:t}},e.isLoci=function(e){return!!e&&"cell-loci"===e.kind},e.areLociEqual=function(e,t){if(e.volume!==t.volume||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r){let a=e.elements[r],n=t.elements[r];if(!i.hU.areEqual(a.instances,n.instances)||!i.hU.areEqual(a.indices,n.indices))return!1}return!0},e.isLociEmpty=function(e){for(let{indices:t,instances:r}of e.elements)if(!i.hU.isEmpty(r)||!i.hU.isEmpty(t))return!1;return!0},e.getLociSize=function(e){let t=0;for(let{indices:r,instances:a}of e.elements)t+=i.hU.size(r)*i.hU.size(a);return t},e.Location=function(e,t,r){return{kind:"cell-location",volume:e,cell:t,instance:r}},e.isLocation=function(e){return!!e&&"cell-location"===e.kind};let t=new l.q("98"),r=(0,s.AO)(),a=(0,s.AO)();e.getBoundingSphere=function(e,l,u){t.reset();let c=n.r.getGridToCartesianTransform(e.grid),{getCoords:d}=e.grid.cells.space;for(let{indices:n,instances:o}of l)for(let l=0,u=i.hU.size(n);l<u;l++){d(i.hU.getAt(n,l),r),s.AO.transformMat4(r,r,c);for(let n=0,l=i.hU.size(o);n<l;n++){let l=e.instances[i.hU.getAt(o,n)];s.AO.transformMat4(a,r,l.transform),t.includePosition(a)}}for(let{indices:n,instances:o}of(t.finishedIncludeStep(),l))for(let l=0,u=i.hU.size(n);l<u;l++){d(i.hU.getAt(n,l),r),s.AO.transformMat4(r,r,c);for(let n=0,l=i.hU.size(o);n<l;n++){let l=e.instances[i.hU.getAt(o,n)];s.AO.transformMat4(a,r,l.transform),t.radiusPosition(a)}}let p=t.getSphere(u);return o.CP.expand(p,p,10*s.yb.getMaxScaleOnAxis(c))}}(e.Cell||(e.Cell={})),function(t){t.Loci=function(e,t){return{kind:"segment-loci",volume:e,elements:t}},t.isLoci=function(e){return!!e&&"segment-loci"===e.kind},t.areLociEqual=function(e,t){if(e.volume!==t.volume||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r){let a=e.elements[r],n=t.elements[r];if(!i.hU.areEqual(a.instances,n.instances)||!i.hU.areEqual(a.segments,n.segments))return!1}return!0},t.isLociEmpty=function(e){for(let{segments:t,instances:r}of e.elements)if(!i.hU.isEmpty(r)||!i.hU.isEmpty(t))return!1;return!0},t.getLociSize=function(e){let t=0;for(let{segments:r,instances:a}of e.elements)t+=i.hU.size(r)*i.hU.size(a);return t};let r=(0,o.XZ)(),a=(0,o.XZ)(),s=(0,o.XZ)();t.getBoundingSphere=function(t,l,u){let c=e.Segmentation.get(t);if(!c)return e.getBoundingSphere(t,u);{o.XZ.setEmpty(r);let e=n.r.getGridToCartesianTransform(t.grid);for(let{segments:n,instances:u}of l){o.XZ.setEmpty(a);for(let e=0,t=i.hU.size(n);e<t;e++){let t=i.hU.getAt(n,e),r=c.bounds[t];o.XZ.add(a,r.min),o.XZ.add(a,r.max)}o.XZ.transform(a,a,e);for(let e=0,n=i.hU.size(u);e<n;e++){let n=t.instances[i.hU.getAt(u,e)];o.XZ.transform(s,a,n.transform),o.XZ.addBox3D(r,s)}}return o.CP.fromBox3D(u||(0,o.CP)(),r)}},t.Location=function(e,t,r){return{kind:"segment-location",volume:e,segment:t,instance:r}},t.isLocation=function(e){return!!e&&"segment-location"===e.kind}}(e.Segment||(e.Segment={})),e.PickingGranularity={set(e,t){e._propertyData.__picking_granularity__=t},get(e){var t;return null!==(t=e._propertyData.__picking_granularity__)&&void 0!==t?t:"voxel"}},e.Segmentation={set(e,t){e._propertyData.__segmentation__=t},get:e=>e._propertyData.__segmentation__}}(a||(a={}))},95403:function(e,t,r){r.r(t),r.d(t,{DownloadFile:function(){return p},OpenFiles:function(){return d}});var a=r(67801),n=r(54854),i=r(59725),o=r(12845),s=r(14086),l=r(2546),u=r(72762);async function c(e,t,r,a){var n,i,s,l;let u=(0,o.W)(null!==(i=null===(n=e.file)||void 0===n?void 0:n.name)&&void 0!==i?i:""),c=t.dataFormats.binaryExtensions.has(u.ext),{data:d}=await t.builders.data.readFile({file:e,isBinary:c}),p="auto"===r?t.dataFormats.auto(u,null===(s=d.cell)||void 0===s?void 0:s.obj):t.dataFormats.get(r);if(!p){t.log.warn(`OpenFiles: could not find data provider for '${u.ext}
7319'`),await t.state.data.build().delete(d).commit();return}let f=await p.parse(t,d);a&&await (null===(l=p.visuals)||void 0===l?void 0:l.call(p,t,f))}let d=a.lQ.build({display:{name:"Open Files",description:"Load one or more files and optionally create default visuals"},from:u.G.Root,params:(e,t)=>{let{extensions:r,options:a}=t.dataFormats;return{files:s.e.FileList({accept:Array.from(r.values()).map(e=>`.${e}`).join(",")+",.gz,.zip",multiple:!0}),format:s.e.MappedStatic("auto",{auto:s.e.EmptyGroup(),specific:s.e.Select(a[0][0],a)}),visuals:s.e.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>n.iQ.create("Open Files",async a=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{if(null===e.files){r.log.error("No file(s) selected");return}for(let t of e.files)try{if(t.file&&t.name.toLowerCase().endsWith(".zip")){let n=await (0,l.Ri)(a,await t.file.arrayBuffer());for(let[t,a]of Object.entries(n)){if(!(a instanceof Uint8Array)||0===a.length)continue;let n=i.x.File(new File([a],t));await c(n,r,"auto",e.visuals)}}else{let a="auto"===e.format.name?"auto":e.format.params;await c(t,r,a,e.visuals)}}catch(e){console.error(e),r.log.error(`Error opening file '${t.name}'`)}}).runInContext(a)})),p=a.lQ.build({display:{name:"Download File",description:"Load one or more file from an URL"},from:u.G.Root,params:(e,t)=>{let r=[...t.dataFormats.options,["zip","Zip"],["gzip","Gzip"]];return{url:s.e.Url(""),format:s.e.Select(r[0][0],r),isBinary:s.e.Boolean(!1),visuals:s.e.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>n.iQ.create("Open Files",async a=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{var t,n,s;try{if("zip"===e.format||"gzip"===e.format){let s=await r.builders.data.download({url:e.url,isBinary:!0});if("zip"===e.format){let n=await (0,l.Ri)(a,(null===(t=s.obj)||void 0===t?void 0:t.data).buffer);for(let[t,a]of Object.entries(n)){if(!(a instanceof Uint8Array)||0===a.length)continue;let n=i.x.File(new File([a],t));await c(n,r,"auto",e.visuals)}}else{let t=i.x.getUrl(e.url),a=(0,o.W)(t).name;await c(i.x.File(new File([null===(n=s.obj)||void 0===n?void 0:n.data],a)),r,"auto",e.visuals)}}else{let t=r.dataFormats.get(e.format);if(!t){r.log.warn(`DownloadFile: could not find data provider for '${e.format}'`);return}let a=await r.builders.data.download({url:e.url,isBinary:e.isBinary}),n=await t.parse(r,a);e.visuals&&await (null===(s=t.visuals)||void 0===s?void 0:s.call(t,r,n))}}catch(t){console.error(t),r.log.error(`Error downloading '${"string"==typeof e.url?e.url:e.url.url}'`)}}).runInContext(a)}))},123:function(e,t,r){r.r(t),r.d(t,{AddTrajectory:function(){return E},DownloadStructure:function(){return S},EnableModelCustomProps:function(){return w},EnableStructureCustomProps:function(){return D},LoadTrajectory:function(){return M},PdbDownloadProvider:function(){return x},UpdateTrajectory:function(){return A}});var a=r(67801),n=r(54854),i=r(14086),o=r(6333),s=r(45203),l=r(74272),u=r(72762),c=r(45366),d=r(46102),p=r(59725),f=r(19892),m=r(12845),h=r(97667),g=r(15867),b=r(57939);let y=e=>{let t=e.config.get(f.OW.Structure.DefaultRepresentationPreset)||o.F3.auto.id;return i.e.Group({type:l.$.getParams(void 0,"auto").type,representation:i.e.Select(t,e.builders.structure.representation.getPresets().map(e=>[e.id,e.display.name,e.display.group]),{description:"Which representation preset to use."}),representationParams:i.e.Group(o.oo.CommonParams,{isHidden:!0}),asTrajectory:i.e.Optional(i.e.Boolean(!1,{description:"Load all entries into a single trajectory."}))},{isExpanded:!1})},x={rcsb:i.e.Group({encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{label:"RCSB PDB",isFlat:!0}),pdbe:i.e.Group({variant:i.e.Select("updated-bcif",[["updated-bcif","Updated (bcif)"],["updated","Updated"],["archival","Archival"]])},{label:"PDBe",isFlat:!0}),pdbj:i.e.EmptyGroup({label:"PDBj"})},S=a.lQ.build({from:u.G.Root,display:{name:"Download Structure",description:"Load a structure from the provided source and create its representation."},params:(e,t)=>{let r=y(t),a=t.config.get(f.OW.Download.DefaultPdbProvider)||"pdbe";return{source:i.e.MappedStatic("pdb",{pdb:i.e.Group({provider:i.e.Group({id:i.e.Text("1tqn",{label:"PDB Id(s)",description:"One or more comma/space separated PDB ids."}),server:i.e.MappedStatic(a,x)},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB"}),"pdb-ihm":i.e.Group({provider:i.e.Group({id:i.e.Text("8zzc",{label:"PDB-IHM Id(s)",description:"One or more comma/space separated ids."}),encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB-IHM"}),swissmodel:i.e.Group({id:i.e.Text("Q9Y2I8",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"SWISS-MODEL",description:"Loads the best homology model or experimental structure"}),alphafolddb:i.e.Group({provider:i.e.Group({id:i.e.Text("Q8W3K0",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"AlphaFold DB",description:"Loads the predicted model if available"}),modelarchive:i.e.Group({id:i.e.Text("ma-bak-cepc-0003",{label:"Accession Code(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"Model Archive"}),pubchem:i.e.Group({id:i.e.Text("2244,2245",{label:"PubChem ID",description:"One or more comma/space separated IDs."}),options:r},{isFlat:!0,label:"PubChem",description:"Loads 3D conformer from PubChem."}),url:i.e.Group({url:i.e.Url(""),format:i.e.Select("mmcif",i.e.arrayToOptions(s.pB.map(e=>e[0]),e=>e)),isBinary:i.e.Boolean(!1),label:i.e.Optional(i.e.Text("")),options:r},{isFlat:!0,label:"URL"})})}}})(({params:e,state:t},r)=>n.iQ.create("Download Structure",async a=>{let n;r.behaviors.layout.leftPanelTabName.next("data");let i=e.source,s=!1,l="mmcif";
7319switch(i.name){case"url":n=[{url:i.params.url,isBinary:i.params.isBinary,label:i.params.label||void 0}],l=i.params.format;break;case"pdb":n=await ("pdbe"===i.params.provider.server.name?C(i):"pdbj"===i.params.provider.server.name?O(i):"rcsb"===i.params.provider.server.name?I(i):(0,h.UT)(i)),s=!!i.params.options.asTrajectory;break;case"pdb-ihm":let u=e=>e.startsWith("PDBDEV_")?e:`PDBDEV_${e.padStart(8,"0")}`;n=await T(i.params.provider.id,e=>{if(null!==e.match(/^[1-9][A-Z0-9]{3}$/i))return"bcif"===i.params.provider.encoding?`https://pdb-ihm.org/bcif/${e.toLowerCase()}.bcif`:`https://pdb-ihm.org/cif/${e.toLowerCase()}.cif`;let t=u(e.toUpperCase());return"bcif"===i.params.provider.encoding?`https://pdb-ihm.org/bcif/${t}.bcif`:`https://pdb-ihm.org/cif/${t}.cif`},e=>{let t=e.toUpperCase();return t.match(/^[1-9][A-Z0-9]{3}$/)?`PDB-IHM: ${t}`:u(t)},"bcif"===i.params.provider.encoding),s=!!i.params.options.asTrajectory;break;case"swissmodel":n=await T(i.params.id,e=>`https://swissmodel.expasy.org/repository/uniprot/${e.toUpperCase()}.pdb`,e=>`SWISS-MODEL: ${e}`,!1),s=!!i.params.options.asTrajectory,l="pdb";break;case"alphafolddb":n=await T(i.params.provider.id,async e=>{let t=`https://www.alphafold.ebi.ac.uk/api/prediction/${e.toUpperCase()}`,a=await r.runTask(r.fetch({url:t,type:"json"}));if(Array.isArray(a)&&a.length>0){let e="bcif"===i.params.provider.encoding?"bcifUrl":"cifUrl";return a[0][e]}throw Error(`No AlphaFold DB entry for '${e}'`)},e=>`AlphaFold DB: ${e}`,"bcif"===i.params.provider.encoding),s=!!i.params.options.asTrajectory,l="mmcif";break;case"modelarchive":n=await T(i.params.id,e=>`https://www.modelarchive.org/doi/10.5452/${e.toLowerCase()}.cif`,e=>`Model Archive: ${e}`,!1),s=!!i.params.options.asTrajectory,l="mmcif";break;case"pubchem":n=await T(i.params.id,e=>`https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/${e.trim()}/record/SDF/?record_type=3d`,e=>`PubChem: ${e}`,!1),s=!!i.params.options.asTrajectory,l="mol";break;default:(0,h.UT)(i)}let c=e.source.params.options.representation||r.config.get(f.OW.Structure.DefaultRepresentationPreset)||o.F3.auto.id,d=c!==o.F3.empty.id,p="auto"===i.params.options.type.name?void 0:i.params.options.type;await t.transaction(async()=>{if(n.length>0&&s){let t=await r.builders.data.downloadBlob({sources:n.map((e,t)=>({id:""+t,url:e.url,isBinary:e.isBinary})),maxConcurrency:6},{state:{isGhost:!0}}),a=await r.builders.structure.parseTrajectory(t,{formats:n.map((e,t)=>({id:""+t,format:"cif"}))});await r.builders.structure.hierarchy.applyPreset(a,"default",{structure:p,showUnitcell:d,representationPreset:c,representationPresetParams:e.source.params.options.representationParams})}else for(let t of n){let a=await r.builders.data.download(t,{state:{isGhost:!0}}),n=r.dataFormats.get(l);if(!n)throw Error("unknown file format");let i=await r.builders.structure.parseTrajectory(a,n);await r.builders.structure.hierarchy.applyPreset(i,"default",{structure:p,showUnitcell:d,representationPreset:c,representationPresetParams:e.source.params.options.representationParams})}}).runInContext(a)}));async function T(e,t,r,a){let n=e.split(/[,\s]/).map(e=>e.trim()).filter(e=>!!e&&(e.length>=4||/^[1-9][0-9]*$/.test(e))),i=[];for(let e of n)i.push({url:p.x.Url(await t(e)),isBinary:a,label:r(e)});return i}async function C(e){if("pdb"!==e.name||"pdbe"!==e.params.provider.server.name)throw Error("expected pdbe");return"updated"===e.params.provider.server.params.variant?T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/static/entry/${e.toLowerCase()}_updated.cif`,e=>`PDBe: ${e} (updated cif)`,!1):"updated-bcif"===e.params.provider.server.params.variant?T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/entry-files/download/${e.toLowerCase()}.bcif`,e=>`PDBe: ${e} (updated cif)`,!0):T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/static/entry/${e.toLowerCase()}.cif`,e=>`PDBe: ${e} (cif)`,!1)}async function O(e){if("pdb"!==e.name||"pdbj"!==e.params.provider.server.name)throw Error("expected pdbj");return T(e.params.provider.id,e=>`https://data.pdbjlc1.pdbj.org/pub/pdb/data/structures/divided/mmCIF/${e.toLowerCase().substring(1,3)}/${e.toLowerCase()}.cif`,e=>`PDBj: ${e} (cif)`,!1)}async function I(e){if("pdb"!==e.name||"rcsb"!==e.params.provider.server.name)throw Error("expected rcsb");return"cif"===e.params.provider.server.params.encoding?T(e.params.provider.id,e=>`https://files.rcsb.org/download/${e.toUpperCase()}.cif`,e=>`RCSB PDB: ${e} (cif)`,!1):T(e.params.provider.id,e=>`https://models.rcsb.org/${e.toUpperCase()}.bcif`,e=>`RCSB PDB: ${e} (bcif)`,!0)}let A=a.lQ.build({display:{name:"Update Trajectory"},params:{action:i.e.Select("advance",i.e.arrayToOptions(["advance","reset"])),by:i.e.Optional(i.e.Numeric(1,{min:-1,max:1,step:1}))}})(({params:e,state:t})=>{let r=t.selectQ(e=>e.ofTransformer(c.L.Model.ModelFromTrajectory)),n=t.build();if("reset"===e.action)for(let e of r)n.to(e).update({modelIndex:0});
7319else for(let i of r){let r=a.tE.findAncestorOfType(t.tree,t.cells,i.transform.ref,u.G.Molecule.Trajectory);if(!r||!r.obj)continue;let o=r.obj;n.to(i).update(t=>{let r=(t.modelIndex+e.by)%o.data.frameCount;return r<0&&(r+=o.data.frameCount),{modelIndex:r}})}return t.updateTree(n)}),w=a.lQ.build({display:{name:"Custom Model Properties",description:"Enable parameters for custom properties of the model."},from:u.G.Molecule.Model,params:(e,t)=>t.customModelProperties.getParams(null==e?void 0:e.data),isApplicable:(e,t,r)=>t.transformer!==d.CustomModelProperties})(({ref:e,params:t},r)=>r.builders.structure.insertModelProperties(e,t)),D=a.lQ.build({display:{name:"Custom Structure Properties",description:"Enable parameters for custom properties of the structure."},from:u.G.Molecule.Structure,params:(e,t)=>t.customStructureProperties.getParams(null==e?void 0:e.data),isApplicable:(e,t,r)=>t.transformer!==d.CustomStructureProperties})(({ref:e,params:t},r)=>r.builders.structure.insertStructureProperties(e,t)),E=a.lQ.build({display:{name:"Add Trajectory",description:"Add trajectory from existing model/topology and coordinates."},from:u.G.Root,params(e,t){let r=t.state.data,a=[...r.selectQ(e=>e.rootsOfType(u.G.Molecule.Model)),...r.selectQ(e=>e.rootsOfType(u.G.Molecule.Topology))].map(e=>[e.transform.ref,e.obj.label]),n=r.selectQ(e=>e.rootsOfType(u.G.Molecule.Coordinates)).map(e=>[e.transform.ref,e.obj.label]);return{model:i.e.Select(a.length?a[0][0]:"",a),coordinates:i.e.Select(n.length?n[0][0]:"",n)}}})(({params:e,state:t},r)=>n.iQ.create("Add Trajectory",a=>t.transaction(async()=>{let n=[e.model,e.coordinates],i=t.build().toRoot().apply(d.TrajectoryFromModelAndCoordinates,{modelRef:e.model,coordinatesRef:e.coordinates},{dependsOn:n}).apply(c.L.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(i).runInContext(a);let o=await r.builders.structure.createStructure(i.selector);await r.builders.structure.representation.applyPreset(o,"auto")}).runInContext(a))),M=a.lQ.build({display:{name:"Load Trajectory",description:"Load trajectory of model/topology and coordinates from URL or file."},from:u.G.Root,params(e,t){let{options:r}=t.dataFormats,a=r.filter(e=>e[2]===s.PF||e[2]===g.m2),n=r.filter(e=>e[2]===b.zp),o=[],l=[];for(let{provider:e}of t.dataFormats.list)e.category===s.PF||e.category===g.m2?(e.binaryExtensions&&o.push(...e.binaryExtensions),e.stringExtensions&&o.push(...e.stringExtensions)):e.category===b.zp&&(e.binaryExtensions&&l.push(...e.binaryExtensions),e.stringExtensions&&l.push(...e.stringExtensions));return{source:i.e.MappedStatic("file",{url:i.e.Group({model:i.e.Group({url:i.e.Url(""),format:i.e.Select(a[0][0],a),isBinary:i.e.Boolean(!1)},{isExpanded:!0}),coordinates:i.e.Group({url:i.e.Url(""),format:i.e.Select(n[0][0],n)},{isExpanded:!0})},{isFlat:!0}),file:i.e.Group({model:i.e.File({accept:o.map(e=>`.${e}`).join(","),label:"Model"}),coordinates:i.e.File({accept:l.map(e=>`.${e}`).join(","),label:"Coordinates"})},{isFlat:!0})},{options:[["url","URL"],["file","File"]]})}}})(({params:e,state:t},r)=>n.iQ.create("Load Trajectory",a=>t.transaction(async()=>{let n=e.source;if("file"===n.name&&(null===n.params.model||null===n.params.coordinates)){r.log.error("No file(s) selected");return}if("url"===n.name&&(!n.params.model||!n.params.coordinates)){r.log.error("No URL(s) given");return}let i=async(e,t,a)=>{let n=await r.builders.data.download({url:e,isBinary:a}),i=r.dataFormats.get(t);if(!i){r.log.warn(`LoadTrajectory: could not find data provider for '${t}'`);return}return i.parse(r,n)},o=async e=>{var t,a,n;if(!e)throw Error("No file selected");let i=(0,m.W)(null!==(a=null===(t=e.file)||void 0===t?void 0:t.name)&&void 0!==a?a:""),o=r.dataFormats.binaryExtensions.has(i.ext),{data:s}=await r.builders.data.readFile({file:e,isBinary:o}),l=r.dataFormats.auto(i,null===(n=s.cell)||void 0===n?void 0:n.obj);if(!l){r.log.warn(`LoadTrajectory: could not find data provider for '${i.ext}'`),await r.state.data.build().delete(s).commit();return}return l.parse(r,s)};try{let e;let s="url"===n.name?await i(n.params.model.url,n.params.model.format,n.params.model.isBinary):await o(n.params.model);e="trajectory"in s?await t.build().to(s.trajectory).apply(d.ModelFromTrajectory,{modelIndex:0}).commit():s.topology;let l="url"===n.name?await i(n.params.coordinates.url,n.params.coordinates.format,!0):await o(n.params.coordinates),u=[e.ref,l.ref],p=t.build().toRoot().apply(d.TrajectoryFromModelAndCoordinates,{modelRef:e.ref,coordinatesRef:l.ref},{dependsOn:u}).apply(c.L.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(p).runInContext(a);let f=await r.builders.structure.createStructure(p.selector);await r.builders.structure.representation.applyPreset(f,"auto")}catch(e){console.error(e),r.log.error("Error loading trajectory")}}).runInContext(a)))},5932:function(e,t,r){r.d(t,{D:function(){return l},Z:function(){return u}});var a=r(2622),n=r(24641),i=r(14086),o=r(29414);async function s(e,t,r=!1){var n,o,s,l,u,c,d;if(t.data&&await e.runTask(e.state.data.setSnapshot(t.data)),null===(n=t.canvas3d)||void 0===n?void 0:n.props){let r=i.e.normalizeParams(a.h4,t.canvas3d.props,"children");((null===(o=t.camera)||void 0===o?void 0:o.current)||(null===(s=t.camera)||void 0===s?void 0:s.focus))&&(r.camera=void 0,r.cameraClipping=void 0,r.cameraFog=void 0),null===(l=e.canvas3d)||void 0===l||l.setProps(r)}
7319(null===(u=t.camera)||void 0===u?void 0:u.current)?null===(c=e.canvas3d)||void 0===c||c.requestCameraReset({snapshot:t.camera.current,durationMs:r||"instant"===t.camera.transitionStyle?0:t.camera.transitionDurationInMs}):(null===(d=t.camera)||void 0===d?void 0:d.focus)&&e.managers.camera.focusObject({...t.camera.focus,durationMs:r||"instant"===t.camera.transitionStyle?0:t.camera.transitionDurationInMs})}let l=o.q.create({name:"built-in.animate-state-snapshots",display:{name:"State Snapshots"},isExportable:!0,params:()=>({}),canApply(e){let t=e.managers.snapshot.state.entries;return t.size<1?{canApply:!1,reason:"At least 1 state required."}:t.some(e=>!!(null==e?void 0:e.snapshot.startAnimation))?{canApply:!1,reason:"Nested animations not supported."}:{canApply:e.managers.snapshot.state.entries.size>0}},setup(e,t,r){let a=r.managers.snapshot.state.entries.get(0);s(r,a.snapshot,!0)},getDuration:(e,t)=>({kind:"fixed",durationMs:t.managers.snapshot.state.entries.toArray().reduce((e,t)=>{var r;return e+(null!==(r=t.snapshot.durationInMs)&&void 0!==r?r:0)},0)}),initialState:(e,t)=>{let r=t.managers.snapshot.state.entries.toArray();return{totalDuration:r.reduce((e,t)=>{var r;return e+(null!==(r=t.snapshot.durationInMs)&&void 0!==r?r:0)},0),snapshots:r,currentIndex:0,currentTransitionFrame:0}},async apply(e,t,r){var a;if(t.current>=e.totalDuration)return{kind:"finished"};let i=0,o=0,l=0;for(let r of e.snapshots){if(l=t.current-i,i+=null!==(a=r.snapshot.durationInMs)&&void 0!==a?a:0,t.current<i)break;o++}if(o>=e.snapshots.length)return{kind:"finished"};let{transition:u,camera:c,canvas3d:d}=e.snapshots[o].snapshot,p=n.B.getStateTransitionFrameIndex(e.snapshots[o].snapshot,l);return u&&void 0!==p?o===e.currentIndex&&p===e.currentTransitionFrame?{kind:"skip"}:(0===p||o!==e.currentIndex?await s(r.plugin,{...u.frames[p],camera:c,canvas3d:d}):await s(r.plugin,u.frames[p]),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:p}}):o===e.currentIndex?{kind:"skip"}:(await s(r.plugin,e.snapshots[o].snapshot),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:void 0}})}}),u=o.q.create({name:"built-in.animate-state-snapshot-transition",display:{name:"State Snapshot Transition"},isExportable:!0,params:()=>({}),canApply(e){let{snapshot:t}=e.managers,{current:r}=t;return(null==r?void 0:r.snapshot.transition)?{canApply:!0}:{canApply:!1,reason:"No transition found"}},setup(e,t,r){var a,n;let{current:i}=r.managers.snapshot;i&&s(r,null!==(n=null===(a=i.snapshot.transition)||void 0===a?void 0:a.frames[0])&&void 0!==n?n:i.snapshot,!0)},getDuration:(e,t)=>{var r,a;let{current:i}=t.managers.snapshot;return(null==i?void 0:i.snapshot.transition)?(null===(r=i.snapshot.transition)||void 0===r?void 0:r.loop)?{kind:"infinite"}:{kind:"fixed",durationMs:null!==(a=n.B.getStateTransitionDuration(i.snapshot))&&void 0!==a?a:0}:{kind:"fixed",durationMs:0}},initialState:(e,t)=>{var r,a;let{current:i}=t.managers.snapshot;if(i)return{totalDuration:(null===(r=i.snapshot.transition)||void 0===r?void 0:r.loop)?Number.MAX_VALUE:null!==(a=n.B.getStateTransitionDuration(i.snapshot))&&void 0!==a?a:0,snapshots:[i],currentIndex:0,currentTransitionFrame:void 0,isInitial:!0}},async apply(e,t,r){var a;let i=null===(a=e.snapshots[0])||void 0===a?void 0:a.snapshot;if(t.current>=e.totalDuration){if((null==i?void 0:i.transition)&&e.isInitial){let t=i.transition.frames.length-1;r.plugin.managers.snapshot.setSnapshotAnimationFrame(e.totalDuration,!1),await s(r.plugin,i.transition.frames[t])}return{kind:"finished"}}if(!i)return{kind:"finished"};let{transition:o,camera:l,canvas3d:u}=i,c=n.B.getStateTransitionFrameIndex(i,t.current);return o&&void 0!==c?c===e.currentTransitionFrame?{kind:"skip"}:(r.plugin.managers.snapshot.setSnapshotAnimationFrame(t.current,!1),0===c?await s(r.plugin,{...o.frames[c],camera:l,canvas3d:u}):await s(r.plugin,o.frames[c]),{kind:"next",state:{...e,currentAnimationFrame:c,isInitial:!1}}):{kind:"finished"}}})},29414:function(e,t,r){var a,n;r.d(t,{q:function(){return a}}),(n=a||(a={})).create=function(e){return e},n.getDuration=function(e,t){var r,a;if(t.customDurationMs)return t.customDurationMs;let n=null===(a=(r=t.definition).getDuration)||void 0===a?void 0:a.call(r,t.params,e);if((null==n?void 0:n.kind)==="fixed")return n.durationMs}},6333:function(e,t,r){r.d(t,{F3:function(){return B},oo:function(){return y}});var a,n=r(14086),i=r(54185),o=r(30502),s=r(67801),l=r(80541),u=r(19892),c=r(3305),d=r(43015),p=r(16454),f=r(54521),m=r(7164),h=r(64919),g=r(97667),b=r(43975);function y(e){return e}(a=y||(y={})).CommonParams={ignoreHydrogens:n.e.Optional(n.e.Boolean(!1)),ignoreHydrogensVariant:n.e.Optional(n.e.Select("all",n.e.arrayToOptions(["all","non-polar"]))),ignoreLight:n.e.Optional(n.e.Boolean(!1)),quality:n.e.Optional(n.e.Select("auto",i.w_)),theme:n.e.Optional(n.e.Group({globalName:n.e.Optional(n.e.Text("")),globalColorParam
7319s:n.e.Optional(n.e.Value({},{isHidden:!0})),carbonColor:n.e.Optional(n.e.Select("chain-id",n.e.arrayToOptions(["chain-id","operator-name","element-symbol"]))),symmetryColor:n.e.Optional(n.e.Text("")),symmetryColorParams:n.e.Optional(n.e.Value({},{isHidden:!0})),focus:n.e.Optional(n.e.Group({name:n.e.Optional(n.e.Text("")),params:n.e.Optional(n.e.Value({}))}))}))},a.reprBuilder=function(e,t,r){var a,n,i,o,s,l,u,c,d,m,h,g,b,y,x;let S=e.state.data.build(),T=e.builders.structure.representation,C=e.managers.structure.component.state.options.hydrogens,O={quality:e.managers.structure.component.state.options.visualQuality,ignoreHydrogens:"all"!==C,ignoreHydrogensVariant:"only-polar"===C?"non-polar":"all",ignoreLight:e.managers.structure.component.state.options.ignoreLight};t.quality&&"auto"!==t.quality&&(O.quality=t.quality),void 0!==t.ignoreHydrogens&&(O.ignoreHydrogens=!!t.ignoreHydrogens),void 0!==t.ignoreHydrogensVariant&&(O.ignoreHydrogensVariant=t.ignoreHydrogensVariant),void 0!==t.ignoreLight&&(O.ignoreLight=!!t.ignoreLight);let I=(null===(a=t.theme)||void 0===a?void 0:a.globalName)?null===(n=t.theme)||void 0===n?void 0:n.globalName:void 0,A=(null===(i=t.theme)||void 0===i?void 0:i.carbonColor)!==void 0?{carbonColor:"chain-id"===(x=null===(o=t.theme)||void 0===o?void 0:o.carbonColor)?{name:x,params:p.WT.defaultValues}:"operator-name"===x?{name:x,params:f.Zs.defaultValues}:{name:x,params:{}},...null===(s=t.theme)||void 0===s?void 0:s.globalColorParams}:{...null===(l=t.theme)||void 0===l?void 0:l.globalColorParams},w=r&&(null===(u=t.theme)||void 0===u?void 0:u.symmetryColor)&&r.units.some(e=>!e.conformation.operator.assembly&&e.conformation.operator.spgrOp>=0)?null===(c=t.theme)||void 0===c?void 0:c.symmetryColor:I;return{update:S,builder:T,color:I,symmetryColor:w,symmetryColorParam
7319s:(null===(d=t.theme)||void 0===d?void 0:d.symmetryColorParams)?{...null===(m=t.theme)||void 0===m?void 0:m.globalColorParams,...null===(h=t.theme)||void 0===h?void 0:h.symmetryColorParams}:{...null===(g=t.theme)||void 0===g?void 0:g.globalColorParams},globalColorParams:(null===(b=t.theme)||void 0===b?void 0:b.globalColorParams)?{...null===(y=t.theme)||void 0===y?void 0:y.globalColorParams}:void 0,typeParams:O,ballAndStickColor:A}},a.updateFocusRepr=function(e,t,r,a){if(e.state.hasBehavior(c.Y))return e.state.updateBehavior(c.Y,n=>{let i=(0,d.al)(e,t,"ball-and-stick",r||"element-symbol",a);n.surroundingsParams.colorTheme=i,n.targetParams.colorTheme=i})};let x=y.CommonParams,S=y.reprBuilder,T=y.updateFocusRepr,C=y({id:"preset-structure-representation-auto",display:{name:"Automatic",description:"Show representations based on the size of the structure. Smaller structures are shown with more detail than larger ones, ranging from atomistic display to coarse surfaces."},params:()=>x,apply(e,t,r){var a,n;let i=null===(n=null===(a=s.ze.resolveAndCheck(r.state.data,e))||void 0===a?void 0:a.obj)||void 0===n?void 0:n.data;if(!i)return{};let l=r.config.get(u.OW.Structure.SizeThresholds)||o.Structure.DefaultSizeThresholds,c=o.Structure.getSize(i,l),d=i.polymerResidueCount/i.polymerGapCount;switch(c){case o.Structure.Size.Gigantic:case o.Structure.Size.Huge:return D.apply(e,t,r);case o.Structure.Size.Large:return E.apply(e,t,r);case o.Structure.Size.Medium:if(d>3)return A.apply(e,t,r);case o.Structure.Size.Small:return M.apply(e,{...t,showCarbohydrateSymbol:!0},r);default:(0,g.UT)(c)}}}),O=y({id:"preset-structure-representation-empty",display:{name:"Empty",description:"Removes all existing representations."},apply:async(e,t,r)=>({})}),I="Basic",A=y({id:"preset-structure-representation-polymer-and-ligand",display:{name:"Polymer & Ligand",group:I,description:"Shows polymers as Cartoon, ligands as Ball & Stick, carbohydrates as 3D-SNFG and water molecules semi-transparent."},params:()=>x,async apply(e,t,r){var a,n,i,o,l,u,c,d,p,f;let m=s.ze.resolveAndCheck(r.state.data,e);if(!m)return{};let h={polymer:await P(r,m,"polymer"),ligand:await P(r,m,"ligand"),nonStandard:await P(r,m,"non-standard"),branched:await P(r,m,"branched",{label:"Carbohydrate"}),water:await P(r,m,"water"),ion:await P(r,m,"ion"),lipid:await P(r,m,"lipid"),coarse:await P(r,m,"coarse")},g=m.obj.data,b=((null===(i=null===(n=null===(a=h.water)||void 0===a?void 0:a.obj)||void 0===n?void 0:n.data)||void 0===i?void 0:i.elementCount)||0)>5e4?"line":"ball-and-stick",y=((null===(u=null===(l=null===(o=h.lipid)||void 0===o?void 0:o.obj)||void 0===l?void 0:l.data)||void 0===u?void 0:u.elementCount)||0)>2e4?"line":"ball-and-stick",{update:x,builder:C,typeParams:O,color:I,symmetryColor:A,symmetryColorParam
7319s:w,globalColorParams:D,ballAndStickColor:E}=S(r,t,g),M={polymer:C.buildRepresentation(x,h.polymer,{type:"cartoon",typeParams:O,color:A,colorParams:w},{tag:"polymer"}),ligand:C.buildRepresentation(x,h.ligand,{type:"ball-and-stick",typeParams:O,color:I,colorParams:E},{tag:"ligand"}),nonStandard:C.buildRepresentation(x,h.nonStandard,{type:"ball-and-stick",typeParams:O,color:I,colorParams:E},{tag:"non-standard"}),branchedBallAndStick:C.buildRepresentation(x,h.branched,{type:"ball-and-stick",typeParams:{...O,alpha:.3},color:I,colorParams:E},{tag:"branched-ball-and-stick"}),branchedSnfg3d:C.buildRepresentation(x,h.branched,{type:"carbohydrate",typeParams:O,color:I,colorParams:D},{tag:"branched-snfg-3d"}),water:C.buildRepresentation(x,h.water,{type:b,typeParams:{...O,alpha:.6,visuals:"line"===b?["intra-bond","element-point"]:void 0},color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"water"}),ion:C.buildRepresentation(x,h.ion,{type:"ball-and-stick",typeParams:O,color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"ion"}),lipid:C.buildRepresentation(x,h.lipid,{type:y,typeParams:{...O,alpha:.6,visuals:"line"===y?["intra-bond"]:void 0},color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"lipid"}),coarse:C.buildRepresentation(x,h.coarse,{type:"spacefill",typeParams:O,color:I||"chain-id",colorParams:D},{tag:"coarse"})};return await x.commit({revertOnError:!1}),await T(r,g,null===(d=null===(c=t.theme)||void 0===c?void 0:c.focus)||void 0===d?void 0:d.name,null===(f=null===(p=t.theme)||void 0===p?void 0:p.focus)||void 0===f?void 0:f.params),{components:h,representations:M}}}),w=y({id:"preset-structure-representation-protein-and-nucleic",display:{name:"Protein & Nucleic",group:I,description:"Shows proteins as Cartoon and RNA/DNA as Gaussian Surface."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={protein:await k(r,l,"protein"),nucleic:await k(r,l,"nucleic")},c=l.obj.data,d={radiusOffset:c.isCoarseGrained?2:0,smoothness:c.isCoarseGrained?1:1.5},{update:p,builder:f,typeParams:m,symmetryColor:h,symmetryColorParam
7319s:g}=S(r,t,c),b={protein:f.buildRepresentation(p,u.protein,{type:"cartoon",typeParams:m,color:h,colorParams:g},{tag:"protein"}),nucleic:f.buildRepresentation(p,u.nucleic,{type:"gaussian-surface",typeParams:{...m,...d},color:h,colorParams:g},{tag:"nucleic"})};return await p.commit({revertOnError:!0}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:b}}}),D=y({id:"preset-structure-representation-coarse-surface",display:{name:"Coarse Surface",group:I,description:"Shows polymers and lipids as coarse Gaussian Surface."},params:()=>x,async apply(e,t,r){var a,n,i,l;let c=s.ze.resolveAndCheck(r.state.data,e);if(!c)return{};let d={polymer:await P(r,c,"polymer"),lipid:await P(r,c,"lipid")},p=c.obj.data,f=r.config.get(u.OW.Structure.SizeThresholds)||o.Structure.DefaultSizeThresholds,m=o.Structure.getSize(p,f),h=Object.create(null);m===o.Structure.Size.Gigantic?Object.assign(h,{traceOnly:!p.isCoarseGrained,radiusOffset:2,smoothness:1,visuals:["structure-gaussian-surface-mesh"]}):m===o.Structure.Size.Huge?Object.assign(h,{radiusOffset:p.isCoarseGrained?2:0,smoothness:1}):p.isCoarseGrained&&Object.assign(h,{radiusOffset:2,smoothness:1});let{update:g,builder:b,typeParams:y,symmetryColor:x,symmetryColorParam
7319s:C}=S(r,t,p),O={polymer:b.buildRepresentation(g,d.polymer,{type:"gaussian-surface",typeParams:{...y,...h},color:x,colorParams:C},{tag:"polymer"}),lipid:b.buildRepresentation(g,d.lipid,{type:"gaussian-surface",typeParams:{...y,...h},color:x,colorParams:C},{tag:"lipid"})};return await g.commit({revertOnError:!0}),await T(r,p,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(l=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===l?void 0:l.params),{components:d,representations:O}}}),E=y({id:"preset-structure-representation-polymer-cartoon",display:{name:"Polymer Cartoon",group:I,description:"Shows polymers as Cartoon."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={polymer:await P(r,l,"polymer")},c=l.obj.data,{update:d,builder:p,typeParams:f,symmetryColor:m,symmetryColorParams:h}=S(r,t,c),g={polymer:p.buildRepresentation(d,u.polymer,{type:"cartoon",typeParams:f,color:m,colorParams:h},{tag:"polymer"})};return await d.commit({revertOnError:!0}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:g}}}),M=y({id:"preset-structure-representation-atomic-detail",display:{name:"Atomic Detail",group:I,description:"Shows everything in atomic detail."},params:()=>({...x,showCarbohydrateSymbol:n.e.Boolean(!1)}),async apply(e,t,r){var a,n,i,o,l,u;let c=s.ze.resolveAndCheck(r.state.data,e);if(!c)return{};let d={all:await P(r,c,"all"),branched:void 0},p=c.obj.data,f=p.elementCount>1e5,g=p.elementCount>1e6,b=p.units.length>5e3,y=p.atomicResidueCount&&p.elementCount>1e3&&p.atomicResidueCount/p.elementCount<3,x=p.models[0],C=!!m.t.Provider.get(x)||h.q.isExhaustive(x),O="ball-and-stick";p.isCoarseGrained||b?O=g?"point":"spacefill":y&&!C?O="spacefill":f&&(O="line");let I=t.showCarbohydrateSymbol&&!f&&!y;I&&Object.assign(d,{branched:await P(r,c,"branched",{label:"Carbohydrate"})});let{update:A,builder:w,typeParams:D,color:E,ballAndStickColor:M,globalColorParams:k}=S(r,t,p),B=y&&!C?{carbonColor:{name:"element-symbol",params:{}},...k}:M,_={all:w.buildRepresentation(A,d.all,{type:O,typeParams:D,color:E,colorParams:B},{tag:"all"})};return I&&Object.assign(_,{snfg3d:w.buildRepresentation(A,d.branched,{type:"carbohydrate",typeParams:{...D,alpha:.4,visuals:["carbohydrate-symbol"]},color:E,colorParams:k},{tag:"snfg-3d"})}),await A.commit({revertOnError:!0}),await T(r,p,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:E,null!==(u=null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params)&&void 0!==u?u:B),{components:d,representations:_}}});function P(e,t,r,a){return e.builders.structure.tryCreateComponentStatic(t,r,a)}function k(e,t,r,a){return e.builders.structure.tryCreateComponentFromSelection(t,l.fS[r],`selection-${r}`,a)}let B={empty:O,auto:C,"atomic-detail":M,"polymer-cartoon":E,"polymer-
7319and-ligand":A,"protein-and-nucleic":w,"coarse-surface":D,illustrative:y({id:"preset-structure-representation-illustrative",display:{name:"Illustrative",group:"Miscellaneous",description:"Show everything in spacefill representation with illustrative colors and ignore light."},params:()=>x,async apply(e,t,r){var a,n,i,o,l;let u=s.ze.resolveAndCheck(r.state.data,e);if(!u)return{};let c={all:await P(r,u,"all"),branched:void 0},d=u.obj.data,{update:p,builder:f,typeParams:m,color:h}=S(r,t,d),g={all:f.buildRepresentation(p,c.all,{type:"spacefill",typeParams:{...m,ignoreLight:!0},color:"illustrative",colorParams:{style:{name:"entity-id",params:{overrideWater:!0}}}},{tag:"all"})};return await p.commit({revertOnError:!0}),await T(r,d,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:h,null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params),{components:c,representations:g}}}),"molecular-surface":y({id:"preset-structure-representation-molecular-surface",display:{name:"Molecular Surface",group:"Miscellaneous",description:"Show everything in molecular surface representation with illustrative colors."},params:()=>x,async apply(e,t,r){var a,n,i,o,l;let u=s.ze.resolveAndCheck(r.state.data,e);if(!u)return{};let c={all:await P(r,u,"all"),branched:void 0},d=u.obj.data,{update:p,builder:f,typeParams:m,color:h}=S(r,t,d),g={all:f.buildRepresentation(p,c.all,{type:"molecular-surface",typeParams:m,color:"entity-id",colorParams:{overrideWater:!0}},{tag:"all"})};return await p.commit({revertOnError:!0}),await T(r,d,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:h,null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params),{components:c,representations:g}}}),"auto-lod":y({id:"preset-structure-representation-auto-lod",display:{name:"Automatic Detail",group:"Miscellaneous",description:"Shows more (or less) detailed representations automatically based on camera distance."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={all:await P(r,l,"all")},c=l.obj.data,{update:d,builder:p,typeParams:f,color:m,symmetryColor:h,symmetryColorParam
7319s:g,ballAndStickColor:y}=S(r,t,c),x={gaussianSurface:p.buildRepresentation(d,u.all,{type:"gaussian-surface",typeParams:{...f,lod:b.A.create(30,1e7,100)},color:h,colorParams:g},{tag:"gaussian-surface"}),cartoon:p.buildRepresentation(d,u.all,{type:"cartoon",typeParams:{...f,lod:b.A.create(-20,300,100)},color:h,colorParams:g},{tag:"cartoon"}),ballAndStick:p.buildRepresentation(d,u.all,{type:"ball-and-stick",typeParams:{...f,lod:b.A.create(-20,40,20)},color:m,colorParams:y},{tag:"ball-and-stick"})};return await d.commit({revertOnError:!1}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:x}}})}},63536:function(e,t,r){r.d(t,{X:function(){return s},k:function(){return o}});var a=r(67546),n=r(2078),i=r(36111);class o{constructor(){this.subs=void 0}subscribe(e,t){if(!e)return{unsubscribe:()=>{}};void 0===this.subs&&(this.subs=[]);let r=e.subscribe(t);return this.subs.push(r),{unsubscribe:()=>{r&&this.subs&&(0,i.iV)(this.subs,r)&&(r.unsubscribe(),r=void 0)}}}get ev(){return this._ev||(this._ev=n.d.create())}dispose(){if(this._ev&&this._ev.dispose(),this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}}class s extends o{updateState(...e){let t=this.state,r=(0,a.gq)(t,e);return r!==t&&(this._state=r,!0)}get state(){return this._state}constructor(e){super(),this._state=e}}},57939:function(e,t,r){r.d(t,{Zf:function(){return l},zp:function(){return i}});var a=r(45366),n=r(2918);let i="Coordinates",o=(0,n.n)({label:"DCD",description:"DCD",category:i,binaryExtensions:["dcd"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromDcd).commit()}),s=(0,n.n)({label:"XTC",description:"XTC",category:i,binaryExtensions:["xtc"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromXtc).commit()}),l=[["dcd",o],["xtc",s],["trr",(0,n.n)({label:"TRR",description:"TRR",category:i,binaryExtensions:["trr"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromTrr).commit()})],["nctraj",(0,n.n)({label:"NCTRAJ",description:"NCTRAJ",category:i,binaryExtensions:["nc","nctraj"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromNctraj).commit()})],["lammpstrj",(0,n.n)({label:"LAMMPSTRAJ",description:"LAMMPSTRAJ",category:i,stringExtensions:["lammpstrj"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromLammpstraj).commit()})]]},2918:function(e,t,r){r.d(t,{S:function(){return i},n:function(){return n}});var a=r(15943);function n(e){return e}function i(e,t){if("bcif"===e.ext)try{let e=(0,a.$)(t);if(e.encoder.startsWith("VolumeServer"))return"dscif";if(e.encoder.startsWith("volseg-volume-server"))return"segcif";if(s(e,"volume_data_3d_info")){if(s(e,"volume_data_3d"))return"dscif";if(s(e,"segmentation_data_3d"))return"segcif"}}catch(e){console.error(e)}else if("cif"===e.ext){if(t.startsWith("data_SERVER\n#\n_density_server_result"))return"dscif";if(t.startsWith("data_SERVER\n#\ndata_SEGMENTATION_DATA"))return"segcif";if(o(t,"volume_data_3d_info")){if(o(t,"volume_data_3d"))return"dscif";if(o(t,"segmentation_data_3d"))return"segcif"}if(t.includes("atom_site_fract_x")||t.includes("atom_site.fract_x"))return"coreCif"}return -1}function o(e,t){return e.includes(`_${t}.`)}function s(e,t){for(let r of e.dataBlocks)for(let e of r.categories)if(e.name===t)return!0;return!1}},15867:function(e,t,r){r.d(t,{j4:function(){return o},m2:function(){return i}});var a=r(45366),n=r(2918);let i="Topology",o=[["psf",(0,n.n)({label:"PSF",description:"PSF",category:i,stringExtensions:["psf"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParsePsf,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromPsf);return await r.commit(),{format:r.selector,topology:n.selector}}})],["prmtop",(0,n.n)({label:"PRMTOP",description:"PRMTOP",category:i,stringExtensions:["prmtop","parm7"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParsePrmtop,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromPrmtop);return await r.commit(),{format:r.selector,topology:n.selector}}})],["top",(0,n.n)({label:"TOP",description:"TOP",category:i,stringE
7319xtensions:["top"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParseTop,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromTop);return await r.commit(),{format:r.selector,topology:n.selector}}})]]},45203:function(e,t,r){r.d(t,{PF:function(){return i},pB:function(){return y}});var a=r(45366),n=r(2918);let i="Trajectory";function o(e,t){return e.builders.structure.hierarchy.applyPreset(t.trajectory,"default")}function s(e,t){return async(r,a,n)=>{let i=r.state.data;return{trajectory:await i.build().to(a).apply(e,t,{tags:null==n?void 0:n.trajectoryTags}).commit({revertOnError:!0})}}}let l={label:"PDB",description:"PDB",category:i,stringExtensions:["pdb","ent"],parse:s(a.L.Model.TrajectoryFromPDB),visuals:o},u={label:"PDBQT",description:"PDBQT",category:i,stringExtensions:["pdbqt"],parse:s(a.L.Model.TrajectoryFromPDB,{variant:"pdbqt"}),visuals:o},c={label:"PQR",description:"PQR",category:i,stringExtensions:["pqr"],parse:s(a.L.Model.TrajectoryFromPDB,{variant:"pqr"}),visuals:o},d={label:"XYZ",description:"XYZ",category:i,stringExtensions:["xyz"],parse:s(a.L.Model.TrajectoryFromXYZ),visuals:o},p={label:"Lammps Data",description:"Lammps Data",category:i,stringExtensions:["data"],parse:s(a.L.Model.TrajectoryFromLammpsData),visuals:o},f={label:"Lammps Trajectory Data",description:"Lammps Trajectory Data",category:i,stringExtensions:["lammpstrj"],parse:s(a.L.Model.TrajectoryFromLammpsTrajData),visuals:o},m={label:"GRO",description:"GRO",category:i,stringExtensions:["gro"],binaryExtensions:[],parse:s(a.L.Model.TrajectoryFromGRO),visuals:o},h={label:"MOL",description:"MOL",category:i,stringExtensions:["mol"],parse:s(a.L.Model.TrajectoryFromMOL),visuals:o},g={label:"SDF",description:"SDF",category:i,stringExtensions:["sdf","sd"],parse:s(a.L.Model.TrajectoryFromSDF),visuals:o},b={label:"MOL2",description:"MOL2",category:i,stringExtensions:["mol2"],parse:s(a.L.Model.TrajectoryFromMOL2),visuals:o},y=[["mmcif",{label:"mmCIF",description:"mmCIF",category:i,stringExtensions:["cif","mmcif","mcif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>"mmcif"===e.ext||"mcif"===e.ext||("cif"===e.ext||"bcif"===e.ext)&&-1===(0,n.S)(e,t),parse:async(e,t,r)=>{var n,i;let o=e.state.data.build().to(t).apply(a.L.Data.ParseCif,void 0,{state:{isGhost:!0}}),s=await o.apply(a.L.Model.TrajectoryFromMmCif,void 0,{tags:null==r?void 0:r.trajectoryTags}).commit({revertOnError:!0});return((null===(i=null===(n=o.selector.cell)||void 0===n?void 0:n.obj)||void 0===i?void 0:i.data.blocks.length)||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:s}},visuals:o}],["cifCore",{label:"cifCore",description:"CIF Core",category:i,stringExtensions:["cif"],isApplicable:(e,t)=>"cif"===e.ext&&"coreCif"===(0,n.S)(e,t),parse:async(e,t,r)=>{var n,i;let o=e.state.data.build().to(t).apply(a.L.Data.ParseCif,void 0,{state:{isGhost:!0}}),s=await o.apply(a.L.Model.TrajectoryFromCifCore,void 0,{tags:null==r?void 0:r.trajectoryTags}).commit({revertOnError:!0});return((null===(i=null===(n=o.selector.cell)||void 0===n?void 0:n.obj)||void 0===i?void 0:i.data.blocks.length)||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:s}},visuals:o}],["pdb",l],["pdbqt",u],["pqr",c],["gro",m],["xyz",d],["lammps_data",p],["lammps_traj_data",f],["mol",h],["sdf",g],["mol2",b]]},74272:function(e,t,r){r.d(t,{$:function(){return a}});var a,n=r(30502),i=r(75042),o=r(48930),s=r(14086),l=r(87144),u=r(98653),c=r(72762),d=r(5333),p=r(97667);let f={dynamicBonds:s.e.Optional(s.e.Boolean(!1,{description:"Ensure bonds are recalculated upon model changes. Also enables calculation of inter-unit bonds in water molecules and ions."}))};!function(e){async function t(e,t,r,a,i){let o;let s=d.I.Provider.get(r);!a&&s&&0!==s.assemblies.length&&(a=s.assemblies[0].id),s&&0!==s.assemblies.length?(o=u.j.findAssembly(r,a||""))||e.log.warn(`Model '${r.entryId}' has no assembly called '${a}', returning model structure.`):e.log.warn(`Model '${r.entryId}' has no assembly, returning model structure.`);let l=n.Structure.ofModel(r,i);if(!o){let e={label:"Model",description:n.Structure.elementDescription(l)};return new c.G.Molecule.Structure(l,e)}a=o.id;let p=await n.StructureSymmetry.buildAssembly(l,a).runInContext(t),f={label:`Assembly ${a}`,description:n.Structure.elementDescription(p)};return new c.G.Molecule.Structure(p,f)}async function r(e,t,r,a,i){let o=n.Structure.ofModel(t,i),s=await n.StructureSymmetry.buildSymmetryRange(o,r,a).runInContext(e),l={label:`Symmetry [${r}] to [${a}]`,description:n.Structure.elementDescription(s)};return new c.G.Molecule.Structure(s,l)}async function a(e,t,r,a){let i=n.Structure.ofModel(t,a),o=await n.StructureSymmetry.builderSymmetryMates(i,r).runInContext(e),s={label:"Symmetry Mates",description:n.Structure.elementDescription(o)};return new c.G.Molecule.Structure(o,s)}async function m(e,t,r,a,i){let o=n.Structure.ofModel(t,i),s=await n.StructureSymmetry.buildSymmetryAssembly(o,r,a).runInContext(e),l={label:"Symmetry Assembly",description:n.Structure.elementDescription(s)};return new c.G.Molecule.Structure(s,l)}async function h(e,i,o,s){let l=null==s?void 0:s.params,u=d.I.Provider.get(o);if(!u||!s||"model"===s.name){let e=n.Structure.ofModel(o,l);return new c.G.Molecule.Structure(e,{label:"Model",description:n.Structure.elementDescription(e)})}if("auto"===s.name){if(0!==u.assemblies.length)return t(e,i,o,void 0,l);{let e=n.Structure.ofModel(o,l);return new c.G.Molecule.Structure(e,{label:"Model",description:n.Structure.elementDescription(e)})}}return"assembly"===s.name?t(e,i,o,s.params.id,l):"symmetry"===s.name?r(i,o,s.params.ijkMin,s.params.ijkMax,l):"symmetry-mates"===s.name?a(i,o,s.params.radius,l):"symmetry-assembly"===s.name?m(i,o,s.params.generators,u,l):void(0,p.UT)(s)}e.getParams=function(e,t){let r=e&&d.I.Provider.get(e),a=r?r.assemblies.map(e=>[e.id,`${e.id}: ${(0,i.ce)(e.details)}`]):[],n=!r||!o.EO.isZero(r.spacegroup.cell),u=[];
7319if(r){let{operators:e}=r.spacegroup;for(let t=0,r=e.length;t<r;t++)u.push([t,`${t+1}: ${o.I5.getOperatorXyz(e[t])}`])}let c=[];e&&e.properties.structAsymMap.forEach(e=>{let t=e.id===e.auth_id?e.id:`${e.id} [auth ${e.auth_id}]`;c.push([e.id,t])});let p={auto:s.e.Group(f),model:s.e.Group(f),assembly:s.e.Group({id:s.e.Optional(e?s.e.Select(a.length?a[0][0]:"",a,{label:"Asm Id",description:"Assembly Id"}):s.e.Text("",{label:"Asm Id",description:"Assembly Id (use empty for the 1st assembly)"})),...f},{isFlat:!0}),"symmetry-mates":s.e.Group({radius:s.e.Numeric(5,{min:0,max:50,step:1}),...f},{isFlat:!0}),symmetry:s.e.Group({ijkMin:s.e.Vec3(l.AO.create(-1,-1,-1),{step:1},{label:"Min IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),ijkMax:s.e.Vec3(l.AO.create(1,1,1),{step:1},{label:"Max IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),...f},{isFlat:!0}),"symmetry-assembly":s.e.Group({generators:s.e.ObjectList({operators:s.e.ObjectList({index:s.e.Select(0,u),shift:s.e.Vec3((0,l.AO)(),{step:1},{label:"IJK",fieldLabels:{x:"I",y:"J",z:"K"}})},e=>`${e.index+1}_${e.shift.map(e=>e+5).join("")}`,{defaultValue:[]}),asymIds:s.e.MultiSelect([],c)},e=>`${e.asymIds.length} asym ids, ${e.operators.length} operators`,{defaultValue:[]}),...f},{isFlat:!0})},m=[];return"auto"===t&&m.push(["auto","Auto"]),m.push(["model","Model"]),a.length>0&&m.push(["assembly","Assembly"]),n&&(m.push(["symmetry-mates","Symmetry Mates"]),m.push(["symmetry","Symmetry (indices)"]),m.push(["symmetry-assembly","Symmetry (assembly)"])),{type:s.e.MappedStatic(t||"model",p,{options:m})}},e.canAutoUpdate=function(e,t){return"symmetry-assembly"!==t.name&&("symmetry"!==t.name||"symmetry"!==e.name)},e.create=h}(a||(a={}))},43015:function(e,t,r){r.d(t,{YT:function(){return o},al:function(){return s},he:function(){return i},v2:function(){return l}});var a=r(30502),n=r(14086);function i(e,t,r={}){return"string"==typeof r.type||"string"==typeof r.color||"string"==typeof r.size?function(e,t,r){let a=r.type&&e.representation.structure.registry.get(r.type)||e.representation.structure.registry.default.provider,n=r.color&&e.representation.structure.themes.colorThemeRegistry.get(r.color)||e.representation.structure.themes.colorThemeRegistry.get(a.defaultColorTheme.name),i=r.size&&e.representation.structure.themes.sizeThemeRegistry.get(r.size)||e.representation.structure.themes.sizeThemeRegistry.get(a.defaultSizeTheme.name);return u(e,t,{type:a,typeParams:r.typeParams,color:n,colorParams:r.colorParams,size:i,sizeParams:r.sizeParams})}(e,t||a.Structure.Empty,r):u(e,t||a.Structure.Empty,r)}function o(e,t){let{themes:r}=e.representation.structure;return t?r.colorThemeRegistry.getApplicableTypes({structure:t}):r.colorThemeRegistry.types}function s(e,t,r,i,o){let{registry:s,themes:l}=e.representation.structure,u=s.get(r||s.default.name),c=l.colorThemeRegistry.get(i||u.defaultColorTheme.name),d=n.e.getDefaultValues(c.getParams({structure:t||a.Structure.Empty}));return c.name===u.defaultColorTheme.name&&Object.assign(d,u.defaultColorTheme.props),{name:c.name,params:Object.assign(d,o)}}function l(e,t,r,i,o){let{registry:s,themes:l}=e.representation.structure,u=s.get(r||s.default.name),c=l.sizeThemeRegistry.get(i||u.defaultSizeTheme.name),d=n.e.getDefaultValues(c.getParams({structure:t||a.Structure.Empty}));return c.name===u.defaultSizeTheme.name&&Object.assign(d,u.defaultSizeTheme.props),{name:c.name,params:Object.assign(d,o)}}function u(e,t,r={}){let{themes:a}=e.representation.structure,i={structure:t},o=r.type||e.representation.structure.registry.default.provider,s=Object.assign(n.e.getDefaultValues(o.getParams(a,t)),r.typeParams),l=r.color||a.colorThemeRegistry.get(o.defaultColorTheme.name),u=n.e.getDefaultValues(l.getParams(i));l.name===o.defaultColorTheme.name&&Object.assign(u,o.defaultColorTheme.props);let c=Object.assign(u,r.colorParams),d=r.size||a.sizeThemeRegistry.get(o.defaultSizeTheme.name),p=n.e.getDefaultValues(d.getParams(i));d.name===o.defaultSizeTheme.name&&Object.assign(p,o.defaultSizeTheme.props);let f=Object.assign(p,r.sizeParams);return{type:{name:o.name,params:s},colorTheme:{name:l.name,params:c},sizeTheme:{name:d.name,params:f}}}},80541:function(e,t,r){r.d(t,{B3:function(){return en},Cg:function(){return n},L$:function(){return eo},a3:function(){return er},eu:function(){return ea},fS:function(){return ei},fW:function(){return p}});var a,n,i=r(30502),o=r(91044),s=r(71649),l=r(89849),u=r(63964);r(45366);var c=r(34985),d=r(29724);function p(e,t,r={}){var a;let o;return{label:e,expression:t,description:r.description||"",category:null!==(a=r.category)&&void 0!==a?a:n.Misc,isHidden:!!r.isHidden,priority:r.priority||0,referencesCurrent:!!r.referencesCurrent,get query(){return o||(o=(0,l.MY)(t)),o},ensureCustomProperties:r.ensureCustomProperties,async getSelection(e,a,n){let s=e.managers.structure.selection.getStructure(n),u=s?i.StructureSelection.Sequence(n,[s]):i.StructureSelection.Empty(n);return r.ensureCustomProperties&&await r.ensureCustomProperties({runtime:a,assetManager:e.managers.asset},n),o||(o=(0,l.MY)(t)),o(new i.QueryContext(n,{currentSelection:u}))}}}(a=n||(n={})).Type="Type",a.Structure="Structure Property",a.Atom="Atom Property",a.Bond="Bond Property",a.Residue="Residue Property",a.AminoAcid="Amino Acid",a.NucleicBase="Nucleic Base",a.Manipulate="Manipulate Selection",a.Validation="Validation",a.Misc="Miscellaneous",a.Internal="Internal";let f=p("All",s.MolScriptBuilder.struct.generator.all(),{category:"",priority:1e3}),m=p("Current Selection",s.MolScriptBuilder.internal.generator.current(),{category:"",referencesCurrent:!0}),h=p("Polymer",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(polypeptide|cyclic-pseudo-peptide|peptide-like|nucleotide|peptide nucleic acid)","i"),s.MolScriptBuilder.ammp("entitySubtype")])])})]),{category:n.Type}),g=p("Trace",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("sphere","gaussian"),s.MolScriptBuilder.ammp("objectPrimitive")])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CA","P"),s.MolScriptBuilder.ammp("label_atom_id")])})])])]),{category:n.Structure}),b=s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(polypeptide|cyclic-pseudo-peptide|peptide-like)","i"),s.MolScriptBuilder.ammp("entitySubtype")])]),y=s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(nucleotide|peptide nucleic acid)","i"),s.MolScriptBuilder.ammp("entitySubtype")])]),x=s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("non-
7319polymer|(amino|carboxy) terminus|peptide-like","i"),s.MolScriptBuilder.ammp("chemCompType")]),S=p("Backbone",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])})])])]),{category:n.Structure}),T=p("Sidechain",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])])])})])])]),{category:n.Structure}),C=p("Sidechain with Trace",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"CA"]),s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("auth_comp_id"),"PRO"]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"N"])])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"P"])])})])])]),{category:n.Structure}),O=p("Protein",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b})]),{category:n.Type}),I=p("Nucleic",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y})]),{category:n.Type}),A=p("Helix",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"residue-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.ammp("secondaryStructureFlags"),s.MolScriptBuilder.core.type.bitflags([o.SecondaryStructureType.Flag.Helix])])})]),{category:n.Structure,ensureCustomProperties:(e,t)=>d.N.attach(e,t)}),w=p("Beta Strand/Sheet",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"residue-test":s.MolScriptBuilder.core.flags.hasAny([s.MolScriptBuilder.ammp("secondaryStructureFlags"),s.MolScriptBuilder.core.type.bitflags([o.SecondaryStructureType.Flag.Beta])])})]),{category:n.Structure,ensureCustomProperties:(e,t)=>d.N.attach(e,t)}),D=p("Water",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"water"])})]),{category:n.Type}),E=p("Ion",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entitySubtype"),"ion"])})]),{category:n.Type}),M=p("Lipid",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entitySubtype"),"lipid"])})]),{category:n.Type}),P=p("Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"branched"]),s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"non-polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("oligosaccharide","i"),s.MolScriptBuilder.ammp("entitySubtype")])])])})]),{category:n.Type}),k=p("Carbohydrate with Connected",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:P.expression,"layer-count":1,"as-whole-residues":!0})]),{category:n.Internal,isHidden:!0}),B=p("Connected to Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:k.expression,by:P.expression})]),{category:n.Internal,isHidden:!0}),_=p("Ligand",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"non-polymer"]),s.MolScriptBuilder.core.rel.neq([s.MolScriptBuilder.ammp("entityPrdId"),""])]),s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(oligosaccharide|lipid|ion)","i"),s.MolScriptBuilder.ammp("entitySubtype")])])]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("saccharide","i"),s.MolScriptBuilder.ammp("chemCompType")])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":x})])])]),by:s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.PolymerNames)),s.MolScriptBuilder.ammp("label_comp_id")])})]),s.MolScriptBuilder.struct.generator.atomGroups({"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.CommonProteinCaps)),s.MolScriptBuilder.ammp("label_comp_id")])})])})]),{category:n.Type}),R=p("Ligand with Connected",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:_.expression,"layer-count":1,"as-whole-residues":!0,"bond-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Covalent|o.BondType.Flag.MetallicCoordination])])})]),by:P.expression})]),{category:n.Internal,isHidden:!0}),F=p("Connected to Ligand",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:R.expression,by:_.expression})]),{category:n.Internal,isHidden:!0}),L=p("Connected to Ligand or Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([B.expression,F.expression])]),{category:n.Internal,isHidden:!0}),z=p("Disulfide Bridges",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.filter.isConnectedTo({0:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("SG"),s.MolScriptBuilder.ammp("label_atom_id")])}),target:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("SG"),s.MolScriptBuilder.ammp("label_atom_id")])}),"bond-test":!0})])]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.bondedAtomicPairs({0:s.MolScriptBuilder.core.flags.hasAny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Disulfide])])})])])])])]),{category:n.Bond}),N=p("NOS Bridges",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.filter.isConnectedTo({0:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CSO","LYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("OD","NZ"),s.MolScriptBuilder.ammp("label_atom_id")])}),target:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CSO","LYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("OD","NZ"),s.MolScriptBuilder.ammp("label_atom_id")])}),"bond-test":!0})])]),{category:n.Bond}),G=p("Non-standard Residues in Polymers",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.ammp("isNonStandard")})]),{category:n.Residue}),U=p("Coarse Elements",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"chain-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("sphere","gaussian"),s.MolScriptBuilder.ammp("objectPrimitive")])})]),{category:n.Type}),V=p("Rings in Residues",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.rings()]),{category:n.Residue}),j=p("Aromatic Rings in Residues",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.rings({"only-aromatic":!0})]),{category:n.Residue}),H=p("Surrounding Residues (5 Å) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.includeSurroundings({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"as-whole-residues":!0}),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select residues within 5 Å of the current selection.",category:n.Manipulate,referencesCurrent:!0}),q=p("Surrounding Ligands (5 Å) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.surroundingLigands({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"include-water":!0})]),{description:"Select ligand components within 5 Å of the current selection.",category:n.Manipulate,referencesCurrent:!0}),X=p("Surrounding Atoms (5 Å) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.includeSurroundings({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"as-whole-residues":!1}),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select atoms within 5 Å of the current selection.",category:n.Manipulate,referencesCurrent:!0}),W=p("Inverse / Complement of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.generator.all(),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select everything not in the current selection.",category:n.Manipulate,referencesCurrent:!0}),K=p("Residues Covalently Bonded to Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"layer-count":1,"as-whole-residues":!0})]),{description:"Select residues covalently bonded to current selection.",category:n.Manipulate,referencesCurrent:!0}),Q=p("Covalently Bonded Component",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"fixed-point":!0})]),{description:"Select covalently bonded component based on current selection.",category:n.Manipulate,referencesCurrent:!0}),Z=p("Residues with Cov. or Metallic Bond to Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"layer-count":1,"as-whole-residues":!0,"bond-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Covalent|o.BondType.Flag.MetallicCoordination])])})]),{description:"Select residues with covalent or metallic bond to current selection.",category:n.Manipulate,referencesCurrent:!0}),Y=p("Whole Residues of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues({0:s.MolScriptBuilder.internal.generator.current()})]),{description:"Expand current selection to whole residues.",category:n.Manipulate,referencesCurrent:!0}),$=[[["HIS"],"Histidine"],[["ARG"],"Arginine"],[["LYS"],"Lysine"],[["ILE"],"Isoleucine"],[["PHE"],"Phenylalanine"],[["LEU"],"Leucine"],[["TRP"],"Tryptophan"],[["ALA"],"Alanine"],[["MET"],"Methionine"],[["PRO"],"Proline"],[["CYS"],"Cysteine"],[["ASN"],"Asparagine"],[["VAL"],"Valine"],[["GLY"],"Glycine"],[["SER"],"Serine"],[["GLN"],"Glutamine"],[["TYR"],"Tyrosine"],[["ASP"],"Aspartic Acid"],[["GLU"],"Glutamic Acid"],[["THR"],"Threonine"],[["SEC"],"Selenocysteine"],[["PYL"],"Pyrrolysine"],[["UNK"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0),J=[[["A","DA"],"Adenosine"],[["C","DC"],"Cytidine"],[["T","DT"],"Thymidine"],[["G","DG"],"Guanosine"],[["I","DI"],"Inosine"],[["U","DU"],"Uridine"],[["N","DN"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0);function ee([e,t],r,a=0){let n=1!==e.length||et.has(e[0])?`${t} (${e.join(", ")})`:`[${e[0]}] ${t}`;return p(n,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...e),s.MolScriptBuilder.ammp("auth_comp_id")])})]),{category:r,priority:a,description:n})}let et=u.F.unionMany(o.AminoAcidNamesL,o.RnaBaseNames,o.DnaBaseNames,o.WaterNames);function er(e){let t=new Set;for(let r of e)r.uniqueElementSymbols.forEach(e=>t.add(e));let r=[];return t.forEach(e=>{let t=c.Dq[e]||e;r.push(function([e,t],r,a){let n=`${t} (${e.join(", ")})`;return p(n,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...e),s.MolScriptBuilder.acp("elementSymbol")])})]),{category:r,priority:0,description:n})}([[e],t],"Element Symbol",0))}),r}function ea(e){let t=new Map,r=new Set;for(let a of e)for(let e of(a.uniqueResidueNames.forEach(e=>r.add(e)),a.models))a.uniqueResidueNames.forEach(r=>{let a=e.properties.chemicalComponentMap.get(r);a&&t.set(r,a.name)});let a=[];return u.F.difference(r,et).forEach(e=>{let r=t.get(e)||e;a.push(ee([[e],r],"Ligand/Non-standard Residue",200))}),a}function en(e){let t=new Map,r=i.StructureElement.Location.create();for(let a of e)for(let e of(r.structure=a,a.unitSymmetryGroups)){r.unit=e.units[0],r.element=e.elements[0];let a=i.StructureProperties.entity.type(r);if("polymer"===a||"branched"===a){let e=i.StructureProperties.entity.pdbx_description(r);t.set(e.join(", "),e)}}let a=[];return t.forEach((e,t)=>{a.push(function([e,t],r,a){let n=`${t}`;return p(`${t}`,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.list.equal([s.MolScriptBuilder.list(...e),s.MolScriptBuilder.ammp("entityDescription")])})]),{category:r,priority:300,description:n})}([e,t],"Polymer/Carbohydrate Entities",0))}),a}let ei={all:f,current:m,polymer:h,trace:g,backbone:S,sidechain:T,sidechainWithTrace:C,protein:O,nucleic:I,helix:A,beta:w,water:D,ion:E,lipid:M,branched:P,branchedPlusConnected:k,branchedConnectedOnly:B,ligand:_,ligandPlusConnected:R,ligandConnectedOnly:F,connectedOnly:L,disulfideBridges:z,nosBridges:N,nonStandardPolymer:G,coarse:U,ring:V,aromaticRing:j,surroundings:H,surroundingLigands:q,surroundingAtoms:X,complement:W,covalentlyBonded:K,covalentlyOrMetallicBonded:Z,covalentlyBondedComponent:Q,wholeResidues:Y};class eo{add(e){this.list.push(e),this.options.push([e,e.label,e.category]),this.version+=1}remove(e){let t=this.list.indexOf(e);-1!==t&&(this.list.splice(t,1),this.options.splice(t,1),this.version+=1)}constructor(){this.list=[],this.options=[],this.version=1,this.list.push(...Object.values(ei),...$.map(e=>ee(e,n.AminoAcid)),...J.map(e=>ee(e,n.NucleicBase))),this.options.push(...this.list.map(e=>[e,e.label,e.category]))}}},70899:function(e,t,r){r.d(t,{z:function(){return g}});var a=r(19394),n=r(85764),i=r(24641),o=r(63536),s=r(64870),l=r(2546),u=r(41334),c=r(67546
7319),d=r(23465),p=r(73118),f=r(54854),m=r(28250);class h{constructor(){this.queue=[]}run(e){this.queue.length<2?this.queue.push(e):this.queue[this.queue.length-1]=e,1===this.queue.length&&this.next()}async next(){for(;this.queue.length>0;)try{let e=this.queue[0];await e()}catch(e){console.error("Error in SingleTaskQueue execution:",e)}finally{this.queue.shift()}}}class g extends o.X{updateState(e){return"current"in e&&!("currentAnimationTimeMs"in e)?super.updateState({...e,currentAnimationTimeMs:0}):super.updateState(e)}get current(){let e=this.state.current;return this.state.entries.find(t=>t.snapshot.id===e)}getIndex(e){return this.state.entries.indexOf(e)}getEntry(e){if(e)return this.entryMap.get(e)}remove(e){let t=this.entryMap.get(e);t&&((null==t?void 0:t.image)&&this.plugin.managers.asset.delete(t.image),this.entryMap.delete(e),this.updateState({current:this.state.current===e?void 0:this.state.current,entries:this.state.entries.delete(this.getIndex(t))}),this.events.changed.next(void 0))}add(e){this.entryMap.set(e.snapshot.id,e),this.updateState({current:e.snapshot.id,entries:this.state.entries.push(e)}),this.events.changed.next(void 0)}replace(e,t,r){var a,n,i,o;let s=this.getEntry(e);if(!s)return;this.defaultSnapshotId=void 0,(null==s?void 0:s.image)&&this.plugin.managers.asset.delete(s.image);let l=this.getIndex(s),u=g.Entry(t,{key:null!==(a=null==r?void 0:r.key)&&void 0!==a?a:s.key,name:null!==(n=null==r?void 0:r.name)&&void 0!==n?n:s.name,description:null!==(i=null==r?void 0:r.description)&&void 0!==i?i:s.description,descriptionFormat:null!==(o=null==r?void 0:r.descriptionFormat)&&void 0!==o?o:s.descriptionFormat,image:null==r?void 0:r.image});this.entryMap.set(t.id,u),this.updateState({current:u.snapshot.id,entries:this.state.entries.set(l,u)}),this.events.changed.next(void 0)}move(e,t){let r=this.state.entries.size;if(r<2)return;let a=this.getEntry(e);if(!a)return;let n=this.getIndex(a),i=(n+t)%r;i<0&&(i+=r);let o=this.state.entries.get(i),s=this.state.entries.asMutable();s.set(i,a),s.set(n,o),this.updateState({current:a.snapshot.id,entries:s.asImmutable()}),this.events.changed.next(void 0)}update(e,t){var r,a,n;let i=this.getIndex(e);if(i<0)return;let o=this.state.entries.set(i,{...e,key:(null===(r=t.key)||void 0===r?void 0:r.trim())||void 0,name:(null===(a=t.name)||void 0===a?void 0:a.trim())||void 0,description:(null===(n=t.description)||void 0===n?void 0:n.trim())||void 0,descriptionFormat:t.descriptionFormat});this.updateState({entries:o}),this.entryMap.set(e.snapshot.id,this.state.entries.get(i)),this.events.changed.next(void 0)}clear(){0!==this.state.entries.size&&(this.entryMap.forEach(e=>{(null==e?void 0:e.image)&&this.plugin.managers.asset.delete(e.image)}),this.entryMap.clear(),this.updateState({current:void 0,entries:(0,a.aV)()}),this.events.changed.next(void 0))}applyKey(e){let t=this.state.entries.find(t=>t.key===e);t&&(this.updateState({current:t.snapshot.id}),this.events.changed.next(void 0),this.plugin.state.setSnapshot(t.snapshot))}setCurrent(e){let t=this.getEntry(e);return t&&(this.updateState({current:e}),this.events.changed.next(void 0)),t&&t.snapshot}setSnapshotAnimationFrame(e,t=!1){var r;let a=this.getEntry(this.state.current);if(!a)return;let n=null!==(r=i.B.getStateTransitionFrameIndex(a.snapshot,e))&&void 0!==r?r:0;return this.updateState({currentAnimationTimeMs:e})&&this.events.changed.next(void 0),t&&this.animationFrameQueue.run(()=>this.plugin.state.setAnimationSnapshot(a.snapshot,null!=n?n:0)),n}getNextId(e,t){let r=this.state.entries.size;if(!e){if(0===r)return;return this.state.entries.get(-1===t?r-1:0).snapshot.id}let a=this.getEntry(e);if(!a)return;let n=this.getIndex(a);if(!(n<0))return(n=(n+t)%r)<0&&(n+=r),this.state.entries.get(n).snapshot.id}applyNext(e){let t=this.getNextId(this.state.current,e);if(t){let e=this.setCurrent(t);if(e)return this.plugin.state.setSnapshot(e)}}async setStateSnapshot(e){var t;this.clear();let r=(0,a.aV)().asMutable();for(let t of e.entries)this.entryMap.set(t.snapshot.id,t),r.push(t);let n=e.current?e.current:e.entries.length>0?e.entries[0].snapshot.id:void 0;if(this.updateState({current:n,entries:r.asImmutable(),isPlaying:!1,nextSnapshotDelayInMs:e.playback?e.playback.nextSnapshotDelayInMs:g.DefaultNextSnapshotDelayInMs}),this.events.changed.next(void 0),!n)return;let i=this.getEntry(n),o=i&&i.snapshot;if(o)return await this.plugin.state.setSnapshot(o),(null===(t=e.playback)||void 0===t?void 0:t.isPlaying)&&this.play({delayFirst:!0}),o}async syncCurrent(e){var t,r;let a=0===this.state.entries.size,n=1===this.state.entries.size&&this.state.current&&(!this.defaultSnapshotId||this.state.current===this.defaultSnapshotId);if(!a&&!n)return;let i=this.plugin.state.getSnapshot(null==e?void 0:e.params),o=(null!==(r=null===(t=null==e?void 0:e.params)||void 0===t?void 0:t.image)&&void 0!==r?r:this.plugin.state.snapshotParams.value.image)?await g.getCanvasImageAsset(this.plugin,`${i.id}-image.png`):void 0;if(a)this.add(g.Entry(i,{name:null==e?void 0:e.name,description:null==e?void 0:e.description,descriptionFormat:null==e?void 0:e.descriptionFormat,image:o}));else if(n){let e=this.getEntry(this.state.current);(null==e?void 0:e.image)&&this.plugin.managers.asset.delete(e.image),this.replace(this.state.current,i,{image:o})}this.defaultSnapshotId=i.id}async getStateSnapshot(e){await this.syncCurrent(e);let t=this.state.entries.valueSeq().toArray();for(let e=0;e<t.length;e++)t[e]._transientData&&(t[e]={...t[e]},delete t[e]._transientData);return{timestamp:+new Date,version:d.L,name:e&&e.name,description:e&&e.description,current:this.state.current,playback:{isPlaying:!!(e&&e.playOnLoad),nextSnapshotDelayInMs:this.state.nextSnapshotDelayInMs},entries:t}}
7319async serialize(e){let t=JSON.stringify(await this.getStateSnapshot({params:null==e?void 0:e.params}),null,2);if(!(null==e?void 0:e.type)||"json"===e.type||"molj"===e.type)return new Blob([t],{type:"application/json;charset=utf-8"});{let e=new Uint8Array((0,s.KU)(t));(0,s.Fl)(e,0,t);let r={"state.json":e},a=[];for(let{asset:e,file:t}of this.plugin.managers.asset.assets)a.push([e.id,e]),r[`assets/${e.id}`]=new Uint8Array(await t.arrayBuffer());if(a.length>0){let e=JSON.stringify(a,null,2),t=new Uint8Array((0,s.KU)(e));(0,s.Fl)(t,0,e),r["assets.json"]=t}return new Blob([await this.plugin.runTask((0,l.sZ)(r))],{type:"application/zip"})}}async open(e){try{let t=e.name.toLowerCase();if(t.endsWith("json")||t.endsWith("molj")){let t=await this.plugin.runTask((0,u.j2)(e,"string")),r=JSON.parse(m.TT.toString(t));g.isStateSnapshot(r)?await this.setStateSnapshot(r):g.isStateSnapshot(r.data)?await this.setStateSnapshot(r.data):await this.plugin.state.setSnapshot(r)}else{let t=await this.plugin.runTask((0,u.j2)(e,"zip")),r=Object.create(null);(0,c.mt)(t,(e,t)=>{"state.json"!==t&&"assets.json"!==t&&(r[t.substring(t.indexOf("/")+1)]=e)});let a=new File([t["state.json"]],"state.json"),n=await this.plugin.runTask((0,u.j2)(a,"json"));if(t["assets.json"]){let e=new File([t["assets.json"]],"assets.json");for(let[t,a]of(await this.plugin.runTask((0,u.j2)(e,"json"))))this.plugin.managers.asset.set(a,new File([r[t]],a.name))}await this.setStateSnapshot(n)}this.events.opened.next(void 0)}catch(e){console.error(e),this.plugin.log.error("Error reading state")}}async startPlayback(){let{current:e}=this;if(e){if(!e.snapshot.transition)return this.next();{let e=this.setCurrent(this.state.current);await this.plugin.state.setSnapshot(e);let t=void 0!==e.durationInMs?e.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,t))}}}async play(e){if(this.state.isPlaying&&!(null==e?void 0:e.delayFirst)){if(null==e||!e.restart)return;await this.stop()}if(this.updateState({isPlaying:!0}),null==e?void 0:e.delayFirst){let e=this.getEntry(this.state.current);if(!e){this.next();return}this.events.changed.next(void 0);let t=e.snapshot,r=void 0!==t.durationInMs?t.durationInMs:this.state.nextSnapshotDelayInMs;this.timeoutHandle=setTimeout(this.next,r)}else this.startPlayback()}async stop(){await this.plugin.managers.animation.stop(),this.updateState({isPlaying:!1}),void 0!==this.timeoutHandle&&clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0,this.events.changed.next(void 0)}async togglePlay(){this.state.isPlaying?(await this.stop(),this.plugin.managers.markdownExtensions.audio.pause()):await this.play()}dispose(){super.dispose(),this.entryMap.clear()}constructor(e){super({current:void 0,entries:(0,a.aV)(),isPlaying:!1,nextSnapshotDelayInMs:g.DefaultNextSnapshotDelayInMs}),this.plugin=e,this.entryMap=new Map,this.defaultSnapshotId=void 0,this.events={changed:this.ev(),opened:this.ev()},this.animationFrameQueue=new h,this.timeoutHandle=void 0,this.next=async()=>{this.timeoutHandle=void 0;let e=this.getNextId(this.state.current,1);if(!e||e===this.state.current){this.stop();return}let t=this.setCurrent(e);await this.plugin.state.setSnapshot(t);let r=void 0!==t.durationInMs?t.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,r))}}}g.DefaultNextSnapshotDelayInMs=1500,function(e){async function t(e,t){let r=f.iQ.create("Render Screenshot",async r=>{if(!e.helpers.viewportScreenshot)return;let a=await e.helpers.viewportScreenshot.getPreview(r,512);if(!a)return;let i=new File([await (0,p._c)(a.canvas,"png")],t),o={kind:"file",id:n.hb.create22(),name:t};return e.managers.asset.set(o,i),o});return e.runTask(r)}e.Entry=function(e,t){return{timestamp:+new Date,snapshot:e,...t}},e.isStateSnapshot=function(e){return!!e&&!!e.timestamp&&!!e.entries},e.getCanvasImageAsset=t}(g||(g={}))},72762:function(e,t,r){r.d(t,{E:function(){return i},G:function(){return n}});var a,n,i,o=r(67801);!function(e){function t(t){return e.Create({...t,typeClass:"Representation3D"})}e.Create=o.lZ.factory(),e.isRepresentation3D=function(e){return!!e&&"Representation3D"===e.type.typeClass},e.isBehavior=function(e){return!!e&&"Behavior"===e.type.typeClass},e.CreateRepresentation3D=t,e.CreateBehavior=function(t){return e.Create({...t,typeClass:"Behavior"})};class r extends e.Create({name:"Root",typeClass:"Root"}){}e.Root=r;class a extends e.Create({name:"Group",typeClass:"Group"}){}e.Group=a,function(t){class r extends e.Create({name:"String Data",typeClass:"Data"}){}t.String=r;class a extends e.Create({name:"Binary Data",typeClass:"Data"}){}t.Binary=a;
7319class n extends e.Create({name:"Data Blob",typeClass:"Data"}){}t.Blob=n}(e.Data||(e.Data={})),function(t){class r extends e.Create({name:"JSON Data",typeClass:"Data"}){}t.Json=r;class a extends e.Create({name:"CIF File",typeClass:"Data"}){}t.Cif=a;class n extends e.Create({name:"Cube File",typeClass:"Data"}){}t.Cube=n;class i extends e.Create({name:"PSF File",typeClass:"Data"}){}t.Psf=i;class o extends e.Create({name:"PRMTOP File",typeClass:"Data"}){}t.Prmtop=o;class s extends e.Create({name:"TOP File",typeClass:"Data"}){}t.Top=s;class l extends e.Create({name:"PLY File",typeClass:"Data"}){}t.Ply=l;class u extends e.Create({name:"CCP4/MRC/MAP File",typeClass:"Data"}){}t.Ccp4=u;class c extends e.Create({name:"DSN6/BRIX File",typeClass:"Data"}){}t.Dsn6=c;class d extends e.Create({name:"DX File",typeClass:"Data"}){}t.Dx=d;class p extends e.Create({name:"Format Blob",typeClass:"Data"}){}t.Blob=p}(e.Format||(e.Format={})),function(r){class a extends e.Create({name:"Coordinates",typeClass:"Object"}){}r.Coordinates=a;class n extends e.Create({name:"Topology",typeClass:"Object"}){}r.Topology=n;class i extends e.Create({name:"Model",typeClass:"Object"}){}r.Model=i;class o extends e.Create({name:"Trajectory",typeClass:"Object"}){}r.Trajectory=o;class s extends e.Create({name:"Structure",typeClass:"Object"}){}r.Structure=s,function(r){class a extends t({name:"Structure 3D"}){}r.Representation3D=a;class n extends e.Create({name:"Structure 3D State",typeClass:"Object"}){}r.Representation3DState=n;class i extends e.Create({name:"Selections",typeClass:"Object"}){}r.Selections=i}(s=r.Structure||(r.Structure={}))}(e.Molecule||(e.Molecule={})),function(r){class a extends e.Create({name:"Volume",typeClass:"Object"}){}r.Data=a;class n extends e.Create({name:"Lazy Volume",typeClass:"Object"}){}r.Lazy=n;class i extends t({name:"Volume 3D"}){}r.Representation3D=i}(e.Volume||(e.Volume={})),function(r){class a extends e.Create({name:"Shape Provider",typeClass:"Object"}){}r.Provider=a;class n extends t({name:"Shape 3D"}){}r.Representation3D=n}(e.Shape||(e.Shape={}))}(n||(n={})),(a=i||(i={})).CreateBuiltIn=o.td.factory("ms-plugin"),a.BuiltIn=o.td.builderFactory("ms-plugin")},45366:function(e,t,r){r.d(t,{L:function(){return X}});var a,n,i,o,s,l,u,c,d={};r.r(d),r.d(d,{CreateGroup:function(){return y}});var p={};r.r(p),r.d(p,{AssignColorVolume:function(){return U},CustomVolumeProperties:function(){return H},VolumeFromCcp4:function(){return R},VolumeFromCube:function(){return L},VolumeFromDensityServerCif:function(){return N},VolumeFromDsn6:function(){return F},VolumeFromDx:function(){return z},VolumeFromSegmentationCif:function(){return G},VolumeInstances:function(){return j},VolumeTransform:function(){return V}});var f=r(93876),m=r(67801),h=r(85764),g=r(14086),b=r(72762);let y=b.E.BuiltIn({name:"create-group",display:{name:"Group"},from:[],to:b.G.Group,params:{label:g.e.Text("Group"),description:g.e.Optional(g.e.Text(""))}})({apply:({params:e})=>new b.G.Group({},e),update:({oldParams:e,newParams:t,b:r})=>(0,h.VS)(e,t)?m.td.UpdateResult.Unchanged:(r.label=t.label,r.description=t.description,m.td.UpdateResult.Updated)});var x=r(46102),S=r(42639),T=r(87144),C=r(54854),O=r(48930),I=r(58463),A=r(37461),w=r(35849),D=r(36111),E=r(67646);(a=s||(s={})).is=function(e){return(null==e?void 0:e.kind)==="ccp4"},a.create=function(e){return{kind:"ccp4",name:e.name,data:e}};var M=r(23643);(n=l||(l={})).is=function(e){return(null==e?void 0:e.kind)==="dsn6"},n.create=function(e){return{kind:"dsn6",name:e.name,data:e}};var P=r(67370);(i=u||(u={})).is=function(e){return(null==e?void 0:e.kind)==="dx"},i.create=function(e){return{kind:"dx",name:e.name,data:e}};var k=r(1573),B=r(67546);(o=c||(c={})).is=function(e){return(null==e?void 0:e.kind)==="segcif"},o.create=function(e){return{kind:"segcif",name:e._name,data:e}};var _=r(40208);let R=b.E.BuiltIn({name:"volume-from-ccp4",display:{name:"Volume from CCP4/MRC/MAP",description:"Create Volume from CCP4/MRC/MAP data"},from:b.G.Format.Ccp4,to:b.G.Volume.Data,params:e=>({voxelSize:g.e.Vec3(T.AO.create(1,1,1)),offset:g.e.Vec3(T.AO.create(0,0,0)),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from CCP4/MRC/MAP",async r=>{var a,n;let i=await (a=e.data,n={...t,label:e.data.name||e.label},C.iQ.create("Create Volume",async e=>{let{header:t,values:r}=a,i=T.AO.create(t.xLength,t.yLength,t.zLength);n&&n.voxelSize&&T.AO.mul(i,i,n.voxelSize);let o=T.AO.create((0,I.Id)(t.alpha),(0,I.Id)(t.beta),(0,I.Id)(t.gamma)),l=t.ISPG>65536?0:t.ISPG,u=O.EO.create(l||"P 1",i,o),c=T.AO.create(t.MAPC-1,t.MAPR-1,t.MAPS-1),d=T.es.convertToCanonicalAxisIndicesFastToSlow(c),p=[t.NX,t.NY,t.NZ],f=d([t.NC,t.NR,t.NS]),m=0===t.originX&&0===t.originY&&0===t.originZ?T.AO.create(t.NCSTART,t.NRSTART,t.NSSTART):T.AO.create(t.originX/(t.xLength/t.NX),t.originY/(t.yLength/t.NY),t.originZ/(t.zLength/t.NZ));(null==n?void 0:n.offset)&&T.AO.add(m,m,n.offset);let h=d(m),g=T.AO.create(h[0]/p[0],h[1]/p[1],h[2]/p[2]),b=T.AO.create(f[0]/p[0],f[1]/p[1],f[2]/p[2]),y=T.es.Space(f,T.es.invertAxisOrder(c),function(e){let t=(0,A.hc)(e);switch(t){case w.xT.Float32:return Float32Array;case w.xT.Int8:return Int8Array;case w.xT.Int16:return Int16Array;case w.xT.Uint16:return Uint16Array}throw Error(`${t} is not a supported value format.`)}(t)),x=T.es.create(y,T.es.Data1(r)),S=0===t.AMIN&&0===t.AMAX&&0===t.AMEAN&&0===t.ARMS,C={transform:{kind:"spacegroup",cell:u,fractionalBox:O.XZ.create(g,T.AO.add((0,T.AO)(),g,b))},cells:x,stats:{min:Number.isNaN(t.AMIN)||S?(0,D.GI)(r):t.AMIN,max:Number.isNaN(t.AMAX)||S?(0,D.uH)(r):t.AMAX,mean:Number.isNaN(t.AMEAN)||S?(0,D.p7)(r):t.AMEAN,sigma:Number.isNaN(t.ARMS)||0===t.ARMS?(0,D.Ud)(r):t.ARMS}};return{label:null==n?void 0:n.label,entryId:null==n?void 0:n.entryId,periodicity:T.AO.isInteger(b)?"xyz":"none",grid:C,instances:[{transform:T.yb.i
7319dentity()}],sourceData:s.create(a),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(r),o={label:i.label||"Volume",description:`Volume ${e.data.header.NX}\u00D7${e.data.header.NX}\u00D7${e.data.header.NX}`};return new b.G.Volume.Data(i,o)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),F=b.E.BuiltIn({name:"volume-from-dsn6",display:{name:"Volume from DSN6/BRIX",description:"Create Volume from DSN6/BRIX data"},from:b.G.Format.Dsn6,to:b.G.Volume.Data,params:e=>({voxelSize:g.e.Vec3(T.AO.create(1,1,1)),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from DSN6/BRIX",async r=>{var a,n;let i=await (a=e.data,n={...t,label:e.data.name||e.label},C.iQ.create("Create Volume",async e=>{let{header:t,values:r}=a,i=T.AO.create(t.xlen,t.ylen,t.zlen);n&&n.voxelSize&&T.AO.mul(i,i,n.voxelSize);let o=T.AO.create((0,I.Id)(t.alpha),(0,I.Id)(t.beta),(0,I.Id)(t.gamma)),s=O.EO.create("P 1",i,o),u=[t.xRate,t.yRate,t.zRate],c=[t.xExtent,t.yExtent,t.zExtent],d=[t.xStart,t.yStart,t.zStart],p=T.AO.create(d[0]/u[0],d[1]/u[1],d[2]/u[2]),f=T.AO.create(c[0]/u[0],c[1]/u[1],c[2]/u[2]),m=T.es.Space(c,[0,1,2],Float32Array),h=T.es.create(m,T.es.Data1(r));return{label:null==n?void 0:n.label,entryId:null==n?void 0:n.entryId,periodicity:T.AO.isInteger(f)?"xyz":"none",grid:{transform:{kind:"spacegroup",cell:s,fractionalBox:O.XZ.create(p,T.AO.add(T.AO.zero(),p,f))},cells:h,stats:{min:(0,D.GI)(r),max:(0,D.uH)(r),mean:(0,D.p7)(r),sigma:void 0!==t.sigma?t.sigma:(0,D.Ud)(r)}},instances:[{transform:T.yb.identity()}],sourceData:l.create(a),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(r),o={label:i.label||"Volume",description:`Volume ${e.data.header.xExtent}\u00D7${e.data.header.yExtent}\u00D7${e.data.header.zExtent}`};return new b.G.Volume.Data(i,o)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),L=b.E.BuiltIn({name:"volume-from-cube",display:{name:"Volume from Cube",description:"Create Volume from Cube data"},from:b.G.Format.Cube,to:b.G.Volume.Data,params:e=>({dataIndex:e?g.e.Select(0,e.data.header.dataSetIds.map((e,t)=>[t,`${e}`])):g.e.Numeric(0),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from Cube",async r=>{let a=await (0,P.j)(e.data,{...t,label:e.data.name||e.label}).runInContext(r),n={label:a.label||"Volume",description:`Volume ${e.data.header.dim[0]}\u00D7${e.data.header.dim[1]}\u00D7${e.data.header.dim[2]}`};return new b.G.Volume.Data(a,n)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),z=b.E.BuiltIn({name:"volume-from-dx",display:{name:"Parse DX",description:"Create volume from DX data."},from:b.G.Format.Dx,to:b.G.Volume.Data})({apply:({a:e})=>C.iQ.create("Parse DX",async t=>{var r,a;let n=await (r=e.data,a={label:e.data.name||e.label},C.iQ.create("Create Volume",async()=>{let{header:e,values:t}=r,n=T.es.Space(e.dim,[0,1,2],Float64Array),i=T.es.create(n,T.es.Data1(t)),o=T.yb.fromTranslation((0,T.yb)(),e.min),s=T.yb.fromScaling((0,T.yb)(),e.h);return T.yb.mul(o,o,s),{label:null==a?void 0:a.label,entryId:null==a?void 0:a.entryId,grid:{transform:{kind:"matrix",matrix:o},cells:i,stats:{min:(0,D.GI)(t),max:(0,D.uH)(t),mean:(0,D.p7)(t),sigma:(0,D.Ud)(t)}},instances:[{transform:T.yb.identity()}],sourceData:u.create(r),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(t),i={label:n.label||"Volume",description:`Volume ${e.data.header.dim[0]}\u00D7${e.data.header.dim[1]}\u00D7${e.data.header.dim[2]}`};return new b.G.Volume.Data(n,i)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),N=b.E.BuiltIn({name:"volume-from-density-server-cif",display:{name:"Volume from density-server CIF",description:"Identify and create all separate models in the specified CIF data block"},from:b.G.Format.Cif,to:b.G.Volume.Data,params(e){if(!e)return{blockHeader:g.e.Optional(g.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),entryId:g.e.Text("")};let t=e.data.blocks.slice(1);return{blockHeader:g.e.Optional(g.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"})),entryId:g.e.Text("")}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>C.iQ.create("Parse density-server CIF",async r=>{var a;let n=t.blockHeader||e.data.blocks[1].header,i=e.data.blocks.find(e=>e.header===n);if(!i)throw Error(`Data block '${[n]}' not found.`);let o=S.pe.schema.densityServer(i),s=await (0,M.N)(o,{entryId:t.entryId}).runInContext(r),[l,u,c]=s.grid.cells.space.dimensions,d={label:null!==(a=t.entryId)&&void 0!==a?a:o.volume_data_3d_info.name.value(0),description:`Volume ${l}\u00D7${u}\u00D7${c}`};return new b.G.Volume.Data(s,d)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),G=b.E.BuiltIn({name:"volume-from-segmentation-cif",display:{name:"Volume from Segmentation CIF"},from:b.G.Format.Cif,to:b.G.Volume.Data,params(e){let t=null==e?void 0:e.data.blocks.slice(1);return{blockHeader:t?g.e.Optional(g.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"})):g.e.Optional(g.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),segmentLabels:g.e.ObjectList({id:g.e.Numeric(-1),label:g.e.Text("")},e=>`${e.id} = ${e.label}`,{description:"Mapping of segment IDs to segment labels"}),ownerId:g.e.Text("",{isHidden:!0,description:"Reference to the object which manages this volume"})}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>C.iQ.create("Parse segmentation CIF",async r=>{var a;let n=t.blockHeader||e.data.blocks[1].header,i=e.data.blocks.find(e=>e.header===n);if(!i)throw Error(`Data block '${[n]}' not found.`);let o=S.pe.schema.segmentation(i),s={};for(let e of t.segmentLabels)s[e.id]=e.label;let l=await (a={segmentLabels:s,ownerId:t.ownerId},C.iQ.create("Create Segmentation Volume",async e=>{var t;let{volume_data_3d_info:r,segmentation_data_3d:n}=o,i=O.EO.create(r.spacegroup_number.value(0)||"P 1",T.AO.ofArray(r.spacegroup_cell_size.value(0)),T.AO.scale((0,T.AO)(),T.AO.ofArray(r.spacegroup_cell_angles.value(0)),Math.PI/180)
7319),s=r.axis_order.value(0),l=T.es.convertToCanonicalAxisIndicesFastToSlow(s),u=l(r.sample_count.value(0)),d=T.es.Space(u,T.es.invertAxisOrder(s),Float32Array),p=T.es.create(d,T.es.Data1(n.values.toArray({array:Float32Array}))),f=T.AO.ofArray(l(r.origin.value(0))),m=T.AO.ofArray(l(r.dimensions.value(0))),h={label:null==a?void 0:a.label,entryId:void 0,grid:{transform:{kind:"spacegroup",cell:i,fractionalBox:O.XZ.create(f,T.AO.add((0,T.AO)(),f,m))},cells:p,stats:{min:0,max:1,mean:0,sigma:1}},instances:[{transform:T.yb.identity()}],sourceData:c.create(o),customProperties:new E.S,_propertyData:{ownerId:null==a?void 0:a.ownerId}};k.f.PickingGranularity.set(h,"object");let g=new Map,b=new Map,{segment_id:y,set_id:x}=o.segmentation_data_table;for(let e=0,t=y.rowCount;e<t;++e){let t=y.value(e),r=x.value(e);0!==r&&0!==t&&(b.has(r)||b.set(r,new Set),b.get(r).add(t))}b.forEach((e,t)=>{e.forEach(e=>{g.has(e)||g.set(e,new Set),g.get(e).add(t)})});let S=[0,0,0],C=p.space.getCoords,I=p.data,[A,w,D]=h.grid.cells.space.dimensions,M=A-1,P=w-1,_=D-1,R={};b.forEach((e,t)=>{R[t]=[M,P,_,-1,-1,-1]});for(let e=0,t=I.length;e<t;++e){let t=I[e];if(0===t)continue;C(e,S);let r=R[t];S[0]<r[0]&&(r[0]=S[0]),S[1]<r[1]&&(r[1]=S[1]),S[2]<r[2]&&(r[2]=S[2]),S[0]>r[3]&&(r[3]=S[0]),S[1]>r[4]&&(r[4]=S[1]),S[2]>r[5]&&(r[5]=S[2])}let F={};return g.forEach((e,t)=>{F[t]=O.XZ.create(T.AO.create(M,P,_),T.AO.create(-1,-1,-1))}),(0,B.mt)(R,(e,t)=>{b.get(parseInt(t)).forEach(t=>{let r=F[t];e[0]<r.min[0]&&(r.min[0]=e[0]),e[1]<r.min[1]&&(r.min[1]=e[1]),e[2]<r.min[2]&&(r.min[2]=e[2]),e[3]>r.max[0]&&(r.max[0]=e[3]),e[4]>r.max[1]&&(r.max[1]=e[4]),e[5]>r.max[2]&&(r.max[2]=e[5])})}),k.f.Segmentation.set(h,{segments:g,sets:b,bounds:F,labels:null!==(t=null==a?void 0:a.segmentLabels)&&void 0!==t?t:{}}),h})).runInContext(r),[u,d,p]=l.grid.cells.space.dimensions,f={label:o.volume_data_3d_info.name.value(0),description:`Segmentation ${u}\u00D7${d}\u00D7${p}`};return new b.G.Volume.Data(l,f)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),U=b.E.BuiltIn({name:"assign-color-volume",display:{name:"Assign Color Volume",description:"Assigns another volume to be available for coloring."},from:b.G.Volume.Data,to:b.G.Volume.Data,isDecorator:!0,params(e,t){if(!e)return{ref:g.e.Text()};let r=t.state.data.select(m.tE.Generators.root.subtree().ofType(b.G.Volume.Data).filter(t=>{var r;return!!t.obj&&!(null===(r=t.obj)||void 0===r?void 0:r.data.colorVolume)&&t.obj!==e}));return 0===r.length?{ref:g.e.Text("",{isHidden:!0})}:{ref:g.e.Select(r[0].transform.ref,r.map(e=>[e.transform.ref,e.obj.label]))}}})({apply:({a:e,params:t,dependencies:r})=>C.iQ.create("Assign Color Volume",async a=>{if(!r||!r[t.ref])throw Error("Dependency not available.");let n=r[t.ref].data,i={...e.data,colorVolume:n},o={label:e.label,description:"Volume + Colors"};return new b.G.Volume.Data(i,o)})}),V=b.E.BuiltIn({name:"volume-transform",display:{name:"Transform Volume"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:{transform:_.KD}})({canAutoUpdate:()=>!1,apply({a:e,params:t}){let r=(0,_.sj)(t.transform)?k.r.getBoundingSphere(e.data.grid).center:T.AO.unit,a=(0,_.Gl)(t.transform,r),n={kind:"matrix",matrix:T.yb.mul((0,T.yb)(),a,k.r.getGridToCartesianTransform(e.data.grid))};return new b.G.Volume.Data({...e.data,grid:{...e.data.grid,transform:n}},{label:e.label,description:`${e.description} [Transformed]`})}}),j=b.E.BuiltIn({name:"volume-instances",display:{name:"Volume Instances"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:{transforms:g.e.ObjectList({transform:_.KD},()=>"Transform")}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=t.transforms.some(e=>(0,_.sj)(e.transform))?k.r.getBoundingSphere(e.data.grid).center:T.AO.unit,a=t.transforms.map(e=>({transform:(0,_.Gl)(e.transform,r)}));return a.length?new b.G.Volume.Data({...e.data,instances:a},{label:e.label,description:`${e.description} [Instanced]`}):e}}),H=b.E.BuiltIn({name:"custom-volume-properties",display:{name:"Custom Volume Properties"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:(e,t)=>t.customVolumeProperties.getParams(null==e?void 0:e.data)})({apply:({a:e,params:t},r)=>C.iQ.create("Custom Volume Props",async a=>(await q(e.data,r,a,t),new b.G.Volume.Data(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>C.iQ.create("Custom Volume Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customVolumeProperties.get(a);t&&e.data.customProperties.reference(t.descriptor,!1)}return await q(e.data,n,i,a),m.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customProperties.dispose()}});async function q(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customVolumeProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching volume prop '${r}': ${e}`)}else a.set(e,s)}}let X={Data:f,Misc:d,Model:x,Volume:p,Representation:r(10515),Shape:r(59990)}},93876:function(e,t,r){r.r(t),r.d(t,{DeflateData:function(){return ep},Download:function(){return ec},DownloadBlob:function(){return ed},ImportJson:function(){return eA},ImportString:function(){return eI},LazyVolume:function(){return eD},ParseBlob:function(){return eh},ParseCcp4:function(){return eT},ParseCif:function(){return eg},ParseCube:function(){return ev},ParseDsn6:function(){return eC},ParseDx:function(){return eO},ParseJson:function(){return ew},ParsePly:function(){return eS},ParsePrmtop:function(){return ey},ParsePsf:function(){return eb},ParseTop:function(){return ex},RawData:function(){return ef},ReadFile:function(){return em}});var a=r(37461),n=r(42639),i=r(54854),o=r(7600),s=r(94284),l=r(27594);function u(e){let{xExtent:t,yExtent:r,zExtent:a}=e;return{xBlocks:Math.ceil(t/8),yBlocks:Math.ceil(r/8),zBlocks:Math.ceil(a/8)}}async function c(e){let{buffer:t}=await e.readBuffer(0,512),r=String.fromCharCode.apply(null,t),a=r.startsWith(":-)"),n=a||100===t.readInt16LE(36);return{header:a?{xStart:parseInt(r.substr(10,5)),yStart:parseInt(r.substr(15,5)),zStart:parseInt(r.substr(20,5)),xExtent:parseInt(r.substr(32,5)),yExtent:parseInt(r.substr(38,5)),zExtent:parseInt(r.substr(42,5)),xRate:parseInt(r.substr(52,5)),yRate:parseInt(r.substr(58,5)),zRate:parseInt(r.substr(62,5)),xlen:parseFloat(r.substr(73,10)),ylen:parseFloat(r.substr(83,10)),zlen:parseFloat(r.substr(93,10)),alpha:parseFloat(r.substr(103,10)),beta:parseFloat(r.substr(113,10)),gamma:parseFloat(r.substr(123,10)),divisor:parseFloat(r.substr(138,12)),summand:parseInt(r.substr(155,8)),sigma:parseFloat(r.substr(170,12))}:function(e,t){let r=t?t=>e.readInt16LE(2*t):t=>e.readInt16BE(2*t),a=1/r(17);return{xStart:r(0),yStart:r(1),zStart:r(2),xExtent:r(3),yExtent:r(4),zExtent:r(5),xRate:r(6),yRate:r(7),zRate:r(8),xlen:r(9)*a,ylen:r(10)*a,zlen:r(11)*a,alpha:r(12)*a,beta:r(13)*a,gamma:r(14)*a,divisor:r(15)
7319/100,summand:r(16),sigma:void 0}}(t,n),littleEndian:n}}async function d(e,t,r,a){a||l.z.flipByteOrderInPlace2(t.buffer);let{divisor:n,summand:i,xExtent:o,yExtent:s,zExtent:c}=e,{xBlocks:d,yBlocks:p,zBlocks:f}=u(e),m=0;for(let e=0;e<f;++e)for(let a=0;a<p;++a)for(let l=0;l<d;++l)for(let u=0;u<8;++u){let d=8*e+u;for(let e=0;e<8;++e){let u=8*a+e;for(let e=0;e<8;++e){let a=8*l+e;if(a<o&&u<s&&d<c)r[(a*s+u)*c+d]=(t[m]-i)/n,++m;else{m+=8-e;break}}}}}async function p(e,t,r){await r.update({message:"Parsing DSN6/BRIX file..."});let{header:a,littleEndian:n}=await c(e),{buffer:i}=await e.readBuffer(512,t-512),{valueCount:o}=function(e){let{xExtent:t,yExtent:r,zExtent:a}=e,{xBlocks:n,yBlocks:i,zBlocks:o}=u(e),s=8*n*i*8*o*8;return{count:s,byteCount:1*s,valueCount:t*r*a}}(a),s=new Float32Array(o);return await d(a,i,s,n),{header:a,values:s,name:e.name}}let f=new Set(["char","uchar","short","ushort","int","uint","float","double","int8","uint8","int16","uint16","int32","uint32","float32","float64"]);function m(e){if(!f.has(e))throw Error(`unknown ply type '${e}'`);return e}var h=r(55291),g=r(86920),b=r(65665);function y(e){switch(e){case"char":case"uchar":case"int8":case"uint8":case"short":case"ushort":case"int16":case"uint16":case"int":case"uint":case"int32":case"uint32":return g.sg.Schema.int;case"float":case"double":case"float32":case"float64":return g.sg.Schema.float}}async function x(e,t){let r=function(e,t){let r=(0,h.Tokenizer)(e);return{data:e,tokenizer:r,runtimeCtx:t,comments:[],elementSpecs:[],elements:[]}}(e,t);t.update({message:"Parsing...",current:0,max:e.length}),function(e){let t,r,a;let{tokenizer:n,comments:i,elementSpecs:o}=e;!function(e){let t=e.data.indexOf("end_header",e.position);if(-1===t)throw Error("no 'end_header' record found");e.tokenStart=e.position,e.tokenEnd=t,e.position=t,h.Tokenizer.eatLine(e)}(n);let s=h.Tokenizer.getTokenString(n).split(/\r?\n/);if("ply"!==s[0])throw Error("data not starting with 'ply'");if("format ascii 1.0"!==s[1])throw Error("format not 'ascii 1.0'");function l(){if(void 0!==t&&void 0!==r&&void 0!==a){let e=!1;for(let t=0,r=a.length;t<r;++t)if("list"===a[t].kind){e=!0;break}e&&a.length,e?o.push({kind:"list",name:t,count:r,property:a[0]}):o.push({kind:"table",name:t,count:r,properties:a})}}for(let e=2,n=s.length;e<n;++e){let n=s[e],o=n.split(" ");if(n.startsWith("comment"))i.push(n.substr(8));else if(n.startsWith("element"))l(),a=[],t=o[1],r=parseInt(o[2]);else if(n.startsWith("property")){if(void 0===a)throw Error("properties outside of element");"list"===o[1]?a.push({kind:"list",countType:m(o[2]),dataType:m(o[3]),name:o[4]}):a.push({kind:"column",type:m(o[1]),name:o[2]})}else n.startsWith("end_header")?l():console.warn("unknown header line")}}(r),function(e){let{elementSpecs:t}=e;for(let r=0,a=t.length;r<a;++r){let a=t[r];"table"===a.kind?function(e,t){let{elements:r,tokenizer:a}=e,{count:n,properties:i}=t,o=i.length,s=[],l=[],u=[],c=new Map;for(let e=0;e<o;++e){let e=h.c.create(a.data,2*n);u.push(e)}for(let e=0;e<n;++e)for(let e=0;e<o;++e)h.Tokenizer.skipWhitespace(a),h.Tokenizer.markStart(a),h.Tokenizer.eatValue(a),h.c.addUnchecked(u[e],a.tokenStart,a.tokenEnd);for(let e=0;e<o;++e){let{type:t,name:r}=i[e],a=(0,b.IS)(u[e],y(t));s.push(r),l.push(t),c.set(r,a)}r.push({kind:"table",rowCount:n,propertyNames:s,propertyTypes:l,getProperty:e=>c.get(e)})}(e,a):"list"===a.kind&&function(e,t){let{elements:r,tokenizer:a}=e,{count:n,property:i}=t,o=h.c.create(a.data,6*n),s=new Uint32Array(n+1),l=0;for(let e=0;e<n;++e){for(h.Tokenizer.skipWhitespace(a),h.Tokenizer.markStart(a);10!==h.Tokenizer.skipWhitespace(a);)++l,h.Tokenizer.markStart(a),h.Tokenizer.eatValue(a),h.c.addToken(o,a);s[e+1]=l}let u={entries:[],count:0},c=(0,b.IS)(o,y(i.dataType));r.push({kind:"list",rowCount:n,name:i.name,type:i.dataType,value:e=>{let t=s[e]+1,r=c.value(t-1);for(let e=t,a=t+r;e<a;++e)u.entries[e-t]=c.value(e);return u.count=r,u}})}(e,a)}}(r);let{elements:a,elementSpecs:n,comments:i}=r,s=function(e,t,r){let a=new Map;for(let r=0,n=t.length;r<n;++r)a.set(t[r],e[r]);return{comments:r,elementNames:t,getElement:e=>a.get(e)}}(a,n.map(e=>e.name),i);return o.X.success(s)}let{readLine:S,skipWhitespace:T,eatValue:C,eatLine:O,markStart:I}=h.Tokenizer,A=/\s+/,w=/(^\*|REMARK)*/;async function D(e,t){let{tokenizer:r}=e,a=h.c.create(r.data,2*t),n=h.c.create(r.data,2*t),o=h.c.create(r.data,2*t),s=h.c.create(r.data,2*t),l=h.c.create(r.data,2*t),u=h.c.create(r.data,2*t),c=h.c.create(r.data,2*t),d=h.c.create(r.data,2*t),{position:p}=r,f=S(r).trim();r.position=p;let m=7===f.split(A).length,y=m?6:8,{length:x}=r,w=0;return await (0,i.rV)(e.runtimeCtx,1e5,void 0,e=>{let i=Math.min(t-w,e);for(let e=0;e<i;++e){for(let e=0;e<y;++e)if(T(r),I(r),C(r),m)switch(e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 2:h.c.addUnchecked(l,r.tokenStart,r.tokenEnd);break;case 3:h.c.addUnchecked(u,r.tokenStart,r.tokenEnd);break;case 4:h.c.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 5:h.c.addUnchecked(d,r.tokenStart,r.tokenEnd)}else switch(e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 2:h.c.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 3:h.c.addUnchecked(s,r.tokenStart,r.tokenEnd);break;case 4:h.c.addUnchecked(l,r.tokenStart,r.tokenEnd);break;case 5:h.c.addUnchecked(u,r.tokenStart,r.tokenEnd);break;case 6:h.c.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 7:h.c.addUnchecked(d,r.tokenStart,r.tokenEnd)}O(r),I(r)}return w+=i,i},e=>e.update({message:"Parsing...",current:r.position,max:x})),{count:t,atomId:(0,b.Lq)(a)(g.sg.Schema.int),segmentName:m?(0,b.Lq)(o)(g.sg.Schema.str):(0,b.Lq)(n)(g.sg.Schema.str),residueId:(0,b.Lq)(o)(g.sg.Schema.int),residueName:m?(0,b.Lq)(o)(g.sg.Schema.str):(0,b.Lq)(s)(g.sg.Schema.str),atomName:(0,b.Lq)(l)(g.sg.Schema.str),atomType:(0,b.Lq)(u)(g.sg.Schema.str),charge:(0,b.Lq)(c)(g.sg.Schema.float),mass:(0,b.Lq)(d)(g.sg.Schema.float)}}async function E(e,t){let{tokenizer:r}=e,a=h.c.create(r.data,2*t),n=h.c.create(r.data,2*t),{length:o}=r,s=0;return await (0,i.rV)(e.runtimeCtx,10,void 0,e=>{let i=Math.min(t-s,e);for(let e=0;e<i;++e)for(let e=0;e<2;++e)switch(T(r),I(r),C(r),e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(n,r.tokenStart,r.tokenEnd)}return s+=i,i},e=>e.update({message:"Parsing...",current:r.position,max:o}
7319)),{count:t,atomIdA:(0,b.Lq)(a)(g.sg.Schema.int),atomIdB:(0,b.Lq)(n)(g.sg.Schema.int)}}async function M(e,t){let r,a,n;let i=(0,h.Tokenizer)(e),s={tokenizer:i,runtimeCtx:t},l=S(s.tokenizer).trim();for(;i.tokenEnd<i.length;){let e=S(s.tokenizer).trim();if(e.includes("!NTITLE"))r=function(e,t){let r=[];for(let a=0;a<t;++a){let t=S(e.tokenizer);r.push(t.replace(w,"").trim())}return r}(s,parseInt(e.split(A)[0]));else if(e.includes("!NATOM")){let t=parseInt(e.split(A)[0]);a=await D(s,t)}else if(e.includes("!NBOND")){let t=parseInt(e.split(A)[0]);n=await E(s,t);break}else e.includes("!NTHETA")||e.includes("!NPHI")||e.includes("!NIMPHI")||e.includes("!NDON")||e.includes("!NACC")||e.includes("!NNB")||e.includes("!NGRP NST2")||e.includes("!MOLNT")||e.includes("!NUMLP NUMLPH")||e.includes("!NCRTERM")}if(void 0===r&&(r=[]),void 0===a)return o.X.error("no atoms data");if(void 0===n)return o.X.error("no bonds data");let u={id:l,title:r,atoms:a,bonds:n};return o.X.success(u)}var P=r(67801),k=r(41334),B=r(14086),_=r(72762),R=r(59725),F=r(87144),L=r(99408),z=r(28250),N=r(64870);function G(e){let t={h:(0,F.AO)()},r=0,a=0,n=/\s+/g;for(;;){let i;let o=h.Tokenizer.readLine(e);if(o.startsWith("object 1"))i=o.split(n),t.dim=F.AO.create(parseInt(i[5]),parseInt(i[6]),parseInt(i[7]));else if(o.startsWith("origin"))i=o.split(n),t.min=F.AO.create(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]));else if(o.startsWith("delta"))i=o.split(n),0===a?t.h[0]=parseFloat(i[1]):1===a?t.h[1]=parseFloat(i[2]):2===a&&(t.h[2]=parseFloat(i[3])),a+=1;else if(o.startsWith("object 3")){r+=o.length+1;break}r+=o.length+1}return{header:t,headerByteCount:r}}async function U(e,t,r){await e.update("Reading header...");let a=(0,h.Tokenizer)(t),{header:n}=G(a);await e.update("Reading values...");let s=await function(e,t,r){let a=r.dim[0]*r.dim[1]*r.dim[2],n=new Float64Array(a),o=0;return(0,i.rV)(e,1e6,n,(e,r)=>{let n=Math.min(a,o+e);for(let e=o;e<n;e++)h.Tokenizer.skipWhitespace(t),t.tokenStart=t.position,h.Tokenizer.eatValue(t),r[e]=(0,L.Iz)(t.data,t.tokenStart,t.tokenEnd);return o=n,n===a?0:1e6},(e,t,r)=>e.update({current:Math.min(r,a),max:a}))}(e,a,n);return o.X.success({header:n,values:s,name:r})}async function V(e,t,r){await e.update("Reading header...");let a=(0,N.en)(t,0,1e3),{header:n,headerByteCount:i}=G((0,h.Tokenizer)(a));await e.update("Reading values...");let s=n.dim[0]*n.dim[1]*n.dim[2],l=new DataView(t.buffer,t.byteOffset+i),u=new Float64Array(s);for(let e=0;e<s;e++)u[e]=l.getFloat64(8*e,!0);return o.X.success({header:n,values:u,name:r})}var j=r(7922),H=r(97667);let q=["NATOM","NTYPES","NBONH","MBONA","NTHETH","MTHETA","NPHIH","MPHIA","NHPARM","NPARM","NNB","NRES","NBONA","NTHETA","NPHIA","NUMBND","NUMANG","NPTRA","NATYP","NPHB","IFPERT","NBPER","NGPER","NDPER","MBPER","MGPER","MDPER","IFBOX","NMXRS","IFCAP","NUMEXTRA","NCOPY"],{readLine:X,markLine:W,trim:K}=h.Tokenizer;function Q(e,t,r,a){let{tokenizer:n}=e,i=h.c.create(n.data,2*t),o=0;for(;n.tokenEnd<n.length&&"%"!==n.data.charAt(n.position);){n.tokenStart=n.position;let e=Math.min(o+r,t);for(;o<e;++o){let e=n.position;K(n,n.position,n.position+a),h.c.addUnchecked(i,n.tokenStart,n.tokenEnd),n.position=e+a}W(n)}return i}async function Z(e,t){let r=(0,h.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n=Object.create(null),i=0;for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let e=X(a.tokenizer).trim();if(e.startsWith("%VERSION"))n.version=e.substring(8).trim();else if(e.startsWith("%FLAG")){let t=e.substring(5).trim(),i=X(a.tokenizer).trim();for(;i.startsWith("%COMMENT");)i=X(a.tokenizer).trim();if(!i.startsWith("%FORMAT"))throw Error(`expected %FORMAT got "${i}"`);if("TITLE"===t||"CTITLE"===t)n.title=function(e){let{tokenizer:t}=e,r=[];for(;t.tokenEnd<t.length&&"%"!==t.data.charAt(t.position);){let e=X(t).trim();e&&r.push(e)}return r}(a);else if("POINTERS"===t)n.pointers=function(e){let{tokenizer:t}=e,r=Object.create(null);q.forEach(e=>{r[e]=0});let a=0;for(;t.tokenEnd<t.length&&"%"!==t.data.charAt(t.position);){let e=X(t),n=Math.min(a+10,32);for(let t=0;a<n;++t,++a)r[q[a]]=parseInt(e.substring(8*t,8*t+8).trim())}return r}(a);else if("ATOM_NAME"===t){let e=Q(a,n.pointers.NATOM,20,4);n.atomName=(0,b.Lq)(e)(g.sg.Schema.str)}else if("CHARGE"===t){let e=Q(a,n.pointers.NATOM,5,16);n.charge=(0,b.Lq)(e)(g.sg.Schema.float)}else if("MASS"===t){let e=Q(a,n.pointers.NATOM,5,16);n.mass=(0,b.Lq)(e)(g.sg.Schema.float)}else if("RESIDUE_LABEL"===t){let e=Q(a,n.pointers.NRES,20,4);n.residueLabel=(0,b.Lq)(e)(g.sg.Schema.str)}else if("RESIDUE_POINTER"===t){let e=Q(a,n.pointers.NRES,10,8);n.residuePointer=(0,b.Lq)(e)(g.sg.Schema.int)}else if("BONDS_INC_HYDROGEN"===t){let e=Q(a,3*n.pointers.NBONH,10,8);n.bondsIncHydrogen=(0,b.Lq)(e)(g.sg.Schema.int)}else if("BONDS_WITHOUT_HYDROGEN"===t){let e=Q(a,3*n.pointers.NBONA,10,8);n.bondsWithoutHydrogen=(0,b.Lq)(e)(g.sg.Schema.int)}else if("RADII"===t){let e=Q(a,n.pointers.NATOM,5,16);n.radii=(0,b.Lq)(e)(g.sg.Schema.float)}else for(;r.tokenEnd<r.length&&"%"!==r.data.charAt(r.position);)W(r)}}return o.X.success(n)}
7319let Y={nr:g.sg.Schema.Int(),type:g.sg.Schema.Str(),resnr:g.sg.Schema.Int(),residu:g.sg.Schema.Str(),atom:g.sg.Schema.Str(),cgnr:g.sg.Schema.Int(),charge:g.sg.Schema.Float(),mass:g.sg.Schema.Float()},$={ai:g.sg.Schema.Int(),aj:g.sg.Schema.Int()},J={compound:g.sg.Schema.Str(),molCount:g.sg.Schema.Int()},{readLine:ee,markLine:et,skipWhitespace:er,markStart:ea,eatValue:en,eatLine:ei}=h.Tokenizer,eo=/\[ (.+) \]/,es=/\s+/;async function el(e,t){let r=(0,h.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n=Object.create(null),i=0;n.compounds={};let s={},l="";function u(){l&&s.atoms&&(n.compounds[l]=s,s={},l="")}for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let e=ee(a.tokenizer).trim();if(e&&"*"!==e[0]&&";"!==e[0]){if(e.startsWith("#include"))throw Error("#include statements not allowed");if(e.startsWith("[")){let t=e.match(eo);if(null===t)throw Error("expected field name");let i=t[1];if("moleculetype"===i)u(),l=function(e){let t;let{tokenizer:r}=e;for(;r.tokenEnd<r.length;){er(r);let e=r.data.charAt(r.position);if("["===e)break;if(";"===e||"*"===e){et(r);continue}if(void 0!==t)throw Error("more than one molName");t=ee(r).split(es)[0]}if(void 0===t)throw Error("missing molName");return t}(a);else if("atoms"===i)s.atoms=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64),n=h.c.create(t.data,64),i=h.c.create(t.data,64),o=h.c.create(t.data,64),s=h.c.create(t.data,64),l=h.c.create(t.data,64),u=h.c.create(t.data,64);for(;t.tokenEnd<t.length;){er(t);let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<8;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd);break;case 2:h.c.add(n,t.tokenStart,t.tokenEnd);break;case 3:h.c.add(i,t.tokenStart,t.tokenEnd);break;case 4:h.c.add(o,t.tokenStart,t.tokenEnd);break;case 5:h.c.add(s,t.tokenStart,t.tokenEnd);break;case 6:h.c.add(l,t.tokenStart,t.tokenEnd);break;case 7:h.c.add(u,t.tokenStart,t.tokenEnd)}et(t)}return g.iA.ofColumns(Y,{nr:(0,b.Lq)(r)(g.sg.Schema.int),type:(0,b.Lq)(a)(g.sg.Schema.str),resnr:(0,b.Lq)(n)(g.sg.Schema.int),residu:(0,b.Lq)(i)(g.sg.Schema.str),atom:(0,b.Lq)(o)(g.sg.Schema.str),cgnr:(0,b.Lq)(s)(g.sg.Schema.int),charge:(0,b.Lq)(l)(g.sg.Schema.float),mass:(0,b.Lq)(u)(g.sg.Schema.float)})}(a);else if("bonds"===i)s.bonds=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64);for(;t.tokenEnd<t.length;){er(t);let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<2;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd)}et(t)}return g.iA.ofColumns($,{ai:(0,b.Lq)(r)(g.sg.Schema.int),aj:(0,b.Lq)(a)(g.sg.Schema.int)})}(a);else if("system"===i)n.system=function(e){let t;let{tokenizer:r}=e;for(;r.tokenEnd<r.length;){er(r);let e=r.data.charAt(r.position);if("["===e)break;if(";"===e||"*"===e){et(r);continue}if(void 0!==t)throw Error("more than one system");t=ee(r).trim()}if(void 0===t)throw Error("missing system");return t}(a);else if("molecules"===i)u(),n.molecules=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64);for(;t.tokenEnd<t.length&&(er(t),!(t.position>=t.length));){let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<2;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd)}ei(t),ea(t)}return g.iA.ofColumns(J,{compound:(0,b.Lq)(r)(g.sg.Schema.str),molCount:(0,b.Lq)(a)(g.sg.Schema.int)})}(a);else for(;r.tokenEnd<r.length&&"["!==r.data.charAt(r.position);)et(r)}}}return o.X.success(n)}var eu=r(2546);let ec=_.E.BuiltIn({name:"download",display:{name:"Download",description:"Download string or binary data from the specified URL"},from:[_.G.Root],to:[_.G.Data.String,_.G.Data.Binary],params:{url:B.e.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),label:B.e.Optional(B.e.Text("")),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, download data as binary (string otherwise)"}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Download",async a=>{let n=R.x.getUrlAsset(r.managers.asset,e.url),i=await r.managers.asset.resolve(n,e.isBinary?"binary":"string").runInContext(a);return t.asset=i,e.isBinary?new _.G.Data.Binary(i.data,{label:e.label?e.label:n.url}):new _.G.Data.String(i.data,{label:e.label?e.label:n.url})}),dispose({cache:e}){var t;
7319null===(t=null==e?void 0:e.asset)||void 0===t||t.dispose()},update:({oldParams:e,newParams:t,b:r})=>e.url!==t.url||e.isBinary!==t.isBinary?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||("string"==typeof t.url?t.url:t.url.url),P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged}),ed=_.E.BuiltIn({name:"download-blob",display:{name:"Download Blob",description:"Download multiple string or binary data from the specified URLs."},from:_.G.Root,to:_.G.Data.Blob,params:{sources:B.e.ObjectList({id:B.e.Text("",{label:"Unique ID"}),url:B.e.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, download data as binary (string otherwise)"})),canFail:B.e.Optional(B.e.Boolean(!1,{description:"Indicate whether the download can fail and not be included in the blob as a result."}))},e=>`${e.id}: ${e.url}`),maxConcurrency:B.e.Optional(B.e.Numeric(4,{min:1,max:12,step:1},{description:"The maximum number of concurrent downloads."}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Download Blob",async a=>{let n=[],i=await (0,k.Qe)(a,r.managers.asset,e.sources,e.maxConcurrency||4),o=[];for(let t=0;t<i.length;t++){let a=i[t],s=e.sources[t];"error"===a.kind?r.log.warn(`Download ${a.id} (${s.url}) failed: ${a.error}`):(o.push(a.result),n.push(s.isBinary?{id:a.id,kind:"binary",data:a.result.data}:{id:a.id,kind:"string",data:a.result.data}))}return t.assets=o,new _.G.Data.Blob(n,{label:"Data Blob",description:`${n.length} ${1===n.length?"entry":"entries"}`})}),dispose({cache:e},t){let r=null==e?void 0:e.assets;if(r)for(let e of r)e.dispose()}}),ep=_.E.BuiltIn({name:"defalate-data",display:{name:"Deflate",description:"Deflate compressed data"},params:{method:B.e.Select("gzip",[["gzip","gzip"]]),isString:B.e.Boolean(!1),stringEncoding:B.e.Optional(B.e.Select("utf-8",[["utf-8","UTF8"]])),label:B.e.Optional(B.e.Text(""))},from:[_.G.Data.Binary],to:[_.G.Data.Binary,_.G.Data.String]})({apply:({a:e,params:t},r)=>i.iQ.create("Gzip",async r=>{let a=await (0,eu.ec)(r,e.data),n=t.label?t.label:e.label;if(t.isString){let e=(0,N.jV)(a);return new _.G.Data.String(e,{label:n})}return new _.G.Data.Binary(a,{label:n})})}),ef=_.E.BuiltIn({name:"raw-data",display:{name:"Raw Data",description:"Raw data supplied by value."},from:[_.G.Root],to:[_.G.Data.String,_.G.Data.Binary],params:{data:B.e.Value("",{isHidden:!0}),label:B.e.Optional(B.e.Text(""))}})({apply:({params:e})=>i.iQ.create("Raw Data",async()=>"string"==typeof e.data?new _.G.Data.String(e.data,{label:e.label?e.label:"String"}):Array.isArray(e.data)||e.data instanceof ArrayBuffer?new _.G.Data.Binary(new Uint8Array(e.data),{label:e.label?e.label:"Binary"}):e.data instanceof Uint8Array?new _.G.Data.Binary(e.data,{label:e.label?e.label:"Binary"}):void(0,H.UT)(e.data)),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||r.label,P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,customSerialization:{toJSON(e){if("string"==typeof e.data||Array.isArray(e.data))return e;if(e.data instanceof ArrayBuffer){let t=new Uint8Array(e.data),r=Array(t.length);for(let e=0,a=t.length;e<a;e++)r[e]=t[e];return{data:r,label:e.label}}if(e.data instanceof Uint8Array){let t=Array(e.data.length);for(let r=0,a=e.data.length;r<a;r++)t[r]=e.data[r];return{data:t,label:e.label}}},fromJSON:e=>e}}),em=_.E.BuiltIn({name:"read-file",display:{name:"Read File",description:"Read string or binary data from the specified file"},from:_.G.Root,to:[_.G.Data.String,_.G.Data.Binary],params:{file:B.e.File(),label:B.e.Optional(B.e.Text("")),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, open file as as binary (string otherwise)"}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Open File",async a=>{if(null===e.file)return r.log.error("No file(s) selected"),P.lZ.Null;let n=await r.managers.asset.resolve(e.file,e.isBinary?"binary":"string").runInContext(a);return t.asset=n,e.isBinary?new _.G.Data.Binary(n.data,{label:e.label?e.label:e.file.name}):new _.G.Data.String(n.data,{label:e.label?e.label:e.file.name})}),dispose({cache:e}){var t;
7319null===(t=null==e?void 0:e.asset)||void 0===t||t.dispose()},update({oldParams:e,newParams:t,b:r}){var a;return e.label!==t.label?(r.label=t.label||(null===(a=e.file)||void 0===a?void 0:a.name)||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged},isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user loaded files."})}),eh=_.E.BuiltIn({name:"parse-blob",display:{name:"Parse Blob",description:"Parse multiple data enties"},from:_.G.Data.Blob,to:_.G.Format.Blob,params:{formats:B.e.ObjectList({id:B.e.Text("",{label:"Unique ID"}),format:B.e.Select("cif",[["cif","cif"]])},e=>`${e.id}: ${e.format}`)}})({apply:({a:e,params:t},r)=>i.iQ.create("Parse Blob",async r=>{let a=new Map;for(let e of t.formats)a.set(e.id,e.format);let i=[];for(let t of e.data){if(!a.has(t.id))continue;let e=await ("string"===t.kind?n.pe.parse(t.data):n.pe.parseBinary(t.data)).runInContext(r);if(e.isError)throw Error(`${t.id}: ${e.message}`);i.push({id:t.id,kind:"cif",data:e.result})}return new _.G.Format.Blob(i,{label:"Format Blob",description:`${i.length} ${1===i.length?"entry":"entries"}`})})}),eg=_.E.BuiltIn({name:"parse-cif",display:{name:"Parse CIF",description:"Parse CIF from String or Binary data"},from:[_.G.Data.String,_.G.Data.Binary],to:_.G.Format.Cif})({apply:({a:e})=>i.iQ.create("Parse CIF",async t=>{let r=await n.pe.parse(e.data).runInContext(t);if(r.isError)throw Error(r.message);return 0===r.result.blocks.length?P.lZ.Null:new _.G.Format.Cif(r.result)})}),ev=_.E.BuiltIn({name:"parse-cube",display:{name:"Parse Cube",description:"Parse Cube from String data"},from:_.G.Data.String,to:_.G.Format.Cube})({apply:({a:e})=>i.iQ.create("Parse Cube",async t=>{var r,a;let n=await (r=e.data,a=e.label,i.iQ.create("Parse Cube",async e=>{await e.update("Reading header...");let t=(0,h.Tokenizer)(r),{header:n,atoms:s}=function(e){let t=h.Tokenizer.readLines(e,6),r=(e,r)=>{let a=+t[e].trim().split(/\s+/g)[r];return Number.isNaN(a)?0:a},a=e=>{let t=r(e+2,0);return[Math.abs(t),F.AO.create(.529177210859*r(e+2,1),.529177210859*r(e+2,2),.529177210859*r(e+2,3)),t]},n=t[0].trim(),i=t[1].trim(),[o,s,l]=a(0),[u,c]=a(1),[d,p]=a(2),[f,m]=a(3),b=function(e,t,r){let a=new Int32Array(t),n=new Float64Array(t),i=new Float32Array(t),o=new Float32Array(t),s=new Float32Array(t);for(let l=0;l<t;l++){let t=h.Tokenizer.readLine(e).trim().split(/\s+/g);a[l]=+t[0],n[l]=+t[1],i[l]=.529177210859*+t[2],o[l]=.529177210859*+t[3],s[l]=+t[4]*r}return{count:t,number:g.sg.ofArray({array:a,schema:g.sg.Schema.int}),nuclearCharge:g.sg.ofArray({array:n,schema:g.sg.Schema.float}),x:g.sg.ofArray({array:i,schema:g.sg.Schema.float}),y:g.sg.ofArray({array:o,schema:g.sg.Schema.float}),z:g.sg.ofArray({array:s,schema:g.sg.Schema.float})}}(e,o,.529177210859),y=[];if(l>=0){let e=r(2,4);0===e&&(e=1);for(let t=0;t<e;t++)y.push(t)}else{let t=h.Tokenizer.readLine(e).trim().split(/\s+/g);for(let e=0,r=+t[0];e<r;e++)y.push(+t[e+1])}return{header:{orbitals:l<0,comment1:n,comment2:i,atomCount:o,origin:s,dim:F.AO.create(u,d,f),basisX:c,basisY:p,basisZ:m,dataSetIds:y},atoms:b}}(t),l=await function(e,t,r){let a=r.dim[0]*r.dim[1]*r.dim[2]*r.dataSetIds.length,n=new Float64Array(a),o=0;return(0,i.rV)(e,1e6,n,(e,r)=>{let n=Math.min(a,o+e);for(let e=o;e<n;e++)h.Tokenizer.skipWhitespace(t),t.tokenStart=t.position,h.Tokenizer.eatValue(t),r[e]=(0,L.Iz)(t.data,t.tokenStart,t.tokenEnd);return o=n,n===a?0:1e6},(e,t,r)=>e.update({current:Math.min(r,a),max:a}))}(e,t,n);return o.X.success({header:n,atoms:s,values:l,name:a})})).runInContext(t);if(n.isError)throw Error(n.message);return new _.G.Format.Cube(n.result)})}),eb=_.E.BuiltIn({name:"parse-psf",display:{name:"Parse PSF",description:"Parse PSF from String data"},from:[_.G.Data.String],to:_.G.Format.Psf})({apply:({a:e})=>i.iQ.create("Parse PSF",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PSF",async e=>await M(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Psf(a.result)})}),ey=_.E.BuiltIn({name:"parse-prmtop",display:{name:"Parse PRMTOP",description:"Parse PRMTOP from String data"},from:[_.G.Data.String],to:_.G.Format.Prmtop})({apply:({a:e})=>i.iQ.create("Parse PRMTOP",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PRMTOP",async e=>await Z(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Prmtop(a.result)})}),ex=_.E.BuiltIn({name:"parse-top",display:{name:"Parse TOP",description:"Parse TOP from String data"},from:[_.G.Data.String],to:_.G.Format.Top})({apply:({a:e})=>i.iQ.create("Parse TOP",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse TOP",async e=>await el(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Top(a.result)})}),eS=_.E.BuiltIn({name:"parse-ply",display:{name:"Parse PLY",description:"Parse PLY from String data"},from:[_.G.Data.String],to:_.G.Format.Ply})({apply:({a:e})=>i.iQ.create("Parse PLY",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PLY",async e=>await x(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Ply(a.result,{label:a.result.comments[0]||"PLY Data"})})}),eT=_.E.BuiltIn({name:"parse-ccp4",display:{name:"Parse CCP4/MRC/MAP",description:"Parse CCP4/MRC/MAP from Binary data"},from:[_.G.Data.Binary],to:_.G.Format.Ccp4})({apply:({a:e})=>i.iQ.create("Parse CCP4/MRC/MAP",async t=>{let r=await a.Qc(e.data,e.label).runInContext(t);if(r.isError)throw Error(r.message);return new _.G.Format.Ccp4(r.result)})}),eC=_.E.BuiltIn({name:"parse-dsn6",display:{name:"Parse DSN6/BRIX",description:"Parse CCP4/BRIX from Binary data"},from:[_.G.Data.Binary],to:_.G.Format.Dsn6})({apply:({a:e})=>i.iQ.create("Parse DSN6/BRIX",async t=>{var r,a,n,u;
7319let c=await (r=e.data,a=e.label,n=s.l.fromBuffer(l.z.fromUint8Array(r),a),u=r.length,i.iQ.create("Parse DSN6/BRIX",async e=>{try{return o.X.success(await p(n,u,e))}catch(e){return o.X.error(e)}})).runInContext(t);if(c.isError)throw Error(c.message);return new _.G.Format.Dsn6(c.result)})}),eO=_.E.BuiltIn({name:"parse-dx",display:{name:"Parse DX",description:"Parse DX from Binary/String data"},from:[_.G.Data.Binary,_.G.Data.String],to:_.G.Format.Dx})({apply:({a:e})=>i.iQ.create("Parse DX",async t=>{var r,a;let n=await (r=e.data,a=e.label,i.iQ.create("Parse DX",e=>z.TT.is(r)?U(e,r,a):V(e,r,a))).runInContext(t);if(n.isError)throw Error(n.message);return new _.G.Format.Dx(n.result)})}),eI=_.E.BuiltIn({name:"import-string",display:{name:"Import String",description:"Import given data as a string"},from:_.G.Root,to:_.G.Data.String,params:{data:B.e.Value(""),label:B.e.Optional(B.e.Text(""))}})({apply:({params:{data:e,label:t}})=>new _.G.Data.String(e,{label:t||""}),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported strings."})}),eA=_.E.BuiltIn({name:"import-json",display:{name:"Import JSON",description:"Import given data as a JSON"},from:_.G.Root,to:_.G.Format.Json,params:{data:B.e.Value({}),label:B.e.Optional(B.e.Text(""))}})({apply:({params:{data:e,label:t}})=>new _.G.Format.Json(e,{label:t||""}),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported JSON."})}),ew=_.E.BuiltIn({name:"parse-json",display:{name:"Parse JSON",description:"Parse JSON from String data"},from:[_.G.Data.String],to:_.G.Format.Json})({apply:({a:e})=>i.iQ.create("Parse JSON",async t=>{let r=await new Response(z.TT.toString(e.data)).json();return new _.G.Format.Json(r)})}),eD=_.E.BuiltIn({name:"lazy-volume",display:{name:"Lazy Volume",description:"A placeholder for lazy loaded volume representation"},from:_.G.Root,to:_.G.Volume.Lazy,params:{url:B.e.Url(""),isBinary:B.e.Boolean(!1),format:B.e.Text("ccp4"),entryId:B.e.Value("",{isHidden:!0}),isovalues:B.e.ObjectList({type:B.e.Text("relative"),value:B.e.Numeric(0),color:B.e.Color(j.t.black),alpha:B.e.Numeric(1,{min:0,max:1,step:.01}),volumeIndex:B.e.Numeric(0)},e=>`${e.type} ${e.value}`)}})({apply:({a:e,params:t})=>i.iQ.create("Lazy Volume",async e=>{let r=Array.isArray(t.entryId)?t.entryId.join(", "):t.entryId;return new _.G.Volume.Lazy(t,{label:`${r||t.url}`,description:"Lazy Volume"})})})},40208:function(e,t,r){r.d(t,{GW:function(){return u},Gl:function(){return f},K$:function(){return s},KD:function(){return m},OQ:function(){return o},Oq:function(){return i},_$:function(){return l},cY:function(){return c},sj:function(){return p}});var a=r(14086),n=r(87144);function i(e){return{pairs:[{loci:[e[0].loci,e[1].loci]}]}}function o(e){return{triples:[{loci:[e[0].loci,e[1].loci,e[2].loci]}]}}function s(e){let t=e[0].loci;return{quads:[{loci:[t,e[1].loci,e[2].loci,e[3].loci]}]}}function l(e){return{infos:[{loci:e[0].loci}]}}function u(e){return{locis:e.map(e=>e.loci)}}function c(e){return{locis:e.map(e=>e.loci)}}let d={center:(0,n.AO)(),rotation:(0,n.yb)(),translationToCenter:(0,n.yb)(),translationFromCenter:(0,n.yb)(),translation:(0,n.yb)(),local:(0,n.yb)()};function p(e){var t;return"components"===e.name&&(null===(t=e.params.rotationCenter)||void 0===t?void 0:t.name)==="centroid"}function f(e,t){var r,a;if("matrix"===e.name){let t=(0,n.yb)();return n.yb.copy(t,e.params.data),e.params.transpose&&n.yb.transpose(t,t),t}{(null===(r=e.params.rotationCenter)||void 0===r?void 0:r.name)==="centroid"?n.AO.copy(d.center,t):(null===(a=e.params.rotationCenter)||void 0===a?void 0:a.name)==="point"?n.AO.copy(d.center,e.params.rotationCenter.params.point):n.AO.set(d.center,0,0,0),n.yb.fromTranslation(d.translationToCenter,d.center),n.yb.fromRotation(d.rotation,e.params.angle*Math.PI/180,e.params.axis),n.yb.fromTranslation(d.translationFromCenter,n.AO.negate(d.center,d.center));let i=n.yb.mul3((0,n.yb)(),d.translationToCenter,d.rotation,d.translationFromCenter);return n.yb.fromTranslation(d.translation,e.params.translation),n.yb.mul(i,d.translation,i),i}}let m=a.e.MappedStatic("matrix",{matrix:a.e.Group({data:a.e.Mat4(n.yb.identity()),transpose:a.e.Boolean(!1)},{isFlat:!0}),components:a.e.Group({translation:a.e.Vec3(n.AO.create(0,0,0)),axis:a.e.Vec3(n.AO.create(1,0,0)),angle:a.e.Numeric(0,{min:-360,max:360,step:1},{description:"Angle in Degrees"}),rotationCenter:a.e.MappedStatic("point",{point:a.e.Group({point:a.e.Vec3(n.AO.create(0,0,0))},{isFlat:!0}),centroid:a.e.Group({})})},{isFlat:!0})},{label:"Kind"})},46102:function(e,t,r){r.r(t),r.d(t,{CoordinatesFromDcd:function(){return tQ},CoordinatesFromLammpstraj:function(){return tJ},CoordinatesFromNctraj:function(){return t$},CoordinatesFromTrr:function(){return tY},CoordinatesFromXtc:function(){return tZ},CustomModelProperties:function(){return rI},CustomStructureProperties:function(){return rw},ModelFromTrajectory:function(){return rc},ModelWithCoordinates:function(){return rh},MultiStructureSelectionFromBundle:function(){return rb},MultiStructureSelectionFromExpression:function(){return rv},ShapeFromPly:function(){return rE},StructureComplexElement:function(){return rC},StructureComplexElementTypes:function(){return rS},StructureComponent:function(){return rO},StructureFromModel:function(){return rp},StructureFromTrajectory:function(){return rd},StructureInstances:function(){return rm},StructureSelectionFromBundle:function(){return rx},StructureSelectionFromExpression:function(){return rg},StructureSelectionFromScript:function(){return ry},TopologyFromPrmtop:function(){return t1}
7319,TopologyFromPsf:function(){return t0},TopologyFromTop:function(){return t2},TrajectoryFromBlob:function(){return t5},TrajectoryFromCifCore:function(){return rs},TrajectoryFromCube:function(){return ro},TrajectoryFromGRO:function(){return t9},TrajectoryFromLammpsData:function(){return rt},TrajectoryFromLammpsTrajData:function(){return rr},TrajectoryFromMOL:function(){return ra},TrajectoryFromMOL2:function(){return ri},TrajectoryFromMmCif:function(){return t8},TrajectoryFromModelAndCoordinates:function(){return t4},TrajectoryFromPDB:function(){return t7},TrajectoryFromSDF:function(){return rn},TrajectoryFromXYZ:function(){return re},TransformStructureConformation:function(){return rf},getTrajectory:function(){return t3}});var a,n,i,o,s,l,u,c,d,p,f,m,h,g,b,y,x,S,T,C,O,I,A,w,D,E,M,P,k=r(7600),B=r(54854),_=r(3523),R=r(86920),F=r(55291),L=r(99408);async function z(e){let{tokenizer:t,numberOfAtoms:r}=e,a=await F.Tokenizer.readLinesAsync(t,r,e.runtimeCtx,1e5),n=t.data.substring(a.indices[0],a.indices[1]).substring(20).match(/\.\d+/g),i=6===n.length;e.header.hasVelocities=i,e.header.precision.position=n[0].length-1,e.header.precision.velocity=i?n[3].length-1:0;let o=e.header.precision.position+5,s=20+3*o,l=e.header.precision.velocity+4,u=function(e,t,r){return function(e,t,r,a){let{data:n,indices:i,count:o}=e,{valueType:s}=a,l="str"===s?e=>{let a=i[2*e]+t,o=i[2*e+1];if(a>=o)return"";let s=a+r;return s>o&&(s=o),(0,F.m)(n,a,s)}:"int"===s?e=>{let a=i[2*e]+t;return a>i[2*e+1]?0:(0,L.qY)(n,a,a+r)}:e=>{let a=i[2*e]+t;return a>i[2*e+1]?0:(0,L.Ym)(n,a,a+r)};return{schema:a,__array:void 0,isDefined:!0,rowCount:o,value:l,valueKind:e=>R.sg.ValueKinds.Present,toArray:e=>R.A_.createAndFillArray(o,l,e),areValuesEqual:(e,t)=>l(e)===l(t)}}(a,e,t,r)},c=R.sg.Undefined(e.numberOfAtoms,R.sg.Schema.float);return{count:e.numberOfAtoms,residueNumber:u(0,5,R.sg.Schema.int),residueName:u(5,5,R.sg.Schema.str),atomName:u(10,5,R.sg.Schema.str),atomNumber:u(15,5,R.sg.Schema.int),x:u(20,o,R.sg.Schema.float),y:u(20+o,o,R.sg.Schema.float),z:u(20+2*o,o,R.sg.Schema.float),vx:i?u(s,l,R.sg.Schema.float):c,vy:i?u(s+l,l,R.sg.Schema.float):c,vz:i?u(s+2*l,l,R.sg.Schema.float):c}}async function N(e,t){let r=(0,F.Tokenizer)(e);await t.update({message:"Parsing...",current:0,max:e.length});let a=[];for(;r.position<e.length;){let e={tokenizer:r,header:{title:"",timeInPs:0,hasVelocities:!1,precision:{position:0,velocity:0},box:[0,0,0]},numberOfAtoms:0,runtimeCtx:t};!function(e){let{tokenizer:t,header:r}=e,a=F.Tokenizer.readLine(t);0===a.trim().length&&(a=F.Tokenizer.readLine(t));let n=a.lastIndexOf("t=");n>=0?(r.timeInPs=parseFloat(a.substring(n+2)),r.title=a.substring(0,n).trim(),r.title&&","===r.title[r.title.length-1]&&(r.title=r.title.substring(0,r.title.length-1))):r.title=a}(e),function(e){let{tokenizer:t}=e;F.Tokenizer.markLine(t);let r=F.Tokenizer.getTokenString(t);e.numberOfAtoms=parseInt(r)}(e);let n=await z(e);!function(e){let{tokenizer:t}=e,r=F.Tokenizer.readLine(t).trim().split(/\s+/g);e.header.box=[+r[0],+r[1],+r[2]]}(e),a.push({header:e.header,atoms:n})}return k.X.success({structures:a})}var G=r(87144),U=r(70371),V=r(89623),j=r(4376),H=r(93898),q=r(69062),X=r(36111),W=r(14086),K=r(7922),Q=r(67546),Z=r(75042),Y=r(68303);function $(e){let t=e&&e.getElement("vertex"),r=e&&e.getElement("material"),a={group:"",vRed:"",vGreen:"",vBlue:"",mRed:"",mGreen:"",mBlue:""},n=[["",""]],i=[["",""]];if(t){for(let e=0,r=t.propertyNames.length;e<r;++e){let r=t.propertyNames[e],a=t.propertyTypes[e];("uchar"===a||"uint8"===a||"ushort"===a||"uint16"===a||"uint"===a||"uint32"===a||"int"===a)&&n.push([r,r]),("uchar"===a||"uint8"===a)&&i.push([r,r])}t.propertyNames.includes("atomid")?a.group="atomid":t.propertyNames.includes("material_index")&&(a.group="material_index"),t.propertyNames.includes("red")&&(a.vRed="red"),t.propertyNames.includes("green")&&(a.vGreen="green"),t.propertyNames.includes("blue")&&(a.vBlue="blue")}let o=[["",""]];if(r){for(let e=0,t=r.propertyNames.length;e<t;++e){let t=r.propertyNames[e],a=r.propertyTypes[e];("uchar"===a||"uint8"===a)&&o.push([t,t])}r.propertyNames.includes("red")&&(a.mRed="red"),r.propertyNames.includes("green")&&(a.mGreen="green"),r.propertyNames.includes("blue")&&(a.mBlue="blue")}let s=a.vRed&&a.vGreen&&a.vBlue?"vertex":a.mRed&&a.mGreen&&a.mBlue?"material":"uniform";return{...j.K.Params,coloring:W.e.MappedStatic(s,{vertex:W.e.Group({red:W.e.Select(a.vRed,i,{label:"Red Property"}),green:W.e.Select(a.vGreen,i,{label:"Green Property"}),blue:W.e.Select(a.vBlue,i,{label:"Blue Property"})},{isFlat:!0}),material:W.e.Group({red:W.e.Select(a.mRed,o,{label:"Red Property"}),green:W.e.Select(a.mGreen,o,{label:"Green Property"}),blue:W.e.Select(a.mBlue,o,{label:"Blue Property"})},{isFlat:!0}),uniform:W.e.Group({color:W.e.Color(K.t.grey),saturation:W.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:W.e.Numeric(0,{min:-6,max:6,step:.1})},{isFlat:!0})}),grouping:W.e.MappedStatic(a.group?"vertex":"none",{vertex:W.e.Group({group:W.e.Select(a.group,n,{label:"Group Property"})},{isFlat:!0}),none:W.e.Group({})})}}let J=$();async function ee(e,t,r,a,n){let i=V.V.createState(t.rowCount,t.rowCount/4,n),o=t.getProperty("x"),s=t.getProperty("y"),l=t.getProperty("z");if(!o||!s||!l)throw Error("missing coordinate properties");
7319let u=t.getProperty("nx"),c=t.getProperty("ny"),d=t.getProperty("nz");for(let r=0,n=t.rowCount;r<n;r+=1e5)!function(e,t,r,a,n){let{vertices:i,normals:o,groups:s}=r,l=a.getProperty("x"),u=a.getProperty("y"),c=a.getProperty("z");if(!l||!u||!c)throw Error("missing coordinate properties");let d=a.getProperty("nx"),p=a.getProperty("ny"),f=a.getProperty("nz"),m=!!d&&!!p&&!!f;for(let r=e;r<t;++r)q.pS.add3(i,l.value(r),u.value(r),c.value(r)),m&&q.pS.add3(o,d.value(r),p.value(r),f.value(r)),q.pS.add(s,n[r])}(r,Math.min(r+1e5,n),i,t,a),e.shouldUpdate&&await e.update({message:"adding ply mesh vertices",current:r,max:n});for(let t=0,a=r.rowCount;t<a;t+=1e5)!function(e,t,r,a){let{indices:n}=r;for(let r=e;r<t;++r){let{entries:e,count:t}=a.value(r);3===t?q.pS.add3(n,e[0],e[1],e[2]):4===t&&(q.pS.add3(n,e[2],e[1],e[0]),q.pS.add3(n,e[2],e[0],e[3]))}}(t,Math.min(t+1e5,a),i,r),e.shouldUpdate&&await e.update({message:"adding ply mesh faces",current:t,max:a});let p=V.V.getMesh(i);return u&&c&&d||j.K.computeNormals(p),Y.IO.updateIfChanged(p.varyingGroup,!0),p}let et=R.sg.Schema.int;function er(e,t,r){let a,n,i;let{coloring:o}=r,{rowCount:s}=e;if("vertex"===o.name)a=e.getProperty(o.params.red)||R.sg.ofConst(127,s,et),n=e.getProperty(o.params.green)||R.sg.ofConst(127,s,et),i=e.getProperty(o.params.blue)||R.sg.ofConst(127,s,et);else if("material"===o.name)a=t&&t.getProperty(o.params.red)||R.sg.ofConst(127,s,et),n=t&&t.getProperty(o.params.green)||R.sg.ofConst(127,s,et),i=t&&t.getProperty(o.params.blue)||R.sg.ofConst(127,s,et);else{let e=o.params.color;e=U.Il.saturate(e,o.params.saturation),e=U.Il.lighten(e,o.params.lightness);let[t,r,l]=U.Il.toRgb(e);a=R.sg.ofConst(t,s,et),n=R.sg.ofConst(r,s,et),i=R.sg.ofConst(l,s,et)}return{kind:o.name,red:a,green:n,blue:i}}function ea(e,t,r,a){let{kind:n,red:i,green:o,blue:s}=r,{ids:l,map:u,label:c}=a,{source:d,transforms:p}=e;return H.b.create("ply-mesh",d,t,e=>{let t="material"===n?e:u[e];return U.Il.fromRgb(i.value(t),o.value(t),s.value(t))},()=>1,e=>`${c} ${l[e]}`,p)}var en=r(24496),ei=r(58463);function eo(){return eo.empty()}!function(e){function t(e,t){return{size:e,anglesInRadians:t}}function r(){return t((0,G.AO)(),(0,G.AO)())}e.create=t,e.empty=r,e.fromBasis=function(e,a,n){let i=G.AO.magnitude(e),o=G.AO.magnitude(a),s=G.AO.magnitude(n),l=Math.acos(G.AO.dot(a,n)/(o*s)),u=Math.acos(G.AO.dot(e,n)/(i*s)),c=Math.acos(G.AO.dot(e,a)/(i*o));return i<=0||o<=0||s<=0||l>=Math.PI||u>=Math.PI||c>=Math.PI?r():t(G.AO.create(i,o,s),G.AO.create(l,u,c))}}(eo||(eo={}));var es=r(22177);function el(e,t,r,a){let n=r,i=a-1,o=t.charCodeAt(n);for(;(32===o||o>=48&&o<=57)&&n<=i;)o=t.charCodeAt(++n);for(o=t.charCodeAt(i);(32===o||o>=48&&o<=57)&&i>=n;)o=t.charCodeAt(--i);if(n===++i||n+1===i)return F.c.add(e,n,i);if(o=t.charCodeAt(n),n+2===i){let r=t.charCodeAt(n+1);if((78===o||110===o)&&(65===r||97===r)||(67===o||99===o)&&(76===r||108===r)||(70===o||102===o)&&(69===r||101===r)||(83===o||115===o)&&(73===r||105===r)||(66===o||98===o)&&(82===r||114===r)||(65===o||97===o)&&(83===r||115===r)||(76===o||108===o)&&(73===r||105===r)||(71===o||103===o)&&(65===r||97===r))return F.c.add(e,n,n+2)}if(67===o||99===o||72===o||104===o||78===o||110===o||79===o||111===o||80===o||112===o||83===o||115===o)return F.c.add(e,n,n+1);F.c.add(e,n,n)}let eu=new Set(["NA","CL","FE","SI","BR","AS","LI","GA"]),ec=new Set(["C","H","N","O","P","S","F","B"]),ed=/^[\s\d]+|[\s\d]+$/g;function ep(e,t){let r=(e=e.replace(ed,"").toUpperCase()).length;if(0===r||1===r||eu.has(e))return e;if(3===r&&t===e){if("SOD"===e)return"NA";if("POT"===e)return"K";if("CES"===e)return"CS";if("CAL"===e)return"CA";if("CLA"===e)return"CL"}return ec.has(e[0])?e[0]:""}var ef=r(91044),em=r(44740),eh=r(67738);let eg="ABCDEFGHIJKLMNOPQRSTUVWXYZ",ev=(0,eh.m)(function(e){let t=eg.length,r=e,a=0,n=eg[r%t];for(;r>=t;)n+=eg[(r=Math.floor(r/t))%t],a+=1;return a>=5&&console.warn("getChainId overflow"),n});var eb=r(3709),ey=r(18886),ex=r(91080),eS=r(36667);(a=g||(g={})).is=function(e){return(null==e?void 0:e.kind)==="gro"},a.fromGro=function(e){return{kind:"gro",name:e.structures[0].header.title,data:e}};var eT=r(12618),eC=r(42639);function eO(e,t){return{id:e,details:t,groups:[]}}let eI={1:"helx_rh_al_p",2:"helx_rh_om_p",3:"helx_rh_pi_p",4:"helx_rh_ga_p",5:"helx_rh_3t_p",6:"helx_lh_al_p",7:"helx_lh_om_p",8:"helx_lh_ga_p",9:"helx_rh_27_p",10:"helx_rh_pp_p"},eA={MOL_ID:"",MOLECULE:"",CHAIN:"",FRAGMENT:"",SYNONYM:"",EC:"",ENGINEERED:"",MUTATION:"",OTHER_DETAILS:""};var ew=r(65665);class eD{constructor(e,t,r,a){this.asymIds=e,this.modelNums=t,this.terIndices=r,this.hasAssemblies=a,this.asymIdCounts=new Map,this.currModelNum=void 0,this.currAsymId="",this.currLabelAsymId=""}clear(){this.asymIdCounts.clear(),this.currModelNum=void 0}get(e){let t=this.asymIds.value(e);if(this.hasAssemblies)return t;let r=this.modelNums[e];if(r!==this.currModelNum?(this.asymIdCounts.clear(),this.currModelNum=r,this.currLabelAsymId=t):this.currAsymId!==t&&(this.currAsymId=t,this.currLabelAsymId=t),this.asymIdCounts.has(t)){if(this.terIndices.has(e)){let e=this.asymIdCounts.get(t)+1;this.asymIdCounts.set(t,e),this.currLabelAsymId=`${t}_${e}`}}else this.asymIdCounts.set(t,0);return this.currLabelAsymId}}function eE(e,t,r,a,n,i){let{data:o}=r,s=n-a;F.c.addToken(e.group_PDB,F.Tokenizer.trim(r,a,a+6)),F.Tokenizer.trim(r,a+6,a+11),e.id[e.index]=r.data.substring(r.tokenStart,r.tokenEnd),F.c.addToken(e.auth_atom_id,F.Tokenizer.trim(r,a+12,a+16)),32===o.charCo
7319deAt(a+16)?F.c.add(e.label_alt_id,0,0):F.c.add(e.label_alt_id,a+16,a+17),F.c.addToken(e.auth_comp_id,F.Tokenizer.trim(r,a+17,a+21)),F.c.add(e.auth_asym_id,a+21,a+22),F.c.addToken(e.auth_seq_id,F.Tokenizer.trim(r,a+22,a+26)),32===o.charCodeAt(a+26)?F.c.add(e.pdbx_PDB_ins_code,0,0):F.c.add(e.pdbx_PDB_ins_code,a+26,a+27),F.c.addToken(e.Cartn_x,F.Tokenizer.trim(r,a+30,a+38)),F.c.addToken(e.Cartn_y,F.Tokenizer.trim(r,a+38,a+46)),F.c.addToken(e.Cartn_z,F.Tokenizer.trim(r,a+46,a+54)),"pqr"===i?(F.c.addToken(e.partial_charge,F.Tokenizer.trim(r,a+54,a+62)),el(e.type_symbol,o,a+12,a+16)):(F.c.addToken(e.occupancy,F.Tokenizer.trim(r,a+54,a+60)),s>=66?F.c.addToken(e.B_iso_or_equiv,F.Tokenizer.trim(r,a+60,a+66)):F.c.add(e.B_iso_or_equiv,0,0),"pdbqt"===i&&F.c.addToken(e.partial_charge,F.Tokenizer.trim(r,a+70,a+76)),s>=78&&"pdb"===i?(F.Tokenizer.trim(r,a+76,a+78),r.tokenStart<r.tokenEnd?F.c.addToken(e.type_symbol,r):el(e.type_symbol,o,a+12,a+16)):el(e.type_symbol,o,a+12,a+16)),e.pdbx_PDB_model_num[e.index]=t,e.index++}var eM=r(34985),eP=r(48502);function ek(e,t,r,a){let n=a.length;if(n>r-t)return!1;for(let r=0;r<n;r++)if(e.charCodeAt(t+r)!==a.charCodeAt(r))return!1;return!0}async function eB(e){let t;let{lines:r,variant:a}=e,{data:n,indices:i}=r,o=(0,F.Tokenizer)(n),s=0,l=0;for(let e=0,t=r.count;e<t;e++){let t=i[2*e],r=i[2*e+1];switch(n.charAt(t)){case"A":ek(n,t,r,"ATOM  ")?s++:ek(n,t,r,"ANISOU")&&l++;break;case"H":ek(n,t,r,"HETATM")&&s++}}let u={},c=function(e,t){let r=()=>[],a=()=>F.c.create(e,2*t);return{index:0,group_PDB:a(),id:r(),auth_atom_id:a(),label_alt_id:a(),auth_comp_id:a(),auth_asym_id:a(),auth_seq_id:a(),pdbx_PDB_ins_code:a(),Cartn_x:a(),Cartn_y:a(),Cartn_z:a(),occupancy:a(),B_iso_or_equiv:a(),type_symbol:a(),pdbx_PDB_model_num:r(),label_entity_id:r(),partial_charge:a()}}(n,s),d=function(e,t){let r=()=>new Float32Array(t),a=()=>F.c.create(e,2*t);return{index:0,count:t,id:[],type_symbol:a(),pdbx_label_atom_id:a(),pdbx_label_alt_id:a(),pdbx_label_comp_id:a(),pdbx_label_asym_id:a(),pdbx_label_seq_id:a(),pdbx_PDB_ins_code:a(),"U[1][1]":r(),"U[2][2]":r(),"U[3][3]":r(),"U[1][2]":r(),"U[1][3]":r(),"U[2][3]":r(),pdbx_auth_seq_id:a(),pdbx_auth_comp_id:a(),pdbx_auth_asym_id:a(),pdbx_auth_atom_id:a()}}(n,l),p=new eb.L,f=[],m=[],h=0,g="",b=!1,y=!1,x=new Set;for(let s=0,l=r.count;s<l;s++){let l=i[2*s],S=i[2*s+1];switch(n.charAt(l)){case"A":ek(n,l,S,"ATOM  ")?(h||(g=""+ ++h),eE(c,g,o,l,S,a)):ek(n,l,S,"ANISOU")&&function(e,t,r,a,n){let{data:i}=r;F.Tokenizer.trim(r,a+6,a+11),e.id[e.index]=i.substring(r.tokenStart,r.tokenEnd),F.c.addToken(e.pdbx_auth_atom_id,F.Tokenizer.trim(r,a+12,a+16)),32===i.charCodeAt(a+16)?F.c.add(e.pdbx_label_alt_id,0,0):F.c.add(e.pdbx_label_alt_id,a+16,a+17),F.c.addToken(e.pdbx_auth_comp_id,F.Tokenizer.trim(r,a+17,a+21)),F.c.add(e.pdbx_auth_asym_id,a+21,a+22),F.c.addToken(e.pdbx_auth_seq_id,F.Tokenizer.trim(r,a+22,a+26)),32===i.charCodeAt(a+26)?F.c.add(e.pdbx_PDB_ins_code,0,0):F.c.add(e.pdbx_PDB_ins_code,a+26,a+27),e["U[1][1]"][e.index]=(0,L.qY)(i,a+28,a+35)/1e4,e["U[2][2]"][e.index]=(0,L.qY)(i,a+35,a+42)/1e4,e["U[3][3]"][e.index]=(0,L.qY)(i,a+42,a+49)/1e4,e["U[
73191][2]"][e.index]=(0,L.qY)(i,a+49,a+56)/1e4,e["U[1][3]"][e.index]=(0,L.qY)(i,a+56,a+63)/1e4,e["U[2][3]"][e.index]=(0,L.qY)(i,a+63,a+70)/1e4,n-a>=78?(F.Tokenizer.trim(r,a+76,a+78),r.tokenStart<r.tokenEnd?F.c.addToken(e.type_symbol,r):el(e.type_symbol,i,a+12,a+16)):el(e.type_symbol,i,a+12,a+16),e.index++}(d,0,o,l,S);break;case"C":if(ek(n,l,S,"CRYST1"))f.push(...function(e,t){let r=(e,r)=>(t.substr(e,r)||"").trim(),a={entry_id:eC.Q8.ofString(e),length_a:eC.Q8.ofString(r(6,9)),length_b:eC.Q8.ofString(r(15,9)),length_c:eC.Q8.ofString(r(24,9)),angle_alpha:eC.Q8.ofString(r(33,7)),angle_beta:eC.Q8.ofString(r(40,7)),angle_gamma:eC.Q8.ofString(r(47,7)),Z_PDB:eC.Q8.ofString(r(66,4)),pdbx_unique_axis:eC.Q8.ofString("?")},n={entry_id:eC.Q8.ofString(e),"space_group_name_H-M":eC.Q8.ofString(r(55,11)),Int_Tables_number:eC.Q8.ofString("?"),cell_setting:eC.Q8.ofString("?"),space_group_name_Hall:eC.Q8.ofString("?")};return[eC.wA.ofFields("cell",a),eC.wA.ofFields("symmetry",n)]}(e.id||"?",n.substring(l,S)));else if(ek(n,l,S,"CONECT")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"CONECT");)e++;t?eP.Au&&console.log("only single CONECT block allowed, ignoring others"):t=[s,e],s=e-1}else if(ek(n,l,S,"COMPND")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"COMPND");)e++;p.setCompounds(function(e,t,r){let a;let n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),i={chains:[],description:""},o=[];for(let e=t;e<r;e++){let t;let r=n(e).substring(10,80).trim(),s=r.indexOf(":"),l=r.substring(0,s);l in eA?(a=l,t=r.substring(s+2)):t=r,t=t.replace(/;$/,""),"MOL_ID"===a?(i={chains:[],description:""},o.push(i)):"MOLECULE"===a?(i.description&&(i.description+=" "),i.description+=t):"CHAIN"===a&&Array.prototype.push.apply(i.chains,t.split(/\s*,\s*/))}let s=[];for(let e of o)for(let t of e.chains)s.push({description:e.description,chains:[t]});return s}(r,s,e)),s=e-1}break;case"H":if(ek(n,l,S,"HEADER"))!function(e,t,r,a){let n=e.substring(t,r);a.id_code=n.substring(62,66).trim()||void 0,a.dep_date=n.substring(50,59).trim()||void 0,a.classification=n.substring(10,50).trim()||void 0}(n,l,S,u);else if(ek(n,l,S,"HETATM"))h||(g=""+ ++h),eE(c,g,o,l,S,a);else if(ek(n,l,S,"HELIX")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"HELIX");)e++;f.push(function(e,t,r){let a=[],n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=n(e);a.push({serNum:t.substring(7,10).trim(),helixID:t.substring(11,14).trim(),initResName:t.substring(15,19).trim(),initChainID:t.substring(19,20).trim(),initSeqNum:t.substring(21,25).trim(),initICode:t.substring(25,26).trim(),endResName:t.substring(27,31).trim(),endChainID:t.substring(31,34).trim(),endSeqNum:t.substring(33,37).trim(),endICode:t.substring(37,38).trim(),helixClass:t.substring(38,40).trim(),comment:t.substring(40,70).trim(),length:t.substring(71,76).trim()})}let i=eC.Q8.ofStrings(a.map(e=>e.initChainID)),o=eC.Q8.ofStrings(a.map(e=>e.initResName)),s=eC.Q8.ofStrings(a.map(e=>e.endChainID)),l=eC.Q8.ofStrings(a.map(e=>e.endResName)),u={beg_label_asym_id:i,beg_label_comp_id:o,beg_label_seq_id:eC.Q8.ofUndefined(a.length,R.sg.Schema.int),beg_auth_asym_id:i,beg_auth_comp_id:o,beg_auth_seq_id:eC.Q8.ofStrings(a.map(e=>e.initSeqNum)),conf_type_id:eC.Q8.ofStrings(a.map(e=>eI[e.helixClass]||"helx_p")),details:eC.Q8.ofStrings(a.map(e=>e.comment)),end_label_asym_id:s,end_label_comp_id:l,end_label_seq_id:eC.Q8.ofUndefined(a.length,R.sg.Schema.int),end_auth_asym_id:s,end_auth_comp_id:l,end_auth_seq_id:eC.Q8.ofStrings(a.map(e=>e.endSeqNum)),id:eC.Q8.ofStrings(a.map(e=>e.serNum)),pdbx_beg_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.initICode)),pdbx_end_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.endICode)),pdbx_PDB_helix_class:eC.Q8.ofStrings(a.map(e=>e.helixClass)),pdbx_PDB_helix_length:eC.Q8.ofStrings(a.map(e=>e.length)),pdbx_PDB_helix_id:eC.Q8.ofStrings(a.map(e=>e.helixID))};return eC.wA.ofFields("struct_conf",u)}(r,s,e)),s=e-1}else if(ek(n,l,S,"HETNAM")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"HETNAM");)e++;m.push(...Array.from((function(e,t,r){let a=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),n=new Map;for(let e=t;e<r;e++){let t=a(e),r=t.substring(11,14).trim(),i=t.substring(15).trim();n.has(r)?n.set(r,`${n.get(r)} ${i}`):n.set(r,i)}return n})(r,s,e).entries())),s=e-1}break;case"M":if(ek(n,l,S,"MODEL ")&&(g=""+ ++h),ek(n,l,S,"MTRIX")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"MTRIX");)e++;f.push(...function(e,t,r){let a;let n=[],i=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=i(e),r=t.split(/\s+/),o=parseInt(t[5])-1;0===o&&(a=G.yb.identity(),n.push(a)),G.yb.setValue(a,o,0,parseFloat(r[2])),G.yb.setValue(a,o,1,parseFloat(r[3])),G.yb.setValue(a,o,2,parseFloat(r[4])),G.yb.setValue(a,o,3,parseFloat(r[5]))}if(0===n.length)return[];let o=[],s=1;
7319for(let e of n){let t={id:"ncsop"+s++,code:".",details:"."};for(let r=0;r<3;r++){for(let a=0;a<3;a++)t[`matrix[${r+1}][${a+1}]`]=""+G.yb.getValue(e,r,a);t[`vector[${r+1}]`]=""+G.yb.getValue(e,r,3)}o.push(t)}let l={id:eC.Q8.ofStrings(o.map(e=>e.id)),code:eC.Q8.ofStrings(o.map(e=>e.code)),details:eC.Q8.ofStrings(o.map(e=>e.details))};for(let e=0;e<3;e++){for(let t=0;t<3;t++){let r=`matrix[${e+1}][${t+1}]`;l[r]=eC.Q8.ofStrings(o.map(e=>e[r]))}let t=`vector[${e+1}]`;l[t]=eC.Q8.ofStrings(o.map(e=>e[t]))}return[eC.wA.ofFields("struct_ncs_oper",l)]}(r,s,e)),s=e-1}break;case"O":break;case"R":if(ek(n,l,S,"REMARK 350")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"REMARK 350");)e++;f.push(...function(e,t,r){let a=[],n,i,o,s=1,l=1,u=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=u(e);if("BIOMOLECULE:"===t.substr(11,12)){let r=t.substr(23).trim(),i=`Biomolecule ${r}`;"APPLY THE FOLLOWING TO CHAINS:"!==(t=u(e+1)).substr(11,30)&&(e++,i=t.substr(11).trim()),n=eO(r,i),a.push(n)}else if("BIOMT"===t.substr(13,5)){let e=t.split(/\s+/),r=parseInt(t[18])-1;0===r&&(o=G.yb.identity(),i.operators.push({id:s++,matrix:o})),G.yb.setValue(o,r,0,parseFloat(e[4])),G.yb.setValue(o,r,1,parseFloat(e[5])),G.yb.setValue(o,r,2,parseFloat(e[6])),G.yb.setValue(o,r,3,parseFloat(e[7]))}else if("APPLY THE FOLLOWING TO CHAINS:"===t.substr(11,30)||"                   AND CHAINS:"===t.substr(11,30)){"APPLY"===t.substr(11,5)&&(i={chains:[],operators:[]},n.groups.push(i));let e=t.substr(41,30).split(",");for(let t=0,r=e.length;t<r;++t){let r=e[t].trim();r&&i.chains.push(r)}}else if("APPLYING THE FOLLOWING TO CHAINS:"===t.substr(11,33)){n=eO(`${l}`,`Biomolecule ${l}`),a.push(n),l+=1,i={chains:[],operators:[]},n.groups.push(i);let r=(t=u(++e)).substr(11,69).split(",");for(let e=0,t=r.length;e<t;++e){let t=r[e].trim();t&&i.chains.push(t)}}}if(0===a.length)return[];let c={id:eC.Q8.ofStrings(a.map(e=>e.id)),details:eC.Q8.ofStrings(a.map(e=>e.details))},d=[];for(let e of a)for(let t of e.groups)d.push({assembly_id:e.id,oper_expression:t.operators.map(e=>e.id).join(","),asym_id_list:t.chains.join(",")});let p={assembly_id:eC.Q8.ofStrings(d.map(e=>e.assembly_id)),oper_expression:eC.Q8.ofStrings(d.map(e=>e.oper_expression)),asym_id_list:eC.Q8.ofStrings(d.map(e=>e.asym_id_list))},f=[];for(let e of a)for(let t of e.groups)for(let e of t.operators){let t={id:""+e.id,type:"?",name:"?",symmetry_operation:"?"};for(let r=0;r<3;r++){for(let a=0;a<3;a++)t[`matrix[${r+1}][${a+1}]`]=""+G.yb.getValue(e.matrix,r,a);t[`vector[${r+1}]`]=""+G.yb.getValue(e.matrix,r,3)}f.push(t)}let m={id:eC.Q8.ofStrings(f.map(e=>e.id)),type:eC.Q8.ofStrings(f.map(e=>e.type)),name:eC.Q8.ofStrings(f.map(e=>e.name)),symmetry_operation:eC.Q8.ofStrings(f.map(e=>e.symmetry_operation))};for(let e=0;e<3;e++){for(let t=0;t<3;t++){let r=`matrix[${e+1}][${t+1}]`;m[r]=eC.Q8.ofStrings(f.map(e=>e[r]))}let t=`vector[${e+1}]`;m[t]=eC.Q8.ofStrings(f.map(e=>e[t]))}return[eC.wA.ofFields("pdbx_struct_assembly",c),eC.wA.ofFields("pdbx_struct_assembly_gen",p),eC.wA.ofFields("pdbx_struct_oper_list",m)]}(r,s,e)),s=e-1,b=!0}break;case"S":if(ek(n,l,S,"SHEET")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"SHEET");)e++;f.push(function(e,t,r){let a=[],n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=n(e);a.push({strand:t.substring(7,10).trim(),sheetID:t.substring(11,14).trim(),numStrands:t.substring(14,16).trim(),initResName:t.substring(17,21).trim(),initChainID:t.substring(21,22).trim(),initSeqNum:t.substring(22,26).trim(),initICode:t.substring(26,27).trim(),endResName:t.substring(28,32).trim(),endChainID:t.substring(32,33).trim(),endSeqNum:t.substring(33,37).trim(),endICode:t.substring(37,38).trim(),sense:t.substring(38,40).trim(),curAtom:t.substring(41,45).trim(),curResName:t.substring(45,49).trim(),curChainId:t.substring(49,50).trim(),curResSeq:t.substring(50,54).trim(),curICode:t.substring(54,55).trim(),prevAtom:t.substring(56,60).trim(),prevResName:t.substring(60,64).trim(),prevChainId:t.substring(64,65).trim(),prevResSeq:t.substring(65,69).trim(),prevICode:t.substring(69,70).trim()})}let i=eC.Q8.ofStrings(a.map(e=>e.initChainID)),o=eC.Q8.ofStrings(a.map(e=>e.initResName)),s=eC.Q8.ofStrings(a.map(e=>e.initSeqNum)),l=eC.Q8.ofStrings(a.map(e=>e.endChainID)),u=eC.Q8.ofStrings(a.map(e=>e.endResName)),c=eC.Q8.ofStrings(a.map(e=>e.endSeqNum)),d={beg_label_asym_id:i,beg_label_comp_id:o,beg_label_seq_id:s,beg_auth_asym_id:i,beg_auth_comp_id:o,beg_auth_seq_id:s,end_label_asym_id:l,end_label_comp_id:l,end_label_seq_id:c,end_auth_asym_id:l,end_auth_comp_id:u,end_auth_seq_id:c,id:eC.Q8.ofStrings(a.map(e=>
7319e.strand)),sheet_id:eC.Q8.ofStrings(a.map(e=>e.sheetID)),pdbx_beg_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.initICode)),pdbx_end_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.endICode))};return eC.wA.ofFields("struct_sheet_range",d)}(r,s,e)),s=e-1}else if(ek(n,l,S,"SEQRES")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"SEQRES");)e++;p.setSeqres(function(e,t,r){let a=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),n=new Map;for(let e=t;e<r;e++){let t=a(e),r=t.substring(11,12),i=t.substring(19).trim().split(/\s+/);n.has(r)||n.set(r,[]),n.get(r).push(...i)}return n}(r,s,e)),s=e-1,y=!0}break;case"T":ek(n,l,S,"TER")&&x.add(c.index)}}if(u.id_code){let e={id:eC.Q8.ofString(u.id_code)};f.push(eC.wA.ofFields("entry",e))}if(u.classification){let e={pdbx_keywords:eC.Q8.ofString(u.classification)};f.push(eC.wA.ofFields("struct_keywords",e))}if(u.dep_date){let e={recvd_initial_deposition_date:eC.Q8.ofString(u.dep_date)};f.push(eC.wA.ofFields("pdbx_database_status",e))}let S=R.sg.ofIntTokens(c.auth_seq_id),T=R.sg.ofStringTokens(c.auth_atom_id),C=R.sg.ofStringTokens(c.auth_comp_id),O=new eD(R.sg.ofStringTokens(c.auth_asym_id),c.pdbx_PDB_model_num,x,b),I=new em.Q(S,T);I.setNames(m),p.setNames(m);for(let e=0,t=C.rowCount;e<t;++e){let t=C.value(e),r=(0,ef.getMoleculeType)(I.add(t,e).type,t),a=O.get(e);c.label_entity_id[e]=p.getEntityId(t,r,a)}let A=function(e,t,r){t.clear();let a=eC.Q8.ofStrings(e.pdbx_PDB_model_num),n=eC.Q8.ofTokens(e.auth_asym_id),i=eC.Q8.ofTokens(e.auth_seq_id),o=eC.Q8.ofTokens(e.pdbx_PDB_ins_code),s=eC.Q8.ofTokens(e.auth_atom_id),l=eC.Q8.ofTokens(e.auth_comp_id),u=eC.Q8.ofStrings(e.id),c=r.hasSeqRes;if(!c){for(let e=0,t=u.rowCount;e<t;++e)if(""!==o.str(e)){c=!0;break}}let d=a.str(0),p=n.str(0),f=i.int(0),m=o.str(0),h=c?1:f,g=new Map,b=new Map,y=[],x=[],S=[];for(let e=0,r=u.rowCount;e<r;++e){let r=a.str(e),l=n.str(e),u=i.int(e),T=o.str(e),C=s.str(e);if(r!==d?(g.clear(),b.clear(),d=r,p=l,f=u,m=T,h=c?1:f):p!==l?(b.clear(),p=l,f=u,m=T,h=c?1:f):f!==u?(b.clear(),f!==h||c?h+=1:h=u,f=u,m=T):m!==T&&(b.clear(),m=T,h+=1),y[e]=t.get(e),b.has(C)){let e=b.get(C)+1;b.set(C,e),C=`${C}_${e}`}else b.set(C,0);x[e]=C,c&&(S[e]=h)}let T=R.sg.ofStringArray(y),C=R.sg.ofStringArray(x),O=c?eC.Q8.ofColumn(R.sg.ofIntArray(S)):eC.Q8.ofUndefined(e.index,R.sg.Schema.int);return{auth_asym_id:n,auth_atom_id:s,auth_comp_id:l,auth_seq_id:i,B_iso_or_equiv:eC.Q8.ofTokens(e.B_iso_or_equiv),Cartn_x:eC.Q8.ofTokens(e.Cartn_x),Cartn_y:eC.Q8.ofTokens(e.Cartn_y),Cartn_z:eC.Q8.ofTokens(e.Cartn_z),group_PDB:eC.Q8.ofTokens(e.group_PDB),id:u,label_alt_id:eC.Q8.ofTokens(e.label_alt_id),label_asym_id:eC.Q8.ofColumn(T),label_atom_id:eC.Q8.ofColumn(C),label_comp_id:l,label_seq_id:O,label_entity_id:eC.Q8.ofStrings(e.label_entity_id),occupancy:(0,ew.f7)(e.occupancy)?eC.Q8.ofUndefined(e.index,R.sg.Schema.float):eC.Q8.ofTokens(e.occupancy),type_symbol:eC.Q8.ofTokens(e.type_symbol),pdbx_PDB_ins_code:eC.Q8.ofTokens(e.pdbx_PDB_ins_code),pdbx_PDB_model_num:a,partial_charge:eC.Q8.ofTokens(e.partial_charge)}}(c,O,{hasAssemblies:b,hasSeqRes:y});"pdb"===a&&delete A.partial_charge,t&&f.push(function(e,t,r,a){let n={};for(let e=0,t=a.id.rowCount;e<t;++e)n[a.id.str(e)]=e;let i=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),o=[],s=[],l=[],u=[],c=[],d=[],p=[],f=[],m=[],h=[],g=[],b=[],y=[],x=[],S=[],T=[11,16,21,26],C=1,O=-1,I={},A=!1;for(let e=t;e<r;e++){let t=i(e),r=n[parseInt(t.substr(6,5))];if(void 0!==r){O!==r&&(O=r,I={});for(let e=0;e<4;++e){let i=parseInt(t.substr(T[e],5));if(Number.isNaN(i))continue;let O=n[i];if(void 0===O||r>O)continue;if(void 0!==I[O]){l[I[O]]+=1,A=!0;continue}I[O]=C-1;let w=a.type_symbol.str(r),D=a.type_symbol.str(O);(0,eM.IP)(w)||(0,eM.IP)(D)?(o.push(`metalc${C}`),s.push("metalc")):(o.push(`covale${C}`),s.push("covale")),l.push(1),u.push(a.label_asym_id.str(r)),c.push(a.label_seq_id.int(r)),d.push(a.auth_seq_id.int(r)),p.push(a.label_atom_id.str(r)),f.push(a.label_alt_id.str(r)),m.push(a.pdbx_PDB_ins_code.str(r)),h.push(a.label_asym_id.str(O)),g.push(a.label_seq_id.int(O)),b.push(a.auth_seq_id.int(O)),y.push(a.label_atom_id.str(O)),x.push(a.label_alt_id.str(O)),S.push(a.pdbx_PDB_ins_code.str(O)),C+=1}}}let w={id:eC.Q8.ofStrings(o),conn_type_id:eC.Q8.ofStrings(s),ptnr1_label_asym_id:eC.Q8.ofStrings(u),ptnr1_label_seq_id:eC.Q8.ofNumbers(c),ptnr1_auth_seq_id:eC.Q8.ofNumbers(d),ptnr1_label_atom_id:eC.Q8.ofStrings(p),pdbx_ptnr1_label_alt_id:eC.Q8.ofStrings(f),pdbx_ptnr1_PDB_ins_code:eC.Q8.ofStrings(m),ptnr2_label_asym_id:eC.Q8.ofStrings(h),ptnr2_label_seq_id:eC.Q8.ofNumbers(g),ptnr2_auth_seq_id:eC.Q8.ofNumbers(b),ptnr2_label_atom_id:eC.Q8.ofStrings(y),pdbx_ptnr2_label_alt_id:eC.Q8.ofStrings(x),pdbx_ptnr2_PDB_ins_code:eC.Q8.ofStrings(S)};if(A){let e=["sing","doub","trpl","quad"];w.pdbx_value_order=eC.Q8.ofStrings(l.map(t=>e[t-1]||"sing"))}return eC.wA.ofFields("struct_conn",w)}(r,t[0],t[1],A));let w={entity:eC.wA.ofTable("entity",p.getEntityTable()),chem_comp:eC.wA.ofTable("chem_comp",I.getChemCompTable()),atom_site:eC.wA.ofFields("atom_site",A),atom_site_anisotrop:eC.wA.ofFields("atom_site_anisotrop",function(e){let t=eC.Q8.ofTokens(e.pdbx_auth_seq_id),r=eC.Q8.ofTokens(e.pdbx_auth_comp_id),a=eC.Q8.ofTokens(e.pdbx_auth_asym_id),n=eC.Q8.ofTokens(e.pdbx_auth_atom_id),i={id:eC.Q8.ofStrings(e.id),type_symbol:eC.Q8.ofTokens(e.type_symbol),pdbx_label_atom_id:n,pdbx_label_alt_id:eC.Q8.ofTokens(e.pdbx_label_alt_id),pdbx_label_comp_id:r,pdbx_label_asym_id:a,pdbx_label_seq_id:t,pdbx_PDB_ins_code:eC.Q8.ofTokens(e.pdbx_PDB_ins_code),pdbx_auth_seq_id:t,pdbx_auth_comp_id:r,pdbx_auth_asym_id:a,pdbx_auth_atom_id:n};return i["U[1][1]"]=eC.Q8.ofNumbers(e["U[1][1]"]),i["U[2][2]"]=eC.Q8.ofNumbers(e["U[2][2]"]),i["U[3][3]"]=eC.Q8.ofNumbers(e["U[3][3]"]),i["U[1][2]"]=eC.Q8.ofNumbers(e["U[1][2]"]),i["U[1][3]"]=eC.Q8.ofNumbers(e["U[1][3]"]),i["U[2][3]"]=eC.Q8.ofNumbers(e["U[2][3]"]),i}(d))};for(let e of f)w[e.name]=e;return{header:e.id||a.toUpperCase(),categoryNames:Object.keys(w),categories:w}}var e_=r(27994);(n=b||(b={})).is=function(e){return(null==e?void 0:e.kind)==="pdb"},n.create=function(e){return{kind:"pdb",name:e.id||"",data:e}};var eR=r(1710);(i=y||(y={})).is=function(e){return(null==e?void 0:e.kind)==="psf"},i.fromPsf=function(e){return{kind:"psf",name:e.id,data:e}};var eF=r(30502),eL=r(71649),ez=r(20694),eN=r(67801),eG=r(85764),eU=r(74272),eV=r(89849);!function(e){function t(e,t){let r=ez.Script.is(t)?t:void 0,a=ez.Script.is(t)?ez.Script.toExpression(t):t,n=(0,eV.MY)(a);return{script:r,expression:a,compiled:n,originalStructure:e,currentStructure:e}}function r(e,t){return e.compiled(new eF.QueryContext(t))}e.isUnchanged=function(e,t,r){return e.currentStructure===r&&(ez.Script.is(t)?!!e.script&&ez.Script.areEqual(e.script,t):e.expression===t)},e.create=t,e.run=r,e.createAndRun=function(e,a){let n=t(e,a);return{entry:n,selection:r(n,e)}},e.updateStructure=function(e,t){return e.currentStructure=t,e.compiled(new eF.QueryContext(t))},e.updateStructureObject=function(e,t,r){let a=eF.StructureSelection.unionStru
7319cture(t);e.label=`${r||"Selection"}`,e.description=eF.Structure.elementDescription(a),e.data=a}}(x||(x={}));var ej=r(72762),eH=r(80541),eq=r(97667);function eX(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t),i=F.c.create(e.data,2*t),o=F.c.create(e.data,2*t);for(let s=0;s<t;++s){F.Tokenizer.markLine(e);let{tokenStart:t,position:s}=e;F.Tokenizer.trim(e,t,t+10),F.c.addUnchecked(r,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+10,t+20),F.c.addUnchecked(a,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+20,t+30),F.c.addUnchecked(n,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+31,t+34),F.c.addUnchecked(i,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+36,t+39),F.c.addUnchecked(o,e.tokenStart,e.tokenEnd),e.position=s}return{count:t,x:(0,ew.Lq)(r)(R.sg.Schema.float),y:(0,ew.Lq)(a)(R.sg.Schema.float),z:(0,ew.Lq)(n)(R.sg.Schema.float),type_symbol:(0,ew.Lq)(i)(R.sg.Schema.str),formal_charge:(0,ew.Lq)(o)(R.sg.Schema.int)}}function eW(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t);for(let i=0;i<t;++i){F.Tokenizer.markLine(e);let{tokenStart:t,position:i}=e;F.Tokenizer.trim(e,t,t+3),F.c.addUnchecked(r,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+3,t+6),F.c.addUnchecked(a,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+6,t+9),F.c.addUnchecked(n,e.tokenStart,e.tokenEnd),e.position=i}return{count:t,atomIdxA:(0,ew.Lq)(r)(R.sg.Schema.int),atomIdxB:(0,ew.Lq)(a)(R.sg.Schema.int),order:(0,ew.Lq)(n)(R.sg.Schema.int)}}function eK(e){let t;let r={atomIdx:[],charge:[]};for(;e.position<e.length;){let{position:a}=e;F.Tokenizer.trim(e,a+3,a+6);let n=F.Tokenizer.getTokenString(e);if("END"===n)break;switch(F.Tokenizer.eatLine(e),n){case"CHG":!function(e,t,r){F.Tokenizer.trim(e,t+6,t+9);let a=parseInt(F.Tokenizer.getTokenString(e));for(let n=0;n<a;++n){let a=9+8*n;F.Tokenizer.trim(e,t+a,t+a+4);let i=F.Tokenizer.getTokenString(e);r.atomIdx.push(+i),F.Tokenizer.trim(e,t+a+4,t+a+8);let o=F.Tokenizer.getTokenString(e);r.charge.push(+o)}F.Tokenizer.eatLine(e)}(e,a,r);break;case"APO":t=function(e){let t=e.trim().split(/\s+/g),r=[];for(let e=1;e<t.length;e+=2){let a=+t[e],n=+t[e+1]||0;r.push({atomIdx:a,kind:n})}return r}(F.Tokenizer.getTokenString(e).substring(3))}}return{formalCharges:{atomIdx:R.sg.ofIntArray(r.atomIdx),charge:R.sg.ofIntArray(r.charge)},attachmentPoints:t}}var eQ=r(7164);async function eZ(e,t,r){let{atoms:a,bonds:n,formalCharges:i}=e,o=R.sg.ofConst("MOL",e.atoms.count,R.sg.Schema.str),s=R.sg.ofConst("A",e.atoms.count,R.sg.Schema.str),l=R.sg.asArrayColumn(a.type_symbol),u=R.sg.ofConst(1,a.count,R.sg.Schema.int),c=new Int32Array(e.atoms.count);if(i.atomIdx.rowCount>0)for(let e=0;e<i.atomIdx.rowCount;e++)c[i.atomIdx.value(e)-1]=i.charge.value(e);else for(let t=0;t<e.atoms.count;t++)c[t]=function(e){switch(e){case 7:return -3;case 6:return -2;case 5:return -1;case 0:case 4:return 0;case 3:return 1;case 2:return 2;case 1:return 3;default:return console.error(`Value ${e} is outside the 0-7 range, defaulting to 0.`),0}}(a.formal_charge.value(t));let d=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:s,auth_atom_id:l,auth_comp_id:o,auth_seq_id:u,Cartn_x:R.sg.asArrayColumn(a.x,Float32Array),Cartn_y:R.sg.asArrayColumn(a.y,Float32Array),Cartn_z:R.sg.asArrayColumn(a.z,Float32Array),id:R.sg.range(1,a.count),label_asym_id:s,label_atom_id:l,label_comp_id:o,label_seq_id:u,label_entity_id:R.sg.ofConst("1",a.count,R.sg.Schema.str),occupancy:R.sg.ofConst(1,a.count,R.sg.Schema.float),type_symbol:l,pdbx_PDB_model_num:R.sg.ofConst(1,a.count,R.sg.Schema.int),pdbx_formal_charge:R.sg.ofIntArray(c)},a.count),p=new eb.L;p.setNames([["MOL","Unknown Entity"]]),p.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let f=new em.Q(u,l);f.setNames([["MOL","Unknown Molecule"]]),f.add("MOL",0);let m=(0,ey.p)({entity:p.getEntityTable(),chem_comp:f.getChemCompTable(),atom_site:d}),h=await (0,ex.c)(m,null!=t?t:S.create(e),r);if(h.frameCount>0){let e=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdxA,e=>e-1,Int32Array)),t=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdxB,e=>e-1,Int32Array)),r=R.sg.asArrayColumn(n.order,Int32Array),i=eQ.t.fromData({pairs:{indexA:e,indexB:t,order:r},count:a.count},{maxDistance:1/0});eQ.t.Provider.set(h.representative,i)}return h}(o=S||(S={})).is=function(e){return(null==e?void 0:e.kind)==="mol"},o.create=function(e){return{kind:"mol",name:e.title,data:e}};var eY=r(48930),e$=r(5333),eJ=r(39045);async function e0(e,t,r){var a;let n,i;let o=e.atom_site._rowCount,s=R.sg.ofConst("MOL",o,R.sg.Schema.str),l=R.sg.ofConst("A",o,R.sg.Schema.str),u=R.sg.ofConst(1,o,R.sg.Schema.int),c=function(e){let{cell:t,space_group:r}=e,a=function(e){let t=e.it_number.value(0),r=e["name_h-m_full"].isDefined?e["name_h-m_full"]:e["name_h-m_alt"],a=r.value(0).replace("_"," ");return e.it_number.isDefined?(r.isDefined,t):a}(r),n=eY.EO.create(a,G.AO.create(t.length_a.value(0),t.length_b.value(0),t.length_c.value(0)),G.AO.scale((0,G.AO)(),G.AO.create(t.angle_alpha.value(0),t.angle_beta.value(0),t.angle_gamma.value(0)),Math.PI/180)
7319);return{spacegroup:eY.I5.create(n),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}(e),d=c.spacegroup.cell.fromFractional,{fract_x:p,fract_y:f,fract_z:m}=e.atom_site,h=new Float32Array(o),g=new Float32Array(o),b=new Float32Array(o),y=(0,G.AO)();for(let e=0;e<o;++e)G.AO.set(y,p.value(e),f.value(e),m.value(e)),G.AO.transformMat4(y,y,d),h[e]=y[0],g[e]=y[1],b[e]=y[2];let{type_symbol:x,label:S}=e.atom_site;if(x.isDefined){let e=Array(o),t=new Int8Array(o);for(let r=0;r<o;++r){let a=x.value(r),n=a.length;if("+"===a[n-1]){let i=a.charCodeAt(n-2);n>=2&&i>=49&&i<=57?(e[r]=a.substring(0,n-2),t[r]=i-48):(e[r]=a.substring(0,n-1),t[r]=1)}else if(n>=2&&"+"===a[n-2])e[r]=a.substring(0,n-2),t[r]=a.charCodeAt(n-1)-48;else if("-"===a[n-1]){let i=a.charCodeAt(n-2);n>=2&&i>=48&&i<=57?(e[r]=a.substring(0,n-2),t[r]=-(i-48)):(e[r]=a.substring(0,n-1),t[r]=-1)}else n>=2&&"-"===a[n-2]?(e[r]=a.substring(0,n-2),t[r]=-(a.charCodeAt(n-1)-48)):(e[r]=a,t[r]=0)}n=R.sg.ofStringArray(e),i=R.sg.ofIntArray(t)}else{let e=Array(o);for(let t=0;t<o;++t)e[t]=ep(S.value(t),"");n=R.sg.ofStringArray(e),i=R.sg.Undefined(o,R.sg.Schema.int)}let T=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:l,auth_atom_id:S,auth_comp_id:s,auth_seq_id:u,Cartn_x:R.sg.ofFloatArray(h),Cartn_y:R.sg.ofFloatArray(g),Cartn_z:R.sg.ofFloatArray(b),id:R.sg.range(0,o-1),label_asym_id:l,label_atom_id:S,label_comp_id:s,label_seq_id:u,label_entity_id:R.sg.ofConst("1",o,R.sg.Schema.str),occupancy:e.atom_site.occupancy.isDefined?e.atom_site.occupancy:R.sg.ofConst(1,o,R.sg.Schema.float),type_symbol:n,pdbx_formal_charge:i,pdbx_PDB_model_num:R.sg.ofConst(1,o,R.sg.Schema.int),B_iso_or_equiv:e.atom_site.u_iso_or_equiv},o),C=e.chemical.name_common.value(0)||e.chemical.name_systematic.value(0)||e.chemical_formula.sum.value(0),O=new eb.L;O.setNames([["MOL",C||"Unknown Entity"]]),O.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let I=new em.Q(u,e.atom_site.type_symbol);I.setNames([["MOL",C||"Unknown Molecule"]]),I.add("MOL",0);let A=(0,ey.p)({entity:O.getEntityTable(),chem_comp:I.getChemCompTable(),atom_site:T}),w=await (0,ex.c)(A,t,r);if(w.frameCount>0){let r=w.representative;e$.I.Provider.set(r,c);let n=e.geom_bond._rowCount;if(n>0){let i={},{label:s}=e.atom_site;for(let e=0,t=s.rowCount;e<t;++e)i[s.value(e)]=e;let l=null===(a=t.data.frame.categories.ccdc_geom_bond_type)||void 0===a?void 0:a.getField(""),u=[],c=[],d=[],p=[],f=[],m=new Set,h=0,{atom_site_label_1:g,atom_site_label_2:b,valence:y,distance:x}=e.geom_bond;for(let e=0;e<n;++e){let t=i[g.value(e)],r=i[b.value(e)],a=t<r?(0,q.FY)(t,r):(0,q.FY)(r,t);if(!m.has(a)){if(m.add(a),u[h]=t,c[h]=r,p[h]=x.value(e)||-1,l){let t=l.str(e);"D"===t?(d[h]=2,f[h]=ef.BondType.Flag.Covalent):"A"===t?(d[h]=1,f[h]=ef.BondType.Flag.Covalent|ef.BondType.Flag.Aromatic):(d[h]=1,f[h]=ef.BondType.Flag.Covalent)}else f[h]=ef.BondType.Flag.Covalent,d[h]=y.isDefined?y.value(e):1;h+=1}}eQ.t.Provider.set(r,eQ.t.fromData({pairs:{indexA:R.sg.ofIntArray(u),indexB:R.sg.ofIntArray(c),order:R.sg.ofIntArray(d),distance:R.sg.ofFloatArray(p),flag:R.sg.ofIntArray(f)},count:o}))}}return w}async function e1(e,t){let{atoms:r}=e,a=R.sg.ofConst("MOL",e.atoms.count,R.sg.Schema.str),n=R.sg.ofConst("A",e.atoms.count,R.sg.Schema.str),i=R.sg.ofArray({array:R.sg.mapToArray(r.number,e=>(0,ef.getElementFromAtomicNumber)(e)),schema:R.sg.Schema.Aliased(R.sg.Schema.str)}),o=R.sg.ofConst(1,r.count,R.sg.Schema.int),s=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:n,auth_atom_id:i,auth_comp_id:a,auth_seq_id:o,Cartn_x:R.sg.asArrayColumn(r.x,Float32Array),Cartn_y:R.sg.asArrayColumn(r.y,Float32Array),Cartn_z:R.sg.asArrayColumn(r.z,Float32Array),id:R.sg.range(0,r.count-1),label_asym_id:n,label_atom_id:i,label_comp_id:a,label_seq_id:o,label_entity_id:R.sg.ofConst("1",r.count,R.sg.Schema.str),occupancy:R.sg.ofConst(1,r.count,R.sg.Schema.float),type_symbol:i,pdbx_PDB_model_num:R.sg.ofConst(1,r.count,R.sg.Schema.int)},r.count),l=new eb.L;l.setNames([["MOL","Unknown Entity"]]),l.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let u=new em.Q(o,i);u.setNames([["MOL","Unknown Molecule"]]),u.add("MOL",0);let c=(0,ey.p)({entity:l.getEntityTable(),chem_comp:u.getChemCompTable(),atom_site:s});return await (0,ex.c)(c,C.create(e),t)}eJ.T.Provider.formatRegistry.add("cifCore",function(e){if(!T.is(e.sourceData))return;let{atom_site:t,atom_site_aniso:r}=e.sourceData.data.db;
7319return{data:R.iA.ofPartialColumns(eJ.T.Schema,{U:r.u},r._rowCount),elementToAnsiotrop:eJ.T.getElementToAnsiotropFromLabel(t.label,r.label)}},function(e){return!!T.is(e.sourceData)&&e.sourceData.data.db.atom_site_aniso.u.isDefined}),(s=T||(T={})).is=function(e){return(null==e?void 0:e.kind)==="cifCore"},s.fromFrame=function(e,t){return t||(t=eC.pe.schema.cifCore(e)),{kind:"cifCore",name:t.database_code.depnum_ccdc_archive.value(0)||t.database_code.depnum_ccdc_fiz.value(0)||t.database_code.icsd.value(0)||t.database_code.mdf.value(0)||t.database_code.nbs.value(0)||t.database_code.csd.value(0)||t.database_code.cod.value(0)||t._name,data:{db:t,frame:e}}},(l=C||(C={})).is=function(e){return(null==e?void 0:e.kind)==="cube"},l.create=function(e){return{kind:"cube",name:e.header.comment1,data:e}};let{skipWhitespace:e2,eatValue:e3,markLine:e4,getTokenString:e5,skipStrictWhitespace:e6}=F.Tokenizer,e8=/\s+/g;function e7(e,t,r){let a=0;for(let n=0;n<e;n++){let e=0;for(e2(r);e6(r),r.tokenStart=r.position,e3(r),r.tokenStart!==r.tokenEnd;){let a=t[e++];a&&F.c.addUnchecked(a,r.tokenStart,r.tokenEnd)}e>a&&(a=e);for(let r=e;r<t.length;r++)F.c.addUnchecked(t[r],0,0)}return a+1}async function e9(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>ATOM"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_atoms),o=F.c.create(t.data,2*r.num_atoms),s=F.c.create(t.data,2*r.num_atoms),l=F.c.create(t.data,2*r.num_atoms),u=F.c.create(t.data,2*r.num_atoms),c=F.c.create(t.data,2*r.num_atoms),d=F.c.create(t.data,2*r.num_atoms),p=F.c.create(t.data,2*r.num_atoms),f=F.c.create(t.data,2*r.num_atoms),m=F.c.create(t.data,2*r.num_atoms),h=R.sg.Undefined(r.num_atoms,R.sg.Schema.float),g=R.sg.Undefined(r.num_atoms,R.sg.Schema.int),b=R.sg.Undefined(r.num_atoms,R.sg.Schema.str);t.position=a,t.lineNumber=n;let y=0,x=[i,o,s,l,u,c,d,p,f,m],{length:S}=t,T=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_atoms-T,e);return y=Math.max(y,e7(a,x,t)),T+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:S})),{count:r.num_atoms,atom_id:(0,ew.Lq)(i)(R.sg.Schema.int),atom_name:(0,ew.Lq)(o)(R.sg.Schema.str),x:(0,ew.Lq)(s)(R.sg.Schema.float),y:(0,ew.Lq)(l)(R.sg.Schema.float),z:(0,ew.Lq)(u)(R.sg.Schema.float),atom_type:y>5?(0,ew.Lq)(c)(R.sg.Schema.str):b,subst_id:y>6?(0,ew.Lq)(d)(R.sg.Schema.int):g,subst_name:y>7?(0,ew.Lq)(p)(R.sg.Schema.str):b,charge:y>8?(0,ew.Lq)(f)(R.sg.Schema.float):h,status_bits:y>9?(0,ew.Lq)(m)(R.sg.Schema.str):b}}async function te(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>BOND"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_bonds),o=F.c.create(t.data,2*r.num_bonds),s=F.c.create(t.data,2*r.num_bonds),l=F.c.create(t.data,2*r.num_bonds),u=F.c.create(t.data,2*r.num_bonds),c=R.sg.Undefined(r.num_bonds,R.sg.Schema.str);t.position=a,t.lineNumber=n;let d=0,p=[i,o,s,l,u],{length:f}=t,m=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_bonds-m,e);return d=Math.max(d,e7(a,p,t)),m+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:f})),{count:r.num_bonds,bond_id:(0,ew.Lq)(i)(R.sg.Schema.int),origin_atom_id:(0,ew.Lq)(o)(R.sg.Schema.int),target_atom_id:(0,ew.Lq)(s)(R.sg.Schema.int),bond_type:(0,ew.Lq)(l)(R.sg.Schema.str),status_bits:d>4?(0,ew.Lq)(u)(R.sg.Schema.str):c}}async function tt(e){let{tokenizer:t,molecule:r}=e;if(0===r.num_subst)return;for(;"@<TRIPOS>SUBSTRUCTURE"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_subst),o=F.c.create(t.data,2*r.num_subst),s=F.c.create(t.data,2*r.num_subst),l=F.c.create(t.data,2*r.num_subst),u=F.c.create(t.data,2*r.num_subst),c=F.c.create(t.data,2*r.num_subst),d=F.c.create(t.data,2*r.num_subst),p=F.c.create(t.data,2*r.num_subst),f=F.c.create(t.data,2*r.num_subst),m=R.sg.Undefined(r.num_subst,R.sg.Schema.int),h=R.sg.Undefined(r.num_subst,R.sg.Schema.str);t.position=a,t.lineNumber=n;let g=0,b=[i,o,s,l,u,c,d,p,f],{length:y}=t,x=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_subst-x,e);return g=Math.max(g,e7(a,b,t)),x+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:y})),{count:r.num_subst,subst_id:(0,ew.Lq)(i)(R.sg.Schema.int),subst_name:(0,ew.Lq)(o)(R.sg.Schema.str),root_atom:(0,ew.Lq)(s)(R.sg.Schema.int),subst_type:g>3?(0,ew.Lq)(l)(R.sg.Schema.str):h,dict_type:g>4?(0,ew.Lq)(u)(R.sg.Schema.str):h,chain:g>5?(0,ew.Lq)(c)(R.sg.Schema.str):h,sub_type:g>6?(0,ew.Lq)(d)(R.sg.Schema.str):h,inter_bonds:g>7?(0,ew.Lq)(p)(R.sg.Schema.int):m,status_bits:g>8?(0,ew.Lq)(f)(R.sg.Schema.str):h}}async function tr(e,t,r){let a=(0,F.Tokenizer)(t);e.update({message:"Parsing...",current:0,max:t.length});let n=[];for(;a.position<t.length;){let t={tokenizer:a,molecule:{mol_name:"",num_atoms:0,num_bonds:0,num_subst:0,num_feat:0,num_sets:0,mol_type:"",charge_type:"",status_bits:"",mol_comment:""},runtimeCtx:e};!function(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>MOLECULE"!==e5(t)&&t.position<t.data.length;)e4(t);e4(t),r.mol_name=e5(t),e4(t);let a=e5(t).trim().split(e8);r.num_atoms=parseInt(a[0]),r.num_bonds=parseInt(a[1]),r.num_subst=parseInt(a[2]),r.num_feat=parseInt(a[3]),r.num_sets=parseInt(a[4]),e4(t);let n=e5(t);if(n.startsWith("@<TRIPOS>"))return;r.mol_type=n,e4(t);let i=e5(t);if(i.startsWith("@<TRIPOS>"))return;r.charge_type=i,e4(t);let o=e5(t);if(o.startsWith("@<TRIPOS>"))return;r.status_bits=o,e4(t);let s=e5(t);s.startsWith("@<TRIPOS>")||(r.mol_comment=s)}(t);let r=await e9(t),i=await te(t),o=await tt(t),s=function(e){let{tokenizer:t}=e;for(;t.position<t.data.length;){let e=e5(t);if("@<TRIPOS>MOLECULE"===e)return;if("@<TRIPOS>CRYSIN"===e)break;e4(t)}if(t.position>=t.data.length)return;e4(t);let r=e5(t).trim().split(e8);return{a:parseFloat(r[0]),b:parseFloat(r[1]),c:parseFloat(r[2]),alpha:parseFloat(r[3]),beta:parseFloat(r[4]),gamma:parseFloat(r[5]),spaceGroup:parseInt(r[6],10),setting:parseInt(r[7],10)}}(t);for(n.push({molecule:t.molecule,atoms:r,bonds:i,substructures:o,crysin:s}),e2(a);"@<TRIPOS>MOLECULE"!==e5(a)&&a.position<a.data.length;)e4(a)}return k.X.success({name:r,structures:n})}async function ta(e,t){let r=[];for(let a=0,n=e.structures.length;a<n;++a){let n;let{molecule:i,atoms:o,bonds:s,substructures:l,crysin:u}=e.structures[a],c=Array(o.count),d=Array(o.count),p=Array(o.count),f=Array(o.count),m=Array(o.count),h=!1;for(let e=0;e<o.count;++e)if(o.atom_type.value(e).includes(".")){h=!0;break}let g=new Map;if(l)for(let e=0;e<l.count;++e){let t=l.root_atom.value(e),r=l.chain.value(e),a=l.sub_type.value(e);g.set(t,{chain:r,subType:a})}let b=new eb.L,y=new em.Q(o.subst_id,o.atom_name),x="",S=0,T="",C=ef.MoleculeType.Unknown,I=-1;for(let e=0;e<o.count;++e){let t=o.subst_name.value(e),r=o.subst_id.value(e),a=t.replace(/\d+$/,"")||"MOL",i=t.match(/(\d+)$/);m[e]=i?parseInt(i[1]):r;let s=g.get(o.atom_id.value(e));if(s&&(n=s),n&&n.subType&&"UNK"!==n.subType&&(a=n.subType),p[e]=h?o.atom_type.value(e).split(".")[0].toUpperCase():ep(o.atom_name.value(e),a),f[e]=a,r!==I){let t=(0,ef.getMoleculeType)(y.add(a,e).type,a);(null==n?void 0:n.chain)?T=n.chain:(t!==C||r!==I+1)&&(T=ev(S),S+=1),x=b.getEntityId(a,t,T),I=r,C=t}c[e]=x,d[e]=T}let A=R.sg.ofStringArray(p),w=R.sg.ofStringArray(f),D=R.sg.ofStringArray(c),E=R.sg.ofStringArray(d),M=R.sg.asArrayColumn(o.atom_name),P=R.sg.ofIntArray(m),k=R.iA.ofParti
7319alColumns(ey.d.atom_site,{auth_asym_id:E,auth_atom_id:M,auth_comp_id:w,auth_seq_id:P,Cartn_x:R.sg.asArrayColumn(o.x,Float32Array),Cartn_y:R.sg.asArrayColumn(o.y,Float32Array),Cartn_z:R.sg.asArrayColumn(o.z,Float32Array),id:R.sg.asArrayColumn(o.atom_id),label_asym_id:E,label_atom_id:M,label_comp_id:w,label_seq_id:o.subst_id,label_entity_id:D,occupancy:R.sg.ofConst(1,o.count,R.sg.Schema.float),type_symbol:A,pdbx_PDB_model_num:R.sg.ofConst(a,o.count,R.sg.Schema.int)},o.count),B=(0,ey.p)({entity:b.getEntityTable(),chem_comp:y.getChemCompTable(),atom_site:k}),_=await (0,ex.c)(B,O.create(e),t);if(_.frameCount>0){let e=R.sg.ofIntArray(R.sg.mapToArray(s.origin_atom_id,e=>e-1,Int32Array)),t=R.sg.ofIntArray(R.sg.mapToArray(s.target_atom_id,e=>e-1,Int32Array)),a=s.bond_id,n=R.sg.ofIntArray(R.sg.mapToArray(s.bond_type,e=>{switch(e){case"ar":case"am":case"un":return 1;case"du":case"nc":return 0;default:return parseInt(e)}},Int8Array)),l=R.sg.ofIntArray(R.sg.mapToArray(s.bond_type,e=>{switch(e){case"ar":case"am":return ef.BondType.Flag.Aromatic|ef.BondType.Flag.Covalent;case"du":case"nc":return ef.BondType.Flag.None;default:return ef.BondType.Flag.Covalent}},Int8Array)),c=eQ.t.fromData({pairs:{key:a,indexA:e,indexB:t,order:n,flag:l},count:o.count},{maxDistance:u?-1:1/0}),d=_.representative;if(eQ.t.Provider.set(d,c),e_.o.Provider.set(d,{data:o.charge,type:i.charge_type}),u){let e=function(e){if(1!==e.setting)return;let t=eY.EO.create(e.spaceGroup,G.AO.create(e.a,e.b,e.c),G.AO.scale((0,G.AO)(),G.AO.create(e.alpha,e.beta,e.gamma),Math.PI/180));return{spacegroup:eY.I5.create(t),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}(u);e&&e$.I.Provider.set(d,e)}r.push(d)}}return new eF.ArrayTrajectory(r)}(u=O||(O={})).is=function(e){return(null==e?void 0:e.kind)==="mol2"},u.create=function(e){return{kind:"mol2",name:e.name,data:e}};let tn=new Uint32Array([0,0,0,0,0,0,0,0,0,8,10,12,16,20,25,32,40,50,64,80,101,128,161,203,256,322,406,512,645,812,1024,1290,1625,2048,2580,3250,4096,5060,6501,8192,10321,13003,16384,20642,26007,32768,41285,52015,65536,82570,104031,131072,165140,208063,262144,330280,416127,524287,660561,832255,1048576,1321122,1664510,2097152,2642245,3329021,4194304,5284491,6658042,8388607,10568983,13316085,16777216]);async function ti(e,t){let r=new DataView(t.buffer,t.byteOffset),a={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},n=a.frames,i=a.boxes,o=a.times,s=[0,0,0,0,0,0],l=[0,0,0],u=[0,0,0],c=[0,0,0],d=[.1,.1,.1],p=[.1,.1,.1],f=0,m=I.buf;for(;;){let a;let h=r.getInt32(f+4);f+=12,o.push(r.getFloat32(f)),f+=4;let g=new Float32Array(9);for(let e=0;e<9;++e)g[e]=10*r.getFloat32(f),f+=4;if(i.push(g),h<=9){a={count:h,x:new Float32Array(h),y:new Float32Array(h),z:new Float32Array(h)},f+=4;for(let e=0;e<h;++e)a.x[e]=r.getFloat32(f),a.y[e]=r.getFloat32(f+4),a.z[e]=r.getFloat32(f+8),f+=12}else{let e;m[0]=m[1]=m[2]=0,l[0]=l[1]=l[2]=0,c[0]=c[1]=c[2]=0,u[0]=u[1]=u[2]=0,d[0]=d[1]=d[2]=0,p[0]=p[1]=p[2]=0,a={count:h,x:new Float32Array(h),y:new Float32Array(h),z:new Float32Array(h)};let n=0,i=r.getInt32(f);f+=4;let o=r.getFloat32(f);f+=4,s[0]=r.getInt32(f),s[1]=r.getInt32(f+4),s[2]=r.getInt32(f+8),s[3]=r.getInt32(f+12),s[4]=r.getInt32(f+16),s[5]=r.getInt32(f+20),l[0]=s[3]-s[0]+1,l[1]=s[4]-s[1]+1,l[2]=s[5]-s[2]+1,f+=24,(l[0]|l[1]|l[2])>16777215?(u[0]=I.sizeOfInt(l[0]),u[1]=I.sizeOfInt(l[1]),u[2]=I.sizeOfInt(l[2]),e=0):e=I.sizeOfInts(3,l);let g=r.getInt32(f);f+=4;let b=g-1,y=tn[b=9>b?9:b]/2|0,x=tn[g]/2|0;c[0]=c[1]=c[2]=tn[g];let S=4*Math.ceil(r.getInt32(f)/4);f+=4;let T=1/o,C=0,O=0;for(d[0]=d[1]=d[2]=0;O<i;){0===e?(d[0]=I.decodeBits(t,f,u[0]),d[1]=I.decodeBits(t,f,u[1]),d[2]=I.decodeBits(t,f,u[2])):I.decodeInts(t,f,e,l,d),O++,d[0]+=s[0],d[1]+=s[1],d[2]+=s[2],p[0]=d[0],p[1]=d[1],p[2]=d[2];let r=I.decodeBits(t,f,1),i=0;if(1===r&&(i=(C=I.decodeBits(t,f,5))%3,C-=i,i--),C>0){d[0]=d[1]=d[2]=0;for(let e=0;e<C;e+=3){if(I.decodeInts(t,f,g,c,d),O++,d[0]+=p[0]-x,d[1]+=p[1]-x,d[2]+=p[2]-x,0===e){let e=d[0];d[0]=p[0],p[0]=e,e=d[1],d[1]=p[1],p[1]=e,e=d[2],d[2]=p[2],p[2]=e,a.x[n]=p[0]*T,a.y[n]=p[1]*T,a.z[n]=p[2]*T,n++}else p[0]=d[0],p[1]=d[1],p[2]=d[2];
7319a.x[n]=d[0]*T,a.y[n]=d[1]*T,a.z[n]=d[2]*T,n++}}else a.x[n]=d[0]*T,a.y[n]=d[1]*T,a.z[n]=d[2]*T,n++;g+=i,i<0?(x=y,y=g>9?tn[g-1]/2|0:0):i>0&&(y=x,x=tn[g]/2|0),c[0]=c[1]=c[2]=tn[g],(0===c[0]||0===c[1]||0===c[2])&&function(){throw Error("(xdrfile error) Undefined error.")}()}f+=S}for(let e=0;e<h;e++)a.x[e]*=10,a.y[e]*=10,a.z[e]*=10;if(n.push(a),e.shouldUpdate&&await e.update({current:f,max:t.length}),f>=t.length)break}return o.length>=1&&(a.timeOffset=o[0]),o.length>=2&&(a.deltaTime=o[1]-o[0]),a}!function(e){e.sizeOfInt=function(e){let t=1,r=0;for(;e>=t&&r<32;)r++,t<<=1;return r};let t=new Uint8Array(32);e.sizeOfInts=function(e,r){let a=1,n=0;t[0]=1;for(let n=0;n<e;n++){let e;let i=0;for(e=0;e<a;e++)i+=t[e]*r[n],t[e]=255&i,i>>=8;for(;0!==i;)t[e++]=255&i,i>>=8;a=e}let i=1;for(a--;t[a]>=i;)n++,i*=2;return n+8*a};let r=new ArrayBuffer(24);e.buf=new Int32Array(r);let a=new Uint32Array(r);function n(t,r,n){let i=n,o=(1<<i)-1,s=a[1],l=a[2],u=e.buf[0],c=0;for(;i>=8;)c|=(l=l<<8|t[r+u++])>>s<<i-8,i-=8;return i>0&&(s<i&&(s+=8,l=l<<8|t[r+u++]),s-=i,c|=l>>s&(1<<i)-1),c&=o,e.buf[0]=u,e.buf[1]=s,e.buf[2]=l,c}e.decodeBits=n;let i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];e.decodeInts=function(t,r,o,s,l){let u=o,c=0;for(i[0]=0,i[1]=0,i[2]=0,i[3]=0;u>8;)i[c++]=function(t,r){let n=a[2],i=e.buf[0];return n=n<<8|t[r+i],e.buf[0]=i+1,e.buf[2]=n,n>>a[1]&255}(t,r),u-=8;u>0&&(i[c++]=n(t,r,u));for(let e=2;e>0;e--){let t=0,r=s[e];for(let e=c-1;e>=0;e--){let a=(t=t<<8|i[e])/r|0;i[e]=a,t-=a*r}l[e]=t}l[0]=i[0]|i[1]<<8|i[2]<<16|i[3]<<24}}(I||(I={})),(c=A||(A={})).is=function(e){return(null==e?void 0:e.kind)==="xyz"},c.create=function(e){return{kind:"xyz",name:"xyz",data:e}};let to={lj:{mass:"unitless",distance:"unitless",time:"unitless",energy:"unitless",velocity:"unitless",force:"unitless",torque:"unitless",temperature:"unitless",pressure:"unitless",viscosity:"unitless",charge:"unitless",density:"unitless",scale:1},real:{mass:"grams/mole",distance:"Angstroms",time:"femtoseconds",energy:"Kcal/mol",velocity:"Angstroms/femtosecond",force:"Kcal/mol-Angstrom",torque:"Kcal/mol",temperature:"Kelvin",pressure:"atmospheres",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},metal:{mass:"grams/mole",distance:"Angstroms",time:"picoseconds",energy:"eV",velocity:"Angstroms/picosecond",force:"eV/Angstrom",torque:"eV",temperature:"Kelvin",pressure:"bars",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},si:{mass:"kilograms",distance:"meters",time:"seconds",energy:"Joules",velocity:"meters/second",force:"Newtons",torque:"Newton-meters",temperature:"Kelvin",pressure:"Pascals",viscosity:"Pascal*second",charge:"Coulombs",dipole:"Coulombs*meters",electricField:"volts/meter",density:"kg/m^3",scale:1},cgs:{mass:"grams",distance:"centimeters",time:"seconds",energy:"ergs",velocity:"centimeters/second",force:"dynes",torque:"dyne-centimeters",temperature:"Kelvin",pressure:"dyne/cm^2",viscosity:"Poise",charge:"statcoulombs",dipole:"statcoul-cm",electricField:"statvolt/cm",density:"g/cm^3",scale:1},electron:{mass:"atomic mass units",distance:"Bohr",time:"femtoseconds",energy:"Hartrees",velocity:"Bohr/atomic time units",force:"Hartrees/Bohr",temperature:"Kelvin",pressure:"Pascals",charge:"multiple of electron charge",dipole:"Debye",electricField:"volts/cm",density:"unitless",torque:"",viscosity:"",scale:.529177},micro:{mass:"picograms",distance:"micrometers",time:"microseconds",energy:"picogram-micrometer^2/microsecond^2",velocity:"micrometers/microsecond",force:"picogram-micrometer/microsecond^2",torque:"picogram-micrometer^2/microsecond^2",temperature:"Kelvin",pressure:"picogram/(micrometer-microsecond^2)",viscosity:"picogram/(micrometer-microsecond)",charge:"picocoulombs",dipole:"picocoulomb-micrometer",electricField:"volt/micrometer",density:"pg/μm^3",scale:1},nano:{mass:"attograms",distance:"nanometers",time:"nanoseconds",energy:"attogram-nanometer^2/nanosecond^2",velocity:"nanometers/nanosecond",force:"attogram-nanometer/nanosecond^2",torque:"attogram-nanometer^2/nanosecond^2",temperature:"Kelvin",pressure:"attogram/(nanometer-nanosecond^2)",viscosity:"attogram/(nanometer-nanosecond)",charge:"multiple of electron charge",di
7319pole:"charge-nanometer",electricField:"volt/nanometer",density:"ag/nm^3",scale:10}},ts=["real","metal","si","cgs","electron","micro","nano","lj"],{readLine:tl,skipWhitespace:tu,eatValue:tc,eatLine:td,markStart:tp}=F.Tokenizer,tf=/\s+/;async function tm(e,t,r){let{tokenizer:a}=e,n=F.c.create(a.data,2*t),i=F.c.create(a.data,2*t),o=F.c.create(a.data,2*t),s=F.c.create(a.data,2*t),l=F.c.create(a.data,2*t),u=F.c.create(a.data,2*t),c=F.c.create(a.data,2*t),d={full:[n,i,o,s,l,u,c],atomic:[n,o,l,u,c],bond:[n,i,o,l,u,c]},p=d[r].length,{position:f}=a;tl(a).trim(),a.position=f;let{length:m}=a,h=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let n=Math.min(t-h,e);for(let e=0;e<n;++e){for(let e=0;e<p;++e){tu(a),tp(a),tc(a);let t=d[r][e];t&&F.c.addUnchecked(t,a.tokenStart,a.tokenEnd)}td(a),tp(a)}return h+=n,n},e=>e.update({message:"Parsing...",current:a.position,max:m})),{count:t,atomId:(0,ew.Lq)(n)(R.sg.Schema.int),moleculeId:(0,ew.Lq)(i)(R.sg.Schema.int),atomType:(0,ew.Lq)(o)(R.sg.Schema.int),charge:(0,ew.Lq)(s)(R.sg.Schema.float),x:(0,ew.Lq)(l)(R.sg.Schema.float),y:(0,ew.Lq)(u)(R.sg.Schema.float),z:(0,ew.Lq)(c)(R.sg.Schema.float)}}async function th(e,t){let{tokenizer:r}=e,a=F.c.create(r.data,2*t),n=F.c.create(r.data,2*t),i=F.c.create(r.data,2*t),o=F.c.create(r.data,2*t),{length:s}=r,l=0;return await (0,B.rV)(e.runtimeCtx,10,void 0,e=>{let s=Math.min(t-l,e);for(let e=0;e<s;++e)for(let e=0;e<4;++e)switch(tu(r),tp(r),tc(r),e){case 0:F.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:F.c.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 2:F.c.addUnchecked(i,r.tokenStart,r.tokenEnd);break;case 3:F.c.addUnchecked(o,r.tokenStart,r.tokenEnd)}return l+=s,s},e=>e.update({message:"Parsing...",current:r.position,max:s})),{count:t,bondId:(0,ew.Lq)(a)(R.sg.Schema.int),bondType:(0,ew.Lq)(n)(R.sg.Schema.int),atomIdA:(0,ew.Lq)(i)(R.sg.Schema.int),atomIdB:(0,ew.Lq)(o)(R.sg.Schema.int)}}let tg=["full","atomic","bond"];async function tv(e,t){let r,a;let n=(0,F.Tokenizer)(e),i={tokenizer:n,runtimeCtx:t},o=0,s=0,l="full";for(;n.tokenEnd<n.length;){let e=tl(i.tokenizer).trim();if(e.includes("atoms"))o=parseInt(e.split(tf)[0]);else if(e.includes("bonds"))s=parseInt(e.split(tf)[0]);else if(e.includes("Masses"));else if(e.includes("Atoms")){let t=e.split("#");if(t.length>1){let e=t[1].trim();tg.includes(e)?l=e:console.warn(`Unknown atom style: ${e}`)}r=await tm(i,o,l)}else e.includes("Bonds")&&(a=await th(i,s))}if(void 0===r)return k.X.error("no atoms data");void 0===a&&(a={count:0,bondId:R.sg.ofIntArray([]),bondType:R.sg.ofIntArray([]),atomIdA:R.sg.ofIntArray([]),atomIdB:R.sg.ofIntArray([])});let u={atoms:r,bonds:a};return k.X.success(u)}async function tb(e,t,r="real"){let{atoms:a,bonds:n}=e,i=[],o=a.count,s=to[r].scale,l=Array(o),u=new Int32Array(o),c=new Float32Array(o),d=new Float32Array(o),p=new Float32Array(o),f=new Int32Array(o),m=0;for(let e=0;e<o;e++)l[m]=a.atomType.value(e).toString(),c[m]=a.x.value(e)*s,d[m]=a.y.value(e)*s,p[m]=a.z.value(e)*s,u[m]=a.atomId.value(e)-1,f[m]=0,m++;let h=R.sg.ofConst("MOL",o,R.sg.Schema.str),g=R.sg.ofLambda({value:e=>a.moleculeId.value(e).toString(),rowCount:o,schema:R.sg.Schema.str}),b=R.sg.ofConst(1,o,R.sg.Schema.int),y=R.sg.ofStringArray(l),x=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:g,auth_atom_id:y,auth_comp_id:h,auth_seq_id:b,Cartn_x:R.sg.ofFloatArray(c),Cartn_y:R.sg.ofFloatArray(d),Cartn_z:R.sg.ofFloatArray(p),id:R.sg.ofIntArray(u),label_asym_id:g,label_atom_id:y,label_comp_id:h,label_seq_id:b,label_entity_id:R.sg.ofConst("1",o,R.sg.Schema.str),occupancy:R.sg.ofConst(1,o,R.sg.Schema.float),type_symbol:y,pdbx_PDB_model_num:R.sg.ofIntArray(f)},o),S=new eb.L;S.setNames([["MOL","Unknown Entity"]]),S.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let T=new em.Q(b,y);T.setNames([["MOL","Unknown Molecule"]]),T.add("MOL",0);let C=(0,ey.p)({entity:S.getEntityTable(),chem_comp:T.getChemCompTable(),atom_site:x}),O=await (0,ex.c)(C,w.create(e),t);if(O.frameCount>0){let e=O.representative;if(0!==n.count){let t=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdA,e=>
7319e-1,Int32Array)),r=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdB,e=>e-1,Int32Array)),i=n.bondId,o=R.sg.ofConst(1,n.count,R.sg.Schema.int),s=R.sg.ofConst(ef.BondType.Flag.Covalent,n.count,R.sg.Schema.int),l=eQ.t.fromData({pairs:{key:i,indexA:t,indexB:r,order:o,flag:s},count:a.count},{maxDistance:1/0});eQ.t.Provider.set(e,l)}e_.o.Provider.set(e,{data:a.charge,type:"NO_CHARGES"}),i.push(e)}return new eF.ArrayTrajectory(i)}(d=w||(w={})).is=function(e){return(null==e?void 0:e.kind)==="data"},d.create=function(e){return{kind:"data",name:"data",data:e}};let{readLine:ty,skipWhitespace:tx,eatValue:tS,eatLine:tT,markStart:tC}=F.Tokenizer;async function tO(e,t,r){let{tokenizer:a}=e,n=Object.fromEntries(r.map((e,t)=>[e,t])),i=r.findIndex(e=>"x"===e[0]),o=r.findIndex(e=>"y"===e[0]),s=r.findIndex(e=>"z"===e[0]),l=r[i],u=F.c.create(a.data,2*t),c=F.c.create(a.data,2*t),d=F.c.create(a.data,2*t),p=F.c.create(a.data,2*t),f=F.c.create(a.data,2*t),m=F.c.create(a.data,2*t),{position:h}=a;a.position=h;let g=r.length,{length:b}=a,y=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let r=Math.min(t-y,e);for(let e=0;e<r;++e){for(let e=0;e<g;++e)switch(tx(a),tC(a),tS(a),e){case n.id:F.c.addUnchecked(u,a.tokenStart,a.tokenEnd);break;case n.mol:F.c.addUnchecked(c,a.tokenStart,a.tokenEnd);break;case n.type:F.c.addUnchecked(d,a.tokenStart,a.tokenEnd);break;case i:F.c.addUnchecked(p,a.tokenStart,a.tokenEnd);break;case o:F.c.addUnchecked(f,a.tokenStart,a.tokenEnd);break;case s:F.c.addUnchecked(m,a.tokenStart,a.tokenEnd)}tT(a),tC(a)}return y+=r,r},e=>e.update({message:"Parsing...",current:a.position,max:b})),{count:t,atomMode:l,atomId:(0,ew.Lq)(u)(R.sg.Schema.int),moleculeId:(0,ew.Lq)(c)(R.sg.Schema.int),atomType:(0,ew.Lq)(d)(R.sg.Schema.int),x:(0,ew.Lq)(p)(R.sg.Schema.float),y:(0,ew.Lq)(f)(R.sg.Schema.float),z:(0,ew.Lq)(m)(R.sg.Schema.float)}}async function tI(e,t){let r=(0,F.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n={frames:[],times:[],bounds:[],timeOffset:0,deltaTime:0},i=n.frames,o=0,s=0;for(;r.tokenEnd<r.length;){let e=ty(a.tokenizer).trim();if(e.includes("ITEM: TIMESTEP"))s=parseInt(ty(a.tokenizer).trim()),n.times.push(s);else if(e.includes("ITEM: NUMBER OF ATOMS"))o=parseInt(ty(a.tokenizer).trim());else if(e.includes("ITEM: ATOMS")){let t=e.split(" ").slice(2),r=await tO(a,o,t);i.push(r)}else if(e.includes("ITEM: BOX BOUNDS")){let t=e.split("ITEM: BOX BOUNDS ")[1].split(" "),r=t[0],i=t[1],o=t[2],s=ty(a.tokenizer).trim().split(" "),l=ty(a.tokenizer).trim().split(" "),u=ty(a.tokenizer).trim().split(" "),c=parseFloat(s[0]),d=parseFloat(s[1]),p=parseFloat(l[0]),f=parseFloat(l[1]),m=parseFloat(u[0]),h=parseFloat(u[1]);n.bounds.push({lower:[c,p,m],length:[d-c,f-p,h-m],periodicity:[r,i,o]})}}return n.times.length>=1&&(n.timeOffset=n.times[0]),n.times.length>=2&&(n.deltaTime=n.times[1]-n.times[0]),k.X.success(n)}function tA(e){return B.iQ.create("Parse Lammp Trajectory",async t=>await tI(e,t))}var tw=r(95446);function tD(e,t="real"){return B.iQ.create("Parse Lammps Trajectory",async r=>{await r.update("Converting to coordinates");let a=to[t].scale,n=(0,en.q)(e.deltaTime,"step"),i=(0,en.q)(e.timeOffset,n.unit),o={x:0,y:0,z:0},s={x:1,y:1,z:1},l=e.frames[0].atomMode.includes("s"),u=[];for(let t=0,r=e.frames.length;t<r;++t){let r=e.bounds[t];l&&(s.x=r.length[0],s.y=r.length[1],s.z=r.length[2],o.x=r.lower[0],o.y=r.lower[1],o.z=r.lower[2]);let c=e.frames[t].count,d=new Float32Array(c),p=new Float32Array(c),f=new Float32Array(c),m=0;for(let r=0;r<c;r++)d[m]=(e.frames[t].x.value(r)*s.x+o.x)*a,p[m]=(e.frames[t].y.value(r)*s.y+o.y)*a,f[m]=(e.frames[t].z.value(r)*s.z+o.z)*a,m++;u.push({elementCount:e.frames[t].count,x:d,y:p,z:f,xyzOrdering:{isIdentity:!0},time:(0,en.q)(i.value+n.value*t,n.unit)})}return en.r.create(u,n,i)})}async function tE(e,t,r="real"){let a=e.frames[0],n=a.count,i=a.atomMode,o=e.bounds[0],s={x:0,y:0,z:0},l={x:1,y:1,z:1},u=to[r].scale;i.includes("s")&&(l.x=o.length[0],l.y=o.length[1],l.z=o.length[2],s.x=o.lower[0],s.y=o.lower[1],s.z=o.lower[2]);let c=Array(n),d=new Int32Array(n),p=new Float32Array(n),f=new Float32Array(n),m=new Float32Array(n),h=new Int32Array(n),g=0;for(let e=0;e<n;e++)c[g]=a.atomType.value(e).toString(),p[g]=(a.x.value(e)*l.x+s.x)*u,f[g]=(a.y.value(e)*l.y+s.y)*u,m[g]=(a.z.value(e)*l.z+s.z)*u,d[g]=a.atomId.value(e),h[g]=0,g++;let b=R.sg.ofConst("MOL",n,R.sg.Schema.str),y=R.sg.ofLambda({value:e=>a.moleculeId.value(e).toString(),rowCount:n,schema:R.sg.Schema.str}),x=R.sg.ofConst(1,n,R.sg.Schema.int),S=R.sg.ofStringArray(c),T=R.iA.ofParti
7319alColumns(ey.d.atom_site,{auth_asym_id:y,auth_atom_id:S,auth_comp_id:b,auth_seq_id:x,Cartn_x:R.sg.ofFloatArray(p),Cartn_y:R.sg.ofFloatArray(f),Cartn_z:R.sg.ofFloatArray(m),id:R.sg.ofIntArray(d),label_asym_id:y,label_atom_id:S,label_comp_id:b,label_seq_id:x,label_entity_id:R.sg.ofConst("1",n,R.sg.Schema.str),occupancy:R.sg.ofConst(1,n,R.sg.Schema.float),type_symbol:S,pdbx_PDB_model_num:R.sg.ofIntArray(h)},n),C=new eb.L;C.setNames([["MOL","Unknown Entity"]]),C.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let O=new em.Q(x,S);O.setNames([["MOL","Unknown Molecule"]]),O.add("MOL",0);let I=(0,ey.p)({entity:C.getEntityTable(),chem_comp:O.getChemCompTable(),atom_site:T}),A=(await (0,ex.c)(I,D.create(e),t)).representative,w=await tD(e,r).runInContext(t);return tw.Hn.trajectoryFromModelAndCoordinates(A,w)}function tM(e){F.Tokenizer.skipWhitespace(e),F.Tokenizer.eatValue(e)}function tP(e,t){let{position:r}=e;F.Tokenizer.skipWhitespace(e),F.Tokenizer.eatValue(e),F.Tokenizer.trim(e,r,e.position),F.c.addUnchecked(t,e.tokenStart,e.tokenEnd)}(p=D||(D={})).is=function(e){return(null==e?void 0:e.kind)==="lammpstrj"},p.create=function(e){return{kind:"lammpstrj",name:"lammpstrj",data:e}};let tk="$$$$";async function tB(e){let t=new DataView(e.buffer),r={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},a=r.frames,n=r.boxes,i=r.times,o=0;for(;;){o+=8;let r=t.getInt32(o);o+=4+r;let s=t.getInt32(o+8),l=t.getInt32(o+12),u=t.getInt32(o+16),c=t.getInt32(o+28),d=t.getInt32(o+32),p=t.getInt32(o+36),f=t.getInt32(o+40);o+=52;let m=s/9,h=3*f;if(8===m?i.push(t.getFloat64(o)):i.push(t.getFloat32(o)),o+=2*m,s){let e=new Float32Array(9);if(8===m)for(let r=0;r<9;++r)e[r]=10*t.getFloat64(o),o+=8;else for(let r=0;r<9;++r)e[r]=10*t.getFloat32(o),o+=4;n.push(e)}if(o+=l+u,c){let r=new Float32Array(f),n=new Float32Array(f),i=new Float32Array(f);if(8===m)for(let e=0;e<f;++e)r[e]=10*t.getFloat64(o),n[e]=10*t.getFloat64(o+8),i[e]=10*t.getFloat64(o+16),o+=24;else{let t=new Uint32Array(e.buffer,o,h);for(let e=0;e<h;++e){let r=t[e];t[e]=(255&r)<<24|(65280&r)<<8|r>>8&65280|r>>24&255}let a=new Float32Array(e.buffer,o,h);for(let e=0;e<f;++e)r[e]=10*a[3*e],n[e]=10*a[3*e+1],i[e]=10*a[3*e+2],o+=12}a.push({count:f,x:r,y:n,z:i})}if((o+=d+p)>=e.byteLength)break}return i.length>=1&&(r.timeOffset=i[0]),i.length>=2&&(r.deltaTime=i[1]-i[0]),r}(f=E||(E={})).is=function(e){return(null==e?void 0:e.kind)==="sdf"},f.create=function(e){return{kind:"sdf",name:e.molFile.title,data:e}};let t_=[];class tR{constructor(e,t={}){this._mark=0,this._marks=[],this.offset=0,this.littleEndian=!0;let r=!1;void 0===e&&(e=8192),"number"==typeof e?e=new ArrayBuffer(e):r=!0;let a=t.offset?t.offset>>>0:0,n=e.byteLength-a,i=a;e instanceof ArrayBuffer||e instanceof SharedArrayBuffer||(e.byteLength!==e.buffer.byteLength&&(i=e.byteOffset+a),e=e.buffer),r?this._lastWrittenByte=n:this._lastWrittenByte=0,this.buffer=e,this.length=n,this.byteLength=n,this.byteOffset=i,this._data=new DataView(this.buffer,i,n)}available(e=1){return this.offset+e<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(e){return void 0===e&&(e=1),this.offset+=e,this}seek(e){return this.offset=e,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let e=this._marks.pop();if(void 0===e)throw Error("Mark stack empty");return this.seek(e),this}rewind(){return this.offset=0,this}ensureAvailable(e){if(void 0===e&&(e=1),!this.available(e)){let t=2*(this.offset+e),r=new Uint8Array(t);r.set(new Uint8Array(this.buffer)),this.buffer=r.buffer,this.length=this.byteLength=t,this._data=new DataView(this.buffer)}return this}readBoolean(){return 0!==this.readUint8()}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(e){void 0===e&&(e=1);let t=new Uint8Array(e);for(let r=0;r<e;r++)t[r]=this.readByte();return t}readInt16(){let e=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}readUint16(){let e=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,e}readInt32(){let e=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}readUint32(){let e=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat32(){let e=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat64(){let e=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}readChar(){return String.fromCharCode(this.readInt8())}readChars(e=1){t_.length=e;for(let t=0;t<e;t++)t_[t]=this.readChar();return t_.join("")}writeBoolean(e=!1){return this.writeUint8(e?255:0),this}writeInt8(e){return this.ensureAvailable(1),this._data.setInt8(this.offset++,e),this._updateLastWrittenByte(),this}writeUint8(e){return this.ensureAvailable(1),this._data.setUint8(this.offset++,e),this._updateLastWrittenByte(),this}writeByte(e){return this.writeUint8(e)}writeBytes(e){this.ensureAvailable(e.length);for(let t=0;t<e.length;t++)this._data.setUint8(this.offset++,e[t]);return this._updateLastWrittenByte(),this}writeInt16(e){return this.ensureAvailable(2),this._data.setInt16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(e){return this.ensureAvailable(2),this._data.setUint16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(e){return this.ensureAvailable(4),this._data.setInt32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(e){return this.ensureAvailable(4),this._data.setUint32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(e){return this.ensureAvailable(4),this._data.setFloat32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(e){return this.ensureAvailable(8),this._data.setFloat64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(e){return this.writeUint8(e.charCodeAt(0))}writeChars(e){for(let t=0;t<e.length;t++)this.writeUint8(e.charCodeAt(t));return this}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this._lastWrittenByte)}_updateLastWrittenByte(){this.offset>this._lastWrittenByte&&(this._lastWrittenByte=this.offset)}}function tF(e,t){if(e)throw TypeError("Not a valid NetCDF v3.x file: "+t)}function tL(e){e.offset%4!=0&&e.skip(4-e.offset%4)}function tz(e){let t=e.readUint32(),r=e.readChars(t);return tL(e),r}let tN={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6};function tG(e){switch(Number(e)){case tN.BYTE:return"byte";case tN.CHAR:return"char";case tN.SHORT:return"short";case tN.INT:return"int";case tN.FLOAT:return"float";case tN.DOUBLE:return"double";default:return"undefined"}}function tU(e){switch(Number(e)){case tN.BYTE:case tN.CHAR:return 1;case tN.SHORT:return 2;case tN.INT:case tN.FLOAT:return 4;case tN.DOUBLE:return 8;default:return -1}}function tV(e){switch(String(e)){case"byte":return tN.BYTE;case"char":return tN.CHAR;case"short":return tN.SHORT;case"int":return tN.INT;case"float":return tN.FLOAT;case"double":return tN.DOUBLE;default:return -1}}function tj(e,t){if(1===e)return t();{let r=Array(e);for(let a=0;a<e;a++)r[a]=t();return r}}function tH(e,t,r){switch(t){case tN.BYTE:return e.readBytes(r);case tN.CHAR:var a;
7319return 0===(a=e.readChars(r)).charCodeAt(a.length-1)?a.substring(0,a.length-1):a;case tN.SHORT:return tj(r,e.readInt16.bind(e));case tN.INT:return tj(r,e.readInt32.bind(e));case tN.FLOAT:return tj(r,e.readFloat32.bind(e));case tN.DOUBLE:return tj(r,e.readFloat64.bind(e));default:tF(!0,"non valid type "+t);return}}function tq(e){let t;let r=e.readUint32();if(0===r)return tF(0!==e.readUint32(),"wrong empty tag for list of attributes"),[];{tF(12!==r,"wrong tag for list of attributes");let a=e.readUint32();t=Array(a);for(let r=0;r<a;r++){let a=tz(e),n=e.readUint32();tF(n<1||n>6,"non valid type "+n);let i=e.readUint32(),o=tH(e,n,i);tL(e),t[r]={name:a,type:tG(n),value:o}}}return t}class tX{constructor(e){let t=new tR(e);t.setBigEndian(),tF("CDF"!==t.readChars(3),"should start with CDF");let r=t.readByte();tF(r>2,"unknown version"),this.header=function(e,t){let r={recordDimension:{length:e.readUint32()}};r.version=t;let a=function(e){let t,r,a;let n=e.readUint32();if(0===n)return tF(0!==e.readUint32(),"wrong empty tag for list of dimensions"),[];{tF(10!==n,"wrong tag for list of dimensions");let i=e.readUint32();t=Array(i);for(let n=0;n<i;n++){let i=tz(e),o=e.readUint32();0===o&&(r=n,a=i),t[n]={name:i,size:o}}return{dimensions:t,recordId:r,recordName:a}}}(e);r.recordDimension.id=a.recordId,r.recordDimension.name=a.recordName,r.dimensions=a.dimensions,r.globalAttributes=tq(e);let n=function(e,t,r){let a;let n=e.readUint32(),i=0;if(0===n)return tF(0!==e.readUint32(),"wrong empty tag for list of variables"),[];{tF(11!==n,"wrong tag for list of variables");let o=e.readUint32();a=Array(o);for(let n=0;n<o;n++){let o=tz(e),s=e.readUint32(),l=Array(s);for(let t=0;t<s;t++)l[t]=e.readUint32();let u=tq(e),c=e.readUint32();tF(c<1&&c>6,"non valid type "+c);let d=e.readUint32(),p=e.readUint32();2===r&&(tF(p>0,"offsets larger than 4GB not supported"),p=e.readUint32()),l[0]===t&&(i+=d),a[n]={name:o,dimensions:l,attributes:u,type:tG(c),size:d,offset:p,record:l[0]===t}}}return{variables:a,recordStep:i}}(e,a.recordId,t);return r.variables=n.variables,r.recordDimension.recordStep=n.recordStep,r}(t,r),this.buffer=t}get version(){return 1===this.header.version?"classic format":"64-bit offset format"}get recordDimension(){return this.header.recordDimension}get dimensions(){return this.header.dimensions}get globalAttributes(){return this.header.globalAttributes}get variables(){return this.header.variables}hasDataVariable(e){return this.header.variables&&-1!==this.header.variables.findIndex(t=>t.name===e)}getDataVariable(e){var t;let r;if(void 0===(r="string"==typeof e?null===(t=this.header.variables)||void 0===t?void 0:t.find(t=>t.name===e):e))throw Error("variable not found");return(this.buffer.seek(r.offset),r.record)?function(e,t,r){let a=tV(t.type),n=t.size?t.size/tU(a):1,i=r.length,o=Array(i),s=r.recordStep;for(let t=0;t<i;t++){let r=e.offset;o[t]=tH(e,a,n),e.seek(r+s)}return o}(this.buffer,r,this.header.recordDimension):function(e,t){let r=tV(t.type),a=t.size/tU(r),n=Array(a);for(let t=0;t<a;t++)n[t]=tH(e,r,1);return n}(this.buffer,r)}}async function tW(e){let t=new tX(e.buffer),r={coordinates:[],time:[],timeOffset:0,deltaTime:1};for(let e of t.getDataVariable("coordinates"))r.coordinates.push(e);if(t.hasDataVariable("velocities")){let e=[];for(let r of t.getDataVariable("velocities"))e.push(r);r.velocities=e}if(t.hasDataVariable("forces")){let e=[];for(let r of t.getDataVariable("forces"))e.push(r);r.forces=e}if(t.hasDataVariable("cell_lengths")){let e=[];
7319for(let r of t.getDataVariable("cell_lengths"))e.push(r);r.cell_lengths=e}if(t.hasDataVariable("cell_angles")){let e=[];for(let r of t.getDataVariable("cell_angles"))e.push(r);r.cell_angles=e}if(t.hasDataVariable("time")){let e=[];for(let r of t.getDataVariable("time"))e.push(r);r.time=e}return r.time&&(r.time.length>=1&&(r.timeOffset=r.time[0]),r.time.length>=2&&(r.deltaTime=r.time[1]-r.time[0])),r}(m=M||(M={})).is=function(e){return(null==e?void 0:e.kind)==="prmtop"},m.fromPrmtop=function(e){return{kind:"prmtop",name:e.title.join(" ")||"PRMTOP",data:e}},(h=P||(P={})).is=function(e){return(null==e?void 0:e.kind)==="top"},h.fromTop=function(e){return{kind:"top",name:e.system||"TOP",data:e}};var tK=r(40208);let tQ=ej.E.BuiltIn({name:"coordinates-from-dcd",display:{name:"Parse DCD",description:"Parse DCD binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse DCD",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse DCD",async e=>{try{let e=function(e){let t=new DataView(e.buffer),r=Object.create(null),a=[],n=0,i=new Int32Array(e.buffer,0,23),o=i[0]!==t.getInt32(0);if(84!==i[0]){let r=e.byteLength;for(let e=0;e<r;e+=4)t.setFloat32(e,t.getFloat32(e),!0)}if(84!==i[0])throw Error("dcd bad format, header block start");if("CORD"!==String.fromCharCode(t.getUint8(4),t.getUint8(5),t.getUint8(6),t.getUint8(7)))throw Error("dcd bad format, format string");let s=!1,l=!1,u=!1;if(0!==i[22]&&(s=!0,0!==i[12]&&(l=!0),1===i[13]&&(u=!0)),r.NSET=i[2],r.ISTART=i[3],r.NSAVC=i[4],r.NAMNF=i[10],s?r.DELTA=t.getFloat32(44,o):r.DELTA=t.getFloat64(44,o),84!==i[22])throw Error("dcd bad format, header block end");n=n+84+8;let c=t.getInt32(n,o),d=n+1;if((c-4)%80!=0)throw Error("dcd bad format, title block start");if(r.TITLE=(0,_.YO)(e.subarray(d,c)),t.getInt32(d+c+4-1,o)!==c)throw Error("dcd bad format, title block end");if(n=n+c+8,4!==t.getInt32(n,o))throw Error("dcd bad format, natom block start");if(r.NATOM=t.getInt32(n+4,o),4!==t.getInt32(n+8,o))throw Error("dcd bad format, natom block end");if(n=n+4+8,r.NAMNF>0)throw Error("dcd format with fixed atoms unsupported, aborting");let p=r.NATOM,f=4*p;for(let i=0,s=r.NSET;i<s;++i){let r=Object.create(null);r.elementCount=p,l&&(n+=4,r.cell=[t.getFloat64(n,o),t.getFloat64(n+1,o),t.getFloat64(n+16,o),t.getFloat64(n+24,o),t.getFloat64(n+32,o),t.getFloat64(n+40,o)],n+=52);for(let a=0;a<3;++a){if(t.getInt32(n,o)!==f)throw Error(`dcd bad format, coord block start: ${i}, ${a}`);n+=4;let s=new Float32Array(e.buffer,n,p);if(0===a?r.x=s:1===a?r.y=s:r.z=s,n+=f,t.getInt32(n,o)!==f)throw Error(`dcd bad format, coord block end: ${i}, ${a}`);n+=4}if(u){let e=t.getInt32(n,o);n+=4+e+4}a.push(r)}return{header:r,frames:a}}(r);return k.X.success(e)}catch(e){return k.X.error(e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse DCD",async e=>{await e.update("Converting to coordinates");let{header:t}=a,r=t.DELTA?(0,en.q)(20.45482949774598*t.DELTA,"ps"):(0,en.q)(1,"step"),n=t.ISTART>=1?(0,en.q)((t.ISTART-1)*r.value,r.unit):(0,en.q)(0,r.unit),i=[];for(let e=0,t=a.frames.length;e<t;++e){let t=a.frames[e],o={elementCount:t.elementCount,time:(0,en.q)(n.value+r.value*e,r.unit),x:t.x,y:t.y,z:t.z,xyzOrdering:{isIdentity:!0}};if(t.cell){let e=t.cell;e[1]>=-1&&e[1]<=1&&e[3]>=-1&&e[3]<=1&&e[4]>=-1&&e[4]<=1?o.cell=eo.create(G.AO.create(e[0],e[2],e[5]),G.AO.create((0,ei.Id)(90-90*Math.asin(e[1])/ei.MZ),(0,ei.Id)(90-90*Math.asin(e[3])/ei.MZ),(0,ei.Id)(90-90*Math.asin(e[4])/ei.MZ))):e[0]<0||e[1]<0||e[2]<0||e[3]<0||e[4]<0||e[5]<0||e[3]>180||e[4]>180||e[5]>180?o.cell=eo.fromBasis(G.AO.create(e[0],e[1],e[3]),G.AO.create(e[1],e[2],e[4]),G.AO.create(e[3],e[4],e[5])):o.cell=eo.create(G.AO.create(e[0],e[2],e[5]),G.AO.create((0,ei.Id)((0,es.q)(e[1],0,es.I)?90:e[1]),(0,ei.Id)((0,es.q)(e[3],0,es.I)?90:e[3]),(0,ei.Id)((0,es.q)(e[4],0,es.I)?90:e[4])))}i.push(o)}return en.r.create(i,r,n)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tZ=ej.E.BuiltIn({name:"coordinates-from-xtc",display:{name:"Parse XTC",description:"Parse XTC binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse XTC",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse XTC",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await ti(e,r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse XTC",async e=>{await e.update("Converting to coordinates");
7319let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.frames.length;e<i;++e){let i=a.boxes[e],o=G.AO.fromArray((0,G.AO)(),i,0),s=G.AO.fromArray((0,G.AO)(),i,3),l=G.AO.fromArray((0,G.AO)(),i,6);n.push({elementCount:a.frames[e].count,cell:eo.fromBasis(o,s,l),x:a.frames[e].x,y:a.frames[e].y,z:a.frames[e].z,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)})}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tY=ej.E.BuiltIn({name:"coordinates-from-trr",display:{name:"Parse TRR",description:"Parse TRR binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse TRR",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse TRR",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await tB(r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse TRR",async e=>{await e.update("Converting to coordinates");let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.frames.length;e<i;++e){let i=a.boxes[e],o=G.AO.fromArray((0,G.AO)(),i,0),s=G.AO.fromArray((0,G.AO)(),i,3),l=G.AO.fromArray((0,G.AO)(),i,6);n.push({elementCount:a.frames[e].count,cell:eo.fromBasis(o,s,l),x:a.frames[e].x,y:a.frames[e].y,z:a.frames[e].z,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)})}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),t$=ej.E.BuiltIn({name:"coordinates-from-nctraj",display:{name:"Parse NCTRAJ",description:"Parse NCTRAJ binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse NCTRAJ",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse NCTRAJ",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await tW(r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse NCTRAJ",async e=>{await e.update("Converting to coordinates");let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.coordinates.length;e<i;++e){let i=a.coordinates[e],o=i.length/3,s=new Float32Array(o),l=new Float32Array(o),u=new Float32Array(o);for(let e=0,t=i.length;e<t;e+=3)s[e/3]=i[e],l[e/3]=i[e+1],u[e/3]=i[e+2];let c={elementCount:o,x:s,y:l,z:u,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)};if(a.cell_lengths){let t=a.cell_lengths[e],r=G.AO.scale((0,G.AO)(),G.AO.unitX,t[0]),n=G.AO.scale((0,G.AO)(),G.AO.unitY,t[1]),i=G.AO.scale((0,G.AO)(),G.AO.unitZ,t[2]);c.cell=eo.fromBasis(r,n,i)}n.push(c)}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tJ=ej.E.BuiltIn({name:"coordinates-from-lammpstraj",display:{name:"Parse LAMMPSTRAJ",description:"Parse LAMMPSTRAJ data."},from:[ej.G.Data.String],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse LAMMPSTRAJ",async t=>{let r=await tA(e.data).runInContext(t);if(r.isError)throw Error(r.message);let a=await tD(r.result).runInContext(t);return new ej.G.Molecule.Coordinates(a,{label:e.label,description:"Coordinates"})})}),t0=ej.E.BuiltIn({name:"topology-from-psf",display:{name:"PSF Topology",description:"Create topology from PSF."},from:[ej.G.Format.Psf],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse PSF",async e=>{let t=y.fromPsf(r),a=function(e){let t=Array(e.count),r=Array(e.count),a=new Uint32Array(e.count),n=new Uint32Array(e.count),i=Array(e.count),o=new eb.L,s=new em.Q(e.residueId,e.atomName),l="",u=0,c="",d=0,p=e.segmentName.value(0),f=!1,m=ef.MoleculeType.Unknown,h=-1;for(let g=0,b=e.count;g<b;++g){let b=e.residueId.value(g),y=e.segmentName.value(g);if(p!==y?(c=ev(u),u+=1,d=0,f=!0,p=y):f=!1,f||b!==h){let t=e.residueName.value(g),r=(0,ef.getMoleculeType)(s.add(t,g).type,t);f||r===m&&b===h+1||(c=ev(u),u+=1,d=0),l=o.getEntityId(t,r,c),d+=1,h=b,m=r}t[g]=l,r[g]=c,a[g]=d,n[g]=g,i[g]=ep(e.atomName.value(g),e.residueName.value(g))}
7319let g=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:e.segmentName,auth_atom_id:e.atomName,auth_comp_id:e.residueName,auth_seq_id:e.residueId,id:R.sg.ofIntArray(n),label_asym_id:R.sg.ofStringArray(r),label_atom_id:e.atomName,label_comp_id:e.residueName,label_seq_id:R.sg.ofIntArray(a),label_entity_id:R.sg.ofStringArray(t),occupancy:R.sg.ofConst(1,e.count,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(i),pdbx_PDB_model_num:R.sg.ofConst(1,e.count,R.sg.Schema.int)},e.count);return(0,ey.p)({entity:o.getEntityTable(),chem_comp:s.getChemCompTable(),atom_site:g})}(r.atoms),{atomIdA:n,atomIdB:i}=r.bonds,o={indexA:R.sg.ofLambda({value:e=>n.value(e)-1,rowCount:n.rowCount,schema:n.schema}),indexB:R.sg.ofLambda({value:e=>i.value(e)-1,rowCount:i.rowCount,schema:i.schema}),order:R.sg.ofConst(1,r.bonds.count,R.sg.Schema.int)};return eR.d.create(r.id,a,o,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})}),t1=ej.E.BuiltIn({name:"topology-from-prmtop",display:{name:"PRMTOP Topology",description:"Create topology from PRMTOP."},from:[ej.G.Format.Prmtop],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse PRMTOP",async e=>{let t=M.fromPrmtop(r),a=function(e){let{pointers:t,residuePointer:r,residueLabel:a,atomName:n}=e,i=t.NATOM,o=t.NRES,s=new Uint32Array(i),l=[],u=(e,t,r)=>{let n=a.value(e);for(let a=t;a<r;++a)s[a]=e+1,l[a]=n};for(let e=0,t=o-1;e<t;++e)u(e,r.value(e)-1,r.value(e+1)-1);u(o-1,r.value(o-1)-1,i);let c=R.sg.ofIntArray(s),d=R.sg.ofStringArray(l),p=Array(i),f=Array(i),m=new Uint32Array(i),h=new Uint32Array(i),g=new eb.L,b=new em.Q(c,n),y="",x=0,S="",T=0,C=ef.MoleculeType.Unknown,O=-1;for(let e=0;e<i;++e){let t=c.value(e);if(t!==O){let r=d.value(e),a=(0,ef.getMoleculeType)(b.add(r,e).type,r);a!==C&&(S=ev(x),x+=1,T=0),y=g.getEntityId(r,a,S),T+=1,O=t,C=a}p[e]=y,f[e]=S,m[e]=T,h[e]=e}let I=R.sg.ofIntArray(h),A=R.sg.ofStringArray(f),w=Array(i);for(let e=0;e<i;++e)w[e]=ep(n.value(e),d.value(e));let D=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:A,auth_atom_id:R.sg.asArrayColumn(n),auth_comp_id:d,auth_seq_id:c,id:R.sg.asArrayColumn(I),label_asym_id:A,label_atom_id:R.sg.asArrayColumn(n),label_comp_id:d,label_seq_id:R.sg.ofIntArray(m),label_entity_id:R.sg.ofStringArray(p),occupancy:R.sg.ofConst(1,i,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(w),pdbx_PDB_model_num:R.sg.ofConst(1,i,R.sg.Schema.int)},i);return(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:D})}(r),{pointers:{NBONH:n,NBONA:i},bondsIncHydrogen:o,bondsWithoutHydrogen:s}=r,l=n+i,u={indexA:R.sg.ofLambda({value:e=>e<n?o.value(3*e)/3:s.value((e-n)*3)/3,rowCount:l,schema:R.sg.Schema.int}),indexB:R.sg.ofLambda({value:e=>e<n?o.value(3*e+1)/3:s.value((e-n)*3+1)/3,rowCount:l,schema:R.sg.Schema.int}),order:R.sg.ofConst(1,l,R.sg.Schema.int)};return eR.d.create(r.title.join(" ")||"PRMTOP",a,u,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})}),t2=ej.E.BuiltIn({name:"topology-from-top",display:{name:"TOP Topology",description:"Create topology from TOP."},from:[ej.G.Format.Top],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse TOP",async e=>{let t=P.fromTop(r),a=function(e){let{molecules:t,compounds:r}=e,a={},n=0;for(let e=0,i=t._rowCount;e<i;++e){let i=t.compound.value(e),o=t.molCount.value(e),{atoms:s}=r[i];R.sg.asArrayColumn(s.atom),R.sg.asArrayColumn(s.resnr),R.sg.asArrayColumn(s.residu),n+=o*s._rowCount;let l=s.resnr.value(0);a[i]=!0;for(let e=1,t=s._rowCount;e<t;++e){let t=s.resnr.value(e);if(t!==l){a[i]=!1;break}l=t}}let i=Array(n),o=new Uint32Array(n),s=Array(n),l=0;for(let e=0,n=t._rowCount;e<n;++e){let n=t.compound.value(e),u=t.molCount.value(e),{atoms:c}=r[n],d=a[n];for(let e=0;e<u;++e)for(let t=0,r=c._rowCount;t<r;++t)i[l]=c.atom.value(t),o[l]=c.resnr.value(t),s[l]=c.residu.value(t),d&&(o[l]+=e),l+=1}let u=R.sg.ofStringArray(i),c=R.sg.ofIntArray(o),d=R.sg.ofStringArray(s),p=Array(n),f=Array(n),m=new Uint32Array(n),h=new Uint32Array(n),g=new eb.L,b=new em.Q(c,u),y="",x=0,S="",T=0,C=ef.MoleculeType.Unknown,O=-1;for(let e=0,t=n;e<t;++e){let t=c.value(e);if(t!==O){let r=d.value(e),a=(0,ef.getMoleculeType)(b.add(r,e).type,r);a!==C&&(S=ev(x),x+=1,T=0),y=g.getEntityId(r,a,S),T+=1,O=t,C=a}p[e]=y,f[e]=S,m[e]=T,h[e]=e}let I=R.sg.ofIntArray(h),A=R.sg.ofStringArray(f),w=Array(n);for(let e=0;e<n;++e)w[e]=ep(u.value(e),d.value(e));
7319let D=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:A,auth_atom_id:R.sg.asArrayColumn(u),auth_comp_id:d,auth_seq_id:c,id:R.sg.asArrayColumn(I),label_asym_id:A,label_atom_id:R.sg.asArrayColumn(u),label_comp_id:d,label_seq_id:R.sg.ofIntArray(m),label_entity_id:R.sg.ofStringArray(p),occupancy:R.sg.ofConst(1,n,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(w),pdbx_PDB_model_num:R.sg.ofConst(1,n,R.sg.Schema.int)},n);return(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:D})}(r),n=function(e){let{molecules:t,compounds:r}=e,a=[],n=[],i=0;for(let e=0,o=t._rowCount;e<o;++e){let o=t.compound.value(e),s=t.molCount.value(e),{atoms:l,bonds:u}=r[o];if(u)for(let e=0;e<s;++e){for(let e=0,t=u._rowCount;e<t;++e)a.push(u.ai.value(e)-1+i),n.push(u.aj.value(e)-1+i);i+=l._rowCount}else if("TIP3"===o)for(let e=0;e<s;++e)a.push(0+i),n.push(1+i),a.push(0+i),n.push(2+i),i+=l._rowCount;else i+=s*l._rowCount}return{indexA:R.sg.ofIntArray(a),indexB:R.sg.ofIntArray(n),order:R.sg.ofConst(1,a.length,R.sg.Schema.int)}}(r);return eR.d.create(r.system||"TOP",a,n,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})});async function t3(e,t,r){if(t.type===ej.G.Molecule.Topology.type){let a=t.data;return await eF.Model.trajectoryFromTopologyAndCoordinates(a,r).runInContext(e)}if(t.type===ej.G.Molecule.Model.type){let e=t.data;return eF.Model.trajectoryFromModelAndCoordinates(e,r)}throw Error("no model/topology found")}let t4=ej.E.BuiltIn({name:"trajectory-from-model-and-coordinates",display:{name:"Trajectory from Topology & Coordinates",description:"Create a trajectory from existing model/topology and coordinates."},from:ej.G.Root,to:ej.G.Molecule.Trajectory,params:{modelRef:W.e.Text("",{isHidden:!0}),coordinatesRef:W.e.Text("",{isHidden:!0})}})({apply:({params:e,dependencies:t})=>B.iQ.create("Create trajectory from model/topology and coordinates",async r=>{let a=t[e.coordinatesRef].data,n=await t3(r,t[e.modelRef],a),i={label:"Trajectory",description:`${n.frameCount} model${1===n.frameCount?"":"s"}`};return new ej.G.Molecule.Trajectory(n,i)})}),t5=ej.E.BuiltIn({name:"trajectory-from-blob",display:{name:"Parse Blob",description:"Parse format blob into a single trajectory."},from:ej.G.Format.Blob,to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse Format Blob",async t=>{let r=[];for(let a of e.data){if("cif"!==a.kind)continue;let e=a.data.blocks[0],n=await (0,eT.kN)(e).runInContext(t);if(0===n.frameCount)throw Error("No models found.");for(let e=0;e<n.frameCount;e++){let a=await B.iQ.resolveInContext(n.getFrameAtIndex(e),t);r.push(a)}}for(let e=0;e<r.length;e++)eF.Model.TrajectoryInfo.set(r[e],{index:e,size:r.length});let a={label:"Trajectory",description:`${r.length} model${1===r.length?"":"s"}`};return new ej.G.Molecule.Trajectory(new eF.ArrayTrajectory(r),a)})});function t6(e){let t=e.representative;return{label:`${t.entry}`,description:`${e.frameCount} model${1===e.frameCount?"":"s"}`}}let t8=ej.E.BuiltIn({name:"trajectory-from-mmcif",display:{name:"Trajectory from mmCIF",description:"Identify and create all separate models in the specified CIF data block"},from:ej.G.Format.Cif,to:ej.G.Molecule.Trajectory,params(e){if(!e)return{loadAllBlocks:W.e.Optional(W.e.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all datablocks into a single trajectory."})),blockHeader:W.e.Optional(W.e.Text(void 0,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:e=>!0===e.loadAllBlocks})),blockIndex:W.e.Optional(W.e.Numeric(0,{min:0,step:1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:e=>!0===e.loadAllBlocks||e.blockHeader}))};let{blocks:t}=e.data,r=t.map(e=>[e.header,e.header]);return r.push(["","[Use Block Index]"]),{loadAllBlocks:W.e.Optional(W.e.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all data blocks into a single trajectory."})),blockHeader:W.e.Optional(W.e.Select(t[0]&&t[0].header,r,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:e=>!0===e.loadAllBlocks})),blockIndex:W.e.Optional(W.e.Numeric(0,{min:0,step:1,max:t.length-1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:e=>!0===e.loadAllBlocks||e.blockHeader}))}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>B.iQ.create("Parse mmCIF",async r=>{var a;let n;if(t.loadAllBlocks){let t=[];for(let a of e.data.blocks){r.shouldUpdate&&await r.update(`Parsing ${a.header}...`);let e=await (0,eT.kN)(a).runInContext(r);for(let a=0;a<e.frameCount;a++)t.push(await B.iQ.resolveInContext(e.getFrameAtIndex(a),r))}n=new eF.ArrayTrajectory(t)}else{let i=t.blockHeader||e.data.blocks[null!==(a=t.blockIndex)&&void 0!==a?a:0].header,o=e.data.blocks.find(e=>e.header===i);if(!o)throw Error(`Data block '${[i]}' not found.`);n=!o.categoryNames.includes("chem_comp_atom")||o.categoryNames.includes("atom_site")||o.categoryNames.includes("ihm_sphere_obj_site")||o.categoryNames.includes("ihm_gaussian_obj_site")?await (0,eT.kN)(o,e.data).runInContext(r):await (0,eT.Dx)(o).runInContext(r)}if(0===n.frameCount)throw Error("No models found.");let i=t6(n);return new ej.G.Molecule.Trajectory(n,i)})}),t7=ej.E.BuiltIn({name:"trajectory-from-pdb",display:{name:"Parse PDB",description:"Parse PDB string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{variant:W.e.Select("pdb",W.e.arrayToOptions(["pdb","pdbqt","pqr"]))}})({apply:({a:e,params:t})=>B.iQ.create("Parse PDB",async r=>{var a,n,i,o;let s=await (a=e.data,n=e.label,i=t.variant,B.iQ.create("Parse PDB",async e=>k.X.success({lines:await F.Tokenizer.readAllLinesAsync(a,e),id:n,variant:i||"pdb"}))).runInContext(r);if(s.isError)throw Error(s.message);let l=await (o=s.result,B.iQ.create("Parse PDB",async e=>{var t;await e.update("Converting to mmCIF");let r=await eB(o),a=eT.rg.fromFrame(r,void 0,b.create(o)),n=(0,ey.p)(a.data.db,!0),i=await (0,ex.c)(n,a,e),s=null===(t=r.categories.atom_site)||void 0===t?void 0:t.getField("partial_charge");if(s&&1===i.frameCount){let e=i.representative,t=e.atomicHierarchy.atomSourceIndex,r=R.sg.isIdentity(t)?void 0:t.toArray({array:Int32Array}),a=s.toFloatArray(),n=r?R.sg.ofFloatArray(R.sg.mapToArray(t,e=>a[e],Float32Array)):R.sg.ofFloatArray(a);e_.o.Provider.set(e,{data:n,type:"GASTEIGER"})}return i})).runInContext(r),u=t6(l);return new ej.G.Molecule.Trajectory(l,u)})}),t9=ej.E.BuiltIn({name:"trajectory-from-gro",display:{name:"Parse GRO",description:"Parse GRO string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse GRO",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse GRO",async e=>await N(r,e))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse GRO",async e=>{let t=g.fromGro(a),r=[];for(let n=0,i=a.structures.length;n<i;++n){let i=function(e,t){let r=e.atomName,a=e.residueName,n=Array(e.count),i=Array(e.count),o=new Uint32Array(e.count),s=new Uint32Array(e.count),l=Array(e.count),u=new eb.L,c=new em.Q(e.residueNumber,e.atomName),d="",p=0,f="",m=0,h=ef.MoleculeType.Unknown,g=-1;for(let t=0,r=e.count;t<r;
7319++t){let r=e.residueNumber.value(t);if(r!==g){let a=e.residueName.value(t),n=(0,ef.getMoleculeType)(c.add(a,t).type,a);n===h&&(r===g+1||99999===g&&0===r)||(f=ev(p),p+=1,m=0),d=u.getEntityId(a,n,f),m+=1,g=r,h=n}n[t]=d,i[t]=f,o[t]=m,s[t]=t,l[t]=ep(e.atomName.value(t),e.residueName.value(t))}let b=R.sg.ofStringArray(i),y=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:b,auth_atom_id:r,auth_comp_id:a,auth_seq_id:e.residueNumber,Cartn_x:R.sg.ofFloatArray(R.sg.mapToArray(e.x,e=>10*e,Float32Array)),Cartn_y:R.sg.ofFloatArray(R.sg.mapToArray(e.y,e=>10*e,Float32Array)),Cartn_z:R.sg.ofFloatArray(R.sg.mapToArray(e.z,e=>10*e,Float32Array)),id:R.sg.ofIntArray(s),label_asym_id:b,label_atom_id:r,label_comp_id:a,label_seq_id:R.sg.ofIntArray(o),label_entity_id:R.sg.ofStringArray(n),occupancy:R.sg.ofConst(1,e.count,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(l),pdbx_PDB_model_num:R.sg.ofConst(t,e.count,R.sg.Schema.int)},e.count);return(0,ey.p)({entity:u.getEntityTable(),chem_comp:c.getChemCompTable(),atom_site:y})}(a.structures[n].atoms,n+1),o=await (0,ex.c)(i,t,e);1===o.frameCount&&r.push(o.representative)}return new eS.E(r)})).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),re=ej.E.BuiltIn({name:"trajectory-from-xyz",display:{name:"Parse XYZ",description:"Parse XYZ string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse XYZ",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse Mol",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=[];for(;;){let e=function(e){let t=e.position>=e.data.length-1?0:+F.Tokenizer.readLine(e);isNaN(t)&&(t=0);let r=F.Tokenizer.readLine(e),a=new Float64Array(t),n=new Float64Array(t),i=new Float64Array(t),o=Array(t);for(let r=0;r<t;++r){let t=F.Tokenizer.readLineTrim(e).split(/\s+/g);o[r]=t[0],a[r]=+t[1],n[r]=+t[2],i[r]=+t[3]}return{count:t,comment:r,x:R.sg.ofFloatArray(a),y:R.sg.ofFloatArray(n),z:R.sg.ofFloatArray(i),type_symbol:R.sg.ofStringArray(o)}}(t);if(0===e.count)break;r.push(e)}return k.X.success({molecules:r})})(r))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse XYZ",e=>(function(e,t){let{molecules:r}=e,a=0;for(let e of r)a+=e.count;let n=Array(a),i=new Int32Array(a),o=new Float32Array(a),s=new Float32Array(a),l=new Float32Array(a),u=new Int32Array(a),c=0;for(let e=0;e<r.length;e++){let t=r[e];for(let r=0;r<t.count;r++)n[c]=t.type_symbol.value(r),o[c]=t.x.value(r),s[c]=t.y.value(r),l[c]=t.z.value(r),i[c]=r,u[c]=e,c++}let d=R.sg.ofConst("MOL",a,R.sg.Schema.str),p=R.sg.ofConst("A",a,R.sg.Schema.str),f=R.sg.ofConst(1,a,R.sg.Schema.int),m=R.sg.ofStringArray(n),h=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:p,auth_atom_id:m,auth_comp_id:d,auth_seq_id:f,Cartn_x:R.sg.ofFloatArray(o),Cartn_y:R.sg.ofFloatArray(s),Cartn_z:R.sg.ofFloatArray(l),id:R.sg.ofIntArray(i),label_asym_id:p,label_atom_id:m,label_comp_id:d,label_seq_id:f,label_entity_id:R.sg.ofConst("1",a,R.sg.Schema.str),occupancy:R.sg.ofConst(1,a,R.sg.Schema.float),type_symbol:m,pdbx_PDB_model_num:R.sg.ofIntArray(u)},a),g=new eb.L;g.setNames([["MOL","Unknown Entity"]]),g.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let b=new em.Q(f,m);b.setNames([["MOL","Unknown Molecule"]]),b.add("MOL",0);let y=(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:h});return(0,ex.c)(y,A.create(e),t)})(a,e))).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rt=ej.E.BuiltIn({name:"trajectory-from-lammps-data",display:{name:"Parse Lammps Data",description:"Parse Lammps Data from string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{unitsStyle:W.e.Select("real",W.e.arrayToOptions(ts))}})({apply:({a:e,params:t})=>B.iQ.create("Parse Lammps Data",async r=>{var a,n,i;let o=await (a=e.data,B.iQ.create("Parse LammpsData",async e=>await tv(a,e))).runInContext(r);if(o.isError)throw Error(o.message);let s=await (n=o.result,void 0===(i=t.unitsStyle)&&(i="real"),B.iQ.create("Parse Lammps Data",e=>tb(n,e,i))).runInContext(r),l=t6(s);return new ej.G.Molecule.Trajectory(s,l)})}),rr=ej.E.BuiltIn({name:"trajectory-from-lammps-traj-data",display:{name:"Parse Lammps traj Data",description:"Parse Lammps Traj Data string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{unitsStyle:W.e.Select("real",W.e.arrayToOptions(ts))}})({apply:({a:e,params:t})=>B.iQ.create("Parse Lammps Data",async r=>{var a,n;let i=await tA(e.data).runInContext(r);if(i.isError)throw Error(i.message);let o=await (a=i.result,void 0===(n=t.unitsStyle)&&(n="real"),B.iQ.create("Parse Lammps Traj Data",e=>tE(a,e,n))).runInContext(r),s=t6(o);return new ej.G.Molecule.Trajectory(o,s)})}),ra=ej.E.BuiltIn({name:"trajectory-from-mol",display:{name:"Parse MOL",description:"Parse MOL string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse Mol",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=F.Tokenizer.readLine(t).trim(),a=F.Tokenizer.readLine(t).trim(),n=F.Tokenizer.readLine(t).trim(),i=F.Tokenizer.readLine(t),o=+i.substr(0,3),s=+i.substr(3,3),l={title:r,program:a,comment:n,atoms:eX(t,o),bonds:eW(t,s),...eK(t)};return k.X.success(l)})(r))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse MOL",e=>eZ(a,void 0,e))).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rn=ej.E.BuiltIn({name:"trajectory-from-sdf",display:{name:"Parse SDF",description:"Parse SDF string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse SDF",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse Sdf",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=[];for(;t.position<t.length;
7319){let e=function(e){let t=F.Tokenizer.readLine(e).trim(),r=F.Tokenizer.readLine(e).trim(),a=F.Tokenizer.readLine(e).trim(),n=F.Tokenizer.readLine(e),i=n.trim().endsWith("V3000"),{atomCount:o,bondCount:s}=i?function(e){let t=F.c.create(e.data,1),r=F.c.create(e.data,1);return F.Tokenizer.eatLine(e),tM(e),tM(e),tM(e),tP(e,t),tP(e,r),F.Tokenizer.eatLine(e),{atomCount:(0,ew.Lq)(t)(R.sg.Schema.int).value(0),bondCount:(0,ew.Lq)(r)(R.sg.Schema.int).value(0)}}(e):{atomCount:+n.substr(0,3),bondCount:+n.substr(3,3)};if(Number.isNaN(o)||Number.isNaN(s)){for(;e.position<e.length&&!F.Tokenizer.readLine(e).startsWith(tk););return}let l={atomIdx:R.sg.ofConst(0,o,R.sg.Schema.int),charge:R.sg.ofConst(0,o,R.sg.Schema.int)},u=i?function(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t),i=F.c.create(e.data,2*t);for(let o=0;o<t;++o){F.Tokenizer.markLine(e),tM(e),tM(e),tM(e);let{position:t}=e;tP(e,i),tP(e,r),tP(e,a),tP(e,n),e.position=t}return F.Tokenizer.eatLine(e),F.Tokenizer.eatLine(e),{count:t,x:(0,ew.Lq)(r)(R.sg.Schema.float),y:(0,ew.Lq)(a)(R.sg.Schema.float),z:(0,ew.Lq)(n)(R.sg.Schema.float),type_symbol:(0,ew.Lq)(i)(R.sg.Schema.str),formal_charge:R.sg.ofConst(0,t,R.sg.Schema.int)}}(e,o):eX(e,o),c=i?function(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t);for(let i=0;i<t;++i){F.Tokenizer.markLine(e),tM(e),tM(e),tM(e);let{position:t}=e;tP(e,n),tP(e,r),tP(e,a),e.position=t}return F.Tokenizer.eatLine(e),F.Tokenizer.eatLine(e),{count:t,atomIdxA:(0,ew.Lq)(r)(R.sg.Schema.float),atomIdxB:(0,ew.Lq)(a)(R.sg.Schema.float),order:(0,ew.Lq)(n)(R.sg.Schema.float)}}(e,s):eW(e,s),d=i?{formalCharges:l}:eK(e),p=function(e){let t=F.c.create(e.data,32),r=F.c.create(e.data,32);for(;e.position<e.length;){let a=F.Tokenizer.readLine(e);if(a.startsWith(tk))break;if(a&&a.startsWith("> ")){F.c.add(t,e.tokenStart+2,e.tokenEnd),F.Tokenizer.markLine(e);let a=e.tokenStart,n=e.tokenEnd,i=!1;for(;e.position<e.length;){let t=F.Tokenizer.readLine(e);if(!t||t.startsWith(tk)||t.startsWith("> ")){F.c.add(r,a,n),i=!0;break}n=e.tokenEnd}i||F.c.add(r,a,n)}}return{dataHeader:(0,ew.Lq)(t)(R.sg.Schema.str),data:(0,ew.Lq)(r)(R.sg.Schema.str)}}(e);return{molFile:{title:t,program:r,comment:a,atoms:u,bonds:c,...d},dataItems:p}}(t);e&&r.push(e)}return k.X.success({compounds:r})})(r))).runInContext(t);if(a.isError)throw Error(a.message);let n=[];for(let e of a.result.compounds){let r=await (function(e){return B.iQ.create("Parse SDF",t=>eZ(e.molFile,E.create(e),t))})(e).runInContext(t);for(let e=0;e<r.frameCount;e++)n.push(await B.iQ.resolveInContext(r.getFrameAtIndex(e),t))}let i=new eF.ArrayTrajectory(n),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),ri=ej.E.BuiltIn({name:"trajectory-from-mol2",display:{name:"Parse MOL2",description:"Parse MOL2 string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL2",async t=>{var r,a,n;let i=await (r=e.data,a=e.label,B.iQ.create("Parse MOL2",async e=>await tr(e,r,a))).runInContext(t);if(i.isError)throw Error(i.message);let o=await (n=i.result,B.iQ.create("Parse MOL2",e=>ta(n,e))).runInContext(t),s=t6(o);return new ej.G.Molecule.Trajectory(o,s)})}),ro=ej.E.BuiltIn({name:"trajectory-from-cube",display:{name:"Parse Cube",description:"Parse Cube file to create a trajectory."},from:ej.G.Format.Cube,to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse Cube",e=>e1(r,e))).runInContext(t),n=t6(a);return new ej.G.Molecule.Trajectory(a,n)})}),rs=ej.E.BuiltIn({name:"trajectory-from-cif-core",display:{name:"Parse CIF Core",description:"Identify and create all separate models in the specified CIF data block"},from:ej.G.Format.Cif,to:ej.G.Molecule.Trajectory,params(e){if(!e)return{blockHeader:W.e.Optional(W.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."}))};let{blocks:t}=e.data;return{blockHeader:W.e.Optional(W.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"}))}}})({apply:({a:e,params:t})=>B.iQ.create("Parse CIF Core",async r=>{let a=t.blockHeader||e.data.blocks[0].header,n=e.data.blocks.find(e=>e.header===a);if(!n)throw Error(`Data block '${[a]}' not found.`);let i=await (function(e){let t=T.fromFrame(e);return B.iQ.create("Parse CIF Core",e=>e0(t.data.db,t,e))})(n).runInContext(r);if(0===i.frameCount)throw Error("No models found.");let o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rl=e=>e+1,ru=e=>e-1,rc=ej.E.BuiltIn({name:"model-from-trajectory",display:{name:"Molecular Model",description:"Create a molecular model from specified index in a trajectory."},from:ej.G.Molecule.Trajectory,to:ej.G.Molecule.Model,params:e=>e?{modelIndex:W.e.Converted(rl,ru,W.e.Numeric(1,{min:1,max:e.data.frameCount,step:1},{description:"Model Index",immediateUpdate:!0}))}:{modelIndex:W.e.Numeric(0,{},{description:"Zero-based index of the model",immediateUpdate:!0})}})({isApplicable:e=>e.data.frameCount>0,apply:({a:e,params:t})=>B.iQ.create("Model from Trajectory",async r=>{let a=Math.round(t.modelIndex)%e.data.frameCount;a<0&&(a+=e.data.frameCount);let n=await B.iQ.resolveInContext(e.data.getFrameAtIndex(a),r),i=`Model ${a+1}`,o=1===e.data.frameCount?void 0:`of ${e.data.frameCount}`;return new ej.G.Molecule.Model(n,{label:i,description:o})}),interpolate:(e,t,r)=>({modelIndex:r>=1?t.modelIndex:e.modelIndex+Math.floor((t.modelIndex-e.modelIndex+1)*r)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),rd=ej.E.BuiltIn({name:"structure-from-trajectory",display:{name:"Structure from Trajectory",description:"Create a molecular structure from a trajectory."},from:ej.G.Molecule.Trajectory,to:ej.G.Molecule.Structure})({apply:({a:e})=>B.iQ.create("Build Structure",async t=>{let r=await eF.Structure.ofTrajectory(e.data,t),a={label:"Ensemble",description:eF.Structure.elementDescription(r)};return new ej.G.Molecule.Structure(r,a)}),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rp=ej.E.BuiltIn({name:"structure-from-model",display:{name:"Structure",description:"Create a molecular structure (model, assembly, or symmetry) from the specified model."},from:ej.G.Molecule.Model,to:ej.G.Molecule.Structure,params:e=>eU.$.getParams(e&&e.data)})({canAutoUpdate:({oldParams:e,newParams:t})=>eU.$.canAutoUpdate(e.type,t.type),apply:({a:e,params:t},r)=>B.iQ.create("Build Structure",async a=>eU.$.create(r,a,e.data,t&&t.type)),update:({a:e,b:t,oldParams:r,newParams:a})=>(0,eG.vZ)(r,a)?t.data.model===e.data?eN.td.UpdateResult.Unchanged:eF.Model.areHierarchiesEqual(e.data,t.data.model)?(t.data=t.data.remapModel(e.data),eN.td.UpdateResult.Updated):eN.td.UpdateResult.Recreate:eN.td.UpdateResult.Recreate,dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rf=ej.E.BuiltIn({name:"transform-structure-conformation",display:{name:"Transform Conformation"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{transform:tK.KD}})({canAutoUpdate:({newParams:e})=>"matrix"!==e.transform.name,apply({a:e,params:t}){let r=(0,tK.sj)(t.transform)?e.data.boundary.sphere.center:G.AO.unit,a=(0,tK.Gl)(t.transform,r),n=eF.Structure.transform(e.data,a);return new ej.G.Molecule.Structure(n,{label:e.label,description:`${e.description} [Transformed]`})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rm=ej.E.BuiltIn({name:"structure-instances",display:{name:"Structure Instances"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{transforms:W.e.ObjectList({transform:tK.KD},()=>"Transform")}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=t.transforms.some(e=>(0,tK.sj)(e.transform))?e.data.boundary.sphere.center:G.AO.unit,a=t.transforms.map(e=>(0,tK.Gl)(e.transform,r));if(!a.length)return e;let n=eF.Structure.instances(e.data,a);return new ej.G.Molecule.Structure(n,{label:e.label,description:`${e.description} [Instanced]`})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rh=ej.E.BuiltIn({name:"model-with-coordinates",display:{name:"Model With Coordinates",description:"Updates the current model with provided coordinate frame"},from:ej.G.Molecule.Model,to:ej.G.Molecule.Model,params:{frameIndex:W.e.Optional(W.e.Numeric(0,void 0,{isHidden:!0})),frameCount:W.e.Optional(W.e.Numeric(1,void 0,{isHidden:!0})),atomicCoordinateFrame:W.e.Optional(W.e.Value(void 0,{isHidden:!0}))},isDecorator:!0})({apply({a:e,params:t}){var r,a;if(!t.atomicCoordinateFrame)return e;let n={...e.data,atomicConformation:eF.Model.getAtomicConformationFromFrame
7319(e.data,t.atomicCoordinateFrame)};return eF.Model.TrajectoryInfo.set(n,{index:null!==(r=t.frameIndex)&&void 0!==r?r:0,size:null!==(a=t.frameCount)&&void 0!==a?a:1}),new ej.G.Molecule.Model(n,{label:e.label,description:e.description})},update:({a:e,b:t,oldParams:r,newParams:a})=>{var n,i;return r.atomicCoordinateFrame===a.atomicCoordinateFrame?eN.td.UpdateResult.Unchanged:(a.atomicCoordinateFrame?t.data={...t.data,atomicConformation:eF.Model.getAtomicConformationFromFrame(t.data,a.atomicCoordinateFrame)}:t.data=e.data,eF.Model.TrajectoryInfo.set(t.data,{index:null!==(n=a.frameIndex)&&void 0!==n?n:0,size:null!==(i=a.frameCount)&&void 0!==i?i:1}),eN.td.UpdateResult.Updated)}}),rg=ej.E.BuiltIn({name:"structure-selection-from-expression",display:{name:"Selection",description:"Create a molecular structure from the specified expression."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({expression:W.e.Value(eL.MolScriptBuilder.struct.generator.all,{isHidden:!0}),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){let{selection:a,entry:n}=x.createAndRun(e.data,t.expression);if(r.entry=n,eF.StructureSelection.isEmpty(a))return eN.lZ.Null;let i=eF.StructureSelection.unionStructure(a),o={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(i)};return new ej.G.Molecule.Structure(i,o)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(r.expression!==a.expression)return eN.td.UpdateResult.Recreate;let i=n.entry;if(i.currentStructure===e.data)return eN.td.UpdateResult.Unchanged;let o=x.updateStructure(i,e.data);return eF.StructureSelection.isEmpty(o)?eN.td.UpdateResult.Null:(x.updateStructureObject(t,o,a.label),eN.td.UpdateResult.Updated)},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rv=ej.E.BuiltIn({name:"structure-multi-selection-from-expression",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:ej.G.Root,to:ej.G.Molecule.Structure.Selections,params:()=>({selections:W.e.ObjectList({key:W.e.Text(void 0,{description:"A unique key."}),ref:W.e.Text(),groupId:W.e.Optional(W.e.Text()),expression:W.e.Value(eL.MolScriptBuilder.struct.generator.empty)},e=>e.ref,{isHidden:!0}),isTransitive:W.e.Optional(W.e.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let a=new Map,n=[],i=0;for(let t of e.selections){let{selection:e,entry:o}=x.createAndRun(r[t.ref].data,t.expression);a.set(t.key,o);let s=eF.StructureSelection.toLociWithSourceUnits(e);n.push({key:t.key,structureRef:t.ref,loci:s,groupId:t.groupId}),i+=eF.StructureElement.Loci.size(s)}t.entries=a;let o={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new ej.G.Molecule.Structure.Selections(n,o)},update:({b:e,oldParams:t,newParams:r,cache:a,dependencies:n})=>{if(!!t.isTransitive!=!!r.isTransitive)return eN.td.UpdateResult.Recreate;let i=a.entries,o=new Map,s=new Map;for(let t of e.data)s.set(t.key,t);let l=!1,u=0,c=[];for(let e of r.selections){let t=n[e.ref].data,a=!1;if(i.has(e.key)){let n=i.get(e.key);if(x.isUnchanged(n,e.expression,t)&&s.has(e.key)){let t=s.get(e.key);t.groupId!==e.groupId&&(t.groupId=e.groupId,l=!0),o.set(e.key,n),c.push(t),u+=eF.StructureElement.Loci.size(t.loci);continue}if(n.expression!==e.expression)a=!0;else{let a=!1;if(r.isTransitive){if(eF.Structure.areUnitIdsAndIndicesEqual(n.originalStructure,t)){let r=x.run(n,n.originalStructure);n.currentStructure=t,o.set(e.key,n);let a=eF.StructureElement.Loci.remap(eF.StructureSelection.toLociWithSourceUnits(r),t);c.push({key:e.key,structureRef:e.ref,loci:a,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(a),l=!0}else a=!0}else a=!0;if(a){l=!0;let r=x.updateStructure(n,t);o.set(e.key,n);let a=eF.StructureSelection.toLociWithSourceUnits(r);c.push({key:e.key,structureRef:e.ref,loci:a,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(a)}}}else a=!0;if(a){l=!0;let{selection:r,entry:a}=x.createAndRun(t,e.expression);o.set(e.key,a);let n=eF.StructureSelection.toLociWithSourceUnits(r);c.push({key:e.key,structureRef:e.ref,loci:n,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(n)}}
7319return l?(a.entries=o,e.data=c,e.label=`${r.label||"Multi-selection"}`,e.description=`${c.length} source(s), ${u} element(s) total`,eN.td.UpdateResult.Updated):eN.td.UpdateResult.Unchanged}}),rb=ej.E.BuiltIn({name:"structure-multi-selection-from-bundle",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:ej.G.Root,to:ej.G.Molecule.Structure.Selections,params:()=>({selections:W.e.ObjectList({key:W.e.Text(void 0,{description:"A unique key."}),ref:W.e.Text(),groupId:W.e.Optional(W.e.Text()),bundle:W.e.Value(eF.StructureElement.Bundle.Empty)},e=>e.ref,{isHidden:!0}),isTransitive:W.e.Optional(W.e.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let a=new Map,n=[],i=0;for(let t of e.selections){let e=r[t.ref].data,o=eF.StructureElement.Bundle.toLoci(t.bundle,e);n.push({key:t.key,structureRef:t.ref,loci:o,groupId:t.groupId}),i+=eF.StructureElement.Loci.size(o),a.set(t.key,{source:e})}t.entries=a;let o={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new ej.G.Molecule.Structure.Selections(n,o)},update:({b:e,oldParams:t,newParams:r,cache:a,dependencies:n})=>{if(!!t.isTransitive!=!!r.isTransitive)return eN.td.UpdateResult.Recreate;let i=a.entries,o=new Map,s=new Map;for(let e of t.selections)s.set(e.key,e.bundle);let l=new Map;for(let t of e.data)l.set(t.key,t);let u=!1,c=0,d=[];for(let e of r.selections){let t=!1;if(i.has(e.key)){let r=n[e.ref].data,a=i.get(e.key),p=s.get(e.key);if(p&&r===a.source&&e.bundle.hash===a.source.hashCode&&eF.StructureElement.Bundle.areEqual(e.bundle,p)){let t=l.get(e.key);t.groupId!==e.groupId&&(t.groupId=e.groupId,u=!0),o.set(e.key,a),d.push(t),c+=eF.StructureElement.Loci.size(t.loci);continue}t=!0}else t=!0;if(t){u=!0;let t=n[e.ref].data,r=eF.StructureElement.Bundle.toLoci(e.bundle,t);d.push({key:e.key,structureRef:e.ref,loci:r,groupId:e.groupId}),c+=eF.StructureElement.Loci.size(r),o.set(e.key,{source:t})}}return u?(a.entries=o,e.data=d,e.label=`${r.label||"Multi-selection"}`,e.description=`${d.length} source(s), ${c} element(s) total`,eN.td.UpdateResult.Updated):eN.td.UpdateResult.Unchanged}}),ry=ej.E.BuiltIn({name:"structure-selection-from-script",display:{name:"Selection",description:"Create a molecular structure from the specified script."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({script:W.e.Script({language:"mol-script",expression:"(sel.atom.atom-groups :residue-test (= atom.resname ALA))"}),label:W.e.Optional(W.e.Text(""))})})({apply({a:e,params:t,cache:r}){let{selection:a,entry:n}=x.createAndRun(e.data,t.script);r.entry=n;let i=eF.StructureSelection.unionStructure(a),o={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(i)};return new ej.G.Molecule.Structure(i,o)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(!ez.Script.areEqual(r.script,a.script))return eN.td.UpdateResult.Recreate;let i=n.entry;if(i.currentStructure===e.data)return eN.td.UpdateResult.Unchanged;let o=x.updateStructure(i,e.data);return x.updateStructureObject(t,o,a.label),eN.td.UpdateResult.Updated},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rx=ej.E.BuiltIn({name:"structure-selection-from-bundle",display:{name:"Selection",description:"Create a molecular structure from the specified structure-element bundle."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({bundle:W.e.Value(eF.StructureElement.Bundle.Empty,{isHidden:!0}),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){if(t.bundle.hash!==e.data.hashCode)return eN.lZ.Null;r.source=e.data;let a=eF.StructureElement.Bundle.toStructure(t.bundle,e.data);if(0===a.elementCount)return eN.lZ.Null;let n={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(a)};return new ej.G.Molecule.Structure(a,n)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(!eF.StructureElement.Bundle.areEqual(r.bundle,a.bundle))return eN.td.UpdateResult.Recreate;if(a.bundle.hash!==e.data.hashCode)return eN.td.UpdateResult.Null;if(n.source===e.data)return eN.td.UpdateResult.Unchanged;n.source=e.data;let i=eF.StructureElement.Bundle.toStructure(a.bundle,e.data);return 0===i.elementCount?eN.td.UpdateResult.Null:(t.label=`${a.label||"Selection"}`,t.description=eF.Structure.elementDescription(i),t.data=i,eN.td.UpdateResult.Updated)},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}
7319),rS={polymer:"polymer",protein:"protein",nucleic:"nucleic",water:"water",branched:"branched",ligand:"ligand","non-standard":"non-standard",coarse:"coarse","atomic-sequence":"atomic-sequence","atomic-het":"atomic-het",spheres:"spheres"},rT=W.e.objectToOptions(rS),rC=ej.E.BuiltIn({name:"structure-complex-element",display:{name:"Complex Element",description:"Create a molecular structure from the specified model."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{type:W.e.Select("atomic-sequence",rT,{isHidden:!0})}})({apply({a:e,params:t}){let r,a;switch(t.type){case"polymer":r=eH.fS.polymer.query,a="Polymer";break;case"protein":r=eH.fS.protein.query,a="Protein";break;case"nucleic":r=eH.fS.nucleic.query,a="Nucleic";break;case"water":r=eF.Queries.internal.water(),a="Water";break;case"branched":r=eH.fS.branchedPlusConnected.query,a="Branched";break;case"ligand":r=eH.fS.ligandPlusConnected.query,a="Ligand";break;case"non-standard":r=eH.fS.nonStandardPolymer.query,a="Non-standard";break;case"coarse":r=eH.fS.coarse.query,a="Coarse";break;case"atomic-sequence":r=eF.Queries.internal.atomicSequence(),a="Sequence";break;case"atomic-het":r=eF.Queries.internal.atomicHet(),a="HET Groups/Ligands";break;case"spheres":r=eF.Queries.internal.spheres(),a="Coarse Spheres";break;default:(0,eq.UT)(t.type)}let n=r(new eF.QueryContext(e.data)),i=eF.StructureSelection.unionStructure(n);return 0===i.elementCount?eN.lZ.Null:new ej.G.Molecule.Structure(i,{label:a,description:eF.Structure.elementDescription(i)})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rO=ej.E.BuiltIn({name:"structure-component",display:{name:"Component",description:"A molecular structure component."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({type:W.e.MappedStatic("static",{static:W.e.Text("polymer"),expression:W.e.Value(eL.MolScriptBuilder.struct.generator.all),bundle:W.e.Value(eF.StructureElement.Bundle.Empty),script:W.e.Script({language:"mol-script",expression:"(sel.atom.all)"})},{isHidden:!0}),nullIfEmpty:W.e.Optional(W.e.Boolean(!0,{isHidden:!0})),label:W.e.Text("",{isHidden:!0})})})({apply:({a:e,params:t,cache:r})=>(function(e,t,r){let a;r.source=e;let n=eF.Structure.Empty;switch(t.type.name){case"static":{let r;switch(t.type.params){case"all":r=eH.fS.all.query,a="All";break;case"polymer":r=eH.fS.polymer.query,a="Polymer";break;case"protein":r=eH.fS.protein.query,a="Protein";break;case"nucleic":r=eH.fS.nucleic.query,a="Nucleic";break;case"water":r=eF.Queries.internal.water(),a="Water";break;case"ion":r=eH.fS.ion.query,a="Ion";break;case"lipid":r=eH.fS.lipid.query,a="Lipid";break;case"branched":r=eH.fS.branchedPlusConnected.query,a="Branched";break;case"ligand":r=eH.fS.ligandPlusConnected.query,a="Ligand";break;case"non-standard":r=eH.fS.nonStandardPolymer.query,a="Non-standard";break;case"coarse":r=eH.fS.coarse.query,a="Coarse";break;default:(0,eq.UT)(t.type)}let i=r(new eF.QueryContext(e));n=eF.StructureSelection.unionStructure(i);break}case"script":case"expression":{let{selection:a,entry:i}=x.createAndRun(e,t.type.params);r.entry=i,n=eF.StructureSelection.unionStructure(a);break}case"bundle":if(t.type.params.hash!==e.hashCode)break;n=eF.StructureElement.Bundle.toStructure(t.type.params,e)}if(t.nullIfEmpty&&0===n.elementCount)return eN.lZ.Null;let i={label:`${t.label||a||"Component"}`,description:eF.Structure.elementDescription(n)};return new ej.G.Molecule.Structure(n,i)})(e.data,t,r),update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>(function(e,t,r,a,n){if(r.type.name!==a.type.name)return eN.td.UpdateResult.Recreate;let i=!1;switch(a.type.name){case"static":if(r.type.params!==a.type.params||!eF.Structure.areEquivalent(e,n.source))return eN.td.UpdateResult.Recreate;if(t.data.model===e.model)return eN.td.UpdateResult.Unchanged;if(!eF.Model.areHierarchiesEqual(e.model,t.data.model))return eN.td.UpdateResult.Recreate;return t.data=t.data.remapModel(e.model),eN.td.UpdateResult.Updated;case"script":if(!ez.Script.areEqual(r.type.params,a.type.params))return eN.td.UpdateResult.Recreate;case"expression":{if(r.type.params!==a.type.params)return eN.td.UpdateResult.Recreate;if(e===n.source)break;let o=n.entry,s=x.updateStructure(o,e);
7319n.source=e,t.data=eF.StructureSelection.unionStructure(s),x.updateStructureObject(t,s,a.label),i=!0;break}case"bundle":if(e===n.source&&eF.StructureElement.Bundle.areEqual(r.type.params,a.type.params))break;n.source=e,a.type.params.hash!==e.hashCode?(i=0!==t.data.elementCount,t.data=0===t.data.elementCount?t.data:eF.Structure.Empty):(i=!0,t.data=eF.StructureElement.Bundle.toStructure(a.type.params,e))}if(i){if(a.nullIfEmpty&&0===t.data.elementCount)return eN.td.UpdateResult.Null;t.description=eF.Structure.elementDescription(t.data)}return r.label!==a.label&&(i=!0,t.label=`${a.label||t.label}`),i?eN.td.UpdateResult.Updated:eN.td.UpdateResult.Unchanged})(e.data,t,r,a,n),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rI=ej.E.BuiltIn({name:"custom-model-properties",display:{name:"Custom Model Properties"},isDecorator:!0,from:ej.G.Molecule.Model,to:ej.G.Molecule.Model,params:(e,t)=>t.customModelProperties.getParams(null==e?void 0:e.data)})({apply:({a:e,params:t},r)=>B.iQ.create("Custom Props",async a=>(await rA(e.data,r,a,t),new ej.G.Molecule.Model(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>B.iQ.create("Custom Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customModelProperties.get(a);t&&e.data.customProperties.reference(t.descriptor,!1)}return await rA(e.data,n,i,a),eN.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customProperties.dispose()}});async function rA(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customModelProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching model prop '${r}': ${e}`)}else a.set(e,s)}}let rw=ej.E.BuiltIn({name:"custom-structure-properties",display:{name:"Custom Structure Properties"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:(e,t)=>t.customStructureProperties.getParams(null==e?void 0:e.data.root)})({apply:({a:e,params:t},r)=>B.iQ.create("Custom Props",async a=>(await rD(e.data.root,r,a,t),new ej.G.Molecule.Structure(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>e.data!==t.data?eN.td.UpdateResult.Recreate:B.iQ.create("Custom Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customStructureProperties.get(a);t&&e.data.customPropertyDescriptors.reference(t.descriptor,!1)}return await rD(e.data.root,n,i,a),eN.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}});async function rD(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customStructureProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching structure prop '${r}': ${e}`)}else a.set(e,s)}}let rE=ej.E.BuiltIn({name:"shape-from-ply",display:{name:"Shape from PLY",description:"Create Shape from PLY data"},from:ej.G.Format.Ply,to:ej.G.Shape.Provider,params:e=>({transforms:W.e.Optional(W.e.Value([],{isHidden:!0})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply:({a:e,params:t})=>B.iQ.create("Create shape from PLY",async r=>{var a;let n=await (a=e.data,B.iQ.create("Shape Provider",async e=>{let r,n,i,o,s,l;return{label:"Mesh",data:{source:a,transforms:null==t?void 0:t.transforms},params:$(a),getShape:async(e,t,a,u)=>{let c=t.source.getElement("vertex");if(!c)throw Error("missing vertex element");let d=t.source.getElement("face");if(!d)throw Error("missing face element");let p=t.source.getElement("material"),f=!1,m=!1;return r&&r===t||(f=!0),n&&W.e.isParamEqual(J.grouping,n.grouping,a.grouping)||(f=!0),n&&W.e.isParamEqual(J.coloring,n.coloring,a.coloring)||(m=!0),f?(s=er(c,p,a),l=function(e,t){let{grouping:r}=t,{rowCount:a}=e,n="vertex"===r.name?e.getProperty(r.params.group):void 0,i="vertex"===r.
7319name?(0,Z.ce)(r.params.group):"Vertex",o=n?n.toArray({array:Uint32Array}):(0,X.d_)(new Uint32Array(a)),s=new Uint32Array((n?(0,X.uH)(o):a-1)+1);for(let e=0,t=o.length;e<t;++e)s[o[e]]=e;return{ids:o,map:s,label:i}}(c,a),i=ea(t,o=await ee(e,c,d,l.ids,u&&u.geometry),s,l)):m&&(s=er(c,p,a),i=ea(t,o,s,l)),r=t,n=(0,Q.I8)(a),i},geometryUtils:j.K.Utils}})).runInContext(r),i={label:t.label||"Shape"};return new ej.G.Shape.Provider(n,i)})})},10515:function(e,t,r){r.r(t),r.d(t,{ClippingStructureRepresentation3DFromBundle:function(){return t9},ClippingStructureRepresentation3DFromScript:function(){return t7},EmissiveStructureRepresentation3DFromBundle:function(){return t5},EmissiveStructureRepresentation3DFromScript:function(){return t4},ExplodeStructureRepresentation3D:function(){return t$},ModelUnitcell3D:function(){return ra},OverpaintStructureRepresentation3DFromBundle:function(){return t1},OverpaintStructureRepresentation3DFromScript:function(){return t0},ShapeRepresentation3D:function(){return rr},SpinStructureRepresentation3D:function(){return tJ},StructureBoundingBox3D:function(){return rn},StructureRepresentation3D:function(){return tZ},StructureSelectionsAngle3D:function(){return ro},StructureSelectionsDihedral3D:function(){return rs},StructureSelectionsDistance3D:function(){return ri},StructureSelectionsLabel3D:function(){return rl},StructureSelectionsOrientation3D:function(){return ru},StructureSelectionsPlane3D:function(){return rc},SubstanceStructureRepresentation3DFromBundle:function(){return t8},SubstanceStructureRepresentation3DFromScript:function(){return t6},ThemeStrengthRepresentation3D:function(){return re},TransparencyStructureRepresentation3DFromBundle:function(){return t3},TransparencyStructureRepresentation3DFromScript:function(){return t2},UnwindStructureAssemblyRepresentation3D:function(){return tY},VolumeRepresentation3D:function(){return rt},VolumeRepresentation3DHelpers:function(){return n}});var a,n,i=r(30502),o=r(1573),s=r(67801),l=r(54854),u=r(60843),c=r(14086),d=r(72762),p=r(7922),f=r(11803),m=r(7791),h=r(93898),g=r(89987),b=r(67241),y=r(11650),x=r
7319(85688),S=r(99289),T=r(85764),C=r(69587),O=r(17411),I=r(67589),A=r(34526),w=r(80898),D=r(30131),E=r(48502);function M(e,t,r={}){let a,n,i,o,s=0,d=new g.x,p=m.hX.createState(),M=(0,b.xH)(),P=[],k=-1,B=u.Q.createEmpty(),_=t.Params,R=c.e.getDefaultValues(_);r.modifyState&&m.hX.updateState(p,r.modifyState(p));let F=y.wV.create();function L(e,t){return(0,I.h)(e)||h.b.isLoci(e)&&e.shape===n?t(R.instanceGranularity?A.Xp.ofBounds(0,n.transforms.length):A.Xp.ofBounds(0,n.groupCount*n.transforms.length)):R.instanceGranularity?function(e,t,r){let a=!1;if(!h.F.isLoci(e)||h.F.isLociEmpty(e)||e.shape!==t)return!1;for(let t of e.groups)r(A.Xp.ofSingleton(t.instance))&&(a=!0);return a}(e,n,t):function(e,t,r){if(!h.F.isLoci(e)||e.shape!==t)return!1;let a=!1,{groupCount:n}=t,{groups:i}=e;for(let{ids:e,instance:t}of i)if(A.Xp.is(e)){let i=t*n+A.Xp.start(e),o=t*n+A.Xp.end(e);r(A.Xp.ofBounds(i,o))&&(a=!0)}else for(let i=0,o=e.length;i<o;i++){let o=t*n+e[i];r(A.Xp.ofSingleton(o))&&(a=!0)}return a}(e,n,t)}return{label:"Shape geometry",get groupCount(){return i?i.count:0},get props(){return R},get params(){return _},get state(){return p},get theme(){return B},renderObjects:P,get geometryVersion(){return k},updated:d,createOrUpdate:function(u={},c){return r.modifyProps&&(u=r.modifyProps(u)),l.iQ.create("ShapeRepresentation.create",async l=>{let g=Object.assign(R,u),S=c?await e(l,c,g,n):void 0;if(function(e={},t){y.wV.reset(F),(t||n)&&(t&&!n?F.createNew=!0:t&&n&&t.id===n.id||(t&&n&&t.id!==n.id?(F.updateTransform=!0,F.createGeometry=!0):t&&console.warn("unexpected state")),e.instanceGranularity!==R.instanceGranularity&&(F.updateTransform=!0),F.updateTransform&&(F.updateColor=!0,F.updateSize=!0,F.updateMatrix=!0),F.createGeometry&&(F.updateColor=!0,F.updateSize=!0))}(u,S),S&&(n=S,Object.assign(B,h.b.getTheme(n))),F.createNew){P.length=0,i=h.b.groupIterator(n);let e=h.b.createTransform(n.transforms,n.geometry.boundingSphere,g.cellSize,g.batchSize),s=t.createValues(n.geometry,e,i,B,g),l=t.createRenderableState(g);r.modifyState&&Object.assign(l,r.modifyState(l)),m.hX.updateState(p,l),(a=(0,b.Hq)(n.geometry.kind,s,l,M))&&P.push(a),o=t.createPositionIterator(n.geometry,a.values)}else{if(!a)throw Error("expected renderObject to be available");if(F.updateTransform){let{instanceCount:e,groupCount:t}=i=h.b.groupIterator(n);u.instanceGranularity?(0,x.eL)(e,"instance",a.values):(0,x.eL)(e*t,"groupInstance",a.values)}F.updateMatrix&&(h.b.createTransform(n.transforms,n.geometry.boundingSphere,g.cellSize,g.batchSize,a.values),"lodLevels"in a.values&&T.IO.update(a.values.lodLevels,a.values.lodLevels.ref.value)),F.createGeometry&&(T.IO.updateIfChanged(a.values.drawCount,f.Z.getDrawCount(n.geometry)),T.IO.updateIfChanged(a.values.uVertexCount,f.Z.getVertexCount(n.geometry)),T.IO.updateIfChanged(a.values.uGroupCount,i.groupCount)),F.updateColor&&(0,C.is)(i,o,B.color,a.values),F.updateSize&&"uSize"in a.values&&(0,O.H4)(i,o,B.size,a.values),t.updateValues(a.values,g),t.updateRenderableState(a.state,g),(F.updateTransform||F.createGeometry)&&(t.updateBoundingSphere(a.values,n.geometry),o=t.createPositionIterator(n.geometry,a.values))}R=g,(F.createGeometry||F.createNew)&&(k+=1),d.next(s++)})},getLoci(e){let{objectId:t,groupId:r,instanceId:i}=e;return a&&a.id===t?r===w.i.Null?h.b.Loci(n):h.F.Loci(n,[{ids:A.hU.ofSingleton(r),instance:i}]):I.Rh},getAllLoci:()=>[h.b.Loci(n)],eachLocation:e=>{for(i.reset();i.hasNext;){let{location:t,isSecondary:r}=i.move();e(t,r)}},mark(e,t){if(!S.E5.is(p.markerActions,t))return!1;if(h.F.isLoci(e)||h.b.isLoci(e)){if(e.shape!==n)return!1}else if(!(0,I.h)(e))return!1;return D.u.mark(a,e,t,L)},setState(e){r.modifyState&&(e=r.modifyState(e)),a&&(void 0!==e.visible&&D.u.setVisibility(a,e.visible),void 0!==e.alphaFactor&&D.u.setAlphaFactor(a,e.alphaFactor),void 0!==e.pickable&&D.u.setPickable(a,e.pickable),void 0!==e.colorOnly&&D.u.setColorOnly(a,e.colorOnly),void 0!==e.overpaint&&D.u.setOverpaint(a,e.overpaint,L,!0),void 0!==e.transparency&&D.u.setTransparency(a,e.transparency,L,!0),void 0!==e.substance&&D.u.setSubstance(a,e.substance,L,!0),void 0!==e.transform&&D.u.setTransform(a,e.transform)),m.hX.updateState(p,e)},setTheme(e){E.Au&&console.warn("The `ShapeRepresentation` theme is fixed to `ShapeGroupColorTheme` and `ShapeGroupSizeTheme`. Colors are taken from `Shape.getColor` and sizes from `Shape.getSize`")},destroy(){P.length=0,a&&(a.state.disposed=!0,a=void 0)}}}var P=r(87144),k=r(41306);let B=(0,P.yb)();class _{constructor(e){this.structure=e,this.groupUnitTransforms=[],this.unitOffsetMap=A.Ol.Mutable(),this.groupIndexMap=new Map,this._isIdentity=void 0,this.version=0,this.unitTransforms=new Float32Array(16*e.units.length),this.size=e.units.length,this.reset();let t=0;for(let r=0,a=e.unitSymmetryGroups.length;r<a;++r){let a=e.unitSymmetryGroups[r];this.groupIndexMap.set(a,r);let n=this.unitTransforms.subarray(t,t+16*a.units.length);this.groupUnitTransforms.push(n);for(let e=0,r=a.units.length;e<r;++e)this.unitOffsetMap.set(a.units[e].id,t+16*e);t+=16*a.units.length}}reset(){this.version=0,(0,k.Sj)(this.unitTransforms,this.size),this._isIdentity=!0}get isIdentity(){if(void 0===this._isIdentity){this._isIdentity=!0;for(let e=0,t=16*this.size;e<t;e+=16)if(P.yb.fromArray(B,this.unitTransforms,e),!P.yb.isIdentity(B)){this._isIdentity=!1;break}}return this._isIdentity}setTransform(e,t){this.version=(this.version+1)%2147483647,P.yb.toArray(e,this.unitTransforms,this.unitOffsetMap.get(t.id)),this._isIdentity=void 0}getTransform(e,t){return P.yb.fromArray(e,this.unitTransforms,this.unitOffsetMap.get(t.id))}getSymmetryGroupTransforms(e){return this.groupUnitTransforms[this.groupIndexMap.get(e)]}}var R=r(48930);let F=(0,P.yb)();function L(e,t,r){for(let a=0,n=e.units.length;a<n;a++){let n=e.units[a];R.mj.lerpFromIdentity(F,n.conformation.operator,r),t.setTransform(F,n)}}let z=(0,P.AO)(),N=(0,P.AO)(),G=(0,P.yb)();function U(e,t,r,a){let n=a.radius*r;for(let r=0,i=e.units.length;r<i;r++){let i=e.units[r];P.AO.transformMat4(z,i.lookup3d.boundary.sphere.center,i.conformation.operator.matrix),P.AO.sub(N,z,a.center),P.AO.setMagnitude(N,N,n),P.yb.fromTranslation(G,N),t.setTransform(G,i)}}let V={axis:c.e.MappedStatic("custom",{structure:c.e.Group({principalAxis:c.e.Select("dirA",[["dirA","A"],["dirB","B"],["dirC","C"]])}),custom:c.e.Group({vector:c.e.Vec3(P.AO.create(0,0,1))})}),origin:c.e.MappedStatic("structure",{structure:c.e.Group({}),custom:c.e.Group({vector:c.e.Vec3(P.AO.create(0,0,0))})})};function j(e,t){return{axis:"custom"===t.axis.name?t.axis.params.vector:i.Structure.getPrincipalAxes(e).momentsAxes[t.axis.params.principalAxis],origin:"custom"===t.origin.name?t.origin.params.vector:i.Structure.getPrincipalAxes(e).momentsAxes.origin}}let H=(0,P.yb)(),q=(0,P.yb)(),X=(0,P.yb)();function W(e,t,r,a,n){for(let i=0,o=e.units.length;i<o;i++){let o=e.units[i];P.AO.negate(N,n),P.yb.fromTranslation(G,N),P.yb.fromRotation(H,Math.PI*r*2,a),P.yb.fromTranslation(q,n),P.yb.mul(X,H,G),P.yb.mul(X,q,X),t.setTransform(X,o)}}var K=r(70371),Q=r(30481),Z=r(65109),Y=r(54185),$=r(20694),J=r(4376),ee=r(89623),et=r(70759),er=r(16207);let ea=P.yb.fromTranslation((0,P.yb)(),P.AO.create(.5,.5,.5)),en=(0,er.gW)((0,er.iC)((0,et.pE)()),ea),ei=(0,P.AO)(),eo=(0,P.yb)(),es={...J.K.Params,cellColor:c.e.Color(p.t.orange),cellScale:c.e.Numeric(2,{min:.1,max:5,step:.1}),ref:c.e.Select("model",c.e.objectToOptions({origin:"Origin",model:"Model"}),{isEssential:!0}),attachment:c.e.Select("corner",c.e.objectToOptions({corner:"Corner",center:"Center"}),{isEssential:!0})},el={mesh:(e,t)=>M(ec,J.K.Utils)},eu={...es};function ec(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),{fromFractional:n}=e.symmetry.spacegroup.cell;P.AO.copy(ei,e.ref),"center"===t.attachment?(P.AO.trunc(ei,ei),P.AO.subScalar(ei,ei,.5)):P.AO.floor(ei,ei),P.yb.fromTranslation(eo,ei);let i=(0,er.gW)((0,er.iC)(en),eo),o=Math.cbrt(e.symmetry.spacegroup.cell.volume)/300*t.cellScale;a.currentGroup=1,ee.V.addCage(a,n,i,o,2,20);let s=R.CP.fromDimensionsAndTransform((0,R.CP)(),P.AO.unit,n);P.AO.transformMat4(ei,ei,n),R.CP.translate(s,s,ei),R.CP.expand(s,s,o);let l=ee.V.getMesh(a);return l.setBoundingSphere(s),l}(t,r,a&&a.geometry),o=i.Symmetry.getUnitcellLabel(t.symmetry);return h.b.create(o,t,n,()=>r.cellColor,()=>1,()=>o)}function ed(e,t,r){let a=(0,P.AO)();return"model"===r.ref&&P.AO.transformMat4(a,i.Model.getCenter(e),t.spacegroup.cell.toFractional),{symmetry:t,ref:a}}var ep=r(96046),ef=r(21071),em=r(13070),eh=r(23844),eg=r(58202),ev=r(59071);let eb={unitLabel:c.e.Text("Å",{isEssential:!0})}
7319,ey={...ep.x.Params,...eb,lineSizeAttenuation:c.e.Boolean(!0),linesColor:c.e.Color(p.t.lightgreen,{isEssential:!0}),linesSize:c.e.Numeric(.075,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.2,{min:.01,max:.2,step:.01})},ex={...ev.i,...eb},eS={lines:(e,t)=>M(eA,ep.x.Utils,{modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(ew,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},eT={...ey,...ex,visuals:c.e.MultiSelect(["lines","text"],c.e.objectToOptions(eS))};function eC(e,t){let{sphereA:r,sphereB:a,center:n}=t,[i,o]=e.loci;return I.o_.getBoundingSphere(i,r),I.o_.getBoundingSphere(o,a),P.AO.add(n,r.center,a.center),P.AO.scale(n,n,.5),t.distance=P.AO.distance(r.center,a.center),t}let eO={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),center:(0,P.AO)(),distance:0};function eI(e,t){return 1===e.pairs.length?`Distance ${(0,eg.xf)(e.pairs[0],{unitLabel:t,measureOnly:!0})}`:`${e.pairs.length} Distances`}function eA(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.pairs.length;r<n;++r)eC(e.pairs[r],eO),a.addFixedLengthDashes(eO.sphereA.center,eO.sphereB.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=eI(t,r.unitLabel);return h.b.create(i,t,n,()=>r.linesColor,()=>r.linesSize,e=>(0,eg.xf)(t.pairs[e],r))}function ew(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.pairs.length;r<n;++r){eC(e.pairs[r],eO);let{center:n,distance:i,sphereA:o,sphereB:s}=eO,l=t.customText||`${i.toFixed(2)} ${t.unitLabel}`,u=Math.max(2,o.radius,s.radius)/2;a.add(l,n[0],n[1],n[2],1,u,r)}return a.getText()}(t,r,a&&a.geometry),i=eI(t,r.unitLabel);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.xf)(t.pairs[e],r))}var eD=r(40208);let eE={...ev.i},eM={text:(e,t)=>M(e_,ef.x.Utils)},eP={...eE,scaleByRadius:c.e.Boolean(!0),visuals:c.e.MultiSelect(["text"],c.e.objectToOptions(eM)),snapshotKey:c.e.Text("",{isEssential:!0,disableInteractiveUpdates:!0,description:"Activate the snapshot with the provided key when clicking on the label"}),tooltip:c.e.Text("",{isEssential:!0,multiline:!0,disableInteractiveUpdates:!0,placeholder:"Tooltip",description:"Tooltip text to be displayed when hovering over the label"})},ek=(0,R.CP)();function eB(e,t=!1){return e.label||(0,eg.Ve)(e.loci,{hidePrefix:!0,htmlStyling:!1,condensed:t})}function e_(e,t,r,a){var n,i;let o;let s=function(e,t,r){let a=eh.w.create(t,128,64,r),n=t.customText.trim();for(let r=0,i=e.infos.length;r<i;++r){let i=e.infos[r],o=I.o_.getBoundingSphere(i.loci,ek);if(!o)continue;let{center:s,radius:l}=o,u=n||eB(i,!0);a.add(u,s[0],s[1],s[2],t.scaleByRadius?l/.9:0,t.scaleByRadius?Math.max(1,l):1,r)}return a.getText()}(t,r,a&&a.geometry),l=1===t.infos.length?eB(t.infos[0]):`${t.infos.length} Labels`,u=null!==(i=null===(n=r.tooltip)||void 0===n?void 0:n.trim())&&void 0!==i?i:"",c=r.customText.trim();return o=u?e=>u:c?e=>c:e=>eB(t.infos[e]),h.b.create(l,t,s,()=>r.textColor,()=>r.textSize,o)}let eR=(0,P.AO)(),eF=P.yb.identity(),eL=new Float32Array(18),ez=new Uint8Array([0,1,2,3,4,5]);r(84785),r(34748),P.AO.zero(),P.AO.zero();let eN=(0,P.AO)(),eG=(0,P.AO)(),eU=(0,P.AO)(),eV=(0,P.AO)(),ej=P.yb.identity(),eH=new Float32Array(24),eq=new Uint8Array([0,1,0,3,0,6,1,2,1,7,2,3,2,4,3,5,4,5,4,7,5,6,6,7]);var eX=r(98338);let eW={color:c.e.Color(p.t.orange),scaleFactor:c.e.Numeric(1,{min:.1,max:10,step:.1}),radiusScale:c.e.Numeric(2,{min:.1,max:10,step:.1})},eK={...J.K.Params,...eW},eQ={...J.K.Params,...eW},eZ={...J.K.Params,...eW},eY={axes:(e,t)=>M(eJ,J.K.Utils),box:(e,t)=>M(e0,J.K.Utils),ellipsoid:(e,t)=>M(e1,J.K.Utils)},e$={...eK,...eQ,...eZ,visuals:c.e.MultiSelect(["box"],c.e.objectToOptions(eY))};function eJ(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis);return R.QB.scale(n.momentsAxes,n.momentsAxes,t.scaleFactor),a.currentGroup=0,!function(e,t,r,a,n){let{origin:i,dirA:o,dirB:s,dirC:l}=t;P.AO.add(eR,i,o),P.AO.toArray(P.AO.add(eR,i,o),eL,0),P.AO.toArray(P.AO.sub(eR,i,o),eL,3),P.AO.toArray(P.AO.add(eR,i,s),eL,6),P.AO.toArray(P.AO.sub(eR,i,s),eL,9),P.AO.toArray(P.AO.add(eR,i,l),eL,12),P.AO.toArray(P.AO.sub(eR,i,l),eL,15);let u=(0,er.aK)(eL,ez),c=R.QB.volume(t);ee.V.addCage(e,eF,u,Math.cbrt(c)/300*r,2,20)}
7319(a,n.momentsAxes,t.radiusScale,0,0),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Principal Axes of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}function e0(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis);return R.QB.scale(n.boxAxes,n.boxAxes,t.scaleFactor),a.currentGroup=0,!function(e,t,r,a,n){let{origin:i,dirA:o,dirB:s,dirC:l}=t,u=P.AO.negate(eG,o),c=P.AO.negate(eU,s),d=P.AO.negate(eV,l),p=0,f=function(e,t,r){P.AO.copy(eN,i),P.AO.add(eN,eN,e),P.AO.add(eN,eN,t),P.AO.add(eN,eN,r),P.AO.toArray(eN,eH,p),p+=3};f(o,s,l),f(o,s,d),f(o,c,d),f(o,c,l),f(u,c,d),f(u,c,l),f(u,s,l),f(u,s,d);let m=(0,er.aK)(eH,eq),h=R.QB.volume(t);ee.V.addCage(e,ej,m,Math.cbrt(h)/300*r,2,20)}(a,n.boxAxes,t.radiusScale,0,0),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Oriented Box of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}function e1(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis).boxAxes,{origin:o,dirA:s,dirB:l}=n,u=R.QB.size((0,P.AO)(),n);P.AO.scale(u,u,.5*t.scaleFactor);let c=P.AO.create(u[2],u[1],u[0]);return a.currentGroup=0,(0,eX.j)(a,o,s,l,c,2),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Oriented Ellipsoid of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}var e2=r(58463);let e3={radius:1,segments:36,thetaStart:0,thetaLength:2*Math.PI};function e4(e){let{radius:t,segments:r,thetaStart:a,thetaLength:n}={...e3,...e},i=n===2*Math.PI,o=i?r+1:r+2,s=new Float32Array(3*o),l=new Float32Array(3*o),u=new Uint32Array(3*r);s[0]=0,s[1]=0,s[2]=0,l[0]=0,l[1]=1,l[2]=0;for(let e=0,i=3;e<r;++e,i+=3){let o=a+e/r*n;s[i]=t*Math.sin(o),s[i+1]=0,s[i+2]=t*Math.cos(o),l[i]=0,l[i+1]=1,l[i+2]=0}for(let e=1,t=0;e<r;++e,t+=3)u[t]=e,u[t+1]=e+1,u[t+2]=0;if(i){let e=(r-1)*3;u[e]=r,u[e+1]=1,u[e+2]=0}else{let e=a+n,i=(r+1)*3;s[i]=t*Math.sin(e),s[i+1]=0,s[i+2]=t*Math.cos(e),l[i]=0,l[i+1]=1,l[i+2]=0;let o=(r-1)*3;u[o]=r,u[o+1]=r+1,u[o+2]=0}return{vertices:s,normals:l,indices:u}}var e5=r(81725);let e6={color:c.e.Color(p.t.lightgreen),arcScale:c.e.Numeric(.7,{min:.01,max:1,step:.01})},e8={...ep.x.Params,...e6,lineSizeAttenuation:c.e.Boolean(!0),linesSize:c.e.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.04,{min:.01,max:.2,step:.01})},e7={...e8},e9={...e8},te={...J.K.Params,...e6,ignoreLight:c.e.Boolean(!0),sectorOpacity:c.e.Numeric(.75,{min:0,max:1,step:.01})},tt={vectors:(e,t)=>M(tu,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arc:(e,t)=>M(tc,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),sector:(e,t)=>M(td,J.K.Utils,{modifyProps:e=>({...e,alpha:e.sectorOpacity}),modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(tp,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},tr={...e7,...e9,...te,...ev.i,visuals:c.e.MultiSelect(["vectors","sector","text"],c.e.objectToOptions(tt))},ta=(0,P.AO)(),tn=(0,P.yb)();function ti(e,t,r){let{sphereA:a,sphereB:n,sphereC:i}=t,{arcDirA:o,arcDirC:s,arcNormal:l}=t,[u,c,d]=e.loci;I.o_.getBoundingSphere(u,a),I.o_.getBoundingSphere(c,n),I.o_.getBoundingSphere(d,i),P.AO.sub(o,a.center,n.center),P.AO.sub(s,i.center,n.center),P.AO.cross(l,o,s);let p=Math.min(P.AO.magnitude(o),P.AO.magnitude(s));return t.radius=p*r,t.angle=P.AO.angle(o,s),t}function to(e,t){let{radius:r,angle:a}=e,n=t?(0,e2.UN)(a,r)/t:32;P.yb.targetTo(tn,e.sphereB.center,e.sphereA.center,e.arcNormal),P.yb.setTranslation(tn,e.sphereB.center),P.yb.mul(tn,tn,P.yb.rotY180);let i=e4({radius:r,thetaLength:a,segments:n});return(0,e5.ik)(i,tn)}let ts={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),sphereC:(0,R.CP)(),arcDirA:(0,P.AO)(),arcDirC:(0,P.AO)(),arcNormal:(0,P.AO)(),radius:0,angle:0};function tl(e){return 1===e.triples.length?`Angle ${(0,eg.Wf)(e.triples[0],{measureOnly:!0})}`:`${e.triples.length} Angles`}function tu(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.triples.length;r<n;++r)ti(e.triples[r],ts,t.arcScale),a.addFixedLengthDashes(ts.sphereB.center,ts.sphereA.center,t.dashLength,r),a.addFixedLengthDashes(ts.sphereB.center,ts.sphereC.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tc(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale);let{indices:n,vertices:i}=to(ts,t.dashLength);for(let e=0,t=n.length;e<t;e+=3){if(e%2==1)continue;let t=3*n[e],o=3*n[e+1],s=i[t],l=i[t+1],u=i[t+2],c=i[o],d=i[o+1],p=i[o+2];a.add(s,l,u,c,d,p,r)}}return a.getLines()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function td(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale);let n=to(ts);
7319a.currentGroup=r,ee.V.addPrimitive(a,P.yb.id,n),ee.V.addPrimitiveFlipped(a,P.yb.id,n)}return ee.V.getMesh(a)}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>1,e=>(0,eg.Wf)(t.triples[e]))}function tp(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale),P.AO.add(ta,ts.arcDirA,ts.arcDirC),P.AO.setMagnitude(ta,ta,ts.radius),P.AO.add(ta,ts.sphereB.center,ta);let n=(0,e2.ZY)(ts.angle).toFixed(2),i=t.customText||`${n}\u00B0`,o=Math.max(2,ts.sphereA.radius,ts.sphereB.radius,ts.sphereC.radius)/2;a.add(i,ta[0],ta[1],ta[2],.1,o,r)}return a.getText()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.Wf)(t.triples[e]))}let tf={color:c.e.Color(p.t.lightgreen),arcScale:c.e.Numeric(.7,{min:.01,max:1,step:.01})},tm={...ep.x.Params,...tf,lineSizeAttenuation:c.e.Boolean(!0),linesSize:c.e.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.04,{min:.01,max:.2,step:.01})},th={...tm},tg={...tm},tv={...tm},tb={...tm},ty={...J.K.Params,...tf,ignoreLight:c.e.Boolean(!0),sectorOpacity:c.e.Numeric(.75,{min:0,max:1,step:.01})},tx={vectors:(e,t)=>M(tD,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),extenders:(e,t)=>M(tP,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),connector:(e,t)=>M(tE,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arms:(e,t)=>M(tM,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arc:(e,t)=>M(tk,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),sector:(e,t)=>M(tB,J.K.Utils,{modifyProps:e=>({...e,alpha:e.sectorOpacity}),modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(t_,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},tS={...th,...tg,...tv,...tb,...ty,...ev.i,visuals:c.e.MultiSelect(["extenders","arms","sector","text"],c.e.objectToOptions(tx))},tT=(0,P.AO)(),tC=(0,P.yb)();function tO(e,t,r){let{sphereA:a,sphereB:n,sphereC:i,sphereD:o,dirBA:s,dirCD:l,projA:u,projD:c}=t,{arcPointA:d,arcPointD:p,arcDirA:f,arcDirD:m,arcCenter:h,arcNormal:g}=t,[b,y,x,S]=e.loci;I.o_.getBoundingSphere(b,a),I.o_.getBoundingSphere(y,n),I.o_.getBoundingSphere(x,i),I.o_.getBoundingSphere(S,o),P.AO.add(h,n.center,i.center),P.AO.scale(h,h,.5),P.AO.sub(s,a.center,n.center),P.AO.sub(l,o.center,i.center),P.AO.add(d,h,s),P.AO.add(p,h,l),P.AO.sub(g,i.center,n.center),P.AO.orthogonalize(f,g,s),P.AO.orthogonalize(m,g,l),P.AO.projectPointOnVector(u,d,f,h),P.AO.projectPointOnVector(c,p,m,h);let T=Math.min(P.AO.distance(u,h),P.AO.distance(c,h))*r;P.AO.setMagnitude(f,f,T),P.AO.setMagnitude(m,m,T),P.AO.add(d,h,f),P.AO.add(p,h,m),t.radius=T,t.angle=P.AO.dihedralAngle(a.center,n.center,i.center,o.center),P.AO.matchDirection(tT,g,P.AO.sub(tT,d,a.center));let C=T/Math.cos(P.AO.angle(s,tT)-e2.MZ);P.AO.add(u,n.center,P.AO.setMagnitude(tT,s,C)),P.AO.matchDirection(tT,g,P.AO.sub(tT,p,o.center));let O=T/Math.cos(P.AO.angle(l,tT)-e2.MZ);return P.AO.add(c,i.center,P.AO.setMagnitude(tT,l,O)),t}function tI(e,t){let{radius:r,angle:a}=e,n=t?(0,e2.UN)(a,r)/t:32;P.yb.targetTo(tC,e.arcCenter,a<0?e.arcPointD:e.arcPointA,e.arcNormal),P.yb.setTranslation(tC,e.arcCenter),P.yb.mul(tC,tC,P.yb.rotY180);let i=e4({radius:r,thetaLength:Math.abs(a),segments:n});return(0,e5.ik)(i,tC)}let tA={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),sphereC:(0,R.CP)(),sphereD:(0,R.CP)(),dirBA:(0,P.AO)(),dirCD:(0,P.AO)(),projA:(0,P.AO)(),projD:(0,P.AO)(),arcPointA:(0,P.AO)(),arcPointD:(0,P.AO)(),arcDirA:(0,P.AO)(),arcDirD:(0,P.AO)(),arcCenter:(0,P.AO)(),arcNormal:(0,P.AO)(),radius:0,angle:0};function tw(e){return 1===e.quads.length?`Dihedral ${(0,eg.U7)(e.quads[0],{measureOnly:!0})}`:`${e.quads.length} Dihedrals`}function tD(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.arcCenter,tA.arcPointA,t.dashLength,r),a.addFixedLengthDashes(tA.arcCenter,tA.arcPointD,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tE(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.sphereB.center,tA.sphereC.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tM(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.sphereB.center,tA.sphereA.center,t.dashLength,r),a.addFixedLengthDashes(tA.sphereC.center,tA.sphereD.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tP(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.arcPointA,tA.projA,t.dashLength,r),a.addFixedLengthDashes(tA.arcPointD,tA.projD,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tk(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale);let{indices:n,vertices:i}=tI(tA,t.dashLength);for(let e=0,t=n.length;e<t;e+=3){if(e%2==1)continue;let t=3*n[e],o=3*n[e+1],s=i[t],l=i[t+1],u=i[t+2],c=i[o],d=i[o+1],p=i[o+2];a.add(s,l,u,c,d,p,r)}}return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tB(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale);let n=tI(tA);
7319a.currentGroup=r,ee.V.addPrimitive(a,P.yb.id,n),ee.V.addPrimitiveFlipped(a,P.yb.id,n)}return ee.V.getMesh(a)}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>1,e=>(0,eg.U7)(t.quads[e]))}function t_(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale),P.AO.add(tT,tA.arcDirA,tA.arcDirD),P.AO.setMagnitude(tT,tT,tA.radius),P.AO.add(tT,tA.arcCenter,tT);let n=(0,e2.ZY)(tA.angle).toFixed(2);"-0.00"===n&&(n="0.00");let i=t.customText||`${n}\u00B0`,o=Math.max(2,tA.sphereA.radius,tA.sphereB.radius,tA.sphereC.radius,tA.sphereD.radius)/2;a.add(i,tT[0],tT[1],tT[2],.1,o,r)}return a.getText()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.U7)(t.quads[e]))}var tR=r(5333),tF=r(1813),tL=r(97667),tz=r(59990);let tN={vertices:new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]),normals:new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]),indices:new Uint32Array([0,2,1,1,2,3])};tN.vertices,new Uint32Array([0,1,2,3,3,1,2,0]);let tG={...J.K.Params,color:c.e.Color(p.t.orange),scaleFactor:c.e.Numeric(1,{min:.1,max:10,step:.1})},tU={plane:(e,t)=>M(tq,J.K.Utils)},tV={...tG,visuals:c.e.MultiSelect(["plane"],c.e.objectToOptions(tU))},tj=(0,P.yb)(),tH=(0,P.AO)();function tq(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis).boxAxes;return P.AO.add(tH,n.origin,n.dirC),P.yb.targetTo(tj,tH,n.origin,n.dirB),P.yb.scale(tj,tj,R.QB.size(tH,n)),P.yb.scaleUniformly(tj,tj,t.scaleFactor),P.yb.setTranslation(tj,n.origin),a.currentGroup=0,ee.V.addPrimitive(a,tj,tN),ee.V.addPrimitiveFlipped(a,tj,tN),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Best Fit Plane of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}var tX=r(5909),tW=r(34813),tK=r(23833),tQ=r(37792);let tZ=d.E.BuiltIn({name:"structure-representation-3d",display:"3D Representation",from:d.G.Molecule.Structure,to:d.G.Molecule.Structure.Representation3D,params:(e,t)=>{let{registry:r,themes:a}=t.representation.structure,n=r.get(r.default.name);if(!e)return{type:c.e.Mapped(r.default.name,r.types,e=>c.e.Group(r.get(e).getParams(a,i.Structure.Empty))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.types,e=>c.e.Group(a.colorThemeRegistry.get(e).getParams({structure:i.Structure.Empty})),{help:e=>{let{name:t,params:r}=e,n=a.colorThemeRegistry.get(t).factory({},r);return{description:n.description,legend:n.legend}}}),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.types,e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams({structure:i.Structure.Empty})))};let o={structure:e.data};return{type:c.e.Mapped(r.default.name,r.getApplicableTypes(e.data),t=>c.e.Group(r.get(t).getParams(a,e.data))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.getApplicableTypes(o),e=>c.e.Group(a.colorThemeRegistry.get(e).getParams(o)),{help:e=>{let{name:t,params:r}=e,n=a.colorThemeRegistry.get(t).factory(o,r);return{description:n.description,legend:n.legend}}}),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.getApplicableTypes(o),e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams(o)))}}})({canAutoUpdate:({a:e,oldParams:t,newParams:r})=>e.data.elementCount<1e4||t.type.name===r.type.name&&"custom"!==r.type.params.quality,apply:({a:e,params:t,cache:r},a)=>l.iQ.create("Structure Representation",async r=>{var n,i;let o={runtime:r,assetManager:a.managers.asset,errorContext:a.errorContext},s=a.representation.structure.registry.get(t.type.name),l=(null===(n=s.getData)||void 0===n?void 0:n.call(s,e.data,t.type.params))||e.data;s.ensureCustomProperties&&await s.ensureCustomProperties.attach(o,l);let c=s.factory({webgl:null===(i=a.canvas3d)||void 0===i?void 0:i.webgl,...a.representation.structure.themes},s.getParams);await u.Q.ensureDependencies(o,a.representation.structure.themes,{structure:l},t),c.setTheme(u.Q.create(a.representation.structure.themes,{structure:l},t));let p=t.type.params||{};return await c.createOrUpdate(p,l).runInContext(r),new d.G.Molecule.Structure.Representation3D({repr:c,sourceData:e.data},{label:s.label})}),update:({a:e,b:t,oldParams:r,newParams:a,cache:n},i)=>l.iQ.create("Structure Representation",async n=>{var o,l;if(a.type.name!==r.type.name)return s.td.UpdateResult.Recreate;let c=i.representation.structure.registry.get(a.type.name);if(null===(o=c.mustRecreate)||void 0===o?void 0:o.call(c,r.type.params,a.type.params))return s.td.UpdateResult.Recreate;let d=(null===(l=c.getData)||void 0===l?void 0:l.call(c,e.data,a.type.params))||e.data,p={runtime:n,assetManager:i.managers.asset,errorContext:i.errorContext};c.ensureCustomProperties&&await c.ensureCustomProperties.attach(p,d),u.Q.releaseDependencies(i.representation.structure.themes,{structure:t.data.sourceData},r),await u.Q.ensureDependencies(p,i.representation.structure.themes,{structure:d},a),t.data.repr.setTheme(u.Q.create(i.representation.structure.themes,{structure:d},a));let f={...t.data.repr.props,...a.type.params};return await t.data.repr.createOrUpdate(f,d).runInContext(n),t.data.sourceData=e.data,s.td.UpdateResult.Updated}),dispose({b:e,params:t},r){if(!e||!t)return;let a=e.data.sourceData,n=r.representation.structure.registry.get(t.type.name);n.ensureCustomProperties&&n.ensureCustomProperties.detach(a),u.Q.releaseDependencies(r.representation.structure.themes,{structure:a},t)},interpolate(e,t,r){if("uniform"!==e.colorTheme.name||"uniform"!==t.colorTheme.name)return r<=.5?e:t;let a=e.colorTheme.params.value,n=t.colorTheme.params.value,i=K.Il.interpolate(a,n,r);return{type:r<=.5?e.type:t.type,colorTheme:{name:"uniform",params:{value:i}},sizeTheme:r<=.5?e.sizeTheme:t.sizeTheme}}}),tY=d.E.BuiltIn({name:"unwind-structure-assembly-representation-3d",display:"Unwind Assembly 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.
731901})}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r);return L(r,a,t.t),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Unwind T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;return e.data.sourceData!==n||e.data.repr!==t.data.repr?s.td.UpdateResult.Recreate:a.t===r.t?s.td.UpdateResult.Unchanged:(L(n,t.data.state.unitTransforms,r.t),t.label=`Unwind T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated)}}),t$=d.E.BuiltIn({name:"explode-structure-representation-3d",display:"Explode 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.01})}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r);return U(r,a,t.t,r.root.boundary.sphere),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Explode T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=e.data.sourceData;return t.data.info!==n||e.data.repr!==t.data.repr?s.td.UpdateResult.Recreate:a.t===r.t?s.td.UpdateResult.Unchanged:(U(n,t.data.state.unitTransforms,r.t,n.root.boundary.sphere),t.label=`Explode T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated)}}),tJ=d.E.BuiltIn({name:"spin-structure-representation-3d",display:"Spin 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.01}),...V}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r),{axis:n,origin:i}=j(r.root,t);return W(r,a,t.t,n,i),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Spin T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=e.data.sourceData;if(t.data.info!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;if(a.t===r.t&&a.axis===r.axis&&a.origin===r.origin)return s.td.UpdateResult.Unchanged;let i=t.data.state.unitTransforms,{axis:o,origin:l}=j(n.root,r);return W(n,i,r.t,o,l),t.label=`Spin T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated}}),t0=d.E.BuiltIn({name:"overpaint-structure-representation-3d-from-script",display:"Overpaint 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),color:c.e.Color(p.t.blueviolet),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":K.Il.toRgbString(e.color)}`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),color:p.t.blueviolet,clear:!1}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Q.k.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{overpaint:n},initialState:{overpaint:Q.k.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Overpaint (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.overpaint,u=Q.k.ofScript(r.layers,i);return Q.k.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.overpaint=u,t.data.repr=e.data.repr,t.label=`Overpaint (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t1=d.E.BuiltIn({name:"overpaint-structure-representation-3d-from-bundle",display:"Overpaint 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),color:c.e.Color(p.t.blueviolet),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":K.Il.toRgbString(e.color)}`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,color:p.t.blueviolet,clear:!1}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Q.k.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{overpaint:n},initialState:{overpaint:Q.k.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Overpaint (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.overpaint,u=Q.k.ofBundle(r.layers,i);return Q.k.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.overpaint=u,t.data.repr=e.data.repr,t.label=`Overpaint (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t2=d.E.BuiltIn({name:"transparency-structure-representation-3d-from-script",display:"Transparency 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),value:c.e.Numeric(.5,{min:0,max:1,step:.
731901},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Z.i.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{transparency:n},initialState:{transparency:Z.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Transparency (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.transparency,u=Z.i.ofScript(r.layers,i);return Z.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.transparency=u,t.data.repr=e.data.repr,t.label=`Transparency (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t3=d.E.BuiltIn({name:"transparency-structure-representation-3d-from-bundle",display:"Transparency 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),value:c.e.Numeric(.5,{min:0,max:1,step:.01},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Z.i.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{transparency:n},initialState:{transparency:Z.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Transparency (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.transparency,u=Z.i.ofBundle(r.layers,i);return Z.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.transparency=u,t.data.repr=e.data.repr,t.label=`Transparency (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t4=d.E.BuiltIn({name:"emissive-structure-representation-3d-from-script",display:"Emissive 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),value:c.e.Numeric(.5,{min:0,max:1,step:.01},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tQ.i.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{emissive:n},initialState:{emissive:tQ.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Emissive (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.emissive,u=tQ.i.ofScript(r.layers,i);return tQ.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.emissive=u,t.data.repr=e.data.repr,t.label=`Emissive (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t5=d.E.BuiltIn({name:"emissive-structure-representation-3d-from-bundle",display:"Emissive 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),value:c.e.Numeric(.5,{min:0,max:1,step:.
731901},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tQ.i.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{emissive:n},initialState:{emissive:tQ.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Emissive (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.emissive,u=tQ.i.ofBundle(r.layers,i);return tQ.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.emissive=u,t.data.repr=e.data.repr,t.label=`Emissive (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t6=d.E.BuiltIn({name:"substance-structure-representation-3d-from-script",display:"Substance 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),material:tW.F.getParam(),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":tW.F.toString(e.material)}`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),material:(0,tW.F)({roughness:1}),clear:!1}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tX.A.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{substance:n},initialState:{substance:tX.A.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Substance (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.substance,u=tX.A.ofScript(r.layers,i);return tX.A.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.substance=u,t.data.repr=e.data.repr,t.label=`Substance (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t8=d.E.BuiltIn({name:"substance-structure-representation-3d-from-bundle",display:"Substance 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),material:tW.F.getParam(),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":tW.F.toString(e.material)}`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,material:(0,tW.F)({roughness:1}),clear:!1}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tX.A.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{substance:n},initialState:{substance:tX.A.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Substance (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.substance,u=tX.A.ofBundle(r.layers,i);return tX.A.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.substance=u,t.data.repr=e.data.repr,t.label=`Substance (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t7=d.E.BuiltIn({name:"clipping-structure-representation-3d-from-script",display:"Clipping 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),groups:c.e.Converted(e=>tF.z.Groups.toNames(e),e=>
7319tF.z.Groups.fromNames(e),c.e.MultiSelect((0,tL._2)(tF.z.Groups.Names),c.e.objectToOptions(tF.z.Groups.Names)))},e=>`${tF.z.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),groups:tF.z.Groups.Flag.None}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=tF.z.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{clipping:a},initialState:{clipping:tF.z.Empty},info:r,repr:e.data.repr},{label:`Clipping (${a.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;if(e.data.sourceData!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let i=t.data.state.clipping,o=tF.z.ofScript(r.layers,n);return tF.z.areEqual(i,o)?s.td.UpdateResult.Unchanged:(t.data.state.clipping=o,t.data.repr=e.data.repr,t.label=`Clipping (${o.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t9=d.E.BuiltIn({name:"clipping-structure-representation-3d-from-bundle",display:"Clipping 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),groups:c.e.Converted(e=>tF.z.Groups.toNames(e),e=>tF.z.Groups.fromNames(e),c.e.MultiSelect((0,tL._2)(tF.z.Groups.Names),c.e.objectToOptions(tF.z.Groups.Names)))},e=>`${tF.z.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,groups:tF.z.Groups.Flag.None}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=tF.z.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{clipping:a},initialState:{clipping:tF.z.Empty},info:r,repr:e.data.repr},{label:`Clipping (${a.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;if(e.data.sourceData!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let i=t.data.state.clipping,o=tF.z.ofBundle(r.layers,n);return tF.z.areEqual(i,o)?s.td.UpdateResult.Unchanged:(t.data.state.clipping=o,t.data.repr=e.data.repr,t.label=`Clipping (${o.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),re=d.E.BuiltIn({name:"theme-strength-representation-3d",display:"Theme Strength 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({overpaintStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),transparencyStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),emissiveStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),substanceStrength:c.e.Numeric(1,{min:0,max:1,step:.01})})})({canAutoUpdate:()=>!0,apply:({a:e,params:t})=>new d.G.Molecule.Structure.Representation3DState({state:{themeStrength:{overpaint:t.overpaintStrength,transparency:t.transparencyStrength,emissive:t.emissiveStrength,substance:t.substanceStrength}},initialState:{themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1}},info:{},repr:e.data.repr},{label:"Theme Strength",description:`${t.overpaintStrength.toFixed(2)}, ${t.transparencyStrength.toFixed(2)}, ${t.emissiveStrength.toFixed(2)}, ${t.substanceStrength.toFixed(2)}`}),update({a:e,b:t,newParams:r,oldParams:a}){var n,i,o,l;return r.overpaintStrength===(null===(n=t.data.state.themeStrength)||void 0===n?void 0:n.overpaint)&&r.transparencyStrength===(null===(i=t.data.state.themeStrength)||void 0===i?void 0:i.transparency)&&r.emissiveStrength===(null===(o=t.data.state.themeStrength)||void 0===o?void 0:o.emissive)&&r.substanceStrength===(null===(l=t.data.state.themeStrength)||void 0===l?void 0:l.substance)?s.td.UpdateResult.Unchanged:(t.data.state.themeStrength={overpaint:r.overpaintStrength,transparency:r.transparencyStrength,emissive:r.emissiveStrength,substance:r.substanceStrength},t.data.repr=e.data.repr,t.label="Theme Strength",t.description=`${r.overpaintStrength.toFixed(2)}, ${r.transparencyStrength.toFixed(2)}, ${r.emissiveStrength.toFixed(2)}, ${r.substanceStrength.toFixed(2)}`,s.td.UpdateResult.Updated)},interpolate:(e,t,r)=>({overpaintStrength:(0,tK.t7)(e.overpaintStrength,t.overpaintStrength,r),transparencyStrength:(0,tK.t7)(e.transparencyStrength,t.transparencyStrength,r),emissiveStrength:(0,tK.t7)(e.emissiveStrength,t.emissiveStrength,r),substanceStrength:(0,tK.t7)(e.substanceStrength,t.substanceStrength,r)})});(a=n||(n={})).getDefaultParams=function(e,t,r,a,n,i,o,s){let l=e.representation.volume.registry.get(t),u=e.representation.volume.themes.colorThemeRegistry.get(n||l.defaultColorTheme.name),d=e.representation.volume.themes.sizeThemeRegistry.get(o||l.defaultSizeTheme.name),p=c.e.getDefaultValues(l.getParams(e.representation.volume.themes,r));return{type:{name:t,params:a?{...p,...a}:p},colorTheme:{name:u.name,params:i?{...u.defaultValues,...i}:u.defaultValues},sizeTheme:{name:d.name,params:s?{...d.defaultValues,...s}:d.defaultValues}}},a.getDefaultParamsStatic=function(e,t,r,a,n,i,o){let s=e.representation.volume.registry.get(t),l=e.representation.volume.themes.colorThemeRegistry.get(a||s.defaultColorTheme.name),u=e.representation.volume.themes.sizeThemeRegistry.get(i||s.defaultSizeTheme.name);return{type:{name:t,params:r?{...s.defaultValues,...r}:s.defaultValues},colorTheme:{name:s.defaultColorTheme.name,params:n?{...l.defaultValues,...n}:l.defaultValues},sizeTheme:{name:s.defaultSizeTheme.name,params:o?{...u.defaultValues,...o}:u.defaultValues}}},a.getDescription=function(e){var t,r,a,n;return e.isoValue?o.f.IsoValue.toString(e.isoValue):(null===(r=null===(t=e.renderMode)||void 0===t?void 0:t.params)||void 0===r?void 0:r.isoValue)?o.f.IsoValue.toString(null===(n=null===(a=e.renderMode)||void 0===a?void 0:a.params)||void 0===n?void 0:n.isoValue):void 0};let rt=d.E.BuiltIn({name:"volume-representation-3d",display:"3D Representation",from:d.G.Volume.Data,to:d.G.Volume.Representation3D,params:(e,t)=>{let{registry:r,themes:a}=t.representation.volume,n=r.get(r.default.name);if(!e)return{type:c.e.Mapped(r.default.name,r.types,e=>
7319c.e.Group(r.get(e).getParams(a,o.f.One))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.types,e=>c.e.Group(a.colorThemeRegistry.get(e).getParams({volume:o.f.One}))),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.types,e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams({volume:o.f.One})))};let i={volume:e.data};return{type:c.e.Mapped(r.default.name,r.types,t=>c.e.Group(r.get(t).getParams(a,e.data))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.getApplicableTypes(i),e=>c.e.Group(a.colorThemeRegistry.get(e).getParams(i))),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.getApplicableTypes(i),e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams(i)))}}})({canAutoUpdate:({oldParams:e,newParams:t})=>e.type.name===t.type.name,apply:({a:e,params:t},r)=>l.iQ.create("Volume Representation",async a=>{var i;let o={runtime:a,assetManager:r.managers.asset,errorContext:r.errorContext},s=r.representation.volume.registry.get(t.type.name);s.ensureCustomProperties&&await s.ensureCustomProperties.attach(o,e.data);let l=s.factory({webgl:null===(i=r.canvas3d)||void 0===i?void 0:i.webgl,...r.representation.volume.themes},s.getParams);await u.Q.ensureDependencies(o,r.representation.volume.themes,{volume:e.data},t),l.setTheme(u.Q.create(r.representation.volume.themes,{volume:e.data,locationKinds:s.locationKinds},t));let c=t.type.params||{};return await l.createOrUpdate(c,e.data).runInContext(a),new d.G.Volume.Representation3D({repr:l,sourceData:e.data},{label:s.label,description:n.getDescription(c)})}),update:({a:e,b:t,oldParams:r,newParams:a},i)=>l.iQ.create("Volume Representation",async o=>{var l;if(a.type.name!==r.type.name)return s.td.UpdateResult.Recreate;let c=i.representation.volume.registry.get(a.type.name);if(null===(l=c.mustRecreate)||void 0===l?void 0:l.call(c,r.type.params,a.type.params))return s.td.UpdateResult.Recreate;let d={runtime:o,assetManager:i.managers.asset,errorContext:i.errorContext};c.ensureCustomProperties&&await c.ensureCustomProperties.attach(d,e.data),u.Q.releaseDependencies(i.representation.volume.themes,{volume:t.data.sourceData},r),await u.Q.ensureDependencies(d,i.representation.volume.themes,{volume:e.data},a),t.data.repr.setTheme(u.Q.create(i.representation.volume.themes,{volume:e.data,locationKinds:c.locationKinds},a));let p={...t.data.repr.props,...a.type.params};return await t.data.repr.createOrUpdate(p,e.data).runInContext(o),t.data.sourceData=e.data,t.description=n.getDescription(p),s.td.UpdateResult.Updated}),dispose({b:e,params:t},r){if(!e||!t)return;let a=e.data.sourceData,n=r.representation.volume.registry.get(t.type.name);n.ensureCustomProperties&&n.ensureCustomProperties.detach(a),u.Q.releaseDependencies(r.representation.volume.themes,{volume:a},t)}}),rr=d.E.BuiltIn({name:"shape-representation-3d",display:"3D Representation",from:d.G.Shape.Provider,to:d.G.Shape.Representation3D,params:(e,t)=>e?e.data.params:Y.ev.Params})({canAutoUpdate:()=>!0,apply:({a:e,params:t})=>l.iQ.create("Shape Representation",async r=>{let a={...c.e.getDefaultValues(e.data.params),...t},n=M(e.data.getShape,e.data.geometryUtils);return await n.createOrUpdate(a,e.data.data).runInContext(r),new d.G.Shape.Representation3D({repr:n,sourceData:e.data},{label:e.data.label})}),update:({a:e,b:t,newParams:r})=>l.iQ.create("Shape Representation",async a=>{let n={...t.data.repr.props,...r};return await t.data.repr.createOrUpdate(n,e.data.data).runInContext(a),t.data.sourceData=e.data,s.td.UpdateResult.Updated})}),ra=d.E.BuiltIn({name:"model-unitcell-3d",display:"Model Unit Cell",from:d.G.Molecule.Model,to:d.G.Shape.Representation3D,params:()=>({...eu})})({isApplicable:e=>!!tR.I.Provider.get(e.data),canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Model Unit Cell",async a=>{var n,i,o;let l=tR.I.Provider.get(e.data);if(!l)return s.lZ.Null;let u=ed(e.data,l,t),c=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>eu,m.hX.createMulti("Unit Cell",i,o,m.hX.StateBuilder,el));return await c.createOrUpdate(t,u).runInContext(a),new d.G.Shape.Representation3D({repr:c,sourceData:u},{label:"Unit Cell",description:l.spacegroup.name})}),update:({a:e,b:t,newParams:r})=>l.iQ.create("Model Unit Cell",async a=>{let n=tR.I.Provider.get(e.data);if(!n)return s.td.UpdateResult.Null;let i={...t.data.repr.props,...r},o=ed(e.data,n,i);return await t.data.repr.createOrUpdate(i,o).runInContext(a),t.data.sourceData=o,s.td.UpdateResult.Updated})}),rn=d.E.BuiltIn({name:"structure-bounding-box-3d",display:"Bounding Box",from:d.G.Molecule.Structure,to:d.G.Shape.Representation3D,params:{radiu
7319s:c.e.Numeric(.05,{min:.01,max:4,step:.01},{isEssential:!0}),color:c.e.Color(p.t.red,{isEssential:!0}),...J.K.Params}})({canAutoUpdate:()=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Bounding Box",async r=>{let a=M((e,t,r,a)=>{let n=(0,tz.getBoxMesh)(t.box,t.radius,null==a?void 0:a.geometry);return h.b.create("Bouding Box",t,n,()=>t.color,()=>1,()=>"Bounding Box")},J.K.Utils);return await a.createOrUpdate(t,{box:e.data.boundary.box,radius:t.radius,color:t.color}).runInContext(r),new d.G.Shape.Representation3D({repr:a,sourceData:e.data},{label:"Bounding Box"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Bounding Box",async r=>(await t.data.repr.createOrUpdate(a,{box:e.data.boundary.box,radius:a.radius,color:a.color}).runInContext(r),t.data.sourceData=e.data,s.td.UpdateResult.Updated))}),ri=d.E.BuiltIn({name:"structure-selections-distance-3d",display:"3D Distance",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...eT})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Distance",async a=>{var n,i,o;let s=(0,eD.Oq)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>eT,m.hX.createMulti("Distance",i,o,m.hX.StateBuilder,eS));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Distance"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Distance",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.Oq)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),ro=d.E.BuiltIn({name:"structure-selections-angle-3d",display:"3D Angle",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tr})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Angle",async a=>{var n,i,o;let s=(0,eD.OQ)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>tr,m.hX.createMulti("Angle",i,o,m.hX.StateBuilder,tt));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Angle"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Angle",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.OQ)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rs=d.E.BuiltIn({name:"structure-selections-dihedral-3d",display:"3D Dihedral",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tS})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Dihedral",async a=>{var n,i,o;let s=(0,eD.K$)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>tS,m.hX.createMulti("Dihedral",i,o,m.hX.StateBuilder,tx));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Dihedral"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Dihedral",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.K$)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rl=d.E.BuiltIn({name:"structure-selections-label-3d",display:"3D Label",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...eP})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Label",async a=>{var n,i,o,s,l;let u=(0,eD._$)(e.data),c=(s={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},l=()=>eP,m.hX.createMulti("Label",s,l,m.hX.StateBuilder,eM));await c.createOrUpdate(t,u).runInContext(a);let p=!!((null===(i=t.snapshotKey)||void 0===i?void 0:i.trim())||(null===(o=t.tooltip)||void 0===o?void 0:o.trim()));return c.setState({pickable:p,markerActions:p?S.E5.Highlighting:S.dd.None}),new d.G.Shape.Representation3D({repr:c,sourceData:u},{label:"Label"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Label",async r=>{var n,i;let o={...t.data.repr.props,...a},l=(0,eD._$)(e.data);await t.data.repr.createOrUpdate(o,l).runInContext(r),t.data.sourceData=l;let u=!!((null===(n=a.snapshotKey)||void 0===n?void 0:n.trim())||(null===(i=a.tooltip)||void 0===i?void 0:i.trim()));return t.data.repr.setState({pickable:u,markerActions:u?S.E5.Highlighting:S.dd.None}),s.td.UpdateResult.Updated})}),ru=d.E.BuiltIn({name:"structure-selections-orientation-3d",display:"3D Orientation",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...e$})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Orientation",async a=>{var n;let i=(0,eD.GW)(e.data),o=function(e,t){let r=m.hX.createMulti("Orientation",e,t,m.hX.StateBuilder,eY);return r.setState({markerActions:S.E5.Highlighting}),r}({webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},()=>e$);return await o.createOrUpdate(t,i).runInContext(a),new d.G.Shape.Representation3D({repr:o,sourceData:i},{label:"Orientation"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Orientation",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.GW)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rc=d.E.BuiltIn({name:"structure-selections-plane-3d",display:"3D Plane",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tV})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Plane",async a=>{var n;let i=(0,eD.cY)(e.data),o=function(e,t){let r=m.hX.createMulti("Plane",e,t,m.hX.StateBuilder,tU);return r.setState({markerActions:S.E5.Highlighting}),r}({webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},()=>tV);return await o.createOrUpdate(t,i).runInContext(a),new d.G.Shape.Representation3D({repr:o,sourceData:i},{label:"Plane"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Plane",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.cY)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})})},59990:function(e,t,r){r.r(t),r.d(t,{BoxShape3D:function(){return f},getBoxMesh:function(){return m}});var a=r(4376),n=r(89623),i=r(70759),o=r(48930),s=r(87144),l=r(93898),u=r(54854),c=r(7922),d=r(14086),p=r(72762);let f=p.E.BuiltIn({name:"box-shape-3d",display:"Box Shape",from:p.G.Root,to:p.G.Shape.Provider,params:{bottomLeft:d.e.Vec3((0,s.AO)()),topRight:d.e.Vec3(s.AO.create(1,1,1)),radius:d.e.Numeric(.15,{min:.01,max:4,step:.01}),color:d.e.Color(c.t.red)}})({canAutoUpdate:()=>!0,apply:({params:e})=>u.iQ.create("Shape Representation",async t=>new p.G.Shape.Provider({label:"Box",data:e,params:a.K.Params,getShape:(t,r)=>{let a=m(o.XZ.create(e.bottomLeft,e.topRight),e.radius);return l.b.create("Box",r,a,()=>r.color,()=>1,()=>"Box")},geometryUtils:a.K.Utils},{label:"Box"}))});function m(e,t,r){let a=s.AO.sub((0,s.AO)(),e.max,e.min),l=s.yb.fromTranslation((0,s.yb)(),s.AO.create(.5,.5,.5)),u=s.yb.fromScaling((0,s.yb)(),a),c=s.yb.fromTranslation((0,s.yb)(),e.min),d=s.yb.mul3((0,s.yb)(),c,u,l),p=n.V.createState(256,128,r);p.currentGroup=1,n.V.addCage(p,d,(0,i.pE)(),t,2,20);let f=n.V.getMesh(p),m=s.AO.scaleAndAdd((0,s.AO)(),e.min,a,.5),h=s.AO.distance(e.min,m);return f.setBoundingSphere(o.CP.create(m,h)),f}},22401:function(e,t,r){r.d(t,{Q:function(){return c},Xl:function(){return l},e5:function(){return s},x9:function(){return u}});var a=r(5862),n=r(67058),i=r(52755),o=r(86517);let s=n.createContext(void 0);class l extends n.Component{subscribe(e,t){void 0===this.subs&&(this.subs=[]),this.subs.push(e.subscribe(t))}componentWillUnmount(){if(this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}constructor(e,t){super(e),this.subs=void 0,this.plugin=t,this.init&&this.init()}}l.contextType=s;class u extends n.PureComponent{subscribe(e,t){void 0===this.subs&&(this.subs=[]),this.subs.push(e.subscribe(t))}componentWillUnmount(){if(this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}constructor(e,t){super(e,t),this.subs=void 0,this.plugin=t,this.init&&this.init()}}u.contextType=s;class c extends l{toggleCollapsed(){this.setState({isCollapsed:!this.state.isCollapsed})}componentDidUpdate(e){void 0!==this.props.initiallyCollapsed&&e.initiallyCollapsed!==this.props.initiallyCollapsed&&this.setState({isCollapsed:this.props.initiallyCollapsed})}render(){var e;if(this.state.isHidden)return null;let t=this.state.header.toLowerCase().replace(/\s/g,""),r=this.state.isCollapsed?"msp-transform-wrapper msp-transform-wrapper-collapsed":"msp-transform-wrapper";return(0,a.jsxs)("div",{className:r,children:[(0,a.jsx)("div",{id:t,className:"msp-transform-header",children:(0,a.jsxs)(i.zx,{icon:this.state.brand?void 0:this.state.isCollapsed?o.Sr:o.x3,noOverflow:!0,onClick:()=>this.toggleCollapsed(),className:this.state.brand?`msp-transform-header-brand msp-transform-header-brand-${this.state.brand.accent}`:void 0,title:`Click to ${this.state.isCollapsed?"expand":"collapse"}`,children:[(0,a.jsx)(o.JO,{svg:null===(e=this.state.brand)||void 0===e?void 0:e.svg,inline:!0}),this.state.header,(0,a.jsx)("small",{style:{margin:"0 6px"},children:this.state.isCollapsed?"":this.state.description})]})}),!this.state.isCollapsed&&this.renderControls()]})}constructor(e,t){super(e,t);let r=this.defaultState();void 0!==e.initiallyCollapsed&&(r.isCollapsed=e.initiallyCollapsed),void 0!==e.header&&(r.header=e.header),this.state=r}}},75600:function(e,t,r){r.d(t,{P:function(){return s}});var a=r(5862),n=r(67058),i=r(52755),o=r(86517);class s extends n.PureComponent{constructor(){super(...arguments),this.hide=()=>this.props.onSelect(void 0)}render(){let e=this.props,t=(0,a.jsx)(l,{items:e.items,onSelect:e.onSelect,current:e.current,multiselect:this.props.multiselect,noOffset:this.props.noOffset,noAccent:this.props.noAccent});return(0,a.jsxs)("div",{className:`msp-action-menu-options${e.header?"":" msp-action-menu-options-no-header"}`,children:[e.header&&(0,a.jsx)(i.eQ,{header:e.header,title:e.title,initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.hide,topRightIcon:o.sZ,children:t}),!e.header&&t]})}}!function(e){function t(t,r){let a;let{label:n,value:i,category:o,selected:s,icon:l,addOn:u,description:c}=r||{},d=[];for(let p=0;p<t.length;p++){let f;let m=t[p];if((null==r?void 0:r.filter)&&!r.filter(m))continue;let h=null==o?void 0:o(m),g=n?n(m):""+m,b=i?i(m):m,y=c?c(m):"string"==typeof m?m:void 0;h?(a||(a=new Map),(f=a.get(h))||(f=[e.Header(h,{description:h})],a.set(h,f),d.push(f))):f=d;let x=null==u?void 0:u(m);f.push({kind:"item",label:g,value:b,icon:l?l(m):void 0,selected:s?s(m):void 0,addOn:x,description:y})}return d}e.Header=function(e,t){return t?{kind:"header",label:e,...t}:{kind:"header",label:e}},e.Item=function(e,t,r){return{kind:"item",label:e,value:t,...r}},e.createItems=t;let r={value:e=>e[0],label:e=>e[1],category:e=>e[2]};e.createItemsFromSelectOptions=function(e,a){return t(e,a?{...r,...a}:r)},e.hasSelectedItem=function e(t){if(p(t))return!1;if(d(t))return!!t.selected;for(let r of t)if(e(r))return!0;return!1},e.findItem=function e(t,r){if(!p(t)){if(d(t))return t.value===r?t:void 0;for(let a of t){let t=e(a,r);if(t)return t}}},e.getFirstItem=function e(t){if(!p(t)){if(d(t))return t;for(let r of t){let t=e(r);if(t)return t}}}}(s||(s={}));class l extends n.PureComponent{constructor(){super(...arguments),this.state=l.createState(this.props),this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()},this.selectAll=()=>{let e=f(this.props.items,[]).filter(e=>!e.selected);this.props.onSelect(e)},this.selectNone=()=>{let e=f(this.props.items,[]).filter(e=>!!e.selected);this.props.onSelect(e)}}static createState(e,t){let r=c(e.items)&&p(e.items[0])?e.items[0]:void 0,a=(null==r||!r.isIndependent)&&(e.multiselect?s.hasSelectedItem(e.items):!!e.current&&!!s.findItem(e.items,e.current.value)||s.hasSelectedItem(e.items));return{header:r,hasCurrent:a,isExpanded:a||(null!=t?t:!!(null==r?void 0:r.initiallyExpanded))}}componentDidUpdate(e){if(this.props.items!==e.items||this.props.current!==e.current){let t=c(this.props.items)&&c(e.items)&&p(this.props.items[0])&&p(e.items[0])&&this.props.items[0].label===e.items[0].label?this.state.isExpanded:void 0;this.setState(l.createState(this.props,t))}}get multiselectHeader(){let{header:e,hasCurrent:t}=this.state;return(0,a.jsxs)("div",{className:"msp-flex-row msp-control-group-header",children:[(0,a.jsx)(i.zx,{icon:this.state.isExpanded?o.x3:o.Sr,flex:!0,noOverflow:!0,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}.${(null==e?void 0:e.description)?` ${null==e?void 0:e.description}`:""}`,children:t?(0,a.jsx)("b",{children:null==e?void 0:e.label}):null==e?void 0:e.label}),(0,a.jsx)(i.zx,{icon:o.pW,flex:!0,onClick:this.selectAll,style:{flex:"0 0 50px",textAlign:"right"},children:"All"}),(0,a.jsx)(i.zx,{icon:o.sZ,flex:!0,onClick:this.selectNone,style:{flex:"0 0 50px",textAlign:"right"},children:"None"})]})}get basicHeader(){let{header:e,hasCurrent:t}=this.state;return(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginTop:"1px"},children:(0,a.jsx)(i.zx,{noOverflow:!0,icon:this.state.isExpanded?o.x3:o.Sr,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}. ${(null==e?void 0:e.description)?null==e?void 0:e.description:""}`,children:t?(0,a.jsx)("b",{children:null==e?void 0:e.label}):null==e?void 0:e.label})})}render(){let{items:e,onSelect:t,current:r}=this.props;if(p(e))return null;if(d(e))return(0,a.jsx)(u,{item:e,onSelect:t,current:r,multiselect:this.props.multiselect});let{header:n}=this.state;return(0,a.jsxs)(a.Fragment,{children:[n&&(this.props.multiselect&&this.state.isExpanded?this.multiselectHeader:this.basicHeader),(0,a.jsx)("div",{className:this.props.noOffset?void 0:this.props.noAccent?"msp-control-offset":"msp-accent-offset",children:(!n||this.state.isExpanded)&&e.map((e,n)=>p(e)?null:d(e)?(0,a.jsx)(u,{item:e,onSelect:t,current:r,multiselect:this.props.multiselect},n):(0,a.jsx)(l,{items:e,onSelect:t,current:r,multiselect:this.props.multiselect,noAccent:!0},n))})]})}}let u=({item:e,onSelect:t,current:r,multiselect:n})=>{let o=r===e,s=e.addOn?{position:"relative"}:void 0;return(0,a.jsxs)(i.zx,{icon:e.icon,noOverflow:!0,className:"msp-action-menu-button",onClick:r=>t(n?[e]:e,r),disabled:e.disabled,style:s,title:e.description,children:[o||e.selected?(0,a.jsx)("b",{children:e.label}):e.label,e.addOn]})};function c(e){return!!e&&Array.isArray(e)}function d(e){return e&&"item"===e.kind}function p(e){return e&&"header"===e.kind}function f(e,t){if(p(e))return t;if(d(e))return t.push(e),t;for(let r of e)f(r,t);return t}},75679:function(e,t,r){let a;r.d(t,{CR:function(){return d},rm:function(){return f},qL:function(){return c}});var n=r(5862),i=r(70371),o=r(75042),s=r(67058),l=r(52755);let u=(0,r(34602).bc)([["black",0],["gray",8421504],["white",16777215],["red",13840661],["orange",14840576],["yellow",16565248],["green",6863872],["cyan",1484197],["blue",40160],["purple",8086783],["magenta",16394495],["violet",8200583]]);class c extends s.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.param.isExpanded||!!this.props.hideNameRow,lightness:0},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()},this.onClickSwatch=e=>{let t=i.Il.fromHexString(e.currentTarget.getAttribute("data-color")||"0");t!==this.props.value&&(this.props.param.isExpanded||this.setState({isExpanded:!1}),this.update(t))},this.onR=e=>{let[,t,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(e,t,r);a!==this.props.value&&this.update(a)},this.onG=e=>{let[t,,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(t,e,r);a!==this.props.value&&this.update(a)},this.onB=e=>{let[t,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(t,r,e);a!==this.props.value&&this.update(a)},this.onRGB=e=>{let t=i.Il.fromHexStyle(e.currentTarget.value||"0"
7319);t!==this.props.value&&this.update(t)},this.onLighten=()=>{this.update(i.Il.lighten(this.props.value,.1))},this.onDarken=()=>{this.update(i.Il.darken(this.props.value,.1))}}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}swatch(){return(0,n.jsx)("div",{className:"msp-combined-color-swatch",children:u.map(e=>(0,n.jsx)(l.zx,{inline:!0,"data-color":e[1],onClick:this.onClickSwatch,style:{background:i.Il.toStyle(e[1])}},e[1]))})}render(){let e=this.props.param.label||(0,o.l9)(this.props.name),[t,r,a]=i.Il.toRgb(this.props.value),s=(0,n.jsxs)(n.Fragment,{children:[this.swatch(),(0,n.jsx)(l.Ft,{label:"RGB",className:"msp-control-label-short",control:(0,n.jsxs)("div",{style:{display:"flex",textAlignLast:"center",left:"80px"},children:[(0,n.jsx)(l.oi,{onChange:this.onR,numeric:!0,value:t,delayMs:250,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)(l.oi,{onChange:this.onG,numeric:!0,value:r,delayMs:250,style:{order:2,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)(l.oi,{onChange:this.onB,numeric:!0,value:a,delayMs:250,style:{order:3,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)("input",{onInput:this.onRGB,type:"color",value:i.Il.toHexStyle(this.props.value),style:{order:4,flex:"1 1 auto",minWidth:"32px",width:"32px",height:"32px",padding:"0 2px 0 2px",background:"none",border:"none",cursor:"pointer"}})]})}),(0,n.jsxs)("div",{style:{display:"flex",textAlignLast:"center"},children:[(0,n.jsx)(l.zx,{onClick:this.onLighten,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Lighten"}),(0,n.jsx)(l.zx,{onClick:this.onDarken,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Darken"})]})]});return this.props.hideNameRow?s:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.Ft,{title:this.props.param.description,label:e,control:(0,n.jsx)(l.zx,{onClick:this.toggleExpanded,inline:!0,className:"msp-combined-color-button",style:{background:i.Il.toStyle(this.props.value)}})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:s})]})}}function d(){return a||(a=(0,n.jsx)(n.Fragment,{children:u.map(e=>(0,n.jsx)("option",{value:e[1],style:{background:`${i.Il.toStyle(e[1])}`},children:(0,o.ce)(e[0])},e[1]))}))}let p=function(){let e=new Map;for(let t of u)e.set(t[1],t[0]);return e}();function f(e){return p.has(e)?null:(0,n.jsx)("option",{value:e,style:{background:`${i.Il.toStyle(e)}`},children:i.Il.toRgbString(e)},i.Il.toHexString(e))}},52755:function(e,t,r){r.d(t,{CO:function(){return m},Ft:function(){return g},M$:function(){return d},eQ:function(){return s},hU:function(){return f},iI:function(){return h},oi:function(){return u},wc:function(){return c},zx:function(){return p}});var a=r(5862),n=r(67058),i=r(70371),o=r(86517);class s extends n.Component{constructor(){super(...arguments),this.state={isExpanded:!!this.props.initialExpanded},this.headerClicked=()=>{this.props.onHeaderClick?this.props.onHeaderClick():this.setState({isExpanded:!this.state.isExpanded})}}render(){let e=this.props.hideOffset?"msp-control-group-children":"msp-control-group-children msp-control-offset";return this.props.childrenClassName&&(e+=" "+this.props.childrenClassName),(0,a.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative",marginTop:this.props.noTopMargin?0:void 0},children:[(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginLeft:this.props.headerLeftMargin},title:this.props.title,children:(0,a.jsxs)(p,{onClick:this.headerClicked,children:[!this.props.hideExpander&&(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.Sr:o.x3}),this.props.topRightIcon&&(0,a.jsx)(o.JO,{svg:this.props.topRightIcon,style:{position:"absolute",right:"2px",top:0}}),(0,a.jsx)("b",{children:this.props.header})]})}),this.state.isExpanded&&(0,a.jsx)("div",{className:e,style:{display:this.state.isExpanded?"block":"none",maxHeight:this.props.maxHeight,overflow:"hidden",overflowY:"auto"},children:this.props.children})]})}}function l(e){return e}class u extends n.PureComponent{constructor(){super(...arguments),this.input=n.createRef(),this.delayHandle=void 0,this.pendingValue=void 0,this.state={originalValue:"",value:""},this.onBlur=()=>{this.setState({value:""+this.state.originalValue}),this.props.onBlur&&this.props.onBlur()},this.raiseOnChange=()=>{void 0!==this.pendingValue&&(this.props.onChange(this.pendingValue),this.pendingValue=void 0)},this.onChange=e=>{let t=e.target.value;if(this.props.isValid&&!this.props.isValid(t)||this.props.numeric&&Number.isNaN(+t)){this.clearTimeout(),this.setState({value:t});return}if(this.props.numeric)this.setState({value:t},()=>this.triggerChanged(t,+t));else{let e=(this.props.toValue||l)(t),r=(this.props.fromValue||l)(e);this.setState({value:r},()=>this.triggerChanged(r,e))}},this.onKeyUp=e=>
7319{(27===e.charCode||27===e.keyCode||"Escape"===e.key)&&this.props.blurOnEscape&&this.input.current&&this.input.current.blur()},this.onKeyPress=e=>{(13===e.keyCode||13===e.charCode||"Enter"===e.key)&&(this.isPending&&(this.clearTimeout(),this.raiseOnChange()),this.props.blurOnEnter&&this.input.current&&this.input.current.blur(),this.props.onEnter&&this.props.onEnter()),e.stopPropagation()}}get isPending(){return void 0!==this.delayHandle}clearTimeout(){this.isPending&&(clearTimeout(this.delayHandle),this.delayHandle=void 0)}triggerChanged(e,t){this.clearTimeout(),e!==this.state.originalValue&&(this.props.delayMs?(this.pendingValue=t,this.delayHandle=setTimeout(this.raiseOnChange,this.props.delayMs)):this.props.onChange(t))}static getDerivedStateFromProps(e,t){let r=e.fromValue?e.fromValue(e.value):e.value;return r===t.originalValue?null:{originalValue:r,value:r}}render(){return(0,a.jsx)("input",{type:"text",className:this.props.className,style:this.props.style,ref:this.input,onBlur:this.onBlur,value:this.state.value,placeholder:this.props.placeholder,onChange:this.onChange,onKeyPress:this.props.onEnter||this.props.blurOnEnter||this.props.blurOnEscape?this.onKeyPress:void 0,onKeyDown:this.props.blurOnEscape?this.onKeyUp:void 0,disabled:!!this.props.isDisabled})}}class c extends n.Component{constructor(){super(...arguments),this.state={isExpanded:!1},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){let{label:e,pivot:t,controls:r}=this.props;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g,{label:(0,a.jsxs)(a.Fragment,{children:[e,(0,a.jsx)("button",{className:"msp-btn-link msp-btn-icon msp-control-group-expander",onClick:this.toggleExpanded,title:`${this.state.isExpanded?"Less":"More"} options`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.OE:o.so,style:{display:"inline-block"}})})]}),control:t,children:this.props.colorStripe&&(0,a.jsx)("div",{className:"msp-expandable-group-color-stripe",style:{backgroundColor:i.Il.toStyle(this.props.colorStripe)}})}),this.state.isExpanded&&(0,a.jsx)("div",{className:"msp-control-offset",children:r})]})}}function d(e){return(0,a.jsxs)("div",{className:`msp-section-header${e.accent?" msp-transform-header-brand-"+e.accent:""}`,children:[e.icon&&(0,a.jsx)(o.JO,{svg:e.icon}),e.title," ",(0,a.jsx)("small",{children:e.desc})]})}function p(e){let t,r="msp-btn";return e.inline||(r+=" msp-btn-block"),e.noOverflow&&(r+=" msp-no-overflow"),e.flex&&(r+=" msp-flex-item"),("on"===e.commit||e.commit)&&(r+=" msp-btn-commit msp-btn-commit-on"),"off"===e.commit&&(r+=" msp-btn-commit msp-btn-commit-off"),e.children||(r+=" msp-btn-childless"),e.className&&(r+=" "+e.className),e.flex&&("number"==typeof e.flex?t={flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:"string"==typeof e.flex&&(t={flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex})),e.style&&(t?Object.assign(t,e.style):t=e.style),(0,a.jsxs)("button",{onClick:e.onClick,title:e.title,disabled:e.disabled,style:t,className:r,"data-id":e["data-id"],"data-color":e["data-color"],onContextMenu:e.onContextMenu,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,children:[e.icon&&(0,a.jsx)(o.JO,{svg:e.icon}),e.children]})}function f(e){let t,r=`msp-btn msp-btn-icon${e.small?"-small":""}${e.className?" "+e.className:""}`;return void 0!==e.toggleState&&(r+=` msp-btn-link-toggle-${e.toggleState?"on":"off"}`),e.transparent&&(r+=" msp-transparent-bg"),e.flex&&(t="boolean"==typeof e.flex?{flex:"0 0 32px",padding:0}:"number"==typeof e.flex?{flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:{flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex}),e.style&&(t?Object.assign(t,e.style):t=e.style),(0,a.jsxs)("button",{className:r,onClick:e.onClick,title:e.title,disabled:e.disabled,"data-id":e["data-id"],style:t,children:[e.svg&&(0,a.jsx)(o.JO,{svg:e.svg}),e.extraContent]}
7319)}class m extends n.PureComponent{constructor(){super(...arguments),this.onClick=e=>{e.currentTarget.blur(),this.props.toggle()}}render(){let e=this.props,t=e.label,r=e.isSelected?`${e.className||""} msp-control-current`:e.className;return(0,a.jsx)(p,{icon:this.props.icon,onClick:this.onClick,title:this.props.title,inline:this.props.inline,disabled:e.disabled,style:e.style,className:r,children:t&&this.props.isSelected?(0,a.jsx)("b",{children:t}):t})}}class h extends n.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.initiallyExpanded},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginTop:void 0!==this.props.marginTop?this.props.marginTop:"1px",marginLeft:this.props.headerLeftMargin},children:(0,a.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,style:this.props.headerStyle,children:[(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.x3:o.Sr}),this.props.header]})}),this.state.isExpanded&&(this.props.noOffset?this.props.children:(0,a.jsx)("div",{className:this.props.accent?"msp-accent-offset":"msp-control-offset",children:this.props.children}))]})}}function g(e){let t="msp-control-row";return e.className&&(t+=" "+e.className),(0,a.jsxs)("div",{className:t,children:[(0,a.jsx)("span",{className:"msp-control-row-label",title:e.title,children:e.label}),(0,a.jsx)("div",{className:"msp-control-row-ctrl",children:e.control}),e.children]})}},86517:function(e,t,r){r.d(t,{$z:function(){return tt},B1:function(){return K},BO:function(){return eo},Bk:function(){return tu},C:function(){return eg},Ds:function(){return er},E5:function(){return O},GB:function(){return g},GH:function(){return th},GT:function(){return eX},Hs:function(){return el},Hx:function(){return eL},JO:function(){return n},Md:function(){return eZ},Ne:function(){return e8},Nj:function(){return tb},O4:function(){return X},OE:function(){return e0},Ot:function(){return tf},P3:function(){return Z},Pj:function(){return tv},Ri:function(){return ti},S1:function(){return T},SB:function(){return eR},Sr:function(){return F},Sv:function(){return e$},U9:function(){return en},UY:function(){return eV},X4:function(){return z},Yh:function(){return eT},Yv:function(){return tg},Z:function(){return eN},Zj:function(){return G},_$:function(){return c},_U:function(){return H},bu:function(){return m},cS:function(){return eD},dU:function(){return eK},dw:function(){return ep},e0:function(){return eb},e3:function(){return eA},ec:function(){return e9},ed:function(){return eB},fw:function(){return V},gu:function(){return ts},gv:function(){return A},h5:function(){return l},hY:function(){return e2},hc:function(){return ta},iZ:function(){return eM},ip:function(){return M},jE:function(){return k},ks:function(){return eH},lW:function(){return p},n2:function(){return ee},n3:function(){return ex},nI:function(){return td},pW:function(){return ec},qN:function(){return y},rd:function(){return e4},sZ:function(){return em},so:function(){return D},uL:function(){return eO},x3:function(){return _},yi:function(){return $},yn:function(){return ty}});var a=r(5862);function n(e){return e.svg?(0,a.jsx)("span",{className:`msp-icon msp-material-icon${e.inline?" msp-icon-inline":""}`,title:e.title,style:e.style,children:(0,a.jsx)(e.svg,{})}):null}let i=(0,a.jsx)("circle",{r:"6px",id:"circle-left",cy:"12px",cx:"8px",strokeWidth:"1px"}),o=(0,a.jsx)("circle",{r:"6px",id:"circle-right",cy:"12px",cx:"16px",strokeWidth:"1px"}),s=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"}),(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"})]})]});function l(){return s}let u=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o,(0,a.jsxs)("mask",{id:"mask-left",children:[(0,a.jsx)("use",{href:"#circle-left",fill:"white",stroke:"white"}),(0,a.jsx)("use",{href:"#circle-right",fill:"black",strokeWidth:"0px",stroke:"white"})]})]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",mask:"url(#mask-left)"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function c(){return u}let d=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o,(0,a.jsx)("clipPath",{id:"clip-left",children:(0,a.jsx)("use",{href:"#circle-right"})})]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",clipPath:"url(#clip-left)"}),(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function p(){return d}let f=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"})]})]});function m(){return f}let h=(0,a.jsx)("svg",{width:"17px",height:"17px",viewBox:"0 0 299.463 299.463",strokeWidth:"6px",children:(0,a.jsx)("g",{children:(0,a.jsx)("path",{d:"M256.851,173.832v-48.201c22.916-4.918,34.151-30.668,22.556-50.771c-11.547-20.004-39.486-23.251-55.242-5.844 l-41.746-24.106C189.618,22.603,172.861,0,149.734,0c-23.132,0-39.881,22.609-32.685,44.911L75.305,69.016 C59.522,51.586,31.597,54.88,20.061,74.863c-11.63,20.163-0.298,45.862,22.557,50.769v48.2 c-22.821,4.898-34.195,30.591-22.556,50.771c11.529,19.972,39.454,23.285,55.242,5.845l41.746,24.106 c-7.199,22.3
731908,9.559,44.911,32.685,44.911c23.132,0,39.88-22.609,32.685-44.911l41.745-24.106 c15.817,17.469,43.73,14.099,55.242-5.844c0,0,0-0.001,0.001-0.002c4.587-7.953,5.805-17.213,3.431-26.076 C279.392,185.657,269.129,176.461,256.851,173.832z M249.62,72.088c20.568,0,27.428,27.191,10.008,37.239 c-0.003,0.002-0.006,0.003-0.009,0.005c-10.04,5.81-22.85,1.762-27.877-8.475C225.206,87.548,234.938,72.088,249.62,72.088z M149.734,14.4c11.005,0,19.958,8.954,19.958,19.959c0,11.127-9.077,19.958-19.958,19.958c-10.95,0-19.958-8.9-19.958-19.958 C129.776,23.354,138.729,14.4,149.734,14.4z M39.84,109.328c-17.451-10.067-10.534-37.24,10.01-37.24 c15.311,0,24.922,16.653,17.251,29.942C61.681,111.397,49.517,114.925,39.84,109.328z M59.802,224.702 c-9.535,5.503-21.768,2.229-27.268-7.298c-7.639-13.242,1.887-29.945,17.236-29.945c0.013,0,0.027,0,0.04,0 C70.07,187.48,77.49,214.469,59.802,224.702z M149.734,285.062c-11.005,0-19.958-8.954-19.958-19.958 c0-11.127,9.077-19.958,19.958-19.958c10.954,0,19.958,8.903,19.958,19.958C169.693,276.109,160.74,285.062,149.734,285.062z M216.953,217.982l-41.727,24.095c-13.778-15.22-37.459-14.94-50.983,0l-41.728-24.096c6.196-19.289-5.541-39.835-25.498-44.149 V125.63c19.752-4.268,31.762-24.65,25.498-44.149l41.727-24.095c13.629,15.055,37.32,15.093,50.983,0l41.728,24.096 c-6.196,19.29,5.534,39.835,25.498,44.149v48.202C222.61,178.123,210.721,198.581,216.953,217.982z M266.935,217.404 c-5.501,9.528-17.732,12.802-27.261,7.302c-17.682-10.23-10.301-37.247,10.032-37.247 C264.984,187.459,274.602,204.112,266.935,217.404z"})})});function g(){return h}let b=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z"})});function y(){return b}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M17,22V20H20V17H22V20.5C22,20.89 21.84,21.24 21.54,21.54C21.24,21.84 20.89,22 20.5,22H17M7,22H3.5C3.11,22 2.76,21.84 2.46,21.54C2.16,21.24 2,20.89 2,20.5V17H4V20H7V22M17,2H20.5C20.89,2 21.24,2.16 21.54,2.46C21.84,2.76 22,3.11 22,3.5V7H20V4H17V2M7,2V4H4V7H2V3.5C2,3.11 2.16,2.76 2.46,2.46C2.76,2.16 3.11,2 3.5,2H7M13,17.25L17,14.95V10.36L13,12.66V17.25M12,10.92L16,8.63L12,6.28L8,8.63L12,10.92M7,14.95L11,17.25V12.66L7,10.36V14.95M18.23,7.59C18.73,7.91 19,8.34 19,8.91V15.23C19,15.8 18.73,16.23 18.23,16.55L12.75,19.73C12.25,20.05 11.75,20.05 11.25,19.73L5.77,16.55C5.27,16.23 5,15.8 5,15.23V8.91C5,8.34 5.27,7.91 5.77,7.59L11.25,4.41C11.5,4.28 11.75,4.22 12,4.22C12.25,4.22 12.5,4.28 12.75,4.41L18.23,7.59Z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M16,4L9,8.04V15.96L16,20L23,15.96V8.04M16,6.31L19.8,8.5L16,10.69L12.21,8.5M0,7V9H7V7M11,10.11L15,12.42V17.11L11,14.81M21,10.11V14.81L17,17.11V12.42M2,11V13H7V11M4,15V17H7V15"})});let x=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10.07,14.27C10.57,14.03 11.16,14.25 11.4,14.75L13.7,19.74L15.5,18.89L13.19,13.91C12.95,13.41 13.17,12.81 13.67,12.58L13.95,12.5L16.25,12.05L8,5.12V15.9L9.82,14.43L10.07,14.27M13.64,21.97C13.14,22.21 12.54,22 12.31,21.5L10.13,16.76L7.62,18.78C7.45,18.92 7.24,19 7,19A1,1 0 0,1 6,18V3A1,1 0 0,1 7,2C7.24,2 7.47,2.09 7.64,2.23L7.65,2.22L19.14,11.86C19.57,12.22 19.62,12.85 19.27,13.27C19.12,13.45 18.91,13.57 18.7,13.61L15.54,14.23L17.74,18.96C18,19.46 17.76,20.05 17.26,20.28L13.64,21.97Z"})});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{fill:"currentColor",d:"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{fill:"currentColor",d:"M20,11H23V13H20V11M1,11H4V13H1V11M13,1V4H11V1H13M4.92,3.5L7.05,5.64L5.63,7.05L3.5,4.93L4.92,3.5M16.95,5.63L19.07,3.5L20.5,4.93L18.37,7.05L16.95,5.63M12,6A6,6 0 0,1 18,12C18,14.22 16.79,16.16 15,17.2V19A1,1 0 0,1 14,20H10A1,1 0 0,1 9,19V17.2C7.21,16.16 6,14.22 6,12A6,6 0 0,1 12,6
7319M14,21V22A1,1 0 0,1 13,23H11A1,1 0 0,1 10,22V21H14M11,18H13V15.87C14.73,15.43 16,13.86 16,12A4,4 0 0,0 12,8A4,4 0 0,0 8,12C8,13.86 9.27,15.43 11,15.87V18Z"})});let S=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{fill:"currentColor",d:"M7.5,5.6L5,7L6.4,4.5L5,2L7.5,3.4L10,2L8.6,4.5L10,7L7.5,5.6M19.5,15.4L22,14L20.6,16.5L22,19L19.5,17.6L17,19L18.4,16.5L17,14L19.5,15.4M22,2L20.6,4.5L22,7L19.5,5.6L17,7L18.4,4.5L17,2L19.5,3.4L22,2M13.34,12.78L15.78,10.34L13.66,8.22L11.22,10.66L13.34,12.78M14.37,7.29L16.71,9.63C17.1,10 17.1,10.65 16.71,11.04L5.04,22.71C4.65,23.1 4,23.1 3.63,22.71L1.29,20.37C0.9,20 0.9,19.35 1.29,18.96L12.96,7.29C13.35,6.9 14,6.9 14.37,7.29Z"})});function T(){return S}let C=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M3 17.25V21H6.75L17.81 9.93L14.06 6.18L3 17.25M22.61 18.36L18.36 22.61L13.16 17.41L14.93 15.64L15.93 16.64L18.4 14.16L19.82 15.58L18.36 17L19.42 18L20.84 16.6L22.61 18.36M6.61 10.83L1.39 5.64L5.64 1.39L7.4 3.16L4.93 5.64L6 6.7L8.46 4.22L9.88 5.64L8.46 7.05L9.46 8.05L6.61 10.83M20.71 7C21.1 6.61 21.1 6 20.71 5.59L18.37 3.29C18 2.9 17.35 2.9 16.96 3.29L15.12 5.12L18.87 8.87L20.71 7Z"})});function O(){return C}let I=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3h7zM7 9H4V5h3v4zm10 6h3v4h-3v-4zm0-10h3v4h-3V5z"})});function A(){return I}let w=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})});function D(){return w}let E=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"})});function M(){return P}let P=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15 2c-2.71 0-5.05 1.54-6.22 3.78-1.28.67-2.34 1.72-3 3C3.54 9.95 2 12.29 2 15c0 3.87 3.13 7 7 7 2.71 0 5.05-1.54 6.22-3.78 1.28-.67 2.34-1.72 3-3C20.46 14.05 22 11.71 22 9c0-3.87-3.13-7-7-7M9 20c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.87 3.13 7 7 7-.84.63-1.88 1-3 1m3-3c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.86 3.13 6.99 7 7-.84.63-1.88 1-3 1m4.7-3.3c-.53.19-1.1.3-1.7.3-2.76 0-5-2.24-5-5 0-.6.11-1.17.3-1.7.53-.19 1.1-.3 1.7-.3 2.76 0 5 2.24 5 5 0 .6-.11 1.17-.3 1.7M19 12c0-3.86-3.13-6.99-7-7 .84-.63 1.87-1 3-1 2.76 0 5 2.24 5 5 0 1.12-.37 2.16-1 3"})});function k(){return E}let B=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 10l5 5 5-5z"})});function _(){return B}let R=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10 17l5-5-5-5v10z"})});function F(){return R}let L=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"})});function z(){return L}let N=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})});function G(){return N}let U=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 12h-2v3h-3v2h5zM7 9h3V7H5v5h2zm14-6H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16.01H3V4.99h18z"})});function V(){return U}let j=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3 .5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 5.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM14 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-3.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm-11 10c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 7c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-17c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 5.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm8 .5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3 8.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM14 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-4-12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 8.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-4.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-4c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"})});function H(){return j}let q=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15 7v12.97l-4.21-1.81-.79
7319-.34-.79.34L5 19.97V7h10m4-6H8.99C7.89 1 7 1.9 7 3h10c1.1 0 2 .9 2 2v13l2 1V3c0-1.1-.9-2-2-2zm-4 4H5c-1.1 0-2 .9-2 2v16l7-3 7 3V7c0-1.1-.9-2-2-2z"})});function X(){return q}let W=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34a.9959.9959 0 00-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z"})});function K(){return W}let Q=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.61 18.99l-9.08-9.08c.93-2.34.45-5.1-1.44-7C9.79.61 6.21.4 3.66 2.26L7.5 6.11 6.08 7.52 2.25 3.69C.39 6.23.6 9.82 2.9 12.11c1.86 1.86 4.57 2.35 6.89 1.48l9.11 9.11c.39.39 1.02.39 1.41 0l2.3-2.3c.4-.38.4-1.01 0-1.41zm-3 1.6l-9.46-9.46c-.61.45-1.29.72-2 .82-1.36.2-2.79-.21-3.83-1.25C3.37 9.76 2.93 8.5 3 7.26l3.09 3.09 4.24-4.24-3.09-3.09c1.24-.07 2.49.37 3.44 1.31 1.08 1.08 1.49 2.57 1.24 3.96-.12.71-.42 1.37-.88 1.96l9.45 9.45-.88.89z"})});function Z(){return Q}let Y=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"})});function $(){return Y}let J=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M14.25 2.26l-.08-.04-.01.02C13.46 2.09 12.74 2 12 2 6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-4.75-3.31-8.72-7.75-9.74zM19.41 9h-7.99l2.71-4.7c2.4.66 4.35 2.42 5.28 4.7zM13.1 4.08L10.27 9l-1.15 2L6.4 6.3C7.84 4.88 9.82 4 12 4c.37 0 .74.03 1.1.08zM5.7 7.09L8.54 12l1.15 2H4.26C4.1 13.36 4 12.69 4 12c0-1.85.64-3.55 1.7-4.91zM4.59 15h7.98l-2.71 4.7c-2.4-.67-4.34-2.42-5.27-4.7zm6.31 4.91L14.89 13l2.72 4.7C16.16 19.12 14.18 20 12 20c-.38 0-.74-.04-1.1-.09zm7.4-3l-4-6.91h5.43c.17.64.27 1.31.27 2 0 1.85-.64 3.55-1.7 4.91z"})});function ee(){return J}let et=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9.4 10.5l4.77-8.26C13.47 2.09 12.75 2 12 2c-2.4 0-4.6.85-6.32 2.25l3.66 6.35.06-.1zM21.54 9c-.92-2.92-3.15-5.26-6-6.34L11.88 9h9.66zm.26 1h-7.49l.29.5 4.76 8.25C21 16.97 22 14.61 22 12c0-.69-.07-1.35-.2-2zM8.54 12l-3.9-6.75C3.01 7.03 2 9.39 2 12c0 .69.07 1.35.2 2h7.49l-1.15-2zm-6.08 3c.92 2.92 3.15 5.26 6 6.34L12.12 15H2.46zm11.27 0l-3.9 6.76c.7.15 1.42.24 2.17.24 2.4 0 4.6-.85 6.32-2.25l-3.66-6.35-.93 1.6z"})});function er(){return et}let ea=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"})});function en(){return ea}let ei=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"})});function eo(){return ei}let es=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-7 7H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4z"})});function el(){return es}let eu=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})});function ec(){return eu}let ed=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function ep(){return ed}let ef=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function em(){return ef}let eh=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19.35 10.04C18.67 6.59 
731915.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"})});function eg(){return eh}let ev=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})});function eb(){return ev}let ey=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z"})});function ex(){return ey}let eS=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M17 15h2V7c0-1.1-.9-2-2-2H9v2h8v8zM7 17V1H5v4H1v2h4v10c0 1.1.9 2 2 2h10v4h2v-4h4v-2H7z"})});function eT(){return eS}let eC=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z"})});function eO(){return eC}let eI=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-5.04-6.71l-2.75 3.54-1.96-2.36L6.5 17h11l-3.54-4.71z"})});function eA(){return eI}let ew=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z"})});function eD(){return ew}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"})});let eE=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})});function eM(){return eE}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"})});let eP=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z"})});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"})});let ek=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})});function eB(){return ek}let e_=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})});function eR(){return e_}let eF=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"})});function eL(){return eF}let ez=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81l5-4.5M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z"})});function eN(){return ez}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"})});let eG=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5
7319H6.79c-.39-.88-1.26-1.5-2.29-1.5C3.12 9.5 2 10.62 2 12s1.12 2.5 2.5 2.5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5 1.38 0 2.5-1.12 2.5-2.5s-1.12-2.5-2.5-2.5z"})}),eU=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})});function eV(){return eU}let ej=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"})});function eH(){return ej}let eq=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})});function eX(){return eq}let eW=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})});function eK(){return eW}let eQ=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M8 5v14l11-7z"})});function eZ(){return eQ}let eY=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"})});function e$(){return eY}let eJ=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 13H5v-2h14v2z"})});function e0(){return eJ}let e1=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"})});function e2(){return e1}let e3=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"})});function e4(){return e3}let e5=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsx)("circle",{cx:"7",cy:"14",r:"3"}),(0,a.jsx)("circle",{cx:"11",cy:"6",r:"3"}),(0,a.jsx)("circle",{cx:"16.6",cy:"17.6",r:"3"})]});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})});let e6=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 6h2v12H6zm3.5 6l8.5 6V6z"})});function e8(){return e6}let e7=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 6h12v12H6z"})});function e9(){return e7}let te=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 6h16v2H4zm2-4h12v2H6zm14 8H4c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm0 10H4v-8h16v8zm-10-7.27v6.53L16 16z"})});function tt(){return te}let tr=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z"})});function ta(){return tr}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M21 4H7V2H5v20h2v-8h14l-2-5zm-6 5c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2"})});let tn=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"})});function ti(){return tn}let to=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5-.59 1.22-1.42 2.27-2.41 3.12l1.41 1.41c1.39-1.23 2.49-2.77 3.18-4.53C21.27 7.11 17 4 12 4c-1.27 0-2.49.2-3.64.57l1.65 1.65C10.66 6.09 11.32 6 12 6zm-1.07 1.14L13 9.21c.57.25 1.03.71 1.28 1.28l2.07 2.07c.08-.34.14-.7.14-1.07C16.5 9.01 14.48 7 12 7c-.37 0-.72.05-1.07.14zM2.01 3.87l2.68 2.68C3.06 7.83 1.77 9.53 1 11.5 2.73 15.89 7 19 12 19c1.52 0 2.98-.29 4.32-.82l3.42 3.42 1.41-1.41L3.42 2.45 2.01 3.87zm7.5 7.5l2.61 2.61c-.04.01-.08.02-.12.02-1.38 0-2.5-1.12-2.5-2.5 0-.05.01-.08.01-.13zm-3.4-3.4l1.75 1.75c-.23.55-.36 1.15-.36 1.78 0 2.48 2.02 4.5 4.5 4.5.63 0 1.23-.13 1.7
73197-.36l.98.98c-.88.24-1.8.38-2.75.38-3.79 0-7.17-2.13-8.82-5.5.7-1.43 1.72-2.61 2.93-3.53z"})});function ts(){return to}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M6 9h12v2H6zm8 5H6v-2h8zm4-6H6V6h12z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 4h16v12H5.17L4 17.17zm0-2c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm2 10h8v2H6zm0-3h12v2H6zm0-3h12v2H6z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10H7v-2h10z"})});let tl=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5C19.17 14.87 15.79 17 12 17s-7.17-2.13-8.82-5.5C4.83 8.13 8.21 6 12 6m0-2C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 5c1.38 0 2.5 1.12 2.5 2.5S13.38 14 12 14s-2.5-1.12-2.5-2.5S10.62 9 12 9m0-2c-2.48 0-4.5 2.02-4.5 4.5S9.52 16 12 16s4.5-2.02 4.5-4.5S14.48 7 12 7z"})});function tu(){return tl}let tc=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M1 21h22L12 2 
73191 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})});function td(){return tc}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M 9.64 7.64 c 0.23 -0.5 0.36 -1.05 0.36 -1.64 c 0 -2.21 -1.79 -4 -4 -4 S 2 3.79 2 6 s 1.79 4 4 4 c 0.59 0 1.14 -0.13 1.64 -0.36 L 10 12 l -2.36 2.36 C 7.14 14.13 6.59 14 6 14 c -2.21 0 -4 1.79 -4 4 s 1.79 4 4 4 s 4 -1.79 4 -4 c 0 -0.59 -0.13 -1.14 -0.36 -1.64 L 12 14 l 7 7 h 3 v -1 L 9.64 7.64 Z M 6 8 c -1.1 0 -2 -0.89 -2 -2 s 0.9 -2 2 -2 s 2 0.89 2 2 s -0.9 2 -2 2 Z m 0 12 c -1.1 0 -2 -0.89 -2 -2 s 0.9 -2 2 -2 s 2 0.89 2 2 s -0.9 2 -2 2 Z m 6 -7.5 c -0.28 0 -0.5 -0.22 -0.5 -0.5 s 0.22 -0.5 0.5 -0.5 s 0.5 0.22 0.5 0.5 s -0.22 0.5 -0.5 0.5 Z M 19 3 l -6 6 l 2 2 l 7 -7 V 3 Z"})});let tp=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0 c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2 c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1 C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06 c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41 l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41 c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36 c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})});function tf(){return tp}let tm=(0,a.jsxs)("svg",{width:"16px",height:"16px",viewBox:"0 0 16 16",children:[(0,a.jsx)("path",{d:"M8 1.248c1.857 0 3.526.641 4.65 1.794a5 5 0 0 1 2.518 1.09C13.907 1.482 11.295 0 8 0 4.75 0 2.12 1.48.844 4.122a5 5 0 0 1 2.289-1.047C4.236 1.872 5.974 1.248 8 1.248"}),(0,a.jsx)("path",{d:"M12 12a4 4 0 0 1-2.786-1.13l-.002-.002a1.6 1.6 0 0 0-.276-.167A2.2 2.2 0 0 0 8 10.5c-.414 0-.729.103-.935.201a1.6 1.6 0 0 0-.277.167l-.002.002A4 4 0 1 1 4 4h8a4 4 0 0 1 0 8"})]});function th(){return tm}let tg=function(){return x},tv=function(){return e5},tb=function(){return eG},ty=function(){return eP}},91126:function(e,t,r){let a;r.d(t,{NN:function(){return k},Fp:function(){return E},G4:function(){return M},Sz:function(){return V},di:function(){return _}});var n=r(5862),i=r(67058),o=r(87144),s=r(20694),l=r(59725),u=r(70371),c=r(66939),d=r(67738),p=r(61445),f=r(14086),m=r(75042),h=r(22401),g=r(75600),b=r(75679),y=r(52755),x=r(86517);class S extends i.PureComponent{render(){let{legend:e}=this.props,t=e.colors.map(e=>Array.isArray(e)?`${u.Il.toStyle(e[0])} ${100*e[1]}%`:u.Il.toStyle(e)).join(", ");return(0,n.jsx)("div",{className:"msp-scale-legend",children:(0,n.jsxs)("div",{style:{background:`linear-gradient(to right, ${t})`},children:[(0,n.jsx)("span",{style:{float:"left"},children:e.minLabel}),(0,n.jsx)("span",{style:{float:"right"},children:e.maxLabel})]})})}}class T extends i.PureComponent{render(){let{legend:e}=this.props;return(0,n.jsx)("div",{className:"msp-table-legend",children:e.table.map((e,t)=>{let[r,a]=e;return(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"msp-table-legend-color",style:{backgroundColor:u.Il.toStyle(a)}}),(0,n.jsx)("div",{className:"msp-table-legend-text",children:r})]},t)})})}}class C extends i.Component{constructor(e){super(e),this.state={show:!1},this.handleHover=this.handleHover.bind(this),this.handleHoverOff=this.handleHoverOff.bind(this),this.deletePoint=this.deletePoint.bind(this)}handleHover(){this.setState({show:!0});let e=o.Sg.create(this.props.nX,this.props.nY);this.props.onmouseover(e)}handleHoverOff(){this.setState({show:!1}),this.props.onmouseover(void 0)}deletePoint(){this.props.delete(this.props.id)}render(){return[(0,n.jsx)("circle",{r:"10",id:`${this.props.id}`,cx:this.props.x,cy:this.props.y,onClick:this.props.onclick,onDoubleClick:this.props.delete(this.props.id),onMouseEnter:this.handleHover,onMouseLeave:this.handleHoverOff,onMouseDown:this.props.onmousedown,fill:"black"},`${this.props.id}circle`)]}}var O=r(1573),I=r(36111);class A extends i.Component{constructor(e){for(let t of(super(e),this.handleKeyDown=e=>{},this.handleKeyUp=e=>{},this.handleClick=e=>e=>{},this.handleMouseDown=e=>t=>{if(0===e||e===this.state.points.length-1||this.state.canSelectMultiple)return;let r=this.normalizePoint(o.Sg.create(this.state.points[e][0],this.state.points[e][1]));this.ghostPoints.push(document.createElementNS(this.namespace,"circle")),this.ghostPoints[0].setAttribute("r","10"),this.ghostPoints[0].setAttribute("fill","orange"),this.ghostPoints[0].setAttribute("cx",`${r[0]}`),this.ghostPoints[0].setAttribute("cy",`${r[1]}`),this.ghostPoints[0].setAttribute("style","display: none"),this.gElement.appendChild(this.ghostPoints[0]),this.updatedX=r[0],this.updatedY=r[1],this.selected=[e]},this.deletePoint=e=>t=>{if(0===e||e===this.state.points.length-1)return;let r=this.state.points.filter((t,r)=>r!==e);r.sort((e,t)=>
7319e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:r}),this.change(r),t.stopPropagation()},this.myRef=i.createRef(),this.state={points:[o.Sg.create(0,0),o.Sg.create(1,0)],copyPoint:void 0,canSelectMultiple:!1},this.height=400,this.width=600,this.padding=70,this.selected=void 0,this.ghostPoints=[],this.namespace="http://www.w3.org/2000/svg",this.props.data))this.state.points.push(t);this.state.points.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.handleDrag=this.handleDrag.bind(this),this.handleMultipleDrag=this.handleMultipleDrag.bind(this),this.handleDoubleClick=this.handleDoubleClick.bind(this),this.refCallBack=this.refCallBack.bind(this),this.handlePointUpdate=this.handlePointUpdate.bind(this),this.change=this.change.bind(this),this.handleKeyUp=this.handleKeyUp.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleEnter=this.handleEnter.bind(this)}render(){let e=this.renderPoints(),t=this.renderLines(),r=this.renderHistogram();return[(0,n.jsx)("div",{children:(0,n.jsxs)("svg",{className:"msp-canvas",ref:this.refCallBack,viewBox:`0 0 ${this.width+this.padding} ${this.height+this.padding}`,onMouseMove:this.handleDrag,onMouseUp:this.handlePointUpdate,onMouseLeave:this.handleLeave,onMouseEnter:this.handleEnter,tabIndex:0,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onDoubleClick:this.handleDoubleClick,children:[(0,n.jsxs)("g",{stroke:"black",fill:"black",children:[r,t,e]}),(0,n.jsx)("g",{className:"ghost-points",stroke:"black",fill:"black"})]})},"LineGraph"),(0,n.jsx)("div",{id:"modal-root"},"modal")]}componentDidMount(){this.gElement=document.getElementsByClassName("ghost-points")[0]}change(e){let t=e.slice();t.shift(),t.pop(),this.props.onChange(t)}handleDrag(e){let t;if(void 0===this.selected)return;let r=this.myRef.createSVGPoint(),a=this.padding/2;r.x=e.clientX,r.y=e.clientY;let n=r.matrixTransform(this.myRef.getScreenCTM().inverse());t=o.Sg.create(n.x,n.y),t=(n.x<a||n.x>this.width+a)&&(n.y>this.height+a||n.y<a)?o.Sg.create(this.updatedX,this.updatedY):n.x<a?o.Sg.create(a,n.y):n.x>this.width+a?o.Sg.create(this.width+a,n.y):n.y>this.height+a?o.Sg.create(n.x,this.height+a):n.y<a?o.Sg.create(n.x,a):o.Sg.create(n.x,n.y),this.updatedX=t[0],this.updatedY=t[1];let i=this.unNormalizePoint(t);this.ghostPoints[0].setAttribute("style","display: visible"),this.ghostPoints[0].setAttribute("cx",`${t[0]}`),this.ghostPoints[0].setAttribute("cy",`${t[1]}`),this.props.onDrag(i)}handleMultipleDrag(){}handlePointUpdate(e){let t=this.selected;if(this.state.canSelectMultiple)return;if(void 0===t||0===t[0]||t[0]===this.state.points.length-1){this.setState({copyPoint:void 0});return}this.selected=void 0;let r=this.unNormalizePoint(o.Sg.create(this.updatedX,this.updatedY)),a=this.state.points.filter((e,r)=>r!==t[0]);a.push(r),a.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:a}),this.change(a),this.gElement.innerHTML="",this.ghostPoints=[],document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}handleDoubleClick(e){let t=this.myRef.createSVGPoint();t.x=e.clientX,t.y=e.clientY;let r=t.matrixTransform(this.myRef.getScreenCTM().inverse()),a=this.state.points,n=this.padding/2;if(r.x<n||r.x>this.width+n||r.y>this.height+n||r.y<this.padding/2)return;let i=this.unNormalizePoint(o.Sg.create(r.x,r.y));a.push(i),a.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:a}),this.change(a)}handleLeave(){void 0!==this.selected&&(document.addEventListener("mousemove",this.handleDrag,!0),document.addEventListener("mouseup",this.handlePointUpdate,!0))}handleEnter(){document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}normalizePoint(e){let t=this.padding/2,r=this.width+t,a=this.height+t,n=e[0]*(r-t)+t,i=e[1]*(a-t)+t,s=this.height+this.padding-i;return o.Sg.create(n,s)}unNormalizePoint(e){let t=this.padding/2,r=this.width+t,a=this.height+t,n=(e[0]-t)/(r-t),i=(this.height+this.padding-e[1]-t)/(a-t);return o.Sg.create(n,i)}refCallBack(e){e&&(this.myRef=e)}renderHistogram(){if(!this.props.volume)return null;let e=O.r.getHistogram(this.props.volume.grid,40),t=[],r=e.counts.length,a=this.width/r,i=this.padding/2,o=(0,I.uH)(e.counts)||1;for(let s=0;s<r;s++){let l=this.width*s/(r-1)+i,u=this.height+i,c=this.height*(1-e.counts[s]/o)+i;t.push((0,n.jsx)("line",{x1:l,x2:l,y1:u,y2:c,stroke:"#ded9ca",strokeWidth:a},`histogram${s}`))}return t}renderPoints(){let e;let t=[];for(let r=0;r<this.state.points.length;r++)0!==r&&r!==this.state.points.length-1&&(e=this.normalizePoint(this.state.points[r]),t.push((0,n.jsx)(C,{id:r,x:e[0],y:e[1],nX:this.state.points[r][0],nY:this.state.points[r][1],selected:!1,delete:this.deletePoint,onmouseover:this.props.onHover,onmousedown:this.handleMouseDown(r),onclick:this.handleClick(r)}
7319,r)));return t}renderLines(){let e,t,r,a,i;let s=[],l=[],u=this.padding/2;for(let n of this.state.points)e=this.width+u,t=this.height+this.padding,r=n[0]*(e-u)+u,a=n[1]*(t-u)+u,i=this.height+this.padding-a,s.push(o.Sg.create(r,i));let c=s.length;for(let e=0;e<c-1;e++){let t=s[e][0],r=s[e][1],a=s[e+1][0],i=s[e+1][1];l.push((0,n.jsx)("line",{x1:t,x2:a,y1:r,y2:i,stroke:"#cec9ba",strokeWidth:"5"},`lineOf${e}`))}return l}}var w=r(47792),D=r(55368);class E extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{var t,r;if(null===(r=(t=this.props).onChange)||void 0===r||r.call(t,e,this.props.values),this.props.onChangeValues){let t={...this.props.values,[e.name]:e.value};this.props.onChangeValues(t,this.props.values)}},this.paramGroups=(0,d.j)(e=>(function(e){function t(e,t){let r=e[0],a=t[0];return r&&r[1].category?a&&a[1].category&&r[1].category<a[1].category?-1:1:-1}let r=Object.keys(e),a={params:[[]],map:void 0},n={params:[[]],map:void 0};for(let t of r){let r=e[t];r.isHidden||function(e,t,r){let a=P(t);if(a){if(t.category){r.map||(r.map=new Map);let n=r.map.get(t.category);n||(n=[],r.map.set(t.category,n),r.params.push(n)),n.push([e,t,a])}else r.params[0].push([e,t,a])}}(t,r,r.isEssential?a:n)}return a.params.sort(t),n.params.sort(t),{essentials:a.params,advanced:n.params}})(e))}renderGroup(e){var t;let r;if(0===e.length)return null;let a=this.props.values,i=null;for(let[o,s,l]of e)null!==(t=s.hideIf)&&void 0!==t&&t.call(s,a)||(i||(i=[]),r=s.category,i.push((0,n.jsx)(l,{param:s,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled,name:o,value:a[o]},o)));return i?r?[(0,n.jsx)(y.iI,{header:r,children:i},r)]:i:null}renderPart(e){let t=null;for(let r of e){let e=this.renderGroup(r);if(e)for(let r of(t||(t=[]),e))t.push(r)}return t}render(){let e=this.paramGroups(this.props.params),t=this.renderPart(e.essentials),r=this.renderPart(e.advanced);return t&&r?(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(y.iI,{header:"Advanced Options",children:r})]}):t||r}}class M extends h.Xl{constructor(){super(...arguments),this.state={isDisabled:!1},this.setSettings=(e,t)=>{let r={...t,[e.name]:e.value},a=this.props.mapping.update(r,this.plugin);this.props.mapping.apply(a,this.plugin)}}componentDidMount(){this.subscribe(this.plugin.state.data.behaviors.isUpdating,e=>{this.setState({isDisabled:e})})}render(){let e=this.props.mapping.getTarget(this.plugin),t=this.props.mapping.getValues(e,this.plugin),r=this.props.mapping.params(this.plugin);return(0,n.jsx)(E,{params:r,values:t,onChange:this.setSettings,isDisabled:this.state.isDisabled})}}function P(e){switch(e.type){case"value":case"data-ref":return;case"boolean":return F;case"number":return void 0!==e.min&&void 0!==e.max?N:z;case"converted":return ed;case"conditioned":return ec;case"multi-select":return en;case"color":return b.qL;case"color-list":return e.offsets?$:Y;case"vec3":return J;case"mat4":return ee;case"url":return et;case"file":return er;case"file-list":return ea;case"select":return j;case"value-ref":return H;case"text":return G;case"interval":return void 0!==e.min&&void 0!==e.max?X:q;case"group":return ei;case"mapped":return eo;case"line-graph":return L;case"script":return ep;case"object-list":return eu;default:console.warn(`${e} has no associated UI component`);return}}class k extends i.PureComponent{render(){let{legend:e,description:t}=this.props,r=e&&function(e){switch(e.kind){case"scale-legend":return S;case"table-legend":return T;default:console.warn(`${e} has no associated UI component`);return}}(e);return(0,n.jsx)("div",{className:"msp-help-text",children:(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"msp-help-description",children:[(0,n.jsx)(x.JO,{svg:x.Hx,inline:!0}),t]}),r&&(0,n.jsx)("div",{className:"msp-help-legend",children:(0,n.jsx)(r,{legend:e})})]})})}}function B(e){let{props:t,state:r,control:a,toggleHelp:i,addOn:o}=e,s=[];t.param.shortLabel&&s.push("msp-control-label-short"),t.param.twoColumns&&s.push("msp-control-col-2"),t.param.multiline&&s.push("msp-control-twoline");let l=s.join(" "),u=t.param.label||(0,m.l9)(t.name),c=t.param.help?t.param.help(t.value):{description:t.param.description,legend:t.param.legend},d=c.description||c.legend,p=u+(d?". Click for help.":"");return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{className:l,title:p,label:(0,n.jsxs)(n.Fragment,{children:[u,d&&(0,n.jsx)(_,{show:r.showHelp,toggle:i,title:p})]}),control:a}),d&&r.showHelp&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(k,{legend:c.legend,description:c.description})}),o]})}function _({show:e,toggle:t,title:r}){return(0,n.jsx)("button",{className:"msp-help msp-btn-link msp-btn-icon msp-control-group-expander",onClick:t,title:r||`${e?"Hide":"Show"} help`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,n.jsx)(x.JO,{svg:x.Hx})})}class R extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp}
7319)}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderAddOn(){return null}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}class F extends R{constructor(){super(...arguments),this.onClick=e=>{this.update(!this.props.value),e.currentTarget.blur()}}renderControl(){return(0,n.jsxs)("button",{onClick:this.onClick,disabled:this.props.isDisabled,children:[(0,n.jsx)(x.JO,{svg:this.props.value?x.pW:x.dw}),this.props.value?"On":"Off"]})}}class L extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1,isOverPoint:!1,message:`${this.props.param.defaultValue.length} points`},this.onHover=e=>{this.setState({isOverPoint:!this.state.isOverPoint}),e?this.setState({message:this.pointToLabel(e)}):this.setState({message:`${this.props.value.length} points`})},this.onDrag=e=>{this.setState({message:this.pointToLabel(e)})},this.onChange=e=>{this.props.onChange({name:this.props.name,param:this.props.param,value:e})},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}pointToLabel(e){var t,r;if(!e)return"";let a=null===(r=(t=this.props.param).getVolume)||void 0===r?void 0:r.call(t);if(!a)return`(${e[0].toFixed(2)}, ${e[1].toFixed(2)})`;{let{min:t,max:r,mean:n,sigma:i}=a.grid.stats,o=t+(r-t)*e[0];return`(${o.toFixed(2)} | ${((o-n)/i).toFixed(2)}σ, ${e[1].toFixed(2)})`}}render(){var e,t;let r=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:r,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:`${this.state.message}`})}),(0,n.jsx)("div",{className:"msp-control-offset",style:{display:this.state.isExpanded?"block":"none",marginTop:1},children:(0,n.jsx)(A,{data:this.props.value,volume:null===(t=(e=this.props.param).getVolume)||void 0===t?void 0:t.call(e),onChange:this.onChange,onHover:this.onHover,onDrag:this.onDrag})})]})}}class z extends i.PureComponent{constructor(){super(...arguments),this.state={value:"0"},this.update=e=>{let t=(0,p.p8)(this.props.param.step||.01);e=parseFloat(e.toFixed(t)),this.props.onChange({param:this.props.param,name:this.props.name,value:e})}}render(){let e=this.props.param.label||(0,m.l9)(this.props.name),t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01);return(0,n.jsx)(y.Ft,{title:this.props.param.description,label:t,control:(0,n.jsx)(y.oi,{numeric:!0,value:parseFloat(this.props.value.toFixed(r)),onEnter:this.props.onEnter,placeholder:e,isDisabled:this.props.isDisabled,onChange:this.update})})}}class N extends R{constructor(){super(...arguments),this.onChange=e=>{this.update(e)}}renderControl(){let e=void 0===this.props.value?this.props.param.defaultValue:this.props.value;return(0,n.jsx)(w.iR,{value:e,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,onChangeImmediate:this.props.param.immediateUpdate?this.onChange:void 0,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}}class G extends R{constructor(){super(...arguments),this.updateValue=e=>{e!==this.props.value&&this.update(e)}}renderControl(){let e=this.props.param.placeholder||this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsx)(U,{props:this.props,placeholder:e,update:this.updateValue})}}function U({props:e,placeholder:t,update:r}){let[a,o]=i.useState(e.value),[s,l]=i.useState(!1);i.useEffect(()=>{o(e.value)},[e.value]);let u=t=>{s||e.param.disableInteractiveUpdates?o(t.target.value):(o(t.target.value),r(t.target.value))},c=t=>{l(!1);let a=t.target;e.param.disableInteractiveUpdates?o(a.value):(o(a.value),r(a.value))},d=t=>{e.param.disableInteractiveUpdates&&(o(t.target.value),r(t.target.value))},p=t=>{"Enter"===t.key&&(e.onEnter&&!e.param.multiline?(t.stopPropagation(),e.onEnter()):t.shiftKey||t.ctrlKey||t.metaKey?t.currentTarget.blur():e.param.disableInteractiveUpdates&&!e.param.multiline&&(o(a),r(a)))};return e.param.multiline?(0,n.jsx)("div",{className:"msp-control-text-area-wrapper",children:(0,n.jsx)("textarea",{value:null!=a?a:"",placeholder:t,disabled:e.isDisabled,onChange:u,onBlur:d,onKeyDown:p,onCompositionStart:()=>l(!0),onCompositionEnd:c}
7319)}):(0,n.jsx)("input",{type:"text",value:null!=a?a:"",placeholder:t,disabled:e.isDisabled,onChange:u,onBlur:d,onKeyDown:p,onCompositionStart:()=>l(!0),onCompositionEnd:c})}class V extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{"number"==typeof this.props.param.defaultValue?this.update(parseInt(e.target.value,10)):this.update(e.target.value)}}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}render(){let e=void 0!==this.props.value&&!this.props.param.options.some(e=>e[0]===this.props.value);return(0,n.jsxs)("select",{className:"msp-form-control",title:this.props.title,value:void 0!==this.props.value?this.props.value:this.props.param.defaultValue,onChange:this.onChange,disabled:this.props.isDisabled,children:[e&&(0,n.jsx)("option",{value:this.props.value,children:`[Invalid] ${this.props.value}`},this.props.value),this.props.param.options.map(([e,t])=>(0,n.jsx)("option",{value:e,children:t},e))]})}}class j extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,showOptions:!1},this.onSelect=e=>{e&&e.value!==this.props.value?this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:e.value})}):this.setState({showOptions:!1})},this.toggle=()=>this.setState({showOptions:!this.state.showOptions}),this.cycle=()=>{let{options:e}=this.props.param,t=e.findIndex(e=>e[0]===this.props.value),r=t===e.length-1?0:t+1;this.props.onChange({param:this.props.param,name:this.props.name,value:e[r][0]})},this.items=(0,d.j)(e=>g.P.createItemsFromSelectOptions(e.options)),this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}renderControl(){var e;let t=this.items(this.props.param),r=void 0!==this.props.value?g.P.findItem(t,this.props.value):void 0,a=r?r.label:void 0===this.props.value?`${(null===(e=g.P.getFirstItem(t))||void 0===e?void 0:e.label)||""} [Default]`:`[Invalid] ${this.props.value}`,i=this.props.param.cycle?this.cycle:this.toggle,o=this.props.param.cycle?"center":"left",s=this.props.param.cycle?"on"===this.props.value?x.pW:"off"===this.props.value?x.dw:void 0:void 0;return(0,n.jsx)(y.CO,{disabled:this.props.isDisabled,style:{textAlign:o,overflow:"hidden",textOverflow:"ellipsis"},label:a,title:a,icon:s,toggle:i,isSelected:this.state.showOptions,className:"msp-select-toggle"})}renderAddOn(){if(!this.state.showOptions)return null;let e=this.items(this.props.param),t=g.P.findItem(e,this.props.value);return(0,n.jsx)(g.P,{items:e,current:t,onSelect:this.onSelect})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}class H extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,showOptions:!1},this.onSelect=e=>{e&&e.value!==this.props.value?this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:{ref:e.value}})}):this.setState({showOptions:!1})},this.toggle=()=>this.setState({showOptions:!this.state.showOptions}),this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}get items(){return g.P.createItemsFromSelectOptions(this.props.param.getOptions(this.context))}renderControl(){var e;let t=this.items,r=this.props.value.ref?g.P.findItem(t,this.props.value.ref):void 0,a=r?r.label:`[Ref] ${null!==(e=this.props.value.ref)&&void 0!==e?e:""}`;return(0,n.jsx)(y.CO,{disabled:this.props.isDisabled,style:{textAlign:"left",overflow:"hidden",textOverflow:"ellipsis"},label:a,title:a,toggle:this.toggle,isSelected:this.state.showOptions})}renderAddOn(){if(!this.state.showOptions)return null;let e=this.items,t=g.P.findItem(e,this.props.value.ref);return(0,n.jsx)(g.P,{items:e,current:t,onSelect:this.onSelect})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}H.contextType=h.e5;class q extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={0:f.e.Numeric(0,{step:this.props.param.step},{label:"Min"}),1:f.e.Numeric(0,{step:this.props.param.step},{label:"Max"})},this.componentChange=({name:e,value:t})=>{let r=[...this.props.value];r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01),a=`[${e[0].toFixed(r)}, ${e[1].toFixed(r)}]`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:a})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}}class X extends R{constructor(){super(...arguments),this.onChange=e=>{this.update(e)}}renderControl(){return(0,n.jsx)(w.Ng,{value:this.props.value,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}}let W=(0,d.m)(D.Os),K=(0,d.m)(D.uf);function Q(e,t="0"){var r;return{background:(r=e.colors,"set"===e.kind?K(r):W(r)),position:"absolute",bottom:"0",height:"4px",right:t,left:"0"}}function Z(){return a||(a=function(){let e=e=>{let t=(0,c.jy)(e[0]);return(0,n.jsx)("div",{style:Q({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})})};return{ColorPresets:{all:g.P.createItemsFromSelectOptions(c.EA,{addOn:e,description:e=>e[3]}),scale:g.P.createItemsFromSelectOptions(c.Sq,{addOn:e,description:e=>e[3]}),set:g.P.createItemsFromSelectOptions(c.Yg,{addOn:e,description:e=>e[3]})},ColorsParam:f.e.ObjectList({color:f.e.Color(0)},({color:e})=>u.Il.toHexString(e).toUpperCase()),OffsetColorsParam:f.e.ObjectList({color:f.e.Color(0),offset:f.e.Numeric(0,{min:0,max:1,step:.
731901})},({color:e,offset:t})=>`${u.Il.toHexString(e).toUpperCase()} [${t.toFixed(2)}]`),IsInterpolatedParam:f.e.Boolean(!1,{label:"Interpolated"})}}())}class Y extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,show:void 0},this.toggleEdit=()=>this.setState({show:"edit"===this.state.show?void 0:"edit"}),this.togglePresets=()=>this.setState({show:"presets"===this.state.show?void 0:"presets"}),this.selectPreset=e=>{if(!e)return;this.setState({show:void 0});let t=(0,c.jy)(e.value);this.update({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})},this.colorsChanged=({value:e})=>{this.update({kind:this.props.value.kind,colors:e.map(e=>e.color)})},this.isInterpolatedChanged=({value:e})=>{this.update({kind:e?"interpolate":"set",colors:this.props.value.colors})},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderControl(){let{value:e}=this.props;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[1===e.colors.length?"1 color":`${e.colors.length} colors`,(0,n.jsx)("div",{style:Q(e,"33px")})]}),(0,n.jsx)(y.hU,{svg:x.O4,onClick:this.togglePresets,toggleState:"presets"===this.state.show,title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:e,ColorsParam:t,IsInterpolatedParam:r}=Z(),a=e[this.props.param.presetKind];if("presets"===this.state.show)return(0,n.jsx)(g.P,{items:a,onSelect:this.selectPreset});let i=this.props.value.colors.map(e=>({color:Array.isArray(e)?e[0]:e}));return(0,n.jsxs)("div",{className:"msp-control-offset",children:[(0,n.jsx)(eu,{name:"colors",param:t,value:i,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,n.jsx)(F,{name:"isInterpolated",param:r,value:"interpolate"===this.props.value.kind,onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}}class $ extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,show:void 0},this.toggleEdit=()=>this.setState({show:"edit"===this.state.show?void 0:"edit"}),this.togglePresets=()=>this.setState({show:"presets"===this.state.show?void 0:"presets"}),this.selectPreset=e=>{if(!e)return;this.setState({show:void 0});let t=(0,c.jy)(e.value);this.update({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})},this.colorsChanged=({value:e})=>{let t=e.map(e=>[e.color,e.offset]);t.sort((e,t)=>e[1]-t[1]),this.update({kind:this.props.value.kind,colors:t})},this.isInterpolatedChanged=({value:e})=>{this.update({kind:e?"interpolate":"set",colors:this.props.value.colors})},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderControl(){let{value:e}=this.props;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[1===e.colors.length?"1 color":`${e.colors.length} colors`,(0,n.jsx)("div",{style:Q(e,"33px")})]}),(0,n.jsx)(y.hU,{svg:x.O4,onClick:this.togglePresets,toggleState:"presets"===this.state.show,title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:e,OffsetColorsParam:t,IsInterpolatedParam:r}=Z(),a=e[this.props.param.presetKind];if("presets"===this.state.show)return(0,n.jsx)(g.P,{items:a,onSelect:this.selectPreset});let i=this.props.value.colors,o=i.map((e,t)=>Array.isArray(e)?{color:e[0],offset:e[1]}:{color:e,offset:t/i.length});return o.sort((e,t)=>e.offset-t.offset),(0,n.jsxs)("div",{className:"msp-control-offset",children:[(0,n.jsx)(eu,{name:"colors",param:t,value:o,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,n.jsx)(F,{name:"isInterpolated",param:r,value:"interpolate"===this.props.value.kind,onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}}class J extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={0:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.x||"X"}),1:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.y||"Y"}),2:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.z||"Z"})},this.componentChange=({name:e,value:t})=>{let r=o.AO.copy(o.AO.zero(),this.props.value);r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01),a=`[${e[0].toFixed(r)}, ${e[1].toFixed(r)}, ${e[2].toFixed(r)}]`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,n.jsx)("div",{title:a,className:"msp-no-overflow",style:{display:"block"},children:a})})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}}class ee extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={json:f.e.Text(JSON.stringify((0,o.yb)()),{description:"JSON array with 4x4 matrix in a column major (j * 4 + i indexing) format"})},this.componentChange=({name:e,value:t})=>{let r=o.yb.copy((0,o.yb)(),this.props.value);"json"===e?o.yb.copy(r,JSON.parse(t)):r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}changeValue(e){return t=>{let r=o.yb.copy((0,o.yb)(),this.props.value);r[e]=t,this.change(r)}}get grid(){let e=this.props.value,t=[];for(let r=0;r<4;r++){let a=[];for(let t=0;t<4;t++)a.push((0,n.jsx)(y.oi,{numeric:!0,delayMs:50,value:o.yb.getValue(e,r,t),onChange:this.changeValue(4*t+r),className:"msp-form-control",blurOnEnter:!0,isDisabled:this.props.isDisabled},t));t.push((0,n.jsx)("div",{className:"msp-flex-row",children:a},r))}return(0,n.jsx)("div",{className:"msp-parameter-matrix",children:t})}render(){let e={json:JSON.stringify(this.props.value)},t=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,n.jsx)("div",{className:"msp-no-overflow",style:{display:"block"},children:"4\xd74 Matrix"})})}),this.state.isExpanded&&(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.grid,(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})]})]})}}class et extends R{constructor(){super(...arguments),this.onChange=e=>{let t=e.target.value;t!==l.x.getUrl(this.props.value||"")&&this.update(l.x.Url(t))},this.onKeyPress=e=>{(13===e.keyCode||13===e.charCode||"Enter"===e.key)&&this.props.onEnter&&this.props.onEnter(),e.stopPropagation()}}renderControl(){let e=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsx)("input",{type:"text",value:l.x.getUrl(this.props.value||""),placeholder:e,onChange:this.onChange,onKeyPress:this.props.onEnter?this.onKeyPress:void 0,disabled:this.props.isDisabled})}}class er extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.onChangeFile=e=>{this.change(e.target.files[0])},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp}
7319)}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:l.x.File(e)})}renderControl(){let e=this.props.value;return(0,n.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[e?e.name:"Select a file..."," ",(0,n.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFile,type:"file",multiple:!1,accept:this.props.param.accept})]})}render(){return this.props.param.label?B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}}class ea extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.onChangeFileList=e=>{this.change(e.target.files)},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}change(e){let t=[];if(e)for(let r=0,a=e.length;r<a;++r)t.push(l.x.File(e[r]));this.props.onChange({name:this.props.name,param:this.props.param,value:t})}renderControl(){let e=this.props.value,t=[];if(e)for(let r of e)t.push(r.name);let r=0===t.length?"Select files...":1===t.length?t[0]:`${t.length} files selected`;return(0,n.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[r," ",(0,n.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFileList,type:"file",multiple:!0,accept:this.props.param.accept})]})}render(){return this.props.param.label?B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}}class en extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}toggle(e){return t=>{0>this.props.value.indexOf(e)?this.change(this.props.value.concat(e)):this.change(this.props.value.filter(t=>t!==e)),t.currentTarget.blur()}}render(){let e=this.props.value,t=this.props.param.emptyValue,r=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:r,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:0===e.length&&t?t:`${e.length} of ${this.props.param.options.length}`})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:this.props.param.options.map(([t,r])=>{let a=e.indexOf(t)>=0;return(0,n.jsx)(y.zx,{onClick:this.toggle(t),disabled:this.props.isDisabled,style:{marginTop:"1px"},children:(0,n.jsx)("span",{style:{float:a?"left":"right"},children:a?`✓ ${r}`:`${r} ✗`})},t)})})]})}}class ei extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.param.isExpanded,showPresets:!1,showHelp:!1},this.onChangeParam=e=>{this.change({...this.props.value,[e.name]:e.value})},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded}),this.toggleShowPresets=()=>this.setState({showPresets:!this.state.showPresets}),this.presetItems=(0,d.j)(e=>{var t;return g.P.createItemsFromSelectOptions(null!==(t=e.presets)&&void 0!==t?t:[])}),this.onSelectPreset=e=>{this.setState({showPresets:!1}),this.change(null==e?void 0:e.value)}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}pivotedPresets(){if(!this.props.param.presets)return null;let e=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,n.jsx)(x.JO,{svg:x.O4}),e," Presets"]}
7319)}),this.state.showPresets&&(0,n.jsx)(g.P,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]})}presets(){return this.props.param.presets?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"msp-control-group-presets-wrapper",children:(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,n.jsx)(x.JO,{svg:x.O4}),"Presets"]})})}),this.state.showPresets&&(0,n.jsx)(g.P,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]}):null}pivoted(){let e=this.props.param.pivot,t=this.props.param.params,r=t[e],a=P(r),i=(0,n.jsx)(a,{name:e,param:r,value:this.props.value[e],onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});if(!this.state.isExpanded)return(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[i,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options",style:{opacity:.7}})]});let o=Object.create(null);for(let r of Object.keys(t))r!==e&&(o[r]=t[r]);return(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[i,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options"}),(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.pivotedPresets(),(0,n.jsx)(E,{params:o,onEnter:this.props.onEnter,values:this.props.value,onChange:this.onChangeParam,isDisabled:this.props.isDisabled})]})]})}render(){let e=this.props.param.params;if(0===Object.keys(e).length)return null;if(this.props.param.pivot)return this.pivoted();let t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,n.jsx)(E,{params:e,onChange:this.onChangeParam,values:this.props.value,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});return this.props.inMapped?(0,n.jsx)("div",{className:"msp-control-offset",children:r}):this.props.param.isFlat?r:(0,n.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative"},children:[(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,children:[(0,n.jsx)(x.JO,{svg:this.state.isExpanded?x.x3:x.Sr}),t]})}),this.presets(),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:r})]})}}class eo extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.valuesCache={},this.onChangeName=e=>{this.change({name:e.value,params:this.getValues(e.value)})},this.onChangeParam=e=>{this.setValues(this.props.value.name,e.value),this.change({name:this.props.value.name,params:e.value})},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}setValues(e,t){this.valuesCache[e]=t}getValues(e){return e in this.valuesCache?this.valuesCache[e]:this.props.param.map(e).defaultValue}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}areParamsEmpty(e){for(let t of Object.keys(e))if(!e[t].isHidden)return!1;return!0}render(){let e=this.props.value||this.props.param.defaultValue,t=this.props.param.map(e.name),r=this.props.param.label||(0,m.l9)(this.props.name),a=P(t),i=this.props.param.help,o=i?{...this.props.param.select,help:e=>i({name:e,params:this.getValues(e)})}:this.props.param.select,s=(0,n.jsx)(j,{param:o,isDisabled:this.props.isDisabled,onChange:this.onChangeName,onEnter:this.props.onEnter,name:r,value:e.name});return a?"group"!==t.type||t.isFlat?(0,n.jsxs)(n.Fragment,{children:[s,(0,n.jsx)(a,{param:t,value:e.params,name:e.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):this.areParamsEmpty(t.params)?s:(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[s,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:`${r} Properties`,style:{opacity:this.state.isExpanded?void 0:.7}}),this.state.isExpanded&&(0,n.jsx)(ei,{inMapped:!0,param:t,value:e.params,name:e.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):s}}class es extends i.PureComponent{constructor(){super(...arguments),this.state={current:this.props.value},this.onChangeParam=e=>{this.setState({current:{...this.state.current,[e.name]:e.value}})},this.apply=()=>{this.props.apply(this.state.current)}}componentDidUpdate(e){(this.props.params!==e.params||this.props.value!==e.value)&&this.setState({current:this.props.value})}render(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(E,{params:this.props.params,onChange:this.onChangeParam,values:this.state.current,onEnter:this.apply,isDisabled:this.props.isDisabled}),(0,n.jsx)("button",{className:"msp-btn msp-btn-block msp-form-control msp-control-top-offset",onClick:this.apply,disabled:this.props.isDisabled,children:this.props.isUpdate?"Update":"Add"})]})}}class el extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.update=e=>{this.props.actions.update(e,this.props.index)},this.moveUp=()=>{this.props.actions.move(this.props.index,-1)},this.moveDown=()=>{this.props.actions.move(this.props.index,1)},this.remove=()=>{this.setState({isExpanded:!1}),this.props.actions.remove(this.props.index)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}render(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"msp-param-object-list-item",children:[(0,n.jsxs)("button",{className:"msp-btn msp-btn-block msp-form-control",onClick:this.toggleExpanded,children:[(0,n.jsx)("span",{children:`${this.props.index+1}: `}),this.props.param.getLabel(this.props.value)]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(y.hU,{svg:x.jE,title:"Move Up",onClick:this.moveUp,small:!0}),(0,n.jsx)(y.hU,{svg:x.X4,title:"Move Down",onClick:this.moveDown,small:!0}),(0,n.jsx)(y.hU,{svg:x.cS,title:"Remove",onClick:this.remove,small:!0})]})]}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(es,{params:this.props.param.element,apply:this.update,value:this.props.value,isUpdate:!0,isDisabled:this.props.isDisabled})})]})}}class eu extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.add=e=>{this.change([...this.props.value,e])},this.actions={update:(e,t)=>
7319{let r=this.props.value.slice(0);r[t]=e,this.change(r)},move:(e,t)=>{let r=this.props.value;if(1===r.length)return;let a=(e+t)%r.length;a<0&&(a+=r.length);let n=(r=r.slice(0))[e];r[e]=r[a],r[a]=n,this.change(r)},remove:e=>{let t=this.props.value,r=[];for(let a=0;a<t.length;a++)e!==a&&r.push(t[a]);this.change(r)}},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=`${e.length} item${1!==e.length?"s":""}`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:r})}),this.state.isExpanded&&(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.props.value.map((e,t)=>(0,n.jsx)(el,{param:this.props.param,value:e,index:t,actions:this.actions,isDisabled:this.props.isDisabled},t)),(0,n.jsx)(y.eQ,{header:"New Item",children:(0,n.jsx)(es,{params:this.props.param.element,apply:this.add,value:this.props.param.ctor(),isDisabled:this.props.isDisabled})})]})]})}}class ec extends i.PureComponent{constructor(){super(...arguments),this.onChangeCondition=e=>{this.change(this.props.param.conditionedValue(this.props.value,e.value))},this.onChangeParam=e=>{this.change(e.value)}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.conditionForValue(e),r=this.props.param.conditionParams[t],a=this.props.param.label||(0,m.l9)(this.props.name),i=P(r),o=(0,n.jsx)(j,{param:this.props.param.select,isDisabled:this.props.isDisabled,onChange:this.onChangeCondition,onEnter:this.props.onEnter,name:`${a} Kind`,value:t});return i?(0,n.jsxs)(n.Fragment,{children:[o,(0,n.jsx)(i,{param:r,value:e,name:a,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):o}}class ed extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{this.props.onChange({name:this.props.name,param:this.props.param,value:this.props.param.toValue(e.value)})}}render(){let e=this.props.param.fromValue(this.props.value),t=P(this.props.param.converted);return t?(0,n.jsx)(t,{param:this.props.param.converted,value:e,name:this.props.name,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled}):null}}class ep extends i.PureComponent{constructor(){super(...arguments),this.onChange=({name:e,value:t})=>{t!==this.props.value[e]&&this.props.onChange({param:this.props.param,name:this.props.name,value:{...this.props.value,[e]:t}})}}render(){let e={defaultValue:this.props.value.language,options:f.e.objectToOptions(s.Script.Info),type:"select"},t=(0,n.jsx)(j,{param:e,isDisabled:this.props.isDisabled,onChange:this.onChange,onEnter:this.props.onEnter,name:"language",value:this.props.value.language}),r={defaultValue:this.props.value.language,type:"text"},a=(0,n.jsx)(G,{param:r,isDisabled:this.props.isDisabled,onChange:this.onChange,name:"expression",value:this.props.value.expression});return(0,n.jsxs)(n.Fragment,{children:[t,"mol-script"!==this.props.value.language&&(0,n.jsxs)("div",{className:"msp-help-text",style:{padding:"10px"},children:[(0,n.jsx)(x.JO,{svg:x.nI})," Support for PyMOL, VMD, and Jmol selections is an experimental feature and may not always work as intended."]}),a]})}}},47792:function(e,t,r){r.d(t,{Ng:function(){return u},iR:function(){return l}});var a=r(5862),n=r(67058),i=r(52755),o=r(85764),s=r(58684);class l extends n.Component{constructor(){super(...arguments),this.state={isChanging:!1,current:0},this.begin=()=>{this.setState({isChanging:!0})},this.end=e=>{this.setState({isChanging:!1}),this.props.onChange(e)},this.updateCurrent=e=>{var t,r;this.setState({current:e}),null===(r=(t=this.props).onChangeImmediate)||void 0===r||r.call(t,e)},this.updateManually=e=>{this.setState({isChanging:!0});let t=e;1===this.props.step&&(t=Math.round(t)),t<this.props.min&&(t=this.props.min),t>this.props.max&&(t=this.props.max),this.setState({current:t,isChanging:!0})},this.onManualBlur=()=>{this.setState({isChanging:!1}),this.props.onChange(this.state.current)},this.onMouseWheel=e=>{let{dx:t,dy:r,dz:a}=(0,s.fN)(e),n=e.getModifierState("Shift"),i=(t>=0?1:-1)*(r>=0?1:-1)*(a>=0?1:-1)*(this.props.max-this.props.min)/(n?100:25);this.updateCurrent(this.state.current+i)}}static getDerivedStateFromProps(e,t){return t.isChanging||e.value===t.current?null:{current:e.value}}render(){let e=this.props.step;return void 0===e&&(e=1),(0,a.jsxs)("div",{className:this.props.hideInput?"msp-slider msp-slider-no-input":"msp-slider",children:[(0,a.jsx)("div",{children:(0,a.jsx)(b,{min:this.props.min,max:this.props.max,step:e,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onWheel:this.onMouseWheel,onChange:this.updateCurrent,onAfterChange:this.end})}),(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current,blurOnEnter:!0,onBlur:this.onManualBlur,isDisabled:this.props.disabled,onChange:this.updateManually})})]})}}class u extends n.Component{constructor(){super(...arguments),this.state={isChanging:!1,current:[0,1]},this.begin=()=>{this.setState({isChanging:!0})},this.end=e=>{this.setState({isChanging:!1}),this.props.onChange(e)},this.updateCurrent=e=>{this.setState({current:e})},this.updateMax=e=>{let t=e;1===this.props.step&&(t=Math.round(t)),t<this.state.current[0]?t
7319=this.state.current[0]:t<this.props.min&&(t=this.props.min),t>this.props.max&&(t=this.props.max),this.props.onChange([this.state.current[0],t])},this.updateMin=e=>{let t=e;1===this.props.step&&(t=Math.round(t)),t<this.props.min&&(t=this.props.min),t>this.state.current[1]?t=this.state.current[1]:t>this.props.max&&(t=this.props.max),this.props.onChange([t,this.state.current[1]])}}static getDerivedStateFromProps(e,t){return t.isChanging||e.value[0]===t.current[0]&&e.value[1]===t.current[1]?null:{current:e.value}}render(){let e=this.props.step;return void 0===e&&(e=1),(0,a.jsxs)("div",{className:"msp-slider2",children:[(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current[0],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMin})}),(0,a.jsx)("div",{children:(0,a.jsx)(b,{min:this.props.min,max:this.props.max,step:e,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onChange:this.updateCurrent,onAfterChange:this.end,range:!0,allowCross:!0})}),(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current[1],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMax})})]})}}function c(e){let t=[],r={}.hasOwnProperty;for(let e=0;e<arguments.length;e++){let a=arguments[e];if(!a)continue;let n=typeof a;if("string"===n||"number"===n)t.push(a);else if(Array.isArray(a))t.push(c.apply(null,a));else if("object"===n)for(let e in a)r.call(a,e)&&a[e]&&t.push(e)}return t.join(" ")}function d(e){return e.touches.length>1||"touchend"===e.type.toLowerCase()&&e.touches.length>0}function p(e,t){return e?t.touches[0].clientY:t.touches[0].pageX}function f(e,t){return e?t.clientY:t.pageX}function m(e,t){let r=t.getBoundingClientRect();return e?r.top+.5*r.height:r.left+.5*r.width}function h(e){e.stopPropagation(),e.preventDefault()}class g extends n.Component{render(){let{className:e,tipFormatter:t,vertical:r,offset:n,value:i,index:o}=this.props,s=r?{bottom:`${n}%`}:{left:`${n}%`};return(0,a.jsx)("div",{className:e,style:s,title:t(i,o)})}}class b extends n.Component{constructor(e){let t;super(e),this.sliderElement=n.createRef(),this.handleElements=[],this.dragOffset=0,this.startPosition=0,this.startValue=0,this._getPointsCache=void 0,this.onMouseDown=e=>{if(0!==e.button)return;let t=f(this.props.vertical,e);if(this.isEventFromHandle(e)){let r=m(this.props.vertical,e.target);this.dragOffset=t-r,t=r}else this.dragOffset=0;this.onStart(t),this.addDocumentEvents("mouse"),h(e)},this.onTouchMove=e=>{if(d(e)){this.end("touch");return}let t=p(this.props.vertical,e);this.onMove(e,t-this.dragOffset)},this.onTouchStart=e=>{if(d(e))return;let t=p(this.props.vertical,e);if(this.isEventFromHandle(e)){let r=m(this.props.vertical,e.target);this.dragOffset=t-r,t=r}else this.dragOffset=0;this.onStart(t),this.addDocumentEvents("touch"),h(e)},this.eventHandlers={touchmove:e=>this.onTouchMove(e),touchend:e=>this.end("touch"),mousemove:e=>this.onMouseMove(e),mouseup:e=>this.end("mouse")},this.calcOffset=e=>{let{min:t,max:r}=this.props;return(e-t)/(r-t)*100};let{range:r,min:a,max:i}=e,o=r?Array.apply(null,Array(+r+1)).map(()=>a):a,s="defaultValue"in e?e.defaultValue:o,l=void 0!==e.value?e.value:s,u=(r?l:[a,l]).map(e=>this.trimAlignValue(e));t=r&&u[0]===u[u.length-1]&&u[0]===i?0:u.length-1,this.state={handle:null,recent:t,bounds:u}}componentDidUpdate(e){if(!("value"in this.props||"min"in this.props||"max"in this.props))return;let{bounds:t}=this.state;if(e.range){let e=(this.props.value||t).map(e=>this.trimAlignValue(e,this.props));if(e.every((e,r)=>e===t[r]))return;this.setState({bounds:e}),t.some(e=>this.isValueOutOfBounds(e,this.props))&&this.props.onChange(e)}else{let r=void 0!==this.props.value?this.props.value:t[1],a=this.trimAlignValue(r,this.props);if(a===t[1]&&t[0]===e.min)return;this.setState({bounds:[e.min,a]}),this.isValueOutOfBounds(t[1],this.props)&&this.props.onChange(a)}}onChange(e){let t=this.props;"value"in t?void 0!==e.handle&&this.setState({handle:e.handle}):this.setState(e);let r={...this.state,...e},a=t.range?r.bounds:r.bounds[1];t.onChange(a)}onMouseMove(e){let t=f(this.props.vertical,e);this.onMove(e,t-this.dragOffset)}onMove(e,t){h(e);let r=this.props,a=this.state,n=t-this.startPosition,i=(n=this.props.vertical?-n:n)/this.getSliderLength()*(r.max-r.min),o=this.trimAlignValue(this.startValue+i);if(o===a.bounds[a.handle])return;let s=[...a.bounds];s[a.handle]=o;let l=a.handle;if(r.pushable){let e=a.bounds[l];this.pushSurroundingHandles(s,l,e)}else r.allowCross&&(s.sort((e,t)=>
7319e-t),l=s.indexOf(o));this.onChange({handle:l,bounds:s})}onStart(e){this.props.onBeforeChange(this.getValue());let t=this.calcValueByPos(e);this.startValue=t,this.startPosition=e;let r=this.state,{bounds:a}=r,n=1;if(this.props.range){let e=0;for(let r=1;r<a.length-1;++r)t>a[r]&&(e=r);Math.abs(a[e+1]-t)<Math.abs(a[e]-t)&&(e+=1),n=e;let i=a[e+1]===a[e];i&&(n=r.recent),i&&t!==a[e+1]&&(n=t<a[e+1]?e:e+1)}if(this.setState({handle:n,recent:n}),t===r.bounds[n])return;let i=[...r.bounds];i[n]=t,this.onChange({bounds:i})}getPoints(){let{marks:e,step:t,min:r,max:a}=this.props,n=this._getPointsCache;if(!n||n.marks!==e||n.step!==t){let n={...e};if(null!==t)for(let e=r;e<=a;e+=t)n[e]=e;let i=Object.keys(n).map(parseFloat);i.sort((e,t)=>e-t),this._getPointsCache={marks:e,step:t,points:i}}return this._getPointsCache.points}getPrecision(e){let t=e.toString(),r=0;return t.indexOf(".")>=0&&(r=t.length-t.indexOf(".")-1),r}getSliderLength(){let e=this.sliderElement.current;return e?this.props.vertical?e.clientHeight:e.clientWidth:0}getSliderStart(){let e=this.sliderElement.current.getBoundingClientRect();return this.props.vertical?e.top:e.left}getValue(){let{bounds:e}=this.state;return this.props.range?e:e[1]}addDocumentEvents(e){"touch"===e?(document.addEventListener("touchmove",this.eventHandlers.touchmove),document.addEventListener("touchend",this.eventHandlers.touchend)):"mouse"===e&&(document.addEventListener("mousemove",this.eventHandlers.mousemove),document.addEventListener("mouseup",this.eventHandlers.mouseup))}calcValue(e){let{vertical:t,min:r,max:a}=this.props,n=Math.abs(e/this.getSliderLength());return t?(1-n)*(a-r)+r:n*(a-r)+r}calcValueByPos(e){let t=e-this.getSliderStart();return this.trimAlignValue(this.calcValue(t))}end(e){this.removeEvents(e),this.props.onAfterChange(this.getValue()),this.setState({handle:null})}isEventFromHandle(e){for(let t of this.handleElements)if(t.current===e.target)return!0;return!1}isValueOutOfBounds(e,t){return e<t.min||e>t.max}pushHandle(e,t,r,a){let n=e[t],i=e[t];for(;r*(i-n)<a;){if(!this.pushHandleOnePoint(e,t,r))return e[t]=n,!1;i=e[t]}return!0}pushHandleOnePoint(e,t,r){let a=this.getPoints(),n=a.indexOf(e[t])+r;if(n>=a.length||n<0)return!1;let i=t+r,o=a[n],{pushable:s}=this.props,l=r*(e[i]-o);return!!this.pushHandle(e,i,r,+s-l)&&(e[t]=o,!0)}pushSurroundingHandles(e,t,r){let{pushable:a}=this.props,n=e[t],i=0;if(e[t+1]-n<+a?i=1:n-e[t-1]<+a&&(i=-1),0===i)return;let o=t+i,s=i*(e[o]-n);this.pushHandle(e,o,i,+a-s)||(e[t]=r)}removeEvents(e){"touch"===e?(document.removeEventListener("touchmove",this.eventHandlers.touchmove),document.removeEventListener("touchend",this.eventHandlers.touchend)):"mouse"===e&&(document.removeEventListener("mousemove",this.eventHandlers.mousemove),document.removeEventListener("mouseup",this.eventHandlers.mouseup))}trimAlignValue(e,t){let{handle:r,bounds:a}=this.state||{},{marks:n,step:i,min:o,max:s,allowCross:l}={...this.props,...t||{}},u=e;u<=o&&(u=o),u>=s&&(u=s),!l&&null!=r&&r>0&&u<=a[r-1]&&(u=a[r-1]),!l&&null!=r&&r<a.length-1&&u>=a[r+1]&&(u=a[r+1]);let c=Object.keys(n).map(parseFloat);if(null!==i){let e=Math.round((u-o)/i)*i+o;c.push(e)}let d=c.map(e=>Math.abs(u-e)),p=c[d.indexOf(Math.min.apply(Math,d))];return null!==i?parseFloat(p.toFixed(this.getPrecision(i))):p}render(){let{handle:e,bounds:t}=this.state,{className:r,prefixCls:i,disabled:s,vertical:l,range:u,step:d,marks:p,tipFormatter:f}=this.props,m=this.props.handle,h=t.map(this.calcOffset),g=`${i}-handle`,b=t.map((e,r)=>c({[g]:!0,[`${g}-${r+1}`]:!0,[`${g}-lower`]:0===r,[`${g}-upper`]:r===t.length-1})),y={prefixCls:i,noTip:null===d||null===f,tipFormatter:f,vertical:l};if(this.handleElements.length!==t.length){this.handleElements=[];for(let e=0;e<t.length;e++)this.handleElements.push(n.createRef())}let x=t.map((t,r)=>n.cloneElement(m,{...y,className:b[r],value:t,offset:h[r],dragging:e===r,index:r,key:r,ref:this.handleElements[r]}));u||x.shift();let S=c({[i]:!0,[`${i}-with-marks`]:Object.keys(p).length,[`${i}-disabled`]:s,[`${i}-vertical`]:this.props.vertical,[r]:!!r});return(0,a.jsxs)("div",{ref:this.sliderElement,className:S,onTouchStart:s?o.ZT:this.onTouchStart,onMouseDown:s?o.ZT:this.onMouseDown,onWheel:s?o.ZT:this.props.onWheel,children:[(0,a.jsx)("div",{className:`${i}-rail`}),x]})}}b.defaultProps={prefixCls:"msp-slider-base",className:"",min:0,max:100,step:1,marks:{},handle:(0,a.jsx)(g,{className:"",vertical:!1,offset:0,tipFormatter:e=>e,value:0,index:0}),onBeforeChange:o.ZT,onChange:o.ZT,onAfterChange:o.ZT,tipFormatter:(e,t)=>e,disabled:!1,range:!1,vertical:!1,allowCross:!0,pushable:!1}},46636:function(e,t,r){r.r(t),r.d(t,{DefaultPluginUISpec:function(){return ei}});var a,n,i={};r.r(i),r.d(i,{AssignColorVolume:function(){return k},DownloadDensity:function(){return P}});var o=r(8777),s=r(29414),l=r(72762),u=r(45366),c=r(67801),d=r(16668),p=r(14086);let f=s.q.create({name:"built-in.animate-assembly-unwind",display:{name:"Unwind Assembly"},isExportable:!0,params:e=>{let t=[["all","All"]];for(let r of e.state.data.select(c.tE.Generators.rootsOfType(l.G.Molecule.Structure)))t.push([r.transform.ref,r.obj.data.models[0].label]);return{durationInMs:p.e.Numeric(3e3,{min:100,max:1e4,step:100}),playOnce:p.e.Boolean(!1),target:p.e.Select(t[0][0],t)}},canApply(e){let t=e.state.data,r=c.EW.RootRef;return{canApply:t.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D,r)).length>0}},getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),initialState:()=>({t:0}),setup(e,t,r){let a=r.state.data,n=e.target&&"all"!==e.target?e.target:c.EW.RootRef,i=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D,n)),o=a.build(),s=!1;for(let e of i)a.select(c.tE.Generators.ofTransformer(u.L.Representation.UnwindStructureAssemblyRepresentation3D,e.transform.ref)).length>0||(s=!0,o.to(e).apply(u.L.Representation.UnwindStructureAssemblyRepresentation3D,{t:0},{tags:"animate-assembly-unwind"}));
7319if(s)return o.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3DState).withTag("animate-assembly-unwind"));if(0===n.length)return;let i=a.build();for(let e of n)i.delete(e.transform.ref);return i.commit()},async apply(e,t,r){let a=r.plugin.state.data,n=r.params.target&&"all"!==r.params.target?r.params.target:c.EW.RootRef,i=a.select(c.tE.Generators.ofTransformer(u.L.Representation.UnwindStructureAssemblyRepresentation3D,n));if(0===i.length)return{kind:"finished"};let o=a.build(),s=(t.current-t.lastApplied)/r.params.durationInMs,l=e.t+s,p=!1;for(let e of(r.params.playOnce&&l>=1?(p=!0,l=1):l%=1,i))o.to(e).update({t:l});return(await d.I.State.Update(r.plugin,{state:a,tree:o,options:{doNotLogTiming:!0}}),p)?{kind:"finished"}:{kind:"next",state:{t:l}}}});var m=r(23833),h=r(38964),g=r(43975);let b=(0,g.A)(),y=(0,g.A)(),x=(0,h.D)(),S=s.q.create({name:"built-in.animate-camera-spin",display:{name:"Camera Spin",description:"Spin the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(4e3,{min:100,max:2e4,step:100}),speed:p.e.Numeric(1,{min:1,max:10,step:1},{description:"How many times to spin in the specified duration."}),direction:p.e.Select("cw",[["cw","Clockwise"],["ccw","Counter Clockwise"]],{cycle:!0})}),initialState:(e,t)=>{var r;return{snapshot:null===(r=t.canvas3d)||void 0===r?void 0:r.camera.getSnapshot()}},getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{var a;null===(a=r.canvas3d)||void 0===a||a.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){var a,n;if(0===t.current)return{kind:"next",state:e};let i=e.snapshot;if(i.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?(null===(a=t.animation)||void 0===a?void 0:a.currentFrame)/(t.animation.frameCount+1):(0,m.uZ)(t.current/r.params.durationInMs,0,1),s=2*Math.PI*o*r.params.speed*("ccw"===r.params.direction?-1:1);g.A.sub(b,i.position,i.target),g.A.normalize(y,i.up),h.D.setAxisAngle(x,y,s),g.A.transformQuat(b,b,x);let l=g.A.add((0,g.A)(),i.target,b);return(null===(n=r.plugin.canvas3d)||void 0===n||n.requestCameraReset({snapshot:{...i,position:l},durationMs:0}),o>=.99999)?{kind:"finished"}:{kind:"next",state:e}}}),T=s.q.create({name:"built-in.animate-model-index",display:{name:"Animate Trajectory"},isExportable:!0,params:()=>({mode:p.e.MappedStatic("loop",{palindrome:p.e.Group({}),loop:p.e.Group({direction:p.e.Select("forward",[["forward","Forward"],["backward","Backward"]])}),once:p.e.Group({direction:p.e.Select("forward",[["forward","Forward"],["backward","Backward"]])},{isFlat:!0})},{options:[["palindrome","Palindrome"],["loop","Loop"],["once","Once"]]}),duration:p.e.MappedStatic("fixed",{fixed:p.e.Group({durationInS:p.e.Numeric(5,{min:1,max:120,step:.1},{description:"Duration in seconds"})},{isFlat:!0}),computed:p.e.Group({targetFps:p.e.Numeric(30,{min:5,max:250,step:1},{label:"Target FPS"})},{isFlat:!0}),sequential:p.e.Group({maxFps:p.e.Numeric(30,{min:5,max:60,step:1})},{isFlat:!0})})}),canApply(e){let t=e.state.data;for(let e of t.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory))){let r=c.tE.findAncestorOfType(t.tree,t.cells,e.transform.ref,l.G.Molecule.Trajectory);if(r&&r.obj&&r.obj.data.frameCount>1)return{canApply:!0}}return{canApply:!1,reason:"No trajectory to animate"}},getDuration:(e,t)=>{var r;if((null===(r=e.duration)||void 0===r?void 0:r.name)==="fixed")return{kind:"fixed",durationMs:1e3*e.duration.params.durationInS};if("computed"===e.duration.name){let r=t.state.data,a=r.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory)),n=0;for(let t of a){let a=c.tE.findAncestorOfType(r.tree,r.cells,t.transform.ref,l.G.Molecule.Trajectory);a&&a.obj&&(n=Math.max(Math.ceil(1e3*a.obj.data.frameCount/e.duration.params.targetFps),n))}return{kind:"fixed",durationMs:n}}return{kind:"unknown"}},initialState:()=>({}),async apply(e,t,r){if("sequential"===r.params.duration.name&&t.current>0&&t.current-t.lastApplied<1e3/r.params.duration.params.maxFps)return{kind:"skip"};let a=r.plugin.state.data,n=a.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory));if(0===n.length)return{kind:"finished"};let i=a.build(),o=r.params,s=e.palindromeDirections||{},p=!1,f=!0;
7319for(let e of n){let r=c.tE.findAncestorOfType(a.tree,a.cells,e.transform.ref,l.G.Molecule.Trajectory);if(!r||!r.obj)continue;let n=r.obj;n.data.frameCount<=1||i.to(e).update(r=>{let a=n.data.frameCount;if(1===a)return r;if(f=!1,"sequential"===o.duration.name){let t=1;if("once"===o.mode.name){if(-1==(t="backward"===o.mode.params.direction?-1:1)&&0===r.modelIndex||1===t&&r.modelIndex===a-1)return p=!0,r}else"palindrome"===o.mode.name&&(t=0===r.modelIndex?1:r.modelIndex===a-1?-1:s[e.transform.ref]||1);s[e.transform.ref]=t;let n=(r.modelIndex+t)%a;return n<0&&(n+=a),p=p||-1===t&&0===n||1===t&&n===a-1,{modelIndex:n}}{let e="fixed"===o.duration.name?1e3*o.duration.params.durationInS:Math.ceil(1e3*n.data.frameCount/o.duration.params.targetFps);if("once"===o.mode.name&&t.current>=e)return p=!0,{modelIndex:n.data.frameCount-1};let r=t.current%e/e;return"loop"===o.mode.name&&"backward"===o.mode.params.direction&&(r=1-r),"palindrome"===o.mode.name&&(r*=2)>1&&(r=2-r),{modelIndex:Math.min(Math.floor(n.data.frameCount*r),n.data.frameCount-1)}}})}return(f||await d.I.State.Update(r.plugin,{state:a,tree:i,options:{doNotLogTiming:!0}}),f||"once"===o.mode.name&&p)?{kind:"finished"}:"palindrome"===o.mode.name?{kind:"next",state:{palindromeDirections:s}}:{kind:"next",state:{}}}});var C=r(5932),O=r(40217),I=r(3305),A=r(123),w=r(54854),D=r(12845),E=r(59725),M=r(97667);let P=c.lQ.build({from:l.G.Root,display:{name:"Download Density",description:"Load a density from the provided source and create its default visual."},params:(e,t)=>{let{options:r}=t.dataFormats;return{source:p.e.MappedStatic("pdb-xray",{"pdb-xray":p.e.Group({provider:p.e.Group({id:p.e.Text("1tqn",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"]])},{pivot:"id"}),type:p.e.Select("2fofc",[["2fofc","2Fo-Fc"],["fofc","Fo-Fc"]])},{isFlat:!0}),"pdb-xray-ds":p.e.Group({provider:p.e.Group({id:p.e.Text("1tqn",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:p.e.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),"pdb-emd-ds":p.e.Group({provider:p.e.Group({id:p.e.Text("emd-8004",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:p.e.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),url:p.e.Group({url:p.e.Url(""),isBinary:p.e.Boolean(!1),format:p.e.Select("auto",r)},{isFlat:!0})},{options:[["pdb-xray","PDB X-ray maps"],["pdb-emd-ds","PDB EMD Density Server"],["pdb-xray-ds","PDB X-ray Density Server"],["url","URL"]]})}}})(({params:e},t)=>w.iQ.create("Download Density",async r=>{var a,n;let i,o,s;let l=e.source;switch(l.name){case"url":i=l.params;break;case"pdb-xray":i={url:E.x.Url("2fofc"===l.params.type?`https://www.ebi.ac.uk/pdbe/coordinates/files/${l.params.provider.id.toLowerCase()}.ccp4`:`https://www.ebi.ac.uk/pdbe/coordinates/files/${l.params.provider.id.toLowerCase()}_diff.ccp4`),isBinary:!0,label:`PDBe X-ray map: ${l.params.provider.id}`};break;case"pdb-emd-ds":i="pdbe"===l.params.provider.server?{url:E.x.Url(`https://www.ebi.ac.uk/pdbe/densities/emd/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`PDBe EMD Density Server: ${l.params.provider.id}`}:{url:E.x.Url(`https://maps.rcsb.org/em/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`RCSB PDB EMD Density Server: ${l.params.provider.id}`};break;case"pdb-xray-ds":i="pdbe"===l.params.provider.server?{url:E.x.Url(`https://www.ebi.ac.uk/pdbe/densities/x-ray/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`PDBe X-ray Density Server: ${l.params.provider.id}`}:{url:E.x.Url(`https://maps.rcsb.org/x-ray/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`RCSB PDB X-ray Density Server: ${l.params.provider.id}`};break;default:(0,M.UT)(l)}let u=await t.builders.data.download(i);switch(l.name){case"url":i=l.params,o="auto"===l.params.format?t.dataFormats.auto((0,D.W)(E.x.getUrl(i.url)),null===(a=u.cell)||void 0===a?void 0:a.obj):t.dataFormats.get(l.params.format);break;case"pdb-xray":s=l.params.provider.id,o=t.dataFormats.get("ccp4");break;case"pdb-emd-ds":case"pdb-xray-ds":s=l.params.provider.id,o=t.dataFormats.get("dscif");break;default:(0,M.UT)(l)}if(!o){t.log.warn("DownloadDensity: Format provider not found.");return}let c=await o.parse(t,u,{entryId:s});await (null===(n=o.visuals)||void 0===n?void 0:n.call(o,t,c))})),k=c.lQ.build({display:{name:"Assign Volume Colors",description:"Assigns another volume to be available for coloring."},from:l.G.Volume.Data,isApplicable:e=>!e.data.colorVolume,params(e,t){let r=t.state.data.select(c.tE.Generators.root.subtree().ofType(l.G.Volume.Data).filter(t=>{var r;return!!t.obj&&!(null===(r=t.obj)||void 0===r?void 0:r.data.colorVolume)&&t.obj!==e}));return 0===r.length?{ref:p.e.Text("",{isHidden:!0,label:"Volume"})}:{ref:p.e.Select(r[0].transform.ref,r.map(e=>[e.transform.ref,e.obj.label]),{label:"Volume"})}}})(({ref:e,params:t,state:r},a)=>a.build().to(e).apply(u.L.Volume.AssignColorVolume,{ref:t.ref},{dependsOn:[t.ref]}).commit());var B=r(95403),_=r(85764);let R=s.q.create({name:"built-in.animate-state-interpolation",display:{name:"Animate State (experimental)"},params:()=>({transtionDurationInMs:p.e.Numeric(2e3,{min:100,max:3e4,step:10})}),canApply:e=>({canApply:e.managers.snapshot.state.entries.size>1}),initialState:()=>({}),async apply(e,t,r){let a=r.plugin.managers.snapshot.state.entries;if(a.size<2)return{kind:"finished"};let n=t.current%r.params.transtionDurationInMs/r.params.transtionDurationInMs,i=Math.floor(t.current/r.params.transtionDurationInMs)%a.size,o=Math.ceil(t.current/r.params.transtionDurationInMs);o===i&&o++,o%=a.size;let s=a.get(i).snapshot,l=a.get(o).snapshot;if(!s.data||!l.data)return{kind:"skip"};let u=s.data.tree.transforms,p=l.data.tree.transforms,f=r.plugin.state.data,m=f.build();for(let e of u)for(let t of p){let a;if(t.ref!==e.ref||t.version===e.version)continue;let i=c.EW.fromJSON(e),o=c.EW.fromJSON(t),s=f.cells.get(e.ref);s&&(a=i.transformer.definition.interpolate?i.transformer.definition.interpolate(i.params,o.params,n,r.plugin):n<=.5?i.params:o.params,(0,_.wU)(s,a)||m.to(e.ref).update(a))}return await d.I.State.Update(r.plugin,{state:f,tree:m,options:{doNotLogTiming:!0}}),{kind:"next",state:{}}}}),F=s.q.create({name:"built-in.animate-structure-spin",display:{name:"Spin Structure"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(3e3,{min:100,max:1e4,step:100})}),initialState:()=>({t:0}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),async setup(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D)),i=a.build(),o=!1;for(let e of n)a.select(c.tE.Generators.ofTransformer(u.L.Representation.SpinStructureRepresentation3D,e.transform.ref)).length>0||(o=!0,i.to(e.transform.ref).apply(u.L.Representation.SpinStructureRepresentation3D,{t:0},{tags:"animate-structure-spin"}));
7319if(o)return i.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3DState).withTag("animate-structure-spin"));if(0===n.length)return;let i=a.build();for(let e of n)i.delete(e.transform.ref);return i.commit()},async apply(e,t,r){var a;let n=r.plugin.state.data,i=n.select(c.tE.Generators.ofTransformer(u.L.Representation.SpinStructureRepresentation3D));if(0===i.length)return{kind:"finished"};let o=n.build(),s=(t.current-t.lastApplied)/r.params.durationInMs,l=(e.t+s)%1;for(let e of i)o.to(e).update({...null===(a=e.params)||void 0===a?void 0:a.values,t:l});return await d.I.State.Update(r.plugin,{state:n,tree:o,options:{doNotLogTiming:!0}}),{kind:"next",state:{t:l}}}});var L=r(58463);let z=(0,g.A)(),N=(0,g.A)(),G=(0,h.D)(),U=s.q.create({name:"built-in.animate-camera-rock",display:{name:"Camera Rock",description:"Rock the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(4e3,{min:100,max:2e4,step:100}),speed:p.e.Numeric(1,{min:1,max:10,step:1},{description:"How many times to rock from side to side."}),angle:p.e.Numeric(10,{min:0,max:180,step:1},{description:"How many degrees to rotate in each direction."})}),initialState:(e,t)=>({snapshot:t.canvas3d.camera.getSnapshot()}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{var a;null===(a=r.canvas3d)||void 0===a||a.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){var a,n;if(0===t.current)return{kind:"next",state:e};let i=e.snapshot;if(i.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?(null===(a=t.animation)||void 0===a?void 0:a.currentFrame)/(t.animation.frameCount+1):(0,m.uZ)(t.current/r.params.durationInMs,0,1),s=Math.sin(o*r.params.speed*Math.PI*2)*(0,L.Id)(r.params.angle);g.A.sub(z,i.position,i.target),g.A.normalize(N,i.up),h.D.setAxisAngle(G,N,s),g.A.transformQuat(z,z,G);let l=g.A.add((0,g.A)(),i.target,z);return(null===(n=r.plugin.canvas3d)||void 0===n||n.requestCameraReset({snapshot:{...i,position:l},durationMs:0}),o>=.99999)?{kind:"finished"}:{kind:"next",state:e}}});(a=n||(n={})).Action=function(e,t){return{action:e,customControl:t&&t.customControl,autoUpdate:t&&t.autoUpdate}},a.Behavior=function(e,t={}){return{transformer:e,defaultParams:t}};let V=()=>({actions:[n.Action(A.DownloadStructure),n.Action(i.DownloadDensity),n.Action(B.DownloadFile),n.Action(B.OpenFiles),n.Action(A.LoadTrajectory),n.Action(A.EnableModelCustomProps),n.Action(A.EnableStructureCustomProps),n.Action(o.rJ),n.Action(o.k6),n.Action(o.aU),n.Action(u.L.Data.Download),n.Action(u.L.Data.ParseCif),n.Action(u.L.Data.ParseCcp4),n.Action(u.L.Data.ParseDsn6),n.Action(u.L.Model.TrajectoryFromMmCif),n.Action(u.L.Model.TrajectoryFromCifCore),n.Action(u.L.Model.TrajectoryFromPDB),n.Action(u.L.Model.TransformStructureConformation),n.Action(u.L.Model.StructureInstances),n.Action(u.L.Model.StructureFromModel),n.Action(u.L.Model.StructureFromTrajectory),n.Action(u.L.Model.ModelFromTrajectory),n.Action(u.L.Model.StructureSelectionFromScript),n.Action(u.L.Representation.StructureRepresentation3D),n.Action(u.L.Representation.StructureSelectionsDistance3D),n.Action(u.L.Representation.StructureSelectionsAngle3D),n.Action(u.L.Representation.StructureSelectionsDihedral3D),n.Action(u.L.Representation.StructureSelectionsLabel3D),n.Action(u.L.Representation.StructureSelectionsOrientation3D),n.Action(u.L.Representation.ModelUnitcell3D),n.Action(u.L.Representation.StructureBoundingBox3D),n.Action(u.L.Representation.ExplodeStructureRepresentation3D),n.Action(u.L.Representation.SpinStructureRepresentation3D),n.Action(u.L.Representation.UnwindStructureAssemblyRepresentation3D),n.Action(u.L.Representation.OverpaintStructureRepresentation3DFromScript),n.Action(u.L.Representation.TransparencyStructureRepresentation3DFromScript),n.Action(u.L.Representation.ClippingStructureRepresentation3DFromScript),n.Action(u.L.Representation.SubstanceStructureRepresentation3DFromScript),n.Action(u.L.Representation.ThemeStrengthRepresentation3D),n.Action(k),n.Action(u.L.Volume.VolumeFromCcp4),n.Action(u.L.Volume.VolumeFromDsn6),n.Action(u.L.Volume.VolumeFromCube),n.Action(u.L.Volume.VolumeFromDx),n.Action(u.L.Representation.VolumeRepresentation3D),n.Action(u.L.Volume.VolumeTransform),n.Action(u.L.Volume.VolumeInstances)],behaviors:[n.Behavior(O.DN.Representation.HighlightLoci),n.Behavior(O.DN.Representation.SelectLoci),n.Behavior(O.DN.Representation.DefaultLociLabelProvider),n.Behavior(O.DN.Representation.FocusLoci),n.Behavior(O.DN.Camera.FocusLoci),n.Behavior(O.DN.Camera.CameraAxisHelper),n.Behavior(O.DN.Camera.CameraControls),n.Behavior(O.DN.State.SnapshotControls),n.Behavior(I.Y),n.Behavior(O.DN.CustomProps.StructureInfo),n.Behavior(O.DN.CustomProps.AccessibleSurfaceArea),n.Behavior(O.DN.CustomProps.BestDatabaseSequenceMapping),n.Behavior(O.DN.CustomProps.Interactions),n.Behavior(O.DN.CustomProps.SecondaryStructure),n.Behavior(O.DN.CustomProps.ValenceModel),n.Behavior(O.DN.CustomProps.CrossLinkRestraint),n.Behavior(O.DN.CustomProps.Streamlines)],animations:[T,S,U,C.D,C.Z,f,F,R]});var j=r(5862),H=r(22401),q=r(83733),X=r(52755),W=r(91126),K=r(47792),Q=r(1573),Z=r(87144),Y=r(7922),$=r(61445),J=r(37156),ee=r(86517);let et={color:p.e.Color(Y.t.black,{description:"Display color of the volume."}),wireframe:p.e.Boolean(!1,{description:"Control display of the volume as a wireframe."}
7319),opacity:p.e.Numeric(.3,{min:0,max:1,step:.01},{description:"Opacity of the volume."})},er=new Map([["em",[-5,5]],["2fo-fc",[0,3]],["fo-fc(+ve)",[1,5]],["fo-fc(-ve)",[-5,-1]]]);class ea extends H.Xl{constructor(){super(...arguments),this.ref=c.tE.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name),this.getVisible=()=>{let e=this.plugin.state.data,t=this.ref;return!!t&&!e.cells.get(t).state.isHidden},this.toggleVisible=()=>{let e=this.plugin.state.data,t=this.ref;t&&(0,J.setSubtreeVisibility)(e,t,!e.cells.get(t).state.isHidden)}}componentDidUpdate(){this.ref=c.tE.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name)}componentDidMount(){this.subscribe(this.plugin.state.data.events.cell.stateUpdated,e=>{this.ref===e.ref&&this.forceUpdate()})}render(){let e=this.props,{isRelative:t,stats:r}=e,a=e.channels[e.name],{min:n,max:i,mean:o,sigma:s}=r,l=Math.round(100*("relative"===a.isoValue.kind?a.isoValue.relativeValue:a.isoValue.absoluteValue))/100,u=(n-o)/s,c=(i-o)/s;if(!this.props.isUnbounded){let e=er.get(this.props.name);"em"===this.props.name?(u=Math.max(e[0],u),c=Math.min(e[1],c)):(u=e[0],c=e[1])}let d=o+s*u,p=o+s*c,f=(0,$.Zd)(t?Math.round((p-d)/s)/100:s/100,2),m=t?u:d,h=t?c:p;return(0,j.jsx)(X.wc,{label:e.label+(e.isRelative?" σ":""),colorStripe:a.color,pivot:(0,j.jsxs)("div",{className:"msp-volume-channel-inline-controls",children:[(0,j.jsx)(K.iR,{value:l,min:m,max:h,step:f,onChange:r=>e.changeIso(e.name,r,t),onChangeImmediate:r=>e.changeIso(e.name,r,t),disabled:e.params.isDisabled,onEnter:e.params.events.onEnter}),(0,j.jsx)(X.hU,{svg:this.getVisible()?ee.Bk:ee.gu,onClick:this.toggleVisible,toggleState:!1,disabled:e.params.isDisabled})]}),controls:(0,j.jsx)(W.Fp,{onChange:({name:t,value:r})=>e.changeParams(e.name,t,r),params:et,values:a,onEnter:e.params.events.onEnter,isDisabled:e.params.isDisabled})})}}class en extends H.Xl{constructor(){super(...arguments),this.changeIso=(e,t,r)=>{let a=this.props.params;this.newParams({...a,entry:{name:a.entry.name,params:{...a.entry.params,channels:{...a.entry.params.channels,[e]:{...a.entry.params.channels[e],isoValue:r?Q.f.IsoValue.relative(t):Q.f.IsoValue.absolute(t)}}}}})},this.changeParams=(e,t,r)=>{let a=this.props.params;this.newParams({...a,entry:{name:a.entry.name,params:{...a.entry.params,channels:{...a.entry.params.channels,[e]:{...a.entry.params.channels[e],[t]:r}}}}})},this.changeOption=({name:e,value:t})=>{let r=this.props.params;if("entry"===e)this.newParams({...r,entry:{name:t,params:r.entry.params}});else{let e=this.props.b.data,a="em"===e.info.kind,n=t.params.isRelative,i=e.info.header.sampling[0],o=r.entry.params.channels,s={...r.entry.params.view.name===t.name?r.entry.params.view.params:this.props.info.params.entry.map(r.entry.name).params.view.map(t.name).defaultValue};"selection-box"===t.name?s.radius=t.params.radius:"camera-target"===t.name?(s.radius=t.params.radius,s.dynamicDetailLevel=t.params.dynamicDetailLevel):"box"===t.name?(s.bottomLeft=t.params.bottomLeft,s.topRight=t.params.topRight):"auto"===t.name&&(s.radius=t.params.radius,s.selectionDetailLevel=t.params.selectionDetailLevel),s.isUnbounded=!!t.params.isUnbounded,this.newParams({...r,entry:{name:r.entry.name,params:{...r.entry.params,view:{name:t.name,params:s},detailLevel:t.params.detailLevel,channels:a?{em:this.convert(o.em,i.valuesInfo[0],n)}:{"2fo-fc":this.convert(o["2fo-fc"],i.valuesInfo[0],n),"fo-fc(+ve)":this.convert(o["fo-fc(+ve)"],i.valuesInfo[1],n),"fo-fc(-ve)":this.convert(o["fo-fc(-ve)"],i.valuesInfo[1],n)}}}})}}}areInitial(e){return p.e.areEqual(this.props.info.params,e,this.props.info.initialValues)}newParams(e){this.props.events.onChange(e,this.areInitial(e))}convert(e,t,r){return{...e,isoValue:r?Q.f.IsoValue.toRelative(e.isoValue,t):Q.f.IsoValue.toAbsolute(e.isoValue,t)}}render(){if(!this.props.b)return null;let e=this.props.b.data,t="em"===e.info.kind,r=t?"em":"2fo-fc",a=this.props.params,n=this.props.info.params.entry.map(a.entry.name),i=n.params.detailLevel,o={...i,label:"Dynamic Detail",defaultValue:n.params.view.map("camera-target").params.dynamicDetailLevel.defaultValue},s={...i,label:"Selection Detail",defaultValue:n.params.view.map("auto").params.selectionDetailLevel.defaultValue},l=e.info.header.sampling[0],u="relative"===a.entry.params.channels[r].isoValue.kind,c=p.e.Boolean(u,{description:"Use normalized or absolute isocontour scale.",label:"Normalized"}),d=!!a.entry.params.view.params.isUnbounded,f=p.e.Boolean(d,{description:"Show full/limited range of iso-values for more fine-grained control.",label:"Unbounded"}),m="off"===a.entry.params.view.name,h={entry:p.e.Select(a.entry.name,e.data.entries.map(e=>[e.dataId,e.dataId]),{isHidden:m,description:"Which entry with volume data to display."}),view:p.e.MappedStatic(a.entry.params.view.name,{off:p.e.Group({isRelative:p.e.Boolean(u,{isHidden:!0}),isUnbounded:p.e.Boolean(d,{isHidden:!0})},{description:"Display off."}),box:p.e.Group({bottomLeft:p.e.Vec3(Z.AO.zero()),topRight:p.e.Vec3(Z.AO.zero()),detailLevel:i,isRelative:c,isUnbounded:f},{description:"Static box defined by cartesian coords."}
7319),"selection-box":p.e.Group({radius:p.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in Å within which the volume is shown."}),detailLevel:i,isRelative:c,isUnbounded:f},{description:"Box around focused element."}),"camera-target":p.e.Group({radius:p.e.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),detailLevel:{...i,isHidden:!0},dynamicDetailLevel:o,isRelative:c,isUnbounded:f},{description:"Box around camera target."}),cell:p.e.Group({detailLevel:i,isRelative:c,isUnbounded:f},{description:"Box around the structure's bounding box."}),auto:p.e.Group({radius:p.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in Å within which the volume is shown."}),detailLevel:i,selectionDetailLevel:s,isRelative:c,isUnbounded:f},{description:"Box around focused element."})},{options:q.a.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Focus" shows the volume around the element/atom last interacted with. "Around Camera" shows the volume around the point the camera is targeting. "Whole Structure" shows the volume for the whole structure.'})},g={entry:a.entry.name,view:{name:a.entry.params.view.name,params:{detailLevel:a.entry.params.detailLevel,radius:a.entry.params.view.params.radius,bottomLeft:a.entry.params.view.params.bottomLeft,topRight:a.entry.params.view.params.topRight,selectionDetailLevel:a.entry.params.view.params.selectionDetailLevel,dynamicDetailLevel:a.entry.params.view.params.dynamicDetailLevel,isRelative:u,isUnbounded:d}}};return m?(0,j.jsx)(W.Fp,{onChange:this.changeOption,params:h,values:g,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled}):(0,j.jsxs)(j.Fragment,{children:[!t&&(0,j.jsx)(ea,{label:"2Fo-Fc",name:"2fo-fc",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:d}),!t&&(0,j.jsx)(ea,{label:"Fo-Fc(+ve)",name:"fo-fc(+ve)",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:d}),!t&&(0,j.jsx)(ea,{label:"Fo-Fc(-ve)",name:"fo-fc(-ve)",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:d}),t&&(0,j.jsx)(ea,{label:"EM",name:"em",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:d}),(0,j.jsx)(W.Fp,{onChange:this.changeOption,params:h,values:g,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled})]})}}let ei=()=>({...V(),customParamEditors:[[o.aU,en]]})},40217:function(e,t,r){r.d(t,{mB:function(){return r_},qZ:function(){return m.q},DN:function(){return rR}});var a,n,i,o,s,l={};r.r(l),r.d(l,{SyncRepresentationToCanvas:function(){return y},SyncStructureRepresentation3DState:function(){return x},UpdateRepresentationVisibility:function(){return S},registerDefault:function(){return b}});var u={};r.r(u),r.d(u,{Focus:function(){return w},FocusObject:function(){return D},OrientAxes:function(){return E},Reset:function(){return I},ResetAxes:function(){return M},SetSnapshot:function(){return A},registerDefault:function(){return O}});var c={};r.r(c),r.d(c,{Canvas3DSetSettings:function(){return B},registerDefault:function(){return k}});var d={};r.r(d),r.d(d,{CameraAxisHelper:function(){return Y},CameraControls:function(){return ee},DefaultClickResetCameraOnEmpty:function(){return q},DefaultClickResetCameraOnEmptySelectMode:function(){return X},DefaultFocusLociBindings:function(){return W},FocusLoci:function(){return Z},NoPrimaryFocusLociBindings:function(){return K}});var p={};r.r(p),r.d(p,{SnapshotControls:function(){return ei}});var f={};r.r(f),r.d(f,{AccessibleSurfaceArea:function(){return ez},BestDatabaseSequenceMapping:function(){return e4},CrossLinkRestraint:function(){return tI},Interactions:function(){return eX},SecondaryStructure:function(){return eK},Streamlines:function(){return rB},StructureInfo:function(){return el},ValenceModel:function(){return eY}});var m=r(45213),h=r(37156),g=r(72762);function b(e){y(e),x(e),S(e)}function y(e){let t=e.state.data.events;t.object.created.subscribe(t=>{var r;
7319g.G.isRepresentation3D(t.obj)&&(T(t.state.cells.get(t.ref),t.obj.data.repr),t.obj.data.repr.setState({syncManually:!0}),null===(r=e.canvas3d)||void 0===r||r.add(t.obj.data.repr))}),t.object.updated.subscribe(t=>{var r,a;t.oldObj&&g.G.isRepresentation3D(t.oldObj)&&(null===(r=e.canvas3d)||void 0===r||r.remove(t.oldObj.data.repr),t.oldObj.data.repr.destroy()),g.G.isRepresentation3D(t.obj)&&(T(t.state.cells.get(t.ref),t.obj.data.repr),"recreate"===t.action&&t.obj.data.repr.setState({syncManually:!0}),null===(a=e.canvas3d)||void 0===a||a.add(t.obj.data.repr))}),t.object.removed.subscribe(t=>{var r;g.G.isRepresentation3D(t.obj)&&(null===(r=e.canvas3d)||void 0===r||r.remove(t.obj.data.repr),t.obj.data.repr.destroy())})}function x(e){let t=e.state.data.events;t.object.created.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.state),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)}),t.object.updated.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.state),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)}),t.object.removed.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.initialState),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)})}function S(e){e.state.data.events.cell.stateUpdated.subscribe(t=>{var r;let a=t.state.cells.get(t.ref);g.G.isRepresentation3D(a.obj)&&T(a,a.obj.data.repr)&&(null===(r=e.canvas3d)||void 0===r||r.syncVisibility())})}function T(e,t){return!!e.state.isHidden===t.state.visible&&(t.setState({visible:!e.state.isHidden}),!0)}var C=r(16668);function O(e){I(e),w(e),D(e),A(e),E(e),M(e)}function I(e){C.I.Camera.Reset.subscribe(e,t=>{e.managers.camera.reset(null==t?void 0:t.snapshot,null==t?void 0:t.durationMs)})}function A(e){C.I.Camera.SetSnapshot.subscribe(e,({snapshot:t,durationMs:r})=>{e.managers.camera.setSnapshot(t,r)})}function w(e){C.I.Camera.Focus.subscribe(e,({center:t,radius:r,durationMs:a})=>{e.managers.camera.focusSphere({center:t,radius:r},{durationMs:a}),e.events.canvas3d.settingsUpdated.next(void 0)})}function D(e){C.I.Camera.FocusObject.subscribe(e,async t=>{e.managers.camera.focusObject(t)})}function E(e){C.I.Camera.OrientAxes.subscribe(e,({structures:t,durationMs:r})=>{e.managers.camera.orientAxes(t,r)})}function M(e){C.I.Camera.ResetAxes.subscribe(e,({durationMs:t})=>{e.managers.camera.resetAxes(t)})}var P=r(2622);function k(e){B(e)}function B(e){C.I.Canvas3D.ResetSettings.subscribe(e,()=>{var t;null===(t=e.canvas3d)||void 0===t||t.setProps(P.Ug),e.events.canvas3d.settingsUpdated.next(void 0)}),C.I.Canvas3D.SetSettings.subscribe(e,t=>{var r;e.canvas3d&&(null===(r=e.canvas3d)||void 0===r||r.setProps(t.settings),e.events.canvas3d.settingsUpdated.next(void 0))})}var _=r(51064),R=r(67589),F=r(14086),L=r(58684),z=r(64770),N=r(19609),G=r(87144);let U=L.b4,V=L.N0,j=z.K.Trigger,H=z.K.TriggerKey,q=(0,z.K)([j(U.Flag.Primary,V.create()),j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Reset camera focus","Click on nothing using ${triggers}"),X=(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Reset camera focus (Selection Mode)","Click on nothing using ${triggers}"),W={clickCenterFocus:(0,z.K)([j(U.Flag.Primary,V.create()),j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:q,clickResetCameraOnEmptySelectMode:X},K={clickCenterFocus:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:q,clickResetCameraOnEmptySelectMode:X},Q={minRadius:F.e.Numeric(8,{min:1,max:50,step:1}),extraRadius:F.e.Numeric(4,{min:1,max:50,step:1},{description:"Value added to the bounding-sphere radius of the Loci"}),durationMs:F.e.Numeric(250,{min:0,max:1e3,step:1},{description:"Camera transition duration"}),bindings:F.e.Value(W,{isHidden:!0})},Z=m.q.create({name:"camera-focus-loci",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeOb
7319servable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{var a,n,i,o,s,l,u,c;if(!this.ctx.canvas3d)return;let d=this.ctx.selectionMode?this.params.bindings.clickCenterFocusSelectMode:this.params.bindings.clickCenterFocus,p=this.ctx.selectionMode?null!==(a=this.params.bindings.clickResetCameraOnEmptySelectMode)&&void 0!==a?a:X:null!==(n=this.params.bindings.clickResetCameraOnEmpty)&&void 0!==n?n:q;if(R.o_.isEmpty(e.loci)&&z.K.match(p,t,r)){C.I.Camera.Reset(this.ctx,{});return}let f=null!==(l=null===(s=null===(o=null===(i=e.repr)||void 0===i?void 0:i.props)||void 0===o?void 0:o.snapshotKey)||void 0===s?void 0:s.trim())&&void 0!==l?l:"",m=null===(c=null===(u=e.repr)||void 0===u?void 0:u.props)||void 0===c?void 0:c.markdownCommands;if(!f&&("object"!=typeof m||!(Object.keys(m).length>0))&&z.K.match(d,t,r)){let t=R.o_.normalize(e.loci,this.ctx.managers.interactivity.props.granularity);this.ctx.managers.camera.focusLoci(t,this.params)}})}},params:()=>Q,display:{name:"Camera Focus Loci on Canvas"}}),Y=m.q.create({name:"camera-axis-helper",category:"interaction",ctor:class extends m.q.Handler{register(){let e=N.sE.None,t=0;this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:r})=>{let a,n;if(!this.ctx.canvas3d||!(0,N.EJ)(r.loci))return;let i=r.loci.elements[0].groupId;if(i===N.sE.None){e=N.sE.None,t=0;return}let{camera:o}=this.ctx.canvas3d;if(i>=N.sE.X&&i<=N.sE.Z){e=N.sE.None,t=0;let r=G.AO.sub((0,G.AO)(),o.target,o.position),s=G.AO.cross((0,G.AO)(),r,o.up);(n=(0,G.AO)())[i-1]=1,a=G.AO.cross((0,G.AO)(),n,s),0===G.AO.magnitude(a)&&(a=r)}else e===i?t=(t+1)%2:(e=i,t=0),i===N.sE.XY?(n=t?G.AO.unitX:G.AO.unitY,a=G.AO.negUnitZ):i===N.sE.XZ?(n=t?G.AO.unitX:G.AO.unitZ,a=G.AO.negUnitY):(n=t?G.AO.unitY:G.AO.unitZ,a=G.AO.negUnitX);this.ctx.canvas3d.requestCameraReset({snapshot:(e,t)=>t.getInvariantFocus(e.boundingSphereVisible.center,e.boundingSphereVisible.radius,n,a)})})}},params:()=>({}),display:{name:"Camera Axis Helper"}}),$={keySpinAnimation:(0,z.K)([H("I")],"Spin Animation","Press ${triggers}"),keyRockAnimation:(0,z.K)([H("O")],"Rock Animation","Press ${triggers}"),keyToggleFlyMode:(0,z.K)([H("Space",V.create({shift:!0}))],"Toggle Fly Mode","Press ${triggers}"),keyResetView:(0,z.K)([H("T")],"Reset View","Press ${triggers}"),keyGlobalIllumination:(0,z.K)([H("G")],"Global Illumination","Press ${triggers}")},J={bindings:F.e.Value($,{isHidden:!0})},ee=m.q.create({name:"camera-controls",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.key,({code:e,key:t,modifiers:r})=>{var a;if(!this.ctx.canvas3d)return;let n={...$,...this.params.bindings},i=this.ctx.canvas3d.props.trackball,o=this.ctx.canvas3d.props.illumination;if(z.K.matchKey(n.keySpinAnimation,e,r,t)){let e="spin"!==i.animate.name?"spin":"off";"off"===e?C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{}}}}}):C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{speed:.1,axis:G.AO.create(0,-1,0)}}}}})}if(z.K.matchKey(n.keyRockAnimation,e,r,t)){let e="rock"!==i.animate.name?"rock":"off";"off"===e?C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{}}}}}):C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{speed:.3,angle:10,axis:G.AO.create(0,-1,0)}}}}})}if(z.K.matchKey(n.keyToggleFlyMode,e,r,t)){let e=!i.flyMode;C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,flyMode:e}}}),(null===(a=this.ctx.canvas3dContext)||void 0===a?void 0:a.canvas)&&(this.ctx.canvas3dContext.canvas.style.cursor=e?"crosshair":"unset")}z.K.matchKey(n.keyResetView,e,r,t)&&C.I.Camera.Reset(this.ctx,{}),z.K.matchKey(n.keyGlobalIllumination,e,r,t)&&C.I.Canvas3D.SetSettings(this.ctx,{settings:{illumination:{...o,enabled:!o.enabled}}})})}},params:()=>J,display:{name:"Camera Controls on Canvas"}}),et=L.N0,er=z.K.TriggerKey,ea={next:(0,z.K)([er("ArrowRight",et.create({control:!0})),er("GamepadY")]),previous:(0,z.K)([er("ArrowLeft",et.create({control:!0})),er("GamepadX")]),first:(0,z.K)([er("ArrowUp",et.create({control:!0}))]),last:(0,z.K)([er("ArrowDown",et.create({control:!0}))])},en={bindings:F.e.Value(ea,{isHidden:!0})}
7319,ei=m.q.create({name:"snapshot-controls",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.keyReleased,({code:e,modifiers:t,key:r})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let a=this.params.bindings,{snapshot:n}=this.ctx.managers;if(z.K.matchKey(a.next,e,t,r)&&n.applyNext(1),z.K.matchKey(a.previous,e,t,r)&&n.applyNext(-1),z.K.matchKey(a.first,e,t,r)){let e=n.state.entries.get(0),t=n.setCurrent(e.snapshot.id);if(t)return this.ctx.state.setSnapshot(t)}if(z.K.matchKey(a.last,e,t,r)){let e=n.state.entries.get(n.state.entries.size-1),t=n.setCurrent(e.snapshot.id);if(t)return this.ctx.state.setSnapshot(t)}})}},params:()=>en,display:{name:"Snapshot Controls"}});var eo=r(30502),es=r(67801);let el=m.q.create({name:"structure-info-prop",category:"custom-props",display:{name:"Structure Info"},ctor:class extends m.q.Handler{get maxModelIndex(){var e,t;let r=-1;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let n=(null===(e=a.obj)||void 0===e?void 0:e.data)&&eo.Model.Index.get(null===(t=a.obj)||void 0===t?void 0:t.data).value;void 0!==n&&n>r&&(r=n)}return r}get maxStructureIndex(){var e,t;let r=-1;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Structure))){let n=(null===(e=a.obj)||void 0===e?void 0:e.data)&&eo.Structure.Index.get(null===(t=a.obj)||void 0===t?void 0:t.data).value;void 0!==n&&n>r&&(r=n)}return r}get asymIdOffset(){var e;let t=0,r=0;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let n=null===(e=a.obj)||void 0===e?void 0:e.data;if(n){let e=eo.Model.AsymIdCount.get(n),a=eo.Model.AsymIdOffset.get(n).value;void 0!==e&&void 0!==a&&(t=Math.max(t,a.auth+e.auth),r=Math.max(r,a.label+e.label))}}return{auth:t,label:r}}setModelMaxIndex(){var e;let t=this.maxModelIndex;for(let r of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let a=null===(e=r.obj)||void 0===e?void 0:e.data;a&&eo.Model.MaxIndex.get(a).value!==t&&eo.Model.MaxIndex.set(a,{value:t},t)}}setStructureMaxIndex(){var e;let t=this.maxModelIndex;for(let r of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Structure))){let a=null===(e=r.obj)||void 0===e?void 0:e.data;a&&eo.Structure.MaxIndex.get(a).value!==t&&eo.Structure.MaxIndex.set(a,{value:t},t)}}handleModel(e,t){if(void 0===eo.Model.Index.get(e).value){let r=t&&eo.Model.Index.get(t).value,a=null!=r?r:this.maxModelIndex+1;eo.Model.Index.set(e,{value:a},a)}if(void 0===eo.Model.AsymIdOffset.get(e).value){let r=t&&eo.Model.AsymIdOffset.get(t).value,a=null!=r?r:{...this.asymIdOffset};eo.Model.AsymIdOffset.set(e,{value:a},a)}}handleStructure(e,t){if(void 0!==e.parent||void 0!==eo.Structure.Index.get(e).value)return;let r=t&&eo.Structure.Index.get(t).value,a=null!=r?r:this.maxStructureIndex+1;eo.Structure.Index.set(e,{value:a},a)}handle(e,t,r){g.G.Molecule.Structure.is(t)?this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator||void 0!==t.data.parent||this.handleStructure(t.data,null==r?void 0:r.data):g.G.Molecule.Model.is(t)&&!this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator&&this.handleModel(t.data,null==r?void 0:r.data)}register(){this.ctx.customModelProperties.register(eo.Model.AsymIdOffset,!0),this.ctx.customModelProperties.register(eo.Model.Index,!0),this.ctx.customModelProperties.register(eo.Model.MaxIndex,!0),this.ctx.customStructureProperties.register(eo.Structure.Index,!0),this.ctx.customStructureProperties.register(eo.Structure.MaxIndex,!0),this.subscribeObservable(this.ctx.state.data.events.object.created,e=>{this.handle(e.ref,e.obj),this.setModelMaxIndex(),this.setStructureMaxIndex()}),this.subscribeObservable(this.ctx.state.data.events.object.updated,e=>{this.handle(e.ref,e.obj,e.oldObj)})}unregister(){this.ctx.customModelProperties.unregister(eo.Model.AsymIdOffset.descriptor.name),this.ctx.customModelProperties.unregister(eo.Model.Index.descriptor.name),this.ctx.customModelProperties.unregister(eo.Model.MaxIndex.descriptor.name),this.ctx.customStructureProperties.unregister(eo.Structure.Index.descriptor.name),this.ctx.customStructureProperties.unregister(eo.Structure.MaxIndex.descriptor.name)}}});var eu=r(54854);let ec=[-1,1.76,1.87,1.65,1.5,1.4,1.85,1.8,1.6,1.4],ed={ALA:121,ARG:265,ASN:187,ASP:187,CYS:148,GLU:214,GLN:214,GLY:97,HIS:216,ILE:195,LEU:191,LYS:230,MET:203,PHE:228,PRO:154,SER:143,THR:163,TRP:264,TYR:255,VAL:165};var ep=r(8155),ef=r(91044),em=r(53478),eh=r(91327),eg=r(57871);function ev(e){let t=(0,em.lT)(e),r=ec.indexOf(t);return -1===r&&(r=ec.length,ec[r]=t),r}async function eb(e,t){let{atomRadiusType:r}=t;for(let a=0;a<r.length;a+=5e3)e.shouldUpdate&&await e.update({message:"Computing per residue surface accessibility...",current:a,max:r.length}),function(e,t,r){let{structure:a,atomRadiusType:n,serialResidueIndex:i,area:o,spherePoints:s,scalingConstant:l,maxLookupRadius:u,probeSize:c}=e,{lookup3d:d,serialMapping:p,unitIndexMap:f,units:m}=a,{cumulativeUnitElementCount:h,elementIndices:g,unitIndices:b}=p;for(let e=t;e<r;++e){let t=ec[n[e]];if(t===ec[0])continue;let r=m[b[e]],a=g[e],p=r.conformation.x(a),y=r.conformation.y(a),x=r.conformation.z(a),{count:S,units:T,indices:C,squaredDistances:O}=d.find(p,y,x,u),I=c+t,A=c+I,w=[];for(let e=0;e<S;++e){let t=T[e],i=h[f.get(t.id)]+C[e],o=g[i],s=ec[n[i]];if(r===t&&a===o||s===ec[0])continue;let l=c+s;if(O[e]<(A+s)*(A+s)){let r=g[i];w[w.length]=[O[e],(O[e]+I*I-l*l)/(2*I),t.conformation.x(r)-p,t.conformation.y(r)-y,t.conformation.z(r)-x]}}w.sort((e,t)=>
7319e[0]-t[0]);let D=0;t:for(let e=0;e<s.length;++e){let[t,r,a]=s[e];for(let e=0;e<w.length;++e){let[,n,i,o,s]=w[e];if(t*i+r*o+a*s>n)continue t}++D}o[i[e]]+=l*D*I*I}}(t,a,Math.min(a+5e3,r.length))}var ey=r(34526);let ex={numberOfSpherePoints:F.e.Numeric(92,{min:12,max:360,step:1},{description:"Number of sphere points to sample per atom: 92 (original paper), 960 (BioJava), 3000 (EPPIC) - see Shrake A, Rupley JA: Environment and exposure to solvent of protein atoms. Lysozyme and insulin. J Mol Biol 1973."}),probeSize:F.e.Numeric(1.4,{min:.1,max:4,step:.01},{description:"Corresponds to the size of a water molecule: 1.4 (original paper), 1.5 (occassionally used)"}),nonPolymer:F.e.Boolean(!1,{description:"Include non-polymer atoms as occluders."}),traceOnly:F.e.Boolean(!1,{description:"Compute only using alpha-carbons, if true increase probeSize accordingly (e.g., 4 A). Considers only canonical amino acids."})};!function(e){var t;let r;async function a(e,t,r){let a=function(e,t){let{elementCount:r,atomicResidueCount:a}=e,{probeSize:n,nonPolymer:i,traceOnly:o,numberOfSpherePoints:s}=t;return{structure:e,probeSize:n,nonPolymer:i,traceOnly:o,spherePoints:function(e){let t=[],r=Math.PI*(3-Math.sqrt(5)),a=2/e;for(let n=0;n<e;++n){let e=n*a-1+a/2,i=Math.sqrt(1-e*e),o=n*r;t[t.length]=G.AO.create(Math.cos(o)*i,e,Math.sin(o)*i)}return t}(s),scalingConstant:4*Math.PI/s,maxLookupRadius:2*t.probeSize+2*ec[2],atomRadiusType:new Int8Array(r),serialResidueIndex:new Int32Array(r),area:new Float32Array(a)}}(t,r);!function(e){let{key:t}=eh.StructureProperties.residue,{type_symbol:r,label_atom_id:a,label_comp_id:n}=eh.StructureProperties.atom,{structure:i,atomRadiusType:o,serialResidueIndex:s}=e,l=eh.X$.Location.create(i),u=0,c=0,d=-1;l.structure=i;for(let p=0,f=0,m=i.units.length;p<m;++p){let m=i.units[p],{elements:h}=m;l.unit=m,u=-1;for(let i=0,p=h.length;i<p;++i){let p=h[i],g=f+i;l.element=p,u!==(c=t(l))&&++d,u=c;let b=r(l),y=(0,ep.o5)(b);if((0,ep.oy)(y)){o[g]=0,s[g]=-1;continue}let x=a(l),S=(0,eg.Ut)(m,p);if(S===ef.MoleculeType.Water||!e.nonPolymer&&!(0,ef.isPolymer)(S)){o[g]=0,s[g]=-1;continue}let T=n(l);if(e.traceOnly&&("CA"!==x&&"BB"!==x||!ed[T])){o[g]=0,s[g]=d;continue}(0,ef.isNucleic)(S)?o[g]=function(e,t,r){switch(t){case"C":return 7;case"N":return 8;case"P":return 9;case"O":return 5}return ev(t)}(0,b,0):S===ef.MoleculeType.Protein?o[g]=function(e,t,r){switch(t){case"O":return 5;case"S":return 6;case"N":return"NZ"===e?4:3;case"C":switch(e){case"C":case"CE1":case"CE2":case"CE3":case"CH2":case"CZ":case"CZ2":case"CZ3":return 1;case"CA":case"CB":case"CE":case"CG1":case"CG2":return 2;default:switch(r){case"PHE":case"TRP":case"TYR":case"HIS":case"ASP":case"ASN":return 1;case"PRO":case"LYS":case"ARG":case"MET":case"ILE":case"LEU":return 2;case"GLU":case"GLN":return"CD"===e?1:2}}}return ev(t)}(x,b,T):o[g]=ev(b),s[g]=d}f+=h.length}}(a),await eb(e,a);let{area:n,serialResidueIndex:i}=a;return{area:n,serialResidueIndex:i}}function n(e,t){return t/(ed[e]||121)}function i(e,t){let{area:r,serialResidueIndex:a}=t,n=a[ey.SortedArray.indexOf(ey.SortedArray.ofSortedArray(e.structure.root.serialMapping.elementIndices),e.element)];return -1===n?-1:r[n]}function o(e,t){let r=i(e,t);return -1===r?-1:n(eo.StructureProperties.atom.label_comp_id(e),r)}e.compute=function(e,t={}){let r={...F.e.getDefaultValues(ex),...t};return eu.iQ.create("Compute Accessible Surface Area",async t=>await a(t,e,r))},(t=r=e.Flags||(e.Flags={}))[t.NA=0]="NA",t[t.Buried=1]="Buried",t[t.Accessible=2]="Accessible",e.Flag={NA:r.NA,Buried:r.Buried,Accessible:r.Accessible},e.normalize=n,e.getValue=i,e.getNormalizedValue=o,e.getFlag=function(e,t){let a=o(e,t);return -1===a?r.NA:a<.16?r.Buried:r.Accessible}}(n||(n={}));var eS=r(20292),eT=r(89849),eC=r(61707),eO=r(44818),eI=r(67646);let eA={...ex},ew={isBuried:eT.tF.Dynamic((0,eC.Cr)("computed","accessible-surface-area.is-buried",eO.D.Bool),e=>{if(!eo.Unit.isAtomic(e.element.unit))return!1;let t=eD.get(e.element.structure).value;return!!t&&n.getFlag(e.element,t)===n.Flags.Buried}),isAccessible:eT.tF.Dynamic((0,eC.Cr)("computed","accessible-surface-area.is-accessible",eO.D.Bool),e=>{if(!eo.Unit.isAtomic(e.element.unit))return!1;let t=eD.get(e.element.structure).value;return!!t&&n.getFlag(e.element,t)===n.Flags.Accessible})},eD=eS.b.createProvider({label:"Accessible Surface Area",descriptor:(0,eI.d)({name:"molstar_accessible_surface_area",symbols:ew}),type:"root",defaultParams:eA,getParams:e=>eA,isApplicable:e=>!0,obtain:async(e,t,r)=>{let a={...F.e.getDefaultValues(eA),...r};return{value:await n.compute(t,a).runInContext(e.runtime)}}});var eE=r(70371),eM=r(69062),eP=r(28253);let ek=(0,eE.Il)(16448250),eB={list:F.e.ColorList("yellow-green-blue",{presetKind:"scale"})},e_={name:"accessible-surface-area",label:"Accessible Surface Area",category:eP.J.Residue,factory:function e(t,r){let a;let i=eE.qe.create({listOrName:r.list.colors,minLabel:"buried",maxLabel:"exposed",domain:[0,1]}),o=t.structure&&eD.get(t.structure),s=o?(0,eM.TO)(o.id,o.version):-1;
7319if((null==o?void 0:o.value)&&t.structure){let e=eo.StructureElement.Location.create(t.structure),r=o.value,s=e=>{let t=n.getNormalizedValue(e,r);return -1===t?ek:i.color(t)};a=t=>eo.StructureElement.Location.is(t)&&eo.Unit.isAtomic(t.unit)?s(t):eo.Bond.isLocation(t)?(e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],s(e)):ek}else a=()=>ek;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,contextHash:s,description:"Assigns a color based on the relative accessible surface area of a residue.",legend:i?i.legend:void 0}},getParams:function(e){return eB},defaultValues:F.e.getDefaultValues(eB),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?eD.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&eD.ref(e.structure,!1)}};var eR=r(36111),eF=r(80541),eL=r(71649);let ez=m.q.create({name:"computed-accessible-surface-area-prop",category:"custom-props",display:{name:"Accessible Surface Area"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eD,this.labelProvider={label:e=>{if(this.params.showTooltip)return function(e){if("element-loci"===e.kind){if(0===e.elements.length)return;let t=eD.get(e.structure).value;if(!t||e.structure.customPropertyDescriptors.hasReference(eD.descriptor))return;let{getSerialIndex:r}=e.structure.root.serialMapping,{area:a,serialResidueIndex:n}=t,i=new Set,o=0;for(let{indices:t,unit:s}of e.elements){let{elements:e}=s;ey.hU.forEach(t,t=>{let l=n[r(s,e[t])];-1===l||i.has(l)||(o+=a[l],i.add(l))})}if(0===i.size)return;let s=`<small>(${i.size} ${i.size>1?"Residues sum":"Residue"})</small>`;return`Accessible Surface Area ${s}: ${o.toFixed(2)} \u212B<sup>2</sup>`}if("structure-loci"===e.kind){let t=eD.get(e.structure).value;if(!t||e.structure.customPropertyDescriptors.hasReference(eD.descriptor))return;return`Accessible Surface Area <small>(Whole Structure)</small>: ${(0,eR.dD)(t.area).toFixed(2)} \u212B<sup>2</sup>`}}(e)}}}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){eT.Jh.addCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(e_),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.query.structure.registry.add(eN),this.ctx.query.structure.registry.add(eG)}unregister(){eT.Jh.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(e_),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.query.structure.registry.remove(eN),this.ctx.query.structure.registry.remove(eG)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})}),eN=(0,eF.fW)("Buried Protein Residues",eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.modifier.wholeResidues([eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.generator.atomGroups({"chain-test":eL.MolScriptBuilder.core.rel.eq([eL.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":ew.isBuried.symbol()})])])]),{description:"Select buried protein residues.",category:eF.Cg.Residue,ensureCustomProperties:(e,t)=>eD.attach(e,t)}),eG=(0,eF.fW)("Accessible Protein Residues",eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.modifier.wholeResidues([eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.generator.atomGroups({"chain-test":eL.MolScriptBuilder.core.rel.eq([eL.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":ew.isAccessible.symbol()})])])]),{description:"Select accessible protein residues.",category:eF.Cg.Residue,ensureCustomProperties:(e,t)=>eD.attach(e,t)});var eU=r(21300),eV=r(45665),ej=r(65410),eH=r(85471),eq=r(11056);let eX=m.q.create({name:"computed-interactions-prop",category:"custom-props",display:{name:"Interactions"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eU.D,this.labelProvider={label:e=>{if(this.params.showTooltip&&"element-loci"===e.kind){if(0===e.elements.length)return;let t=[];
7319for(let r of this.getStructures(e.structure)){let a=this.provider.get(r).value;if(!a)continue;let n=eV.X.Loci.remap(e,r);if(1!==n.elements.length)continue;let i=n.elements[0];if(1!==ey.hU.size(i.indices))continue;let o=a.unitsFeatures.get(i.unit.id);if(!o)continue;let s=[],l=[],u=[],c=ey.hU.start(i.indices),{types:d,groups:p,elementsIndex:{indices:f,offsets:m}}=o;for(let e=m[c],t=m[c+1];e<t;++e){let t=f[e],r=d[t],a=p[t];r&&s.push((0,ej.bD)(r)),a&&l.push((0,ej.Xx)(a))}s.length&&u.push(`<small>Types</small> ${s.join(", ")}`),l.length&&u.push(`<small>Groups</small> ${l.join(", ")}`),u.length&&t.push(`Interaction Feature: ${u.join(" | ")}`)}return t.length?t.join("<br/>"):void 0}}}}getStructures(e){let t=[],r=this.ctx.helpers.substructureParent.get(e);if(r)for(let e of this.ctx.state.data.select(es.tE.Generators.ofType(g.G.Molecule.Structure,r.transform.ref)))e.obj&&(0,eR.S8)(t,e.obj.data);return t}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(eH.qN),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.representation.structure.registry.add(eq.Wt)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(eH.qN),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.representation.structure.registry.remove(eq.Wt)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})});var eW=r(29724);let eK=m.q.create({name:"computed-secondary-structure-prop",category:"custom-props",display:{name:"Secondary Structure"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eW.N}update(e){let t=this.params.autoAttach!==e.autoAttach;return this.params.autoAttach=e.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name)}},params:()=>({autoAttach:F.e.Boolean(!1)})});var eQ=r(6017),eZ=r(14507);let eY=m.q.create({name:"computed-valence-model-prop",category:"custom-props",display:{name:"Valence Model"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eQ.g,this.labelProvider={label:e=>{if(this.params.showTooltip&&"element-loci"===e.kind){if(0===e.elements.length)return;let t=[];for(let r of this.getStructures(e.structure)){let a=this.provider.get(r).value;if(!a)continue;let n=eo.StructureElement.Loci.remap(e,r);if(1!==n.elements.length)continue;let i=n.elements[0];if(1!==ey.hU.size(i.indices))continue;let o=a.get(i.unit.id);if(!o)continue;let s=ey.hU.start(i.indices),l=o.charge[s],u=o.idealGeometry[s],c=o.implicitH[s],d=o.totalH[s];t.push(`Valence Model: <small>Charge</small> ${l} | <small>Ideal Geometry</small> ${(0,eZ.cP)(u)} | <small>Implicit H</small> ${c} | <small>Total H</small> ${d}`)}return t.length?t.join("<br/>"):void 0}}}}getStructures(e){let t=[],r=this.ctx.helpers.substructureParent.get(e);if(r)for(let e of this.ctx.state.data.select(es.tE.Generators.ofType(g.G.Molecule.Structure,r.transform.ref)))e.obj&&(0,eR.S8)(t,e.obj.data);return t}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})});var e$=r(20962),eJ=r(62713);let e0=(0,eE.Il)(16448250),e1=new Map,e2={...(0,eJ.r)({type:"colors",colorList:"set-1"})},e3={name:"sifts-mapping",label:"SIFTS Mapping",category:eP.J.Residue,factory:function e(t,r){let a;if(t.structure){for(let e of t.structure.models){let t=e$._.Provider.get(e).value;if(t)for(let e of t.accession)!e||e1.has(e)||e1.set(e,e1.size)}let e=eo.StructureElement.Location.create(t.structure),n=(0,eJ.X)(e1.size+1,r,{valueLabel:e=>`${e}`}),i=new Map,o=e=>{let t=e$._.getKey(e);if(!t)return e0;if(i.has(t))return i.get(t);let r=n.color(e1.get(t));return i.set(t,r),r};a=t=>eo.StructureElement.Location.is(t)&&eo.Unit.isAtomic(t.unit)?o(t):eo.Bond.isLocation(t)?(e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],o(e)):e0}else a=()=>e0;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,description:"Assigns a color based on SIFTS mapping."}},getParams:function(e){return e2},defaultValues:F.e.getDefaultValues(e2),isApplicable:e=>{var t;return!!(null===(t=e.structure)||void 0===t?void 0:t.models.some(e=>e$._.Provider.isApplicable(e)))},ensureCustomProperties:{attach:async(e,t)=>{if(t.structure)for(let r of t.structure.models)await e$._.Provider.attach(e,r,void 0,!0)},detach:e=>{if(e.structure)for(let t of e.structure.models)e$._.Provider.ref(t,!1)}}},e4=m.q.create({name:"sifts-mapping-prop",category:"custom-props",display:{name:"SIFTS Mapping"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=e$._.Provider,this.labelProvider={label:e=>{if(this.params.showTooltip)return function(e){if("element-loci"===e.kind){if(0===e.elements.length)return;let t=e.elements[0],r=t.unit,a=eo.StructureElement.Location.create(e.structure,r,r.elements[ey.hU.getAt(t.indices,0)]);return e$._.getLabel(a)}}(e)}}}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(e3),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customModelProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(e3),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:F.e.Boolean(!0),showTooltip:F.e.Boolean(!0)})});var e5=r(31348);(a=i||(i={})).Descriptor={name:"ihm_cross_link_restraint"},a.Provider=e5.n.create(a.Descriptor),a.fromTable=function(e,t){let r={entity_id:e.entity_id_1,asym_id:e.asym_id_1,seq_id:e.seq_id_1,atom_id:e.atom_id_1},a={entity_id:e.entity_id_2,asym_id:e.asym_id_2,seq_id:e.seq_id_2,atom_id:e.atom_id_2};function n(e,t,r){let a=e.get(t);a?a.push(r):e.set(t,[r])}function i(r,a){let i=a.entity_id.value(r),u=a.asym_id.value(r),c=a.seq_id.value(r);if("by-atom"===e.model_granularity.value(r)){let e=t.atomicHierarchy.index.findAtom({auth_seq_id:c,label_asym_id:u,label_atom_id:a.atom_id.value(r),label_entity_id:i});e>=0&&n(o,e,r)}else if(t.coarseHierarchy.isDefined){let e=t.coarseHierarchy.spheres.findSequenceKey(i,u,c);if(e>=0)n(s,e,r);else{let e=t.coarseHierarchy.gaussians.findSequenceKey(i,u,c);e>=0&&n(l,e,r)}}}let o=new Map,s=new Map,l=new Map,u=[];for(let t=0;t<e._rowCount;++t)i(t,r),i(t,a);return{getIndicesByElement:(e,t)=>
7319{let r=(function(e){switch(e){case eo.Unit.Kind.Atomic:return o;case eo.Unit.Kind.Spheres:return s;case eo.Unit.Kind.Gaussians:return l}})(t).get(e);return void 0!==r?r:u},data:e}};var e6=r(12618),e8=r(7791),e7=r(4376),e9=r(72558),te=r(84889),tt=r(43091),tr=r(84894);let ta=[];function tn(e,t,r,a){return`${e}|${t.id}|${r}|${a.id}`}class ti{getPairIndices(e,t,r,a){let n=tn(e,t,r,a);return this.pairKeyIndices.get(n)||ta}getPairs(e,t,r,a){return this.getPairIndices(e,t,r,a).map(e=>this.pairs[e])}constructor(e){this.pairs=e;let t=new Map;this.pairs.forEach((e,r)=>{let a=tn(e.indexA,e.unitA,e.indexB,e.unitB),n=t.get(a);n?n.push(r):t.set(a,[r])}),this.count=e.length,this.pairKeyIndices=t}}var to=r(71522),ts=r(43398),tl=r(58202);let tu=eS.b.createProvider({label:"Cross Link Restraint",descriptor:(0,eI.d)({name:"integrative-cross-link-restraint"}),type:"local",defaultParams:{},getParams:e=>({}),isApplicable:e=>e.models.some(e=>!!i.Provider.get(e)),obtain:async(e,t,r)=>({value:function(e){let t=[];if(!e.models.some(e=>i.Provider.get(e)))return new ti(t);let r=e.units.length;for(let a=0;a<r;++a){let n=e.units[a];!function(e,t){if("mmCIF"!==t.model.sourceData.kind)return;let r=i.Provider.get(t.model);if(!r)return;let{elements:a}=t,n=a.length,o=t.kind,s=new Map;for(let e=0;e<n;e++){let t=a[e];r.getIndicesByElement(t,o).forEach(t=>{let r=s.get(t);r?r.push(e):s.set(t,[e])})}s.forEach((a,n)=>{if(a.length<2)return;let[i,o]=a;e.push(td(t,i,t,o,r,n),td(t,o,t,i,r,n))})}(t,n);for(let o=a+1;o<r;++o){let r=e.units[o];n.model===r.model&&function(e,t,r){if(t.model!==r.model||"mmCIF"!==t.model.sourceData.kind)return;let a=i.Provider.get(t.model);if(!a)return;let n=new Map,o=new Map;
7319tc(n,t,a),tc(o,r,a),n.forEach((n,i)=>{let s=o.get(i);void 0!==s&&e.push(td(t,n,r,s,a,i),td(r,s,t,n,a,i))})}(t,n,r)}}return new ti(t)}(t)})});function tc(e,t,r){let{elements:a}=t,n=a.length,i=t.kind;for(let t=0;t<n;t++){let n=a[t];r.getIndicesByElement(n,i).forEach(r=>e.set(r,t))}}function td(e,t,r,a,n,i){return{unitA:e,indexA:t,unitB:r,indexB:a,restraintType:n.data.restraint_type.value(i),distanceThreshold:n.data.distance_threshold.value(i),psi:n.data.psi.value(i),sigma1:n.data.sigma_1.value(i),sigma2:n.data.sigma_2.value(i)}}!function(e){(e.Tag||(e.Tag={})).CrossLinkRestraint="cross-link-restraint",e.isApplicable=function(e){return e.models.some(e=>!!i.Provider.get(e))};let t=(0,G.AO)(),r=(0,G.AO)();function a(e){return e.unitA.conformation.position(e.unitA.elements[e.indexA],t),e.unitB.conformation.position(e.unitB.elements[e.indexB],r),G.AO.distance(t,r)}function n(e,t){let r=e.pairs[t];return`Cross Link Restraint | Type: ${r.restraintType} | Threshold: ${r.distanceThreshold} \u212B | Psi: ${r.psi} | Sigma 1: ${r.sigma1} | Sigma 2: ${r.sigma2} | Distance: ${a(r).toFixed(2)} \u212B`}function o(e,t,r){return ts.B.fromPairProvider(t.length,(r,a,n)=>{let i=e.pairs[t[r]];i.unitA.conformation.position(i.unitA.elements[i.indexA],a),i.unitB.conformation.position(i.unitB.elements[i.indexB],n)},r)}function s(e,t,r){let a=r[0];if(void 0===a)return"";let i=t.pairs[a];return[n(t,a),(0,tl.Gg)(eo.Bond.Location(e,i.unitA,i.indexA,e,i.unitB,i.indexB))].join("</br>")}e.distance=a,e.Location=function(e,t,r){return(0,to.o0)("cross-link-restraints",{structure:t,crossLinkRestraints:e},r)},e.isLocation=function(e){return!!e&&"data-location"===e.kind&&"cross-link-restraints"===e.tag},e.areLocationsEqual=function(e,t){return e.data.structure===t.data.structure&&e.data.crossLinkRestraints===t.data.crossLinkRestraints&&e.element===t.element},e.locationLabel=function(e){return n(e.data.crossLinkRestraints,e.element)},e.Loci=function(e,t,r){return(0,R.SL)("cross-link-restraints",{structure:e,crossLinkRestraints:t},r,e=>o(t,r,e),()=>s(e,t,r))},e.isLoci=function(e){return!!e&&"data-loci"===e.kind&&"interactions"===e.tag},e.getBoundingSphere=o,e.getLabel=s}(o||(o={}));var tp=r(48930);function tf(e,t,r,a,n){let i=tu.get(t).value;if(!i.count)return e7.K.createEmpty(n);let{sizeFactor:o}=a,s=eo.StructureElement.Location.create(t),l={linkCount:i.count,position:(e,t,r)=>{let a=i.pairs[r],n=a.unitA,o=a.unitB;n.conformation.position(n.elements[a.indexA],e),o.conformation.position(o.elements[a.indexB],t)},radius:e=>{let t=i.pairs[e];return s.unit=t.unitA,s.element=t.unitA.elements[t.indexA],r.size.size(s)*o}},{mesh:u,boundingSphere:c}=(0,te.fV)(e,l,a,n);if(c)u.setBoundingSphere(c);else if(u.triangleCount>0){let e=tp.CP.expand((0,tp.CP)(),t.boundary.sphere,1*o);u.setBoundingSphere(e)}return u}let tm={...tt.kN,...te.Vj,sizeFactor:F.e.Numeric(.5,{min:0,max:10,step:.1})};function th(e){return(0,tt.uS)({defaultProps:F.e.getDefaultValues(tm),createGeometry:tf,createLocationIterator:tg,getLoci:tv,eachLocation:tb,setUpdateState:(e,t,r)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.radialSegments!==r.radialSegments||t.linkCap!==r.linkCap}},e)}function tg(e){let t=tu.get(e).value,{pairs:r}=t,a=r.length,n=o.Location(t,e);return(0,e9.OF)(a,1,1,e=>(n.element=e,n),!0)}function tv(e,t,r){let{objectId:a,groupId:n}=e;if(r===a){let e=tu.get(t).value;if(e.pairs[n])return o.Loci(t,e,[n])}return R.Rh}function tb(e,t,r){let a=!1;if(o.isLoci(e)){if(!eo.Structure.areEquivalent(e.data.structure,t))return!1;let n=tu.get(t).value;if(e.data.crossLinkRestraints!==n)return!1;for(let t of e.elements)r(ey.Xp.ofSingleton(t))&&(a=!0)}return a}let ty={"cross-link-restraint":(e,t)=>(0,tr.sh)("Cross-link restraint",e,t,th)},tx={...tm},tS=(0,tr.Xz)({name:o.Tag.CrossLinkRestraint,label:"Cross Link Restraint",description:"Displays cross-link restraints.",factory:function(e,t){return e8.hX.createMulti("CrossLinkRestraint",e,t,tr.U_,ty)},getParams:function(e,t){return F.e.clone(tx)},defaultValues:F.e.getDefaultValues(tx),defaultColorTheme:{name:o.Tag.CrossLinkRestraint},defaultSizeTheme:{name:"uniform"},isApplicable:e=>o.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>tu.attach(e,t,void 0,!0),detach:e=>tu.ref(e,!1)}}),tT=(0,eE.Il)(13421772),tC={domain:F.e.Interval([.5,1.5],{step:.
731901}),list:F.e.ColorList("red-grey",{presetKind:"scale"})},tO={name:"cross-link",label:"Cross Link",category:eP.J.Misc,factory:function e(t,r){let a,n;let i=t.structure&&tu.get(t.structure).value;if(i){let e=(n=eE.qe.create({domain:r.domain,listOrName:r.list.colors})).color;a=t=>{if(o.isLocation(t)){let r=i.pairs[t.element];if(r)return e(o.distance(r)/r.distanceThreshold)}return tT}}else a=()=>tT;return{factory:e,granularity:"group",color:a,props:r,description:"Colors cross-links by the deviation of the observed distance versus the modeled distance (e.g. modeled / `ihm_cross_link_restraint.distance_threshold`).",legend:n?n.legend:void 0}},getParams:function(e){return tC},defaultValues:F.e.getDefaultValues(tC),isApplicable:e=>!!e.structure&&o.isApplicable(e.structure),ensureCustomProperties:{attach:(e,t)=>t.structure?tu.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&tu.ref(e.structure,!1)}},tI=m.q.create({name:"integrative-cross-link-restraint",category:"custom-props",display:{name:"Cross Link Restraint"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=i.Provider}register(){this.provider.formatRegistry.add("mmCIF",tA),this.ctx.representation.structure.themes.colorThemeRegistry.add(tO),this.ctx.representation.structure.registry.add(tS)}unregister(){this.provider.formatRegistry.remove("mmCIF"),this.ctx.representation.structure.themes.colorThemeRegistry.remove(tO),this.ctx.representation.structure.registry.remove(tS)}}});function tA(e){if(!e6.rg.is(e.sourceData))return;let{ihm_cross_link_restraint:t}=e.sourceData.data.db;if(0!==t._rowCount)return i.fromTable(t,e)}var tw=r(85764),tD=r(75042);!function(e){function t(e){let t=e.descriptor.name,r=r=>(t in r._propertyData||(r._propertyData[t]={props:{...F.e.getDefaultValues(e.getParams(r))},data:tw.qE.create(void 0)}),r._propertyData[t]),a=(e,a,n)=>{let i=r(e);e._propertyData[t]={props:a,data:tw.qE.withValue(i.data,n)}};return{label:e.label,descriptor:e.descriptor,isHidden:e.isHidden,getParams:t=>{let a=F.e.clone(e.getParams(t));return F.e.setDefaultValues(a,r(t).props),a},defaultParams:e.defaultParams,isApplicable:e.isApplicable,attach:async(t,n,i={},o)=>{o&&n.customProperties.reference(e.descriptor,!0);let s=r(n),l=F.e.merge(e.defaultParams,s.props,i);if(s.data.value&&F.e.areEqual(e.defaultParams,s.props,l))return;let{value:u,assets:c}=await e.obtain(t,n,l);n.customProperties.add(e.descriptor),n.customProperties.assets(e.descriptor,c),a(n,l,u)},ref:(t,r)=>t.customProperties.reference(e.descriptor,r),get:e=>{var t;return null===(t=r(e))||void 0===t?void 0:t.data},set:(t,n={},i)=>{let o=r(t),s=F.e.merge(e.defaultParams,o.props,n);F.e.areEqual(e.defaultParams,o.props,s)||(a(t,s,i),t.customProperties.assets(e.descriptor))},props:e=>r(e).props}}e.createProvider=t,e.createSimple=function(e,r){let a={value:F.e.Value(r,{isHidden:!0})};return t({label:(0,tD.ce)(e),descriptor:(0,eI.d)({name:e}),isHidden:!0,defaultParams:a,getParams:()=>({value:F.e.Value(r,{isHidden:!0})}),isApplicable:()=>!0,obtain:async(e,t,r)=>({...F.e.getDefaultValues(a),...r})})}}(s||(s={}));var tE=r(40424),tM=r(1571),tP=r(27203);let tk=G.AO.fromArray,tB=G.AO.distance,t_=G.AO.setMagnitude,tR=G.AO.create,tF=G.AO.copy,tL=G.AO.add,tz={seedDensity:F.e.Numeric(10,{min:1,max:30,step:1},{description:"Percentage of cells with seed."}),stepSize:F.e.Numeric(.35,{min:.01,max:1,step:.01},{description:"Step size in grid space."}),minSeparation:F.e.Numeric(0,{min:0,max:5,step:.5},{description:"Minimum separation between streamlines in grid space. 0 to disable."})},tN=(0,G.AO)(),tG=(0,G.AO)(),tU=(0,G.AO)(),tV=(0,G.AO)();function tj(e,t,r,a,n,i,o){let{space:s}=t.cells,[l,u,c]=s.dimensions,d=s.dataOffset,p=i*n,f=5*Math.max(l,u,c)/n,m=n/1.1,h=new Map,g=Math.ceil(2/n);tF(tG,a);let b=0;for(let t=0;t<f&&!(tG[0]<1)&&!(tG[0]>l-2)&&!(tG[1]<1)&&!(tG[1]>u-2)&&!(tG[2]<1)&&!(tG[2]>c-2)&&r(tG,tU);++t){let t=d(Math.round(tG[0]),Math.round(tG[1]),Math.round(tG[2]));if(o&&o[t])break;let r=(h.get(t)||0)+1;if(h.set(t,r),r>g)break;t_(tN,tU,p);let a=tR(tG[0]+.5*tN[0],tG[1]+.5*tN[1],tG[2]+.5*tN[2]);tB(tV,a)>=m&&(e.push(a),tF(tV,a)),b++,tL(tG,tG,tN)}return b}async function tH(e,t,r){let{space:a}=t.cells,[n,i,o]=a.dimensions,s=a.dataOffset,{seedDensity:l,stepSize:u,minSeparation:c}=r,d=Math.max(1,Math.floor(Math.min(n,i,o)/l)),p=n-2-d,f=i-2-d,m=o-2-d,h=new tM._Q,g=[];for(let e=1;e<=m;e+=d)for(let t=1;t<=f;t+=d)for(let r=1;r<=p;r+=d)g.push(r+h.float()*d,t+h.float()*d,e+h.float()*d);for(let e=g.length/3-1;e>0;
7319e--){let t=Math.floor(h.float()*(e+1)),r=3*e,a=3*t,n=g[r],i=g[r+1],o=g[r+2];g[r]=g[a],g[r+1]=g[a+1],g[r+2]=g[a+2],g[a]=n,g[a+1]=i,g[a+2]=o}await e.update({isIndeterminate:!1,current:0,max:g.length/3});let b=tP.r.makeGetInterpolatedGradient(t),y=c>0,x=y?new Uint8Array(n*i*o):void 0,S=[];if(y){let e=Math.ceil(c),t=c*c;for(let r=-e;r<=e;++r)for(let a=-e;a<=e;++a)for(let n=-e;n<=e;++n)n*n+a*a+r*r<=t&&S.push([n,a,r])}let T=[],C=(0,G.AO)();for(let r=0;r<g.length;r+=3){e.shouldUpdate&&await e.update({current:r/3+1}),tk(C,g,r);let a=function(e,t,r,a,n){let i=[];return tj(i,e,t,r,a,-1,n)>1&&i.reverse(),tj(i,e,t,r,a,1,n),i}(t,b,C,u,x);if(a.length*u>=3&&(T.push(a),x))for(let e=0,t=a.length;e<t;++e){let t=a[e],r=Math.round(t[0]),l=Math.round(t[1]),u=Math.round(t[2]);for(let e=0,t=S.length;e<t;++e){let t=S[e],a=r+t[0],c=l+t[1],d=u+t[2];a>=0&&a<n&&c>=0&&c<i&&d>=0&&d<o&&(x[s(a,c,d)]=1)}}}return T}async function tq(e,t,r){return tH(e.runtime,t.grid,r)}let tX={type:F.e.MappedStatic("basic",{basic:F.e.Group(tz,{isFlat:!0})})},tW=s.createProvider({label:"Streamlines",descriptor:(0,eI.d)({name:"molstar_streamlines"}),defaultParams:tX,getParams:e=>tX,isApplicable:e=>!tE.f.Segmentation.get(e),obtain:async(e,t,r)=>{let a={...F.e.getDefaultValues(tX),...r};if("basic"===a.type.name)return{value:await tq(e,t,a.type.params)}}});var tK=r(96046),tQ=r(13070),tZ=r(89623),tY=r(53608),t$=r(1573),tJ=r(69126),t0=r(97187),t1=r(67330),t2=r(83576),t3=r(43975);function t4(e,t,r){return(0,R.SL)("streamlines",{streamlines:e,volume:t},r,a=>(function(e,t,r,a){t5.reset();let n=tP.r.getGridToCartesianTransform(t.grid);for(let{indices:a,instances:i}of r)for(let r=0,o=t1.h.size(a);r<o;r++)for(let o of e[t1.h.getAt(a,r)]){t3.A.transformMat4(t6,o,n);for(let e=0,r=t1.h.size(i);e<r;e++){let r=t.instances[t1.h.getAt(i,e)];t3.A.transformMat4(t8,t6,r.transform),t5.includePosition(t8)}}for(let{indices:a,instances:i}of(t5.finishedIncludeStep(),r))for(let r=0,o=t1.h.size(a);r<o;r++)for(let o of e[t1.h.getAt(a,r)]){t3.A.transformMat4(t6,o,n);for(let e=0,r=t1.h.size(i);e<r;e++){let r=t.instances[t1.h.getAt(i,e)];t3.A.transformMat4(t8,t6,r.transform),t5.radiusPosition(t8)}}return t5.getSphere(a)})(e,t,r,a),()=>(function(e,t,r){let a=function(e){let t=0;for(let r of e)t+=t1.h.size(r.indices)*t1.h.size(r.instances);return t}(r),n=[`${t.label||"Volume"}`];if(0===a)n.push("No Streamlines");else if(1===a){let e=t1.h.start(r[0].indices);if(n.push(`Streamline #${e}`),t.instances.length>1){let e=t1.h.start(r[0].instances);n.push(`Instance #${e}`)}}else n.push(`${a} Streamlines`);return n.join(" | ")})(0,t,r))}let t5=new t2.q("98"),t6=(0,t3.A)(),t8=(0,t3.A)(),t7={anchorEnabled:F.e.Boolean(!1,{label:"Anchor"}),anchorCenter:F.e.Vec3((0,t3.A)(),void 0,{hideIf:e=>!e.anchorEnabled}),anchorRadius:F.e.Numeric(1,{min:0,max:10,step:.1},{hideIf:e=>!e.anchorEnabled}),dashEnabled:F.e.Boolean(!1,{label:"Dash"}),dashPoints:F.e.Numeric(5,{min:1,max:25,step:1},{description:"Number of streamline points per dash/gap",hideIf:e=>!e.dashEnabled}),dashShift:F.e.Boolean(!1,{description:"Shift dashes so dashes become gaps and vice versa",hideIf:e=>!e.dashEnabled})},t9=(0,t3.A)();function re(e,t,r){if(e.length<2)return!1;if(!r.anchorEnabled)return!0;let a=e[0];if(t3.A.transformMat4(t9,a,t),t3.A.distance(t9,r.anchorCenter)<=r.anchorRadius)return!0;let n=e[e.length-1];return t3.A.transformMat4(t9,n,t),t3.A.distance(t9,r.anchorCenter)<=r.anchorRadius}function rt(e,t){let r=tW.get(e).value,a=t0.X.ofLength(r.length),n=t0.X.ofLength(e.instances.length);return t4(r,e,[{indices:a,instances:n}])}function rr(e,t,r,a,n){let{objectId:i,groupId:o,instanceId:s}=e;if(n===i){let e=tE.f.PickingGranularity.get(t),r=t1.h.ofSingleton(s);return"volume"===e?tE.f.Loci(t,r):t4(tW.get(t).value,t,[{indices:t1.h.ofSingleton(o),instances:r}])}return R.Rh}function ra(e,t,r,a,n){let i=!1,o=tW.get(t).value.length;if(tE.f.isLoci(e)){if(!tE.f.areEquivalent(e.volume,t))return!1;if(t0.X.is(e.instances)){let t=t0.X.start(e.instances)*o,r=t0.X.end(e.instances)*o;n(t0.X.ofBounds(t,r))&&(i=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*o;
7319n(t0.X.ofBounds(r,r+o))&&(i=!0)}}else if(e&&"data-loci"===e.kind&&"streamlines"===e.tag){if(!tE.f.areEquivalent(e.data.volume,t))return!1;for(let{indices:t,instances:r}of e.elements)t0.X.is(t)?t1.h.forEach(r,e=>{let r=e*o;n(t0.X.offset(t,r))&&(i=!0)}):t1.h.forEach(t,e=>{t1.h.forEach(r,t=>{let r=t*o;n(t0.X.ofSingleton(r+e))&&(i=!0)})})}return i}function rn(e){let t=tW.get(e).value,r=t.length,a=e.instances.length,n=(0,to.o0)("streamlines",{volume:e,streamlines:t},{index:void 0,instance:void 0});return(0,e9.OF)(r,a,1,(e,t)=>(n.element.index=e,n.element.instance=t,n))}var ri=r(54185);let ro=t3.A.fromArray,rs=t3.A.sub,rl=t3.A.normalize,ru=t3.A.isZero,rc=t3.A.set,rd=t3.A.cross,rp=t3.A.toArray,rf=t3.A.copy,rm=t3.A.magnitude,rh=t3.A.rotateAroundAxis,rg=t3.A.dot;function rv(e,t,r,a){let n=(0,t3.A)(),i=(0,t3.A)(),o=(0,t3.A)(),s=(0,t3.A)(),l=(0,t3.A)(),u=(0,t3.A)();ro(l,e,0),ro(u,e,3),rs(n,u,l),rl(n,n),ru(n)&&rc(n,1,0,0);let c=Math.abs(n[0]),d=Math.abs(n[1]),p=Math.abs(n[2]);c<=d&&c<=p?rc(o,1,0,0):d<=p?rc(o,0,1,0):rc(o,0,0,1),rd(s,n,o),rl(s,s),rd(o,s,n),rl(o,o),rp(o,t,0),rp(s,r,0),rf(i,n);for(let c=1;c<a;++c){c<a-1?(ro(l,e,(c-1)*3),ro(u,e,(c+1)*3)):(ro(l,e,(c-1)*3),ro(u,e,3*c)),rs(n,u,l),rl(n,n);let d=rg(i,n);if(d<.9999){let e=(0,t3.A)();if(rd(e,i,n),rm(e)>1e-4){rl(e,e);let t=Math.acos(Math.min(1,Math.max(-1,d)));rh(o,o,e,t),rh(s,s,e,t)}}rd(s,n,o),rl(s,s),rd(o,s,n),rl(o,o),rp(o,t,3*c),rp(s,r,3*c),rf(i,n)}}var rb=r(94828);let ry=G.AO.transformMat4,rx=G.AO.transformMat4Offset,rS=G.AO.toArray,rT={...t7,...tK.x.Params,useLineStrips:F.e.Boolean(!0)};function rC(e){return(0,rb.Y)({defaultProps:F.e.getDefaultValues(rT),createGeometry:rI,createLocationIterator:rn,getLoci:rr,eachLocation:ra,setUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash!==n&&(void 0!==e.info.streamlinesHash&&(e.createGeometry=!0,e.updateLocation=!0),e.info.streamlinesHash=n),r.anchorEnabled===a.anchorEnabled&&G.AO.equals(r.anchorCenter,a.anchorCenter)&&r.anchorRadius===a.anchorRadius||(e.createGeometry=!0),(r.dashEnabled!==a.dashEnabled||r.dashPoints!==a.dashPoints||r.dashShift!==a.dashShift)&&(e.createGeometry=!0),r.useLineStrips!==a.useLineStrips&&(e.createGeometry=!0)},initUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash=n},geometryUtils:tK.x.Utils},e)}function rO(e){let t=0;for(let r of e)t+=r.length;return t}function rI(e,t,r,a,n,i){let o;let{cells:{space:s}}=t.grid,l=s.dimensions,u=t$.r.getGridToCartesianTransform(t.grid),c=tW.get(t).value,d=rO(c),{dashEnabled:p,dashPoints:f,dashShift:m}=n,h=2*f;if(n.useLineStrips){let e=tQ.l.create(d,Math.ceil(d/10),i);o=e;let t=(0,G.AO)();for(let r=0,a=c.length;r<a;++r){let a=c[r];if(re(a,u,n)){if(p){let n=!1;for(let i=0,o=a.length;i<o;++i){let o=i%h;(m?o>=f:o<f)?(n||(e.start(r),n=!0),ry(t,a[i],u),e.addVec(t)):n&&(ry(t,a[i],u),e.addVec(t),e.end(),n=!1)}n&&e.end()}else{e.start(r);for(let r=0,n=a.length;r<n;++r)ry(t,a[r],u),e.addVec(t);e.end()}}}}else{let e=tQ.R.create(d,Math.ceil(d/10),i);o=e;let t=(0,G.AO)(),r=(0,G.AO)();for(let a=0,i=c.length;a<i;++a){let i=c[a];if(re(i,u,n)){if(p){G.AO.transformMat4(t,i[0],u);for(let n=1,o=i.length;n<o;++n){G.AO.transformMat4(r,i[n],u);let o=(n-1)%(2*f);(m?o>=f:o<f)&&e.addVec(t,r,a),G.AO.copy(t,r)}}else{G.AO.transformMat4(t,i[0],u);for(let n=1,o=i.length;n<o;++n)G.AO.transformMat4(r,i[n],u),e.addVec(t,r,a),G.AO.copy(t,r)}}}}let g=o.getLines();return g.setBoundingSphere(tp.CP.fromDimensionsAndTransform((0,tp.CP)(),l,u)),g}let rA={...t7,...e7.K.Params,tubeSizeFactor:F.e.Numeric(.2,{min:0,max:10,step:.01}),radialSegments:F.e.Numeric(8,{min:2,max:56,step:2},ri.ev.CustomQualityParamInfo)};function rw(e){return(0,rb.Y)({defaultProps:F.e.getDefaultValues(rA),createGeometry:rD,createLocationIterator:rn,getLoci:rr,eachLocation:ra,setUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash!==n&&(void 0!==e.info.streamlinesHash&&(e.createGeometry=!0,e.updateLocation=!0),e.info.streamlinesHash=n),(r.tubeSizeFactor!==a.tubeSizeFactor||r.radialSegments!==a.radialSegments)&&(e.createGeometry=!0),r.anchorEnabled===a.anchorEnabled&&G.AO.equals(r.anchorCenter,a.anchorCenter)&&r.anchorRadius===a.anchorRadius||(e.createGeometry=!0),(r.dashEnabled!==a.dashEnabled||r.dashPoints!==a.dashPoints||r.dashShift!==a.dashShift)&&(e.createGeometry=!0)},initUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash=n},geometryUtils:e7.K.Utils},e)}function rD(e,t,r,a,n,i){let{cells:{space:o}}=t.grid,s=o.dimensions,l=t$.r.getGridToCartesianTransform(t.grid),u=tW.get(t).value,{tubeSizeFactor:c,radialSegments:d,dashEnabled:p,dashPoints:f,dashShift:m}=n,h=rO(u)*d*2,g=tZ.V.createState(h,Math.ceil(h/10),i);for(let e=0,t=u.length;e<t;++e){let t=u[e];re(t,l,n)&&(g.currentGroup=e,p?function(e,t,r,a,n,i,o,s){let l=t.length;if(l<2)return;let u=[],c=[];for(let e=0;e<l;++e){let a=ry((0,G.AO)(),t[e],r);u.push(a),G.AO.copy(rE.position,a),c.push(s.size.size(rE)*n)}let d=2*i,p=o?i:0;for(;p<l-1;){let t=p,r=Math.min(p+i,l-1);r>t&&function(e,t,r,a,n,i){let o=n-a+1;if(o<2)return;let s=new Float32Array(3*o),l=new Float32Array(3*o),u=new Float32Array(3*o),c=new Float32Array(o),d=new Float32Array(o);for(let e=0;e<o;++e)rS(t[a+e],s,3*e),c[e]=r[a+e],d[e]=r[a+e];rv(s,l,u,o),(0,tY.x)(e,s,l,u,o-1,i,c,d,!0,!0,"elliptical")}(e,u,c,t,r,a),p+=d}}(g,t,l,d,c,f,m,a):function(e,t,r,a,n,i){let o=t.length;if(o<2)return;let s=o-1,l=new Float32Array(3*o),u=new Float32Array(3*o),c=new Float32Array(3*o),d=new Float32Array(o),p=new Float32Array(o);for(let e=0;e<o;++e){rx(l,t[e],r,3*e,0,0),G.AO.fromArray(rE.position,l,3*e);let a=i.size.size(rE)*n;d[e]=a,p[e]=a}rv(l,u,c,o),(0,tY.x)(e,l,u,c,s,a,d,p,!0,!0,"elliptical")}(g,t,l,d,c,a))}let b=tZ.V.getMesh(g);return b.setBoundingSphere(tp.CP.fromDimensionsAndTransform((0,tp.CP)(),s,l)),b}let rE=(0,e9.cH)(),rM={lines:(e,t)=>(0,tJ.rR)("Streamlines lines",e,t,rC,rt),"tube-mesh":(e,t)=>
7319(0,tJ.rR)("Streamlines tube-mesh",e,t,rw,rt)},rP={...rT,...rA,visuals:F.e.MultiSelect(["lines"],F.e.objectToOptions(rM)),density:F.e.Numeric(.1,{min:0,max:1,step:.01},ri.ev.ShadingCategory)},rk=(0,tJ.FX)({name:"streamlines",label:"Streamlines",description:"Displays streamlines.",factory:function(e,t){return e8.hX.createMulti("Streamlines",e,t,e8.hX.StateBuilder,rM)},getParams:function(e,t){return F.e.clone(rP)},defaultValues:F.e.getDefaultValues(rP),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!t$.f.isEmpty(e)&&!t$.f.Segmentation.get(e),ensureCustomProperties:{attach:(e,t)=>tW.attach(e,t,void 0,!0),detach:e=>tW.ref(e,!1)}}),rB=m.q.create({name:"streamlines-volume-prop",category:"custom-props",display:{name:"Streamlines"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=tW}update(e){let t=this.params.autoAttach!==e.autoAttach;return this.params.autoAttach=e.autoAttach,this.ctx.customVolumeProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customVolumeProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.volume.registry.add(rk)}unregister(){this.ctx.customVolumeProperties.unregister(this.provider.descriptor.name),this.ctx.representation.volume.registry.remove(rk)}},params:()=>({autoAttach:F.e.Boolean(!1)})}),r_={State:h,Representation:l,Camera:u,Misc:c},rR={Representation:_,Camera:d,State:p,CustomProps:f}},45213:function(e,t,r){r.d(t,{q:function(){return a}});var a,n=r(72762),i=r(67801),o=r(54854),s=r(14086),l=r(85764);!function(e){class t extends n.G.Create({name:"Root",typeClass:"Root"}){}e.Root=t;class r extends n.G.Create({name:"Category",typeClass:"Object"}){}e.Category=r;class a extends n.G.CreateBehavior({name:"Behavior"}){}e.Behavior=a,e.Categories={common:"Common",representation:"Representation",interaction:"Interaction","custom-props":"Custom Properties",misc:"Miscellaneous"},e.CreateCategory=n.E.BuiltIn({name:"create-behavior-category",display:{name:"Behavior Category"},from:t,to:r,params:{label:s.e.Text("",{isHidden:!0})}})({apply:({params:e})=>new r({},{label:e.label})});let u=new Map;e.getCategoryId=function(e){return u.get(e.id)},e.create=function(e){let r=n.E.CreateBuiltIn({name:e.name,display:e.display,from:[t],to:[a],params:e.params,apply({params:t},r){let n=e.label?e.label(t):{label:e.display.name,description:e.display.description};return new a(new e.ctor(r,t),n)},update:({b:e,newParams:t})=>o.iQ.create("Update Behavior",async()=>e.data.update&&await e.data.update(t)?i.td.UpdateResult.Updated:i.td.UpdateResult.Unchanged),canAutoUpdate:e.canAutoUpdate});return u.set(r.id,e.category),r},e.simpleCommandHandler=function(e,t){return class{register(){this.sub=e.subscribe(this.ctx,e=>t(e,this.ctx))}dispose(){this.sub&&this.sub.unsubscribe(),this.sub=void 0}constructor(e){this.ctx=e,this.sub=void 0}}};class c{subscribeCommand(e,t){this.subs.push(e.subscribe(this.ctx,t))}subscribeObservable(e,t){this.subs.push(e.subscribe(t))}track(e){this.subs.push(e)}dispose(){for(let e of this.subs)e.unsubscribe();this.subs=[]}update(e){return!(0,l.VS)(e,this.params)&&(this.params=e,!0)}constructor(e,t){this.ctx=e,this.params=t,this.subs=[]}}e.Handler=c;class d{subscribeCommand(e,t){this.subs.push(e.subscribe(this.plugin,t))}subscribeObservable(e,t){let r=e.subscribe(t);return this.subs.push(r),{unsubscribe:()=>{let e=this.subs.indexOf(r);e>=0&&(this.subs.splice(e,1),r.unsubscribe())}}}dispose(){for(let e of this.subs)e.unsubscribe();this.subs=[]}constructor(e,t){this.plugin=e,this.params=t,this.subs=[]}}e.WithSubscribers=d}(a||(a={}))},51064:function(e,t,r){r.r(t),r.d(t,{DefaultFocusLociBindings:function(){return A},DefaultLociLabelProvider:function(){return I},DefaultSelectLociBindings:function(){return T},FocusLoci:function(){return D},HighlightLoci:function(){return S},SelectLoci:function(){return O}});var a=r(99289),n=r(72762),i=r(58202),o=r(45213),s=r(51493),l=r(67801),u=r(58684),c=r(64770),d=r(14086),p=r(67589),f=r(30502),m=r(36111);let h=u.b4,g=u.N0,b=c.K.Trigger,y={hoverHighlightOnly:(0,c.K)([b(h.Flag.None)],"Highlight","Hover element using ${triggers}"),hoverHighlightOnlyExtend:(0,c.K)([b(h.Flag.None,g.create({shift:!0}))],"Extend highlight","From selected to hovered element along polymer using ${triggers}")},x={bindings:d.e.Value(y,{isHidden:!0}),ignore:d.e.Value([],{isHidden:!0}),preferAtoms:d.e.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:d.e.Boolean(!0)},S=o.q.create({name:"representation-highlight-loci",category:"interaction",ctor:class extends o.q.Handler{constructor(){super(...arguments),this.lociMarkProvider=(e,t)=>{this.ctx.canvas3d&&this.params.mark&&this.ctx.canvas3d.mark(e,t)}}getLoci(e){return this.params.preferAtoms&&f.Bond.isLoci(e)&&2===e.bonds.length?f.Bond.toFirstStructureElementLoci(e):e}
7319register(){this.subscribeObservable(this.ctx.behaviors.interaction.hover,({current:e,buttons:t,modifiers:r})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let a=this.getLoci(e.loci);if(this.params.ignore.includes(a.kind)){this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:e.repr,loci:p.Rh});return}let n=!1;c.K.match(this.params.bindings.hoverHighlightOnly,t,r)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnly({loci:a}),n=!0),c.K.match(this.params.bindings.hoverHighlightOnlyExtend,t,r)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnlyExtend({loci:a}),n=!0),n||this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:e.repr,loci:p.Rh})}),this.ctx.managers.interactivity.lociHighlights.addProvider(this.lociMarkProvider)}unregister(){this.ctx.managers.interactivity.lociHighlights.removeProvider(this.lociMarkProvider)}},params:()=>x,display:{name:"Highlight Loci on Canvas"}}),T={clickSelect:c.K.Empty,clickSelectOnly:c.K.Empty,clickToggle:(0,c.K)([b(h.Flag.Primary,g.create())],"Toggle selection","Click on element using ${triggers}"),clickToggleExtend:(0,c.K)([b(h.Flag.Primary,g.create({shift:!0}))],"Toggle extended selection","Click on element using ${triggers} to extend selection along polymer"),clickDeselect:c.K.Empty,clickDeselectAllOnEmpty:(0,c.K)([b(h.Flag.Primary,g.create())],"Deselect all","Click on nothing using ${triggers}")},C={bindings:d.e.Value(T,{isHidden:!0}),ignore:d.e.Value([],{isHidden:!0}),preferAtoms:d.e.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:d.e.Boolean(!0)},O=o.q.create({name:"representation-select-loci",category:"interaction",ctor:class extends o.q.Handler{getLoci(e){return this.params.preferAtoms&&f.Bond.isLoci(e)&&2===e.bonds.length?f.Bond.toFirstStructureElementLoci(e):e}applySelectMark(e,t){let r=this.ctx.state.data.cells.get(e);if(r&&n.G.isRepresentation3D(r.obj)){this.spine.current=r;let e=this.spine.getRootOfType(n.G.Molecule.Structure);if(e){t&&this.lociMarkProvider({loci:f.Structure.Loci(e.data)},a.dd.Deselect);let r=this.ctx.managers.structure.selection.getLoci(e.data);this.lociMarkProvider({loci:r},a.dd.Select)}}}register(){let e=e=>!p.o_.isEmpty(e),t=[["clickSelect",e=>this.ctx.managers.interactivity.lociSelects.select(e),e],["clickToggle",e=>this.ctx.managers.interactivity.lociSelects.toggle(e),e],["clickToggleExtend",e=>this.ctx.managers.interactivity.lociSelects.toggleExtend(e),e],["clickSelectOnly",e=>this.ctx.managers.interactivity.lociSelects.selectOnly(e),e],["clickDeselect",e=>this.ctx.managers.interactivity.lociSelects.deselect(e),e],["clickDeselectAllOnEmpty",()=>this.ctx.managers.interactivity.lociSelects.deselectAll(),e=>p.o_.isEmpty(e)]];t.sort((e,t)=>{let r=this.params.bindings[e[0]],a=this.params.bindings[t[0]],n=0===r.triggers.length?0:(0,m.uH)(r.triggers.map(e=>g.size(e.modifiers)));return(0===a.triggers.length?0:(0,m.uH)(a.triggers.map(e=>g.size(e.modifiers))))-n}),this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:r,modifiers:a})=>{if(!this.ctx.canvas3d||this.ctx.isBusy||!this.ctx.selectionMode)return;let n=this.getLoci(e.loci);if(!this.params.ignore.includes(n.kind)){for(let[i,o,s]of t)if(c.K.match(this.params.bindings[i],r,a)&&(!s||s(n))){o({repr:e.repr,loci:n});break}}}),this.ctx.managers.interactivity.lociSelects.addProvider(this.lociMarkProvider),this.subscribeObservable(this.ctx.state.events.object.created,({ref:e})=>this.applySelectMark(e)),this.subscribeObservable(this.ctx.state.events.object.updated,({ref:e,obj:t,oldObj:r,oldData:a,action:i})=>{let o=this.ctx.state.data.cells.get(e);if(o&&n.G.Molecule.Structure.is(o.obj)){let o=t.data,s="recreate"===i?null==r?void 0:r.data:"in-place"===i?a:void 0;if(s&&f.Structure.areEquivalent(o,s)&&f.Structure.areHierarchiesEqual(o,s))return;for(let t of this.ctx.state.data.select(l.tE.children(e).ofType(n.G.Molecule.Structure.Representation3D)))this.applySelectMark(t.transform.ref,!0)}})}unregister(){this.ctx.managers.interactivity.lociSelects.removeProvider(this.lociMarkProvider)}constructor(e,t){super(e,t),this.lociMarkProvider=(e,t)=>{this.ctx.canvas3d&&this.params.mark&&this.ctx.canvas3d.mark({loci:e.loci},t)},this.spine=new s.W.Impl(e.state.data.cells)}},params:()=>C,display:{name:"Select Loci on Canvas"}}),I=o.q.create({name:"default-loci-label-provider",category:"interaction",ctor:class{register(){this.ctx.managers.lociLabels.addProvider(this.f)}unregister(){this.ctx.managers.lociLabels.removeProvider(this.f)}constructor(e){this.ctx=e,this.f={label:e=>{let t=[];if(f.StructureElement.Loci.is(e)){let r=new Set;for(let{unit:t}of e.elements){let a=f.StructureElement.Location.create(e.structure,t,t.elements[0]),n=f.StructureProperties.entity.pdbx_description(a).join(", ");r.add(n)}
73191===r.size&&r.forEach(e=>t.push(e))}return t.push((0,i.Ve)(e)),t.filter(e=>!!e).join("</br>")},group:e=>e.toString().replace(/Model [0-9]+/g,"Models"),priority:100}}},display:{name:"Provide Default Loci Label"}}),A={clickFocus:(0,c.K)([b(h.Flag.Primary,g.create()),b(h.Flag.Trigger)],"Representation Focus","Click element using ${triggers}"),clickFocusAdd:(0,c.K)([b(h.Flag.Primary,g.create({control:!0})),b(h.Flag.Primary,g.create({meta:!0}))],"Representation Focus Add","Click element using ${triggers}"),clickFocusExtend:(0,c.K)([b(h.Flag.Primary,g.create({shift:!0}))],"Representation Focus Extend","Click on element using ${triggers}"),clickFocusSelectMode:(0,c.K)([],"Representation Focus (Selection Mode)","Click element using ${triggers}"),clickFocusAddSelectMode:(0,c.K)([],"Representation Focus Add (Selection Mode)","Click element using ${triggers}"),clickFocusExtendSelectMode:(0,c.K)([],"Representation Focus Extend (Selection Mode)","Click on element using ${triggers}")},w={bindings:d.e.Value(A,{isHidden:!0})},D=o.q.create({name:"representation-focus-loci",category:"interaction",ctor:class extends o.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{var a,n,i,o,s,l,u;let{clickFocus:d,clickFocusAdd:f,clickFocusExtend:m,clickFocusSelectMode:h,click
7319FocusAddSelectMode:g,clickFocusExtendSelectMode:b}=this.params.bindings,y=this.ctx.selectionMode?h:d,x=c.K.match(y,t,r),S=this.ctx.selectionMode?g:f,T=c.K.match(S,t,r),C=this.ctx.selectionMode?b:m,O=c.K.match(C,t,r);if(!x&&!T&&!O)return;let I=null!==(o=null===(i=null===(n=null===(a=e.repr)||void 0===a?void 0:a.props)||void 0===n?void 0:n.snapshotKey)||void 0===i?void 0:i.trim())&&void 0!==o?o:"";if(!this.ctx.selectionMode&&x&&I){this.ctx.managers.snapshot.applyKey(I);return}let A=null===(l=null===(s=e.repr)||void 0===s?void 0:s.props)||void 0===l?void 0:l.markdownCommands;if(!this.ctx.selectionMode&&x&&"object"==typeof A&&Object.keys(A).length>0){this.ctx.managers.markdownExtensions.tryExecute("click",A);return}let{granularity:w}=this.ctx.managers.interactivity.props;if("residue"!==w&&"element"!==w)return;let D=p.o_.normalize(e.loci,"residue"),E=this.ctx.managers.structure.focus.current;if(E&&p.o_.areEqual(E.loci,D))this.ctx.managers.structure.focus.clear();else if(x)this.ctx.managers.structure.focus.setFromLoci(D);else{O?this.ctx.managers.structure.focus.extendFromLoci(D):this.ctx.managers.structure.focus.toggleFromLoci(D);let e=null===(u=this.ctx.managers.structure.focus.current)||void 0===u?void 0:u.loci;e&&this.ctx.managers.camera.focusLoci(e)}})}},params:()=>w,display:{name:"Representation Focus Loci on Canvas"}})},3305:function(e,t,r){r.d(t,{Y:function(){return O}});var a,n,i=r(11056),o=r(85471),s=r(30502),l=r(43015),u=r(45366),c=r(40217),d=r(71649),p=r(67801),f=r(7305),m=r(14086),h=r(16668),g=r(34813),b=r(86276),y=r(64690);let x=e=>{let t=u.L.Representation.StructureRepresentation3D.definition.params(void 0,e);return{expandRadius:m.e.Numeric(5,{min:1,max:10,step:1}),targetParams:m.e.Group(t,{label:"Target",customDefault:(0,l.he)(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.22,sizeAspectRatio:.73,adjustCylinderLength:!0,xrayShaded:!0,aromaticBonds:!1,multipleBonds:"off",excludeTypes:["hydrogen-bond","metal-coordination"]}})}),surroundingsParams:m.e.Group(t,{label:"Surroundings",customDefault:(0,l.he)(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.16,excludeTypes:["hydrogen-bond","metal-coordination"]}})}),nciParams:m.e.Group(t,{label:"Non-covalent Int.",customDefault:(0,l.he)(e,void 0,{type:i.Wt,color:o.qN,size:f.k.BuiltIn.uniform})}),components:m.e.MultiSelect(S,m.e.arrayToOptions(S)),excludeTargetFromSurroundings:m.e.Boolean(!1,{label:"Exclude Target",description:'Exclude the focus "target" from the surroudings component.'}),ignoreHydrogens:m.e.Boolean(!1),ignoreHydrogensVariant:m.e.Select("all",m.e.arrayToOptions(["all","non-polar"])),ignoreLight:m.e.Boolean(!1),material:g.F.getParam(),clip:m.e.Group(b.b.Params),interior:(0,y.xA)()}},S=["target","surroundings","interactions"];(a=n||(n={})).TargetSel="structure-focus-target-sel",a.TargetRepr="structure-focus-target-repr",a.SurrSel="structure-focus-surr-sel",a.SurrRepr="structure-focus-surr-repr",a.SurrNciRepr="structure-focus-surr-nci-repr";let T=new Set([n.TargetSel,n.TargetRepr,n.SurrSel,n.SurrRepr,n.SurrNciRepr]);class C extends c.qZ.WithSubscribers{constructor(){super(...arguments),this.currentSource=void 0}get surrLabel(){return`[Focus] Surroundings (${this.params.expandRadius} \xc5)`}getReprParams(e){return{...e,type:{name:e.type.name,params:{...e.type.params,ignoreHydrogens:this.params.ignoreHydrogens,ignoreHydrogensVariant:this.params.ignoreHydrogensVariant,ignoreLight:this.params.ignoreLight,material:this.params.material,clip:this.params.clip,interior:this.params.interior}}}}ensureShape(e){var t;let r=this.plugin.state.data,a=r.tree,o=r.build(),l=p.tE.findUniqueTagsInSubtree(a,e.transform.ref,T);l[n.TargetSel]||(l[n.TargetSel]=o.to(e).apply(u.L.Model.StructureSelectionFromBundle,{bundle:s.StructureElement.Bundle.Empty,label:"[Focus] Target"},{tags:n.TargetSel}).ref),l[n.SurrSel]||(l[n.SurrSel]=o.to(e).apply(u.L.Model.StructureSelectionFromExpression,{expression:d.MolScriptBuilder.struct.generator.empty(),label:this.surrLabel},{tags:n.SurrSel}).ref);let c=this.params.components;return c.indexOf("target")>=0&&!l[n.TargetRepr]&&(l[n.TargetRepr]=o.to(l[n.TargetSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.targetParams),{tags:n.TargetRepr}).ref),c.indexOf("surroundings")>=0&&!l[n.SurrRepr]&&(l[n.SurrRepr]=o.to(l[n.SurrSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.surroundingsParams),{tags:n.SurrRepr}).ref),c.indexOf("interactions")>=0&&!l[n.SurrNciRepr]&&e.obj&&i.Wt.isApplicable(null===(t=e.obj)||void 0===t?void 0:t.data)&&(l[n.SurrNciRepr]=o.to(l[n.SurrSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.nciParams),{tags:n.SurrNciRepr}).ref),{state:r,builder:o,refs:l}}clear(e){let t=this.plugin.state.data;this.currentSource=void 0;let r=t.select(p.tE.Generators.byRef(e).subtree().withTag(n.TargetSel)),a=t.select(p.tE.Generators.byRef(e).subtree().withTag(n.SurrSel));if(0===r.length&&0===a.length)return;let i=t.build(),o=s.StructureElement.Bundle.Empty;for(let e of r)i.to(e).update(u.L.Model.StructureSelectionFromBundle,e=>({...e,bundle:o}));let l=d.MolScriptBuilder.struct.generator.empty();for(let e of a)i.to(e).update(u.L.Model.StructureSelectionFromExpression,e=>({...e,expression:l}));return h.I.State.Update(this.plugin,{state:t,tree:i,options:{doNotLogTiming:!0,doNotUpdate
7319Current:!0}})}async focus(e){let t=this.plugin.helpers.substructureParent.get(e.structure);if(!t||!t.obj)return;this.currentSource=e;let r=s.StructureElement.Loci.remap(e,t.obj.data),a=s.StructureElement.Loci.extendToWholeResidues(r),i=s.StructureElement.Bundle.fromLoci(a),o=s.StructureElement.Bundle.toExpression(i),l=d.MolScriptBuilder.struct.modifier.includeSurroundings({0:o,radius:this.params.expandRadius,"as-whole-residues":!0});this.params.excludeTargetFromSurroundings&&(l=d.MolScriptBuilder.struct.modifier.exceptBy({0:l,by:o}));let{state:c,builder:p,refs:f}=this.ensureShape(t);p.to(f[n.TargetSel]).update(u.L.Model.StructureSelectionFromBundle,e=>({...e,bundle:i})),p.to(f[n.SurrSel]).update(u.L.Model.StructureSelectionFromExpression,e=>({...e,expression:l,label:this.surrLabel})),await h.I.State.Update(this.plugin,{state:c,tree:p,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}})}register(e){this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,e=>{e?this.focus(e.loci):this.clear(p.EW.RootRef)})}async update(e){let t=this.params;if(this.params=e,t.excludeTargetFromSurroundings!==e.excludeTargetFromSurroundings)return this.currentSource&&this.focus(this.currentSource),!0;let r=this.plugin.state.data,a=r.build(),i=p.tE.Generators.root.subtree(),o=this.params.components,s=o.indexOf("target")>=0;for(let e of r.select(i.withTag(n.TargetRepr)))s?a.to(e).update(this.getReprParams(this.params.targetParams)):a.delete(e.transform.ref);for(let e of(s=o.indexOf("surroundings")>=0,r.select(i.withTag(n.SurrRepr))))s?a.to(e).update(this.getReprParams(this.params.surroundingsParams)):a.delete(e.transform.ref);for(let e of(s=o.indexOf("interactions")>=0,r.select(i.withTag(n.SurrNciRepr))))s?a.to(e).update(this.getReprParams(this.params.nciParams)):a.delete(e.transform.ref);return await h.I.State.Update(this.plugin,{state:r,tree:a,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}}),e.expandRadius!==t.expandRadius&&this.currentSource&&this.focus(this.currentSource),!0}}let O=c.qZ.create({name:"create-structure-focus-representation",display:{name:"Structure Focus Representation"},category:"interaction",ctor:C,params:(e,t)=>x(t)})},83733:function(e,t,r){r.d(t,{a:function(){return P}});var a,n,i=r(14086),o=r(72762),s=r(1573),l=r(48930),u=r(87144),c=r(70371),d=r(45213),p=r(68332);(a=n||(n={})).create=function(e){return{entries:(0,p.S)(),capacity:Math.max(1,e)}},a.get=function(e,t){for(let r=e.entries.first;r;r=r.next)if(r.value.key===t)return e.entries.remove(r),e.entries.addLast(r.value),r.value.data},a.set=function(e,t,r){let a;if(e.entries.count>=e.capacity){let t=e.entries.first;a=t.value.data,e.entries.remove(t)}return e.entries.addLast({key:t,data:r}),a},a.remove=function(e,t){for(let r=e.entries.first;r;r=r.next)if(r.value.key===t){e.entries.remove(r);break}};var f=r(89260),m=r(42639),h=r(23643),g=r(16668),b=r(67801),y=r(30502),x=r(67589),S=r(59725),T=r(1814),C=r(30485),O=r(73824),I=r(93895),A=r(15221),w=r(654);function D(e,t){return e===t}var E=r(73506);class M{constructor(e=!1){this.isRunning=!1,this.queue=[],this.counter=0,this.log=e}enqueue(e){this.log&&console.log("SingleAsyncQueue enqueue",this.counter),this.queue[0]={id:this.counter,func:e},this.counter++,this.run()}async run(){if(this.isRunning)return;let e=this.queue.pop();if(e){this.isRunning=!0;try{this.log&&console.log("SingleAsyncQueue run",e.id),await e.func(),this.log&&console.log("SingleAsyncQueue complete",e.id)}finally{this.isRunning=!1,this.run()}}}}class P extends o.G.CreateBehavior({name:"Volume Streaming"}){}!function(e){function t(e,t,r,a,n={}){var o,l,u,c;return i.e.Group({isoValue:s.f.createIsoValueParam(null!==(o=n.isoValue)&&void 0!==o?o:r,a),color:i.e.Color(null!==(l=n.color)&&void 0!==l?l:t),wireframe:i.e.Boolean(null!==(u=n.wireframe)&&void 0!==u&&u),opacity:i.e.Numeric(null!==(c=n.opacity)&&void 0!==c?c:.3,{min:0,max:1,step:.01})},{label:e,isExpanded:!0})}e.RootTag="volume-streaming-info";let r={byteOffset:0,rate:1,sampleCount:[1,1,1],valuesInfo:[{mean:0,min:-1,max:1,sigma:.1},{mean:0,min:-1,max:1,sigma:.1}]};function a(a){let{entryData:n,defaultView:o,structure:d,channelParam
7319s:f={}}=a,m=n||{kind:"em",header:{sampling:[r],availablePrecisions:[{precision:0,maxVoxels:0}]},emDefaultContourLevel:s.f.IsoValue.relative(0)},h=d&&d.boundary.box||(0,l.XZ)();return{view:i.e.MappedStatic(o||("em"===m.kind?"auto":"selection-box"),{off:i.e.Group({}),box:i.e.Group({bottomLeft:i.e.Vec3(h.min),topRight:i.e.Vec3(h.max)},{description:"Static box defined by cartesian coords.",isFlat:!0}),"selection-box":i.e.Group({radius:i.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in Å within which the volume is shown."}),bottomLeft:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0}),topRight:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0}),"camera-target":i.e.Group({radius:i.e.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),dynamicDetailLevel:p(m.header.availablePrecisions,0,{label:"Dynamic Detail"}),bottomLeft:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0}),topRight:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0})},{description:"Box around camera target.",isFlat:!0}),cell:i.e.Group({}),auto:i.e.Group({radius:i.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in Å within which the volume is shown."}),selectionDetailLevel:p(m.header.availablePrecisions,6,{label:"Selection Detail"}),isSelection:i.e.Boolean(!1,{isHidden:!0}),bottomLeft:i.e.Vec3(h.min,{},{isHidden:!0}),topRight:i.e.Vec3(h.max,{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0})},{options:e.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Interaction" shows the volume around the focused element/atom. "Whole Structure" shows the volume for the whole structure.'}),detailLevel:p(m.header.availablePrecisions,3),channels:"em"===m.kind?i.e.Group({em:t("EM",(0,c.Il)(6524815),m.emDefaultContourLevel||s.f.IsoValue.relative(1),m.header.sampling[0].valuesInfo[0],f.em)},{isFlat:!0}):i.e.Group({"2fo-fc":t("2Fo-Fc",(0,c.Il)(3367602),s.f.IsoValue.relative(1.5),m.header.sampling[0].valuesInfo[0],f["2fo-fc"]),"fo-fc(+ve)":t("Fo-Fc(+ve)",(0,c.Il)(3390259),s.f.IsoValue.relative(3),m.header.sampling[0].valuesInfo[1],f["fo-fc(+ve)"]),"fo-fc(-ve)":t("Fo-Fc(-ve)",(0,c.Il)(12268339),s.f.IsoValue.relative(-3),m.header.sampling[0].valuesInfo[1],f["fo-fc(-ve)"])},{isFlat:!0})}}function p(e,t,r){return i.e.Select(Math.min(t,e.length-1),e.map((e,t)=>[t,`${t+1} [ ${0|Math.pow(e.maxVoxels,1/3)}^3 cells ]`]),{description:"Determines the maximum number of voxels. Depending on the size of the volume options are in the range from 1 (0.52M voxels) to 7 (25.17M voxels).",...r})}function P(e){return{entry:{name:e.entry.name,params:{detailLevel:e.entry.params.detailLevel,channels:e.entry.params.channels,view:{name:e.entry.params.view.name,params:{...e.entry.params.view.params}}}}}}e.createParams=function(e={}){let{data:t,defaultView:r,channelParams:n}=e,o=new Map;t&&t.entries.forEach(e=>o.set(e.dataId,e));let s=t?t.entries.map(e=>[e.dataId,e.dataId]):[],l=t?t.entries[0].dataId:"";return{entry:i.e.Mapped(l,s,e=>i.e.Group(a({entryData:o.get(e),defaultView:r,structure:t&&t.structure,channelParams:n})))}},e.createEntryParams=a,e.copyParams=P,e.ViewTypeOptions=[["off","Off"],["box","Bounded Box"],["selection-box","Around Focus"],["camera-target","Around Camera"],["cell","Whole Structure"],["auto","Auto"]],e.ChannelTypeOptions=[["em","em"],["2fo-fc","2fo-fc"],["fo-fc(+ve)","fo-fc(+ve)"],["fo-fc(-ve)","fo-fc(-ve)"]];class k extends d.q.WithSubscribers{get info(){return this.infoMap.get(this.params.entry.name)}async queryData(e){let t=(0,f.T)(this.data.serverUrl,`${this.info.kind}/${this.info.dataId.toLowerCase()}`);if(e){let{min:r,max:a}=e;t+=`/box/${r.map(e=>Math.round(1e3*e)/1e3).join(",")}/${a.map(e=>Math.round(1e3*e)/1e3).join(",")}`}else t+="/cell";let r=this.params.entry.params.detailLevel;"auto"===this.params.entry.params.view.name&&this.params.entry.params.view.params.isSelection&&(r=this.params.entry.params.view.params.selectionDetailLevel),"camera-target"===this.params.entry.params.view.name&&e&&(r=this.decideDetail(e,this.params.entry.params.view.params.dynamicDetailLevel)),t+=`?detail=${r}`;let a=n.get(this.cache,t);if(a)return a.data;let i=S.x.getUrlAsset(this.plugin.managers.asset,t),o=await this.plugin.runTask(this.plugin.managers.asset.resolve(i,"binary")),s=await this.parseCif(o.data);if(!s)return;let l=n.set(this.cache,t,{data:s,asset:o});return l&&l.asset.dispose(),s}async parseCif(e){let t=await this.plugin.runTask(m.pe.parseBinary(e));if(t.isError){this.plugin.log.error("VolumeStreaming, parsing CIF: "+t.toString());return}if(t.result.blocks.length<2){this.plugin.log.error("VolumeStreaming: Invalid data.");return}let r={};for(let e=1;e<t.result.blocks.length;e++){let a=t.result.blocks[e],n=m.pe.schema.densityServer(a),i=await this.plugin.runTask((0,h.N)(n));r[a.header]=i}return r}async updateParams(e,t=!1){let r=P(this.params),a=r.entry.params.view.name;"off"!==a&&"cell"!==a&&(r.entry.params.view.params.bottomLeft=(null==e?void 0:e.min)||u.AO.zero(),r.entry.params.view.params.topRight=(null==e?void 0:e.max)||u.AO.zero()),"auto"===a&&(r.entry.params.view.params.isSelection=t);let n=this.plugin.state.data,i=n.build().to(this.ref).update(r);await g.I.State.Update(this.plugin,{state:n,tree:i,options:{doNotUpdate
7319Current:!0}})}getStructureRoot(){return this.plugin.state.data.select(b.tE.Generators.byRef(this.ref).rootOfType(o.G.Molecule.Structure))[0]}register(e){this.ref=e,this.subscribeObservable(this.plugin.state.events.object.removed,e=>{o.G.Molecule.Structure.is(e.obj)&&y.StructureElement.Loci.is(this.lastLoci)&&this.lastLoci.structure===e.obj.data&&(this.lastLoci=x.Rh)}),this.subscribeObservable(this.plugin.state.events.object.updated,e=>{o.G.Molecule.Structure.is(e.oldObj)&&y.StructureElement.Loci.is(this.lastLoci)&&this.lastLoci.structure===e.oldObj.data&&(this.lastLoci=x.Rh)}),this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,e=>{if(!this.plugin.state.data.tree.children.has(this.ref))return;let t=e?e.loci:x.Rh;switch(this.params.entry.params.view.name){case"auto":this.updateAuto(t);break;case"selection-box":this.updateSelectionBox(t);break;default:this.lastLoci=t}})}unregister(){let e=this.cache.entries.first;for(;e;)e.value.data.asset.dispose(),e=e.next}isCameraTargetSame(e,t){if(!e||!t)return!1;let r=u.AO.equals(e.target,t.target),a=u.AO.squaredDistance(e.target,e.position),n=Math.abs(a-u.AO.squaredDistance(t.target,t.position))/a<.001;return r&&n}cameraTargetDistance(e){return u.AO.distance(e.target,e.position)}getBoxFromLoci(e){var t,r,a;if(x.o_.isEmpty(e)||(0,x.jF)(e))return(0,l.XZ)();let n=this.plugin.helpers.substructureParent.get(e.structure,!0);if(!n)return(0,l.XZ)();let i=this.getStructureRoot();if(!i||(null===(t=i.obj)||void 0===t?void 0:t.data)!==(null===(r=n.obj)||void 0===r?void 0:r.data))return(0,l.XZ)();let o=T.N.get(null===(a=i.obj)||void 0===a?void 0:a.data.models[0]);o&&u.yb.invert(this._invTransform,o);let s=y.StructureElement.Loci.extendToWholeResidues(e),c=y.StructureElement.Loci.getBoundary(s,o&&!Number.isNaN(this._invTransform[0])?this._invTransform:void 0).box;return 1===y.StructureElement.Loci.size(s)&&l.XZ.expand(c,c,u.AO.create(1,1,1)),c}updateAuto(e){this.updateQueue.enqueue(async()=>{this.lastLoci=e,(0,x.jF)(e)?await this.updateParams("x-ray"===this.info.kind?this.data.structure.boundary.box:void 0,!1):await this.updateParams(this.getBoxFromLoci(e),!0)})}updateSelectionBox(e){this.updateQueue.enqueue(async()=>{x.o_.areEqual(this.lastLoci,e)?this.lastLoci=x.Rh:this.lastLoci=e;let t=this.getBoxFromLoci(this.lastLoci);await this.updateParams(t)})}updateCameraTarget(e){this.updateQueue.enqueue(async()=>{var t,r,a;let n=null===(t=this.plugin.canvas3d)||void 0===t?void 0:t.props.camera.manualReset;try{n||null===(r=this.plugin.canvas3d)||void 0===r||r.setProps({camera:{manualReset:!0}});let t=this.boxFromCameraTarget(e,!0);await this.updateParams(t)}finally{n||null===(a=this.plugin.canvas3d)||void 0===a||a.setProps({camera:{manualReset:n}})}})}boxFromCameraTarget(e,t){var r;let a,n,i;let o=e.target,s=this.cameraTargetDistance(e),c=Math.tan(.5*e.fov)*s,d=null===(r=this.plugin.canvas3d)||void 0===r?void 0:r.camera.viewport;if(d&&d.width>d.height&&(c*=d.width/d.height),c*="camera-target"===this.params.entry.params.view.name?this.params.entry.params.view.params.radius:.5,t){let e=u.AO.zero();l.XZ.size(e,this.data.structure.boundary.box),a=Math.min(c,.5*e[0]),n=Math.min(c,.5*e[1]),i=Math.min(c,.5*e[2])}else a=n=i=c;return l.XZ.create(u.AO.create(o[0]-a,o[1]-n,o[2]-i),u.AO.create(o[0]+a,o[1]+n,o[2]+i))}decideDetail(e,t){let r="x-ray"===this.info.kind?l.XZ.volume(this.data.structure.boundary.box):this.info.header.spacegroup.size.reduce((e,t)=>e*t,1),a=l.XZ.volume(e)/r,n=this.info.header.availablePrecisions.length-1,i=t;for(;a<=.5&&i<n;)a*=2,i+=1;return i}async update(e){let t="selection-box"===e.entry.params.view.name&&this.params&&this.params.entry&&this.params.entry.params&&this.params.entry.params.view&&"selection-box"!==this.params.entry.params.view.name;this.params=e;let r,a=!1;switch("camera-target"!==e.entry.params.view.name&&this.cameraTargetSubscription&&(this.cameraTargetSubscription.unsubscribe(),this.cameraTargetSubscription=void 0),e.entry.params.view.name){case"off":a=!0;break;case"box":r=l.XZ.create(e.entry.params.view.params.bottomLeft,e.entry.params.view.params.topRight),a=1e-4>l.XZ.volume(r);break;case"selection-box":{r=t?this.getBoxFromLoci(this.lastLoci)||(0,l.XZ)():l.XZ.create(u.AO.clone(e.entry.params.view.params.bottomLeft),u.AO.clone(e.entry.params.view.params.topRight));let n=e.entry.params.view.params.radius;a=1e-4>l.XZ.volume(r),l.XZ.expand(r,r,u.AO.create(n,n,n));break}case"camera-target":this.cameraTargetSubscription||(this.cameraTargetSubscription=this.subscribeOb
7319servable(this.cameraTargetObservable,e=>this.updateCameraTarget(e))),r=this.boxFromCameraTarget(this.plugin.canvas3d.camera.getSnapshot(),!0);break;case"cell":r="x-ray"===this.info.kind?this.data.structure.boundary.box:void 0;break;case"auto":if((r=e.entry.params.view.params.isSelection||"x-ray"===this.info.kind?l.XZ.create(u.AO.clone(e.entry.params.view.params.bottomLeft),u.AO.clone(e.entry.params.view.params.topRight)):void 0)&&(a=1e-4>l.XZ.volume(r),e.entry.params.view.params.isSelection)){let t=e.entry.params.view.params.radius;l.XZ.expand(r,r,u.AO.create(t,t,t))}}let n=a?{}:await this.queryData(r);if(!n)return!1;let i=e.entry.params.channels;return"x-ray"===this.info.kind?(this.channels["2fo-fc"]=this.createChannel(n["2FO-FC"]||s.f.One,i["2fo-fc"],this.info.header.sampling[0].valuesInfo[0]),this.channels["fo-fc(+ve)"]=this.createChannel(n["FO-FC"]||s.f.One,i["fo-fc(+ve)"],this.info.header.sampling[0].valuesInfo[1]),this.channels["fo-fc(-ve)"]=this.createChannel(n["FO-FC"]||s.f.One,i["fo-fc(-ve)"],this.info.header.sampling[0].valuesInfo[1])):this.channels.em=this.createChannel(n.EM||s.f.One,i.em,this.info.header.sampling[0].valuesInfo[0]),!0}createChannel(e,t,r){return{data:e,color:t.color,wireframe:t.wireframe,opacity:t.opacity,isoValue:"relative"===t.isoValue.kind?t.isoValue:s.f.IsoValue.toRelative(t.isoValue,r)}}getDescription(){return"selection-box"===this.params.entry.params.view.name?"Selection":"camera-target"===this.params.entry.params.view.name?"Camera":"box"===this.params.entry.params.view.name?"Static Box":"cell"===this.params.entry.params.view.name?"Cell":""}constructor(e,t){var r,a;super(e,{}),this.plugin=e,this.data=t,this.cache=n.create(25),this.params={},this.lastLoci=x.Rh,this.ref="",this.cameraTargetObservable=this.plugin.canvas3d.didDraw.pipe((0,C.p)(500,void 0,{leading:!0,trailing:!0}),(0,O.U)(()=>{var e;return null===(e=this.plugin.canvas3d)||void 0===e?void 0:e.camera.getSnapshot()}),(r=(e,t)=>this.isCameraTargetSame(e,t),void 0===a&&(a=I.y),r=null!=r?r:D,(0,A.e)(function(e,t){var n,i=!0;e.subscribe((0,w.x)(t,function(e){var o=a(e);(i||!r(n,o))&&(i=!1,n=o,t.next(e))}))})),(0,E.h)(e=>void 0!==e)),this.cameraTargetSubscription=void 0,this.channels={},this._invTransform=(0,u.yb)(),this.infoMap=new Map,this.data.entries.forEach(e=>this.infoMap.set(e.dataId,e)),this.updateQueue=new M}}e.Behavior=k}(P||(P={}))},8777:function(e,t,r){r.d(t,{k6:function(){return A},aU:function(){return E},rJ:function(){return I}});var a,n,i,o=r(72762);class s extends o.G.Create({name:"Volume Streaming",typeClass:"Object"}){}(n=(a=i||(i={})).ValueType||(a.ValueType={})).Float32="float32",n.Int8="int8";var l=r(14086),u=r(54854),c=r(89260),d=r(1573),p=r(67801),f=r(99074),m=r(83733),h=r(10515),g=r(5253),b=r(60843),y=r(48930),x=r(87144),S=r(19892),T=r(30502),C=r(1814);function O(e,t,r,a){e.push({source:"em"===t?{name:"em",params:{isoValue:d.f.IsoValue.absolute(a||0)}}:{name:"x-ray",params:{}},dataId:r})}let I=p.lQ.build({display:{name:"Volume Streaming"},from:o.G.Molecule.Structure,params(e,t){let r=(0,f.Ix)(e&&e.data),a=(0,f.s3)(r,e&&e.data);return{method:l.e.Select(r,[["em","EM"],["x-ray","X-Ray"]]),entries:l.e.ObjectList({id:l.e.Text(a[0]||"")},({id:e})=>e,{defaultValue:a.map(e=>({id:e}))}),defaultView:l.e.Select("em"===r?"auto":"selection-box",m.a.ViewTypeOptions),options:l.e.Group({serverUrl:l.e.Text(t.config.get(S.OW.VolumeStreaming.DefaultServer)||"https://ds.litemol.org"),behaviorRef:l.e.Text("",{isHidden:!0}),emContourProvider:l.e.Select("emdb",[["emdb","EMDB"],["pdbe","PDBe"]],{isHidden:!0}),channelParams:l.e.Value({},{isHidden:!0})})}},isApplicable:(e,t,r)=>{let a=r.config.get(S.OW.VolumeStreaming.CanStream);return a?a(e.data,r):1===e.data.models.length&&T.Model.probablyHasDensityMap(e.data.models[0])}})(({ref:e,state:t,params:r},a)=>u.iQ.create("Volume Streaming",async n=>{let i=[];for(let e=0,t=r.entries.length;e<t;++e){let t;let o=r.entries[e].id.toLowerCase();if("em"===r.method){if(!o.toUpperCase().startsWith("EMD")){await n.update("Getting EMDB info...");let e=await (0,f.GJ)(a,n,o);for(let t=0,o=e.length;t<o;++t){let o;let s=e[t];try{o=await (0,f.TM)(r.options.emContourProvider,a,n,s)}catch(e){console.info(`Could not get map info for ${s}: ${e}`);continue}O(i,r.method,s,o||0)}continue}try{t=await (0,f.TM)(r.options.emContourProvider,a,n,o)}catch(e){console.info(`Could not get map info for ${o}: ${e}`);continue}}O(i,r.method,o,t||0)}let o=t.build().to(e).applyOrUpdateTagged(m.a.RootTag,D,{serverUrl:r.options.serverUrl,entries:i});await o.commit();let s=o.selector;if(!s.isOk)return;let u=t.tree.children.get(s.ref);(null==u?void 0:u.size)>0&&await a.managers.structure.hierarchy.remove(null==u?void 0:u.toArray());
7319let c=s.cell.obj,d=t.build().to(o.ref).apply(E,l.e.getDefaultValues(m.a.createParams({data:c.data,defaultView:r.defaultView,channelParams:r.options.channelParams})),{ref:r.options.behaviorRef?r.options.behaviorRef:void 0});"em"===r.method?d.apply(M,{channel:"em"},{state:{isGhost:!0},tags:"em"}):(d.apply(M,{channel:"2fo-fc"},{state:{isGhost:!0},tags:"2fo-fc"}),d.apply(M,{channel:"fo-fc(+ve)"},{state:{isGhost:!0},tags:"fo-fc(+ve)"}),d.apply(M,{channel:"fo-fc(-ve)"},{state:{isGhost:!0},tags:"fo-fc(-ve)"})),await t.updateTree(d).runInContext(n)})),A=p.lQ.build({display:{name:"Boxify Volume Streaming",description:"Make the current box permanent."},from:m.a,isApplicable:e=>"selection-box"===e.data.params.entry.params.view.name})(({a:e,ref:t,state:r},a)=>{let n=e.data.params;if("selection-box"!==n.entry.params.view.name)return;let i=y.XZ.create(x.AO.clone(n.entry.params.view.params.bottomLeft),x.AO.clone(n.entry.params.view.params.topRight)),o=n.entry.params.view.params.radius;y.XZ.expand(i,i,x.AO.create(o,o,o));let s={...n,entry:{name:n.entry.name,params:{...n.entry.params,view:{name:"box",params:{bottomLeft:i.min,top
7319Right:i.max}}}}};return r.updateTree(r.build().to(t).update(s))}),w={dataId:l.e.Text(""),source:l.e.MappedStatic("x-ray",{em:l.e.Group({isoValue:d.f.createIsoValueParam(d.f.IsoValue.relative(1))}),"x-ray":l.e.Group({})})},D=o.E.BuiltIn({name:"create-volume-streaming-info",display:{name:"Volume Streaming Info"},from:o.G.Molecule.Structure,to:s,params:e=>({serverUrl:l.e.Text("https://ds.litemol.org"),entries:l.e.ObjectList(w,({dataId:e})=>e,{defaultValue:[{dataId:"",source:{name:"x-ray",params:{}}}]})})})({apply:({a:e,params:t},r)=>u.iQ.create("",async a=>{let n=[];for(let e=0,i=t.entries.length;e<i;++e){let i=t.entries[e],o=i.dataId,s="em"===i.source.name?i.source.params.isoValue:d.f.IsoValue.relative(1);await a.update("Getting server header...");let l=await r.fetch({url:(0,c.T)(t.serverUrl,`${i.source.name}/${o.toLocaleLowerCase()}`),type:"json"}).runInContext(a);n.push({dataId:o,kind:i.source.name,header:l,emDefaultContourLevel:s})}return new s({serverUrl:t.serverUrl,entries:n,structure:e.data},{label:"Volume Server",description:`${n.map(e=>e.dataId).join(", ")}`})})}),E=o.E.BuiltIn({name:"create-volume-streaming-behavior",display:{name:"Volume Streaming Behavior"},from:s,to:m.a,params:e=>m.a.createParams({data:e&&e.data})})({canAutoUpdate:({oldParams:e,newParams:t})=>e.entry.params.view===t.entry.params.view||"selection-box"===t.entry.params.view.name||"camera-target"===t.entry.params.view.name||"off"===t.entry.params.view.name,apply:({a:e,params:t},r)=>u.iQ.create("Volume streaming",async a=>{let n=new m.a.Behavior(r,e.data);return await n.update(t),new m.a(n,{label:"Volume Streaming",description:n.getDescription()})}),update:({a:e,b:t,oldParams:r,newParams:a})=>u.iQ.create("Update Volume Streaming",async e=>{if(r.entry.name!==a.entry.name&&"em"in a.entry.params.channels){let{emDefaultContourLevel:e}=t.data.infoMap.get(a.entry.name);e&&(a.entry.params.channels.em.isoValue=e)}let n=await t.data.update(a)?p.td.UpdateResult.Updated:p.td.UpdateResult.Unchanged;return t.description=t.data.getDescription(),n})}),M=o.E.BuiltIn({name:"create-volume-streaming-visual",display:{name:"Volume Streaming Visual"},from:m.a,to:o.G.Volume.Representation3D,params:{channel:l.e.Select("em",m.a.ChannelTypeOptions,{isHidden:!0})}})({apply:({a:e,params:t,spine:r},a)=>u.iQ.create("Volume Representation",async n=>{var i,s;let l=e.data.channels[t.channel];if(!l)return p.lZ.Null;let u=P(e.data,t.channel),c=g.a.BuiltIn.isosurface,d=u.type.params||{},f=c.factory({webgl:null===(i=a.canvas3d)||void 0===i?void 0:i.webgl,...a.representation.volume.themes},c.getParams);f.setTheme(b.Q.create(a.representation.volume.themes,{volume:l.data},u));let m=null===(s=r.getAncestorOfType(o.G.Molecule.Structure))||void 0===s?void 0:s.data,h=(null==m?void 0:m.models.length)===0?void 0:C.N.get(null==m?void 0:m.models[0]);return await f.createOrUpdate(d,l.data).runInContext(n),h&&f.setState({transform:h}),new o.G.Volume.Representation3D({repr:f,sourceData:l.data},{label:`${Math.round(100*l.isoValue.relativeValue)/100} σ [${t.channel}]`})}),update:({a:e,b:t,newParams:r,spine:a},n)=>u.iQ.create("Volume Representation",async a=>{let i=e.data.channels[r.channel];if(!i)return p.td.UpdateResult.Unchanged;let o=t.data.repr.state.visible,s=P(e.data,r.channel),l={...t.data.repr.props,...s.type.params};return t.data.repr.setTheme(b.Q.create(n.representation.volume.themes,{volume:i.data},s)),await t.data.repr.createOrUpdate(l,i.data).runInContext(a),t.data.repr.setState({visible:o}),t.data.sourceData=i.data,p.td.UpdateResult.Updated})});function P(e,t){let r=e.channels[t];return h.VolumeRepresentation3DHelpers.getDefaultParamsStatic(e.plugin,"isosurface",{isoValue:r.isoValue,alpha:r.opacity,visuals:r.wireframe?["wireframe"]:["solid"]},"uniform",{value:r.color})}},99074:function(e,t,r){r.d(t,{GJ:function(){return p},Ix:function(){return o},TM:function(){return l},s3:function(){return s},tQ:function(){return u}});var a=r(30502),n=r(12618),i=r(19892);function o(e,t="x-ray"){if(!e)return t;let r=e.models[0];return n.rg.is(r.sourceData)?a.Model.hasEmMap(r)?"em":a.Model.hasXrayMap(r)?"x-ray":a.Model.isFromEm(r)?"em":a.Model.isFromXray(r)?"x-ray":t:t}function s(e,t){if(!t||!t.models.length)return[];let r=t.models[0];switch(e){case"em":return function(e){let t=[];if(!n.rg.is(e.sourceData))return[e.entryId];let{db_id:r,db_name:a,content_type:i}=e.sourceData.data.db.pdbx_database_related;if(!a.isDefined)return[e.entryId];for(let e=0,n=a.rowCount;e<n;++e)"EMDB"===a.value(e).toUpperCase()&&"associated EM volume"===i.value(e)&&t.push(r.value(e));return t}(r);case"x-ray":return[r.entryId]}}async function l(e,t,r,a){switch(e){case"emdb":return u(t,r,a);case"pdbe":return c(t,r,a)}}async function u(e,t,r){let a=e.config.get(i.OW.VolumeStreaming.EmdbHeaderServer),n=(await e.fetch({url:`${a}/${r.toUpperCase()}/header/${r.toLowerCase()}.xml`,type:"xml"}).runInContext(t)).getElementsByTagName("map")[0].getElementsByTagName("contour"),o=n[0];for(let e=1;e<n.length;e++)if("true"===n[e].getAttribute("primary")){o=n[e];break}return parseFloat(o.getElementsByTagName("level")[0].textContent)}async function c(e,t,r){var a,n,i,o;r=r.toUpperCase();let s=await e.fetch({url:`https://www.ebi.ac.uk/emdb/api/entry/map/${r}`,type:"json"}).runInContext(t),l=null===(n=null===(a=null==s?void 0:s.map)||void 0===a?void 0:a.contour_list)||void 0===n?void 0:n.contour;return l&&0!==l.length?null!==(o=null===(i=l.find(e=>e.primary))||void 0===i?void 0:i.level)&&void 0!==o?o:l[0].level:d(e,t,r)}async function d(e,t,r){var a,n,i;let o;r=r.toUpperCase();let s=await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/emdb/entry/map/${r}`,type:"json"}).runInContext(t),l=null==s?void 0:s[r];return(null===(i=null===(n=null===(a=null==l?void 0:l[0])||void 0===a?void 0:a.map)||void 0===n?void 0:n.contour_level)||void 0===i?void 0:i.value)!==void 0&&(o=+l[0].map.contour_level.value),o}async function p(e,t,r){var a;let n=await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/pdb/entry/summary/${r}`,type:"json"}).runInContext(t),i=null==n?void 0:n[r],o=[];if(null===(a=null==i?void 0:i[0])||void 0===a?void 0:a.related_structures){let e=i[0].related_structures.filter(e=>
7319"EMDB"===e.resource&&"associated EM volume"===e.relationship);if(!e.length)throw Error(`No related EMDB entry found for '${r}'.`);o.push(...e.map(e=>e.accession))}else throw Error(`No related EMDB entry found for '${r}'.`);return o}},37156:function(e,t,r){r.r(t),r.d(t,{ApplyAction:function(){return h},ClearHighlights:function(){return C},Highlight:function(){return T},RemoveObject:function(){return g},SetCurrentObject:function(){return f},Snapshots:function(){return O},SyncBehaviors:function(){return p},ToggleExpanded:function(){return b},ToggleVisibility:function(){return y},Update:function(){return m},registerDefault:function(){return d},setSubtreeVisibility:function(){return x}});var a=r(30502),n=r(70899),i=r(72762),o=r(67801),s=r(42071),l=r(89260),u=r(16668),c=r(19892);function d(e){p(e),f(e),m(e),h(e),g(e),b(e),y(e),T(e),C(e),O(e)}function p(e){e.state.events.object.created.subscribe(e=>{i.G.isBehavior(e.obj)&&e.obj.data.register(e.ref)}),e.state.events.object.removed.subscribe(e=>{var t,r,a,n;i.G.isBehavior(e.obj)&&(null===(r=(t=e.obj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.obj.data).dispose)||void 0===n||n.call(a))}),e.state.events.object.updated.subscribe(e=>{var t,r,a,n;"recreate"===e.action&&(e.oldObj&&i.G.isBehavior(e.oldObj)&&(null===(r=(t=e.oldObj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.oldObj.data).dispose)||void 0===n||n.call(a)),e.obj&&i.G.isBehavior(e.obj)&&e.obj.data.register(e.ref))})}function f(e){u.I.State.SetCurrentObject.subscribe(e,({state:e,ref:t})=>e.setCurrent(t))}function m(e){u.I.State.Update.subscribe(e,({state:t,tree:r,options:a})=>e.runTask(t.updateTree(r,a)))}function h(e){u.I.State.ApplyAction.subscribe(e,({state:t,action:r,ref:a})=>e.runTask(t.applyAction(r.action,r.params,a)))}function g(e){function t(t,r){let a=t.build().delete(r);return e.runTask(t.updateTree(a))}u.I.State.RemoveObject.subscribe(e,({state:e,ref:r,removeParentGhosts:a})=>{if(!a)return t(e,r);{let a=e.tree,n=a.transforms.get(r);if(n.parent===r)return t(e,r);for(;;){let r=a.children.get(n.parent);if(n.parent===n.ref||r.size>1)return t(e,n.ref);let i=a.transforms.get(n.parent);if(!i.state.isGhost)return t(e,n.ref);n=i}}})}function b(e){u.I.State.ToggleExpanded.subscribe(e,({state:e,ref:t})=>e.updateCellState(t,({isCollapsed:e})=>({isCollapsed:!e})))}function y(e){u.I.State.ToggleVisibility.subscribe(e,({state:e,ref:t})=>x(e,t,!e.cells.get(t).state.isHidden))}function x(e,t,r){o.K1.doPreOrder(e.tree,e.transforms.get(t),{state:e,value:r},S)}function S(e,t,r){r.state.updateCellState(e.ref,{isHidden:r.value})}function T(e){u.I.Interactivity.Object.Highlight.subscribe(e,({state:t,ref:r})=>{if(e.canvas3d&&!e.isBusy)for(let n of(e.managers.interactivity.lociHighlights.clearHighlights(),"string"==typeof r?[r]:r)){let r=t.cells.get(n);if(r){if(i.G.Molecule.Structure.is(r.obj))e.managers.interactivity.lociHighlights.highlight({loci:a.Structure.Loci(r.obj.data)},!1);else if(r&&i.G.isRepresentation3D(r.obj)){let{repr:t}=r.obj.data;for(let r of t.getAllLoci())e.managers.interactivity.lociHighlights.highlight({loci:r,repr:t},!1)}else if(i.G.Molecule.Structure.Selections.is(r.obj))for(let t of r.obj.data)e.managers.interactivity.lociHighlights.highlight({loci:t.loci},!1)}}})}function C(e){u.I.Interactivity.ClearHighlights.subscribe(e,()=>{e.managers.interactivity.lociHighlights.clearHighlights()})}function O(e){e.config.set(c.OW.State.CurrentServer,e.config.get(c.OW.State.DefaultServer)),u.I.State.Snapshots.Clear.subscribe(e,()=>{e.managers.snapshot.clear()}),u.I.State.Snapshots.Remove.subscribe(e,({id:t})=>{e.managers.snapshot.remove(t)}),u.I.State.Snapshots.Add.subscribe(e,async({key:t,name:r,description:a,descriptionFormat:i,params:o})=>{var s;let l=e.state.getSnapshot(o),u=(null!==(s=null==o?void 0:o.image)&&void 0!==s?s:e.state.snapshotParams.value.image)?await n.z.getCanvasImageAsset(e,`${l.id}-image.png`):void 0,c=n.z.Entry(l,{key:t,name:r,description:a,descriptionFormat:i,image:u});e.managers.snapshot.add(c)}),u.I.State.Snapshots.Replace.subscribe(e,async({id:t,params:r})=>{var a;let i=e.state.getSnapshot(r),o=(null!==(a=null==r?void 0:r.image)&&void 0!==a?a:e.state.snapshotParams.value.image)?await n.z.getCanvasImageAsset(e,`${i.id}-image.png`):void 0;e.managers.snapshot.replace(t,e.state.getSnapshot(r),{image:o})}),u.I.State.Snapshots.Move.subscribe(e,({id:t,dir:r})=>{e.managers.snapshot.move(t,r)}),u.I.State.Snapshots.Apply.subscribe(e,({id:t})=>{let r=e.managers.snapshot.setCurrent(t);if(r)return e.state.setSnapshot(r)}),u.I.State.Snapshots.Upload.subscribe(e,async({name:t,description:r,playOnLoad:a,serverUrl:n,params:i})=>fetch((0,l.T)(n,`set?name=${encodeURIComponent(t||"")}&description=${encodeURIComponent(r||"")}`),{method:"POST",mode:"cors",referrer:"no-referrer",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(await e.managers.snapshot.getStateSnapshot({name:t,description:r,playOnLoad:a}))})),u.I.State.Snapshots.Fetch.subscribe(e,async({url:t})=>{let r=await e.runTask(e.fetch({url:t,type:"json"}));await e.managers.snapshot.setStateSnapshot(r.data)}),u.I.State.Snapshots.DownloadToFile.subscribe(e,async({name:t,type:r,params:a})=>{let n=`mol-star_state_${t||function(){let e=new Date,t=e.getFullYear(),r=e.getMonth()+1,a=e.getDate();return t+"-"+r+"-"+a+"-"+e.getHours()+"-"+e.getMinutes()+"-"+e.getSeconds()}()}.${"json"===r?"molj":"molx"}`,i=await e.managers.snapshot.serialize({type:r,params:a});(0,s.L)(i,`${n}`)}),u.I.State.Snapshots.OpenFile.subscribe(e,({file:t})=>e.managers.snapshot.open(t)),u.I.State.Snapshots.OpenUrl.subscribe(e,async({url:t,type:r})=>{let a=await e.runTask(e.fetch({url:t,type:"binary"}));return e.managers.snapshot.open(new File([a],`state.${r}`))})}},7311:function(e,t,r){r.d(t,{F:function(){return i},G:function(){return n}});var a=r(85764);function n(){let e=(t,r)=>t.commands.dispatch(e,r||{});return e.subscribe=(t,r)=>t.commands.subscribe(e,r),e.id=a.hb.create22(),e}class i{constructor(){this.subs=new Map,this.disposing=!1}
7319subscribe(e,t){let r=this.subs.get(e.id);return r||(r=[],this.subs.set(e.id,r)),r.push(t),{unsubscribe:()=>{let r=this.subs.get(e.id);if(!r)return;let a=r.indexOf(t);if(!(a<0)){for(let e=a+1;e<r.length;e++)r[e-1]=r[e];r.pop()}}}}dispatch(e,t){return new Promise((r,a)=>{if(this.disposing){a("disposed");return}if(!this.subs.get(e.id)){r();return}this.resolve({cmd:e,params:t,resolve:r,reject:a})})}dispose(){this.subs.clear()}async resolve(e){let t=this.subs.get(e.cmd.id);if(!t){e.resolve();return}try{for(let r of t)await r(e.params);e.resolve()}catch(t){e.reject(t)}}}},16668:function(e,t,r){r.d(t,{I:function(){return n}});var a=r(7311);let n={State:{SetCurrentObject:(0,a.G)(),ApplyAction:(0,a.G)(),Update:(0,a.G)(),RemoveObject:(0,a.G)(),ToggleExpanded:(0,a.G)(),ToggleVisibility:(0,a.G)(),Snapshots:{Add:(0,a.G)(),Replace:(0,a.G)(),Move:(0,a.G)(),Remove:(0,a.G)(),Apply:(0,a.G)(),Clear:(0,a.G)(),Upload:(0,a.G)(),Fetch:(0,a.G)(),DownloadToFile:(0,a.G)(),OpenFile:(0,a.G)(),OpenUrl:(0,a.G)()}},Interactivity:{Object:{Highlight:(0,a.G)()},Structure:{Highlight:(0,a.G)(),Select:(0,a.G)()},ClearHighlights:(0,a.G)()},Layout:{Update:(0,a.G)()},Toast:{Show:(0,a.G)(),Hide:(0,a.G)()},Camera:{Reset:(0,a.G)(),SetSnapshot:(0,a.G)(),Focus:(0,a.G)(),FocusObject:(0,a.G)(),OrientAxes:(0,a.G)(),ResetAxes:(0,a.G)()},Canvas3D:{SetSettings:(0,a.G)(),ResetSettings:(0,a.G)()}}},19892:function(e,t,r){r.d(t,{OW:function(){return l},Y5:function(){return u}});var a=r(30502),n=r(34052);let i={get defaultTransparency(){return(0,n.$C)()?"blended":"wboit"},get preferWebGl1(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;if(["Version/15.1 Safari","Version/15.2 Safari","Version/15.3 Safari"].some(e=>navigator.userAgent.indexOf(e)>0))return!0;return(0,n.$C)()}};class o{toString(){return this.key}valueOf(){return this.key}constructor(e,t){this.key=e,this.defaultValue=t}}function s(e,t){return new o(e,t)}let l={item:s,General:{IsBusyTimeoutMs:s("plugin-config.is-busy-timeout",750),DisableAntialiasing:s("plugin-config.disable-antialiasing",!1),DisablePreserveDrawingBuffer:s("plugin-config.disable-preserve-drawing-buffer",!1),PixelScale:s("plugin-config.pixel-scale",1),PickScale:s("plugin-config.pick-scale",.25),Transparency:s("plugin-config.transparency",i.defaultTransparency),PreferWebGl1:s("plugin-config.prefer-webgl1",i.preferWebGl1),AllowMajorPerformanceCaveat:s("plugin-config.allow-major-performance-caveat",!1),PowerPreference:s("plugin-config.power-preference","high-performance"),ResolutionMode:s("plugin-config.resolution-mode","auto")},State:{DefaultServer:s("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),CurrentServer:s("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),HistoryCapacity:s("history-capacity.server",5)},VolumeStreaming:{Enabled:s("volume-streaming.enabled",!0),DefaultServer:s("volume-streaming.server","https://ds.litemol.org"),CanStream:s("volume-streaming.can-stream",(e,t)=>1===e.models.length&&a.Model.probablyHasDensityMap(e.models[0])),EmdbHeaderServer:s("volume-streaming.emdb-header-server","https://files.wwpdb.org/pub/emdb/structures")},Viewport:{ShowReset:s("viewer.show-reset-button",!0),ShowExpand:s("viewer.show-expand-button",!0),ShowToggleFullscreen:s("viewer.show-toggle-fullscreen-button",!0),ShowControls:s("viewer.show-controls-button",!0),ShowSettings:s("viewer.show-settings-button",!0),ShowSelectionMode:s("viewer.show-selection-model-button",!0),ShowAnimation:s("viewer.show-animation-button",!0),ShowTrajectoryControls:s("viewer.show-trajectory-controls",!0),ShowScreenshotControls:s("viewer.show-screenshot-controls",!0),ShowIllumination:s("viewer.show-illumination-button",!0),ShowXR:s("viewer.show-xr","always")},Download:{DefaultPdbProvider:s("download.default-pdb-provider","pdbe"),DefaultEmdbProvider:s("download.default-emdb-provider","pdbe")},Structure:{SizeThresholds:s("structure.size-thresholds",a.Structure.DefaultSizeThresholds),DefaultRepresentationPreset:s("structure.default-representation-preset","auto"),DefaultRepresentationPresetParams:s("structure.default-representation-preset-params",{}),SaccharideCompIdMapType:s("structure.saccharide-comp-id-map-type","default")}
7319,Background:{Styles:s("background.styles",[])}};class u{get(e){return this._config.has(e)?this._config.get(e):e.defaultValue}set(e,t){this._config.set(e,t)}delete(e){this._config.delete(e)}constructor(e){if(this._config=new Map,!e)return;e.forEach(([e,t])=>this._config.set(e,t))}}},24641:function(e,t,r){r.d(t,{B:function(){return y}});var a,n=r(53596),i=r(22569),o=r(2622),s=r(63536),l=r(72762),u=r(67801),c=r(85764),d=r(14086),p=r(40217),f=r(16668),m=r(19892),h=r(5932),g=r(54854),b=r(67738);class y extends s.k{get animation(){return this.plugin.managers.animation}getSnapshot(e){var t,r,a;let n={...this.snapshotParams.value,...e};return{id:c.hb.create22(),data:n.data?this.data.getSnapshot():void 0,behaviour:n.behavior?this.behaviors.getSnapshot():void 0,animation:n.animation?this.animation.getSnapshot():void 0,startAnimation:n.startAnimation?!!n.startAnimation:void 0,camera:n.camera?{current:this.plugin.canvas3d.camera.getSnapshot(),transitionStyle:n.cameraTransition.name,transitionDurationInMs:(null===(t=null==n?void 0:n.cameraTransition)||void 0===t?void 0:t.name)==="animate"?n.cameraTransition.params.durationInMs:void 0}:void 0,canvas3dContext:n.canvas3dContext?{props:null===(r=this.plugin.canvas3dContext)||void 0===r?void 0:r.props}:void 0,canvas3d:n.canvas3d?{props:null===(a=this.plugin.canvas3d)||void 0===a?void 0:a.props}:void 0,interactivity:n.interactivity?{props:this.plugin.managers.interactivity.props}:void 0,structureFocus:this.plugin.managers.structure.focus.getSnapshot(),structureSelection:n.structureSelection?this.plugin.managers.structure.selection.getSnapshot():void 0,structureComponentManager:n.componentManager?{options:this.plugin.managers.structure.component.state.options}:void 0,durationInMs:null==n?void 0:n.durationInMs}}async setSnapshot(e){var t,r,a,n,i,s,l,u,c,p;if(await this.animation.stop(),(null===(t=e.structureComponentManager)||void 0===t?void 0:t.options)&&this.plugin.managers.structure.component._setSnapshotState(null===(r=e.structureComponentManager)||void 0===r?void 0:r.options),e.behaviour&&await this.plugin.runTask(this.behaviors.setSnapshot(e.behaviour)),e.data&&await this.plugin.runTask(this.data.setSnapshot(e.data)),null===(a=e.canvas3d)||void 0===a?void 0:a.props){let t=d.e.normalizeParams(o.h4,e.canvas3d.props,"children");((null===(n=e.camera)||void 0===n?void 0:n.current)||(null===(i=e.camera)||void 0===i?void 0:i.focus))&&(t.camera=void 0,t.cameraClipping=void 0,t.cameraFog=void 0),await f.I.Canvas3D.SetSettings(this.plugin,{settings:t})}if(null===(s=e.canvas3dContext)||void 0===s?void 0:s.props){let t=d.e.normalizeParams(o.QX.Params,e.canvas3dContext.props,"children");null===(l=this.plugin.canvas3dContext)||void 0===l||l.setProps(t)}if(e.interactivity&&e.interactivity.props&&this.plugin.managers.interactivity.setProps(e.interactivity.props),e.structureFocus&&this.plugin.managers.structure.focus.setSnapshot(e.structureFocus),e.structureSelection&&this.plugin.managers.structure.selection.setSnapshot(e.structureSelection),e.animation&&this.animation.setSnapshot(e.animation),(null===(u=e.camera)||void 0===u?void 0:u.current)?f.I.Camera.Reset(this.plugin,{snapshot:e.camera.current,durationMs:"animate"===e.camera.transitionStyle?e.camera.transitionDurationInMs:void 0}):(null===(c=e.camera)||void 0===c?void 0:c.focus)&&f.I.Camera.FocusObject(this.plugin,{...e.camera.focus,durationMs:"animate"===e.camera.transitionStyle?e.camera.transitionDurationInMs:void 0}
7319),"object"==typeof(null==e?void 0:e.onLoadMarkdownCommands)&&Object.keys(e.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",e.onLoadMarkdownCommands),e.startAnimation){this.animation.start();return}(null===(p=e.transition)||void 0===p?void 0:p.autoplay)&&(await g.b2.immediatePromise(),this.animation.play(h.Z,{}))}async setAnimationSnapshot(e,t){var r,a,n,i;await this.animation.stopStateTransitionAnimation();let{transition:s}=e;if(!s)return;let l=Math.min(t,s.frames.length-1),u=null!==(r=s.frames[l])&&void 0!==r?r:e.data;if(u.data&&await this.plugin.runTask(this.data.setSnapshot(u.data)),null===(a=u.canvas3d)||void 0===a?void 0:a.props){let e=d.e.normalizeParams(o.h4,u.canvas3d.props,"children");null===(n=this.plugin.canvas3d)||void 0===n||n.setProps(e)}(null===(i=u.camera)||void 0===i?void 0:i.current)&&f.I.Camera.Reset(this.plugin,{snapshot:u.camera.current,durationMs:"animate"===u.camera.transitionStyle?u.camera.transitionDurationInMs:void 0}),!t&&"object"==typeof(null==e?void 0:e.onLoadMark
7319downCommands)&&Object.keys(e.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",e.onLoadMarkdownCommands)}updateTransform(e,t,r,a){let n=e.build().to(t).update(r);return f.I.State.Update(this.plugin,{state:e,tree:n,options:{canUndo:a}})}hasBehavior(e){return this.behaviors.tree.transforms.has(e.id)}updateBehavior(e,t){let r=this.behaviors.build();if(this.behaviors.tree.transforms.has(e.id))r.to(e.id).update(t);else{let a=e.createDefaultParams(void 0,this.plugin);r.to(p.qZ.getCategoryId(e)).apply(e,(0,n.U)(a,t),{ref:e.id})}return this.plugin.runTask(this.behaviors.updateTree(r))}dispose(){this.behaviors.cells.forEach(e=>{var t,r,a,n;p.qZ.Behavior.is(e.obj)&&(null===(r=(t=e.obj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.obj.data).dispose)||void 0===n||n.call(a))}),super.dispose(),this.data.dispose(),this.behaviors.dispose(),this.animation.dispose()}constructor(e){super(),this.plugin=e,this.data=u.ZM.create(new l.G.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,historyCapacity:this.plugin.config.get(m.OW.State.HistoryCapacity)}),this.behaviors=u.ZM.create(new p.qZ.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,rootState:{isLocked:!0}}),this.events={cell:{stateUpdated:(0,i.T)(this.data.events.cell.stateUpdated,this.behaviors.events.cell.stateUpdated),created:(0,i.T)(this.data.events.cell.created,this.behaviors.events.cell.created),removed:(0,i.T)(this.data.events.cell.removed,this.behaviors.events.cell.removed)},object:{created:(0,i.T)(this.data.events.object.created,this.behaviors.events.object.created),removed:(0,i.T)(this.data.events.object.removed,this.behaviors.events.object.removed),updated:(0,i.T)(this.data.events.object.updated,this.behaviors.events.object.updated)}},this.snapshotParams=this.ev.behavior(y.DefaultSnapshotParams),this.setSnapshotParams=e=>{this.snapshotParams.next({...y.DefaultSnapshotParams,...e})}}}(a=y||(y={})).SnapshotParams={durationInMs:d.e.Numeric(1500,{min:100,max:15e3,step:100},{label:"Duration in ms"}),data:d.e.Boolean(!0),behavior:d.e.Boolean(!1),structureSelection:d.e.Boolean(!1),componentManager:d.e.Boolean(!0),animation:d.e.Boolean(!0),startAnimation:d.e.Boolean(!1),canvas3d:d.e.Boolean(!0),canvas3dContext:d.e.Boolean(!0),interactivity:d.e.Boolean(!0),camera:d.e.Boolean(!0),cameraTransition:d.e.MappedStatic("animate",{animate:d.e.Group({durationInMs:d.e.Numeric(250,{min:100,max:5e3,step:500},{label:"Duration in ms"})}),instant:d.e.Group({})},{options:[["animate","Animate"],["instant","Instant"]]}),image:d.e.Boolean(!1)},a.DefaultSnapshotParams=d.e.getDefaultValues(a.SnapshotParams),a.getMinFrameDuration=(0,b.j)(e=>{if(!e)return 1e3/60;let{transition:t}=e;if(!t)return 1e3/60;let r=1/0;for(let e of t.frames)e.durationInMs>0&&e.durationInMs<r&&(r=e.durationInMs);return Number.isFinite(r)?r:1e3/60}),a.getStateTransitionDuration=(0,b.j)(e=>{if(!e)return;let{transition:t}=e;if(!t)return;let r=0;for(let e=0;e<t.frames.length;e++)r+=t.frames[e].durationInMs;return r}),a.getStateTransitionFrameTime=(0,b.j)((e,t)=>{if(!e||void 0===t)return 0;let{transition:r}=e;if(!r)return 0;let a=0;for(let e=0;e<t&&!(r.frames.length<=e);e++)a+=r.frames[e].durationInMs;return a}),a.getStateTransitionFrameIndex=function(e,t){var r;let{transition:n}=e;if(!(null==n?void 0:n.frames.length))return;let i=t;n.loop&&(i%=null!==(r=a.getStateTransitionDuration(e))&&void 0!==r?r:1);let o=0;if(i<=n.frames[0].durationInMs)return 0;for(let e=0;e<n.frames.length;e++){if(o>=i)return e;o+=n.frames[e].durationInMs}return n.frames.length-1}},23465:function(e,t,r){r.d(t,{L:function(){return a},R:function(){return n}});var a="5.7.0",n=new Date(1772314988507)},7791:function(e,t,r){let a;r.d(t,{Qx:function(){return A},hX:function(){return i}});var n,i,o=r(14086),s=r(60843),l=r(89987),u=r(54854),c=r(99289),d=r(67589),p=r(30481),f=r(65109),m=r(87144),h=r(11650),g=r(54185),b=r(30131),y=r(1813),x=r(63964),S=r(69062),T=r(5909),C=r(37792);(n||(n={})).getDefaultParams=function(e,t,r){return o.e.getDefaultValues(e.getParams(t,r))};let O={name:"",label:"",description:"",factory:()=>i.Empty,getParams:()=>({}),defaultValues:{},defaultColorTheme:{name:""},defaultSizeTheme:{name:""},isApplicable:()=>!0};function I(e){return e.map(e=>[e.name,e.provider.label])}class A{get default(){return this._list[0]}get types(){return I(this._list)}constructor(){this._list=[],this._map=new Map,this._name=new Map}add(e){if(this._map.has(e.name))throw Error(`${e.name} already registered.`);this._list.push({name:e.name,provider:e}),this._map.set(e.name,e),this._name.set(e,e.name)}getName(e){if(!this._name.has(e))throw Error(`'${e.label}' is not a registered represenatation provider.`);return this._name.get(e)}remove(e){let t=e.name;this._list.splice(this._list.findIndex(e=>e.name===t),1);let r=this._map.get(t);r&&(this._map.delete(t),this._name.delete(r))}get(e){return this._map.get(e)||O}get list(){return this._list}getApplicableList(e){return this._list.filter(t=>t.provider.isApplicable(e))}getApplicableTypes(e){return I(this.getApplicableList(e))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}}!function(e){var t;function r(){return{visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,syncManually:!1,transform:m.yb.i
7319dentity(),overpaint:p.k.Empty,transparency:f.i.Empty,emissive:C.i.Empty,substance:T.A.Empty,clipping:y.z.Empty,themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1},markerActions:c.E5.All}}function a(e,t){void 0!==t.visible&&(e.visible=t.visible),void 0!==t.alphaFactor&&(e.alphaFactor=t.alphaFactor),void 0!==t.pickable&&(e.pickable=t.pickable),void 0!==t.colorOnly&&(e.colorOnly=t.colorOnly),void 0!==t.overpaint&&(e.overpaint=t.overpaint),void 0!==t.transparency&&(e.transparency=t.transparency),void 0!==t.emissive&&(e.emissive=t.emissive),void 0!==t.substance&&(e.substance=t.substance),void 0!==t.clipping&&(e.clipping=t.clipping),void 0!==t.themeStrength&&(e.themeStrength=t.themeStrength),void 0!==t.syncManually&&(e.syncManually=t.syncManually),void 0!==t.transform&&m.yb.copy(e.transform,t.transform),void 0!==t.markerActions&&(e.markerActions=t.markerActions)}(t=e.Loci||(e.Loci={})).areEqual=function(e,t){return e.repr===t.repr&&d.o_.areEqual(e.loci,t.loci)},t.isEmpty=function(e){return d.o_.isEmpty(e.loci)},t.Empty={loci:d.Rh},e.createState=r,e.updateState=a,e.StateBuilder={create:r,update:a},e.createEmpty=function(){return{label:"",groupCount:0,renderObjects:[],geometryVersion:-1,props:{},params:{},updated:new l.x,state:r(),theme:s.Q.createEmpty(),createOrUpdate:()=>u.iQ.constant("",void 0),setState:()=>{},setTheme:()=>{},getLoci:()=>d.Rh,getAllLoci:()=>[],eachLocation:()=>{},mark:()=>!1,destroy:()=>{}}};class n{constructor(){this.curr=new Set,this.next=new Set,this._version=-1}get version(){return this._version}add(e,t){this.next.add((0,S.FY)(e,t))}snapshot(){x.F.areEqual(this.curr,this.next)||(this._version+=1),[this.curr,this.next]=[this.next,this.curr],this.next.clear()}}e.GeometryState=n,e.createMulti=function(e,t,r,a,i){let c,p,f,m=0,g=new l.x,b=new n,y=a.create(),x=s.Q.createEmpty(),S={},T=Object.keys(i).map((e,a)=>{S[a]=e;let n=i[e](t,r);return n.setState(y),n});return{label:e,updated:g,get groupCount(){let e=0;if(p){let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&(e+=T[r].groupCount)}return e},get renderObjects(){let e=[];
7319if(p){let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&e.push(...T[r].renderObjects)}return e},get geometryVersion(){return b.version},get props(){return p},get params(){return c},createOrUpdate:(a={},n)=>{n&&n!==f&&(c=r(t,n),f=n,p||(p=o.e.getDefaultValues(c)));let i=(0,h.bw)(Object.assign({},p,a),f);Object.assign(p,a,i);let{visuals:s}=p;return u.iQ.create(`Creating or updating '${e}' representation`,async e=>{for(let t=0,r=T.length;t<r;++t)(!s||s.includes(S[t]))&&await T[t].createOrUpdate(p,f).runInContext(e),b.add(t,T[t].geometryVersion);b.snapshot(),g.next(m++)})},get state(){return y},get theme(){return x},getLoci:e=>{let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)if(!t||t.includes(S[r])){let t=T[r].getLoci(e);if(!(0,d.jF)(t))return t}return d.Rh},getAllLoci:()=>{let e=[],{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&e.push(...T[r].getAllLoci());return e},eachLocation:e=>{let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&T[r].eachLocation(e)},mark:(e,t)=>{let r=!1;for(let a=0,n=T.length;a<n;++a)r=T[a].mark(e,t)||r;return r},setState:e=>{a.update(y,e);for(let t=0,r=T.length;t<r;++t)T[t].setState(e)},setTheme:e=>{x=e;for(let t=0,r=T.length;t<r;++t)T[t].setTheme(e)},destroy(){for(let e=0,t=T.length;e<t;++e)T[e].destroy()}}},e.fromRenderObject=function(t,r){let a=0,i=new l.x,c=new n,p=e.createState(),f=s.Q.createEmpty(),m=o.e.clone(g.ev.Params),y=o.e.getDefaultValues(g.ev.Params);return{label:t,updated:i,get groupCount(){return r.values.uGroupCount.ref.value},get renderObjects(){return[r]},get geometryVersion(){return c.version},get props(){return y},get params(){return m},createOrUpdate:(e={})=>{let n=(0,h.bw)(Object.assign({},y,e));return Object.assign(y,e,n),u.iQ.create(`Updating '${t}' representation`,async e=>{c.add(0,r.id),c.snapshot(),i.next(a++)})},get state(){return p},get theme(){return f},getLoci:()=>d.Rh,getAllLoci:()=>[],eachLocation:()=>{},mark:(e,t)=>!1,setState:t=>{void 0!==t.visible&&b.u.setVisibility(r,t.visible),void 0!==t.alphaFactor&&b.u.setAlphaFactor(r,t.alphaFactor),void 0!==t.pickable&&b.u.setPickable(r,t.pickable),void 0!==t.colorOnly&&b.u.setColorOnly(r,t.colorOnly),t.overpaint,t.transparency,t.emissive,t.substance,t.clipping,void 0!==t.themeStrength&&b.u.setThemeStrength(r,t.themeStrength),void 0!==t.transform&&b.u.setTransform(r,t.transform),e.updateState(p,t)},setTheme:()=>{},destroy(){}}}}(i||(i={})),Object.defineProperty(i,"Empty",{get:()=>null!=a?a:a=i.createEmpty()})},59071:function(e,t,r){r.d(t,{i:function(){return s},z:function(){return o}});var a=r(14086),n=r(7922),i=r(21071);let o={customText:a.e.Text("",{label:"Text",description:"Override the label with custom value.",isEssential:!0}),textColor:a.e.Color(n.t.black,{isEssential:!0}),textSize:a.e.Numeric(.5,{min:.1,max:10,step:.1},{isEssential:!0})},s={...i.x.Params,...o,borderWidth:a.e.Numeric(.2,{min:0,max:.5,step:.01})}},23579:function(e,t,r){r.d(t,{s:function(){return y}});var a=r(14086),n=r(84894),i=r(7791),o=r(30502),s=r(89987),l=r(67241),u=r(60843),c=r(54854),d=r(67589),p=r(99289),f=r(30481),m=r(1813),h=r(65109),g=r(5909),b=r(37792);function y(e,t,r,y){let x,S,T,C,O=0,{webgl:I}=t,A=new s.x,w=new i.hX.GeometryState,D=(0,l.xH)(),E=[],M=n.U_.create(),P=u.Q.createEmpty();function k(e){if(n.U_.update(M,e),void 0!==e.visible&&x&&x.setVisibility(e.visible&&(null===M.unitTransforms||M.unitTransforms.isIdentity)),void 0!==e.alphaFactor&&x&&x.setAlphaFactor(e.alphaFactor),void 0!==e.pickable&&x&&x.setPickable(e.pickable),void 0!==e.overpaint&&x){let t=f.k.remap(e.overpaint,S);x.setOverpaint(t,I)}if(void 0!==e.transparency&&x){let t=h.i.remap(e.transparency,S);x.setTransparency(t,I)}if(void 0!==e.emissive&&x){let t=b.i.remap(e.emissive,S);x.setEmissive(t,I)}if(void 0!==e.substance&&x){let t=g.A.remap(e.substance,S);x.setSubstance(t,I)}if(void 0!==e.clipping&&x){let t=m.z.remap(e.clipping,S);x.setClipping(t)}void 0!==e.themeStrength&&x&&x.setThemeStrength(e.themeStrength),void 0!==e.transform&&x&&x.setTransform(e.transform),void 0!==e.unitTransforms&&x&&x.setVisibility(M.visible&&(null===e.unitTransforms||e.unitTransforms.isIdentity))}return{label:e,get groupCount(){return x?x.groupCount:0},get props(){return C},get params(){return T},get state(){return M},get theme(){return P},get geometryVersion(){return w.version},renderObjects:E,updated:A,createOrUpdate:function(e={}
7319,n){return n&&n!==S&&(T=r(t,n),S=n,C||(C=a.e.getDefaultValues(T))),C=Object.assign({},C,e),c.iQ.create("Creating or updating ComplexRepresentation",async e=>{var t;let r=!1;x?(null===(t=x.mustRecreate)||void 0===t?void 0:t.call(x,S,C,I))&&(x.destroy(),x=y(D,S,C,I),r=!0):(x=y(D,S,C,I),r=!0);let a=x.createOrUpdate({webgl:I,runtime:e},P,C,n);a&&await a,r&&k(M),E.length=0,x&&x.renderObject&&(E.push(x.renderObject),w.add(x.renderObject.id,x.geometryVersion)),w.snapshot(),O+=1,A.next(O)})},setState:k,setTheme:function(e){P=e},getLoci:function(e){return x?x.getLoci(e):d.Rh},getAllLoci:function(){var e;return[o.Structure.Loci(null!==(e=S.child)&&void 0!==e?e:S)]},eachLocation:function(e){null==x||x.eachLocation(e)},mark:function(e,t){if(!S||!p.E5.is(M.markerActions,t))return!1;if(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)||o.Bond.isLoci(e)){if(!o.Structure.areRootsEquivalent(e.structure,S))return!1;e=d.o_.remap(e,S),(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)&&o.StructureElement.Loci.isWholeStructure(e))&&(e=d.GK)}else if(!(0,d.h)(e)&&!(0,d.dh)(e))return!1;return!d.o_.isEmpty(e)&&!!x&&x.mark(e,t)},destroy:function(){x&&x.destroy()}}}},43091:function(e,t,r){r.d(t,{$N:function(){return X},Kh:function(){return H},Ly:function(){return W},Sx:function(){return z},Y8:function(){return j},dz:function(){return V},f2:function(){return q},il:function(){return Q},kN:function(){return k},nZ:function(){return N},oI:function(){return U},p2:function(){return R},rH:function(){return K},sB:function(){return _},tc:function(){return G},uS:function(){return B},um:function(){return F},vD:function(){return L}});var a=r(30131),n=r(30502),i=r(11803),o=r(60843),s=r(41306),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85764),m=r(17411),h=r(69587),g=r(99289),b=r(4376),y=r(94900),x=r(96046),S=r(21071),T=r(7305),C=r(74219),O=r(85688),I=r(25945),A=r(39446),w=r(97667),D=r(39857),E=r(99696),M=r(98510);function P(e,t){let r,b,y,x,S,C,I,A;let{defaultProps:D,createGeometry:E,createLocationIterator:M,getLoci:P,eachLocation:k,setUpdateState:B,mustRecreate:_,processValues:R,dispose:F}=e,{updateValues:L,updateBoundingSphere:z,updateRenderableState:N,createPositionIterator:G}=e.geometryUtils,U=d.wV.create(),V={loci:u.Rh,action:g.dd.None,status:-1},j=Object.assign({},D),H=o.Q.createEmpty(),q=-1;function X(e){if(U.createNew){if(I=M(x,b),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=u(t,(0,s.tx)(),r,a,n),p=c(n);return(0,l.Hq)(t.kind,d,p,o)}(0,e,I,y,b,t),A=G(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((U.updateColor||U.updateSize||U.updateTransform)&&(I=M(x,b)),U.updateTransform){let{instanceCount:e,groupCount:t}=I;b.instanceGranularity?(0,O.eL)(e,"instance",r.values):(0,O.eL)(e*t,"groupInstance",r.values)}if(U.createGeometry){if(e)f.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),f.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),f.IO.updateIfChanged(r.values.uGroupCount,I.groupCount);else throw Error("expected geometry to be given")}(U.updateTransform||U.createGeometry)&&(z(r.values,e||C),A=G(C,r.values)),U.updateSize&&"uSize"in r.values&&(0,m.H4)(I,A,y.size,r.values),U.updateColor&&(0,h.is)(I,A,y.color,r.values),L(r.values,b),N(r.state,b)}j=b,H=y,S=x,e&&(C=e,q+=1)}function W(e,t,r){var a;if((0,u.h)(e)||n.Structure.isLoci(e)&&n.Structure.areRootsEquivalent(e.structure,S)||n.StructureElement.Loci.is(e)&&n.Structure.areRootsEquivalent(e.structure,S)&&n.StructureElement.Loci.isWholeStructure(e)?0:1){if(!j.instanceGranularity)return k(e,S,t,r);{let r;return a=S,r=!1,!!((n.StructureElement.Loci.is(e)||n.Bond.isLoci(e))&&n.Structure.areEquivalent(e.structure,a))&&(t(c.Xp.ofSingleton(0))&&(r=!0),r)}}return t(j.instanceGranularity?c.Xp.ofBounds(0,I.instanceCount):c.Xp.ofBounds(0,I.groupCount*I.instanceCount))}function K(e){r&&(null==R||R(r.values,C,j,H,e.webgl))}return{get groupCount(){return I?I.count:0},get renderObject(){return I&&I.count?r:void 0},get geometryVersion(){return q},createOrUpdate(e,t,a={},i){if(!function(e,t,a){if(!a&&!S)throw Error("missing structure");
7319if(b=Object.assign({},j,t),y=e,x=a,d.wV.reset(U),!r||!S){U.createNew=!0,U.createGeometry=!0;return}B(U,b,j,y,H,x,S),n.Structure.areEquivalent(x,S)||(U.createGeometry=!0),n.Structure.areHierarchiesEqual(x,S)||(U.updateTransform=!0,U.createGeometry=!0),p.U.areEqual(e.color,H.color)||(U.updateColor=!0),T.k.areEqual(e.size,H.size)||(U.updateSize=!0),(0,f.vZ)(b.unitKinds,j.unitKinds)||(U.createGeometry=!0),S.child!==x.child&&(U.createGeometry=!0,U.updateTransform=!0),b.instanceGranularity!==j.instanceGranularity&&(U.updateTransform=!0),!U.updateSize||"uSize"in r.values||(U.createGeometry=!0),U.createGeometry&&(U.updateColor=!0,U.updateSize=!0)}(t,a,i||S),U.createGeometry){let t=E(e,x,y,b,C);if((0,w.y8)(t))return t.then(t=>{X(t),K(e)});X(t)}else X();K(e)},getLoci:e=>r?P(e,S,r.id):u.Rh,eachLocation(e){for(I.reset();I.hasNext;){let{location:t,isSecondary:r}=I.move();e(t,r)}},mark:(e,t)=>a.u.mark(r,e,t,W,V),setVisibility(e){a.u.setVisibility(r,e)},setAlphaFactor(e){a.u.setAlphaFactor(r,e)},setPickable(e){a.u.setPickable(r,e)},setColorOnly(e){a.u.setColorOnly(r,e)},setTransform(e,t){a.u.setTransform(r,e,t)},setOverpaint(e,t){let n={geometry:C,props:j,webgl:t};a.u.setOverpaint(r,e,W,!0,n)},setTransparency(e,t){let n={geometry:C,props:j,webgl:t};a.u.setTransparency(r,e,W,!0,n)},setEmissive(e,t){let n={geometry:C,props:j,webgl:t};a.u.setEmissive(r,e,W,!0,n)},setSubstance(e,t){let n={geometry:C,props:j,webgl:t};a.u.setSubstance(r,e,W,!0,n)},setClipping(e){a.u.setClipping(r,e,W,!0)},setThemeStrength(e){a.u.setThemeStrength(r,e)},destroy(){null==F||F(C),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:_}}let k={...I.Vh,...I.QN};function B(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:b.K.Utils},t)}let _={...I.eV,...I.QN};function R(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:D.s.Utils},t)}let F={...I.g,...I.QN};function L(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:y.A.Utils},t)}let z={...I.N5,...I.QN};function N(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:E.w.Utils},t)}let G={...I.W$,...I.QN};function U(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:x.x.Utils},t)}let V={...I.zy,...I.QN};function j(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0),r.background!==a.background&&(t.createGeometry=!0),r.backgroundMargin!==a.backgroundMargin&&(t.createGeometry=!0),r.tether!==a.tether&&(t.createGeometry=!0),r.tetherLength!==a.tetherLength&&(t.createGeometry=!0),r.tetherBaseWidth!==a.tetherBaseWidth&&(t.createGeometry=!0),r.attachment!==a.attachment&&(t.createGeometry=!0),r.fontFamily!==a.fontFamily&&(t.createGeometry=!0),r.fontQuality!==a.fontQuality&&(t.createGeometry=!0),r.fontStyle!==a.fontStyle&&(t.createGeometry=!0),r.fontVariant!==a.fontVariant&&(t.createGeometry=!0),r.fontWeight!==a.fontWeight&&(t.createGeometry=!0)},geometryUtils:S.x.Utils},t)}let H={...I.cg,...I.QN};function q(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:C.A.Utils},t)}let X={...I.Xj,...I.QN};function W(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:A.q.Utils},t)}let K={...I.pT,...I.QN};function Q(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:M.Ee.Utils},t)}},25945:function(e,t,r){r.d(t,{I4:function(){return m},N5:function(){return x},QN:function(){return h},Vh:function(){return g},W$:function(){return S},Xj:function(){return O},cg:function(){return C},eV:function(){return b},g:function(){return y},pT:function(){return I},zy:function(){return T}});var a=r(74219),n=r(96046),i=r(4376),o=r(99696),s=r(39857),l=r(94900),u=r(21071),c=r(39446),d=r(98510),p=r(14086),f=r(42743);function m(e){return p.e.MultiSelect(e,f.g1,{description:"For which kinds of units/chains to show the representation visuals."})}let h={unitKinds:m(["atomic","spheres"]),includeParent:p.e.Boolean(!1,{isHidden:!0})},g={...i.K.Params},b={...s.s.Params},y={...l.A.Params},x={...o.w.Params}
7319,S={...n.x.Params},T={...u.x.Params},C={...a.A.Params},O={...c.q.Params},I={...d.Ee.Params}},84894:function(e,t,r){r.d(t,{U_:function(){return o},Xz:function(){return s},kV:function(){return i.k},sh:function(){return n.s}});var a=r(7791),n=r(23579);r(43091);var i=r(45978);r(31745);let o={create:()=>({...a.hX.createState(),unitTransforms:null,unitTransformsVersion:-1}),update:(e,t)=>{a.hX.updateState(e,t),void 0!==t.unitTransforms&&(e.unitTransforms=t.unitTransforms)}};function s(e){return e}},45978:function(e,t,r){r.d(t,{k:function(){return O}});var a=r(14086),n=r(84894),i=r(7791),o=r(30502),s=r(89987),l=r(67241),u=r(60843),c=r(54854),d=r(67589),p=r(99289),f=r(30481),m=r(65109),h=r(87144),g=r(34526),b=r(1813),y=r(5909),x=r(37792);class S{set(e,t){let r=this.hashCode(e),a=this.buckets.get(r);a||(a=[],this.buckets.set(r,a));for(let r=0;r<a.length;r++)if(this.areEqual(a[r].key,e)){a[r].value=t;return}a.push({key:e,value:t})}get(e){let t=this.hashCode(e),r=this.buckets.get(t);if(r){for(let t of r)if(this.areEqual(t.key,e))return t.value}}delete(e){let t=this.hashCode(e),r=this.buckets.get(t);if(!r)return!1;for(let a=0;a<r.length;a++)if(this.areEqual(r[a].key,e))return r.splice(a,1),0===r.length&&this.buckets.delete(t),!0;return!1}forEach(e){for(let t of this.buckets.values())for(let r of t)e(r.value,r.key)}clear(){this.buckets.clear()}constructor(e,t){this.hashCode=e,this.areEqual=t,this.buckets=new Map}}var T=r(69062);function C(){return new S(e=>(0,T.TO)(e.hashCode,e.transformHash),o.Unit.SymmetryGroup.areInvariantElementsEqual)}function O(e,t,r,S){let T,O,I,A,w=0,{webgl:D}=t,E=new s.x,M=(0,l.xH)(),P=[],k=new i.hX.GeometryState,B=n.U_.create(),_=C(),R=u.Q.createEmpty();function F(e,t,r){let{visible:a,alphaFactor:n,pickable:i,overpaint:o,transparency:s,emissive:l,substance:u,clipping:c,themeStrength:d,transform:p,unitTransforms:f}=r;void 0!==a&&e.setVisibility(a),void 0!==n&&e.setAlphaFactor(n),void 0!==i&&e.setPickable(i),void 0!==o&&e.setOverpaint(o,D),void 0!==s&&e.setTransparency(s,D),void 0!==l&&e.setEmissive(l,D),void 0!==u&&e.setSubstance(u,D),void 0!==c&&e.setClipping(c),void 0!==d&&e.setThemeStrength(d),void 0===p||p===B.transform&&h.yb.areEqual(p,B.transform,h.Ib)||e.setTransform(p),void 0!==f&&(f?e.setTransform(void 0,f.getSymmetryGroupTransforms(t)):f!==B.unitTransforms&&e.setTransform(void 0,null))}return{label:e,get groupCount(){let e=0;return _.forEach(({visual:t})=>{t.renderObject&&(e+=t.groupCount)}),e},get geometryVersion(){return k.version},get props(){return A},get params(){return I},get state(){return B},get theme(){return R},renderObjects:P,updated:E,createOrUpdate:function(e={},n){return n&&n!==T&&(I=r(t,n),A||(A=a.e.getDefaultValues(I))),A=Object.assign({},A,e),c.iQ.create("Creating or updating UnitsRepresentation",async e=>{var r,a,i;if(T||n){if(n&&!T){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);for(let t=0;t<O.length;t++){let r=O[t],a=S(M,n,A,D),i=a.createOrUpdate({webgl:D,runtime:e},R,A,{group:r,structure:n});i&&await i,F(a,r,B),_.set(r,{visual:a,group:r}),e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:t,max:O.length})}}else if(n&&(!o.Structure.areUnitIdsAndIndicesEqual(n,T)||n.child!==T.child)){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);let t=_;_=C();for(let a=0;a<O.length;a++){let i=O[a],o=t.get(i);if(o){let{visual:a}=o;if(null===(r=a.mustRecreate)||void 0===r?void 0:r.call(a,{group:i,structure:n},A,D)){a.destroy();let t=(a=S(M,n,A,D)).createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t,F(a,i,B)}else{let t=a.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t}if(_.set(i,{visual:a,group:i}),t.delete(i),a.renderObject){let e=a.renderObject.values.tMarker.ref.value.array;(0,p.O9)(e,g.Xp.ofBounds(0,e.length),p.dd.RemoveHighlight)}}else{let t=S(M,n,A,D),r=t.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});r&&await r,F(t,i,B),_.set(i,{visual:t,group:i})}e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:a,max:O.length})}t.forEach(({visual:e})=>{e.destroy()})}else if(n&&n!==T&&o.Structure.areUnitIdsAndIndicesEqual(n,T)){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);for(let r=0;r<O.length;r++){let i=O[r],o=_.get(i);if(o){let{visual:r}=o;if(null===(a=r.mustRecreate)||void 0===a?void 0:a.call(r,{group:i,structure:n},A,t.webgl)){r.destroy(),r=S(M,n,A,t.webgl),o.visual=r;let a=r.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});a&&await a,F(r,i,B)}else{let t=r.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t}o.group=i}else throw Error(`expected to find visual for hashCode ${i.hashCode}`);e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:r,max:O.length})}}else{let r=[];
7319_.forEach(e=>r.push(e));for(let a=0,n=r.length;a<n;++a){let{visual:o,group:s}=r[a];if(null===(i=o.mustRecreate)||void 0===i?void 0:i.call(o,{group:s,structure:T},A,t.webgl)){o.destroy(),o=S(M,T,A,D),r[a].visual=o;let t=o.createOrUpdate({webgl:D,runtime:e},R,A,{group:s,structure:T});t&&await t,F(o,s,B)}else{let t=o.createOrUpdate({webgl:D,runtime:e},R,A);t&&await t}e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:a,max:n})}}}else throw Error("missing structure");P.length=0,_.forEach(({visual:e})=>{e.renderObject&&(P.push(e.renderObject),k.add(e.renderObject.id,e.geometryVersion))}),k.snapshot(),n&&(T=n),E.next(w++)})},setState:function(e){let{visible:t,alphaFactor:r,pickable:a,overpaint:i,transparency:o,emissive:s,substance:l,clipping:u,themeStrength:c,transform:d,unitTransforms:p,syncManually:g,markerActions:S}=e,C={};void 0!==t&&(C.visible=t),void 0!==r&&(C.alphaFactor=r),void 0!==a&&(C.pickable=a),void 0!==i&&T&&(C.overpaint=f.k.remap(i,T)),void 0!==o&&T&&(C.transparency=m.i.remap(o,T)),void 0!==s&&T&&(C.emissive=x.i.remap(s,T)),void 0!==l&&T&&(C.substance=y.A.remap(l,T)),void 0!==u&&T&&(C.clipping=b.z.remap(u,T)),void 0!==c&&(C.themeStrength=c),void 0===d||h.yb.areEqual(d,B.transform,h.Ib)||(C.transform=d),(p!==B.unitTransforms||(null==p?void 0:p.version)!==B.unitTransformsVersion)&&(C.unitTransforms=p,B.unitTransformsVersion=p?null==p?void 0:p.version:-1),void 0!==g&&(C.syncManually=g),void 0!==S&&(C.markerActions=S),_.forEach(({visual:e,group:t})=>F(e,t,C)),n.U_.update(B,C)},setTheme:function(e){R=e},getLoci:function(e){let t=d.Rh;return _.forEach(({visual:r})=>{let a=r.getLoci(e);(0,d.jF)(a)||(t=a)}),t},getAllLoci:function(){var e;return[o.Structure.Loci(null!==(e=T.child)&&void 0!==e?e:T)]},eachLocation:function(e){_.forEach(({visual:t})=>{t.eachLocation(e)})},mark:function(e,t){if(!T||!p.E5.is(B.markerActions,t))return!1;if(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)||o.Bond.isLoci(e)){if(!o.Structure.areRootsEquivalent(e.structure,T))return!1;e=d.o_.remap(e,T),(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)&&o.StructureElement.Loci.isWholeStructure(e))&&(e=d.GK)}else if(!(0,d.h)(e)&&!(0,d.dh)(e))return!1;if(d.o_.isEmpty(e))return!1;let r=!1;return _.forEach(({visual:a})=>{r=a.mark(e,t)||r}),r},destroy:function(){_.forEach(({visual:e})=>e.destroy()),_.clear()}}}},31745:function(e,t,r){r.d(t,{FH:function(){return _},FL:function(){return N},Gk:function(){return G},PO:function(){return M},Pf:function(){return F},UJ:function(){return P},Uo:function(){return V},V5:function(){return B},VX:function(){return L},Vu:function(){return z},ml:function(){return U},nz:function(){return k},qf:function(){return R},v4:function(){return j}});var a=r(30502),n=r(30131),i=r(11803),o=r(60843),s=r(42743),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85688),m=r(99289),h=r(85764),g=r(17411),b=r(69587),y=r(4376),x=r(7305),S=r(39857),T=r(94900),C=r(99696),O=r(96046);r(21071);var I=r(74219),A=r(39446);r(98510);var w=r(25945),D=r(97667);function E(e,t){let r,y,S,T,C,O,I,A;let{defaultProps:w,createGeometry:E,createLocationIterator:M,getLoci:P,eachLocation:k,setUpdateState:B,initUpdateState:_,mustRecreate:R,processValues:F,dispose:L}=e,{createEmpty:z,updateValues:N,updateBoundingSphere:G,updateRenderableState:U,createPositionIterator:V}=e.geometryUtils,j=d.wV.create(),H={loci:u.Rh,action:m.dd.None,status:-1},q=Object.assign({},w),X=o.Q.createEmpty(),W=-1;function K(e){if(j.createNew){if(I=M(y,q),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=(0,s.yT)(e,n.includeParent,t.boundingSphere,n.cellSize,n.batchSize),p=u(t,d,r,a,n),f=c(n);return(0,l.Hq)(t.kind,p,f,o)}(y,e,I,X,q,t),A=V(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((j.updateColor||j.updateSize||j.updateTransform)&&(I=M(y,q)),j.updateTransform){let{instanceCount:e,groupCount:t}=I;q.instanceGranularity?(0,f.eL)(e,"instance",r.values):(0,f.eL)(e*t,"groupInstance",r.values)}if(j.updateMatrix&&((0,s.yT)(y,q.includeParent,(null==e?void 0:e.boundingSphere)||r.values.invariantBoundingSphere.ref.value,q.cellSize,q.batchSize,r.values),"lodLevels"in r.values&&h.IO.update(r.values.lodLevels,r.values.lodLevels.ref.value)),j.createGeometry){if(e)h.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),h.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),h.IO.updateIfChanged(r.values.uGroupCount,I.groupCount);else throw Error("expected geometry to be given")}(j.updateTransform||j.createGeometry)&&(G(r.values,e||O),A=V(e||O,r.values)),j.updateSize&&"uSize"in r.values&&(0,g.H4)(I,A,X.size,r.values),j.updateColor&&(0,b.is)(I,A,X.color,r.values),N(r.values,q),U(r.state,q)}S=q,T=X,C=y,e&&(O=e,W+=1)}function Q(e,t,r){return((0,u.h)(e)||a.Structure.isLoci(e)&&a.Structure.areRootsEquivalent(e.structure,C.structure)||a.StructureElement.Loci.is(e)&&a.Structure.areRootsEquivalent(e.structure,C.structure)&&a.StructureElement.Loci.isWholeStructure(e)?0:1)?S.instanceGranularity?function(e,t,r){let n=!1;if(a.Bond.isLoci(e)){let{structure:i,group:o}=t;if(!a.Structure.areEquivalent(e.structure,i))return!1;for(let t of e.bonds){if(t.aUnit!==t.bUnit)continue;let e=o.unitIndexMap.get(t.aUnit.id);void 0!==e&&r(c.Xp.ofSingleton(e))&&(n=!0)}}else if(a.StructureElement.Loci.is(e)){let{structure:i,group:o}=t;if(!a.Structure.areEquivalent(e.structure,i))return!1;for(let t of e.elements){let e=o.unitIndexMap.get(t.unit.id);void 0!==e&&r(c.Xp.ofSingleton(e))&&(n=!0)}}return n}(e,C,t):k(e,C,t,r):t(S.instanceGranularity?c.Xp.ofBounds(0,I.instanceCount):c.Xp.ofBounds(0,I.groupCount*I.instanceCount))}function Z(e){r&&(null==F||F(r.values,O,S,T,e.webgl))}return{get groupCount(){return I?I.count:0},get renderObject(){return I&&I.count?r:void 0},get geometryVersion(){return W},createOrUpdate(e,t,n,i){if(!function(e,t,n){if(!n&&!C)throw Error("missing structureGroup");if(q=t,X=e,y=n,d.wV.reset(j),!r||!C){null==_||_(j,q,X,y),j.createNew=!0,j.createGeometry=!0;return}B(j,q,S,X,T,y,C),a.Structure.areHierarchiesEqual(C.structure,y.structure)||(j.updateTransform=!0,j.updateColor=!0,j.updateSize=!0),p.U.areEqual(X.color,T.color)||(j.updateColor=!0),x.k.areEqual(X.size,T.size)||(j.updateSize=!0),C.structure.child!==y.structure.child&&(j.createGeometry=!0,j.updateTransform=!0),(q.instanceGranularity!==S.instanceGranularity||q.cellSize!==S.cellSize||q.batchSize!==S.batchSize)&&(j.updateTransform=!0),(0,h.vZ)(q.unitKinds,S.unitKinds)||(j.createGeometry=!0),y.group.transformHash!==C.group.transformHash&&(y.group.units.length!==C.group.units.length||j.updateColor?j.updateTransform=!0:j.updateMatrix=!0);let i=y.group.units[0],o=C.group.units[0];a.Unit.areOperatorsEqual(i,o)||(j.updateTransform=!0),a.Unit.areConformationsEqual(i,o)||(j.createGeometry=!0),j.updateTransform&&(j.updateMatrix=!0),!j.updateSize||"uSize"in r.values||(j.createGeometry=!0),(j.createGeometry||j.updateTransform)&&(C.structure.hashCode!==y.structure.hashCode&&(j.updateColor=!0,j.updateSize=!0),(X.color.granularity.startsWith("vertex")||r.values.dColorType.ref.value.startsWith("vertex")||X.color.granularity.startsWith("volume")||r.values.dColorType.ref.value.startsWith("volume"))&&(j.updateColor=!0))}
7319(t,n,i||C),j.createGeometry){var o,l,u,c,f;let t=(o=y.group.units[0],l=y.structure,u=X,c=q,f=O,(0,s.GC)(c.unitKinds,o)?E(e,o,l,u,c,f):z(f));if((0,D.y8)(t))return t.then(t=>{K(t),Z(e)});K(t)}else K();Z(e)},getLoci:e=>r?P(e,C,r.id):u.Rh,eachLocation(e){for(I.reset();I.hasNext;){let{location:t,isSecondary:r}=I.move();e(t,r)}},mark(e,t){let i=!0;if(a.StructureElement.Loci.is(e)){i=!1;let{invariantId:t}=C.group.units[0];for(let r of e.elements)if(r.unit.invariantId===t){i=!0;break}}return!!i&&n.u.mark(r,e,t,Q,H)},setVisibility(e){n.u.setVisibility(r,e)},setAlphaFactor(e){n.u.setAlphaFactor(r,e)},setPickable(e){n.u.setPickable(r,e)},setColorOnly(e){n.u.setColorOnly(r,e)},setTransform(e,t){n.u.setTransform(r,e,t)},setOverpaint(e,t){let a={geometry:O,props:S,webgl:t};n.u.setOverpaint(r,e,Q,!0,a)},setTransparency(e,t){let a={geometry:O,props:S,webgl:t};n.u.setTransparency(r,e,Q,!0,a)},setEmissive(e,t){let a={geometry:O,props:S,webgl:t};n.u.setEmissive(r,e,Q,!0,a)},setSubstance(e,t){let a={geometry:O,props:S,webgl:t};n.u.setSubstance(r,e,Q,!0,a)},setClipping(e){n.u.setClipping(r,e,Q,!0)},setThemeStrength(e){n.u.setThemeStrength(r,e)},destroy(){null==L||L(O),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:R}}let M={...w.Vh,...w.QN};function P(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:y.K.Utils},t)}let k={...w.eV,...w.QN};function B(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:S.s.Utils},t)}let _={...w.g,...w.QN};function R(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:T.A.Utils},t)}let F={...w.N5,...w.QN};function L(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:C.w.Utils},t)}let z={...w.W$,...w.QN};function N(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:O.x.Utils},t)}({...w.zy,...w.QN});let G={...w.cg,...w.QN};function U(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:I.A.Utils},t)}let V={...w.Xj,...w.QN};function j(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:A.q.Utils},t)}({...w.pT,...w.QN})},42743:function(e,t,r){r.d(t,{GC:function(){return A},Gs:function(){return E},Js:function(){return x},MI:function(){return B},Q4:function(){return D},QE:function(){return F},SI:function(){return k},ZL:function(){return S},aL:function(){return b},g1:function(){return I},mK:function(){return w},mV:function(){return C},oy:function(){return R},uo:function(){return T},yT:function(){return O}});var a=r(30502),n=r(87144),i=r(41306),o=r(34526),s=r(67589),l=r(53478),u=r(36111),c=r(14086),d=r(89615),p=r(48930),f=r(24407),m=r(48502);let h=n.yb.toArray,g=!1;function b(e){if(e){if(e.extensions.fragDepth&&e.extensions.textureFloat)return!0;if(m.Au&&!g){let t=[];e.extensions.fragDepth||t.push("fragDepth"),e.extensions.textureFloat||t.push("textureFloat"),console.warn(`Missing "${t.join('", "')}" extensions required for "sphere impostors". Falling back to "sphere mesh".`),g=!0}}else m.Au&&!g&&(console.warn('WebGL required for "sphere impostors". Falling back to "sphere mesh".'),g=!0);return!1}let y=!1;function x(e){if(e){if(e.extensions.fragDepth)return!0;if(m.Au&&!y){let t=[];e.extensions.fragDepth||t.push("fragDepth"),console.warn(`Missing "${t.join('", "')}" extensions required for "cylinder impostors". Falling back to "cylinder mesh".`),y=!0}}else m.Au&&!y&&(console.warn('WebGL required for "cylinder impostors". Falling back to "cylinder mesh".'),y=!0);return!1}function S(e,t,r){let{elements:n,model:i}=t;if(-1!==o.hU.indexOf(n,r)){let{index:s,offsets:l}=i.atomicHierarchy.residueAtomSegments,u=s[r],c=[];for(let e=l[u],t=l[u+1];e<t;++e){let t=o.hU.indexOf(n,e);-1!==t&&c.push(t)}let d=o.hU.ofSortedArray(o.SortedArray.ofSortedArray(c));return a.StructureElement.Loci(e,[{unit:t,indices:d}])}return s.Rh}function T(e,t,r){let{elements:n,model:i}=t,{label_alt_id:s}=i.atomicHierarchy.atoms,l=s.value(r);if(-1!==o.hU.indexOf(n,r)){let{index:a}=i.atomicHierarchy.residueAtomSegments;return C(e,t,a[r],l)}return a.StructureElement.Loci(e,[])}function C(e,t,r,n){let{elements:i,model:s}=t,{label_alt_id:l}=s.atomicHierarchy.atoms,{offsets:u}=s.atomicHierarchy.residueAtomSegments,c=[];for(let e=u[r],t=u[r+1];e<t;++e){let t=o.hU.indexOf(i,e);if(-1!==t){let r=l.value(e);(n===r||""===r)&&c.push(t)}}let d=o.hU.ofSortedArray(o.SortedArray.ofSortedArray(c));return a.StructureElement.Loci(e,[{unit:t,indices:d}])}function O(e,t,r,a,n,o){let{child:s}=e.structure,l=t&&s?e.group.units.filter(e=>s.unitMap.has(e.id)):e.group.units,u=l.length,c=16*u,d=o&&o.aTransform.ref.value.length>=c?o.aTransform.ref.value:new Float32Array(c);for(let e=0;e<u;e++)h(l[e].conformation.operator.matrix,d,16*e);return(0,i.pH)(d,u,r,a,n,o)}let I=c.e.objectToOptions({atomic:{},spheres:{},gaussians:{}});function A(e,t){for(let r=0,n=e.length;r<n;++r)if(a.Unit.isAtomic(t)&&"atomic"===e[r]||a.Unit.isSpheres(t)&&"spheres"===e[r]||a.Unit.isGaussians(t)&&"gaussians"===e[r])return!0;return!1}function w(e,t,r=5e8){let a=p.XZ.size((0,n.AO)(),e);n.AO.ceil(a,a),a.sort((e,t)=>
7319t-e);let i=Math.floor(Math.cbrt(r)*Math.cbrt(r)),o=a[0]*a[1],s=Math.ceil(o/(t*t));return{area:o,areaCells:s,maxAreaCells:i}}function D(e,t,r=5e8){let{area:a,areaCells:n,maxAreaCells:i}=w(e,t.resolution,r),o=n>i?Math.sqrt(a/i):t.resolution;return{...t,resolution:o}}let E={ignoreHydrogens:c.e.Boolean(!1,{description:"Whether or not to include hydrogen atoms in the surface calculation."}),ignoreHydrogensVariant:c.e.Select("all",c.e.arrayToOptions(["all","non-polar"])),traceOnly:c.e.Boolean(!1,{description:"Whether or not to only use trace atoms in the surface calculation."}),includeParent:c.e.Boolean(!1,{description:"Include elements of the parent structure in surface calculation to get a surface patch of the current structure. Note that this disables GPU support."})};c.e.getDefaultValues(E);let M=(0,n.AO)();function P(e,t,r,a){return n.AO.squaredDistance(n.AO.set(M,e,t,r),a)}function k(e,t,r,n){let i,s;let{ignoreHydrogens:l,ignoreHydrogensVariant:c,traceOnly:p,includeParent:f}=n,m=f?e.root.unitMap.get(t.id):t,h=f&&m!==t,{x:g,y:b,z:y}=function(e){switch(e.kind){case a.Unit.Kind.Atomic:return e.model.atomicConformation;case a.Unit.Kind.Spheres:return e.model.coarseConformation.spheres;case a.Unit.Kind.Gaussians:return e.model.coarseConformation.gaussians}}(m),{elements:x}=m,{center:S,radius:T}=t.boundary.sphere,C=(T+11)*(T+11);if(l||p||h){let t=[],r=[];for(let a=0,n=x.length;a<n;++a){let n=x[a];!(l&&R(e,m,n,c))&&(!p||F(m,n))&&(h&&P(g[n],b[n],y[n],S)>C||(t.push(n),r.push(a)))}i=o.SortedArray.ofSortedArray(t),s=r}else i=x,s=(0,u.d_)(new Int32Array(i.length));f&&m!==t&&function(e,t,r){let a=0,n=t.length;for(let i=0,s=r.length;i<s;++i){let s=o.SortedArray.indexOfInRange(t,r[i],a,n);-1===s?e[i]=-2:(e[i]=s,a=s)}}(s,t.elements,i);let O={indices:i,x:g,y:b,z:y,id:s},I=h?(0,d.z)(O):t.boundary,A=a.StructureElement.Location.create(e,m);return{position:O,boundary:I,radius:e=>(A.element=e,r.size(A))}}function B(e,t,r){let n,i,s,l,c,p;let{ignoreHydrogens:f,ignoreHydrogensVariant:m,traceOnly:h,includeParent:g}=r,b=g&&!!e.parent,y=a.StructureElement.Location.create(e.root),{center:x,radius:S}=e.boundary.sphere,T=(S+11)*(S+11);if(f||h||b){let{getSerialIndex:r}=e.serialMapping,a=b?e.root.units:e.units,u=[],d=[],g=[],S=[],C=[];for(let n=0,i=a.length;n<i;++n){let i=a[n],{elements:s,conformation:l}=i,c=e.unitMap.get(i.id);y.unit=i;for(let a=0,n=s.length;a<n;++a){let n=s[a];if(f&&R(e,i,n,m)||h&&!F(i,n))continue;let p=l.x(n),O=l.y(n),I=l.z(n);b&&P(p,O,I,x)>T||(u.push(p),d.push(O),g.push(I),y.element=n,S.push(t.size(y)),b?-1===(c?o.SortedArray.indexOf(c.elements,n):-1)?C.push(-2):C.push(r(c,n)):C.push(r(i,n)))}}n=u,i=d,s=g,l=S,c=C,p=o.hU.ofRange(0,c.length)}else{let{elementCount:r}=e,a=new Float32Array(r),d=new Float32Array(r),f=new Float32Array(r),m=new Float32Array(r);for(let r=0,n=0,i=e.units.length;r<i;++r){let i=e.units[r],{elements:o,conformation:s}=i;y.unit=i;for(let e=0,r=o.length;e<r;++e){let r=o[e],i=n+e;a[i]=s.x(r),d[i]=s.y(r),f[i]=s.z(r),y.element=r,m[i]=t.size(y)}n+=o.length}n=a,i=d,s=f,l=m,c=(0,u.d_)(new Uint32Array(r)),p=o.hU.ofRange(0,c.length)}let C={indices:p,x:n,y:i,z:s,id:c},O=b?(0,d.z)(C):e.boundary;return{position:C,boundary:O,radius:e=>l[e]}}let _=l.dZ.H;function R(e,t,r,n){if(a.Unit.isCoarse(t)||t.model.atomicHierarchy.derived.atom.atomicNumber[r]!==_)return!1;if("all"===n)return!0;let i=(0,f.DN)(e,t,o.SortedArray.indexOf(t.elements,r));return!!i&&"polar"===n||!i&&"non-polar"===n}function F(e,t){if(a.Unit.isCoarse(e))return!0;let r=e.model.atomicHierarchy.atoms.label_atom_id.value(t);return"CA"===r||"BB"===r||"P"===r}},84889:function(e,t,r){r.d(t,{Bj:function(){return b},Mx:function(){return k},V7:function(){return B},Vj:function(){return g},fV:function(){return M},uj:function(){return n},ym:function(){return O}});var a,n,i=r(87144),o=r(14086),s=r(4376),l=r(89623),u=r(84785),c=r(54185),d=r(96046),p=r(13070),f=r(94900),m=r(51858),h=r(30441);let g={linkScale:o.e.Numeric(.45,{min:0,max:1,step:.01}),linkSpacing:o.e.Numeric(1,{min:0,max:2,step:.01}),linkCap:o.e.Boolean(!1),aromaticScale:o.e.Numeric(.3,{min:0,max:1,step:.01}),aromaticSpacing:o.e.Numeric(1.5,{min:0,max:3,step:.01}),aromaticDashCount:o.e.Numeric(2,{min:1,max:6,step:1}),dashCount:o.e.Numeric(4,{min:0,max:10,step:1}),dashScale:o.e.Numeric(.8,{min:0,max:2,step:.1}),dashCap:o.e.Boolean(!0),stubCap:o.e.Boolean(!0),radialSegments:o.e.Numeric(16,{min:2,max:56,step:2},c.ev.CustomQualityParamInfo),colorMode:o.e.Select("default",o.e.arrayToOptions(["default","interpolate"]),c.ev.ShadingCategory)};o.e.getDefaultValues(g);let b={linkScale:o.e.Numeric(.5,{min:0,max:1,step:.1}),linkSpacing:o.e.Numeric(.1,{min:0,max:2,step:.01}),aromaticDashCount:o.e.Numeric(2,{min:1,max:6,step:1}),dashCount:o.e.Numeric(4,{min:0,max:10,step:1})};o.e.getDefaultValues(b);let y=(0,i.AO)(),x=(0,i.AO)(),S=(0,i.AO)(),T=i.AO.create(0,1,0);function C(e,t,r,a){i.AO.normalize(x,i.AO.sub(x,t,r)),null!==a?i.AO.sub(S,t,a):i.AO.copy(S,t),i.AO.normalize(S,S);let n=i.AO.dot(x,S);return 1-Math.abs(n)<1e-5&&(i.AO.set(S,1,0,0),1-Math.abs(n=i.AO.dot(x,S))<1e-5&&(i.AO.set(S,0,1,0),n=i.AO.dot(x,S))),i.AO.setMagnitude(x,x,n),i.AO.sub(S,S,x),i.AO.n
7319ormalize(e,S)}let O={linkCount:0,position:()=>{},radius:()=>0};(a=n||(n={}))[a.Solid=0]="Solid",a[a.Dashed=1]="Dashed",a[a.Double=2]="Double",a[a.OffsetDouble=3]="OffsetDouble",a[a.Triple=4]="Triple",a[a.OffsetTriple=5]="OffsetTriple",a[a.Disk=6]="Disk",a[a.Aromatic=7]="Aromatic",a[a.MirroredAromatic=8]="MirroredAromatic";let I=i.AO.scale,A=i.AO.add,w=i.AO.sub,D=i.AO.setMagnitude,E=i.AO.dot;function M(e,t,r,a){let{linkCount:o,referencePosition:c,position:d,style:p,radius:f,ignore:m,stub:g}=t;if(!o)return{mesh:s.K.createEmpty(a)};let{radialSegments:b,stubCap:x}=r,S=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,O=2*b*o*2,M=l.V.createState(O,O/4,a),k=(0,i.AO)(),B=0,_=0,R={builderState:M,props:r,assignNonAdjustedPosition:(e,t)=>{d(e,t,_,!1)},referencePosition:c?()=>c(_):void 0},F={a:(0,i.AO)(),b:(0,i.AO)(),group:0,linkStub:!1,linkStyle:n.Solid,linkRadius:0};for(;_<o;++_)m&&m(_)||(d(F.a,F.b,_,!0),A(k,k,F.a),A(k,k,F.b),B+=2,F.group=_,F.linkStub=x&&!!g&&g(_),F.linkRadius=f(_),F.linkStyle=p?p(_):n.Solid,function(e,t){let{builderState:r,props:a,assignNonAdjustedPosition:o,referencePosition:s}=e,{linkRadius:l,linkStub:c,linkStyle:d,a:p,b:f}=t,{linkScale:m,linkSpacing:h,radialSegments:g,linkCap:b,aromaticScale:x,aromaticSpacing:S,aromaticDashCount:O,dashCount:M,dashScale:k,dashCap:B}=a,{cylinderProps:_,vShift:R,va:F,vb:L}=P;_.radialSegments=g,i.AO.copy(F,p),i.AO.copy(L,f),w(y,L,F);let z=E(y,T)>0,[N,G]=z?[c,b]:[b,c];if(r.currentGroup=t.group,d===n.Solid)_.radiusTop=_.radiusBottom=l,_.topCap=N,_.bottomCap=G,(0,u.vA)(r,F,L,.5,_);else if(d===n.Dashed)_.radiusTop=_.radiusBottom=l*k,_.topCap=_.bottomCap=B,(0,u.OA)(r,F,L,.5,M,c,_);else if(d===n.Double||d===n.OffsetDouble||d===n.Triple||d===n.OffsetTriple||d===n.Aromatic||d===n.MirroredAromatic){let e=d===n.Double||d===n.OffsetDouble?2:d===n.Triple||d===n.OffsetTriple?3:1.5,t=m/(.5*e)*l,a=(l-t)*h;if(C(R,F,L,s?s():null),_.topCap=N,_.bottomCap=G,d===n.Aromatic||d===n.MirroredAromatic){_.radiusTop=_.radiusBottom=l,(0,u.vA)(r,F,L,.5,_);let e=l+x*l+x*l*S;o&&o(F,L),D(y,w(y,L,F),.5*l),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=l*x,_.topCap=_.bottomCap=B,D(R,R,e),w(F,F,R),w(L,L,R),(0,u.OA)(r,F,L,.5,O,c,_),d===n.MirroredAromatic&&(D(R,R,2*e),A(F,F,R),A(L,L,R),(0,u.OA)(r,F,L,.5,O,c,_))}else if(d===n.OffsetDouble||d===n.OffsetTriple){let a=l+t+m*l*h;D(R,R,a),_.radiusTop=_.radiusBottom=l,(0,u.vA)(r,F,L,.5,_),I(y,y,h*m*.2),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=t,_.topCap=z?c:B,_.bottomCap=z?B:c,D(R,R,a),w(F,F,R),w(L,L,R),(0,u.vA)(r,F,L,.5,_),3===e&&(D(R,R,2*a),A(F,F,R),A(L,L,R),(0,u.vA)(r,F,L,.5,_))}else D(R,R,a),_.radiusTop=_.radiusBottom=t,3===e&&(0,u.vA)(r,F,L,.5,_),(0,u.ZI)(r,F,L,.5,R,_)}else d===n.Disk&&(I(y,y,.475),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=l,_.topCap=N,_.bottomCap=G,(0,u.vA)(r,F,L,.5,_))}(R,F));let L=l.V.getMesh(M);return 0===B?{mesh:L}:(i.AO.scale(k,k,1/B),S&&i.AO.distance(k,S.center)/S.radius<.1)?{mesh:L,boundingSphere:S}:{mesh:L}}let P={cylinderProps:{radiusTop:1,radiusBottom:1,radialSegments:8,topCap:!1,bottomCap:!1},vShift:(0,i.AO)(),va:(0,i.AO)(),vb:(0,i.AO)()};function k(e,t,r,a){let{linkCount:o,referencePosition:s,position:l,style:u,radius:c,ignore:d,stub:p}=t;if(!o)return{cylinders:f.A.createEmpty(a)};let{linkScale:g,linkSpacing:b,linkCap:x,aromaticScale:S,aromaticSpacing:T,aromaticDashCount:O,dashCount:E,dashScale:M,dashCap:P,stubCap:k,colorMode:B}=r,_="interpolate"===B,R=!0===_?3:2,F=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,L=2*o,z=m.B.create(L,L/4,a),N=(0,i.AO)(),G=(0,i.AO)(),U=(0,i.AO)(),V=(0,i.AO)(),j=(0,i.AO)(),H=0;for(let e=0;e<o;++e){if(d&&d(e))continue;l(N,G,e,!0),A(j,j,N),A(j,j,G),H+=2;let t=c(e),r=u?u(e):n.Solid,a=k&&!!p&&p(e);if(r===n.Solid)I(U,A(U,N,G),.5),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e);else if(r===n.Dashed)I(U,A(U,N,G),.5),z.addFixedCountDashes(N,U,E,M,P,P,a,_,e);else if(r===n.Double||r===n.OffsetDouble||r===n.Triple||r===n.OffsetTriple||r===n.Aromatic||r===n.MirroredAromatic){let i=r===n.Double||r===n.OffsetDouble?2:r===n.Triple||r===n.OffsetTriple?3:1.5,o=g/(.5*i),u=(t-o*t)*b;if(I(U,A(U,N,G),.5),C(V,N,G,s?s(e):null),r===n.Aromatic||r===n.MirroredAromatic){z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e);let i=t+S*t+S*t*T;l(N,G,e,!1),D(y,w(y,G,N),.5*t),A(N,N,y),D(V,V,i),w(N,N,V),w(U,U,V),z.addFixedCountDashes(N,U,O,S,P,P,a,_,e),r===n.MirroredAromatic&&(D(V,V,2*i),A(N,N,V),A(U,U,V),z.addFixedCountDashes(N,U,O,S,P,P,a,_,e))}else r===n.OffsetDouble||r===n.OffsetTriple?(D(V,V,t+o*t+g*t*b),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e),D(y,w(y,N,U),t/1.5),w(N,N,y),3===i&&z.add(N[0]+V[0],N[1]+V[1],N[2]+V[2],U[0]+V[0],U[1]+V[1],U[2]+V[2],o,x,a,R,e),z.add(N[0]-V[0],N[1]-V[1],N[2]-V[2],U[0]-V[0],U[1]-V[1],U[2]-V[2],o,P,a,R,e)):(D(V,V,u),3===i&&z.add(N[0],N[1],N[2],U[0],U[1],U[2],o,x,a,R,e),z.add(N[0]+V[0],N[1]+V[1],N[2]+V[2],U[0]+V[0],U[1]+V[1],U[2]+V[2],o,x,a,R,e),z.add(N[0]-V[0],N[1]-V[1],N[2]-V[2],U[0]-V[0],U[1]-V[1],U[2]-V[2],o,x,a,R,e))}else r===n.Disk&&(I(y,w(y,U,N),.475),A(N,N,y),w(U,U,y),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e))}let q=z.getCylinders();return 0===H?{cylinders:q}:(i.AO.scale(j,j,1/H),F&&i.AO.distance(j,F.center)/F.radius<.1)?{cylinders:q,boundingSphere:F}:{cylinders:q}}function B(e,t,r,a){let{linkCount:o,referencePosition:s,position:l,style:u,ignore:c}=t;if(!o)return{lines:d.x.createEmpty(a)};let{linkScale:f,linkSpacing:m,aromaticDashCount:g,dashCount:b}=r,x=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,S=2*o,T=p.R.create(S,S/4,a),O=(0,i.AO)(),E=(0,i.AO)(),M=(0,i.AO)(),P=(0,i.AO)(),k=(0,i.AO)(),B=0;for(let e=0;e<o;++e){if(c&&c(e))continue;l(O,E,e,!0),A(k,k,O),A(k,k,E),B+=2;let t=u?u(e):n.Solid;if(t===n.Solid)I(M,A(M,O,E),.5),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e);else if(t===n.Dashed)I(M,A(M,O,E),.5),T.addFixedCountDashes(O,M,b,e);else if(t===n.Double||t===n.OffsetDouble||t===n.Triple||t===n.OffsetTriple||t===n.Aromatic||t===n.MirroredAromatic){let r=t===n.Double||t===n.OffsetDouble?2:t===n.Triple||t===n.OffsetTriple?3:1.5,a=(1-f/(.5*r)*1)*m;if(I(M,A(M,O,E),.5),C(P,O,E,s?s(e):null),t===n.Aromatic||t===n.MirroredAromatic){T.add(O[0],O[1],O[2],M[0],M[1],M[2],e);let r=4.5*a;D(y,w(y,E,O),.5*r),A(O,O,y),D(P,P,r),w(O,O,P),w(M,M,P),T.addFixedCountDashes(O,M,g,e),t===n.MirroredAromatic&&(D(P,P,2*r),A(O,O,P),A(M,M,P),T.addFixedCountDashes(O,M,g,e))}else t===n.OffsetDouble||t===n.OffsetTriple?(D(P,P,3*a),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e),I(y,w(y,O,M),m*f),w(O,O,y),3===r&&T.add(O[0]+P[0],O[1]+P[1],O[2]+P[2],M[0]+P[0],M[1]+P[1],M[2]+P[2],e)):(D(P,P,1.5*a),3===r&&T.add(O[0],O[1],O[2],M[0],M[1],M[2],e),T.add(O[0]+P[0],O[1]+P[1],O[2]+P[2],M[0]+P[0],M[1]+P[1],M[2]+P[2],e)),T.add(O[0]-P[0],O[1]-P[1],O[2]-P[2],M[0]-P[0],M[1]-P[1],M[2]-P[2],e)}else t===n.Disk&&(I(y,w(y,M,O),.475),A(O,O,y),w(M,M,y),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e))}let _=T.getLines();return 0===B?{lines:_}:(i.AO.scale(k,k,1/B),x&&i.AO.distance(k,x.center)/x.radius<.1)?{lines:_,boundingSphere:x}:{lines:_}}},11650:function(e,t,r){r.d(t,{Sq:function(){return m},bw:function(){return h},wV:function(){return i}});var a,n,i,o,s=r(85764),l=r(30502),u=r(48930),c=r(5333),d=r(1573),p=r(34052);(a=i||(i={})).create=function(){return{updateTransform:!1,updateMatrix:!1,updateColor:!1,updateSize:!1,updateLocation:!1,createGeometry:!1,createNew:!1,info:{}}},a.reset=function(e){e.updateTransform=!1,e.updateMatrix=!1,e.updateColor=!1,e.updateSize=!1,e.updateLocation=!1,e.createGeometry=!1,e.createNew=!1};let f={lowestElementCount:1e6,lowerElementCount:5e5,lowElementCount:1e5,mediumElementCount:2e4,highElementCount:2e3,coarseGrainedFactor:10,elementCountFactor:1};function m(e,t={}){let r={...f,...t},a=e.elementCount*r.elementCountFactor;
7319return((e.isCoarseGrained||e.isCoarse)&&(a*=r.coarseGrainedFactor),a>r.lowestElementCount)?"lowest":a>r.lowerElementCount?"lower":a>r.lowElementCount?"low":a>r.mediumElementCount?"medium":a>r.highElementCount?"high":"higher"}function h(e,t){let r=(0,s.ce)(e.quality,"auto"),a=(0,s.ce)(e.detail,1),n=(0,s.ce)(e.radialSegments,12),i=(0,s.ce)(e.linearSegments,8),f=(0,s.ce)(e.resolution,2),h=(0,s.ce)(e.imageResolution,1),g=(0,s.ce)(e.probePositions,12),b=(0,s.ce)(e.doubleSided,!0),y=0;if("auto"===r){if(t instanceof l.Structure)r=m(t.root),y=function(e){if(1===e.root.models.length){let t=c.I.Provider.get(e.root.model);if(t&&"P 1"===t.spacegroup.name&&!u.EO.isZero(t.spacegroup.cell))return t.spacegroup.cell.volume}return u.XZ.volume(e.root.boundary.box)}(t);else if(d.f.is(t)){let[e,a,n]=t.grid.cells.space.dimensions;r=(y=e*a*n)<1e7?"medium":"low"}}if("custom"!==r&&"auto"!==r){let e=function(e){switch(e){case"lowest":return o.Lowest;case"lower":return o.Lower;case"low":return o.Low;case"medium":return o.Medium;case"high":return o.High;case"higher":return o.Higher;case"highest":return o.Highest}}(r);switch((0,p.LI)()&&(e=Math.max(e-1,o.Lowest)),e){case o.Highest:a=3,n=36,i=18,f=.1,h=.01,g=72,b=!0;break;case o.Higher:a=3,n=28,i=14,f=.3,h=.05,g=48,b=!0;break;case o.High:a=2,n=20,i=10,f=.5,h=.1,g=36,b=!0;break;case o.Medium:a=1,n=12,i=8,f=.8,h=.2,g=24,b=!0;break;case o.Low:a=0,n=8,i=3,f=1.3,h=.4,g=24,b=!1;break;case o.Lower:a=0,n=4,i=2,f=3,h=.7,g=12,b=!1;break;case o.Lowest:a=0,n=2,i=1,f=8,h=1,g=12,b=!1}}return y>0&&(f=Math.min(f=Math.max(f,y/3e8),20)),"off"===e.transparentBackfaces&&(void 0!==e.alpha&&e.alpha<1||e.xrayShaded)&&(b=!1),{detail:a,radialSegments:n,linearSegments:i,resolution:f,imageResolution:h,probePositions:g,doubleSided:b}}(n=o||(o={}))[n.Lowest=0]="Lowest",n[n.Lower=1]="Lower",n[n.Low=2]="Low",n[n.Medium=3]="Medium",n[n.High=4]="High",n[n.Higher=5]="Higher",n[n.Highe
7319st=6]="Highest"},30131:function(e,t,r){r.d(t,{u:function(){return n}});var a,n,i=r(67589),o=r(99289),s=r(87144),l=r(41306),u=r(62927),c=r(85764),d=r(5514),p=r(97187),f=r(38788),m=r(22444),h=r(85688),g=r(54185),b=r(82471),y=r(94133),x=r(41723),S=r(4249);(a=n||(n={})).setVisibility=function(e,t){e&&(e.state.visible=t)},a.setAlphaFactor=function(e,t){e&&(e.state.alphaFactor=t)},a.setPickable=function(e,t){e&&(e.state.pickable=t)},a.setColorOnly=function(e,t){e&&(e.state.colorOnly=t)},a.mark=function(e,t,r,a,n){if(!e||(0,i.jF)(t))return!1;let{tMarker:s,uMarker:l,markerAverage:u,markerStatus:d,uGroupCount:f,instanceCount:m,instanceGranularity:g}=e.values,b=g.ref.value?m.ref.value:f.ref.value*m.ref.value,{array:y}=s.ref.value,x=d.ref.value;if(!(0,i.h)(t)){let e=0;if(a(t,t=>(e+=p.X.size(t),!0),!0),0===e)return!1;e===b&&(t=i.GK)}let S=!1,T=-1,C=-1;if((0,i.h)(t)){let e=(0,o.Mz)(r,x);-1!==e.status?(S=x!==e.status)&&(0,o.hA)(y,e.status,b):S=(0,o.O9)(y,p.X.ofLength(b),r),T=e.average,C=e.status}else(S=a(t,e=>(0,o.O9)(y,e,r),!0))&&(T=(0,o.sb)(r,x),n&&-1!==n.status&&-1===T&&o.E5.isReverse(n.action,r)&&i.o_.areEqual(t,n.loci)&&(T=0===(C=n.status)?0:.5));return S&&(-1===T&&0===(T=(0,h.pq)(y,b))&&(C=0),n&&(n.action=r,n.loci=t,n.status=x),c.IO.updateIfChanged(l,C),-1===C&&c.IO.update(s,s.ref.value),c.IO.updateIfChanged(u,T),c.IO.updateIfChanged(d,C)),S},a.setOverpaint=function(e,t,r,a,n){if(!e)return;let{tOverpaint:i,dOverpaintType:o,dOverpaint:s,uGroupCount:l,instanceCount:u,instanceGranularity:f}=e.values,m=f.ref.value?u.ref.value:l.ref.value*u.ref.value,h=f.ref.value?"instance":"groupInstance";(0,d.mS)(t.layers.length?m:0,h,e.values);let{array:x}=i.ref.value;a&&(0,d.cr)(x,0,m);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,color:n,clear:i}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return i?(0,d.cr)(x,t,r):(0,d.jp)(x,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(o,h),c.IO.updateIfChanged(s,t.layers.length>0),0!==t.layers.length&&"instance"!==h&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,overpaintTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.hp)(e.values,o,a,i),t.meta.overpaintTexture=e.values.tOverpaintGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,overpaintTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.xp)(e.values,o,a,i),t.meta.overpaintTexture=e.values.tOverpaintGrid.ref.value)}}},a.setTransparency=function(e,t,r,a,n){if(!e)return;let{tTransparency:i,dTransparencyType:o,transparencyAverage:s,transparencyMin:l,dTransparency:u,uGroupCount:d,instanceCount:m,instanceGranularity:h}=e.values,x=h.ref.value?m.ref.value:d.ref.value*m.ref.value,S=h.ref.value?"instance":"groupInstance";(0,f.ei)(t.layers.length?x:0,S,e.values);let{array:T}=i.ref.value;a&&(0,f.gj)(T,0,x);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,value:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,f.r_)(T,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(s,(0,f.iM)(T,x)),c.IO.updateIfChanged(l,(0,f.Bb)(T,x)),c.IO.updateIfChanged(o,S),c.IO.updateIfChanged(u,t.layers.length>0),0!==t.layers.length&&"instance"!==S&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,transparencyTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.FK)(e.values,o,a,i),t.meta.transparencyTexture=e.values.tTransparencyGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,transparencyTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.qZ)(e.values,o,a,i),t.meta.transparencyTexture=e.values.tTransparencyGrid.ref.value)}}},a.setEmissive=function(e,t,r,a,n){if(!e)return;let{tEmissive:i,dEmissiveType:o,emissiveAverage:s,dEmissive:l,uGroupCount:u,instanceCount:d,instanceGranularity:f}=e.values,m=f.ref.value?d.ref.value:u.ref.value*d.ref.value,h=f.ref.value?"instance":"groupInstance";(0,S.BF)(t.layers.length?m:0,h,e.values);let{array:x}=i.ref.value;a&&(0,S.DQ)(x,0,m);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,value:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,S.rF)(x,t,r,n)},!1)}
7319if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(s,(0,S.JQ)(x,m)),c.IO.updateIfChanged(o,h),c.IO.updateIfChanged(l,t.layers.length>0),0!==t.layers.length&&"instance"!==h&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,emissiveTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.EH)(e.values,o,a,i),t.meta.emissiveTexture=e.values.tEmissiveGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,emissiveTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.Pl)(e.values,o,a,i),t.meta.emissiveTexture=e.values.tEmissiveGrid.ref.value)}}},a.setSubstance=function(e,t,r,a,n){if(!e)return;let{tSubstance:i,dSubstanceType:o,dSubstance:s,uGroupCount:l,instanceCount:u,instanceGranularity:d}=e.values,f=d.ref.value?u.ref.value:l.ref.value*u.ref.value,m=d.ref.value?"instance":"groupInstance";(0,x.$l)(t.layers.length?f:0,m,e.values);let{array:h}=i.ref.value;a&&(0,x.fR)(h,0,f);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,material:n,clear:i}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return i?(0,x.fR)(h,t,r):(0,x.wD)(h,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(o,m),c.IO.updateIfChanged(s,t.layers.length>0),0!==t.layers.length&&"instance"!==m&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,substanceTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.Z9)(e.values,o,a,i),t.meta.substanceTexture=e.values.tSubstanceGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,substanceTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.z6)(e.values,o,a,i),t.meta.substanceTexture=e.values.tSubstanceGrid.ref.value)}}},a.setClipping=function(e,t,r,a){if(!e)return;let{tClipping:n,dClippingType:i,dClipping:o,uGroupCount:s,instanceCount:l,instanceGranularity:u}=e.values,d=u.ref.value?l.ref.value:s.ref.value*l.ref.value,{layers:f}=t,h=u.ref.value?"instance":"groupInstance";(0,m.Q4)(f.length?d:0,h,e.values);let{array:g}=n.ref.value;a&&(0,m.ms)(g,0,d);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,groups:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,m.zr)(g,t,r,n)},!1)}c.IO.update(n,n.ref.value),c.IO.updateIfChanged(i,h),c.IO.updateIfChanged(o,t.layers.length>0)},a.setThemeStrength=function(e,t){e&&(c.IO.updateIfChanged(e.values.uOverpaintStrength,t.overpaint),c.IO.updateIfChanged(e.values.uTransparencyStrength,t.transparency),c.IO.updateIfChanged(e.values.uEmissiveStrength,t.emissive),c.IO.updateIfChanged(e.values.uSubstanceStrength,t.substance))},a.setTransform=function(e,t,r){if(!e||!t&&!r)return;let{values:a}=e;t&&(s.yb.copy(a.matrix.ref.value,t),c.IO.update(a.matrix,a.matrix.ref.value)),r?(a.extraTransform.ref.value.set(r),c.IO.update(a.extraTransform,a.extraTransform.ref.value)):null===r&&((0,l.Sj)(a.extraTransform.ref.value,a.instanceCount.ref.value),c.IO.update(a.extraTransform,a.extraTransform.ref.value)),(0,l.WC)(a,a.invariantBoundingSphere.ref.value,a.instanceGrid.ref.value.cellSize,a.instanceGrid.ref.value.batchSize);let n=(0,u.Lo)(a.invariantBoundingSphere.ref.value,a.transform.ref.value,a.instanceCount.ref.value,0);c.IO.update(a.boundingSphere,n)}},5253:function(e,t,r){r.d(t,{a:function(){return to}});var a,n=r(7791),i=r(14086),o=r(1573),s=r(4376),l=r(91564),u=r(69126),c=r(96046),d=r(80898),p=r(67589),f=r(87144),m=r(36111),h=r(39967),g=r(39446),b=r(6579),y=r(67646),x=r(54185),S=r(68303),T=r(97187),C=r(67330),O=r(94828);let I={isoValue:o.f.IsoValueParam,wrap:i.e.Select("auto",i.e.arrayToOptions(["off","on","auto"])),floodfill:i.e.Select("off",i.e.arrayToOptions(["off","inside","outside"]),{description:"If and how to floodfill the volume. Note that this disables GPU support."})},A={...I,tryUseGpu:i.e.Boolean(!0,{hideIf:e=>"off"!==e.floodfill}),gpuDataType:i.e.Select("byte",i.e.arrayToOptions(["byte","float","halfFloat"]),{hideIf:e=>!e.tryUseGpu||"off"!==e.floodfill})};function w(e,t){return"on"===t||"off"!==t&&"xyz"===e.periodicity}function D(e,t){if(e.grid.cells.data.length<1e3)return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:a}=(0,h.f$)(r,1);return a<=t.maxTextureSize/2}function E(e,t,r,a,n){var l;return"off"===a.floodfill&&a.tryUseGpu&&n&&(l=n).extensions.colorBufferFloat&&l.extensions.textureFloat&&l.extensions.drawBuffers&&D(t,n)?(0,O.Y)({defaultProps:i.e.getDefaultValues(_),createGeometry:R,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.gpuDataType!==a.gpuDataType||r.wrap!==a.wrap},geometryUtils:g.q.Utils,mustRecreate:(e,t,r)=>"off"!==t.floodfill||!t.tryUseGpu||!r||!D(e.volume,r),dispose:e=>{e.vertexTexture.ref.value.destroy(),e.groupTexture.ref.value.destroy(),e.normalTexture.ref.value.destroy(),e.doubleBuffer.destroy()}},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(_),createGeometry:B,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.wrap!==a.wrap||r.floodfill!==a.floodfill},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseGpu&&!!r&&D(e.volume,r)},e)}function M(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Isosurface.Loci(e,t.isoValue,r)}function P(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return o.f.Isosurface.Loci(t,a.isoValue,r);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function k(e,t,r,a,n){return(0,h.uw)(e,t,{isoValue:a.isoValue},n)}async function B(e,t,r,a,n,i){e.runtime.update({message:"Marching cubes..."});let u=o.f.IsoValue.toAbsolute(n.isoValue,t.grid.stats).absoluteValue,c=t.grid.cells;"off"!==n.floodfill&&(c=f.es.createFloodfilled(c,u,n.floodfill)),w(t,n.wrap)&&(c=(0,h.kp)(c));let d=(0,m.d_)(new Int32Array(t.grid.cells.data.length)),p=await (0,l.Y)({isoLevel:u,scalarField:c,idField:f.es.create(c.space,f.es.Data1(d))},i).runAsChild(e.runtime),g=o.r.getGridToCartesianTransform(t.grid);return s.K.transform(p,g),e.webgl&&!e.webgl.isWebGL2?(s.K.uniformTriangleGroup(p,!1),S.IO.updateIfChanged(p.varyingGroup,!1)):S.IO.updateIfChanged(p.varyingGroup,!0),p.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),p}let _={...s.K.Params,...g.q.Params,...I,...A,quality:{...s.K.Params.quality,isEssential:!1}};function R(e,t,r,n,i,s){let{webgl:l}=e;if(!l)throw Error("webgl context required to create volume isosurface texture-mesh");if(t.grid.cells.data.length<=1)return g.q.createEmpty(s);w(t,i.wrap)&&(t=(0,h.c$)(t));let{max:u,min:c}=t.grid.stats,d=o.f.IsoValue.toAbsolute(i.isoValue,t.grid.stats).absoluteValue,p=(d-c)/(u-c),f=t.grid.cells.space.axisOrderSlowToFast,m=t.grid.cells.data.length,y=o.f.getBoundingSphere(t),x=e=>{let{texture:r,gridDimension:n,gridTexDim:o,gridDataDim:s,gridTexScale:u,transform:c}=a.get(t,l,i),h=null==e?void 0:e.doubleBuffer.get(),x=(0,b.a)(l,r,n,o,s,u,c,p,d<0,!1,f,!0,null==h?void 0:h.vertex,null==h?void 0:h.group,null==h?void 0:h.normal);return g.q.create(x.vertexCount,m,x.vertexTexture,x.groupTexture,x.normalTexture,y,e)},S=x(s);return S.meta.webgl=l,S.meta.reset=()=>{a.clear(t),x(S)},S}async function F(e,t,r,a,n,i){e.runtime.update({message:"Marching cubes..."});let s=o.f.IsoValue.toAbsolute(n.isoValue,t.grid.stats).absoluteValue,u=t.grid.cells;"off"!==n.floodfill&&(u=f.es.createFloodfilled(u,s,n.floodfill)),w(t,n.wrap)&&(u=(0,h.kp)(u));let d=(0,m.d_)(new Int32Array(t.grid.cells.data.length)),p=await (0,l.X)({isoLevel:s,scalarField:u,idField:f.es.create(u.space,f.es.Data1(d))},i).runAsChild(e.runtime),g=o.r.getGridToCartesianTransform(t.grid);return c.x.transform(p,g),p.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),p}!function(e){let t="volume-isosurface-texture";e.descriptor=(0,y.d)({name:t}),e.clear=function(e){delete e._propertyData[t]},e.get=function(r,a,n){var i,s;let{gpuDataType:l}=n,u=w(r,n.wrap),c=o.r.getGridToCartesianTransform(r.grid),d=f.AO.clone(r.grid.cells.space.dimensions),{width:p,height:m,powerOfTwoSize:g}=(0,h.f$)(d,1),b=f.AO.create(p,m,0),y=f.AO.subScalar((0,f.AO)(),d,u?1:0),x=f.Sg.create(p/g,m/g);if(g>a.maxTextureSize/2)throw Error("volume too large for gpu isosurface extraction");let S="halfFloat"!==l||a.extensions.textureHalfFloat?l:"float";if((null===(i=r._propertyData[t])||void 0===i?void 0:i.dataType)!==S||(null===(s=r._propertyData[t])||void 0===s?void 0:s.wrap)!==u){let n="byte"===S?a.resources.texture("image-uint8","alpha","ubyte","linear"):"halfFloat"===S?a.resources.texture("image-float16","alpha","fp16","linear"):a.resources.texture("image-float32","alpha","float","linear");r._propertyData[t]={texture:n,dataType:S,wrap:u},n.define(g,g),n.load((0,h.A1)(r,"data",1,S),!0),r.customProperties.add(e.descriptor),r.customProperties.assets(e.descriptor,[{dispose:()=>n.destroy()}])}return d[0]+=1,d[1]+=1,{texture:r._propertyData[t].texture,transform:c,gridDimension:d,gridTexDim:b,gridDataDim:y,gridTexScale:x}}}(a||(a={}));
7319let L={...c.x.Params,...I,quality:{...c.x.Params.quality,isEssential:!1},sizeFactor:i.e.Numeric(3,{min:0,max:10,step:.1})};function z(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(L),createGeometry:F,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.wrap!==a.wrap||r.floodfill!==a.floodfill},geometryUtils:c.x.Utils},e)}let N={solid:(e,t)=>(0,u.rR)("Isosurface mesh",e,t,E,M),wireframe:(e,t)=>(0,u.rR)("Isosurface wireframe",e,t,z,M)},G={..._,...L,visuals:i.e.MultiSelect(["solid"],i.e.objectToOptions(N)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},U=(0,u.FX)({name:"isosurface",label:"Isosurface",description:"Displays a triangulated isosurface of volumetric data.",factory:function(e,t){return n.hX.createMulti("Isosurface",e,t,n.hX.StateBuilder,N)},getParams:function(e,t){let r=i.e.clone(G);return r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.relative(2),t.grid.stats),r},defaultValues:i.e.getDefaultValues(G),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var V=r(67546),j=r(98510),H=r(72558),q=r(23789),X=r(70371),W=r(20178),K=r(81421),Q=r(43975),Z=r(38964),Y=r(58463),$=r(38675),J=r(23833),ee=r(97667),et=r(15613);let er={...j.Ee.Params,quality:{...j.Ee.Params.quality,isEssential:!1},dimension:i.e.MappedStatic("x",{x:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),y:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),z:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),relativeX:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:e=>"grid"!==e.mode,description:"Slice position in grid coordinates."}),isoValue:o.f.IsoValueParam,mode:i.e.Select("grid",i.e.arrayToOptions(["grid","frame","plane"]),{description:"Grid: slice through the volume along the grid axes in integer steps. Frame: slice through the volume along arbitrary axes in any step size. Plane: an arbitrary plane defined by point and normal."}),offset:i.e.Numeric(0,{min:-1,max:1,step:.01},{isEssential:!0,immediateUpdate:!0,hideIf:e=>"frame"!==e.mode,description:"Relative offset from center."}),axis:i.e.Select("a",i.e.arrayToOptions(["a","b","c"]),{isEssential:!0,hideIf:e=>"frame"!==e.mode,description:"Axis of the frame."}),rotation:i.e.Group({axis:i.e.Vec3(Q.A.create(1,0,0),{},{description:"Axis of rotation"}),angle:i.e.Numeric(0,{min:-180,max:180,step:1},{immediateUpdate:!0,description:"Axis rotation angle in Degrees"})},{isExpanded:!0,hideIf:e=>"frame"!==e.mode}),plane:i.e.Group({point:i.e.Vec3(Q.A.create(0,0,0),{},{description:"Plane point"}),normal:i.e.Vec3(Q.A.create(1,0,0),{},{description:"Plane normal"})},{isExpanded:!0,hideIf:e=>"plane"!==e.mode})};async function ea(e,t,r,a,n,i){switch(n.mode){case"frame":return ei(e,t,r,a,n,i);case"grid":return es(e,t,r,a,n,i);case"plane":return eo(e,t,r,a,n,i);default:(0,ee.UT)(n.mode)}}function en(e,t,r,a,n,i){let{m:s,width:l,height:u}=r,{cells:{space:c},stats:d}=e.grid,{min:p,max:f}=d,m="uniform"===t.color.granularity,h="color"in t.color&&t.color.color?t.color.color:()=>(0,X.Il)(16777215),g=(0,Q.A)(),b=o.r.getGridToCartesianTransform(e.grid),y=$.y.invert((0,$.y)(),b),[x,S,T]=c.dimensions,C=new Uint8Array(l*u*4),O=new Uint8Array(l*u*4),I=new Float32Array(l*u),A=(0,Q.A)(),w=(0,H.cH)((0,Q.A)(),(0,Q.A)()),D=o.r.makeGetTrilinearlyInterpolated(e.grid,"none"),E=0;for(let e=0;e<u;++e)for(let t=0;t<l;++t){let r=(0,J.uZ)(t+.5,0,l-1)/l-.5,a=(0,J.uZ)(e+.5,0,u-1)/u-.5;Q.A.set(g,a,-r,0),Q.A.transformMat4(g,g,s),Q.A.copy(A,g),Q.A.transformMat4(A,A,y);let n=Math.trunc(A[0]),i=Math.trunc(A[1]),o=Math.trunc(A[2]);Q.A.copy(w.position,g);let d=h(w,!1);X.Il.toArray(d,C,E);let b=(0,J.Fv)(D(g),p,f);m&&(C[E]*=b,C[E+1]*=b,C[E+2]*=b),I[E/4]=b,n>=0&&n<x&&i>=0&&i<S&&o>=0&&o<T&&(0,K.lP)(c.dataOffset(n,i,o),O,E),E+=4}let M=new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]);(0,q.ST)(s,M,0,4);let P=(0,J.uZ)((0,J.Fv)(o.f.IsoValue.toAbsolute(a,d).absoluteValue,p,f),0,1),k=j.Ee.create({width:l,height:u,array:C,flipY:!0},M,{width:l,height:u,array:O,flipY:!0},{width:l,height:u,array:I,flipY:!0},n,P,i);return k.setBoundingSphere(o.f.getBoundingSphere(e)),k}async function ei(e,t,r,a,n,i){let{offset:s,isoValue:l}=n,{size:u,major:c,minor:d,normal:p,center:f,trim:m,resolution:h}=function(e,t){let{axis:r,rotation:a,mode:n}=t,i=o.r.getGridToCartesianTransform(e.grid),s=$.y.invert((0,$.y)(),i),[l,u,c]=e.grid.cells.space.dimensions,d=Q.A.create(l,0,0),p=Q.A.create(0,u,0),f=Q.A.create(0,0,c),m=Math.max(l,u,c)/Math.max(l,u,c),h=Q.A.create(0,0,0),g=Q.A.create(l,u,c);Q.A.transformMat4(h,h,i),Q.A.transformMat4(g,g,i);let b=Q.A.center((0,Q.A)(),g,h),y=(0,Q.A)(),x=(0,Q.A)(),S=(0,Q.A)(),T=(0,Q.A)();if("c"===r?(Q.A.set(y,l,u,c),Q.A.copy(x,d),Q.A.copy(S,p),Q.A.copy(T,f)):("b"===r?(Q.A.set(y,l,c,u),Q.A.copy(x,d),Q.A.copy(T,p)):(Q.A.set(y,u,c,l),Q.A.copy(T,d),Q.A.copy(x,p)),Q.A.copy(S,f)),0!==a.angle){let e=(0,Q.A)();Q.A.scaleAndAdd(e,e,d,a.axis[0]),Q.A.scaleAndAdd(e,e,p,a.axis[1]),Q.A.scaleAndAdd(e,e,f,a.axis[2]),Q.A.normalize(e,e);let t=$.y.fromRotation((0,$.y)(),(0,Y.Id)(a.angle),e);Q.A.transformDirection(x,x,t),Q.A.transformDirection(S,S,t),Q.A.transformDirection(T,T,t)}if("frame"===n){let e=Q.A.distance(h,g),t=Q.A.distance(h,g)*Math.SQRT2;Q.A.set(y,t,t,e)}return Q.A.transformDirection(x,x,i),Q.A.transformDirection(S,S,i),Q.A.transformDirection(T,T,i),{size:y,major:x,minor:S,normal:T,center:b,trim:{type:3,center:Q.A.create(l/2,u/2,c/2),scale:Q.A.create(l,u,c),rotation:Z.D.identity(),transform:s},resolution:m}}(t,n),g=1/h,b=Q.A.create(u[0],u[1],1),y=Q.A.setMagnitude((0,Q.A)(),p,u[2]/2),x=Math.floor(u[1]*g),S=Math.floor(u[0]*g),T=$.y.identity(),C=(0,Q.A)(),O=(0,Q.A)();return Q.A.add(C,f,c),$.y.targetTo(T,f,C,d),Q.A.scaleAndAdd(O,f,y,s),$.y.setTranslation(T,O),$.y.mul(T,T,$.y.rotY90),$.y.scale(T,T,b),en(t,a,{m:T,width:x,height:S},l,m,i)}async function eo(e,t,r,a,n,i){let{plane:{point:s,normal:l},isoValue:u}=n,c=$.y.fromPlane((0,$.y)(),l,s),d=o.r.getGridToCartesianTransform(t.grid),p=$.y.invert((0,$.y)(),d),[f,m,h]=t.grid.cells.space.dimensions,g=1/(Math.max(f,m,h)/Math.max(f,m,h)),b=Q.A.distance(Q.A.create(0,0,0),Q.A.create(f,m,h))*Math.SQRT2,y=Q.A.set((0,Q.A)(),b,b,b);$.y.mul(c,c,$.y.rotY90),$.y.scale(c,c,y);let x=Math.floor(y[1]*g);return en(t,a,{m:c,width:x,height:Math.floor(y[0]*g)},u,{type:3,center:Q.A.create(f/2,m/2,h/2),scale:Q.A.create(f,m,h),rotation:Z.D.identity(),transform:p},i)}async function es(e,t,r,a,n,i){let{dimension:{name:s},isoValue:l}=n,{cells:{space:u,data:c},stats:d}=t.grid,{min:p,max:f}=d,m="uniform"===a.color.granularity,h="color"in a.color&&a.color.color?a.color.color:()=>(0,X.Il)(16777215),{width:g,height:b,x:y,y:x,z:S,x0:T,y0:C,z0:O,nx:I,ny:A,nz:w}=eu(t.grid,n),D=new Float32Array("x"===s||"relativeX"===s?[y,0,0,y,x,0,y,0,S,y,x,S]:"y"===s||"relativeY"===s?[0,x,0,y,x,0,0,x,S,y,x,S]:[0,0,S,0,x,S,y,0,S,y,x,S]),E=new Uint8Array(g*b*4),M=function(e,t){let{space:r}=e.cells,{width:a,height:n,x0:i,y0:o,z0:s,nx:l,ny:u,nz:c}=eu(e,t),d=new Uint8Array(a*n*4),p=0;for(let e=o;e<u;++e)for(let t=i;t<l;++t)for(let a=s;a<c;++a)(0,K.lP)(r.dataOffset(t,e,a),d,p),p+=4;return d}(t.grid,n),P=new Float32Array(g*b),k=o.r.getGridToCartesianTransform(t.grid),B=(0,H.cH)((0,Q.A)(),(0,Q.A)()),_=0;for(let e=C;e<A;++e)for(let t=T;t<I;++t)for(let r=O;r<w;++r){Q.A.set(B.position,t,e,r),Q.A.transformMat4(B.position,B.position,k),X.Il.toArray(h(B,!1),E,_);let a=(0,J.Fv)(u.get(c,t,e,r),p,f);
7319m&&(E[_]*=a,E[_+1]*=a,E[_+2]*=a),P[_/4]=a,_+=4}let R=o.r.getGridToCartesianTransform(t.grid);(0,q.ST)(R,D,0,4);let F=j.Ee.createEmptyTrim(),L=(0,J.uZ)((0,J.Fv)(o.f.IsoValue.toAbsolute(l,d).absoluteValue,p,f),0,1),z=j.Ee.create({width:g,height:b,array:E,flipY:!0},D,{width:g,height:b,array:M,flipY:!0},{width:g,height:b,array:P,flipY:!0},F,L,i);return z.setBoundingSphere(o.f.getBoundingSphere(t)),z}function el(e,t){return(0,J.uZ)(Math.round((e-1)*t),0,e-1)}function eu(e,t){let r,a,n,i,o;let{dimension:{name:s,params:l}}=t,{space:u}=e.cells,c=0,d=0,p=0,[f,m,h]=u.dimensions;return"x"===s?(n=l,i=m,o=h,r=h,a=m,f=(c=n)+1):"y"===s?(n=f,i=l,o=h,r=h,a=f,m=(d=i)+1):"z"===s?(n=f,i=m,o=l,r=f,a=m,h=(p=o)+1):"relativeX"===s?(n=el(f,l),i=m,o=h,r=h,a=m,f=(c=n)+1):"relativeY"===s?(n=f,i=el(m,l),o=h,r=h,a=f,m=(d=i)+1):(n=f,i=m,o=el(h,l),r=f,a=m,h=(p=o)+1),{width:r,height:a,x:n,y:i,z:o,x0:c,y0:d,z0:p,nx:f,ny:m,nz:h}}function ec(e,t,r){if("grid"!==r.mode)return o.f.Loci(e,t);{let a=function(e,t){let{space:r}=e.cells,{width:a,height:n,x0:i,y0:o,z0:s,nx:l,ny:u,nz:c}=eu(e,t),d=new Uint32Array(a*n),p=0;for(let e=o;e<u;++e)for(let t=i;t<l;++t)for(let a=s;a<c;++a)d[p]=r.dataOffset(t,e,a),p+=1;return d}(e.grid,r),n=et.O.ofUnsortedArray(a);return o.f.Cell.Loci(e,[{indices:n,instances:t}])}}function ed(e,t){let r=T.X.ofLength(e.instances.length);return ec(e,r,t)}function ep(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return ec(t,r,a);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function ef(e,t,r,a,n){return(0,h.uw)(e,t,void 0,n)}function em(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(er),createGeometry:ea,createLocationIterator:h.$l,getLoci:ep,eachLocation:ef,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=r.dimension.name!==a.dimension.name||r.dimension.params!==a.dimension.params||r.mode!==a.mode||!Q.A.equals(r.rotation.axis,a.rotation.axis)||r.rotation.angle!==a.rotation.angle||r.offset!==a.offset||r.axis!==a.axis||!Q.A.equals(r.plane.point,a.plane.point)||!Q.A.equals(r.plane.normal,a.plane.normal)||!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||!W.U.areEqual(n.color,i.color)},geometryUtils:j.Ee.Utils},e)}let eh=(0,u.FX)({name:"slice",label:"Slice",description:"Slice of volume rendered as image with interpolation.",factory:function(e,t){return(0,u.rR)("Slice",e,t,em,ed)},getParams:function(e,t){let r=i.e.clone(er),a=t.grid.cells.space.dimensions;return r.dimension=i.e.MappedStatic("x",{x:i.e.Numeric(0,{min:0,max:a[0]-1,step:1},{immediateUpdate:!0}),y:i.e.Numeric(0,{min:0,max:a[1]-1,step:1},{immediateUpdate:!0}),z:i.e.Numeric(0,{min:0,max:a[2]-1,step:1},{immediateUpdate:!0}),relativeX:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:e=>"grid"!==e.mode}),r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.absolute(t.grid.stats.min),t.grid.stats),r},defaultValues:i.e.getDefaultValues(er),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var eg=r(48930),ev=r(74219);function eb(e,t){let r=(0,eg.XZ)();return eg.XZ.add(r,e),eg.XZ.transform(r,r,t),r}function ey(e){if("matrix"===e.transform.kind)return{unitToCartn:f.yb.mul((0,f.yb)(),e.transform.matrix,f.yb.fromScaling((0,f.yb)(),e.cells.space.dimensions)),cellDim:f.yb.getScaling((0,f.AO)(),e.transform.matrix)};let t=e.transform.fractionalBox,r=eg.XZ.size((0,f.AO)(),t);return{unitToCartn:f.yb.mul3((0,f.yb)(),e.transform.cell.fromFractional,f.yb.fromTranslation((0,f.yb)(),t.min),f.yb.fromScaling((0,f.yb)(),r)),cellDim:f.AO.div((0,f.AO)(),e.transform.cell.size,e.cells.space.dimensions)}}async function ex(e,t,r,a,n,i){let{runtime:s,webgl:l}=e;if(void 0===l)throw Error("DirectVolumeVisual requires `webgl` in VisualContext");return l.isWebGL2?function(e,t,r,a,n){let i;let s=r.grid.cells.space.dimensions;
7319if(Math.max(...s)>t.max3dTextureSize/2)throw Error("volume too large for direct-volume rendering");let l="halfFloat"!==a.dataType||t.extensions.textureHalfFloat?a.dataType:"float",u=(0,h.Zf)(r,l),c=o.r.getGridToCartesianTransform(r.grid),d=eb(s,c);(i=n&&n.dataType.ref.value===l?n.gridTexture.ref.value:"byte"===l?t.resources.texture("volume-uint8","rgba","ubyte","linear"):"halfFloat"===l?t.resources.texture("volume-float16","rgba","fp16","linear"):t.resources.texture("volume-float32","rgba","float","linear")).load(u);let{unitToCartn:p,cellDim:f}=ey(r.grid),m=r.grid.cells.space.axisOrderSlowToFast;return ev.A.create(d,s,c,p,f,i,r.grid.stats,!1,m,l,n)}(0,l,t,n,i):function(e,t,r,a,n){let i;let s=r.grid.cells.space.dimensions,{width:l,height:u}=(0,h.f$)(s);if(Math.max(l,u)>t.maxTextureSize/2)throw Error("volume too large for direct-volume rendering");let c="halfFloat"!==a.dataType||t.extensions.textureHalfFloat?a.dataType:"float",d=(0,h.A1)(r,"normals",0,c),p=o.r.getGridToCartesianTransform(r.grid),f=eb(s,p);(i=n&&n.dataType.ref.value===c?n.gridTexture.ref.value:"byte"===c?t.resources.texture("image-uint8","rgba","ubyte","linear"):"halfFloat"===c?t.resources.texture("image-float16","rgba","fp16","linear"):t.resources.texture("image-float32","rgba","float","linear")).load(d);let{unitToCartn:m,cellDim:g}=ey(r.grid),b=r.grid.cells.space.axisOrderSlowToFast;return ev.A.create(f,s,p,m,g,i,r.grid.stats,!1,b,c,n)}(0,l,t,n,i)}function eS(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Loci(e,r)}function eT(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=C.h.ofSingleton(l),r=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:r,instances:e}])}return p.Rh}function eC(e,t,r,a,n){return(0,h.uw)(e,t,void 0,n)}let eO={...ev.A.Params,quality:{...ev.A.Params.quality,isEssential:!1},dataType:i.e.Select("byte",i.e.arrayToOptions(["byte","float","halfFloat"]))};function eI(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(eO),createGeometry:ex,createLocationIterator:h.$l,getLoci:eT,eachLocation:eC,setUpdateState:(e,t,r,a)=>{e.createGeometry=r.dataType!==a.dataType},geometryUtils:ev.A.Utils,dispose:e=>{e.gridTexture.ref.value.destroy()}},e)}let eA=(0,u.FX)({name:"direct-volume",label:"Direct Volume",description:"Direct rendering of volumetric data.",factory:function(e,t){return(0,u.rR)("Direct Volume",e,t,eI,eS)},getParams:function(e,t){let r=i.e.clone(eO);return r.controlPoints.getVolume=()=>t,r},defaultValues:i.e.getDefaultValues(eO),defaultColorTheme:{name:"volume-value"},defaultSizeTheme:{name:"uniform"},locationKinds:["position-location","direct-location"],isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var ew=r(88575);let eD={segments:i.e.Converted(e=>e.map(e=>`${e}`),e=>e.map(e=>parseInt(e)),i.e.MultiSelect(["0"],i.e.arrayToOptions(["0"]),{isEssential:!0}))};function eE(e,t){if(e.grid.cells.data.length<1e3)return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:a}=(0,h.f$)(r,1);return a<=t.maxTextureSize/2}let eM=(0,f.yb)();function eP(e,t){let r=o.r.getGridToCartesianTransform(e),a=f.yb.fromTranslation(eM,t.min);return f.yb.mul((0,f.yb)(),r,a)}function ek(e,t,r,a,n){var l;return a.tryUseGpu&&n&&(l=n).extensions.colorBufferFloat&&l.extensions.textureFloat&&l.extensions.drawBuffers&&eE(t,n)?(0,O.Y)({defaultProps:i.e.getDefaultValues(eL),createGeometry:eN,createLocationIterator:(e,t)=>{let r=o.f.Segment.Location(e,t);return(0,H.OF)(e.grid.cells.data.length,e.instances?e.instances.length:1,1,()=>r)},getLoci:e_,eachLocation:eR,setUpdateState:(e,t,r,a)=>{},geometryUtils:g.q.Utils,mustRecreate:(e,t,r)=>!t.tryUseGpu||!r||!eE(e.volume,r),dispose:e=>{e.vertexTexture.ref.value.destroy(),e.groupTexture.ref.value.destroy(),e.normalTexture.ref.value.destroy(),e.doubleBuffer.destroy()}},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(eL),createGeometry:eF,createLocationIterator:(e,t)=>{let r=o.f.Segment.Location(e,t);return(0,H.OF)(e.grid.cells.data.length,e.instances?e.instances.length:1,1,()=>r)},getLoci:e_,eachLocation:eR,setUpdateState:(e,t,r,a)=>{},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseGpu&&!!r&&eE(e.volume,r)},e)}function eB(e,t){let r=et.O.ofUnsortedArray(t.segments),a=T.X.ofLength(e.instances.length);return o.f.Segment.Loci(e,[{segments:r,instances:a}])}function e_(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),a=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,a);if("object"===e||s===d.i.Null){let e=C.h.ofSingleton(r);return o.f.Segment.Loci(t,[{segments:e,instances:a}])}{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:a}])}}return p.Rh}function eR(e,t,r,a,n){let i=et.O.ofSingleton(r);return(0,h.uw)(e,t,{segments:i},n)}async function eF(e,t,r,a,n,i){let u=o.f.Segmentation.get(t);if(!u)throw Error("missing volume segmentation");e.runtime.update({message:"Marching cubes..."});let c=ew.X.clone(u.bounds[r]);ew.X.expand(c,c,f.AO.create(2,2,2));let d=function(e,t,r){let a=r.data,n=r.space.dataOffset,i=ew.X.size((0,f.AO)(),t),[o,s,l]=i,u=o-1,c=s-1,d=l-1,[p,m,h]=t.min,[g,b,y]=t.max,x=[...r.space.axisOrderSlowToFast],S=f.es.Space(i,x,Uint8Array),T=f.es.create(S,S.create()),C=T.data,O=S.set;for(let t=0;t<l;++t)for(let r=0;r<s;++r)for(let i=0;i<o;++i){let o=e.includes(a[n(i+p,r+m,t+h)])?255:0,s=e.includes(a[n(Math.min(u+g,i+1+p),r+m,t+h)])?255:0,l=e.includes(a[n(Math.max(0,i-1+p),r+m,t+h)])?255:0,f=e.includes(a[n(i+p,Math.min(c+b,r+1+m),t+h)])?255:0,x=e.includes(a[n(i+p,Math.max(0,r-1+m),t+h)])?255:0,S=e.includes(a[n(i+p,r+m,Math.min(d+y,t+1+h))])?255:0,T=e.includes(a[n(i+p,r+m,Math.max(0,t-1+h))])?255:0;O(C,i,r,t,Math.round((o+o+s+l+f+x+S+T)/8))}return T}(Array.from(u.segments.get(r).values()),c,t.grid.cells),p=(0,m.d_)(new Int32Array(d.data.length)),h=await (0,l.Y)({isoLevel:128,
7319scalarField:d,idField:f.es.create(d.space,f.es.Data1(p))},i).runAsChild(e.runtime),g=eP(t.grid,c);s.K.transform(h,g),e.webgl&&!e.webgl.isWebGL2?(s.K.uniformTriangleGroup(h,!1),S.IO.updateIfChanged(h.varyingGroup,!1)):S.IO.updateIfChanged(h.varyingGroup,!0);let b=T.X.ofLength(t.instances.length),y=C.h.ofSingleton(r);return h.setBoundingSphere(o.f.Segment.getBoundingSphere(t,[{segments:y,instances:b}])),h}let eL={...s.K.Params,...g.q.Params,...eD,quality:{...s.K.Params.quality,isEssential:!1},tryUseGpu:i.e.Boolean(!0)},ez="segment-texture";async function eN(e,t,r,a,n,i){if(!e.webgl)throw Error("webgl context required to create volume segment texture-mesh");if(t.grid.cells.data.length<=1)return g.q.createEmpty(i);let{texture:s,gridDimension:l,gridTexDim:u,gridDataDim:c,gridTexScale:d,transform:p}=function(e,t,r){let a=o.f.Segmentation.get(e);if(!a)throw Error("missing volume segmentation");let{resources:n}=r,i=ew.X.clone(a.bounds[t]);ew.X.expand(i,i,f.AO.create(2,2,2));let s=eP(e.grid,i),l=ew.X.size((0,f.AO)(),i),{width:u,height:c,powerOfTwoSize:d}=(0,h.f$)(l,1),p=f.AO.create(u,c,0),m=f.AO.clone(l),g=f.Sg.create(u/d,c/d);if(d>r.maxTextureSize/2)throw Error("volume too large for gpu segment extraction");r.namedTextures[ez]||(r.namedTextures[ez]=n.texture("image-uint8","alpha","ubyte","linear"));let b=r.namedTextures[ez];b.define(d,d);let y=Array.from(a.segments.get(t).values());return b.load((0,h.qd)(e,y,i,1),!0),l[0]+=1,l[1]+=1,{texture:b,transform:s,gridDimension:l,gridTexDim:p,gridDataDim:m,gridTexScale:g}}(t,r,e.webgl),m=t.grid.cells.space.axisOrderSlowToFast,y=null==i?void 0:i.doubleBuffer.get(),x=(0,b.a)(e.webgl,s,l,u,c,d,p,.5,!1,!1,m,!0,null==y?void 0:y.vertex,null==y?void 0:y.group,null==y?void 0:y.normal),S=t.grid.cells.data.length,O=T.X.ofLength(t.instances.length),I=C.h.ofSingleton(r),A=o.f.Segment.getBoundingSphere(t,[{segments:I,instances:O}]);return g.q.create(x.vertexCount,S,x.vertexTexture,x.groupTexture,x.normalTexture,A,i)}function eG(e,t){return et.O.ofUnsortedArray(e.segments)}let eU={segment:(e,t)=>(0,u.rR)("Segment mesh",e,t,ek,eB,eG)},eV={...eL,visuals:i.e.MultiSelect(["segment"],i.e.objectToOptions(eU)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},ej=(0,u.FX)({name:"segment",label:"Segment",description:"Displays a triangulated segment of volumetric data.",factory:function(e,t){return n.hX.createMulti("Segment",e,t,n.hX.StateBuilder,eU)},getParams:function(e,t){let r=i.e.clone(eV),a=o.f.Segmentation.get(t);if(a){let e=Array.from(a.segments.keys());r.segments=i.e.Converted(e=>e.map(e=>`${e}`),e=>e.map(e=>parseInt(e)),i.e.MultiSelect(e.map(e=>`${e}`),i.e.arrayToOptions(e.map(e=>`${e}`)),{isEssential:!0}))}return r},defaultValues:i.e.getDefaultValues(eV),defaultColorTheme:{name:"volume-segment"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!!o.f.Segmentation.get(e)});var eH=r(39857),eq=r(89623),eX=r(2544),eW=r(34748),eK=r(93964),eQ=r(99696),eZ=r(89017),eY=r(1571);let e$={isoValue:o.f.IsoValueParam,perturbPositions:i.e.Boolean(!1)},eJ={...eH.s.Params,...s.K.Params,...e$,tryUseImpostor:i.e.Boolean(!0),detail:i.e.Numeric(0,{min:0,max:3,step:1},x.ev.CustomQualityParamInfo)};function e0(e,t,r,a,n){return a.tryUseImpostor&&n&&n.extensions.fragDepth&&n.extensions.textureFloat?(0,O.Y)({defaultProps:i.e.getDefaultValues(eJ),createGeometry:e5,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions},geometryUtils:eH.s.Utils,mustRecreate:(e,t,r)=>!t.tryUseImpostor||!r},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(eJ),createGeometry:e6,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions||r.sizeFactor!==a.sizeFactor||r.detail!==a.detail},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseImpostor&&!!r},e)}function e1(e){return{...f.yb.extractBasis(e),maxScale:f.yb.getMaxScaleOnAxis(e)}}let e2=new eY._Q,e3=(0,Q.A)();function e4({x:e,y:t,z:r,maxScale:a}){let n=(e2.float()-.5)*a,i=(e2.float()-.5)*a,o=(e2.float()-.5)*a;return Q.A.scale(e3,e,n),Q.A.scaleAndAdd(e3,e3,t,i),Q.A.scaleAndAdd(e3,e3,r,o),e3}function e5(e,t,r,a,n,i){let{cells:{space:s,data:l},stats:u}=t.grid,c=o.r.getGridToCartesianTransform(t.grid),d=o.f.IsoValue.toAbsolute(n.isoValue,u).absoluteValue,p=(0,Q.A)(),[f,m,h]=s.dimensions,g=Math.ceil(f*m*h/10),b=eX.L.create(g,Math.ceil(g/2),i),y=d<0,x=n.perturbPositions?e1(c):void 0;for(let e=0;e<h;++e)for(let t=0;t<m;++t)for(let r=0;r<f;++r){let a=s.get(l,r,t,e);if(!y&&a<d||y&&a>d)continue;let n=s.dataOffset(r,t,e);if(x){Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);let a=e4(x);Q.A.add(p,p,a)}else Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);b.add(p[0],p[1],p[2],n)}let S=b.getSpheres();return S.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),S}function e6(e,t,r,a,n,i){let{detail:s,sizeFactor:l}=n,{cells:{space:u,data:c},stats:d}=t.grid,p=o.r.getGridToCartesianTransform(t.grid),f=o.f.IsoValue.toAbsolute(n.isoValue,d).absoluteValue,m=(0,Q.A)(),[h,g,b]=u.dimensions,y=Math.ceil(h*g*b/10)*(0,eK.U)(s),x=eq.V.createState(y,Math.ceil(y/2),i),S=o.f.Cell.Location(t),T=a.size.size,C=f<0,O=n.perturbPositions?e1(p):void 0;for(let e=0;e<b;++e)for(let t=0;t<g;++t)for(let r=0;r<h;++r){let a=u.get(c,r,t,e);if(!C&&a<f||C&&a>f)continue;let n=u.dataOffset(r,t,e);S.cell=n;let i=T(S)*l;if(O){Q.A.set(m,r,t,e),Q.A.transformMat4(m,m,p);let a=e4(O);Q.A.add(m,m,a)}else Q.A.set(m,r,t,e),Q.A.transformMat4(m,m,p);x.currentGroup=n,(0,eW.H)(x,m,i,s)}let I=eq.V.getMesh(x);return I.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),I}let e8={...eQ.w.Params,...e$};function e7(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(e8),createGeometry:e9,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions},geometryUtils:eQ.w.Utils},e)}function e9(e,t,r,a,n,i){let{cells:{space:s,data:l},stats:u}=t.grid,c=o.r.getGridToCartesianTransform(t.grid),d=o.f.IsoValue.toAbsolute(n.isoValue,u).absoluteValue,p=(0,Q.A)(),[f,m,h]=s.dimensions,g=Math.ceil(f*m*h/10),b=eZ.U.create(g,Math.ceil(g/2),i),y=d<0,x=n.perturbPositions?e1(c):void 0;for(let e=0;e<h;++e)for(let t=0;t<m;++t)for(let r=0;r<f;++r){let a=s.get(l,r,t,e);if(!y&&a<d||y&&a>d)continue;let n=s.dataOffset(r,t,e);if(x){Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);let a=e4(x);Q.A.add(p,p,a)}else Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);b.add(p[0],p[1],p[2],n)}let S=b.getPoints();return S.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),S}function te(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Isosurface.Loci(e,t.isoValue,r)}function tt(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return o.f.Isosurface.Loci(t,a.isoValue,r);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function tr(e,t,r,a,n){return(0,h.uw)(e,t,{isoValue:a.isoValue},n)}let ta={sphere:(e,t)=>
7319(0,u.rR)("Dot sphere",e,t,e0,te),point:(e,t)=>(0,u.rR)("Dot point",e,t,e7,te)},tn={...eJ,...e8,visuals:i.e.MultiSelect(["sphere"],i.e.objectToOptions(ta)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},ti=(0,u.FX)({name:"dot",label:"Dot",description:"Displays dots of volumetric data.",factory:function(e,t){return n.hX.createMulti("Dot",e,t,n.hX.StateBuilder,ta)},getParams:function(e,t){let r=i.e.clone(tn);return r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.relative(2),t.grid.stats),r},defaultValues:i.e.getDefaultValues(tn),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},locationKinds:["cell-location","position-location"],isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});class to extends n.Qx{constructor(){super(),(0,V.mt)(to.BuiltIn,(e,t)=>{if(e.name!==t)throw Error(`Fix BuiltInVolumeRepresentations to have matching names. ${e.name} ${t}`);this.add(e)})}}(to||(to={})).BuiltIn={"direct-volume":eA,dot:ti,isosurface:U,segment:ej,slice:eh}},69126:function(e,t,r){r.d(t,{FX:function(){return f},rR:function(){return m}});var a=r(14086),n=r(60843),i=r(67241),o=r(67589),s=r(11650),l=r(87144),u=r(7791),c=r(54185),d=r(89987),p=r(54854);function f(e){return e}function m(e,t,r,c,f,m=()=>[-1]){let h,g,b,y,x=0,{webgl:S}=t,T=new d.x,C=new u.hX.GeometryState,O=(0,i.xH)(),I=[],A=u.hX.createState(),w=new Map,D=n.Q.createEmpty();async function E(e,t){var r;let a=w.get(t);return a?(null===(r=a.mustRecreate)||void 0===r?void 0:r.call(a,{volume:h,key:t},y,S))&&(a.destroy(),a=c(O,h,t,y,S),w.set(t,a)):(a=c(O,h,t,y,S),w.set(t,a)),a.createOrUpdate({webgl:S,runtime:e},D,y,{volume:h,key:t})}return{label:e,get groupCount(){let e=0;return w.forEach(t=>{t.renderObject&&(e+=t.groupCount)}),e},get props(){return y},get params(){return b},get state(){return A},get theme(){return D},get geometryVersion(){return C.version},renderObjects:I,updated:T,createOrUpdate:function(e={},n){n&&n!==h&&(b=r(t,n),h=n,y||(y=a.e.getDefaultValues(b)));let i=(0,s.bw)(Object.assign({},y,e),h);return Object.assign(y,e,i),g=m(y,h),p.iQ.create("Creating or updating VolumeRepresentation",async e=>{let t=new Set(w.keys());for(let r=0,a=g.length;r<a;++r){let a=g[r];t.delete(a);let n=E(e,a);n&&await n}t.forEach(e=>{var t;null===(t=w.get(e))||void 0===t||t.destroy(),w.delete(e)}),I.length=0,w.forEach(e=>{e.renderObject&&(I.push(e.renderObject),C.add(e.renderObject.id,e.geometryVersion))}),C.snapshot(),T.next(x++)})},setState:function(e){let{visible:t,alphaFactor:r,pickable:a,overpaint:n,transparency:i,emissive:o,substance:s,clipping:c,transform:d,themeStrength:p,syncManually:f,markerActions:m}=e,h={};void 0!==t&&(h.visible=t),void 0!==r&&(h.alphaFactor=r),void 0!==a&&(h.pickable=a),void 0!==n&&(h.overpaint=n),void 0!==i&&(h.transparency=i),void 0!==o&&(h.emissive=o),void 0!==s&&(h.substance=s),void 0!==c&&(h.clipping=c),void 0!==p&&(h.themeStrength=p),void 0===d||l.yb.areEqual(d,A.transform,l.Ib)||(h.transform=d),void 0!==f&&(h.syncManually=f),void 0!==m&&(h.markerActions=m),w.forEach(e=>{void 0!==h.visible&&e&&e.setVisibility(h.visible),void 0!==h.alphaFactor&&e&&e.setAlphaFactor(h.alphaFactor),void 0!==h.pickable&&e&&e.setPickable(h.pickable),void 0!==h.overpaint&&e&&e.setOverpaint(h.overpaint),void 0!==h.transparency&&e&&e.setTransparency(h.transparency),void 0!==h.emissive&&e&&e.setEmissive(h.emissive),void 0!==h.substance&&e&&e.setSubstance(h.substance),void 0!==h.clipping&&e&&e.setClipping(h.clipping),void 0!==h.transform&&e&&e.setTransform(h.transform),void 0!==h.themeStrength&&e&&e.setThemeStrength(h.themeStrength)}),u.hX.updateState(A,e)},setTheme:function(e){D=e},getLoci:e=>{let t=o.Rh;for(let r of w.values()){let a=r.getLoci(e);if(!(0,o.jF)(a)){t=a;break}}return t},getAllLoci:()=>[f(h,y)],eachLocation:e=>{w.forEach(t=>{t.eachLocation(e)})},mark:function(e,t){let r=!1;return w.forEach(a=>{r=a.mark(e,t)||r}),r},destroy:function(){w.forEach(e=>e.destroy()),w.clear()}}}({...c.ev.Params})},39967:function(e,t,r){r.d(t,{qd:function(){return w},$l:function(){return C},A1:function(){return I},Zf:function(){return A},kp:function(){return D},c$:function(){return E},uw:function(){return T},f$:function(){return O}});var a=r(1573),n=r(22177),i=r(43975),o=r(81421),s=r(63964),l=r(48930),u=r(23833);let c=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),r=new Uint32Array(e),a=new Uint32Array(512),n=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(a[e]=0,a[256|e]=32768,n[e]=24,n[256|e]=24):t<-14?(a[e]=1024>>-t-14,a[256|e]=1024>>-t-14|32768,n[e]=-t-1,n[256|e]=-t-1):t<=15?(a[e]=t+15<<10,a[256|e]=t+15<<10|32768,n[e]=13,n[256|e]=13):t<128?(a[e]=31744,a[256|e]=64512,n[e]=24,n[256|e]=24):(a[e]=31744,a[256|e]=64512,n[e]=13,n[256|e]=13)}let i=new Uint32Array(2048),o=new Uint32Array(64),s=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,r=0;for(;(8388608&t)==0;)t<<=1,r-=8388608;t&=-8388609,r+=947912704,i[e]=t|r}for(let e=1024;e<2048;++e)i[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)32!==e&&(s[e]=1024);return{floatView:t,uint32View:r,baseTable:a,shiftTable:n,mantissaTable:i,exponentTable:o,offsetTable:s}}();function d(e){e=(0,u.uZ)(e,-65504,65504),c.floatView[0]=e;let t=c.uint32View[0],r=t>>23&511;return c.baseTable[r]+((8388607&t)>>c.shiftTable[r])}var p=r(72558),f=r(97187),m=r(67330);let h=i.A.set,g=i.A.normalize,b=i.A.sub,y=i.A.addScalar,x=i.A.scale,S=i.A.toArray;
7319function T(e,t,r,i){let o=!1,l=t.grid.cells.data.length;if(a.f.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(f.X.is(e.instances)){let t=f.X.start(e.instances)*l,r=f.X.end(e.instances)*l;i(f.X.ofBounds(t,r))&&(o=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*l;i(f.X.ofBounds(r,r+l))&&(o=!0)}}else if(a.f.Isosurface.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(null==r?void 0:r.isoValue){if(!a.f.IsoValue.areSame(e.isoValue,r.isoValue,t.grid.stats))return!1;if(f.X.is(e.instances)){let t=f.X.start(e.instances)*l,r=f.X.end(e.instances)*l;i(f.X.ofBounds(t,r))&&(o=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*l;i(f.X.ofBounds(r,r+l))&&(o=!0)}}else{let{stats:r,cells:{data:s}}=t.grid,u=r.sigma,c=a.f.IsoValue.toAbsolute(e.isoValue,r).absoluteValue;for(let t=0,r=s.length;t<r;++t)(0,n.q)(c,s[t],u)&&m.h.forEach(e.instances,e=>{let r=e*l;i(f.X.ofSingleton(r+t))&&(o=!0)})}}else if(a.f.Cell.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;for(let{indices:t,instances:r}of e.elements)f.X.is(t)?m.h.forEach(r,e=>{let r=e*l;i(f.X.offset(t,r))&&(o=!0)}):m.h.forEach(t,e=>{m.h.forEach(r,t=>{let r=t*l;i(f.X.ofSingleton(r+e))&&(o=!0)})})}else if(a.f.Segment.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(null==r?void 0:r.segments)for(let{segments:t,instances:a}of e.elements)m.h.areIntersecting(t,r.segments)&&m.h.forEach(a,e=>{let t=e*l;i(f.X.ofBounds(t,t+l))&&(o=!0)});else{let r=a.f.Segmentation.get(t);if(r){let a=new Set;for(let{segments:n,instances:u}of e.elements){for(let e=0,t=m.h.size(n);e<t;e++){let t=m.h.getAt(n,e);s.F.add(a,r.segments.get(t))}let e=Array.from(a.values()),c=t.grid.cells.data;for(let t=0,r=c.length;t<r;++t)if(e.includes(c[t]))for(let e=0,r=m.h.size(u);e<r;e++){let r=e*l;i(f.X.ofSingleton(t+r))&&(o=!0)}}}}}return o}function C(e){let[t,r,n]=e.grid.cells.space.dimensions,i=e.instances.length,o=a.f.Cell.Location(e);return(0,p.OF)(t*r*n,i,1,(e,t)=>(o.cell=e,o.instance=t,o))}function O(e,t=0){let r=Math.pow(2,Math.ceil(Math.log(Math.sqrt(e[0]*e[1]*e[2]))/Math.log(2))),a=e[0]+t,n=e[1]+t,i=1,o=a;return r<a*e[2]?(o=Math.floor(r/a),i=Math.ceil(e[2]/o),a*=o,n*=i):a*=e[2],{width:a,height:n,columns:o,rows:i,powerOfTwoSize:n<r?r:2*r}}function I(e,t,r=0,a="byte"){let{cells:{space:n,data:s},stats:{max:l,min:c}}=e.grid,p=n.dimensions,{dataOffset:f}=n,{width:m,height:T}=O(p,r),C="data"===t?1:4,I="byte"===a?new Uint8Array(m*T*C):"halfFloat"===a?new Uint16Array(m*T*C):new Float32Array(m*T*C),A=l-c,[w,D,E]=p,M=w+r,P=D+r,k=(0,i.A)(),B=(0,i.A)(),_=w-1,R=D-1,F=E-1;for(let e=0;e<E;++e)for(let r=0;r<D;++r)for(let n=0;n<w;++n){let i;let l=Math.floor(e*M%m/M),p=C*(Math.floor(e*M/m)*P*m+r*m+(l*M+n)),T=f(n,r,e);if(i="byte"===a?Math.round((s[T]-c)/A*255):"halfFloat"===a?d((s[T]-c)/A):(s[T]-c)/A,"data"===t)I[p]=i;else{if("groups"===t){if("halfFloat"===a){let e=(0,u.uZ)(Math.round(T),0,16777215)+1;I[p+2]=d(e%256),e=Math.floor(e/256),I[p+1]=d(e%256),e=Math.floor(e/256),I[p]=d(e%256)}else(0,o.lP)(T,I,p)}else h(k,s[f(Math.max(0,n-1),r,e)],s[f(n,Math.max(0,r-1),e)],s[f(n,r,Math.max(0,e-1))]),h(B,s[f(Math.min(_,n+1),r,e)],s[f(n,Math.min(R,r+1),e)],s[f(n,r,Math.min(F,e+1))]),g(k,b(k,k,B)),y(k,x(k,k,.5),.5),"byte"===a?S(x(k,k,255),I,p):"halfFloat"===a?(I[p]=d(k[0]),I[p+1]=d(k[1]),I[p+2]=d(k[2])):S(k,I,p);I[p+3]=i}}return{array:I,width:m,height:T}}function A(e,t="byte"){let{cells:{space:r,data:a},stats:{max:n,min:o}}=e.grid,[s,l,u]=r.dimensions,{dataOffset:c}=r,p="byte"===t?new Uint8Array(s*l*u*4):"halfFloat"===t?new Uint16Array(s*l*u*4):new Float32Array(s*l*u*4),f=n-o,m=(0,i.A)(),T=(0,i.A)(),C=s-1,O=l-1,I=u-1,A=0;for(let e=0;e<u;++e)for(let r=0;r<l;++r)for(let n=0;n<s;++n){let i=c(n,r,e);h(m,a[c(Math.max(0,n-1),r,e)],a[c(n,Math.max(0,r-1),e)],a[c(n,r,Math.max(0,e-1))]),h(T,a[c(Math.min(C,n+1),r,e)],a[c(n,Math.min(O,r+1),e)],a[c(n,r,Math.min(I,e+1))]),g(m,b(m,m,T)),y(m,x(m,m,.5),.5),"byte"===t?(S(x(m,m,255),p,A),p[A+3]=Math.round((a[i]-o)/f*255)):"halfFloat"===t?(p[A]=d(m[0]),p[A+1]=d(m[1]),p[A+2]=d(m[2]),p[A+3]=d((a[i]-o)/f)):(S(m,p,A),p[A+3]=(a[i]-o)/f),A+=4}return{array:p,width:s,height:l,depth:u}}function w(e,t,r,a=0){let n=e.grid.cells.data,o=l.XZ.size((0,i.A)(),r),s=e.grid.cells.space.dataOffset,{width:u,height:c}=O(o,a),d=new Uint8Array(u*c*1),[p,f,m]=o,h=p-1,g=f-1,b=m-1,y=p+a,x=f+a,[S,T,C]=r.min,[I,A,w]=r.max;for(let e=0;e<m;++e)for(let r=0;r<f;++r)for(let a=0;a<p;++a){let i=Math.floor(e*y%u/y),o=1*(Math.floor(e*y/u)*x*u+r*u+(i*y+a)),l=t.includes(n[s(a+S,r+T,e+C)])?255:0,c=t.
7319includes(n[s(Math.min(h+I,a+1+S),r+T,e+C)])?255:0,p=t.includes(n[s(Math.max(0,a-1+S),r+T,e+C)])?255:0,f=t.includes(n[s(a+S,Math.min(g+A,r+1+T),e+C)])?255:0,m=t.includes(n[s(a+S,Math.max(0,r-1+T),e+C)])?255:0,O=t.includes(n[s(a+S,r+T,Math.min(b+w,e+1+C))])?255:0,D=t.includes(n[s(a+S,r+T,Math.max(0,e-1+C))])?255:0;d[o]=Math.round((l+l+c+p+f+m+O+D)/8)}return{array:d,width:u,height:c}}function D(e){let{space:t,data:r}=e,{get:a,set:n,add:o,dataOffset:s}=t,[l,u,c]=t.dimensions,d=i.A.create(l+1,u+1,c+1);return{data:r,space:{...t,dimensions:d,get:(e,t,r,n)=>a(e,t%l,r%u,n%c),set:(e,t,r,a,i)=>n(e,t%l,r%u,a%c,i),add:(e,t,r,a,n)=>o(e,t%l,r%u,a%c,n),dataOffset:(e,t,r)=>s(e%l,t%u,r%c)}}}function E(e){let{grid:t}=e,r=a.r.getGridToCartesianTransform(t),n={...t,transform:{kind:"matrix",matrix:r},cells:D(t.cells)};return{...e,grid:n}}},94828:function(e,t,r){r.d(t,{Y:function(){return T}});var a=r(30131),n=r(1573),i=r(11803),o=r(60843),s=r(41306),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85764),m=r(17411),h=r(69587),g=r(87144),b=r(97667),y=r(85688),x=r(7305);function S(e,t,r,a,n){let i=e.instances.length,o=new Float32Array(16*i);for(let t=0;t<i;++t)g.yb.toArray(e.instances[t].transform,o,16*t);return(0,s.pH)(o,i,t,r,a,n)}function T(e,t){let r,g,T,C,O,I,A,w,D,E;let{defaultProps:M,createGeometry:P,createLocationIterator:k,getLoci:B,eachLocation:_,setUpdateState:R,initUpdateState:F,mustRecreate:L,dispose:z}=e,{updateValues:N,updateBoundingSphere:G,updateRenderableState:U,createPositionIterator:V}=e.geometryUtils,j=d.wV.create(),H=Object.assign({},M),q=o.Q.createEmpty(),X=-1;function W(e){if(j.createNew){if(D=k(C,O),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=r.nonInstanceable?(0,s.tx)():S(e,t.boundingSphere,n.cellSize,n.batchSize),p=u(t,d,r,a,n),f=c(n);return(0,l.Hq)(t.kind,p,f,o)}(C,e,D,T,g,t),E=V(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((j.updateColor||j.updateSize||j.updateTransform||j.updateLocation)&&(D=k(C,O)),j.updateTransform||j.updateLocation){let{instanceCount:e,groupCount:t}=D;g.instanceGranularity?(0,y.eL)(e,"instance",r.values):(0,y.eL)(e*t,"groupInstance",r.values)}if(j.updateMatrix&&S(C,w.boundingSphere,g.cellSize,g.batchSize,r.values),j.createGeometry){if(e)f.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),f.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),f.IO.updateIfChanged(r.values.uGroupCount,D.groupCount);else throw Error("expected geometry to be given")}(j.updateTransform||j.createGeometry)&&(G(r.values,e||w),E=V(e||w,r.values)),j.updateSize&&"uSize"in r.values&&(0,m.H4)(D,E,T.size,r.values),j.updateColor&&(0,h.is)(D,E,T.color,r.values),N(r.values,g),U(r.state,g)}H=g,q=T,I=C,A=O,e&&(w=e,X+=1)}function K(e,t){return(0,u.h)(e)?t(H.instanceGranularity?c.Xp.ofBounds(0,D.instanceCount):c.Xp.ofBounds(0,D.groupCount*D.instanceCount)):H.instanceGranularity?function(e,t,r,a){let i=!1;if(n.f.Cell.isLoci(e)){if(n.f.Cell.isLociEmpty(e)||!n.f.areEquivalent(e.volume,t))return!1;for(let{instances:t}of e.elements)c.hU.forEach(t,e=>{a(c.Xp.ofSingleton(e))&&(i=!0)})}else if(n.f.Segment.isLoci(e)){if(n.f.Segment.isLociEmpty(e)||!n.f.areEquivalent(e.volume,t))return!1;for(let{segments:t,instances:n}of e.elements)c.hU.has(t,r)&&c.hU.forEach(n,e=>{a(c.Xp.ofSingleton(e))&&(i=!0)})}else if(n.f.Isosurface.isLoci(e)){if(n.f.Isosurface.isLociEmpty(e))return!1;if(c.Xp.is(e.instances))a(e.instances)&&(i=!0);else for(let t=0,r=e.instances.length;t<r;++t)a(c.Xp.ofSingleton(t))&&(i=!0)}else if(n.f.isLoci(e)){if(n.f.isLociEmpty(e))return!1;if(c.Xp.is(e.instances))a(e.instances)&&(i=!0);else for(let t=0,r=e.instances.length;t<r;++t)a(c.Xp.ofSingleton(t))&&(i=!0)}return i}(e,I,A,t):_(e,I,A,H,t)}return{get groupCount(){return D?D.count:0},get renderObject(){return r},get geometryVersion(){return X},async createOrUpdate(e,t,a={},i){if(!function(e,t,a,i){if(!a&&!I)throw Error("missing volume");if(g=Object.assign({},H,t),T=e,C=a,O=i,d.wV.reset(j),r?n.r.areEquivalent(C.grid,I.grid)&&!n.f.areInstanceTransformsEqual(C,I)?j.updateTransform=!0:n.f.areEquivalent(C,I)&&O===A||(j.createNew=!0):j.createNew=!0,j.createNew){null==F||F(j,C,g,T),j.createGeometry=!0;return}R(j,a,g,H,T,q),p.U.areEqual(e.color,q.color)||(j.updateColor=!0),x.k.areEqual(e.size,q.size)||(j.updateSize=!0),D.nonInstanceable?g.instanceGranularity!==H.instanceGranularity&&(j.updateTransform=!0):((g.instanceGranularity!==H.instanceGranularity||g.cellSize!==H.cellSize||g.batchSize!==H.batchSize)&&(j.updateTransform=!0),j.updateTransform&&(j.updateMatrix=!0)),!j.updateSize||"uSize"in r.values||(j.createGeometry=!0),j.createGeometry&&(j.updateColor=!0,j.updateSize=!0)}(t,a,(null==i?void 0:i.volume)||I,(null==i?void 0:i.key)||A),j.createGeometry){let t=P(e,C,O,T,g,w);return(0,b.y8)(t)?t.then(W):W(t)}
7319W()},getLoci:e=>r?B(e,I,A,H,r.id):u.Rh,eachLocation(e){for(D.reset();D.hasNext;){let{location:t,isSecondary:r}=D.move();e(t,r)}},mark:(e,t)=>a.u.mark(r,e,t,K),setVisibility(e){a.u.setVisibility(r,e)},setAlphaFactor(e){a.u.setAlphaFactor(r,e)},setPickable(e){a.u.setPickable(r,e)},setColorOnly(e){a.u.setColorOnly(r,e)},setTransform(e,t){a.u.setTransform(r,e,t)},setOverpaint:e=>a.u.setOverpaint(r,e,K,!0),setTransparency:e=>a.u.setTransparency(r,e,K,!0),setEmissive:e=>a.u.setEmissive(r,e,K,!0),setSubstance:e=>a.u.setSubstance(r,e,K,!0),setClipping:e=>a.u.setClipping(r,e,K,!0),setThemeStrength(e){a.u.setThemeStrength(r,e)},destroy(){null==z||z(w),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:L}}({...r(54185).ev.Params})},4176:function(e,t,r){r.d(t,{l:function(){return a}});var a,n=r(85764),i=r(14086);!function(e){let t;function r(e){let t={create:e=>({action:t,params:e}),id:n.hb.create22(),definition:e,createDefaultParams:(t,r)=>e.params?i.e.getDefaultValues(e.params(t,r)):{}};return t}e.create=r,e.fromTransformer=function(e){let t=e.definition;return r({from:t.from,display:t.display,params:t.params,isApplicable:e.definition.isApplicable?(t,r,a)=>e.definition.isApplicable(t,a):void 0,run({cell:t,state:r,params:a}){let n=r.build().to(t.transform.ref).apply(e,a);return r.updateTree(n)}})},(t=e.Builder||(e.Builder={})).build=e=>t=>r({from:e.from instanceof Array?e.from:e.from?[e.from]:[],display:"string"==typeof e.display?{name:e.display}:e.display?e.display:{name:"Unnamed State Action"},params:"object"==typeof e.params?()=>e.params:e.params?e.params:void 0,isApplicable:e.isApplicable,..."function"==typeof t?{run:t}:t}),e.build=t.build}(a||(a={}))},67801:function(e,t,r){r.d(t,{ZM:function(){return P},lQ:function(){return Y.l},lZ:function(){return i},ze:function(){return s},tE:function(){return h.t},EW:function(){return p.E},td:function(){return f.t},K1:function(){return d.K}});var a,n,i,o,s,l,u=r(85764);!function(e){function t(e){var t;return(t=class{static is(t){return!!t&&e===t.type}constructor(t,r){this.data=t,this.id=u.hb.create22(),this.type=e,this.label=r&&r.label||e.name,this.description=r&&r.description}}).type=e,t}e.factory=function(){return e=>t(e)},e.create=t,e.hasTag=function(e,t){if(!e.tags)return!1;for(let r of e.tags)if(r===t)return!0;return!1},e.Null={id:u.hb.create22(),type:{name:"Null",typeClass:"Null"},data:void 0,label:"Null"}}(i||(i={})),(a=o||(o={})).is=function(e){return!!e&&!!e.transform&&!!e.parent&&!!e.status},a.resolve=function(e,t){let r="string"==typeof t?t:a.is(t)?t.transform.ref:t.ref;return e.cells.get(r)};class c{get cell(){var e;return null===(e=this.state)||void 0===e?void 0:e.cells.get(this.ref)}get obj(){var e,t;return null===(t=null===(e=this.state)||void 0===e?void 0:e.cells.get(this.ref))||void 0===t?void 0:t.obj}get data(){var e;return null===(e=this.obj)||void 0===e?void 0:e.data}update(e,t){if(!this.state)throw Error("To use update() from StateObjectSelector, 'state' must be defined.");return t||(t=this.state.build()),(t||this.state.build()).to(this).update(e),t}checkValid(){if(!this.state)throw Error("Unassigned State.");let e=this.cell;if(!e)throw Error("Not created at all. Did you await/then the corresponding state update?");if("ok"===e.status)return!0;if("error"===e.status)throw Error(e.errorText);if(e.obj===i.Null)throw Error("The object is Null.");throw Error("Unresolved. Did you await/then the corresponding state update?")}get isOk(){let e=this.cell;return e&&"ok"===e.status&&e.obj!==i.Null}constructor(e,t){this.ref=e,this.state=t}}!function(e){function t(e,t){if(t)return o.is(t)?t:"string"==typeof t?e.cells.get(t):t.cell}e.resolveRef=function(e){var t;if(e)return"string"==typeof e?e:o.is(e)?e.transform.ref:null===(t=e.cell)||void 0===t?void 0:t.transform.ref},e.resolve=t,e.resolveAndCheck=function(e,r){let a=t(e,r);if(a&&a.obj&&"ok"===a.status)return a}}(s||(s={}));var d=r(67604),p=r(81752),f=r(23492),m=r(54854),h=r(30123),g=r(2078),b=r(45173),y=r(53596);function x(...e){let t;let r=[];for(let a of e)if(a){if(t||(t=new Set),"string"==typeof a){if(t.has(a))continue;t.add(a),r.push(a)}else for(let e of a)t.has(e)||(t.add(e),r.push(e))}return r}!function(e){function t(e){let t=new Set;for(let r of e.actions)switch(r.kind){case"add":t.add(r.transform.ref);break;case"update":case"delete":t.add(r.ref);break;case"insert":for(let a of(t.add(r.ref),t.add(r.transform.ref),e.tree.children.get(r.ref).toArray()))t.add(a)}return Array.from(t)}function r(e,r){if(!e.state||e.state.tree===e.editInfo.sourceTree){let a=e.tree.asImmutable();return(null==r?void 0:r.useHashVersion)&&b.K.setParamHashVersion(a,t(e)),a}let a=e.state.tree.asTransient();for(let t of e.actions)switch(t.kind){case"add":a.add(t.transform);break;case"update":a.setParams(t.ref,t.params);break;
7319case"delete":a.remove(t.ref);break;case"insert":{let e=a.children.get(t.ref).toArray();for(let r of(a.add(t.transform),e))a.changeParent(r,t.transform.ref)}}e.editInfo.sourceTree=e.tree;let n=a.asImmutable();return(null==r?void 0:r.useHashVersion)&&b.K.setParamHashVersion(n,t(e)),n}e.is=function(e){return!!e&&"function"==typeof e.getTree},e.isTo=function(e){return!!e&&"function"==typeof e.getTree&&"string"==typeof e.ref};class a{get editInfo(){return this.state.editInfo}get currentTree(){return this.state.tree}to(e){let t="string"==typeof e?e:o.is(e)?e.transform.ref:e.ref;return new n(this.state,t,this)}toRoot(){return new n(this.state,this.state.tree.root.ref,this)}delete(e){let t=s.resolveRef(e);return t&&this.state.tree.transforms.has(t)&&(this.editInfo.count++,this.state.tree.remove(t),this.state.actions.push({kind:"delete",ref:t})),this}getTree(e){return r(this.state,e)}commit(e){if(!this.state.state)throw Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,e))}constructor(e,t){this.state={state:t,tree:e.asTransient(),actions:[],editInfo:{applied:!1,sourceTree:e,count:0,lastUpdate:void 0}}}}e.Root=a;class n{get editInfo(){return this.state.editInfo}get selector(){return new c(this.ref,this.state.state)}getApplyRoot(){return b.K.getDecoratorRoot(this.state.tree,this.ref)}apply(e,t,r){if(e.definition.isDecorator)return this.insert(e,t,r);let a=this.getApplyRoot(),i=e.apply(a,t,r);return this.state.tree.add(i),this.editInfo.count++,this.editInfo.lastUpdate=i.ref,this.state.actions.push({kind:"add",transform:i}),new n(this.state,i.ref,this.root)}applyOrUpdate(e,t,r,a){if(!this.state.tree.transforms.has(e))return this.apply(t,r,{...a,ref:e});{let t=this.to(e);return r&&t.update(r),t}}applyOrUpdateTagged(e,t,r,a){if(t.definition.isDecorator)throw Error("Can't use applyOrUpdateTagged on decorator transformers.");let i=this.getApplyRoot(),o=this.state.tree.children.get(i).values();for(;;){let t=o.next();if(t.done)break;let n=this.state.tree.transforms.get(t.value);if(n&&p.E.hasTags(n,e)){let i=this.to(t.value);return i.updateTagged(r,x(n.tags,e,a&&a.tags)),i}}let s=t.apply(i,r,{...a,tags:x(e,a&&a.tags)});return this.state.tree.add(s),this.editInfo.count++,this.editInfo.lastUpdate=s.ref,this.state.actions.push({kind:"add",transform:s}),new n(this.state,s.ref,this.root)}group(e,t,r){return this.apply(e,t,r)}insert(e,t,r){let a=this.state.tree.children.get(this.ref).toArray(),i=e.apply(this.ref,t,r);for(let e of(this.state.tree.add(i),a))this.state.tree.changeParent(e,i.ref);return this.editInfo.count++,this.editInfo.lastUpdate=i.ref,this.state.actions.push({kind:"insert",ref:this.ref,transform:i}),new n(this.state,i.ref,this.root)}updateTagged(e,t){(this.state.tree.setParams(this.ref,e)||this.state.tree.setTags(this.ref,t))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:e}))}update(e,t){let r;if(t){let e=this.state.tree.transforms.get(this.ref);r=(0,y.U)(e.params,t)}else r="function"==typeof e?(0,y.U)(this.state.tree.transforms.get(this.ref).params,e):e;return this.state.tree.setParams(this.ref,r)&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:r})),this.root}updateState(e){let t=this.state.tree.transforms.get(this.ref);p.E.isStateChange(t.state,e)&&(this.state.tree.assignState(this.ref,e),this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.find(e=>"update"===e.kind&&e.ref===this.ref)||this.state.actions.push({kind:"update",ref:this.ref,params:t.params}))}tag(e){let t=this.state.tree.transforms.get(this.ref);return this.updateTagged(t.params,x(t.tags,e)),this}dependsOn(e){let t=this.state.tree.transforms.get(this.ref);this.state.tree.setDependsOn(this.ref,x(t.dependsOn,e))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:t.params}))}to(e){return this.root.to(e)}toRoot(){return this.root.toRoot()}delete(e){return this.root.delete(e)}getTree(e){return r(this.state,e)}commit(e){if(!this.state.state)throw Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,e))}constructor(e,t,r){if(this.state=e,this.root=r,this.ref=t,!this.state.tree.transforms.has(t))throw Error(`Could not find node '${t}'.`)}}e.To=n}(l||(l={}));var S=r(36111);class T{constructor(){this.ev=g.d.create(),this.actions=new Map,this.fromTypeIndex=new Map,this.events={added:this.ev(),removed:this.ev()}}add(e){let t=f.t.is(e)?e.toAction():e;if(this.actions.has(t.id))return this;for(let e of(this.actions.set(t.id,t),t.definition.from))this.fromTypeIndex.has(e.type)?this.fromTypeIndex.get(e.type).push(t):this.fromTypeIndex.set(e.type,[t]);return this.events.added.next(void 0),this}remove(e){let t=f.t.is(e)?e.toAction().id:u.hb.is(e)?e:e.id,r=this.actions.get(t);if(!r)return this;for(let e of(this.actions.delete(t),r.definition.from)){let t=this.fromTypeIndex.get(e.type);t&&((0,S.iV)(t,r),0===t.length&&this.fromTypeIndex.delete(e.type))}return this.events.removed.next(void 0),this}fromCell(e,t){let r=e.obj;if(!r)return[];let a=this.fromTypeIndex.get(r.type);if(!a)return[];let n=!1;for(let e of a)if(e.definition.isApplicable){n=!0;break}if(!n)return a;let i=[];for(let n of a)n.definition.isApplicable?n.definition.isApplicable(r,e.transform,t)&&i.push(n):i.push(n);return i}dispose(){this.ev.dispose()}}var C=r(73969),O=r(58400),I=r(14086),A=r(51493),w=r(89987);class D{constructor(){this.queue=[],this.signal=new w.x}
7319get length(){return this.queue.length}enqueue(e){return this.queue.push(e),1===this.queue.length||this.waitFor(e)}handled(e){(0,S.KQ)(this.queue,e),this.queue.length>0&&this.signal.next({v:this.queue[0],stillPresent:!0})}remove(e){let t=(0,S.KQ)(this.queue,e);return t&&this.signal.next({v:e,stillPresent:!1}),t}waitFor(e){return new Promise(t=>{let r=this.signal.subscribe(({v:a,stillPresent:n})=>{a===e&&(r.unsubscribe(),t(n))})})}}var E=r(79137),M=r(67546);class P{get tree(){return this._tree}get transforms(){return this._tree.transforms}get current(){return this.behaviors.currentObject.value.ref}get root(){return this.cells.get(this._tree.root.ref)}build(){return new l.Root(this.tree,this)}registerRefResolver(e,t){this.refResolvers.push([e,t])}removeRefResolver(e){this.refResolvers=this.refResolvers.filter(t=>t[0]!==e)}addHistory(e,t){0!==this.historyCapacity&&(this.history.unshift([e,t||"Update"]),this.history.length>this.historyCapacity&&this.history.pop(),this.events.historyUpdated.next({state:this}))}clearHistory(){0!==this.history.length&&(this.history=[],this.events.historyUpdated.next({state:this}))}get latestUndoLabel(){return this.history.length>0?this.history[0][1]:void 0}get canUndo(){return this.history.length>0}undo(){return m.iQ.create("Undo",async e=>{let t=this.history.shift();if(t){this.events.historyUpdated.next({state:this}),this.undoingHistory=!0;try{await this.updateTree(t[0],{canUndo:!1}).runInContext(e)}finally{this.undoingHistory=!1}}})}getSnapshot(){return{tree:d.K.toJSON(this._tree)}}setSnapshot(e){let t=d.K.fromJSON(e.tree);return this.updateTree(t)}setCurrent(e){this.behaviors.currentObject.next({state:this,ref:e})}updateCellState(e,t){let r=this.cells.get(e);if(!r)return;let a="function"==typeof t?t(r.state):t;p.E.assignState(r.state,a)&&(r.transform=this._tree.assignState(r.transform.ref,a),this.events.cell.stateUpdated.next({state:this,ref:e,cell:r}))}dispose(){this.ev.dispose(),this.actions.dispose()}select(e){return h.t.select(e,this)}selectQ(e){return"string"==typeof e?h.t.select(e,this):h.t.select(e(h.t.Generators),this)}applyAction(e,t,r=p.E.RootRef){return m.iQ.create("Apply Action",a=>{let n=this.cells.get(r);if(!n)throw Error(`'${r}' does not exist.`);if("ok"!==n.status)throw Error(`Action cannot be applied to a cell with status '${n.status}'`);return W(e.definition.run({ref:r,cell:n,a:n.obj,params:t,state:this},this.globalContext),a)})}transaction(e,t){return m.iQ.create("State Transaction",async r=>{let a=this.inTransaction,n=this._tree.asImmutable(),i=!1;try{a||this.behaviors.isUpdating.next(!0),this.inTransaction=!0,this.inTransactionError=!1,await e(r),this.inTransactionError&&(i=!0,await this.updateTree(n).runInContext(r))}catch(e){if(i||(i=!0,await this.updateTree(n).runInContext(r),this.events.log.next(C.B.error("Error during state transaction, reverting"))),a)throw this.inTransactionError=!0,e;if(null==t?void 0:t.rethrowErrors)throw e;console.error(e)}finally{a||(this.inTransaction=!1,this.events.changed.next({state:this,inTransaction:!1}),this.behaviors.isUpdating.next(!1),i||((null==t?void 0:t.canUndo)?this.addHistory(n,"string"==typeof t.canUndo?t.canUndo:void 0):this.clearHistory()))}})}get inUpdate(){return this._inUpdate}updateTree(e,t){let r={tree:e,options:t};return m.iQ.create("Update Tree",async a=>{if(!await this.updateQueue.enqueue(r))return;this._inUpdate=!0;let n=(null==t?void 0:t.canUndo)?this._tree.asImmutable():void 0,i=!1;this.inTransaction||this.behaviors.isUpdating.next(!0);try{if(l.is(e)){if(e.editInfo.applied)throw Error("This builder has already been applied. Create a new builder for further state updates");e.editInfo.applied=!0}this.reverted=!1;let n=t&&(t.revertIfAborted||t.revertOnError)?await this._revertibleTreeUpdate(a,r,t):await this._updateTree(a,r);if(i=this.reverted,n.ctx.hadError&&(this.inTransactionError=!0),!n.cell)return;return new c(n.cell.transform.ref,this)}finally{this._inUpdate=!1,this.updateQueue.handled(r),this.inTransaction||(this.behaviors.isUpdating.next(!1),(null==t?void 0:t.canUndo)?i||this.addHistory(n,"string"==typeof t.canUndo?t.canUndo:void 0):this.undoingHistory||this.clearHistory())}},()=>{this.updateQueue.remove(r)})}
7319async _revertibleTreeUpdate(e,t,r){let a=this.tree,n=await this._updateTree(e,t);return(n.ctx.hadError||n.ctx.wasAborted)&&r.revertOnError||n.ctx.wasAborted&&r.revertIfAborted?(this.reverted=!0,await this._updateTree(e,{tree:a,options:t.options})):n}async _updateTree(e,t){let r=!1,a=this.updateTreeAndCreateCtx(t.tree,e,t.options);try{if(r=await B(a),l.isTo(t.tree)){let e=this.select(t.tree.ref)[0];return{ctx:a,cell:e}}return{ctx:a}}finally{this.spine.current=void 0,r&&this.events.changed.next({state:this,inTransaction:this.inTransaction})}}updateTreeAndCreateCtx(e,t,r){let a=(l.is(e)?e.getTree():e).asTransient(),n=this._tree;this._tree=a;let i={parent:this,editInfo:l.is(e)?e.editInfo:void 0,errorFree:this.errorFree,taskCtx:t,oldTree:n,tree:a,cells:this.cells,spine:this.spine,results:[],options:{...k,...r},changed:!1,hadError:!1,wasAborted:!1,newCurrent:void 0,getCellData:this.tryGetCellData};return this.errorFree=!0,i}constructor(e,t){this.errorFree=!0,this.ev=g.d.create(),this.globalContext=void 0,this.events={cell:{stateUpdated:this.ev(),created:this.ev(),removed:this.ev()},object:{updated:this.ev(),created:this.ev(),removed:this.ev()},log:this.ev(),changed:this.ev(),historyUpdated:this.ev()},this.behaviors={currentObject:this.ev.behavior({state:this,ref:p.E.RootRef}),isUpdating:this.ev.behavior(!1)},this.actions=new T,this.cells=new Map,this.spine=new A.W.Impl(this.cells),this.refResolvers=[],this.tryGetCellData=e=>{var t,r;let a=null===(r=null===(t=this.cells.get(e))||void 0===t?void 0:t.obj)||void 0===r?void 0:r.data;if(void 0===a){for(let[,t]of this.refResolvers)if(void 0!==(a=t(this,e)))break;if(void 0===a)throw Error(`Cell '${e}' data undefined.`)}return a},this.historyCapacity=5,this.history=[],this.undoingHistory=!1,this.inTransaction=!1,this.inTransactionError=!1,this._inUpdate=!1,this.reverted=!1,this.updateQueue=new D,this._tree=d.K.createEmpty(p.E.createRoot(t&&t.rootState)).asTransient();let r=this._tree.root;this.runTask=t.runTask,(null==t?void 0:t.historyCapacity)!==void 0&&(this.historyCapacity=t.historyCapacity),this.cells.set(r.ref,{parent:this,transform:r,sourceRef:void 0,obj:e,status:"ok",state:{...r.state},errorText:void 0,params:{definition:{},values:{}},dependencies:{dependentBy:[],dependsOn:[]},cache:{}}),this.globalContext=t&&t.globalContext}}(n=P||(P={})).create=function(e,t){return new n(e,t)},(n.ObjectEvent||(n.ObjectEvent={})).isCell=function(e,t){return!!t&&e.ref===t.transform.ref&&e.state===t.parent};let k={doNotLogTiming:!1,doNotUpdateCurrent:!0,revertIfAborted:!1,revertOnError:!1,canUndo:!1};async function B(e){let t=!!(e.editInfo&&1===e.editInfo.count&&e.editInfo.lastUpdate&&e.editInfo.sourceTree===e.oldTree),r,a=[],n;if(t)r=[],n=[e.editInfo.lastUpdate];else{r=function(e){let t={newTree:e.tree,cells:e.cells,deletes:[]};return d.K.doPostOrder(e.oldTree,e.oldTree.root,t,R),t.deletes}(e);let t=e.parent.current,i=!1;for(let e of r)if(e===t){i=!0;break}if(i){let a=G(e.oldTree,t,r,e.cells);e.parent.setCurrent(a)}for(let t=r.length-1;t>=0;t--){let a=e.cells.get(r[t]);a&&q(a.transform,a.obj,null==a?void 0:a.transform.params,a.cache,e.parent.globalContext)}for(let t of r){let r=e.cells.get(t);r&&(r.parent=void 0,function(e){for(let t of e.dependencies.dependsOn)(0,S.iV)(t.dependencies.dependentBy,e)}(r));let n=r&&r.obj;e.cells.delete(t),a.push(n)}n=function(e,t){let r={roots:[],cells:e};return d.K.doPreOrder(t,t.root,r,_),r.roots}(e.cells,e.tree)}let o=function(e,t){let r;let a={ctx:e,visited:new Set,added:[]};for(let r of t)d.K.doPreOrder(e.tree,e.tree.transforms.get(r),a,N);for(let t of a.added)!function(e,t){if(e.transform.dependsOn)for(let r of e.transform.dependsOn){if(!t.tree.transforms.get(r))throw Error("Cannot depend on a non-existent transform.");let a=t.cells.get(r);(0,S.S8)(e.dependencies.dependsOn,a),(0,S.S8)(a.dependencies.dependentBy,e)}}(t,e);return a.visited.forEach(t=>{for(let n of e.cells.get(t).dependencies.dependentBy)a.visited.has(n.transform.ref)||(r||(r=E.l.create()),E.l.add(r,n.transform.ref,n))}),{added:a.added,dependent:r?r.array:void 0}}(e,n);for(let t of o.added)e.parent.events.cell.created.next({state:e.parent,ref:t.transform.ref,cell:t});for(let t=0;t<r.length;t++){let n=r[t],i=e.oldTree.transforms.get(n).parent;e.parent.events.object.removed.next({state:e.parent,ref:n,obj:a[t]}),e.parent.events.cell.removed.next({state:e.parent,ref:n,parent:i})}if(a.length&&(a=[]),o.dependent)for(let e of o.dependent)n.push(e.transform.ref);for(let t of(function(e,t){for(let r of t)d.K.doPreOrder(e.tree,e.tree.transforms.get(r),e,z)}(e,n),n))await j(e,t);e.editInfo||d.K.doPreOrder(e.tree,e.tree.root,e,F);let s=e.newCurrent;for(let t of e.results)"created"===t.action?(e.parent.events.object.created.next({state:e.parent,ref:t.ref,obj:t.obj}),e.newCurrent||e.tree.transforms.get(t.ref).state.isGhost||t.obj===i.Null||(s=t.ref)):"updated"===t.action?e.parent.events.object.updated.next({state:e.parent,ref:t.ref,action:"in-place",obj:t.obj,oldData:t.oldData}):"replaced"===t.action&&e.parent.events.object.updated.next({state:e.parent,ref:t.ref,action:"recreate",obj:t.obj,oldObj:t.oldObj});
7319if(s)e.options.doNotUpdateCurrent||e.parent.setCurrent(s);else{let t=e.parent.current,r=e.cells.get(t);r&&(r.obj===i.Null||"error"===r.status&&r.errorText===V)&&(s=G(e.oldTree,t,[],e.cells),e.parent.setCurrent(s))}return r.length>0||n.length>0||e.changed}function _(e,t,r){let a=r.cells.get(e.ref);return a&&a.transform.version===e.version?"error"!==a.status&&(!a||a.obj!==i.Null):(r.roots.push(e.ref),!1)}function R(e,t,r){!r.newTree.transforms.has(e.ref)&&r.cells.has(e.ref)&&r.deletes.push(e.ref)}function F(e,t,r){let a=r.cells.get(e.ref);a&&p.E.syncState(a.state,e.state)&&r.parent.events.cell.stateUpdated.next({state:r.parent,ref:e.ref,cell:a})}function L(e,t,r,a){let n=e.cells.get(t),i=n.status!==r;n.status=r,n.errorText=a,i&&e.parent.events.cell.stateUpdated.next({state:e.parent,ref:t,cell:n})}function z(e,t,r){r.cells.get(e.ref).transform=e,L(r,e.ref,"pending")}function N(e,t,{ctx:r,added:a,visited:n}){if(n.add(e.ref),r.cells.has(e.ref))return;let i={parent:r.parent,transform:e,sourceRef:void 0,status:"pending",state:{...e.state},errorText:void 0,params:void 0,dependencies:{dependentBy:[],dependsOn:[]},cache:void 0};r.cells.set(e.ref,i),a.push(i)}function G(e,t,r,a){return function e(t,r,a,n){if(r===p.E.RootRef)return r;let o=t.transforms.get(r),s=t.children.get(o.parent).values(),l,u=!1;for(;;){let e=s.next();if(e.done)break;if(a.has(e.value))continue;let o=n.get(e.value);if(!o||"error"===o.status||o.obj===i.Null)continue;let c=t.transforms.get(e.value);if(!c.state.isGhost){if(e.value===r){u=!0,a.has(r)||(l=r);continue}if(u)return c.ref;l=c.ref}}return l||e(t,o.parent,a,n)}(e,t,new Set(r),a)}function U(e,t,r,a){a||(e.hadError=!0,e.parent.errorFree=!1);let n=e.cells.get(t);if(r){e.wasAborted=e.wasAborted||m.iQ.isAbort(r);let n=""+r;L(e,t,"error",n),a||e.parent.events.log.next({type:"error",timestamp:new Date,message:n})}else n.params=void 0;if(n.obj){let r=n.obj;n.obj=void 0,n.cache=void 0,e.parent.events.object.removed.next({state:e.parent,ref:t,obj:r})}let i=e.tree.children.get(t).values();for(;;){let t=i.next();if(t.done)return;U(e,t.value,void 0,a)}}let V="Parent is null";async function j(e,t){L(e,t,"processing");let r=!1;try{let a=(0,O.z)(),n=await H(e,t),o=(0,O.z)()-a;"none"!==n.action&&(e.changed=!0),L(e,t,"ok"),e.results.push(n),"created"===n.action?(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Created ${n.obj.label} in ${(0,O.i)(o)}.`)):"updated"===n.action?(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Updated ${n.obj.label} in ${(0,O.i)(o)}.`)):"replaced"!==n.action||(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Updated ${n.obj.label} in ${(0,O.i)(o)}.`))}catch(r){e.changed=!0,e.hadError||(e.newCurrent=t),U(e,t,r,!1),console.error(r);return}let a=e.tree.children.get(t).values();for(;;){let t=a.next();if(t.done)return;r?U(e,t.value,void 0,!0):await j(e,t.value)}}async function H(e,t){var r;let{oldTree:a,tree:n}=e,o=e.cells.get(t),s=o.transform;if(o.transform.ref===p.E.RootRef)return{action:"none"};let l=e.cells.get(o.transform.parent);if((null==l?void 0:l.obj)===i.Null){if(o.sourceRef=l.transform.ref,!a.transforms.has(t)||!o.params)return o.params=void 0,{ref:t,action:"created",obj:i.Null};{let r=o.params.values,a=o.cache;return q(s,o.obj,r,a,e.parent.globalContext),o.params=void 0,o.obj=i.Null,{ref:t,action:"updated",obj:o.obj}}}let u=0===s.transformer.definition.from.length?l:h.t.findAncestorOfType(n,e.cells,t,s.transformer.definition.from);if(!u)throw Error(`No suitable parent found for '${t}'`);e.spine.current=o;let c=u.obj;o.sourceRef=u.transform.ref;let d=function(e,t,r,a){let n=t.transformer.definition.params,i=n?n(r,e.parent.globalContext):{};if(t.version!==t._normalized_param_version)t.params=I.e.normalizeParams(i,t.params,"all"),t._normalized_param_version=t.version;else{let e=I.e.getDefaultValues(i);t.params=t.params?(0,M.iU)(t.params,e):e}return I.e.resolveRefs(i,t.params,e.getCellData),{definition:i,values:t.params}}(e,s,c,0);if(a.transforms.has(t)&&o.params){let a=o.params.values,n=o.cache,l=null===(r=o.obj)||void 0===r?void 0:r.data,u=d.values;switch(o.params=d,o.obj&&o.obj!==i.Null?await Z(e,o,s.transformer,c,o.obj,a,u):f.t.UpdateResult.Recreate){case f.t.Upd
7319ateResult.Recreate:{let r=o.obj;q(s,r,a,n,e.parent.globalContext);let i=await Q(e,o,s.transformer,c,u);return X(i,s),o.obj=i,{ref:t,action:"replaced",oldObj:r,obj:i}}case f.t.UpdateResult.Updated:return X(o.obj,s),{ref:t,action:"updated",oldData:l,obj:o.obj};case f.t.UpdateResult.Null:return q(s,o.obj,a,n,e.parent.globalContext),o.obj=i.Null,{ref:t,action:"updated",obj:o.obj};default:return{action:"none"}}}else{o.params=d;let r=await Q(e,o,s.transformer,c,d.values);return X(r,s),o.obj=r,{ref:t,action:"created",obj:r}}}function q(e,t,r,a,n){var o,s;null===(s=(o=e.transformer.definition).dispose)||void 0===s||s.call(o,{b:t!==i.Null?t:void 0,params:r,cache:a},n)}function X(e,t){e&&e!==i.Null&&(e.tags=t.tags)}function W(e,t){return"function"==typeof e.runInContext?e.runInContext(t):e}function K(e){if(0===e.dependencies.dependsOn.length)return;let t=Object.create(null);for(let r of e.dependencies.dependsOn){if(!r.obj)throw Error("Unresolved dependency.");t[r.transform.ref]=r.obj}return t}function Q(e,t,r,a,n){return t.cache||(t.cache=Object.create(null)),W(r.definition.apply({a,params:n,cache:t.cache,spine:e.spine,dependencies:K(t)},e.parent.globalContext),e.taskCtx)}async function Z(e,t,r,a,n,i,o){return r.definition.update?(t.cache||(t.cache=Object.create(null)),W(r.definition.update({a,oldParams:i,b:n,newParams:o,cache:t.cache,spine:e.spine,dependencies:K(t)},e.parent.globalContext),e.taskCtx)):f.t.UpdateResult.Recreate}var Y=r(4176)},30123:function(e,t,r){r.d(t,{t:function(){return a}});var a,n=r(67604),i=r(81752);!function(e){let t;function r(e,t){return a(e)(t)}function a(e){let r=e||t.root;return void 0!==r.compile?r.compile():void 0!==r.transform&&void 0!==r.status?t.byValue(r).compile():"function"==typeof r?r:t.byRef(r).compile()}e.select=r,e.compile=a;let o={select(e){return r(this,e||this.state)}};function s(e,t){o[e]=function(...e){return t.call(void 0,this,...e)}}function l(e){return Object.create(o,{compile:{writable:!1,configurable:!1,value:e}})}function u(e,t){let r=a(e);return l(()=>e=>{let a=[];for(let n of r(e))for(let r of t(n,e))a.push(r);return a})}function c(e,t){let r=a(e);return l(()=>e=>{let a=[];for(let n of r(e)){let r=t(n,e);r&&a.push(r)}return a})}function d(e){let t=a(e);return l(()=>e=>{let r=new Set,a=[];for(let n of t(e))n&&!r.has(n.transform.ref)&&(r.add(n.transform.ref),a.push(n));return a})}function p(e){let t=a(e);return l(()=>e=>{let r=t(e);return r.length?[r[0]]:[]})}function f(e,t){return u(e,e=>t(e)?[e]:[])}function m(e,t){return f(e,e=>e.status===t)}function h(e,t){return f(e,e=>!!e.transform.tags&&e.transform.tags.indexOf(t)>=0)}function g(e){return u(e,(e,t)=>{let r=[];return n.K.doPreOrder(t.tree,t.tree.transforms.get(e.transform.ref),r,(e,t,r)=>{r.push(e.ref)}),r.map(e=>t.cells.get(e))})}function b(e){return u(e,(e,t)=>{let r=[];return t.tree.children.get(e.transform.ref).forEach(e=>r.push(t.cells.get(e))),r})}function y(e,t){return f(e,e=>!!e.obj&&e.obj.type===t.type)}function x(e,t){return d(c(e,(e,r)=>D(r.tree,r.cells,e.transform.ref,t)))}function S(e,t){return d(c(e,(e,r)=>P(r.tree,r.cells,e.transform.ref,t)))}function T(e,t){return d(c(e,(e,r)=>M(r.tree,r.cells,e.transform.ref,t)))}function C(e,t){return f(e,e=>e.transform.transformer===t)}function O(e,t){return d(c(e,(e,r)=>E(r.tree,r.cells,e.transform.ref,t)))}function I(e,t){return d(c(e,(e,r)=>k(r.tree,r.cells,e.transform.ref,t)))}function A(e){return d(c(e,(e,t)=>t.cells.get(t.tree.transforms.get(e.transform.ref).parent)))}function w(e,t,r,a,n){let o,s=e.transforms.get(r);for(;;){s=e.transforms.get(s.parent);let r=t.get(s.ref);
7319if(r.obj&&a(r)&&(o=r,n)||s.ref===i.E.RootRef)return o}}function D(e,t,r,a){return w(e,t,r,a,!0)}function E(e,t,r,a){return w(e,t,r,a,!1)}function M(e,t,r,a){return D(e,t,r,Array.isArray(a)?e=>a.indexOf(e.transform.transformer)>=0:e=>e.transform.transformer===a)}function P(e,t,r,a){return D(e,t,r,B(a))}function k(e,t,r,a){return E(e,t,r,B(a))}function B(e){return Array.isArray(e)?t=>{for(let r of e)if(r.type===t.obj.type)return!0}:t=>t.obj.type===e.type}function _(e,t,r){if(e.tags){for(let t of e.tags)if(r.tags.has(t)){r.refs[t]=e.ref;break}}return!0}function R(e,t,r){return!(e.tags&&e.tags.indexOf(r.tag)>=0)||(r.ref=e.ref,!1)}function F(e,t,r){if(e.tags){let t=r.tags.size,a=0;for(let n of e.tags)if(r.tags.has(n)&&++a===t){r.refs.push(e);break}}else 0===r.tags.size&&r.refs.push(e)}!function(e){function t(e,t,r){let a=r.cells.get(e.ref);return!a||!a.obj||a.obj.type!==r.type||(r.roots.push(a),!1)}function r(e,t,r){let a=r.cells.get(e.ref);return a&&a.obj&&a.obj.type===r.type&&r.ret.push(a),!0}function a(e,t,r){let a=r.cells.get(e.ref);return a&&a.obj&&a.transform.transformer===r.t&&r.ret.push(a),!0}function o(e,t,r){let a=r.cells.get(e.ref);return a&&"error"===a.status&&a.transform.transformer===r.t&&r.ret.push(a),!0}e.root=l(()=>e=>[e.cells.get(e.tree.root.ref)]),e.byRef=function(...e){return l(()=>t=>{let r=[];for(let a of e){let e=t.cells.get(a);e&&r.push(e)}return r})},e.byValue=function(...e){return l(()=>t=>e)},e.rootsOfType=function(e,r=i.E.RootRef){return l(()=>a=>{let i={roots:[],cells:a.cells,type:e.type};return n.K.doPreOrder(a.tree,a.tree.transforms.get(r),i,t),i.roots})},e.ofType=function(e,t=i.E.RootRef){return l(()=>a=>{let i={ret:[],cells:a.cells,type:e.type};return n.K.doPreOrder(a.tree,a.tree.transforms.get(t),i,r),i.ret})},e.ofTransformer=function(e,t=i.E.RootRef){return l(()=>r=>{let i={ret:[],cells:r.cells,t:e};return n.K.doPreOrder(r.tree,r.tree.transforms.get(t),i,a),i.ret})},e.ofTransformerWithError=function(e,t=i.E.RootRef){return l(()=>r=>{let a={ret:[],cells:r.cells,t:e};return n.K.doPreOrder(r.tree,r.tree.transforms.get(t),a,o),a.ret})}}(t=e.Generators||(e.Generators={})),s("flatMap",u),e.flatMap=u,s("mapObject",c),e.mapObject=c,s("unique",d),e.unique=d,s("first",p),e.first=p,s("filter",f),e.filter=f,s("withStatus",m),e.withStatus=m,s("withTag",h),e.withTag=h,s("subtree",g),e.subtree=g,s("children",b),e.children=b,s("ofType",y),e.ofType=y,s("ancestor",x),e.ancestor=x,s("ancestorOfType",S),e.ancestorOfType=S,s("ancestorWithTransformer",T),e.ancestorWithTransformer=T,s("withTransformer",C),e.withTransformer=C,s("root",O),e.root=O,s("rootOfType",I),e.rootOfType=I,s("parent",A),e.parent=A,e.findAncestor=D,e.findRoot=E,e.findAncestorWithTransformer=M,e.findAncestorOfType=P,e.findRootOfType=k,e.findUniqueTagsInSubtree=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{refs:{},tags:r},_).refs},e.findTagInSubtree=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{ref:void 0,tag:r},R).ref},e.findWithAllTags=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{refs:[],tags:r},F).refs},e.tryFindDecorator=function e(t,r,a){if(t.transforms.get(r).transformer===a)return t.cells.get(r);let n=t.tree.children.get(r);if(1!==n.size)return;let i=n.first();if(i&&t.transforms.get(i).transformer.definition.isDecorator)return e(t,i,a)},e.getDecorated=function e(t,r){let a=t.tree.children.get(r);if(1!==a.size)return t.cells.get(r);let n=a.first();return n&&t.transforms.get(n).transformer.definition.isDecorator?e(t,n):t.cells.get(r)}}(a||(a={}))},81752:function(e,t,r){r.d(t,{E:function(){return a}});var a,n=r(23492),i=r(85764),o=r(1571);!function(e){function t(e,t,r,a){let n;let o=a&&a.ref?a.ref:i.hb.create22();return a&&a.tags&&(0===(n="string"==typeof a.tags?[a.tags]:a.tags).length?n=void 0:n.sort()),{parent:e,transformer:t,state:(null==a?void 0:a.state)||{},tags:n,ref:o,dependsOn:a&&a.dependsOn,params:r,version:i.hb.create22()}}function r(e,t){return!!e.tags&&e.tags.indexOf(t)>=0}e.RootRef="-=root=-",e.isStateChange=function(e,t){return!!t&&(void 0!==t.isCollapsed&&e.isCollapsed!==t.isCollapsed||void 0!==t.isHidden&&e.isHidden!==t.isHidden||void 0!==t.isGhost&&e.isGhost!==t.isGhost||void 0!==t.isLocked&&e.isLocked!==t.isLocked)},e.assignState=function(e,t){if(!t)return!1;let r=!1;for(let a of Object.keys(t)){let n=t[a];!!n!=!!e[a]&&(r=!0,e[a]=n)}return r},e.syncState=function(e,t){if(!t)return!1;let r=!1;for(let a of Object.keys(t)){let n=t[a];!!n!=!!e[a]&&(r=!0,void 0!==n?e[a]=n:delete e[a])}for(let a of Object.keys(e)){let n=t[a];!!n!=!!e[a]&&(r=!0,void 0!==n?e[a]=n:delete e[a])}return r},e.create=t,e.withParams=function(e,t){return{...e,params:t,version:i.hb.create22()}},e.withState=function(e,t){return t?{...e,state:{...e.state,...t}}:e},e.withTags=function(e,t){let r;return t&&(0===(r="string"==typeof t?[t]:t).length?r=void 0:r.sort()),{...e,tags:r,version:i.hb.create22()}},e.withDependsOn=function(e,t){let r;return t&&(0===(r="string"==typeof t?[t]:t).length?r=void 0:r.sort()),{...e,dependsOn:r,version:i.hb.create22()}}
7319,e.withParent=function(e,t){return{...e,parent:t,version:i.hb.create22()}},e.createRoot=function(r){return t(e.RootRef,n.t.ROOT,{},{ref:e.RootRef,state:r})},e.hasTag=r,e.hasTags=function(e,t){if(!e.tags)return"string"!=typeof t&&0===t.length;if("string"==typeof t)return r(e,t);for(let r of t)if(0>e.tags.indexOf(r))return!1;return!0};let a={};function s(e){return e}e.setParamsHashVersion=function(e){var t,r;let n;try{n=(0,o.H8)(null!==(t=e.params)&&void 0!==t?t:a)}catch(i){let t=e.transformer.definition.customSerialization?e.transformer.definition.customSerialization.toJSON:s;n=(0,o.H8)(t(null!==(r=e.params)&&void 0!==r?r:a))}e.version=n},e.toJSON=function(e){let t;let r=e.transformer.definition.customSerialization?e.transformer.definition.customSerialization.toJSON:s;for(let r of Object.keys(e.state))e.state[r]&&(t||(t={}),t[r]=!0);return{parent:e.parent,transformer:e.transformer.id,params:e.params?r(e.params):void 0,state:t,tags:e.tags,ref:e.ref,dependsOn:e.dependsOn,version:e.version}},e.fromJSON=function(e){let t=n.t.get(e.transformer),r=t.definition.customSerialization?t.definition.customSerialization.fromJSON:s;return{parent:e.parent,transformer:t,params:e.params?r(e.params):void 0,state:e.state||{},tags:e.tags,ref:e.ref,dependsOn:e.dependsOn,version:e.version}}}(a||(a={}))},23492:function(e,t,r){r.d(t,{t:function(){return a}});var a,n=r(81752),i=r(14086),o=r(4176),s=r(75042),l=r(48502);!function(e){var t;let r,a;e.getParamDefinition=function(e,t,r){return e.definition.params?e.definition.params(t,r):{}},e.is=function(e){return!!e&&"function"==typeof e.toAction&&"function"==typeof e.apply},(t=r=e.UpdateResult||(e.UpdateResult={}))[t.Unchanged=0]="Unchanged",t[t.Updated=1]="Updated",t[t.Recreate=2]="Recreate",t[t.Null=3]="Null";let u=new Map,c=new Map;function d(e,t){let{name:r}=t,a=`${e}.${r}`;if(u.has(a)){if(u.get(a).definition===t)return u.get(a);l.Z3||console.warn(`A transform with id '${r}' is already registered. Please pick a unique identifier for your transforms and/or register them only once. This is to ensure that transforms can be serialized and replayed.`)}let s={apply:(e,t,r)=>n.E.create(e,s,t,r),toAction:()=>o.l.fromTransformer(s),namespace:e,id:a,definition:t,createDefaultParams:(e,r)=>t.params?i.e.getDefaultValues(t.params(e,r)):{}};return u.set(a,s),!function(e){for(let t of e.definition.from)if(c.has(t.type)){let r=c.get(t.type);for(let t=0;t<r.length;t++)if(r[t].id===e.id){r[t]=e;return}r.push(e)}else c.set(t.type,[e])}(s),s}e.getAll=function(){return Array.from(u.values())},e.get=function(e){let t=u.get(e);if(!t)throw Error(`A transformer with signature '${e}' is not registered.`);return t},e.fromType=function(e){return c.get(e)||[]},e.create=d,e.factory=function(e){return t=>d(e,t)},e.builderFactory=function(e){return a.build(e)},(a=e.Builder||(e.Builder={})).build=function(e){return t=>r=>d(e,{name:t.name,from:t.from instanceof Array?t.from:[t.from],to:t.to instanceof Array?t.to:[t.to],display:"string"==typeof t.display?{name:t.display}:t.display?t.display:{name:(0,s.kC)(t.name.replace(/[-]/g," "))},params:"object"==typeof t.params?()=>t.params:t.params?t.params:void 0,isDecorator:t.isDecorator,...r})},e.build=function(e){return a.build(e)},e.ROOT=d("build-in",{name:"root",from:[],to:[],display:{name:"Root",description:"For internal use."},apply(){throw Error("should never be applied")},update:()=>r.Unchanged})}(a||(a={}))},67604:function(e,t,r){r.d(t,{K:function(){return a.K}});var a=r(45173);r(41171)},45173:function(e,t,r){r.d(t,{K:function(){return a}});var a,n=r(19394),i=r(81752),o=r(41171);!function(e){class t{get root(){return this.transforms.get(i.E.RootRef)}asTransient(){return new o.t(this)}constructor(e,t,r){this.transforms=e,this.children=t,this.dependencies=r}}function r(e,r,a){return new t(e,r,a)}function a(e){s(this,this.tree.transforms.get(e))}function s(e,t){let r=e.tree.children.get(t.ref);r&&r.size&&r.forEach(a,e),e.f(t,e.tree,e.state)}function l(e,t,r,a){let n={tree:e,state:r,f:a};return s(n,t),n.state}function u(e){c(this,this.tree.transforms.get(e))}function c(e,t){let r=e.f(t,e.tree,e.state);if("boolean"==typeof r&&!r)return;let a=e.tree.children.get(t.ref);a&&a.size&&a.forEach(u,e)}function d(e,t,r,a){let n={tree:e,state:r,f:a};return c(n,t),n.state}
7319function p(e,t,r){r.push(e)}function f(e,t,r){r.push(i.E.toJSON(e))}e.createEmpty=function(e){let t=e||i.E.createRoot();return r((0,n.D5)([[t.ref,t]]),(0,n.D5)([[t.ref,(0,n.hU)()]]),(0,n.D5)())},e.create=r,e.doPostOrder=l,e.doPreOrder=d,e.subtreePostOrder=function(e,t){return l(e,t,[],p)},e.toJSON=function(e){let t=[];return d(e,e.root,t,f),{transforms:t}},e.fromJSON=function(e){let t=(0,n.D5)().asMutable(),a=(0,n.D5)().asMutable(),o=(0,n.D5)().asMutable();for(let r of e.transforms){let e=i.E.fromJSON(r);t.set(e.ref,e),a.has(e.ref)||a.set(e.ref,(0,n.hU)().asMutable()),e.ref!==e.parent&&a.get(e.parent).add(e.ref)}let s=new Set;for(let t of e.transforms){let e=t.ref;if(a.set(e,a.get(e).asImmutable()),t.dependsOn)for(let r of t.dependsOn)s.add(r),o.has(r)?o.get(r).add(e):o.set(r,(0,n.hU)([e]).asMutable())}return s.forEach(e=>{o.set(e,o.get(e).asImmutable())}),r(t.asImmutable(),a.asImmutable(),o.asImmutable())},e.dump=function(e){console.log({tr:e.transforms.keySeq().toArray(),tr1:e.transforms.valueSeq().toArray().map(e=>e.ref),ch:e.children.keySeq().toArray()})},e.subtreeHasRef=function(e,t,r){return!!(e.transforms.has(t)&&e.transforms.has(r))&&function e(t,r,a){if(r===a)return!0;let n=t.children.get(r).values();for(;;){let r=n.next();if(r.done)return!1;if(e(t,r.value,a))return!0}}(e,t,r)},e.getDecoratorRoot=function e(t,r){let a=t.children.get(r);if(1!==a.size)return r;let n=t.transforms.get(a.first());return(null==n?void 0:n.transformer.definition.isDecorator)?e(t,n.ref):r},e.setParamHashVersion=function(e,t){for(let r of t){let t=e.transforms.get(r);t&&i.E.setParamsHashVersion(t)}},e.reuseTransformParams=function(e,t){let r=new Map(t.transforms.map(e=>[e.ref,e]));for(let t of e.transforms){let e=r.get(t.ref);e&&t.transformer===e.transformer&&t.version===e.version&&(t.params=e.params)}}}(a||(a={}))},51493:function(e,t,r){r.d(t,{W:function(){return a}});var a,n=r(81752);!function(e){class t{get current(){return this._current}set current(e){this._current=e}getAncestorOfType(e){if(!this._current)return;let t=this._current;for(;;){if(!(t=this.cells.get(t.transform.parent)).obj)return;if(t.obj.type===e.type)return t.obj;if(t.transform.ref===n.E.RootRef)return}}getRootOfType(e){let t;if(!this._current)return;let r=this._current;for(;;){if(!r.obj)return;if(r.obj.type===e.type&&(t=r),r.transform.ref===n.E.RootRef)return t?t.obj:void 0;r=this.cells.get(r.transform.parent)}}constructor(e){this.cells=e,this._current=void 0}}e.Impl=t,e.getDecoratorChain=function(e,t){let r=e.cells,a=r.get(t),n=[a];for(;null==a?void 0:a.transform.transformer.definition.isDecorator;)n.push(a=r.get(a.transform.parent));return n},e.getRootOfType=function(e,t,r){let a;let i=e.cells.get(r);if(i)for(;;){if(!i.obj)return;if(i.obj.type===t.type&&(a=i),i.transform.ref===n.E.RootRef)return a?a.obj:void 0;i=e.cells.get(i.transform.parent)}}}(a||(a={}))},41171:function(e,t,r){r.d(t,{t:function(){return l}});var a=r(19394),n=r(81752),i=r(45173),o=r(67546),s=r(36111);class l{get childMutations(){return this._childMutations||(this._childMutations=new Map),this._childMutations}get dependencyMutations(){return this._dependencyMutations||(this._dependencyMutations=new Map),this._dependencyMutations}changeNodes(){this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable())}changeChildren(){this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable())}changeDependencies(){this.changedDependencies||(this.changedDependencies=!0,this.dependencies=this.dependencies.asMutable())}get root(){return this.transforms.get(n.E.RootRef)}asTransient(){return this.asImmutable().asTransient()}addChild(e,t){if(this.changeChildren(),this.childMutations.has(e))this.childMutations.get(e).add(t);else{let r=this.children.get(e).asMutable();r.add(t),this.children.set(e,r),this.childMutations.set(e,r)}}removeChild(e,t){if(this.changeChildren(),this.childMutations.has(e))this.childMutations.get(e).remove(t);else{let r=this.children.get(e).asMutable();r.remove(t),this.children.set(e,r),this.childMutations.set(e,r)}}clearRoot(){let e=n.E.RootRef;if(0===this.children.get(e).size)return;this.changeChildren();let t=(0,a.hU)();this.children.set(e,t),this.childMutations.set(e,t)}mutateDependency(e,t,r){let n=this.dependencyMutations.get(e);if(!n){let t=this.dependencies.get(e);if(!t&&"remove"===r)return;this.changeDependencies(),n=t?t.asMutable():(0,a.hU)().asMutable(),this.dependencyMutations.set(e,n),this.dependencies.set(e,n)}"add"===r?n.add(t):n.remove(t)}changeParent(e,t){d(this.transforms,e);let r=this.transforms.get(e);this.removeChild(r.parent,e),this.addChild(t,e),this.changeNodes(),this.transforms.set(e,n.E.withParent(r,t))}add(e){let t=e.ref;this.transforms.has(e.ref)&&this.transforms.get(e.ref).parent!==e.parent&&function(e){throw Error(`Transform '${e}' is already present in the tree.`)}(e.ref);let r=this.children.get(e.parent);if(r||function(e){throw Error(`Parent '${e}' must be present in the tree.`)}(e.parent),r.has(e.ref)||this.addChild(e.parent,e.ref),this.children.has(e.ref)||(this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable()),this.children.set(e.ref,(0,a.hU)())),this.changeNodes(),this.transforms.set(t,e),e.dependsOn)for(let r of e.dependsOn)this.mutateDependency(r,t,"add");return this}setParams(e,t){d(this.transforms,e);let r=this.transforms.get(e);return!(0,o.wU)(r.params,t)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,n.E.withParams(r,t)),!0)}setTags(e,t){d(this.transforms,e);let r=this.transforms.get(e),a=n.E.withTags(r,t);return!(0,s.h6)(r.tags,a.tags)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,a),!0)}
7319setDependsOn(e,t){d(this.transforms,e);let r=this.transforms.get(e),a=n.E.withDependsOn(r,t);return!(0,s.h6)(r.dependsOn,a.dependsOn)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,a),!0)}assignState(e,t){d(this.transforms,e);let r=this.transforms.get(e);if(this._stateUpdates&&this._stateUpdates.has(e))return n.E.assignState(r.state,t),r;{this._stateUpdates||(this._stateUpdates=new Set),this._stateUpdates.add(r.ref),this.changeNodes();let a=n.E.withState(r,t);return this.transforms.set(e,a),a}}remove(e){let t=this.transforms.get(e);if(!t)return[];let r=i.K.subtreePostOrder(this,t);if(e===n.E.RootRef){if(r.pop(),0===r.length)return r;this.clearRoot()}else{if(0===r.length)return r;this.removeChild(t.parent,t.ref)}for(let e of(this.changeNodes(),this.changeChildren(),r))this.transforms.delete(e.ref),this.children.delete(e.ref),this._childMutations&&this._childMutations.delete(e.ref);let a=[];for(let e of r){if(e.dependsOn)for(let t of e.dependsOn)this.transforms.has(t)&&this.mutateDependency(t,e.ref,"remove");if(this.dependencies.has(e.ref)){let t=this.dependencies.get(e.ref).toArray();for(let r of(this.changeDependencies(),this.dependencies.delete(e.ref),this._dependencyMutations&&this._dependencyMutations.delete(e.ref),t))if(this.transforms.has(r))for(let e of this.remove(r))a[a.length]=e}}for(let e of a)r[r.length]=e;return r}asImmutable(){return this.changedNodes||this.changedChildren||this._childMutations?(this._childMutations&&this._childMutations.forEach(u,this.children),this._dependencyMutations&&this._dependencyMutations.forEach(c,this.dependencies),i.K.create(this.changedNodes?this.transforms.asImmutable():this.transforms,this.changedChildren?this.children.asImmutable():this.children,this.changedDependencies?this.dependencies.asImmutable():this.dependencies)):this.tree}constructor(e){this.tree=e,this.transforms=this.tree.transforms,this.children=this.tree.children,this.dependencies=this.tree.dependencies,this.changedNodes=!1,this.changedChildren=!1,this.changedDependencies=!1,this._childMutations=void 0,this._dependencyMutations=void 0,this._stateUpdates=void 0}}function u(e,t){this.set(t,e.asImmutable())}function c(e,t){0===e.size?this.delete(t):this.set(t,e.asImmutable())}function d(e,t){if(!e.has(t))throw Error(`Node '${t}' is not present in the tree.`)}},1813:function(e,t,r){r.d(t,{z:function(){return s}});var a=r(67589),n=r(30502),i=r(20694),o=r(37893);function s(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},function(e){var t;let r;function a(e){switch(e){case"one":return r.One;case"two":return r.Two;case"three":return r.Three;case"four":return r.Four;case"five":return r.Five;case"six":return r.Six}}e.is=o.c.has,(t=r=e.Flag||(e.Flag={}))[t.None=0]="None",t[t.One=1]="One",t[t.Two=2]="Two",t[t.Three=4]="Three",t[t.Four=8]="Four",t[t.Five=16]="Five",t[t.Six=32]="Six",e.create=function(e){return o.c.create(e)},e.Names={one:r.One,two:r.Two,three:r.Three,four:r.Four,five:r.Five,six:r.Six},e.isName=function(t){return t in e.Names},e.fromName=a,e.fromNames=function(e){let t=r.None;for(let r=0,n=e.length;r<n;++r)t|=a(e[r]);return t},e.toNames=function(t){let a=[];return e.is(t,r.One)&&a.push("one"),e.is(t,r.Two)&&a.push("two"),e.is(t,r.Three)&&a.push("three"),e.is(t,r.Four)&&a.push("four"),e.is(t,r.Five)&&a.push("five"),e.is(t,r.Six)&&a.push("six"),a}}(e.Groups||(e.Groups={})),e.areEqual=function(e,t){if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].groups!==t.layers[r].groups||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,groups:i}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,groups:i})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,groups:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,groups:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,groups:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,groups:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,groups:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,groups:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,groups:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,groups:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,groups:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,groups:i})}return{kind:"element-loci",layers:t}}}(s||(s={}))},20178:function(e,t,r){r.d(t,{U:function(){return a}});var a,n=r(70371),i=r(30502),o=r(96985),s=r(14086),l=r(79455),u=r(28253);let c=(0,n.Il)(13421772),d={},p={name:"carbohydrate-symbol",label:"Carbohydrate Symbol",category:u.J.Residue,factory:function e(t,r){let a;if(t.structure){let{elements:e,getElementIndices:r}=t.structure.carbohydrates,n=(t,a)=>{if(!i.Unit.isAtomic(t))return c;let n=r(t,a);return n.length>0?e[n[0]].component.color:c};a=(e,t)=>t?o.Xp.Secondary:i.StructureElement.Location.is(e)?n(e.unit,e.element):i.Bond.isLocation(e)?n(e.aUnit,e.aUnit.elements[e.aIndex]):c}else a=()=>c;return{factory:e,granularity:"group",color:a,props:r,description:"Assigns colors according to the Symbol Nomenclature for Glycans (SNFG).",legend:(0,l.Z)(o.i$)}},getParams:function(e){return d},defaultValues:s.e.getDefaultValues(d),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>i.Model.hasCarbohydrate(e))};var f=r(11204),m=r(85764),h=r(60843),g=r(16454),b=r(67330),y=r(62713);let x=(0,n.Il)(13421772),S={...(0,y.r)({type:"colors",colorList:"red-yellow-blue"})},T={name:"element-index",label:"Element Index",category:u.J.Atom,factory:function e(t,r){let a,n;if(t.structure){let{units:e}=t.structure.root,o=e.length,s=new Map,l=new Map,u=0;for(let t=0;t<o;++t)s.set(t,u),u+=e[t].elements.length,l.set(e[t].id,t);let c=(0,y.X)(u,r);n=c.legend,a=t=>{if(i.StructureElement.Location.is(t)){let r=l.get(t.unit.id),a=b.h.findPredecessorIndex(e[r].elements,t.element);return c.color(s.get(r)+a)}if(i.Bond.isLocation(t)){let r=l.get(t.aUnit.id),a=b.h.findPredecessorIndex(e[r].elements,t.aUnit.elements[t.aIndex]);return c.color(s.get(r)+a)}return x}}else a=()=>x;return{factory:e,granularity:"groupInstance",preferSmoothing:!0,color:a,props:r,description:"Gives every element (atom or coarse sphere/gaussian) a unique color based on the position (index) of the element in the list of elements in the structure.",legend:n}},getParams:function(e){return S},defaultValues:s.e.getDefaultValues(S),isApplicable:e=>!!e.structure};var C=r(34602),O=r(67546);function I(e){let t={};return(0,O.mt)(e,(r,a)=>{t[a]=s.e.Color(e[a])}),t}var A=r(54521);let w=(0,n.Il)(16448250),D=(0,n.Il)(16715021),E={...(0,y.r)({type:"colors",colorList:"many-distinct"}),overrideWater:s.e.Boolean(!1,{description:"Override the color for water molecules."}),waterColor:s.e.Color(D,{hideIf:e=>!e.overrideWater,description:"Color for water molecules (if overrideWater is true)."})};function M(e,t){return`${e}|${t}`}function P(e,t){let r,a;
7319if(e.structure){let n=i.StructureElement.Location.create(e.structure.root),o=function(e){let t=new WeakMap,r=0;for(let a=0,n=e.models.length;a<n;++a){let n=e.models[a].sourceData;t.has(n)||t.set(n,r++)}return t}(e.structure),s=function(e,t){var r;let a=new Map;for(let n=0,i=e.models.length;n<i;++n){let i=null!==(r=t.get(e.models[n].sourceData))&&void 0!==r?r:-1,{label_entity_id:o}=e.models[n].atomicHierarchy.chains;for(let e=0,t=o.rowCount;e<t;++e){let t=M(o.value(e),i);a.has(t)||a.set(t,a.size)}let{coarseHierarchy:s}=e.models[n];if(s.isDefined){let{entity_id:e}=s.spheres;for(let t=0,r=e.rowCount;t<r;++t){let r=M(e.value(t),i);a.has(r)||a.set(r,a.size)}let{entity_id:t}=s.gaussians;for(let e=0,r=t.rowCount;e<r;++e){let r=M(t.value(e),i);a.has(r)||a.set(r,a.size)}}}return a}(e.structure.root,o),l=Array.from(s.keys()),u=(0,y.X)(s.size,t,{valueLabel:e=>l[e]});a=u.legend,r=e=>{var r;let a;if(i.StructureElement.Location.is(e))a=e;else{if(!i.Bond.isLocation(e))return w;n.unit=e.aUnit,n.element=e.aUnit.elements[e.aIndex],a=n}let l=function(e){switch(e.unit.kind){case i.Unit.Kind.Atomic:return i.StructureProperties.chain.label_entity_id(e);case i.Unit.Kind.Spheres:case i.Unit.Kind.Gaussians:return i.StructureProperties.coarse.entity_id(e)}}(a),c=null!==(r=o.get(a.unit.model.sourceData))&&void 0!==r?r:-1;if(t.overrideWater){let e=a.unit.model.entities;if("water"===e.data.type.value(e.getEntityIndex(l)))return t.waterColor}let d=M(l,c),p=s.get(d);return void 0===p?w:u.color(p)}}else r=()=>w;return{factory:P,granularity:"group",color:r,props:t,description:"Gives every chain a color based on its `label_entity_id` value.",legend:a}}let k={name:"entity-id",label:"Entity Id",category:u.J.Chain,factory:P,getParams:function(e){return s.e.clone(E)},defaultValues:s.e.getDefaultValues(E),isApplicable:e=>!!e.structure};var B=r(97667),_=r(24343),R=r(61445),F=r(66939),L=r(12618);let z="dark-2",N=(0,n.Il)(16448250),G={...(0,y.r)({type:"colors",colorList:z})};function U(e,t,r,a,n,i,o,s){let{entity_id:l,pdbx_src_id:u,pdbx_beg_seq_num:c,pdbx_end_seq_num:d}=n;for(let m=0,h=n._rowCount;m<h;++m){var p,f;let n,h;let g=l.value(m),b=`${r}|${g}`;if(e.has(b))n=e.get(b);else{let t=a.entities.getEntityIndex(g);n=new Int16Array(a.sequence.sequences[t].sequence.length),e.set(b,n)}let y=o?o.value(m):"",x=s?s.value(m)[0]:"",S=(p=i.value(m),f=u.value(m),`${r}|${g}|${p}|${x||y||f}`),T=c.valueKind(m)===_.s.ValueKinds.Present?c.value(m):1,C=d.valueKind(m)===_.s.ValueKinds.Present?d.value(m):n.length;t.has(S)?h=t.get(S):(h=t.size+1,t.set(S,h));for(let e=T;e<=C;++e)n[e-1]=h}}function V(e){let t=new Map,r=new Map;for(let a=0,n=e.length;a<n;++a){let n=e[a];if(!L.rg.is(n.sourceData))continue;let{entity_src_gen:i,entity_src_nat:o,pdbx_entity_src_syn:s}=n.sourceData.data.db;U(t,r,a,n,i,i.pdbx_gene_src_scientific_name,i.plasmid_name,i.pdbx_gene_src_gene),U(t,r,a,n,o,o.pdbx_organism_scientific,o.pdbx_plasmid_name),U(t,r,a,n,s,s.organism_scientific)}return{seqToSrcByModelEntity:t,srcKeySerialMap:r}}function j(e,t){let r,a;if(e.structure){let n;let o=i.StructureElement.Location.create(e.structure),{models:s}=e.structure.root,{seqToSrcByModelEntity:l,srcKeySerialMap:u}=V(s),c=(n=0,Array.from(u.keys()).map(e=>{let t=e.split("|"),r=t[2],a=(0,R.U)(t[3])?`Unnamed ${++n}`:t[3];return`${a}${r?` (${r})`:""}`})),d=(0,y.X)(u.size,t,{valueLabel:e=>c[e]});a=d.legend;let p=e=>{let t=s.indexOf(e.unit.model),r=i.StructureProperties.entity.id(e),a=`${t}|${r}`,n=l.get(a);if(!n)return N;{let t=n[i.StructureProperties.residue.label_seq_id(e)-1]-1;return -1===t?N:d.color(t)}};r=e=>i.StructureElement.Location.is(e)?p(e):i.Bond.isLocation(e)?(o.unit=e.aUnit,o.element=e.aUnit.elements[e.aIndex],p(o)):N}else r=()=>N;return{factory:j,granularity:"group",color:r,props:t,description:"Gives ranges of a polymer chain a color based on the entity source it originates from (e.g. gene, plasmid, organism).",legend:a}}let H={name:"entity-source",label:"Entity Source",category:u.J.Chain,factory:j,getParams:function(e){let t=s.e.clone(G);return e.structure&&V(e.structure.root.models).srcKeySerialMap.size>F.wT[z].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(z).list}}),t},defaultValues:s.e.getDefaultValues(G),isApplicable:e=>!!e.structure},q=(0,n.Il)(13421772),X={...(0,y.r)({type:"colors",colorList:"many-distinct"})};function W(e,t){var r;let a,n;let o=-1;if(e.structure){let s=(null!==(r=i.Model.MaxIndex.get(e.structure.models[0]).value)&&void 0!==r?r:-1)+1;o=s;let l=(0,y.X)(s,t);n=l.legend,a=e=>i.StructureElement.Location.is(e)?l.color(i.Model.Index.get(e.unit.model).value||0):i.Bond.isLocation(e)?l.color(i.Model.Index.get(e.aUnit.model).value||0):q}else a=()=>q;return{factory:W,granularity:"instance",color:a,props:t,contextHash:o,description:"Gives every model a unique color based on its index.",legend:n}}let K={name:"model-index",label:"Model Index",category:u.J.Chain,factory:W,getParams:function(e){return s.e.clone(X)},defaultValues:s.e.getDefaultValues(X),isApplicable:e=>!!e.structure&&e.structure.elementCount>0},Q=(0,n.Il)(13421772),Z={...(0,y.r)({type:"colors",colorList:"many-distinct"})};function Y(e,t){var r;let a,n;let o=-1;if(e.structure){let s=(null!==(r=i.Structure.MaxIndex.get(e.structure).value)&&void 0!==r?r:-1)+1;o=s;let l=(0,y.X)(s,t);n=l.legend,a=e=>i.StructureElement.Location.is(e)?l.color(i.Structure.Index.get(e.structure).value||0):i.Bond.isLocation(e)?l.color(i.Structure.Index.get(e.aStructure).value||0):Q}else a=()=>Q;return{factory:Y,granularity:"instance",color:a,props:t,contextHash:o,description:"Gives every structure a unique color based on its index.",legend:n}}let $={name:"structure-index",label:"Structure Index",category:u.J.Chain,factory:Y,getParams:function(e){return s.e.clone(Z)},defaultValues:s.e.getDefaultValues(Z),isApplicable:e=>!!e.structure&&e.structure.elementCount>0},J="dark-2",ee=(0,n.Il)(13421772),et={...(0,y.r)({type:"colors",colorList:J})};function er(e,t){let r,a;
7319if(e.structure){let{units:n}=e.structure.root,o=(0,y.X)(n.length,t);a=o.legend;let s=new Map;for(let e=0,t=n.length;e<t;++e)s.set(n[e].id,o.color(e));r=e=>i.StructureElement.Location.is(e)?s.get(e.unit.id):i.Bond.isLocation(e)?s.get(e.aUnit.id):ee}else r=()=>ee;return{factory:er,granularity:"instance",color:r,props:t,description:"Gives every chain instance (single chain or collection of single elements) a unique color based on the position (index) of the chain in the list of chains in the structure.",legend:a}}let ea={name:"unit-index",label:"Chain Instance",category:u.J.Chain,factory:er,getParams:function(e){let t=s.e.clone(et);return e.structure&&e.structure.root.units.length>F.wT[J].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(J).list}}),t},defaultValues:s.e.getDefaultValues(et),isApplicable:e=>!!e.structure};var en=r(1571);let ei=(0,n.Il)(13421772),eo={...(0,y.r)({type:"colors",colorList:"purples"})};function es(e,t){var r,a;let n,o;let s=-1;if(e.structure){let{models:l}=e.structure.root,u=0;for(let e of l)u=Math.max(u,(null===(r=i.Model.TrajectoryInfo.get(e))||void 0===r?void 0:r.size)||0);let c=[u],d=(0,y.X)(u,t);o=d.legend;let p=new Map;for(let e=0,t=l.length;e<t;++e){let t=(null===(a=i.Model.TrajectoryInfo.get(l[e]))||void 0===a?void 0:a.index)||0;p.set(t,d.color(t)),c.push(t)}s=(0,en.nF)(c),n=e=>i.StructureElement.Location.is(e)?p.get(i.Model.TrajectoryInfo.get(e.unit.model).index):i.Bond.isLocation(e)?p.get(i.Model.TrajectoryInfo.get(e.aUnit.model).index):ei}else n=()=>ei;return{factory:es,granularity:"instance",color:n,props:t,contextHash:s,description:"Gives every model (frame) a unique color based on the index in its trajectory.",legend:o}}let el={name:"trajectory-index",label:"Trajectory Index",category:u.J.Chain,factory:es,getParams:function(e){return s.e.clone(eo)},defaultValues:s.e.getDefaultValues(eo),isApplicable:e=>!!e.structure&&e.structure.elementCount>0&&i.Model.TrajectoryInfo.get(e.structure.models[0]).size>1},eu=(0,n.E)({H:16777215,D:16777152,T:16777120,HE:14286847,LI:13402367,BE:12779264,B:16758197,C:9474192,N:3166456,O:16715021,F:9494608,NE:11789301,NA:11230450,MG:9109248,AL:12560038,SI:1578e4,P:16744448,S:16777008,CL:2093087,AR:8442339,K:9388244,CA:4062976,SC:15132390,TI:12567239,V:10921643,CR:9083335,MN:10255047,FE:14706227,CO:15765664,NI:5296208,CU:13140019,ZN:8224944,GA:12750735,GE:6721423,AS:12419299,SE:16752896,BR:10889513,KR:6076625,RB:7351984,SR:65280,Y:9764863,ZR:9756896,NB:7586505,MO:5551541,TC:3907230,RU:2396047,RH:687500,PD:27013,AG:12632256,CD:16767375,IN:10909043,SN:6717568,SB:10380213,TE:13924864,I:9699476,XE:9699476,CS:5707663,BA:51456,LA:7394559,CE:16777159,PR:14286791,ND:13107143,PM:10747847,SM:9437127,EU:6422471,GD:4587463,TB:3211207,DY:2097095,HO:65436,ER:58997,TM:54354,YB:48952,LU:43812,HF:5096191,TA:5089023,W:2200790,RE:2522539,OS:2516630,IR:1528967,PT:13684960,AU:16765219,HG:12105936,TL:10900557,PB:5724513,BI:10375093,PO:11230208,AT:7688005,RN:4358806,FR:4325478,RA:32e3,AC:7384058,TH:47871,PA:41471,U:36863,NP:33023,PU:27647,AM:5528818,CM:7888099,BK:9064419,CF:10565332,ES:11739092,FM:11739066,MD:11734438,NO:12389767,LR:13041766,RF:13369433,DB:13697103,SG:14221381,BH:14680120,HS:15073326,MT:15400998,DS:16777215,RG:16777215,CN:16777215,UUT:16777215,FL:16777215,UUP:16777215,LV:16777215,UUH:16777215}),ec=(0,n.Il)(16777215),ed={carbonColor:s.e.MappedStatic("chain-id",{"chain-id":s.e.Group(g.NT),"unit-index":s.e.Group(et,{label:"Chain Instance"}),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"operator-name":s.e.Group(A.A4),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"trajectory-index":s.e.Group(eo),uniform:s.e.Group(f.QG),"element-symbol":s.e.EmptyGroup()},{description:"Use chain-id coloring for carbon atoms."}),saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(.2,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eu))})};function ep(e,t){var r;let a=(0,C.JM)("default"===t.colors.name?eu:t.colors.params,t.saturation,t.lightness),n=function(e,t){switch(t.name){case"chain-id":return(0,g.Lf)(e,t.params);case"unit-index":return er(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"operator-name":return(0,A.DL)(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"trajectory-index":return es(e,t.params);case"uniform":return(0,f.qY)(e,t.params);case"element-symbol":return;default:(0,B.UT)(t)}}(e,t.carbonColor),o=null==n?void 0:n.color,s=null!==(r=null==n?void 0:n.contextHash)&&void 0!==r?r:-1;function u(e,t){return o&&"C"===e?o(t,!1):function(e,t){let r=e[t];return void 0===r?ec:r}(a,e)}return{factory:ep,granularity:"operator-name"===t.carbonColor.name||"unit-index"===t.carbonColor.name?"groupInstance":"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){
7319if(i.Unit.isAtomic(e.unit)){let{type_symbol:t}=e.unit.model.atomicHierarchy.atoms;return u(t.value(e.element),e)}}else if(i.Bond.isLocation(e)&&i.Unit.isAtomic(e.aUnit)){let{type_symbol:t}=e.aUnit.model.atomicHierarchy.atoms;return u(t.value(e.aUnit.elements[e.aIndex]),e)}return ec},props:t,contextHash:s,description:"Assigns a color to every atom according to its chemical element.",legend:(0,l.Z)(Object.keys(a).map(e=>[e,a[e]]))}}let ef={name:"element-symbol",label:"Element Symbol",category:u.J.Atom,factory:ep,getParams:function(e){return s.e.clone(ed)},defaultValues:s.e.getDefaultValues(ed),isApplicable:e=>!!e.structure};var em=r(91044),eh=r(57871);let eg=(0,n.E)({water:3697840,ion:15729279,protein:12496596,RNA:16629894,DNA:12540695,PNA:4367514,saccharide:8374655}),ev=(0,n.Il)(16777113),eb={saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eg))})};function ey(e,t,r){switch((0,eh.Ut)(t,r)){case em.MoleculeType.Water:return e.water;case em.MoleculeType.Ion:return e.ion;case em.MoleculeType.Protein:return e.protein;case em.MoleculeType.RNA:return e.RNA;case em.MoleculeType.DNA:return e.DNA;case em.MoleculeType.PNA:return e.PNA;case em.MoleculeType.Saccharide:return e.saccharide}return ev}function ex(e,t){let r=(0,C.JM)("default"===t.colors.name?eg:t.colors.params,t.saturation,t.lightness);return{factory:ex,granularity:"group",color:function(e){return i.StructureElement.Location.is(e)?ey(r,e.unit,e.element):i.Bond.isLocation(e)?ey(r,e.aUnit,e.aUnit.elements[e.aIndex]):ev},props:t,description:"Assigns a color based on the molecule type of a residue.",legend:(0,l.Z)(Object.keys(r).map(e=>[e,r[e]]).concat([["Other/unknown",ev]]))}}let eS={name:"molecule-type",label:"Molecule Type",category:u.J.Residue,factory:ex,getParams:function(e){return eb},defaultValues:s.e.getDefaultValues(eb),isApplicable:e=>!!e.structure};var eT=r(29156);let eC="dark-2",eO=(0,n.Il)(16448250),eI={...(0,y.r)({type:"colors",colorList:eC})};function eA(e){switch(e.kind){case i.Unit.Kind.Atomic:return i.StructureProperties.chain.label_asym_id;case i.Unit.Kind.Spheres:case i.Unit.Kind.Gaussians:return i.StructureProperties.coarse.asym_id}}function ew(e){let t=new Map;for(let r=0,a=e.unitSymmetryGroups.length;r<a;++r){let a=e.unitSymmetryGroups[r].units[0],{model:n}=a;if(i.Unit.isAtomic(a)){let{chainAtomSegments:e,chains:r}=n.atomicHierarchy,i=eT.v.transientSegments(e,a.elements);for(;i.hasNext;){let{index:e}=i.move(),a=r.label_entity_id.value(e),o=n.entities.getEntityIndex(a);if("polymer"===n.entities.data.type.value(o)){let a=r.label_asym_id.value(e);t.has(a)||t.set(a,t.size)}}}else if(i.Unit.isCoarse(a)){let{chainElementSegments:e,asym_id:r,entity_id:o}=i.Unit.isSpheres(a)?n.coarseHierarchy.spheres:n.coarseHierarchy.gaussians,s=eT.v.transientSegments(e,a.elements);for(;s.hasNext;){let{index:a}=s.move(),i=e.offsets[a],l=o.value(i),u=n.entities.getEntityIndex(l);if("polymer"===n.entities.data.type.value(u)){let e=r.value(i);t.has(e)||t.set(e,t.size)}}}}return t}let eD={name:"polymer-id",label:"Polymer Chain Id",category:u.J.Chain,factory:function e(t,r){let a,n;if(t.structure){let e=i.StructureElement.Location.create(t.structure),o=ew(t.structure.root),s=Array.from(o.keys()),l=(0,y.X)(o.size,r,{valueLabel:e=>s[e]});n=l.legend,a=t=>{let r;if(i.StructureElement.Location.is(t)){let e=eA(t.unit);r=o.get(e(t))}else if(i.Bond.isLocation(t)){let a=eA(t.aUnit);e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],r=o.get(a(e))}return void 0===r?eO:l.color(r)}}else a=()=>eO;return{factory:e,granularity:"group",color:a,props:r,description:"Gives every polymer chain a color based on its `asym_id` value.",legend:n}},getParams:function(e){let t=s.e.clone(eI);return e.structure&&ew(e.structure.root).size>F.wT[eC].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(eC).list}}),t},defaultValues:s.e.getDefaultValues(eI),isApplicable:e=>!!e.structure},eE="dark-2",eM=(0,n.Il)(13421772),eP={...(0,y.r)({type:"colors",colorList:eE})};function ek(e){let t=0,{units:r}=e;for(let e=0,a=r.length;e<a;++e)r[e].polymerElements.length>0&&++t;return t}let eB={name:"polymer-index",label:"Polymer Chain Instance",category:u.J.Chain,factory:function e(t,r){let a,n;if(t.structure){let e=(0,y.X)(ek(t.structure.root),r);n=e.legend;let{units:o}=t.structure.root,s=new Map;for(let t=0,r=0,a=o.length;t<a;++t)o[t].polymerElements.length>0&&(s.set(o[t].id,e.color(r)),++r);
7319a=e=>{let t;return i.StructureElement.Location.is(e)?t=s.get(e.unit.id):i.Bond.isLocation(e)&&(t=s.get(e.aUnit.id)),void 0!==t?t:eM}}else a=()=>eM;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every polymer chain instance a unique color based on the position (index) of the polymer in the list of polymers in the structure.",legend:n}},getParams:function(e){let t=s.e.clone(eP);return e.structure&&ek(e.structure.root)>F.wT[eE].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(eE).list}}),t},defaultValues:s.e.getDefaultValues(eP),isApplicable:e=>!!e.structure},e_=(0,n.E)({ALA:9240460,ARG:124,ASN:16743536,ASP:10485826,CYS:16777072,GLN:16731212,GLU:6684672,GLY:15658734,HIS:7368959,ILE:19456,LEU:4546117,LYS:4671416,MET:12099650,PHE:5459026,PRO:5395026,SER:16740418,THR:12078080,TRP:5195264,TYR:9203788,VAL:16747775,A:14423100,G:3329330,I:10145074,C:16766720,T:4286945,U:4251856,DA:14423100,DG:3329330,DI:10145074,DC:16766720,DT:4286945,DU:4251856,APN:14423100,GPN:3329330,CPN:16766720,TPN:4286945}),eR=(0,n.Il)(16711935),eF={saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(1,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(e_))})};function eL(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function ez(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function eN(e,t){let r=e[t];return void 0===r?eR:r}function eG(e,t){let r=(0,C.JM)("default"===t.colors.name?e_:t.colors.params,t.saturation,t.lightness);return{factory:eG,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){if(i.Unit.isAtomic(e.unit))return eN(r,eL(e.unit,e.element));{let t=ez(e.unit,e.element);if(t)return eN(r,t)}}else if(i.Bond.isLocation(e)){if(i.Unit.isAtomic(e.aUnit))return eN(r,eL(e.aUnit,e.aUnit.elements[e.aIndex]));{let t=ez(e.aUnit,e.aUnit.elements[e.aIndex]);if(t)return eN(r,t)}}return eR},props:t,description:"Assigns a color to every residue according to its name.",legend:(0,l.Z)(Object.keys(r).map(e=>[e,r[e]]).concat([["Unknown",eR]]))}}let eU={name:"residue-name",label:"Residue Name",category:u.J.Residue,factory:eG,getParams:function(e){return eF},defaultValues:s.e.getDefaultValues(eF),isApplicable:e=>!!e.structure},eV=(0,n.E)({ARG:255,ASP:16711680,GLU:16711680,HIS:3392505,LYS:255,ALA:16777215,ASN:16777215,CYS:16777215,GLN:16777215,GLY:16777215,ILE:16777215,LEU:16777215,MET:16777215,PHE:16777215,PRO:16777215,SER:16777215,THR:16777215,TRP:16777215,TYR:16777215,VAL:16777215,MSE:16777215,SEP:16777215,TPO:16777215,PTR:16777215,PCA:16777215,HYP:16777215,HSD:16777215,HSE:16777215,HSP:255,LSN:16777215,ASPP:16777215,GLUP:16777215,HID:16777215,HIE:16777215,HIP:255,LYN:16777215,ASH:16777215,GLH:16777215,A:16777215,G:16777215,I:16777215,C:16777215,T:16777215,U:16777215,DA:16777215,DG:16777215,DI:16777215,DC:16777215,DT:16777215,DU:16777215,APN:16777215,GPN:16777215,CPN:16777215,TPN:16777215}),ej=(0,n.Il)(16711935),eH={method:s.e.MappedStatic("by-name",{"by-name":s.e.Group({saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eV))})},{isFlat:!0})})};function eq(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function eX(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function eW(e,t){let r=e[t];return void 0===r?ej:r}let eK={name:"residue-charge",label:"Residue Charge",category:u.J.Residue,factory:function e(t,r){let{saturation:a,lightness:n,colors:o}=r.method.params,s=(0,C.JM)("default"===r.method.params.colors.name?eV:o.params,a,n);return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){
7319if(i.Unit.isAtomic(e.unit))return eW(s,eq(e.unit,e.element));{let t=eX(e.unit,e.element);if(t)return eW(s,t)}}else if(i.Bond.isLocation(e)){if(i.Unit.isAtomic(e.aUnit))return eW(s,eq(e.aUnit,e.aUnit.elements[e.aIndex]));{let t=eX(e.aUnit,e.aUnit.elements[e.aIndex]);if(t)return eW(s,t)}}return ej},props:r,description:"Assigns a color to every residue based on its charge state.",legend:(0,l.Z)(Object.keys(s).map(e=>[e,s[e]]).concat([["Unknown",ej]]))}},getParams:function(e){return s.e.clone(eH)},defaultValues:s.e.getDefaultValues(eH),isApplicable:e=>!!e.structure};var eQ=r(29724);let eZ=(0,n.E)({alphaHelix:16711808,threeTenHelix:10485888,piHelix:6291584,betaTurn:6324479,betaStrand:16762880,coil:16777215,bend:6740169,turn:45670,dna:11403518,rna:16580962,carbohydrate:10921722}),eY=(0,n.Il)(8421504),e$={saturation:s.e.Numeric(-1,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eZ))})};function eJ(e,t,r,a){let n=em.SecondaryStructureType.create(em.SecondaryStructureType.Flag.None);if(a&&i.Unit.isAtomic(t)){let e=a.get(t.invariantId);e&&(n=e.type[e.getIndex(t.residueIndex[r])])}if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Helix))return em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Helix3Ten)?e.threeTenHelix:em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.HelixPi)?e.piHelix:e.alphaHelix;if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Beta))return e.betaStrand;if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Bend))return e.bend;{if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Turn))return e.turn;let a=(0,eh.Ut)(t,r);if(a===em.MoleculeType.DNA)return e.dna;if(a===em.MoleculeType.RNA)return e.rna;if(a===em.MoleculeType.Saccharide)return e.carbohydrate;if(a===em.MoleculeType.Protein)return e.coil}return eY}function e0(e,t){let r=e.structure&&eQ.N.get(e.structure),a=r?(0,en.TO)(r.id,r.version):-1,n=(0,C.JM)("default"===t.colors.name?eZ:t.colors.params,t.saturation,t.lightness);return{factory:e0,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?eJ(n,e.unit,e.element,null==r?void 0:r.value):i.Bond.isLocation(e)?eJ(n,e.aUnit,e.aUnit.elements[e.aIndex],null==r?void 0:r.value):eY},props:t,contextHash:a,description:"Assigns a color based on the type of secondary structure and basic molecule type.",legend:(0,l.Z)(Object.keys(n).map(e=>[e,n[e]]).concat([["Other",eY]]))}}let e1={name:"secondary-structure",label:"Secondary Structure",category:u.J.Residue,factory:e0,getParams:function(e){return e$},defaultValues:s.e.getDefaultValues(e$),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?eQ.N.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&eQ.N.ref(e.structure,!1)}},e2=(0,n.Il)(13421772),e3={list:s.e.ColorList("turbo-no-black",{presetKind:"scale"})};function e4(e,t){let{model:r}=e;switch(e.kind){case i.Unit.Kind.Atomic:let a=r.atomicHierarchy.residueAtomSegments.index[t];return r.atomicHierarchy.residues.label_seq_id.value(a);case i.Unit.Kind.Spheres:return Math.round((r.coarseHierarchy.spheres.seq_id_begin.value(t)+r.coarseHierarchy.spheres.seq_id_end.value(t))/2);case i.Unit.Kind.Gaussians:return Math.round((r.coarseHierarchy.gaussians.seq_id_begin.value(t)+r.coarseHierarchy.gaussians.seq_id_end.value(t))/2)}}function e5(e,t){let{model:r}=e,a="";switch(e.kind){case i.Unit.Kind.Atomic:let n=r.atomicHierarchy.chainAtomSegments.index[t];a=r.atomicHierarchy.chains.label_entity_id.value(n);break;case i.Unit.Kind.Spheres:a=r.coarseHierarchy.spheres.entity_id.value(t);break;case i.Unit.Kind.Gaussians:a=r.coarseHierarchy.gaussians.entity_id.value(t)}if(""===a)return 0;let o=r.entities.getEntityIndex(a);if(-1===o)return 0;let s=r.sequence.byEntityKey[o];return void 0===s?0:s.sequence.length}function e6(e,t){let r=n.qe.create({listOrName:t.list.colors,minLabel:"Start",maxLabel:"End"});return{factory:e6,granularity:"group",preferSmoothing:!0,color:e=>{if(i.StructureElement.Location.is(e)){let{unit:t,element:a}=e,n=e4(t,a);if(n>0){let e=e5(t,a);if(e)return r.setDomain(0,e-1),r.color(n)}}else if(i.Bond.isLocation(e)){let{aUnit:t,aIndex:a}=e,n=e4(t,t.elements[a]);if(n>0){let e=e5(t,t.elements[a]);if(e)return r.setDomain(0,e-1),r.color(n)}}return e2},props:t,description:"Gives every polymer residue a color based on its `seq_id` value.",legend:r?r.legend:void 0}}let e8={name:"sequence-id",label:"Sequence Id",category:u.J.Residue,factory:e6,getParams:function(e){return e3},defaultValues:s.e.getDefaultValues(e3),isApplicable:e=>!!e.structure};var e7=r(62590);let e9=(0,n.Il)(16777113),te={domain:s.e.Interval([0,100]),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})};function tt(e,t){return i.Unit.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t):i.Unit.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]:0}function tr(e,t){let r;return r="set"===t.list.kind?n.qe.createDiscrete({reverse:!0,domain:t.domain,listOrName:t.list.colors}):n.qe.create({reverse:!0,domain:t.domain,listOrName:t.list.colors}),{factory:tr,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?r.color(tt(e.unit,e.element)):i.Bond.isLocation(e)?r.color(tt(e.aUnit,e.aUnit.elements[e.aIndex])):e9},props:t,description:"Assigns a color based on the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique.",legend:r?r.legend:void 0}}let ta={name:"uncertainty",label:"Uncertainty/Disorder",category:u.J.Atom,factory:tr,getParams:function(e){return te},defaultValues:s.e.getDefaultValues(te),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.B_iso_or_equiv.isDefined||e.coarseHierarchy.isDefined)},tn=(0,n.Il)(15658734),ti={style:s.e.MappedStatic("entity-id",{uniform:s.e.Group(f.QG),"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"trajectory-index":s.e.Group(eo)}),carbonLightness:s.e.Numeric(.8,{min:-6,max:6,step:.1})},to={name:"illustrative",label:"Illustrative",category:u.J.Misc,factory:function e(t,r){let{c
7319olor:a,legend:o,contextHash:s}=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"trajectory-index":return es(e,t.params);default:(0,B.UT)(t)}}(t,r.style);function l(e,t){let i=a(e,!1);return"C"===t?n.Il.lighten(i,r.carbonLightness):i}return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)&&i.Unit.isAtomic(e.unit)){let t=e.unit.model.atomicHierarchy.atoms.type_symbol.value(e.element);return l(e,t)}if(i.Bond.isLocation(e)&&i.Unit.isAtomic(e.aUnit)){let t=e.aUnit.elements[e.aIndex],r=e.aUnit.model.atomicHierarchy.atoms.type_symbol.value(t);return l(e,r)}return tn},props:r,contextHash:s,description:"Assigns an illustrative color that gives every chain a color based on the chosen style but with lighter carbons (inspired by David Goodsell's Molecule of the Month style).",legend:o}},getParams:function(e){return s.e.clone(ti)},defaultValues:s.e.getDefaultValues(ti),isApplicable:e=>!!e.structure},ts={list:s.e.ColorList("red-yellow-green",{presetKind:"scale"}),scale:s.e.Select("DGwif",[["DGwif","DG water-membrane"],["DGwoct","DG water-octanol"],["Oct-IF","DG difference"]])},tl={DGwif:0,DGwoct:1,"Oct-IF":2};function tu(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function tc(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function td(e,t){let r=tl[t.scale],a=1/0,o=-1/0;for(let e in em.ResidueHydrophobicity){let t=em.ResidueHydrophobicity[e][r];a=Math.min(a,t),o=Math.max(o,t)}let s=n.qe.create({listOrName:t.list.colors,domain:[o,a],minLabel:"Hydrophilic",maxLabel:"Hydrophobic"});return{factory:td,granularity:"group",preferSmoothing:!0,color:function(e){let t;return i.StructureElement.Location.is(e)?t=i.Unit.isAtomic(e.unit)?tu(e.unit,e.element):tc(e.unit,e.element):i.Bond.isLocation(e)&&(t=i.Unit.isAtomic(e.aUnit)?tu(e.aUnit,e.aUnit.elements[e.aIndex]):tc(e.aUnit,e.aUnit.elements[e.aIndex])),s.color(t?function(e,t){let r=em.ResidueHydrophobicity[e];return void 0===r?0:r[t]}(t,r):0)},props:t,description:'Assigns a color to every amino acid according to the "Experimentally determined hydrophobicity scale for proteins at membrane interfaces" by Wimely and White (doi:10.1038/nsb1096-842).',legend:s?s.legend:void 0}}let tp={name:"hydrophobicity",label:"Hydrophobicity",category:u.J.Residue,factory:td,getParams:function(e){return ts},defaultValues:s.e.getDefaultValues(ts),isApplicable:e=>!!e.structure},tf=(0,n.Il)(13421772),tm={domain:s.e.Interval([0,1]),list:s.e.ColorList("purples",{presetKind:"scale"})};function th(e,t){return i.Unit.isAtomic(e)?e.model.atomicConformation.occupancy.value(t):0}function tg(e,t){let r=n.qe.create({reverse:!1,domain:t.domain,listOrName:t.list.colors});return{factory:tg,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?r.color(th(e.unit,e.element)):i.Bond.isLocation(e)?r.color(th(e.aUnit,e.aUnit.elements[e.aIndex])):tf},props:t,description:"Assigns a color based on the occupancy of an atom.",legend:r?r.legend:void 0}}let tv={name:"occupancy",label:"Occupancy",category:u.J.Atom,factory:tg,getParams:function(e){return tm},defaultValues:s.e.getDefaultValues(tm),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.occupancy.isDefined)};var tb=r(87144);let ty="dark-2",tx=(0,n.Il)(13421772),tS={...(0,y.r)({type:"colors",colorList:ty})};function tT(e){return e.map(e=>`${e+1e4}`.padStart(5,"0")).join("")}function tC(e){let t=(0,R.Ip)(1e4,0),r=parseInt(e.substr(0,t)),a=parseInt(e.substr(t,t)),n=parseInt(e.substr(t+t,t));return tb.AO.create(r-1e4,a-1e4,n-1e4)}function tO(e){return e.map(e=>e+5).join("")}function tI(e){let t=new Map,r=new Set;for(let t=0,a=e.units.length;t<a;++t){let a=tT(e.units[t].conformation.operator.hkl);r.add(a)}let a=Array.from(r.values()).sort();
7319return a.forEach(e=>t.set(e,t.size)),{min:tC(a[0]),max:tC(a[a.length-1]),map:t}}let tA={name:"operator-hkl",label:"Operator HKL",category:u.J.Symmetry,factory:function e(t,r){let a,n;if(t.structure){let{min:e,max:o,map:s}=tI(t.structure.root),l=[];s.forEach((e,t)=>{let r=e%s.size,a=tO(tC(t));void 0===l[r]?l[r]=a:l[r]+=`, ${a}`});let u={minLabel:tO(e),maxLabel:tO(o),valueLabel:e=>l[e]},c=(0,y.X)(s.size,r,u);n=c.legend,a=e=>{let t;if(i.StructureElement.Location.is(e)){let r=tT(e.unit.conformation.operator.hkl);t=s.get(r)}else if(i.Bond.isLocation(e)){let r=tT(e.aUnit.conformation.operator.hkl);t=s.get(r)}return void 0===t?tx:c.color(t)}}else a=()=>tx;return{factory:e,granularity:"instance",color:a,props:r,description:"Assigns a color based on the operator HKL value of a transformed chain.",legend:n}},getParams:function(e){let t=s.e.clone(tS);return e.structure&&tI(e.structure.root).map.size>F.wT[ty].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(ty).list}}),t},defaultValues:s.e.getDefaultValues(tS),isApplicable:e=>!!e.structure};var tw=r(27994);let tD=(0,n.Il)(16777113),tE={domain:s.e.Interval([-1,1]),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})};function tM(e,t){var r;return null===(r=tw.o.Provider.get(e.model))||void 0===r?void 0:r.data.value(t)}function tP(e,t){let r=n.qe.create({domain:t.domain,listOrName:t.list.colors});return{factory:tP,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){let t=tM(e.unit,e.element);return void 0!==t?r.color(t):tD}if(i.Bond.isLocation(e)){let t=tM(e.aUnit,e.aUnit.elements[e.aIndex]);return void 0!==t?r.color(t):tD}return tD},props:t,description:"Assigns a color based on the partial charge of an atom.",legend:r?r.legend:void 0}}let tk={name:"partial-charge",label:"Partial Charge",category:u.J.Atom,factory:tP,getParams:function(e){return tE},defaultValues:s.e.getDefaultValues(tE),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>void 0!==tw.o.Provider.get(e))},tB=(0,n.Il)(16448250),t_={...(0,y.r)({type:"colors",colorList:"many-distinct"})},tR={name:"atom-id",label:"Atom Id",category:u.J.Atom,factory:function e(t,r){let a,n;if(t.structure){let e=i.StructureElement.Location.create(t.structure.root),o=function(e){let t=new Map;for(let r of e.models){let{label_atom_id:e}=r.atomicHierarchy.atoms;for(let r=0,a=e.rowCount;r<a;++r){let a=e.value(r);t.has(a)||t.set(a,t.size)}}return t}(t.structure.root),s=Array.from(o.keys()),l=(0,y.X)(o.size,r,{valueLabel:e=>s[e]});n=l.legend,a=t=>{let r;if(i.StructureElement.Location.is(t)){let e=i.StructureProperties.atom.label_atom_id(t);r=o.get(e)}else if(i.Bond.isLocation(t)){e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex];let a=i.StructureProperties.atom.label_atom_id(e);r=o.get(a)}return void 0===r?tB:l.color(r)}}else a=()=>tB;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,description:"Gives every atom a color based on its `label_atom_id` value.",legend:n}},getParams:function(e){return s.e.clone(t_)},defaultValues:s.e.getDefaultValues(t_),isApplicable:e=>!!e.structure};
7319var tF=r(7922),tL=r(40424),tz=r(23833),tN=r(27203),tG=r(72558);let tU="Assign color based on the given value of a volume cell.",tV={colorList:s.e.ColorList({kind:"interpolate",colors:[[tF.t.white,0],[tF.t.red,.25],[tF.t.white,.5],[tF.t.blue,.75],[tF.t.white,1]]},{offsets:!0,isEssential:!0}),domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),isRelative:s.e.Boolean(!1,{description:"If true the value is treated as relative to the volume mean and sigma."}),defaultColor:s.e.Color((0,C.Il)(13421772))},tj={name:"volume-value",label:"Volume Value",category:u.J.Misc,factory:function e(t,r){var n;if(!t.volume)return{factory:e,granularity:"uniform",color:()=>r.defaultColor,props:r,description:tU};{let{min:i,max:o,mean:s,sigma:l}=t.volume.grid.stats,u="custom"===r.domain.name?r.domain.params:[i,o],{colorList:c,defaultColor:d}=r;if("auto"===r.domain.name&&r.isRelative&&(u[0]=(u[0]-s)/l,u[1]=(u[1]-s)/l),"auto"===r.domain.name&&r.domain.params.symmetric){let e=Math.max(Math.abs(u[0]),Math.abs(u[1]));u[0]=-e,u[1]=e}if(null===(n=t.locationKinds)||void 0===n?void 0:n.includes("direct-location")){let t=[(0,tz.Fv)(u[0],i,o),(0,tz.Fv)(u[1],i,o)];return{factory:e,granularity:"direct",props:r,description:tU,palette:a.Palette(c.colors,c.kind,t,d)}}{let n=tN.r.makeGetTrilinearlyInterpolated(t.volume.grid,"none");return{factory:e,granularity:"vertex",preferSmoothing:!0,color:e=>{if(!(0,tG.TO)(e))return r.defaultColor;let t=n(e.position);return Number.isNaN(t)?r.defaultColor:(0,tz.uZ)((t-u[0])/(u[1]-u[0]),0,1)*a.PaletteScale},palette:a.Palette(c.colors,c.kind,void 0,d),props:r,description:tU}}}},getParams:function(e){return tV},defaultValues:s.e.getDefaultValues(tV),isApplicable:e=>!!e.volume&&!tL.f.Segmentation.get(e.volume)},tH=(0,n.Il)(13421772),tq={...(0,y.r)({type:"colors",colorList:"many-distinct"})},tX={name:"volume-segment",label:"Volume Segment",category:u.J.Misc,factory:function e(t,r){let a,n;let i=t.volume&&tL.f.Segmentation.get(t.volume);if(i){let e=i.segments.size,t=Array.from(i.segments.keys()),o=(0,y.X)(e,r);n=o.legend,a=e=>tL.f.Segment.isLocation(e)?o.color(t.indexOf(e.segment)):tH}else a=()=>tH;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every volume segment a unique color.",legend:n}},getParams:function(e){return s.e.clone(tq)},defaultValues:s.e.getDefaultValues(tq),isApplicable:e=>!!e.volume&&!!tL.f.Segmentation.get(e.volume)};var tW=r(1573),tK=r(30123),tQ=r(72762);let tZ={volume:s.e.ValueRef(e=>e.state.data.select(tK.t.Generators.rootsOfType(tQ.G.Volume.Data)).filter(e=>{var t;return null===(t=e.obj)||void 0===t?void 0:t.data}).map(e=>{var t,r;return[e.transform.ref,null!==(r=null===(t=e.obj)||void 0===t?void 0:t.label)&&void 0!==r?r:"<unknown>"]}),(e,t)=>t(e)),coloring:s.e.MappedStatic("absolute-value",{"absolute-value":s.e.Group({domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})}),"relative-value":s.e.Group({domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})})}),defaultColor:s.e.Color((0,n.Il)(13421772)),normalOffset:s.e.Numeric(0,{min:0,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),usePalette:s.e.Boolean(!1,{description:"Use a palette to color at the pixel level."})},tY={name:"external-volume",label:"External Volume",category:u.J.Misc,factory:function e(t,r){let i,o,s;try{i=r.volume.getValue()}catch(e){}let{normalOffset:l,defaultColor:u,usePalette:c}=r;if(i){let e=r.coloring.params,{stats:t}=i.grid,d="custom"===e.domain.name?e.domain.params:[t.min,t.max],p="relative-value"===r.coloring.name;if("auto"===e.domain.name&&p&&(d[0]=(d[0]-t.mean)/t.sigma,d[1]=(d[1]-t.mean)/t.sigma),"auto"===e.domain.name&&e.domain.params.symmetric){let e=Math.max(Math.abs(d[0]),Math.abs(d[1]));d[0]=-e,d[1]=e}let f=n.qe.create({domain:d,listOrName:e.list.colors}
7319),m=(0,tb.AO)(),h=tW.r.makeGetTrilinearlyInterpolated(i.grid,p?"relative":"none");o=e=>{if(!(0,tG.TO)(e))return u;l>0?tb.AO.scaleAndAdd(m,e.position,e.normal,l):tb.AO.copy(m,e.position);let t=h(m);return Number.isNaN(t)?u:c?(0,tz.uZ)((t-d[0])/(d[1]-d[0]),0,1)*a.PaletteScale:f.color(t)},s=c?{colors:e.list.colors.map(e=>Array.isArray(e)?e[0]:e),filter:"set"===e.list.kind?"nearest":"linear"}:void 0}else o=()=>u;return{factory:e,granularity:"vertex",preferSmoothing:!0,color:o,palette:s,props:r,description:"Assigns a color based on volume value at a given vertex."}},getParams:()=>tZ,defaultValues:s.e.getDefaultValues(tZ),isApplicable:e=>!0},t$={mainchain:s.e.MappedStatic("molecule-type",{uniform:s.e.Group(f.QG),"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"secondary-structure":s.e.Group(e$),"trajectory-index":s.e.Group(eo)}),sidechain:s.e.MappedStatic("residue-name",{uniform:s.e.Group(f.QG),"residue-name":s.e.Group(eF),"element-symbol":s.e.Group(ed),hydrophobicity:s.e.Group(ts),uncertainty:s.e.Group(te),occupancy:s.e.Group(tm),"sequence-id":s.e.Group(e3),"partial-charge":s.e.Group(tE)})},tJ={name:"cartoon",label:"Cartoon",category:u.J.Misc,factory:function e(t,r){var a,n,i,o;let s=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"secondary-structure":return e0(e,t.params);case"trajectory-index":return es(e,t.params);default:(0,B.UT)(t)}}(t,r.mainchain),l=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"residue-name":return eG(e,t.params);case"element-symbol":return ep(e,t.params);case"hydrophobicity":return td(e,t.params);case"uncertainty":return tr(e,t.params);case"occupancy":return tg(e,t.params);case"sequence-id":return e6(e,t.params);case"partial-charge":return tP(e,t.params);default:(0,B.UT)(t)}}(t,r.sidechain),u=(0,en.TO)(null!==(a=s.contextHash)&&void 0!==a?a:0,null!==(n=l.contextHash)&&void 0!==n?n:0),c=s.legend;return(null===(i=s.legend)||void 0===i?void 0:i.kind)==="table-legend"&&(null===(o=l.legend)||void 0===o?void 0:o.kind)==="table-legend"&&(c={kind:"table-legend",table:[...s.legend.table,...l.legend.table]}),{factory:e,granularity:"group",preferSmoothing:!1,color:function(e,t){return t?s.color(e,!1):l.color(e,!1)},props:r,contextHash:u,description:"Uses separate themes for coloring mainchain and sidechain visuals.",legend:c}},getParams:function(e){return s.e.clone(t$)},defaultValues:s.e.getDefaultValues(t$),isApplicable:e=>!!e.structure},t0=(0,n.Il)(16777113),t1={domain:s.e.Interval([-3,3]),list:s.e.ColorList({kind:"set",colors:F.wT["red-white-blue"].list})};function t2(e,t){return i.Unit.isAtomic(e)?e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(t):0}let t3={name:"formal-charge",label:"Formal Charge",category:u.J.Atom,factory:function e(t,r){let a=n.qe.create({domain:r.domain,listOrName:r.list.colors});return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){let t=t2(e.unit,e.element);return void 0!==t?a.color(t):t0}if(i.Bond.isLocation(e)){let t=t2(e.aUnit,e.aUnit.elements[e.aIndex]);return void 0!==t?a.color(t):t0}return t0},props:r,description:"Assigns a color based on the formal charge of an atom.",legend:a?a.legend:void 0}},getParams:function(e){return t1},defaultValues:s.e.getDefaultValues(t1),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicHierarchy.atoms.pdbx_formal_charge.isDefined)};var t4=r(125),t5=r(80541),t6=r(43975);let t8={structure:s.e.ValueRef(e=>e.state.data.select(tK.t.Generators.rootsOfType(tQ.G.Molecule.Structure)).filter(e=>{var t;return null===(t=e.obj)||void 0===t?void 0:t.data}).map(e=>{var t,r;return[e.transform.ref,null!==(r=null===(t=e.obj)||void 0===t?void 0:t.label)&&void 0!==r?r:"<unknown>"]}),(e,t)=>t(e)),style:s.e.MappedStatic("chain-id",{"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z)}),defaultColor:s.e.Color((0,n.Il)(13421772)),maxDistance:s.e.Numeric(8,{min:.
73191,max:24,step:.1},{description:"Maximum distance to search for the nearest structure element. This is done only if the approximate search fails."}),approxMaxDistance:s.e.Numeric(4,{min:0,max:12,step:.1},{description:"Maximum distance to search for an approximately nearest structure element. This is done before the extact search."}),normalOffset:s.e.Numeric(0,{min:-10,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),backboneOnly:s.e.Boolean(!1)},t7={name:"external-structure",label:"External Structure",category:u.J.Misc,factory:function e(t,r){let a,n,o,s;try{a=r.structure.getValue()}catch(e){}let{maxDistance:l,approxMaxDistance:u,normalOffset:c,defaultColor:d,backboneOnly:p}=r;if(a){let e=function(e,t){switch(t.name){case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);default:(0,B.UT)(t)}}({...t,structure:a},r.style),f=(0,t4.ws)(),m=(0,t4.ws)(),h=a;p&&(h=i.StructureSelection.unionStructure(t5.fS.backbone.query(new i.QueryContext(a))));let b=(0,t6.A)(),y=i.StructureElement.Location.create(h);n=(t,r)=>{if(!(0,tG.TO)(t))return d;0!==c?t6.A.scaleAndAdd(b,t.position,t.normal,c):t6.A.copy(b,t.position);let[a,n,i]=b;if(u>0){let t=h.lookup3d.approxNearest(a,n,i,u,f);if(t.count>0)return y.unit=t.units[0],y.element=y.unit.elements[t.indices[0]],e.color(y,r)}let o=h.lookup3d.find(a,n,i,l,m);if(o.count>0){let t=0,a=o.squaredDistances[0];for(let e=1;e<o.count;++e)o.squaredDistances[e]<a&&(a=o.squaredDistances[e],t=e);return y.unit=o.units[t],y.element=y.unit.elements[o.indices[t]],e.color(y,r)}return d},o=e.contextHash,s=e.legend}else n=()=>d;return{factory:e,granularity:"vertex",preferSmoothing:!0,color:n,props:r,contextHash:o,description:"Assigns a color based on structure property at a given vertex.",legend:s}},getParams:()=>t8,defaultValues:s.e.getDefaultValues(t8),isApplicable:e=>!0};var t9=r(15613);let re="dark-2",rt=(0,n.Il)(13421772),rr={...(0,y.r)({type:"colors",colorList:re})},ra={name:"volume-instance",label:"Volume Instance",category:u.J.Misc,factory:function e(t,r){let a,n;if(t.volume){let e=(0,y.X)(t.volume.instances.length,r);n=e.legend;let i=tL.f.Cell.isLocation;a=t=>i(t)?e.color(t.instance):rt}else a=()=>rt;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every volume instance a unique color based on the position (index) of the instance in the list of instances of the volume.",legend:n}},getParams:function(e){let t=s.e.clone(rr);return e.volume&&e.volume.instances.length>F.wT[re].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(re).list}}),t},defaultValues:s.e.getDefaultValues(rr),isApplicable:e=>!!e.volume};!function(e){e.Category=u.J,e.Palette=function(e,t,r,a){let n=[];if(e.every(e=>Array.isArray(e))){let t=0;for(let r of e)if(Array.isArray(r)){let e=(0,R.p8)(r[1]);e>t&&(t=e)}let r=Math.pow(10,t),a=[...e];a.sort((e,t)=>e[1]-t[1]);let i=a.map(e=>e[0]),o=t9.O.ofSortedArray(a.map(e=>e[1])),s=[];for(let e=0,t=o.length-1;e<t;++e)s.push(o[e]+(o[e+1]-o[e])/2);s.push(o[o.length-1]);let l=t9.O.ofSortedArray(s);for(let t=0,a=Math.max(r,e.length);t<a;++t){let e=(0,tz.Fv)(t,0,r-1),a=t9.O.findPredecessorIndex(l,e);n[t]=i[a]}}else for(let t of e)Array.isArray(t)?n.push(t[0]):n.push(t);return{colors:n,filter:"set"===t?"nearest":"linear",domain:r,defaultColor:a}},e.PaletteScale=16777214,e.EmptyFactory=()=>e.Empty;let t=(0,n.Il)(13421772);e.Empty={factory:e.EmptyFactory,granularity:"uniform",color:()=>t,props:{}},e.areEqual=function(e,t){return e.contextHash===t.contextHash&&e.factory===t.factory&&(0,m.vZ)(e.props,t.props)},e.EmptyProvider={name:"",label:"",category:"",factory:e.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0},e.createRegistry=function(){return new h.R(e.BuiltIn,e.EmptyProvider)},e.BuiltIn={"atom-id":tR,"carbohydrate-symbol":p,cartoon:tJ,"chain-id":g.WT,"element-index":T,"element-symbol":ef,"entity-id":k,"entity-source":H,"external-structure":t7,"external-volume":tY,"formal-charge":t3,hydrophobicity:tp,illustrative:to,"model-index":K,"molecule-type":eS,occupancy:tv,"operator-hkl":tA,"operator-name":A.Zs,"partial-charge":tk,"polymer-id":eD,"polymer-index":eB,"residue-charge":eK,"residue-name":eU,"secondary-structure":e1,"sequence-id":e8,"shape-group":e7.mR,"structure-index":$,"trajectory-index":el,uncertainty:ta,"unit-index":ea,uniform:f.bL,"volume-instance":ra,"volume-segment":t
7319X,"volume-value":tj}}(a||(a={}))},28253:function(e,t,r){r.d(t,{J:function(){return a}});let a={Atom:"Atom Property",Chain:"Chain Property",Residue:"Residue Property",Symmetry:"Symmetry",Validation:"Validation",Misc:"Miscellaneous"}},16454:function(e,t,r){r.d(t,{Lf:function(){return p},NT:function(){return u},WT:function(){return f}});var a=r(30502),n=r(70371),i=r(14086),o=r(62713),s=r(28253);let l=(0,n.Il)(16448250),u={asymId:i.e.Select("auth",i.e.arrayToOptions(["auth","label"])),...(0,o.r)({type:"colors",colorList:"many-distinct"})};function c(e,t){let r=(function(e,t){switch(e.kind){case a.Unit.Kind.Atomic:return"auth"===t?a.StructureProperties.chain.auth_asym_id:a.StructureProperties.chain.label_asym_id;case a.Unit.Kind.Spheres:case a.Unit.Kind.Gaussians:return a.StructureProperties.coarse.asym_id}})(e.unit,t)(e);return e.structure.root.models.length>1?d(e.unit.model,r):r}function d(e,t){return`${t}|${(a.Model.Index.get(e).value||0)+1}`}function p(e,t){let r,n;if(e.structure){let i=a.StructureElement.Location.create(e.structure.root),s=function(e,t){let r=new Map;for(let n of e.models){let i=a.Model.AsymIdOffset.get(n).value,o=("auth"===t?null==i?void 0:i.auth:null==i?void 0:i.label)||0,s=0;n.properties.structAsymMap.forEach(({auth_id:a},i)=>{let l="auth"===t?a:i,u=e.models.length>1?d(n,l):l;!r.has(u)&&(r.set(u,s+o),++s)})}return r}(e.structure.root,t.asymId),u=Array.from(s.keys()),p=(0,o.X)(s.size,t,{valueLabel:e=>u[e]});n=p.legend,r=e=>{let r;if(a.StructureElement.Location.is(e)){let a=c(e,t.asymId);r=s.get(a)}else if(a.Bond.isLocation(e)){i.unit=e.aUnit,i.element=e.aUnit.elements[e.aIndex];let a=c(i,t.asymId);r=s.get(a)}return void 0===r?l:p.color(r)}}else r=()=>l;return{factory:p,granularity:"group",color:r,props:t,description:"Gives every chain a color based on its `asym_id` value.",legend:n}}let f={name:"chain-id",label:"Chain Id",category:s.J.Chain,factory:p,getParams:function(e){var t;let r=i.e.clone(u);return(null===(t=e.structure)||void 0===t?void 0:t.models.some(e=>e.coarseHierarchy.isDefined))&&(r.asymId.defaultValue="label"),r},defaultValues:i.e.getDefaultValues(u),isApplicable:e=>!!e.structure}},54521:function(e,t,r){r.d(t,{A4:function(){return u},DL:function(){return c},Zs:function(){return d}});var a=r(70371),n=r(30502),i=r(14086),o=r(62713),s=r(28253);let l=(0,a.Il)(13421772),u={...(0,o.r)({type:"colors",colorList:"many-distinct"})};function c(e,t){let r,a;if(e.structure){let i=function(e){let t=new Map;for(let r=0,a=e.units.length;r<a;++r){let a=e.units[r].conformation.operator.name;t.has(a)||t.set(a,t.size)}return t}(e.structure.root),s=Array.from(i.keys()),u=(0,o.X)(i.size,t,{valueLabel:e=>s[e]});a=u.legend,r=e=>{let t;if(n.StructureElement.Location.is(e)){let r=e.unit.conformation.operator.name;t=i.get(r)}else if(n.Bond.isLocation(e)){let r=e.aUnit.conformation.operator.name;t=i.get(r)}return void 0===t?l:u.color(t)}}else r=()=>l;return{factory:c,granularity:"instance",color:r,props:t,description:"Assigns a color based on the operator name of a transformed chain.",legend:a}}let d={name:"operator-name",label:"Operator Name",category:s.J.Symmetry,factory:c,getParams:function(e){return i.e.clone(u)},defaultValues:i.e.getDefaultValues(u),isApplicable:e=>!!e.structure}},62590:function(e,t,r){r.d(t,{lS:function(){return u},mR:function(){return c}});var a=r(70371),n=r(93898),i=r(14086),o=r(28253);let s=(0,a.Il)(13421772),l={};function u(e,t){return{factory:u,granularity:"groupInstance",color:e=>n.F.isLocation(e)?e.shape.getColor(e.group,e.instance):s,props:t,description:"Assigns colors as defined by the shape object."}}let c={name:"shape-group",label:"Shape Group",category:o.J.Misc,factory:u,getParams:function(e){return l},defaultValues:i.e.getDefaultValues(l),isApplicable:e=>!!e.shape}},11204:function(e,t,r){r.d(t,{QG:function(){return u},bL:function(){return d},qY:function(){return c}});var a=r(70371),n=r(14086),i=r(79455),o=r(85764),s=r(28253);let l=(0,a.Il)(13421772),u={value:n.e.Color(l),saturation:n.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:n.e.Numeric(0,{min:-6,max:6,step:.1})};function c(e,t){let r=(0,o.ce)(t.value,l);return r=a.Il.saturate(r,t.saturation),r=a.Il.lighten(r,t.lightness),{factory:c,granularity:"uniform",color:()=>r,props:t,description:"Gives everything the same, uniform color.",legend:(0,i.Z)([["uniform",r]]
7319)}}let d={name:"uniform",label:"Uniform",category:s.J.Misc,factory:c,getParams:function(e){return u},defaultValues:n.e.getDefaultValues(u),isApplicable:e=>!0}},37792:function(e,t,r){r.d(t,{i:function(){return o}});var a=r(67589),n=r(30502),i=r(20694);function o(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].value!==t.layers[r].value||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,value:i}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,value:i})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,value:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,value:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,value:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,value:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,value:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,value:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,value:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,value:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,value:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,value:i})}return{kind:"element-loci",layers:t}}}(o||(o={}))},58202:function(e,t,r){r.d(t,{Ak:function(){return x},Cj:function(){return g},Gg:function(){return b},U7:function(){return O},Ve:function(){return p},Wf:function(){return C},xf:function(){return T},xw:function(){return h}});var a=r(30502),n=r(67589),i=r(67330),o=r(75042),s=r(24343),l=r(87144),u=r(58463),c=r(1573);let d={granularity:"element",condensed:!1,reverse:!1,countsOnly:!1,hidePrefix:!1,htmlStyling:!0};function p(e,t={}){var r;switch(e.kind){case"structure-loci":return e.structure.models.map(e=>e.entry).filter(e=>!!e).join(", ");case"element-loci":return h(a.StructureElement.Stats.ofLoci(e),t);case"bond-loci":let n=e.bonds[0];return n?b(n,t):"";case"shape-loci":return e.shape.name;case"group-loci":let o=e.groups[0];return o?e.shape.getLabel(i.h.start(o.ids),o.instance):"";case"every-loci":return"Everything";case"empty-loci":return"Nothing";case"data-loci":return e.getLabel();case"volume-loci":return e.volume.label||"Volume";case"isosurface-loci":return`${e.volume.label||"Volume"} | Isosurface at ${c.f.IsoValue.toString(e.isoValue)}`;case"cell-loci":let s=c.f.Cell.getLociSize(e),l=i.h.start(e.elements[0].indices),u=c.f.IsoValue.absolute(e.volume.grid.cells.data[l]),d=c.f.IsoValue.toRelative(u,e.volume.grid.stats),p=[`${e.volume.label||"Volume"}`,`${1===s?`Cell #${l}`:`${s} Cells`}`];return 1===s&&(e.volume.instances.length>1&&p.push(`Instance #${i.h.start(e.elements[0].instances)+1}`),p.push(`${c.f.IsoValue.toString(u)} (${c.f.IsoValue.toString(d)})`)),p.join(" | ");case"segment-loci":let f=c.f.Segment.getLociSize(e),m=null===(r=c.f.Segmentation.get(e.volume))||void 0===r?void 0:r.labels,g=i.h.start(e.elements[0].segments);if(m&&1===f){let e=m[g];if(e)return e}return`${e.volume.label||"Volume"} | ${1===f?`Segment ${g}`:`${f} Segments`}`}}function f(e,t){return 1===e?`1 ${t}`:`${e} ${t}s`}function m(e,t,r,a,n,i){return`${x(t,{granularity:r,hidePrefix:a,reverse:n,condensed:i})} <small>[+ ${f(e-1,`other ${(0,o.kC)(r)}`)}]</small>`}function h(e,t={}){let r={...d,...t},n=function(e,t=!1,r=!1,n=!1,i=!1){let{structureCount:o,chainCount:s,residueCount:l,conformationCount:u,elementCount:c}=e;if(!t&&1===c&&0===l&&0===s)return x(e.firstElementLoc,{hidePrefix:r,condensed:n,granularity:"element",reverse:i}
7319);if(!t&&0===c&&1===l&&0===s)return x(e.firstResidueLoc,{hidePrefix:r,condensed:n,granularity:"residue",reverse:i});if(t||0!==c||0!==l||1!==s){if(t){let e=[];return o>0&&e.push(f(o,"Structure")),s>0&&e.push(f(s,"Chain")),l>0&&e.push(f(l,"Residue")),u>0&&e.push(f(u,"Conformation")),c>0&&e.push(f(c,"Element")),e.join("<small> + </small>")}{let t=[];return o>0&&t.push(1===o?x(e.firstStructureLoc,{hidePrefix:r,condensed:n,granularity:"structure",reverse:i}):m(o,e.firstStructureLoc,"structure",r,i,n)),s>0&&(t.push(1===s?x(e.firstChainLoc,{condensed:n,granularity:"chain",hidePrefix:r,reverse:i}):m(s,e.firstChainLoc,"chain",r,i,n)),r=!0),l>0&&(t.push(1===l?x(e.firstResidueLoc,{condensed:n,granularity:"residue",hidePrefix:r,reverse:i}):m(l,e.firstResidueLoc,"residue",r,i,n)),r=!0),u>0&&(t.push(1===u?x(e.firstConformationLoc,{condensed:n,granularity:"conformation",hidePrefix:r,reverse:i}):m(u,e.firstConformationLoc,"conformation",r,i,n)),r=!0),c>0&&t.push(1===c?x(e.firstElementLoc,{condensed:n,granularity:"element",hidePrefix:r,reverse:i}):m(c,e.firstElementLoc,"element",r,i,n)),t.join("<small> + </small>")}}{let{unit:t}=e.firstChainLoc,o=a.Unit.isAtomic(t)&&1===function(e){let{elements:t,model:r}=e,{chainAtomSegments:a,residueAtomSegments:n}=r.atomicHierarchy,i=a.offsets[a.index[t[0]]],o=a.offsets[a.index[t[t.length-1]]+1]-1;return n.index[o]-n.index[i]+1}(t)?"residue":a.Unit.Traits.is(t.traits,a.Unit.Trait.MultiChain)?"residue":"chain";return x(e.firstChainLoc,{hidePrefix:r,condensed:n,granularity:o,reverse:i})}}(e,r.countsOnly,r.hidePrefix,r.condensed,r.reverse);return r.htmlStyling?n:(0,o.oN)(n)}function g(e,t={}){let r=a.StructureElement.Stats.create();for(let t of e)a.StructureElement.Stats.add(r,r,a.StructureElement.Stats.ofLoci(t));return h(r,t)}function b(e,t={}){return y({loci:[a.StructureElement.Loci(e.aStructure,[{unit:e.aUnit,indices:i.h.ofSingleton(e.aIndex)}]),a.StructureElement.Loci(e.bStructure,[{unit:e.bUnit,indices:i.h.ofSingleton(e.bIndex)}])]},t)}function y(e,t={}){let r={...d,...t},n=function(e,t){let{granularity:r,hidePrefix:n,reverse:o,condensed:s}=t,l=!0;for(let t of e.loci)if(!a.StructureElement.Loci.is(t)||1!==a.StructureElement.Loci.size(t)){l=!1;break}if(!l)return e.loci.map(e=>p(e,t)).filter(e=>!!e).join(s?" — ":"</br>");{let t=e.loci.map(e=>{let{unit:t,indices:r}=e.elements[0];return a.StructureElement.Location.create(e.structure,t,t.elements[i.h.start(r)])}).map(e=>S(e,r,n,o||s));if(s)return t.map(e=>e[0].replace(/\[.*\]/g,"").trim()).filter(e=>!!e).join(" — ");let l=0;for(let e=0,r=Math.min(...t.map(e=>e.length))-1;e<r;++e){let r=!0;for(let a=1,n=t.length;a<n;++a)if(t[0][e]!==t[a][e]){r=!1;break}if(r)l+=1;else break}if(!(l>0))return t.map(e=>e.filter(e=>!!e).join(" | ")).filter(e=>!!e).join("</br>");{let e=[t[0].join(" | ")];for(let r=1,a=t.length;r<a;++r)e.push(t[r].slice(l).filter(e=>!!e).join(" | "));return e.join(" — ")}}}(e,r);return r.htmlStyling?n:(0,o.oN)(n)}function x(e,t={}){var r,a;let n={...d,...t},i=S(e,n.granularity,n.hidePrefix,n.reverse||n.condensed),s=n.condensed?null!==(a=null===(r=i[0])||void 0===r?void 0:r.replace(/\[.*\]/g,"").trim())&&void 0!==a?a:"":i.filter(e=>!!e).join(" | ");return n.htmlStyling?s:(0,o.oN)(s)}function S(e,t="element",r=!1,n=!1){let i=[];if(!r){let r=e.unit.model.entry;r.length>30&&(r=r.substr(0,27)+"…"),i.push(`<small>${r}</small>`),"structure"!==t&&(i.push(`<small>Model ${e.unit.model.modelNum}</small>`),i.push(`<small>Instance ${e.unit.conformation.operator.instanceId}</small>`))}return a.Unit.isAtomic(e.unit)?i.push(...function(e,t,r=!1){let n=a.StructureElement.Location.residueIndex(e),i=a.StructureProperties.chain.label_asym_id(e),o=a.StructureProperties.chain.auth_asym_id(e),l=e.unit.model.atomicHierarchy.residues.label_seq_id.valueKind(n)===s.s.ValueKinds.Present,u=a.StructureProperties.residue.label_seq_id(e),c=a.StructureProperties.residue.auth_seq_id(e),d=a.StructureProperties.residue.pdbx_PDB_ins_code(e),p=a.StructureProperties.atom.label_comp_id(e),f=a.StructureProperties.atom.label_atom_id(e),m=a.StructureProperties.atom.label_alt_id(e),h=a.StructureProperties.atom.occupancy(e),g=a.StructureProperties.atom.sourceIndex(e),b=a.StructureProperties.residue.microheterogeneityCompIds(e),y="residue"===t&&b.length>1?`(${b.join("|")})`:p,x=[];switch(t){case"element":{let e=`<b>${f}</b>${m?`%${m}`:""}`,t=`<small style='margin-left: 4px'>[idx <b>${g+1}</b>]</small>`;x.push(`${e}${t}`)}case"conformation":"conformation"===t&&m&&x.push(`<small>Conformation</small> <b>${m}</b>`);case"residue":let S=u!==c&&l?u:c;x.push(`<b>${y} ${S}</b>${S!==c?` <small>[auth</small> <b>${c}</b><small>]</small>`:""}<b>${d||""}</b>`);case"chain":i===o?x.push(`<b>${i}</b>`):"chain"===t&&a.Unit.Traits.is(e.unit.traits,a.Unit.Trait.MultiChain)?x.push(`<small>[auth</small> <b>${o}</b><small>]</small>`):x.push(`<b>${i}</b> <small>[auth</small> <b>${o}</b><small>]</small>`)}return x.length>0&&1!==h&&!r&&(x[0]=`${x[0]} <small>[occupancy</small> <b>${Math.round(100*h)/100}</b><small>]</small>`),x.reverse()}
7319(e,t,n)):a.Unit.isCoarse(e.unit)?i.push(...function(e,t){let r=a.StructureProperties.coarse.asym_id(e),n=a.StructureProperties.coarse.seq_id_begin(e),i=a.StructureProperties.coarse.seq_id_end(e),o=[];switch(t){case"element":case"conformation":case"residue":if(n===i){let t=a.StructureProperties.coarse.entityKey(e),r=e.unit.model.sequence.byEntityKey[t].sequence.compId.value(n-1);o.push(`<b>${r} ${n}</b>`)}else o.push(`<b>${n}-${i}</b>`);case"chain":o.push(`<b>${r}</b>`)}return o.reverse()}(e,t)):i.push("Unknown"),n?i.reverse():i}function T(e,t={}){let r={...d,measureOnly:!1,unitLabel:"Å",...t},[a,i]=e.loci.map(e=>n.o_.getCenter(e)),o=`${l.AO.distance(a,i).toFixed(2)} ${r.unitLabel}`;if(r.measureOnly)return o;let s=y(e,r);return r.condensed?`${o} | ${s}`:`Distance ${o}</br>${s}`}function C(e,t={}){let r={...d,measureOnly:!1,...t},[a,i,o]=e.loci.map(e=>n.o_.getCenter(e)),s=l.AO.sub((0,l.AO)(),a,i),c=l.AO.sub((0,l.AO)(),o,i),p=`${(0,u.ZY)(l.AO.angle(s,c)).toFixed(2)}\u00B0`;if(r.measureOnly)return p;let f=y(e,r);return r.condensed?`${p} | ${f}`:`Angle ${p}</br>${f}`}function O(e,t={}){let r={...d,measureOnly:!1,...t},[a,i,o,s]=e.loci.map(e=>n.o_.getCenter(e)),c=`${(0,u.ZY)(l.AO.dihedralAngle(a,i,o,s)).toFixed(2)}\u00B0`;if(r.measureOnly)return c;let p=y(e,r);return r.condensed?`${c} | ${p}`:`Dihedral ${c}</br>${p}`}},30481:function(e,t,r){r.d(t,{k:function(){return s}});var a=r(67589),n=r(70371),i=r(30502),o=r(20694);function s(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].clear!==t.layers[r].clear||e.layers[r].color!==t.layers[r].color||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,color:n,clear:o}=a;e=i.StructureElement.Loci.remap(e,t),i.StructureElement.Loci.isEmpty(e)||r.push({loci:e,color:n,clear:o})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=i.StructureElement.Loci.none(t);for(let t=0,n=e.layers.length;t<n;++t){let{loci:o,color:s,clear:l}=e.layers[n-t-1];if(o=i.StructureElement.Loci.subtract(o,a),a=i.StructureElement.Loci.union(o,a),!i.StructureElement.Loci.isEmpty(o)){let e=l?-1:s;r.has(e)&&(o=i.StructureElement.Loci.union(o,r.get(e))),r.set(e,o)}}let o=[];return r.forEach((e,t)=>{let r=-1===t,a=r?(0,n.Il)(0):t;o.push({loci:e,color:a,clear:r})}),{kind:"element-loci",layers:o}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let n of e.layers){let{loci:e,color:o,clear:s}=n,l=i.StructureElement.Loci.remap(e,r);e=i.StructureElement.Loci.remap(l,t),i.StructureElement.Loci.isEmpty(e)||a.push({loci:e,color:o,clear:s})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,n=e.length;a<n;++a){let{script:n,color:s,clear:l}=e[a],u=o.Script.toLoci(n,t);i.StructureElement.Loci.isEmpty(u)||r.push({loci:u,color:s,clear:l})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,n=e.length;a<n;++a){let{bundle:n,color:o,clear:s}=e[a],l=i.StructureElement.Bundle.toLoci(n,t.root);r.push({loci:l,color:o,clear:s})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,color:n,clear:o}=e.layers[r],s=i.StructureElement.Bundle.fromLoci(a);t.push({bundle:s,color:n,clear:o})}return{kind:"element-loci",layers:t}}}(s||(s={}))},7305:function(e,t,r){r.d(t,{k:function(){return n}});var a,n,i=r(98224),o=r(60843),s=r(30502),l=r(53478),u=r(14086);let c={scale:u.e.Numeric(1,{min:.1,max:5,step:.1})};function d(e,t){return s.Unit.isAtomic(e)?(0,l.lT)(e.model.atomicHierarchy.atoms.type_symbol.value(t)):s.Unit.isSpheres(e)?e.model.coarseConformation.spheres.radius[t]:0}let p={name:"physical",label:"Physical",category:"",factory:function e(t,r){let a=void 0===r.scale?1:r.scale;return{factory:e,granularity:"group",size:function(e){return s.StructureElement.Location.is(e)?a*d(e.unit,e.element):s.Bond.isLocation(e)?a*Math.min(d(e.aUnit,e.aUnit.elements[e.aIndex]),d(e.bUnit,e.bUnit.elements[e.bIndex])):1*a},props:r,description:"Assigns a physical size, i.e. vdW radius for atoms or given radius for coarse spheres."}},getParams:function(e){return c},defaultValues:u.e.getDefaultValues(c),isApplicable:e=>!!e.structure};var f=r(85764),m=r(87909);
7319let h={bfactorFactor:u.e.Numeric(.1,{min:0,max:1,step:.01}),rmsfFactor:u.e.Numeric(.05,{min:0,max:1,step:.01}),baseSize:u.e.Numeric(.2,{min:0,max:2,step:.1})};function g(e,t,r){return s.Unit.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t)*r.bfactorFactor:s.Unit.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]*r.rmsfFactor:0}let b={name:"uncertainty",label:"Uncertainty/Disorder",category:"",factory:function e(t,r){return{factory:e,granularity:"group",size:function(e){let t=r.baseSize;return s.StructureElement.Location.is(e)?t+=g(e.unit,e.element,r):s.Bond.isLocation(e)&&(t+=g(e.aUnit,e.aUnit.elements[e.aIndex],r)),t},props:r,description:"Assigns a size reflecting the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique."}},getParams:function(e){return h},defaultValues:u.e.getDefaultValues(h),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.B_iso_or_equiv.isDefined||e.coarseHierarchy.isDefined)};var y=r(40424),x=r(72558),S=r(27203),T=r(23833);let C="Assign size based on the given value of a volume cell.",O={scale:u.e.Numeric(1,{min:.01,max:10,step:.01}),transform:u.e.Select("linear",[["linear","Linear"],["quadratic","Quadratic"],["cubic","Cubic"]],{description:"Linear: value * scale, Quadratic: value * scale^2, Cubic: value * scale^3"}),domain:u.e.MappedStatic("auto",{custom:u.e.Interval([0,1],{step:.001,min:0}),auto:u.e.Group({})})},I={name:"volume-value",label:"Volume Value",category:"",factory:function e(t,r){var a;if(!t.volume)return{factory:e,granularity:"uniform",size:()=>r.scale,props:r,description:C};{let{min:n,max:i}=t.volume.grid.stats,o="custom"===r.domain.name?r.domain.params:[n,i],s="cubic"===r.transform?r.scale**3:"quadratic"===r.transform?r.scale**2:r.scale;if(null===(a=t.locationKinds)||void 0===a?void 0:a.includes("cell-location")){let{data:a}=t.volume.grid.cells,n=y.f.Cell.isLocation;return{factory:e,granularity:"group",size:e=>n(e)?(0,T.uZ)(Math.abs(a[e.cell]),o[0],o[1])*s:0,props:r,description:C}}{let a=S.r.makeGetTrilinearlyInterpolated(t.volume.grid,"none");return{factory:e,granularity:"vertex",size:e=>{if(!(0,x.TO)(e))return 0;{let t=a(e.position);return Number.isNaN(t)?0:(0,T.uZ)(Math.abs(t),o[0],o[1])*s}},props:r,description:C}}}},getParams:function(e){return O},defaultValues:u.e.getDefaultValues(O),isApplicable:e=>!!e.volume&&!y.f.Segmentation.get(e.volume)};(a=n||(n={})).EmptyFactory=()=>a.Empty,a.Empty={factory:a.EmptyFactory,granularity:"uniform",size:()=>1,props:{}},a.areEqual=function(e,t){return e.contextHash===t.contextHash&&e.factory===t.factory&&(0,f.vZ)(e.props,t.props)},a.EmptyProvider={name:"",label:"",category:"",factory:a.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0},a.createRegistry=function(){return new o.R(a.BuiltIn,a.EmptyProvider)},a.BuiltIn={physical:p,"shape-group":m.gb,uncertainty:b,uniform:i.Le,"volume-value":I}},87909:function(e,t,r){r.d(t,{gb:function(){return s},wo:function(){return o}});var a=r(93898),n=r(14086);let i={};function o(e,t){return{factory:o,granularity:"groupInstance",size:e=>a.F.isLocation(e)?e.shape.getSize(e.group,e.instance):1,props:t,description:"Assigns sizes as defined by the shape object."}}let s={name:"shape-group",label:"Shape Group",category:"",factory:o,getParams:function(e){return i},defaultValues:n.e.getDefaultValues(i),isApplicable:e=>!!e.shape}},98224:function(e,t,r){r.d(t,{Le:function(){return o},_k:function(){return i}});var a=r(14086);let n={value:a.e.Numeric(1,{min:0,max:20,step:.1})};function i(e,t){let r=t.value;return{factory:i,granularity:"uniform",size:()=>r,props:t,description:"Gives everything the same, uniform size."}}let o={name:"uniform",label:"Uniform",category:"",factory:i,getParams:function(e){return n},defaultValues:a.e.getDefaultValues(n),isApplicable:e=>!0}},5909:function(e,t,r){r.d(t,{A:function(){return l}});var a=r(67589),n=r(30502),i=r(20694),o=r(34813),s=r(67546);function l(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;
7319if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].clear!==t.layers[r].clear||!(0,s.wU)(e.layers[r].material,t.layers[r].material)||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,material:i,clear:o}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,material:i,clear:o})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let t;let{structure:r}=e.layers[0].loci,a=new Map,i=n.StructureElement.Loci.none(r);for(let r=0,o=e.layers.length;r<o;++r){let{loci:s,material:l,clear:u}=e.layers[o-r-1];s=n.StructureElement.Loci.subtract(s,i),i=n.StructureElement.Loci.union(s,i),n.StructureElement.Loci.isEmpty(s)||(u?t=t?n.StructureElement.Loci.union(s,t):s:(a.has(l)&&(s=n.StructureElement.Loci.union(s,a.get(l))),a.set(l,s)))}let s=[];return t&&s.push({loci:t,material:(0,o.F)(),clear:!0}),a.forEach((e,t)=>{s.push({loci:e,material:t,clear:!1})}),{kind:"element-loci",layers:s}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,material:o,clear:s}=i,l=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(l,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,material:o,clear:s})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,material:s,clear:l}=e[a],u=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(u)||r.push({loci:u,material:s,clear:l})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,material:o,clear:s}=e[a],l=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:l,material:o,clear:s})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,material:i,clear:o}=e.layers[r],s=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:s,material:i,clear:o})}return{kind:"element-loci",layers:t}}}(l||(l={}))},60843:function(e,t,r){r.d(t,{Q:function(){return a},R:function(){return u}});var a,n=r(20178),i=r(7305),o=r(14086),s=r(67546);function l(e){return e.map(e=>[e.name,e.provider.label,e.provider.category])}!function(e){function t(){return{color:n.U.Empty,size:i.k.Empty}}async function r(e,t,r,a){var n,i;await (null===(n=t.colorThemeRegistry.get(a.colorTheme.name).ensureCustomProperties)||void 0===n?void 0:n.attach(e,r)),await (null===(i=t.sizeThemeRegistry.get(a.sizeTheme.name).ensureCustomProperties)||void 0===i?void 0:i.attach(e,r))}e.create=function(e,r,a,n){n=n||t();let i=a.colorTheme,o=a.sizeTheme;return n.color=e.colorThemeRegistry.create(i.name,r,i.params),n.size=e.sizeThemeRegistry.create(o.name,r,o.params),n},e.createEmpty=t,e.ensureDependencies=r,e.releaseDependencies=function(e,t,r){var a,n;null===(a=e.colorThemeRegistry.get(r.colorTheme.name).ensureCustomProperties)||void 0===a||a.detach(t),null===(n=e.sizeThemeRegistry.get(r.sizeTheme.name).ensureCustomProperties)||void 0===n||n.detach(t)}}(a||(a={}));class u{get default(){return this._list[0]}get list(){return this._list}get types(){return l(this._list)}constructor(e,t){this.emptyProvider=t,this._list=[],this._map=new Map,this._name=new Map,(0,s.mt)(e,(e,t)=>{if(e.name!==t)throw Error(`Fix build in themes to have matching names. ${e.name} ${t}`);this.add(e)})}sort(){this._list.sort((e,t)=>e.provider.category===t.provider.category?e.provider.label<t.provider.label?-1:e.provider.label>t.provider.label?1:0:e.provider.category<t.provider.category?-1:1)}add(e){if(this._map.has(e.name))throw Error(`${e.name} already registered.`);let t=e.name;this._list.push({name:t,provider:e}),this._map.set(t,e),this._name.set(e,t),this.sort()}remove(e){this._list.splice(this._list.findIndex(t=>t.name===e.name),1);let t=this._map.get(e.name);t&&(this._map.delete(e.name),this._name.delete(t))}has(e){return this._map.has(e.name)}get(e){return this._map.get(e)||this.emptyProvider}getName(e){if(!this._name.has(e))throw Error(`'${e.label}' is not a registered theme provider.`);return this._name.get(e)}create(e,t,r={}){let a=this.get(e);return a.factory(t,{...o.e.getDefaultValues(a.getParams(t)),...r})}getApplicableList(e){return this._list.filter(t=>t.provider.isApplicable(e))}getApplicableTypes(e){return l(this.getApplicableList(e))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}}},65109:function(e,t,r){r.d(t,{i:function(){return o}});var a=r(67589),n=r(30502),i=r(20694);function o(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;
7319if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].value!==t.layers[r].value||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let e=n.StructureElement.Loci.remap(a.loci,t);n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,value:a.value})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,value:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,value:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,value:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,value:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,value:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,value:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,value:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,value:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,value:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,value:i})}return{kind:"element-loci",layers:t}}}(o||(o={}))},64770:function(e,t,r){r.d(t,{K:function(){return i}});var a=r(58684),n=r(75042);function i(e,t="",r=""){return i.create(e,t,r)}!function(e){var t;function r(e){return e.triggers.map(i.format).join(" or ")}function i(e,t){return i.create(e,t)}e.create=function(e,t="",r=""){return{triggers:e,action:t,description:r}},e.isBinding=function(e){return!!e&&Array.isArray(e.triggers)&&"string"==typeof e.action},e.Empty={triggers:[],action:"",description:""},e.isEmpty=function(e){return 0===e.triggers.length||e.triggers.every(e=>void 0===e.buttons&&void 0===e.modifiers&&!e.code)},e.match=function(e,t,r){return e.triggers.some(e=>i.match(e,t,r))},e.matchKey=function(e,t,r,a){return e.triggers.some(e=>i.matchKey(e,t,r,a))},e.formatTriggers=r,e.format=function(e,t=""){let a=e.description||(0,n.ce)(t);return(0,n.sX)(a,{triggers:"<i>"+r(e)+"</i>"})},e.Trigger=i,e.TriggerKey=function(e,t){return i.create(void 0,t,e)},(t=i=e.Trigger||(e.Trigger={})).create=function(e,t,r){return{buttons:e,modifiers:t,code:r}},t.Empty={},t.match=function(e,t,r){let{buttons:n,modifiers:i}=e;return void 0!==n&&(n===t||a.b4.has(n,t))&&(!i||a.N0.areEqual(i,r))},t.matchKey=function(e,t,r,n){let{modifiers:i,code:o}=e;return void 0!==o&&(o===t||1===o.length&&4===t.length&&t.startsWith("Key")&&!!n&&1===n.length&&n.toUpperCase()===o.toUpperCase())&&(!i||a.N0.areEqual(i,r))},t.format=function(e){var t;let r=[],a=function(e,t){let r=[];return void 0!==e||t?0===e?r.push("mouse hover"):void 0!==e&&(o.has(e,o.Flag.Primary)&&r.push("left mouse button"),o.has(e,o.Flag.Secondary)&&r.push("right mouse button"),o.has(e,o.Flag.Auxilary)&&r.push("wheel/middle mouse button"),o.has(e,o.Flag.Forth)&&r.push("three fingers")):r.push("any mouse button"),r.join(" + ")}(e.buttons,e.code);a&&r.push(a);let i=((null==(t=e.code)?void 0:t.startsWith("Key"))&&(t=t.substring(3)),t&&(0,n.l9)(t).toLowerCase());i&&r.push(i);let s=function(e,t){let r=[];return e&&(e.alt&&r.push("alt key"),e.control&&r.push("control key"),e.meta&&r.push("meta/command key"),e.shift&&r.push("shift key")),r.join(" + ")}(e.modifiers);return s&&r.push(s),r.join(" + ")}}(i||(i={}));let o=a.b4},34052:function(e,t,r){function a(){var e;if("undefined"==typeof navigator||"undefined"==typeof window)return!1;let t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
7319sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0),t}function n(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;let e=/iPad|iPhone|iPod/.test(navigator.userAgent),t=navigator.userAgent.includes("Macintosh"),r=navigator.maxTouchPoints>=4;return!window.MSStream&&(e||t&&r)}function i(){if("undefined"==typeof navigator||!("xr"in navigator))return!1;let e=navigator.userAgent||"";return/OculusBrowser\//.test(e)||/PicoBrowser\//.test(e)}r.d(t,{$C:function(){return n},K1:function(){return a},LI:function(){return i}})},86276:function(e,t,r){r.d(t,{b:function(){return c}});var a=r(22177),n=r(38675),i=r(38964),o=r(43975),s=r(58463),l=r(14086),u=r(75042);function c(){}!function(e){e.Type={none:0,plane:1,sphere:2,cube:3,cylinder:4,infiniteCone:5},e.Params={variant:l.e.Select("pixel",l.e.arrayToOptions(["instance","pixel"])),objects:l.e.ObjectList({type:l.e.Select("plane",l.e.objectToOptions(e.Type,e=>(0,u.ce)(e))),invert:l.e.Boolean(!1),position:l.e.Vec3((0,o.A)()),rotation:l.e.Group({axis:l.e.Vec3(o.A.create(1,0,0)),angle:l.e.Numeric(0,{min:-180,max:180,step:1},{description:"Angle in Degrees"})},{isExpanded:!0}),scale:l.e.Vec3(o.A.create(1,1,1)),transform:l.e.Mat4(n.y.identity())},e=>(0,u.ce)(e.type))};let t=(0,i.D)(),r=(0,i.D)(),c=(0,o.A)(),d=(0,o.A)(),p=(0,n.y)(),f=(0,n.y)();e.getClip=function(r,a){let l=r.objects.length,{type:u,invert:c,position:d,rotation:p,scale:f,transform:m}=(null==a?void 0:a.objects)||{count:0,type:Array(l).fill(1),invert:Array(l).fill(!1),position:Array(3*l).fill(0),rotation:Array(4*l).fill(0),scale:Array(3*l).fill(1),transform:Array(16*l).fill(0)};for(let a=0;a<l;++a){let l=r.objects[a];u[a]=e.Type[l.type],c[a]=l.invert,o.A.toArray(l.position,d,3*a),i.D.toArray(i.D.setAxisAngle(t,l.rotation.axis,(0,s.Id)(l.rotation.angle)),p,4*a),o.A.toArray(l.scale,f,3*a),n.y.toArray(l.transform,m,16*a)}return{variant:r.variant,objects:{count:l,type:u,invert:c,position:d,rotation:p,scale:f,transform:m}}},e.areEqual=function(e,s){if(e.variant!==s.variant||e.objects.count!==s.objects.count)return!1;let l=e.objects,u=s.objects;for(let e=0,s=l.count;e<s;++e)if(l.invert[e]!==u.invert[e]||l.type[e]!==u.type[e]||(o.A.fromArray(c,l.position,3*e),o.A.fromArray(d,u.position,3*e),!o.A.equals(c,d))||(o.A.fromArray(c,l.scale,3*e),o.A.fromArray(d,u.scale,3*e),!o.A.equals(c,d))||(i.D.fromArray(t,l.rotation,4*e),i.D.fromArray(r,u.rotation,4*e),!i.D.equals(t,r))||(n.y.fromArray(p,l.transform,16*e),n.y.fromArray(f,u.transform,16*e),!n.y.areEqual(p,f,a.I)))return!1;return!0}}(c||(c={}))},7922:function(e,t,r){r.d(t,{t:function(){return a}});let a=(0,r(34602).E)({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflower:6591981,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,laserlemon:16777044,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrod:16448210,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,maroon2:8323
7319072,maroon3:11546720,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,purple2:8323199,purple3:10494192,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});!function(){let e=new Map;Object.keys(a).forEach(t=>{e.set(a[t],t)})}()},62713:function(e,t,r){r.d(t,{X:function(){return x},r:function(){return b}});var a=r(79455),n=r(14086),i=r(58240),o=r(65740),s=r(67546),l=r(85764),u=r(7922);let c={hue:n.e.Interval([1,360],{min:0,max:360,step:1}),chroma:n.e.Interval([40,70],{min:0,max:100,step:1}),luminance:n.e.Interval([15,85],{min:0,max:100,step:1}),sort:n.e.Select("contrast",n.e.arrayToOptions(["none","contrast"]),{description:"no sorting leaves colors approximately ordered by hue"}),clusteringStepCount:n.e.Numeric(50,{min:10,max:200,step:1},{isHidden:!0}),minSampleCount:n.e.Numeric(800,{min:100,max:5e3,step:100},{isHidden:!0}),sampleCountFactor:n.e.Numeric(5,{min:1,max:100,step:1},{isHidden:!0})},d=[0,0,0],p=[0,0,0];function f(e,t){let r=1/0,a=0;for(let n=0;n<e.length;n++){let o=i.D.distance(t,e[n]);o<r&&(r=o,a=n)}return a}var m=r(66939),h=r(64726);let g={type:"generate",colorList:"red-yellow-blue"};function b(e={}){let t={...g,...e};return{palette:n.e.MappedStatic(t.type,{colors:n.e.Group({list:n.e.ColorList(t.colorList)},{isFlat:!0}),generate:n.e.Group({...c,maxCount:n.e.Numeric(75,{min:1,max:250,step:1})},{isFlat:!0})},{options:[["colors","Color List"],["generate","Generate Distinct"]]})}}n.e.getDefaultValues(b());let y={valueLabel:e=>`${e+1}`,minLabel:"Start",maxLabel:"End"};function x(e,t,r={}){var b;let x,S;if("colors"===t.palette.name&&"interpolate"===t.palette.params.list.kind){let{list:a}=t.palette.params,n=[0,e-1],{minLabel:i,maxLabel:o}={...y,...r},s=a.colors;0===s.length&&(s=(0,m.jy)(g.colorList).list);let l=h.q.create({listOrName:s,domain:n,minLabel:i,maxLabel:o});S=l.legend,x=l.color}else{let h;"colors"===t.palette.name?0===(h=t.palette.params.list.colors.map(e=>Array.isArray(e)?e[0]:e)).length&&(h=(0,m.jy)("dark-2").list.map(e=>Array.isArray(e)?e[0]:e)):h=function(e,t={}){let r={...n.e.getDefaultValues(c),...t};if(e<=0)return[];let a=function(e,t){let r=new Map,a=Math.ceil(Math.cbrt(e)),n=(0,o.F)(),s=Math.max((t.hue[1]-t.hue[0])/a,1),l=Math.max((t.chroma[1]-t.chroma[0])/a,1),u=Math.max((t.luminance[1]-t.luminance[0])/a,1);for(let e=t.hue[0]+s/2;e<=t.hue[1];e+=s)for(let a=t.chroma[0]+l/2;a<=t.chroma[1];a+=l)for(let s=t.luminance[0]+u/2;s<=t.luminance[1];s+=u){let l=i.D.fromHcl((0,i.D)(),o.F.set(n,e,a,s));i.D.toHcl(d,l),i.D.fromColor(p,i.D.toColor(l)),d[0]>=t.hue[0]&&d[0]<=t.hue[1]&&d[1]>=t.chroma[0]&&d[1]<=t.chroma[1]&&d[2]>=t.luminance[0]&&d[2]<=t.luminance[1]&&p[0]>=l[0]-2&&p[0]<=l[0]+2&&p[1]>=l[1]-2&&p[1]<=l[1]+2&&p[2]>=l[2]-2&&p[2]<=l[2]+2&&r.set(i.D.toColor(l),l)}return Array.from(r.values())}(Math.max(r.minSampleCount,e*r.sampleCountFactor),r);if(a.length<e)return console.warn("Not enough samples to generate distinct colors, increase sample count."),Array(e).fill(u.t.lightgrey);let m=[],h=[],g=Math.floor(a.length/e);for(let t=0;t<a.length&&(m.push(a[t]),h.push([]),!(m.length>=e));t+=g);for(let e=1;e<=r.clusteringStepCount;++e){let e=(0,s.I8)(h),t=(0,s.I8)(a);for(let r=0;r<m.length;++r){let n=f(t,m[r]);e[r].push(a[n]),t.splice(n,1)}for(let r=0;r<t.length;++r)e[f(m,a[r])].push(a[r]);let r=(0,s.I8)(m);for(let t=0;t<e.length;++t){let r=e[t],a=r.length;if(0===a)continue;let n=0,i=0,o=0;for(let e of r)n+=e[0],i+=e[1],o+=e[2];let s=n/a,l=i/a,u=o/a;m[t]=[s,l,u]}if((0,l.vZ)(r,m))break}return("contrast"===r.sort?function(e){let t=e.slice(0),r=[t.shift()];for(;t.length>0;){let e=r[r.length-1],a=0,n=Number.NEGATIVE_INFINITY;for(let r=0;r<t.length;++r){let o=i.D.distance(e,t[r]);o>n&&(n=o,a=r)}r.push(t.splice(a,1)[0])}return r}(m):m).map(e=>i.D.toColor(e))}(e=Math.min(e,t.palette.params.maxCount),t.palette.params);let g=null!==(b=r.valueLabel)&&void 0!==b?b:y.valueLabel,T=h.length,C=[];for(let t=0;t<e;++t){let e=t%T;void 0===C[e]?C[e]=[g(t),h[e]]:C[e][0]+=`, ${g(t)}`}S=(0,a.Z)(C),x=e=>h[e%T]}return{color:x,legend:S}}},55368:function(e,t,r){r.d(t,{Os:function(){return u},mw:function(){return d},uf:function(){return l}});var a=r(34602),n=r(7922);let i=/^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i,o=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i;function s(e){let t;if(null==e)return;if(i.test(e)&&(4===e.length?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:5===e.length?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:9===e.length&&(e=e.substring(0,7)),void 0!==(t=a.Il.fromHexStyle(e))&&!isNaN(t))||void 0!==(t=n.t[e.toLowerCase()]))return t;let r=o.exec(e);if(r){let e=parseInt(r[1],10),t=parseInt(r[2],10),n=parseInt(r[3],10);if(e>=0&&e<=255&&t>=0&&t<=255&&n>=0&&n<=255)return a.Il.fromRgb(e,t,n)}}function l(e){let t=e.length,r=[];if(e.every(e=>Array.isArray(e))){let t=[...e];if(!t[0])return"linear-gradient(to right, #000 0%, #000 100%)";t.sort((e,t)=>
7319e[1]-t[1]),r.push(`${a.Il.toStyle(t[0][0])} ${(100*t[0][1]).toFixed(2)}%`);for(let e=0,n=t.length-1;e<n;++e){let[n,i]=t[e],[o,s]=t[e+1],l=i+(s-i)/2;r.push(`${a.Il.toStyle(n)} ${(100*l).toFixed(2)}%`,`${a.Il.toStyle(o)} ${(100*l).toFixed(2)}%`)}r.push(`${a.Il.toStyle(t[t.length-1][0])} ${(100*t[t.length-1][1]).toFixed(2)}%`)}else{r.push(`${c(e[0])} ${1/t*100}%`);for(let a=1,n=t-1;a<n;++a)r.push(`${c(e[a])} ${a/t*100}%`,`${c(e[a])} ${(a+1)/t*100}%`);r.push(`${c(e[t-1])} ${(t-1)/t*100}%`)}return`linear-gradient(to right, ${r.join(", ")})`}function u(e){let t;if(0===e.length)return"linear-gradient(to right, #000 0%, #000 100%)";if(e.every(e=>Array.isArray(e))){let r=[...e];r.sort((e,t)=>e[1]-t[1]),t=r.map(e=>c(e,!0))}else t=e.map(e=>c(e));return`linear-gradient(to right, ${t.join(", ")})`}function c(e,t=!1){return Array.isArray(e)?t?`${a.Il.toStyle(e[0])} ${(100*e[1]).toFixed(2)}%`:a.Il.toStyle(e[0]):a.Il.toStyle(e)}function d(e,t=/,/){let r=[],a=e.replace(/\s+/g,""),n=0,i=0;for(let e=0,o=a.length;e<o;++e){let o=a[e];if("("===o){i++;continue}if(")"===o){i>0&&i--;continue}if(i>0||!t.test(o))continue;let l=a.substring(n,e);n=e+1;let u=s(l);void 0!==u&&r.push(u)}if(n<a.length){let e=a.substring(n),t=s(e);console.log(e,t),void 0!==t&&r.push(t)}return r}},42071:function(e,t,r){function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(r){let t=document.createEvent("MouseEvents");
7319t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}function n(e,t="download"){if(e){if("download"in HTMLAnchorElement.prototype){let r=document.createElement("a");r.download=t,r.rel="noopener","string"==typeof e?(r.href=e,a(r)):(r.href=URL.createObjectURL(e),setTimeout(()=>URL.revokeObjectURL(r.href),4e4),setTimeout(()=>a(r)))}else if("undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(e,t);else{let t=window.navigator.userAgent,r=/Safari/i.test(t),a=/CriOS\/[\d]+/.test(t),n=e=>{var t;t=a?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),window.open(t,"_blank")||(window.location.href=t)};if((r||a)&&FileReader){if(e instanceof Blob){let t=new FileReader;t.onloadend=()=>n(t.result),t.readAsDataURL(e)}else n(e)}else{let t=URL.createObjectURL("string"==typeof e?new Blob([e]):e);location.href=t,setTimeout(()=>URL.revokeObjectURL(t),4e4)}}}}r.d(t,{L:function(){return n}})},12845:function(e,t,r){r.d(t,{W:function(){return n}});let a=["gz","zip"];function n(e){let t=e,r="",n=t.lastIndexOf("?"),i=-1!==n?t.substring(n):"",o=(t=t.substring(0,-1===n?t.length:n)).replace(/^.*[\\/]/,""),s=o.substring(0,o.lastIndexOf(".")),l=o.split("."),u=l.length>1?(l.pop()||"").toLowerCase():"",c=t.match(/^(.+):\/\/(.+)$/);c&&(r=c[1].toLowerCase(),t=c[2]||"");let d=t.substring(0,t.lastIndexOf("/")+1);if(a.includes(u)){let e=t.length-u.length-1;u=(t.substring(0,e).split(".").pop()||"").toLowerCase();let r=s.length-u.length-1;s=s.substring(0,r)}return{path:t,name:o,ext:u,base:s,dir:d,protocol:r,query:i}}},58684:function(e,t,r){r.d(t,{N0:function(){return s},b4:function(){return l},fN:function(){return A},h9:function(){return S},hS:function(){return y},ij:function(){return x},nZ:function(){return c},rR:function(){return C}});var a,n,i,o,s,l,u,c,d=r(89987),p=r(85409),f=r(81458),m=r(43975),h=r(22177),g=r(37893),b=r(85764);function y(e){if("object"==typeof e){if("buttons"in e)return e.buttons;if("which"in e){let t=e.which;if(2===t)return 4;if(3===t)return 2;if(t>0)return 1<<t-1}}return 0}function x(e){if("object"==typeof e&&"button"in e){let t=e.button;if(1===t)return 4;if(2===t)return 2;if(t>=0)return 1<<t}return 0}function S(e){return{alt:"altKey"in e&&e.altKey,shift:"shiftKey"in e&&e.shiftKey,control:"ctrlKey"in e&&e.ctrlKey,meta:"metaKey"in e&&e.metaKey}}let T={noScroll:!0,noMiddleClickScroll:!0,noContextMenu:!0,noPinchZoom:!0,noTextSelect:!0,preventGestures:!1,mask:(e,t)=>!0,pixelScale:1};!function(e){function t(e,t){return e.shift===t.shift&&e.alt===t.alt&&e.control===t.control&&e.meta===t.meta}function r(e={}){return{shift:!!e.shift,alt:!!e.alt,control:!!e.control,meta:!!e.meta}}e.None=r(),e.areEqual=t,e.areNone=function(r){return t(r,e.None)},e.size=function(e){if(!e)return 0;let t=0;return e.shift&&t++,e.alt&&t++,e.control&&t++,e.meta&&t++,t},e.create=r}(s||(s={})),(a=l||(l={})).has=g.c.has,a.create=g.c.create,(n=a.Flag||(a.Flag={}))[n.None=0]="None",n[n.Primary=1]="Primary",n[n.Secondary=2]="Secondary",n[n.Auxilary=4]="Auxilary",n[n.Forth=8]="Forth",n[n.Five=16]="Five",n[n.Trigger=32]="Trigger",n[n.Squeeze=48]="Squeeze";let C={key:"",code:"",modifiers:s.None,x:-1,y:-1,pageX:-1,pageY:-1,preventDefault:b.ZT};function O(){return{drag:new d.x,interactionEnd:new d.x,click:new d.x,move:new d.x,wheel:new d.x,pinch:new d.x,gesture:new d.x,resize:new d.x,leave:new d.x,enter:new d.x,modifiers:new d.x,key:new d.x,keyUp:new d.x,keyDown:new d.x,lock:new d.x,trackedPointers:new d.x}}(i=u||(u={}))[i.Stopped=0]="Stopped",i[i.Started=1]="Started",i[i.Moving=2]="Moving";let I=["Backspace","Delete"];function A(e){let t=0,r=0,a=0,n=0,i=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),a=10*t,n=10*r,"deltaY"in e&&(n=e.deltaY),"deltaX"in e&&(a=e.deltaX),"deltaZ"in e&&(i=e.deltaZ),(a||n||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,n*=40,i*=40):(a*=800,n*=800,i*=800)),a&&!t&&(t=a<0?-1:1),n&&!r&&(r=n<0?-1:1),{spinX:t,spinY:r,dx:a,dy:n,dz:i}}(o=c||(c={})).create=function(e={}){let{noScroll:t,noContextMenu:r}={...T,...e};return{noScroll:t,noContextMenu:r,pointerLock:!1,width:0,height:0,pixelRatio:1,...O(),setPixelScale:b.ZT,updateTrackedPointers:b.ZT,updateScreenTouches:b.ZT,requestPointerLock:b.ZT,exitPointerLock:b.ZT,dispose:b.ZT}},o.fromElement=function(e,t={}){let r,a,n,i,{noScroll:o,noMiddleClickScroll:c,noContextMenu:d,noPinchZo
7319om:g,noTextSelect:b,mask:S,pixelScale:C,preventGestures:w}={...T,...t},D=e.clientWidth*N(),E=e.clientHeight*N(),M=!1,P=(0,p.l_)(),k=(0,f.S)(),B=(0,f.S)(),_=(0,f.S)(),R=(0,f.S)(),F=(0,f.S)(),L={shift:!1,alt:!1,control:!1,meta:!1},z={x:-1,y:-1,pageX:-1,pageY:-1};function N(){return window.devicePixelRatio*C}function G(){return{...L}}function U(t){return t.target===document.body||t.target===e}let V=u.Stopped,j=!1,H=l.create(l.Flag.None),q=l.Flag.None,X=!1,W=!1;void 0!==window.ResizeObserver&&(i=new window.ResizeObserver(eZ));let K=O(),{drag:Q,interactionEnd:Z,wheel:Y,pinch:$,gesture:J,click:ee,move:et,leave:er,enter:ea,resize:en,modifiers:ei,key:eo,keyUp:es,keyDown:el,lock:eu,trackedPointers:ec}=K;function ed(){e1(M=e.ownerDocument.pointerLockElement===e),eu.next(M)}function ep(){console.error("Unable to use Pointer Lock API"),e1(M=!1),eu.next(M)}function ef(e){S(e.clientX,e.clientY)&&d&&e.preventDefault()}function em(e){L.alt=e.altKey,L.shift=e.shiftKey,L.control=e.ctrlKey,L.meta=e.metaKey}function eh(){(H||L.shift||L.alt||L.meta||L.control)&&(H=0,L.shift=L.alt=L.control=L.meta=!1)}function eg(e){let t=!1;!L.alt&&e.altKey&&(t=!0,L.alt=!0),!L.shift&&e.shiftKey&&(t=!0,L.shift=!0),!L.control&&e.ctrlKey&&(t=!0,L.control=!0),!L.meta&&e.metaKey&&(t=!0,L.meta=!0),t&&X&&ei.next(G()),U(e)&&X&&el.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}function ev(e){let t=!1;L.alt&&!e.altKey&&(t=!0,L.alt=!1),L.shift&&!e.shiftKey&&(t=!0,L.shift=!1),L.control&&!e.ctrlKey&&(t=!0,L.control=!1),L.meta&&!e.metaKey&&(t=!0,L.meta=!1),t&&X&&ei.next(G()),I.includes(e.key)&&eb(e),U(e)&&X&&es.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}function eb(e){U(e)&&X&&eo.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}e.addEventListener("contextmenu",ef,!1),e.addEventListener("wheel",eV,!1),e.addEventListener("mousedown",eF,!1),window.addEventListener("mousemove",eL,!1),window.addEventListener("mouseup",ez,!1),e.addEventListener("touchstart",eB,!1),e.addEventListener("touchmove",eR,!1),e.addEventListener("touchend",e_,!1),e.addEventListener("gesturechange",eK,!1),e.addEventListener("gesturestart",eX,!1),e.addEventListener("gestureend",eQ,!1),window.addEventListener("blur",eh),window.addEventListener("keyup",ev,!1),window.addEventListener("keydown",eg,!1),window.addEventListener("keypress",eb,!1),document.addEventListener("pointerlockchange",ed,!1),document.addEventListener("pointerlockerror",ep,!1),null!=i?i.observe(e.parentElement):window.addEventListener("resize",eZ,!1);let ey={primary:{prev:void 0,down:(0,f.S)(),end:(0,f.S)(),axes:[]},secondary:{prev:void 0,down:(0,f.S)(),end:(0,f.S)(),axes:[]},distance:-1};function ex(e,t,r){let a=l.has(t,e);return!!r&&l.has(r,e)&&!a}function eS(e,t){let{x:r,y:a,dx:n,dy:i,ray:o,buttons:u,axes:c}=e,[d,p]=[r,a],m=s.create(),h=t?ey.secondary:ey.primary,{prev:g}=h;u===l.Flag.Secondary?et.next({x:r,y:a,pageX:d,pageY:p,buttons:l.Flag.None,button:l.Flag.None,modifiers:m,inside:!0,onElement:!0,ray:o}):(null==g?void 0:g.buttons)===l.Flag.Secondary&&er.next(void 0);let b=l.has(u,l.Flag.Primary),y=!!g&&l.has(g.buttons,l.Flag.Primary);if(y&&!b&&(f.S.set(h.end,r,a),20>f.S.distance(h.end,h.down)&&ee.next({x:r,y:a,pageX:d,pageY:p,buttons:l.Flag.Trigger,button:l.Flag.Trigger,modifiers:m,ray:o}),Z.next(void 0)),b){let e=!y;Q.next({x:r,y:a,dx:n,dy:i,pageX:d,pageY:p,buttons:l.Flag.Trigger,button:l.Flag.Trigger,modifiers:m,isStart:e,useDelta:!0}),e&&f.S.set(h.down,r,a)}let x={x:0,y:0,pageX:0,pageY:0,modifiers:m,preventDefault:()=>{}};if(ex(l.Flag.Forth,u,null==g?void 0:g.buttons)){let e=t?"GamepadX":"GamepadA";es.next({...x,code:e,key:e})}if(ex(l.Flag.Five,u,null==g?void 0:g.buttons)){let e=t?"GamepadY":"GamepadB";es.next({...x,code:e,key:e})}c&&(c[2]<0?(el.next({...x,code:"GamepadLeft",key:"GamepadLeft"}),es.next({...x,code:"GamepadRight",key:"GamepadRight"})):c[2]>0?(el.next({...x,code:"GamepadRight",key:"GamepadRight"}),es.next({...x,code:"GamepadLeft",key:"GamepadLeft"})):c[2]!==h.axes[2]&&(es.next({...x,code:"GamepadLeft",key:"GamepadLeft"}),es.next({...x,code:"GamepadRight",key:"GamepadRight"})),c[3]<0?(el.next({...x,code:"GamepadUp",key:"GamepadUp"}),es.next({...x,code:"GamepadDown",key:"GamepadDown"})):c[3]>0?(el.next({...x,code:"GamepadDown",key:"GamepadDown"}),es.next({...x,code:"GamepadUp",key:"GamepadUp"})):c[3]!==h.axes[3]&&(es.next({...x,code:"GamepadUp",key:"GamepadUp"}),es.next({...x,code:"GamepadDown",key:"GamepadDown"}
7319))),h.axes=c||[],h.prev=e}function eT(e,t,r){let a=m.A.distance(e.ray.origin,t.ray.origin);if(ey.distance>0){let e=a/ey.distance;J.next({scale:e,rotation:0,deltaScale:0,deltaRotation:0,buttons:r,button:r,modifiers:G()})}ey.distance=a}let eC=-1;function eO(e){let t=e.touches[0],r=e.touches[1];return{clientX:(t.clientX+r.clientX)/2,clientY:(t.clientY+r.clientY)/2,pageX:(t.pageX+r.pageX)/2,pageY:(t.pageY+r.pageY)/2,target:e.target}}function eI(e){let t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;return Math.sqrt(t*t+r*r)}let eA=-1,ew=(0,f.S)(),eD=(0,f.S)(),eE=(0,f.S)(),eM=!1,eP=0,ek=1;function eB(e){if(e.preventDefault(),n=void 0,eA=-1,1===e.touches.length)H=q=l.Flag.Primary,eA=0,f.S.set(ew,e.touches[0].pageX,e.touches[0].pageY),n=e.touches[0],eG(e.touches[0]),f.S.copy(eE,B),eM=!0;else if(2===e.touches.length){H=l.Flag.Secondary|l.Flag.Auxilary,q=l.Flag.Secondary,em(e),ek=1,eP=eI(e);let{pageX:t,pageY:r}=eJ(eO(e));eM||(e$(eE,eO(e)),eM=!0),$.next({isStart:!0,distance:eP,delta:0,fraction:ek,fractionDelta:0,startX:eE[0],startY:eE[1],centerPageX:t,centerPageY:r,buttons:H,button:q,modifiers:G()})}else 3===e.touches.length&&(H=q=l.Flag.Forth,eG(eO(e)))}function e_(e){if(eN(),n&&eA<=4){let e=n;if(!S(e.clientX,e.clientY))return;e$(eD,e);let{pageX:t,pageY:r}=eJ(e),[a,i]=eD;ee.next({x:a,y:i,pageX:t,pageY:r,buttons:H,button:q,modifiers:G()})}n=void 0,eM=!1}function eR(e){if(q=l.Flag.None,g&&(e.preventDefault(),e.stopPropagation(),e.originalEvent&&(e.originalEvent.preventDefault(),e.originalEvent.stopPropagation())),n=void 0,1===e.touches.length)H=l.Flag.Primary,n=e.touches[0],eA<0||(f.S.set(eD,e.touches[0].pageX,e.touches[0].pageY),eA+=f.S.distance(ew,eD),f.S.copy(ew,eD)),eU(e.touches[0]);else if(2===e.touches.length){H=l.Flag.Secondary|l.Flag.Auxilary,q=l.Flag.Secondary,em(e);let{pageX:t,pageY:r}=eJ(eO(e)),a=eI(e),n=eP-a,i=eP/a,o=i-ek;ek=i,$.next({isStart:!1,distance:a,delta:n,fraction:i,fractionDelta:o,startX:eE[0],startY:eE[1],centerPageX:t,centerPageY:r,buttons:H,button:q,modifiers:G()})}else 3===e.touches.length&&(H=l.Flag.Forth,eU(eO(e)))}function eF(e){em(e),H=y(e),q=x(e),c&&H===l.Flag.Auxilary&&e.preventDefault,eG(e)}function eL(e){em(e),H=y(e),q=l.Flag.None,eU(e)}function ez(e){em(e),H=y(e),q=x(e),function(e){if(V=u.Stopped,S(e.clientX,e.clientY)){if(e$(_,e),!W&&4>f.S.distance(_,k)){let{pageX:t,pageY:r}=eJ(e),[a,n]=_;ee.next({x:a,y:n,pageX:t,pageY:r,buttons:H,button:q,modifiers:G()})}W=!1}}(e),eN()}function eN(){Z.next(void 0)}function eG(e){S(e.clientX,e.clientY)&&(e$(B,e),f.S.copy(k,B),eY(B)&&(V=u.Started))}function eU(t){var r;e$(_,t);let{pageX:a,pageY:n}=eJ(t),[i,o]=_,{movementX:s,movementY:l}=t,c=eY(_)&&S(t.clientX,t.clientY);if(X&&!c?er.next(void 0):!X&&c&&ea.next(void 0),X=c,z.x=i,z.y=o,z.pageX=a,z.pageY=n,et.next({x:i,y:o,pageX:a,pageY:n,movementX:s,movementY:l,buttons:H,button:q,modifiers:G(),inside:c,onElement:t.target===e}),V===u.Stopped||(b&&(null===(r=t.preventDefault)||void 0===r||r.call(t)),f.S.div(R,f.S.sub(R,_,B),(F[0]=e.clientWidth,F[1]=e.clientHeight,F)),f.S.magnitude(R)<h.I))return;let d=V===u.Started;if(d&&!S(t.clientX,t.clientY))return;f.S.distance(_,k)>=4&&(W=!0);let[p,m]=R;Q.next({x:i,y:o,dx:p,dy:m,pageX:a,pageY:n,buttons:H,button:q,modifiers:G(),isStart:d}),f.S.copy(B,_),V=u.Moving}function eV(e){if(!S(e.clientX,e.clientY))return;e$(_,e);let{pageX:t,pageY:r}=eJ(e),[a,n]=_;o&&e.preventDefault();let i=A(e);H=q=l.Flag.Auxilary,(i.dx||i.dy||i.dz)&&Y.next({x:a,y:n,pageX:t,pageY:r,...i,buttons:H,button:q,modifiers:G()})}function ej(e){var t,r;w&&(e.preventDefault(),null===(t=e.stopImmediatePropagation)||void 0===t||t.call(e),null===(r=e.stopPropagation)||void 0===r||r.call(e))}let eH=0,eq=0;function eX(e){ej(e),eH=e.scale,eq=e.rotation,J.next({scale:e.scale,rotation:e.rotation,deltaRotation:0,deltaScale:0,isStart:!0,buttons:H,button:q,modifiers:G()})}function eW(e,t){J.next({scale:e.scale,rotation:e.rotation,deltaRotation:eq-e.rotation,deltaScale:eH-e.scale,isEnd:t,buttons:H,button:q,modifiers:G()}),eq=e.rotation,eH=e.scale}function eK(e){ej(e),eW(e)}function eQ(e){ej(e),eW(e,!0)}function eZ(){D=e.clientWidth*N(),E=e.clientHeight*N(),en.next({})}function eY(t){if(e instanceof Window||e instanceof Document||e===document.body)return!0;{let r=e.getBoundingClientRect();return t[0]>=0&&t[1]>=0&&t[0]<r.width&&t[1]<r.height}}function e$(t,r){if(D=e.clientWidth*N(),E=e.clientHeight*N(),M){let e=N();t[0]=(P.x+P.width/2)/e,t[1]=(E-(P.y+P.height/2))/e}else{let a=e.getBoundingClientRect();t[0]=(r.clientX||0)-a.left,t[1]=(r.clientY||0)-a.top}return t}function eJ(e){return M?{pageX:Math.round(window.innerWidth/2)+P.x,pageY:Math.round(window.innerHeight/2)+P.y}:{pageX:e.pageX,pageY:e.pageY}}let e0=function(){var t;let r=document.createElement("div"),a="#000 30%, #0000 0 calc(100% - 30%), #000 0",n=`linear-gradient(0deg, ${a}) 50%/10% 100% no-repeat`,i=`linear-gradient(90deg, ${a}) 50%/100% 10% no-repeat`;return Object.assign(r.style,{width:"30px",aspectRatio:1,background:`${n}, ${i}, radial-gradient(circle at 50%, #000 5%, #0000 5%)`,display:"none",zIndex:1e3,position:"absolute",mixBlendMode:"difference",filter:"invert(1)"}),null===(t=e.parentElement)||void 0===t||t.appendChild(r),r}();function e1(e){if(e0.style.display=e?"block":"none",e){let e=N(),t=(P.x+P.width/2)/e,r=(P.y+P.height/2)/e;e0.style.width="30px",e0.style.left=`calc(${t}px - 15px)`,e0.style.bottom=`calc(${r}px - 15px)`}}return{get noScroll(){return o},set noScroll(value){o=value},get noContextMenu(){return d},set noContextMenu(value){d=value},get width(){return D},get height(){return E},get pixelRatio(){return N()},get pointerLock(){return M},...K,setPixelScale:t=>{C=t,D=e.clientWidth*N(),E=e.clientHeight*N()},updateTrackedPointers:e=>{(function(e){let t,r;for(let a of e)"right"===a.handedness?t=a:"left"===a.handedness&&(r=a);!t&&r&&(t=r,r=void 0),(null==t?void 0:t.buttons)===l.Flag.Primary&&(null==r?void 0:r.buttons)===l.Flag.Primary?eT(t,r,l.Flag.Trigger):(null==t?void 0:t.buttons)===l.Flag.Secondary&&(null==r?void 0:r.buttons)===l.Flag.Secondary?eT(t,r,l.Flag.Squeeze):(-1===ey.distance&&(t&&eS(t,!1),r&&eS(r,!0)),(null==t?void 0:t.buttons)||(null==r?void 0:r.buttons)||(ey.distance=-1))})(e),ec.next(e)},updateScreenTouches:e=>{!function(e){if(2===e.length){let t=f.S.fromObj(e[0]),a=f.S.fromObj(e[1]),n=f.S.distance(t,a),i=l.Flag.Trigger;if(eC>0){let e=n/eC;J.next({scale:e,rotation:0,deltaScale:0,deltaRotation:0,buttons:i,button:i,modifiers:G()})}eC=n,r=void 0;return}eC=-1;let t=e[0];if(!t){if(a&&r){let e=f.S.fromObj(a),t=f.S.fromObj(r);if(10>f.S.distance(e,t)){let[t,r]=e,[n,i]=[t,r],o=s.create(),u=l.Flag.Trigger,{ray:c}=a;ee.next({x:t,y:r,pageX:n,pageY:i,buttons:u,button:u,modifiers:o,ray:c})}Z.next(void 0)}r=void 0,a=void 0;return}let[n,i]=f.S.fromObj(t),[o,u]=[n,i],c=s.create(),d=l.Flag.Trigger,p=void 0===r,m=r?n-r.x:0,h=r?i-r.y:0;r=t,p&&(a=t),Q.next({x:n,y:i,dx:m,dy:h,pageX:o,pageY:u,buttons:d,button:d,modifiers:c,isStart:p,useDelta:!0})}(e)},requestPointerLock:t=>{P=t,M||e.requestPointerLock()},exitPointerLock:()=>{M&&e.ownerDocument.exitPointerLock()},dispose:function(){j||(j=!0,e.removeEventListener("contextmenu",ef,!1),e.removeEventListener("wheel",eV,!1),e.removeEventListener("mousedown",eF,!1),window.removeEventListener("mousemove",eL,!1),window.removeEventListener("mouseup",ez,!1),e.removeEventListener("touchstart",eB,!1),e.removeEventListener("touchmove",eR,!1),e.removeEventListener("touchend",e_,!1),e.removeEventListener("gesturechange",eK,!1),e.removeEventListener("gesturestart",eX,!1),e.removeEventListener("gestureend",eQ,!1),window.removeEventListener("blur",eh),window.removeEventListener("keyup",ev,!1),window.removeEventListener("keydown",eg,!1),window.removeEventListener("keypress",eb,!1),document.removeEventListener("pointerlockchange",ed,!1),document.removeEventListener("pointerlockerror",ep,!1),e0.remove(),null!=i?(i.unobserve(e.parentElement),i.disconnect()):window.removeEventListener("resize",eZ,!1))}}}},73969:function(e,t,r){var a,n;r.d(t,{B:function(){return a}}),(n=a||(a={})).message=function(e){return{type:"message",timestamp:new Date,message:e}},n.error=function(e){return{type:"error",timestamp:new Date,message:e}},n.warning=function(e){return{type:"warning",timestamp:new Date,message:e}},n.info=function(e){return{type:"info",timestamp:new Date,message:e}}},99289:function(e,t,r){r.d(t,{E5:function(){return o},Mz:function(){return f},O9:function(){return p},dd:function(){return i},hA:function(){return c},sb:function(){return m}});var a,n,i,o,s=r(97187),l=r(37893),u=r(97667);function c(e,t,r){e.fill(t,0,r)}function d(e,t,r){switch(r){case i.Highlight:e[t]|=1;break;case i.RemoveHighlight:e[t]&=-2;break;case i.Select:e[t]|=2;break;case i.Deselect:e[t]&=-3;break;case i.Toggle:e[t]^=2;break;case i.Clear:e[t]=0}}function p(e,t,r){if(r===i.None)return!1;if(s.X.is(t)){let a=s.X.start(t),n=s.X.end(t),o=a+3>>2,l=o+(n-4*o>>2);if(l<=o){for(let t=a;t<n;++t)d(e,t,r);return!0}let c=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),p=Math.min(4*o,n),f=Math.max(a,4*l);switch(r){case i.Highlight:for(let e=o;e<l;++e)c[e]|=16843009;break;case i.RemoveHighlight:for(let e=o;e<l;++e)c[e]&=-16843010;break;case i.Select:for(let e=o;e<l;++e)c[e]|=33686018;break;case i.Deselect:for(let e=o;e<l;++e)c[e]&=-33686019;break;case i.Toggle:for(let e=o;e<l;++e)c[e]^=33686018;break;case i.Clear:for(let e=o;e<l;++e)c[e]=0;break;default:(0,u.UT)(r)}for(let t=a;t<p;++t)d(e,t,r);for(let t=f;t<n;++t)d(e,t,r)}else switch(r){case i.Highlight:for(let r=0,a=t.length;r<a;++r)e[t[r]]|=1;break;case i.RemoveHighlight:for(let r=0,a=t.length;r<a;++r)e[t[r]]&=-2;break;case i.Select:for(let r=0,a=t.length;r<a;++r)e[t[r]]|=2;break;case i.Deselect:for(let r=0,a=t.length;r<a;++r)e[t[r]]&=-3;break;case i.Toggle:for(let r=0,a=t.length;r<a;++r)e[t[r]]^=2;break;case i.Clear:for(let r=0,a=t.length;r<a;++r)e[t[r]]=0;break;default:(0,u.UT)(r)}return!0}function f(e,t){let r=-1,a=-1;switch(e){case i.Highlight:0===t||1===t?(r=1,a=1):2===t||3===t?(r=1,a=3):r=1;break;case i.RemoveHighlight:0===t||1===t?(r=0,a=0):(2===t||3===t)&&(r=1,a=2);break;case i.Select:1===t||3===t?(r=1,a=3):0===t||2===t?(r=1,a=2):r=1;break;case i.Deselect:1===t||3===t?(r=1,a=1):(0===t||2===t)&&(r=0,a=0);break;case i.Toggle:1===t?(r=1,a=3):2===t?(r=0,a=0):3===t?(r=1,a=1):0===t&&(r=1,a=2);break;case i.Clear:r=0,a=0}return{average:r,status:a}}function m(e,t){switch(e){case i.Highlight:return .5;case i.RemoveHighlight:if(0===t)return 0;if(2===t||3===t)return .5;return -1;case i.Select:return .5;case i.Deselect:if(1===t||3===t)return .5;if(0===t)return 0;return -1;case i.Toggle:if(-1===t)return -1;return .5;case i.Clear:if(-1===t)return -1;if(0===t)return 0;return .5;case i.None:return -1;default:(0,u.UT)(e)}}(a=i||(i={}))[a.None=0]="None",a[a.Highlight=1]="Highlight",a[a.RemoveHighlight=2]="RemoveHighlight",a[a.Select=4]="Select",a[a.Deselect=8]="Deselect",a[a.Toggle=16]="Toggle",a[a.Clear=32]="Clear",(n=o||(o={})).is=l.c.has,n.All=i.Highlight|i.RemoveHighlight|i.Select|i.Deselect|i.Toggle|i.Clear,n.Highlighting=i.Highlight|i.RemoveHighlight|i.
7319Clear,n.Selecting=i.Select|i.Deselect|i.Toggle|i.Clear,n.isReverse=function(e,t){return e===i.Highlight&&t===i.RemoveHighlight||e===i.RemoveHighlight&&t===i.Highlight||e===i.Select&&t===i.Deselect||e===i.Deselect&&t===i.Select||e===i.Toggle&&t===i.Toggle}},34813:function(e,t,r){r.d(t,{F:function(){return i}});var a,n=r(14086);function i(e){return{...i.Zero,...e}}(a=i||(i={})).Zero={metalness:0,roughness:0,bumpiness:0},a.toArray=function(e,t,r){return t[r]=255*e.metalness,t[r+1]=255*e.roughness,t[r+2]=255*e.bumpiness,t},a.toArrayNormalized=function(e,t,r){return t[r]=e.metalness,t[r+1]=e.roughness,t[r+2]=e.bumpiness,t},a.areEqual=function(e,t){return e.metalness===t.metalness&&e.roughness===t.roughness&&e.bumpiness===t.bumpiness},a.toString=function({metalness:e,roughness:t,bumpiness:r}){return`M ${e.toFixed(2)} | R ${t.toFixed(2)} | B ${r.toFixed(2)}`},a.getParam=function(e){return n.e.Group({metalness:n.e.Numeric(0,{min:0,max:1,step:.01}),roughness:n.e.Numeric(1,{min:0,max:1,step:.01}),bumpiness:n.e.Numeric(0,{min:0,max:1,step:.01})},{...e,presets:[[{metalness:0,roughness:1,bumpiness:0},"Matte"],[{metalness:0,roughness:.2,bumpiness:0},"Plastic"],[{metalness:0,roughness:.6,bumpiness:0},"Glossy"],[{metalness:1,roughness:.6,bumpiness:0},"Metallic"]]})}},81421:function(e,t,r){r.d(t,{UF:function(){return s},ZU:function(){return p},bC:function(){return f},lP:function(){return o}});var a=r(23833),n=r(43975),i=r(22934);function o(e,t,r){return e=(0,a.uZ)(Math.round(e),0,16777215)+1,t[r+2]=e%256,e=Math.floor(e/256),t[r+1]=e%256,e=Math.floor(e/256),t[r]=e%256,t}function s(e,t,r){return 65536*Math.floor(e)+256*Math.floor(t)+Math.floor(r)-1}let l=255/256,u=n.A.create(16777216,65536,256),c=i.T.create(l/u[0],l/u[1],l/u[2],l/1),d=(0,i.T)();function p(e,t,r,a){return i.T.set(d,e/255,t/255,r/255,a/255),i.T.dot(d,c)}function f(e,t){let r=-1/0;for(let a=0,n=e.length;a<n;a+=t){let t=s(e[a],e[a+1],e[a+2]);t>r&&(r=t)}return r}},53596:function(e,t,r){r.d(t,{U:function(){return n}});var a=r(25374);function n(e,t){return"object"!=typeof e||"prototype"in e?(0,a.create)(e,t):(0,a.create)({...e},t)}},2078:function(e,t,r){r.d(t,{d:function(){return a}});var a,n=r(89987),i=r(86439);(a||(a={})).create=function(){let e=new o,t=()=>e.create();return t.dispose=()=>e.dispose(),t.behavior=t=>e.behavior(t),t};class o{constructor(){this._eventList=[],this._disposed=!1}create(){let e=new n.x;return this._eventList.push(e),e}behavior(e){let t=new i.X(e);return this._eventList.push(t),t}dispose(){if(!this._disposed){for(let e of this._eventList)e.complete();this._disposed=!0}}}},89260:function(e,t,r){r.d(t,{T:function(){return a}});function a(e,t){return`${e}${"/"===e[e.length-1]||"/"===t[0]?"":"/"}${t}`}},25374:function(e,t,r){e.exports=r(99313)},99313:function(e,t){let r;let a={Remove:"remove",Replace:"replace",Add:"add"},n=Symbol.for("__MUTATIVE_PROXY_DRAFT__"),i=Symbol("__MUTATIVE_RAW_RETURN_SYMBOL__"),o=Symbol.iterator,s={mutable:"mutable",immutable:"immutable"},l={};function u(e,t){return e instanceof Map?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function c(e,t){if(t in e){let r=Reflect.getPrototypeOf(e);for(;r;){let e=Reflect.getOwnPropertyDescriptor(r,t);if(e)return e;r=Reflect.getPrototypeOf(r)}}}function d(e){return Object.getPrototypeOf(e)===Set.prototype}function p(e){return Object.getPrototypeOf(e)===Map.prototype}function f(e){var t;return null!==(t=e.copy)&&void 0!==t?t:e.original}function m(e){return!!h(e)}function h(e){return"object"!=typeof e?null:null==e?void 0:e[n]}function g(e){var t;let r=h(e);return r?null!==(t=r.copy)&&void 0!==t?t:r.original:e}function b(e,t){let r;return!!e&&"object"==typeof e&&(Object.getPrototypeOf(e)===Object.prototype||Array.isArray(e)||e instanceof Map||e instanceof Set||!!(null==t?void 0:t.mark)&&((r=t.mark(e,s))===s.immutable||"function"==typeof r))}function y(e){return Array.isArray(e)?1:e instanceof Map?2:e instanceof Set?3:0}function x(e,t){return 2===y(e)?e.get(t):e[t]}function S(e,t,r){2===y(e)?e.set(t,r):e[t]=r}function T(e,t){let r=h(e);return(r?f(r):e)[t]}function C(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function O(e){if(e)for(;e.finalities.revoke.length>0;)e.finalities.revoke.pop()()}function I(e,t){return t?e:[""].concat(e).map(e=>{let t=`${e}`;return -1===t.indexOf("/")&&-1===t.indexOf("~")?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}).join("/")}let A=Object.prototype.propertyIsEnumerable;function w(e,t){let r;if(Array.isArray(e))return Array.prototype.concat.call(e);
7319if(e instanceof Set)return d(e)?Set.prototype.difference?Set.prototype.difference.call(e,new Set):new Set(e.values()):new(Object.getPrototypeOf(e)).constructor(e.values());if(e instanceof Map)return p(e)?new Map(e):new(Object.getPrototypeOf(e)).constructor(e);if((null==t?void 0:t.mark)&&void 0!==(r=t.mark(e,s))&&r!==s.mutable){if(r===s.immutable)return function(e){let t=Object.create(Object.getPrototypeOf(e));return Reflect.ownKeys(e).forEach(r=>{let a=Reflect.getOwnPropertyDescriptor(e,r);a.enumerable&&a.configurable&&a.writable?t[r]=e[r]:(a.writable||(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(a={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[r]}),Reflect.defineProperty(t,r,a))}),t}(e);if("function"==typeof r)return r();throw Error(`Unsupported mark result: ${r}`)}if("object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype){let t={};return Object.keys(e).forEach(r=>{t[r]=e[r]}),Object.getOwnPropertySymbols(e).forEach(r=>{A.call(e,r)&&(t[r]=e[r])}),t}throw Error("Please check mark() to ensure that it is a stable marker draftable function.")}function D(e){e.copy||(e.copy=w(e.original,e.options))}function E(e){return m(e)?function e(t){if(!b(t))return g(t);if(Array.isArray(t))return t.map(e);if(t instanceof Map){let r=Array.from(t.entries()).map(([t,r])=>[t,e(r)]);return p(t)?new Map(r):new(Object.getPrototypeOf(t)).constructor(r)}if(t instanceof Set){let r=Array.from(t).map(e);return d(t)?new Set(r):new(Object.getPrototypeOf(t)).constructor(r)}let r=Object.create(Object.getPrototypeOf(t));for(let a in t)r[a]=e(t[a]);return r}(e):e}function M(e){var t;e.assignedMap=null!==(t=e.assignedMap)&&void 0!==t?t:new Map,e.operated||(e.operated=!0,e.parent&&M(e.parent))}function P(){throw Error("Cannot modify frozen object")}function k(e){return e&&"object"==typeof e&&!Object.isFrozen(e)}function B(e,t){let r=y(e);if(0===r)Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)});else if(1===r){let r=0;for(let a of e)t(r,a,e),r+=1}else e.forEach((r,a)=>t(a,r,e))}function _(e){3===e.type&&e.copy&&(e.copy.clear(),e.setMap.forEach(t=>{e.copy.add(g(t))}))}function R(e,t,r,a){if(e.operated&&e.assignedMap&&e.assignedMap.size>0&&!e.finalized){if(r&&a){let n=function e(t,r=[]){if(Object.hasOwnProperty.call(t,"key")){let e=t.parent.copy,a=h(x(e,t.key));if(null!==a&&(null==a?void 0:a.original)!==t.original)return null;let n=3===t.parent.type,i=n?Array.from(t.parent.setMap.keys()).indexOf(t.key):t.key;if(!(n&&e.size>i||u(e,i)))return null;r.push(i)}if(t.parent)return e(t.parent,r);r.reverse();try{!function(e,t){for(let r=0;r<t.length-1;r+=1){let a=t[r];if("object"!=typeof(e=x(3===y(e)?Array.from(e):e,a)))throw Error(`Cannot resolve patch at '${t.join("/")}'.`)}}(t.copy,r)}catch(e){return null}return r}(e);n&&t(e,n,r,a)}e.finalized=!0}}function F(e,t,r,a){let n=h(r);n&&(n.callbacks||(n.callbacks=[]),n.callbacks.push((i,o)=>{let s=3===e.type?e.setMap:e.copy;if(C(x(s,t),r)){let r=n.original;n.copy&&(r=n.copy),_(e),R(e,a,i,o),S(s,t,r)}}),e.options.enableAutoFreeze&&n.finalities!==e.finalities&&(e.options.enableAutoFreeze=!1)),b(r,e.options)&&e.finalities.draft.push(()=>{C(x(3===e.type?e.setMap:e.copy,t),r)&&function(e,t){let r=3===e.type?e.setMap:e.copy;e.finalities.revoke.length>1&&e.assignedMap.get(t)&&r&&function e(t,r,a){if(m(t)||!b(t,a)||r.has(t)||Object.isFrozen(t))return;let n=t instanceof Set,i=n?new Map:void 0;if(r.add(t),B(t,(o,s)=>{var l;if(m(s)){let e=h(s);D(e),S(n?i:t,o,(null===(l=e.assignedMap)||void 0===l?void 0:l.size)||e.operated?e.copy:e.original)}else e(s,r,a)}),i){let e=Array.from(t);t.clear(),e.forEach(e=>{t.add(i.has(e)?i.get(e):e)})}}(x(r,t),e.finalities.handledSet,e.options)}(e,t)})}function L(e,t,r,n){let{pathAsArray:i=!0}=e.options.enablePatches;switch(e.type){case 0:case 2:return function({original:e,copy:t,assignedMap:r},n,i,o,s){r.forEach((r,l)=>{let c=x(e,l),d=E(x(t,l)),p=r?u(e,l)?a.Replace:a.Add:a.Remove;if(C(c,d)&&p===a.Replace)return;let f=I(n.concat(l),s);i.push(p===a.Remove?{op:p,path:f}:{op:p,path:f,value:d}),o.push(p===a.Add?{op:a.Remove,path:f}:p===a.Remove?{op:a.Add,path:f,value:c}:{op:a.Replace,path:f,value:c})})}(e,t,r,n,i);case 1:return function(e,t,r,n,i){let{original:o,assignedMap:s,options:l}=e,u=e.copy;u.length<o.length&&([o,u]=[u,o],[r,n]=[n,r]);for(let e=0;e<o.length;e+=1)if(s.get(e.toString())&&u[e]!==o[e]){let s=I(t.concat([e]),i);r.push({op:a.Replace,path:s,value:E(u[e])}),n.push({op:a.Replace,path:s,value:E(o[e])})}for(let e=o.length;e<u.length;e+=1){let n=I(t.concat([e]),i);r.push({op:a.Add,path:n,value:E(u[e])})}if(o.length<u.length){let{arrayLengthAssignment:e=!0}=l.enablePatches;if(e){let e=I(t.concat(["length"]),i);n.push({op:a.Replace,path:e,value:o.length})}else for(let e=u.length;o.length<e;e-=1){let r=I(t.concat([e-1]),i);n.push({op:a.Remove,path:r})}}}(e,t,r,n,i);case 3:return function({original:e,copy:t},r,n,i,o){let s=0;
7319e.forEach(e=>{if(!t.has(e)){let t=I(r.concat([s]),o);n.push({op:a.Remove,path:t,value:e}),i.unshift({op:a.Add,path:t,value:e})}s+=1}),s=0,t.forEach(t=>{if(!e.has(t)){let e=I(r.concat([s]),o);n.push({op:a.Add,path:e,value:t}),i.unshift({op:a.Remove,path:e,value:t})}s+=1})}(e,t,r,n,i)}}let z=(e,t,r=!1)=>{if("object"==typeof e&&null!==e&&(!b(e,t)||r))throw Error("Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.")},N={get size(){return f(h(this)).size},has(e){return f(h(this)).has(e)},set(e,t){let r=h(this),a=f(r);return a.has(e)&&C(a.get(e),t)||(D(r),M(r),r.assignedMap.set(e,!0),r.copy.set(e,t),F(r,e,t,L)),this},delete(e){if(!this.has(e))return!1;let t=h(this);return D(t),M(t),t.original.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.copy.delete(e),!0},clear(){let e=h(this);if(this.size){for(let[t]of(D(e),M(e),e.assignedMap=new Map,e.original))e.assignedMap.set(t,!1);e.copy.clear()}},forEach(e,t){f(h(this)).forEach((r,a)=>{e.call(t,this.get(a),a,this)})},get(e){var t,r;
7319let a=h(this),n=f(a).get(e),i=(null===(r=(t=a.options).mark)||void 0===r?void 0:r.call(t,n,s))===s.mutable;if(a.options.strict&&z(n,a.options,i),i||a.finalized||!b(n,a.options)||n!==a.original.get(e))return n;let o=l.createDraft({original:n,parentDraft:a,key:e,finalities:a.finalities,options:a.options});return D(a),a.copy.set(e,o),o},keys(){return f(h(this)).keys()},values(){let e=this.keys();return{[o]:()=>this.values(),next:()=>{let t=e.next();return t.done?t:{done:!1,value:this.get(t.value)}}}},entries(){let e=this.keys();return{[o]:()=>this.entries(),next:()=>{let t=e.next();if(t.done)return t;let r=this.get(t.value);return{done:!1,value:[t.value,r]}}}},[o](){return this.entries()}},G=Reflect.ownKeys(N),U=(e,t,{isValuesIterator:r})=>()=>{var a,n;let i=t.next();if(i.done)return i;let o=i.value,u=e.setMap.get(o),c=h(u),d=(null===(n=(a=e.options).mark)||void 0===n?void 0:n.call(a,u,s))===s.mutable;if(e.options.strict&&z(o,e.options,d),d||c||!b(o,e.options)||e.finalized||!e.original.has(o))c&&(u=c.proxy);else{let t=l.createDraft({original:o,parentDraft:e,key:o,finalities:e.finalities,options:e.options});e.setMap.set(o,t),u=t}return{done:!1,value:r?u:[u,u]}},V={get size(){return h(this).setMap.size},has(e){let t=h(this);if(t.setMap.has(e))return!0;D(t);let r=h(e);return!(!r||!t.setMap.has(r.original))},add(e){let t=h(this);return this.has(e)||(D(t),M(t),t.assignedMap.set(e,!0),t.setMap.set(e,e),F(t,e,e,L)),this},delete(e){if(!this.has(e))return!1;let t=h(this);D(t),M(t);let r=h(e);return r&&t.setMap.has(r.original)?(t.assignedMap.set(r.original,!1),t.setMap.delete(r.original)):(!r&&t.setMap.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.setMap.delete(e))},clear(){if(!this.size)return;let e=h(this);for(let t of(D(e),M(e),e.original))e.assignedMap.set(t,!1);e.setMap.clear()},values(){let e=h(this);D(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.values(),next:U(e,t,{isValuesIterator:!0})}},entries(){let e=h(this);D(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.entries(),next:U(e,t,{isValuesIterator:!1})}},keys(){return this.values()},[o](){return this.values()},forEach(e,t){let r=this.values(),a=r.next();for(;!a.done;)e.call(t,a.value,a.value,this),a=r.next()}};Set.prototype.difference&&Object.assign(V,{intersection(e){return Set.prototype.intersection.call(new Set(this.values()),e)},union(e){return Set.prototype.union.call(new Set(this.values()),e)},difference(e){return Set.prototype.difference.call(new Set(this.values()),e)},symmetricDifference(e){return Set.prototype.symmetricDifference.call(new Set(this.values()),e)},isSubsetOf(e){return Set.prototype.isSubsetOf.call(new Set(this.values()),e)},isSupersetOf(e){return Set.prototype.isSupersetOf.call(new Set(this.values()),e)},isDisjointFrom(e){return Set.prototype.isDisjointFrom.call(new Set(this.values()),e)}});let j=Reflect.ownKeys(V),H={get(e,t,r){var a,i;let o;let l=null===(a=e.copy)||void 0===a?void 0:a[t];if(l&&e.finalities.draftsCache.has(l))return l;if(t===n)return e;if(e.options.mark){let a="size"===t&&(e.original instanceof Map||e.original instanceof Set)?Reflect.get(e.original,t):Reflect.get(e.original,t,r);if((o=e.options.mark(a,s))===s.mutable)return e.options.strict&&z(a,e.options,!0),a}let d=f(e);if(d instanceof Map&&G.includes(t))return"size"===t?Object.getOwnPropertyDescriptor(N,"size").get.call(e.proxy):N[t].bind(e.proxy);if(d instanceof Set&&j.includes(t))return"size"===t?Object.getOwnPropertyDescriptor(V,"size").get.call(e.proxy):V[t].bind(e.proxy);if(!u(d,t)){let r=c(d,t);return r?"value"in r?r.value:null===(i=r.get)||void 0===i?void 0:i.call(e.proxy):void 0}let p=d[t];if(e.options.strict&&z(p,e.options),e.finalized||!b(p,e.options))return p;if(p===T(e.original,t)){if(D(e),e.copy[t]=q({original:e.original[t],parentDraft:e,key:1===e.type?Number(t):t,finalities:e.finalities,options:e.options}),"function"==typeof o){let r=h(e.copy[t]);return D(r),M(r),r.copy}return e.copy[t]}return m(p)&&e.finalities.draftsCache.add(p),p},set(e,t,r){var a;let n;if(3===e.type||2===e.type)throw Error("Map/Set draft does not support any property assignment.");if(1===e.type&&"length"!==t&&(!(Number.isInteger(n=Number(t))&&n>
7319=0)||0!==t&&0!==n&&String(n)!==String(t)))throw Error("Only supports setting array indices and the 'length' property.");let i=c(f(e),t);if(null==i?void 0:i.set)return i.set.call(e.proxy,r),!0;let o=T(f(e),t),s=h(o);return s&&C(s.original,r)?(e.copy[t]=r,e.assignedMap=null!==(a=e.assignedMap)&&void 0!==a?a:new Map,e.assignedMap.set(t,!1)):C(r,o)&&(void 0!==r||u(e.original,t))||(D(e),M(e),u(e.original,t)&&C(r,e.original[t])?e.assignedMap.delete(t):e.assignedMap.set(t,!0),e.copy[t]=r,F(e,t,r,L)),!0},has:(e,t)=>t in f(e),ownKeys:e=>Reflect.ownKeys(f(e)),getOwnPropertyDescriptor(e,t){let r=f(e),a=Reflect.getOwnPropertyDescriptor(r,t);return a?{writable:!0,configurable:1!==e.type||"length"!==t,enumerable:a.enumerable,value:r[t]}:a},getPrototypeOf:e=>Reflect.getPrototypeOf(e.original),setPrototypeOf(){throw Error("Cannot call 'setPrototypeOf()' on drafts")},defineProperty(){throw Error("Cannot call 'defineProperty()' on drafts")},deleteProperty(e,t){var r;return 1===e.type?H.set.call(this,e,t,void 0,e.proxy):(void 0!==T(e.original,t)||t in e.original?(D(e),M(e),e.assignedMap.set(t,!1)):(e.assignedMap=null!==(r=e.assignedMap)&&void 0!==r?r:new Map,e.assignedMap.delete(t)),e.copy&&delete e.copy[t],!0)}};function q(e){let{original:t,parentDraft:r,key:a,finalities:n,options:i}=e,o=y(t),s={type:o,finalized:!1,parent:r,original:t,copy:null,proxy:null,finalities:n,options:i,setMap:3===o?new Map(t.entries()):void 0};(a||"key"in e)&&(s.key=a);let{proxy:l,revoke:u}=Proxy.revocable(1===o?Object.assign([],s):s,H);if(n.revoke.push(u),s.proxy=l,r)r.finalities.draft.push((e,t)=>{var n;let i=h(l),o=3===r.type?r.setMap:r.copy,s=x(o,a),u=h(s);if(u){let r=u.original;u.operated&&(r=g(s)),_(u),R(u,L,e,t),S(o,a,r)}null===(n=i.callbacks)||void 0===n||n.forEach(r=>{r(e,t)})});else{let e=h(l);e.finalities.draft.push((t,r)=>{_(e),R(e,L,t,r)})}return l}function X(e){let{rootDraft:t,value:r,useRawReturn:a=!1,isRoot:n=!0}=e;B(r,(r,a,n)=>{let i=h(a);if(i&&t&&i.finalities===t.finalities){e.isContainDraft=!0;let t=i.original;if(n instanceof Set){let e=Array.from(n);n.clear(),e.forEach(e=>n.add(r===e?t:e))}else S(n,r,t)}else"object"==typeof a&&null!==a&&(e.value=a,e.isRoot=!1,X(e))})}function W(e){if(!m(e))throw Error(`current() is only used for Draft, parameter: ${e}`);return function e(t){var r;let a;let n=h(t);if(!b(t,null==n?void 0:n.options))return t;let i=y(t);if(n&&!n.operated)return n.original;function o(){a=2===i?p(t)?new Map(t):new(Object.getPrototypeOf(t)).constructor(t):3===i?Array.from(n.setMap.values()):w(t,null==n?void 0:n.options)}if(n){n.finalized=!0;try{o()}finally{n.finalized=!1}}else a=t;if(B(a,(r,i)=>{if(n&&C(x(n.original,r),i))return;let s=e(i);s!==i&&(a===t&&o(),S(a,r,s))}),3===i){let e=null!==(r=null==n?void 0:n.original)&&void 0!==r?r:a;return d(e)?new Set(a):new(Object.getPrototypeOf(e)).constructor(a)}return a}(e)}l.createDraft=q;let K=Object.prototype.constructor.toString();t.create=function e(t,n,o){var l,u,c;let d;if("function"==typeof t&&"function"!=typeof n)return function(r,...a){return e(r,e=>t.call(this,e,...a),n)};let p=o;"function"!=typeof n&&(p=n),p=Object.assign(Object.assign({},r),p);let f=m(t)?W(t):t,g=Array.isArray(p.mark)?(e,t)=>{for(let r of p.mark){let a=r(e,t);if(a)return a}}:p.mark,x=null!==(l=p.enablePatches)&&void 0!==l&&l,S=null!==(u=p.strict)&&void 0!==u&&u,T={enableAutoFreeze:null!==(c=p.enableAutoFreeze)&&void 0!==c&&c,mark:g,strict:S,enablePatches:x};if(!b(f,T)&&"object"==typeof f&&null!==f)throw Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");let[I,A]=function(e,t){var r;let n,i;let o={draft:[],revoke:[],handledSet:new WeakSet,draftsCache:new WeakSet};t.enablePatches&&(n=[],i=[]);let l=(null===(r=t.mark)||void 0===r?void 0:r.call(t,e,s))!==s.mutable&&b(e,t)?q({original:e,parentDraft:null,finalities:o,options:t}):e;return[l,(e=[])=>{let[r,o,s]=function(e,t,r,n,i){var o;let s=h(e),l=null!==(o=null==s?void 0:s.original)&&void 0!==o?o:e,u=!!t.length;if(null==s?void 0:s.operated)for(;s.finalities.draft.length>0;)s.finalities.draft.pop()(r,n);let c=u?t[0]:s?s.operated?s.copy:s.original:e;return s&&O(s),i&&function e(t,r,a,n,i){if(!(Object.isFrozen(t)||m(t)))switch(y(t)){case 2:for(let[r,a]of t)k(r)&&e(r),k(a)&&e(a);t.set=t.clear=t.delete=P;break;case 3:for(let r of t)k(r)&&e(r);t.add=t.clear=t.delete=P;break;case 1:for(let r of(Object.freeze(t),t))k(r)&&e(r);break;default:Object.freeze(t),Object.keys(t).forEach(r=>{let a=t[r];k(a)&&e(a)})}}(c,0,null==s||s.options.updatedValues),[c,r&&u?[{op:a.Replace,path:[],value:t[0]}]:r,n&&u?[{op:a.Replace,path:[],value:l}]:n]}(l,e,n,i,t.enableAutoFreeze);return t.enablePatches?[r,o,s]:r}]}(f,T);if("function"!=typeof n){if(!b(f,T))throw Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");return[I,A]}try{d=n(I)}catch(e){throw O(h(I)),e}let w=e=>{let t=h(I);if(!m(e)){if(void 0!==e&&!C(e,I)&&(null==t?void 0:t.operated))throw Error("Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.");let r=null==e?void 0:e[i];if(r){let a=r[0];
7319return T.strict&&"object"==typeof e&&null!==e&&X({rootDraft:t,value:e,useRawReturn:!0}),A([a])}if(void 0!==e)return"object"==typeof e&&null!==e&&X({rootDraft:t,value:e}),A([e])}if(e===I||void 0===e)return A([]);let r=h(e);if(T===r.options){if(r.operated)throw Error("Cannot return a modified child draft.");return A([W(e)])}return A([e])};return d instanceof Promise?d.then(w,e=>{throw O(h(I)),e}):w(d)},e=>{if((e=>{if(!e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===K})(e))return s.immutable}},86439:function(e,t,r){r.d(t,{X:function(){return n}});var a=r(66469),n=function(e){function t(t){var r=e.call(this)||this;return r._value=t,r}return(0,a.ZT)(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(t){var r=e.prototype._subscribe.call(this,t);return r.closed||t.next(this._value),r},t.prototype.getValue=function(){var e=this.hasError,t=this.thrownError,r=this._value;if(e)throw t;return this._throwIfClosed(),r},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(r(89987).x)},38119:function(e,t,r){r.d(t,{y:function(){return c}});var a=r(13703),n=r(56355),i=r(21436),o=r(93895),s=r(44619),l=r(10234),u=r(86478),c=function(){function e(e){e&&(this._subscribe=e)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(e,t,r){var i,o=this,s=(i=e)&&i instanceof a.Lv||i&&(0,l.m)(i.next)&&(0,l.m)(i.error)&&(0,l.m)(i.complete)&&(0,n.Nn)(i)?e:new a.Hp(e,t,r);return(0,u.x)(function(){var e=o.operator,t=o.source;s.add(e?e.call(s,t):t?o._subscribe(s):o._trySubscribe(s))}),s},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},e.prototype.forEach=function(e,t){var r=this;return new(t=d(t))(function(t,n){var i=new a.Hp({next:function(t){try{e(t)}catch(e){n(e),i.unsubscribe()}},error:n,complete:t});r.subscribe(i)})},e.prototype._subscribe=function(e){var t;return null===(t=this.source)||void 0===t?void 0:t.subscribe(e)},e.prototype[i.L]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return(0===e.length?o.y:1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)})(this)},e.prototype.toPromise=function(e){var t=this;return new(e=d(e))(function(e,r){var a;t.subscribe(function(e){return a=e},function(e){return r(e)},function(){return e(a)})})},e.create=function(t){return new e(t)},e}();function d(e){var t;return null!==(t=null!=e?e:s.v.Promise)&&void 0!==t?t:Promise}},89987:function(e,t,r){r.d(t,{x:function(){return u}});var a=r(66469),n=r(38119),i=r(56355),o=(0,r(83117).d)(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),s=r(99437),l=r(86478),u=function(e){function t(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return(0,a.ZT)(t,e),t.prototype.lift=function(e){var t=new c(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new o},t.prototype.next=function(e){var t=this;(0,l.x)(function(){var r,n;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||(t.currentObservers=Array.from(t.observers));try{for(var i=(0,a.XA)(t.currentObservers),o=i.next();!o.done;o=i.next())o.value.next(e)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}})},t.prototype.error=function(e){var t=this;(0,l.x)(function(){if(t._throwIfClosed(),!t.isStopped){t.hasError=t.isStopped=!0,t.thrownError=e;for(var r=t.observers;r.length;)r.shift().error(e)}})},t.prototype.complete=function(){var e=this;(0,l.x)(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var t=e.observers;t.length;)t.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var e;return(null===(e=this.observers)||void 0===e?void 0:e.length)>0}
7319,enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,r=this.hasError,a=this.isStopped,n=this.observers;return r||a?i.Lc:(this.currentObservers=null,n.push(e),new i.w0(function(){t.currentObservers=null,(0,s.P)(n,e)}))},t.prototype._checkFinalizedStatuses=function(e){var t=this.hasError,r=this.thrownError,a=this.isStopped;t?e.error(r):a&&e.complete()},t.prototype.asObservable=function(){var e=new n.y;return e.source=this,e},t.create=function(e,t){return new c(e,t)},t}(n.y),c=function(e){function t(t,r){var a=e.call(this)||this;return a.destination=t,a.source=r,a}return(0,a.ZT)(t,e),t.prototype.next=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===r||r.call(t,e)},t.prototype.error=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===r||r.call(t,e)},t.prototype.complete=function(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)},t.prototype._subscribe=function(e){var t,r;return null!==(r=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==r?r:i.Lc},t}(u)},13703:function(e,t,r){r.d(t,{Hp:function(){return b},Lv:function(){return f}});var a=r(66469),n=r(10234),i=r(56355),o=r(44619),s=r(6342);function l(){}var u=c("C",void 0,void 0);function c(e,t,r){return{kind:e,value:t,error:r}}var d=r(87828),p=r(86478),f=function(e){function t(t){var r=e.call(this)||this;return r.isStopped=!1,t?(r.destination=t,(0,i.Nn)(t)&&t.add(r)):r.destination=S,r}return(0,a.ZT)(t,e),t.create=function(e,t,r){return new b(e,t,r)},t.prototype.next=function(e){this.isStopped?x(c("N",e,void 0),this):this._next(e)},t.prototype.error=function(e){this.isStopped?x(c("E",void 0,e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?x(u,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(i.w0),m=Function.prototype.bind;function h(e,t){return m.call(e,t)}var g=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){y(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){y(e)}else y(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){y(e)}},e}(),b=function(e){function t(t,r,a){var i,s,l=e.call(this)||this;return(0,n.m)(t)||!t?i={next:null!=t?t:void 0,error:null!=r?r:void 0,complete:null!=a?a:void 0}:l&&o.v.useDeprecatedNextContext?((s=Object.create(t)).unsubscribe=function(){return l.unsubscribe()},i={next:t.next&&h(t.next,s),error:t.error&&h(t.error,s),complete:t.complete&&h(t.complete,s)}):i=t,l.destination=new g(i),l}return(0,a.ZT)(t,e),t}(f);function y(e){o.v.useDeprecatedSynchronousErrorHandling?(0,p.O)(e):(0,s.h)(e)}function x(e,t){var r=o.v.onStoppedNotification;r&&d.z.setTimeout(function(){return r(e,t)})}var S={closed:!0,next:l,error:function(e){throw e},complete:l}},56355:function(e,t,r){r.d(t,{Lc:function(){return l},w0:function(){return s},Nn:function(){return u}});var a=r(66469),n=r(10234),i=(0,r(83117).d)(function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"",this.name="UnsubscriptionError",this.errors=t}}),o=r(99437),s=function(){var e;function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e,t,r,o,s,l=this._parentage;if(l){if(this._parentage=null,Array.isArray(l))try{for(var u=(0,a.XA)(l),d=u.next();!d.done;d=u.next())d.value.remove(this)}catch(t){e={error:t}}finally{try{d&&!d.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}else l.remove(this)}var p=this.initialTeardown;
7319if((0,n.m)(p))try{p()}catch(e){s=e instanceof i?e.errors:[e]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var m=(0,a.XA)(f),h=m.next();!h.done;h=m.next()){var g=h.value;try{c(g)}catch(e){s=null!=s?s:[],e instanceof i?s=(0,a.ev)((0,a.ev)([],(0,a.CR)(s)),(0,a.CR)(e.errors)):s.push(e)}}}catch(e){r={error:e}}finally{try{h&&!h.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}}if(s)throw new i(s)}},t.prototype.add=function(e){var r;if(e&&e!==this){if(this.closed)c(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=null!==(r=this._finalizers)&&void 0!==r?r:[]).push(e)}}},t.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},t.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},t.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&(0,o.P)(t,e)},t.prototype.remove=function(e){var r=this._finalizers;r&&(0,o.P)(r,e),e instanceof t&&e._removeParent(this)},t.EMPTY=((e=new t).closed=!0,e),t}(),l=s.EMPTY;function u(e){return e instanceof s||e&&"closed"in e&&(0,n.m)(e.remove)&&(0,n.m)(e.add)&&(0,n.m)(e.unsubscribe)}function c(e){(0,n.m)(e)?e():e.unsubscribe()}},44619:function(e,t,r){r.d(t,{v:function(){return a}});var a={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},3906:function(e,t,r){r.d(t,{E:function(){return a}});var a=new(r(38119)).y(function(e){return e.complete()})},3799:function(e,t,r){r.d(t,{Xf:function(){return h}});var a=r(66469),n=r(89622),i=r(64882),o=r(38119),s=r(40117),l=r(62528),u=r(73822),c=r(54919),d=r(19625),p=r(10234),f=r(6342),m=r(21436);function h(e){if(e instanceof o.y)return e;if(null!=e){if((0,s.c)(e))return new o.y(function(t){var r=e[m.L]();if((0,p.m)(r.subscribe))return r.subscribe(t);throw TypeError("Provided object does not correctly implement Symbol.observable")});if((0,n.z)(e))return new o.y(function(t){for(var r=0;r<e.length&&!t.closed;r++)t.next(e[r]);t.complete()});if((0,i.t)(e))return new o.y(function(t){e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,f.h)});if((0,l.D)(e))return g(e);if((0,c.T)(e))return new o.y(function(t){var r,n;try{for(var i=(0,a.XA)(e),o=i.next();!o.done;o=i.next()){var s=o.value;if(t.next(s),t.closed)return}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}t.complete()});if((0,d.L)(e))return g((0,d.Q)(e))}throw(0,u.z)(e)}function g(e){return new o.y(function(t){(function(e,t){var r,n,i,o;return(0,a.mG)(this,void 0,void 0,function(){var s;return(0,a.Jh)(this,function(l){switch(l.label){case 0:l.trys.push([0,5,6,11]),r=(0,a.KL)(e),l.label=1;case 1:return[4,r.next()];case 2:if((n=l.sent()).done)return[3,4];if(s=n.value,t.next(s),t.closed)return[2];l.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return i={error:l.sent()},[3,11];case 6:if(l.trys.push([6,,9,10]),!(n&&!n.done&&(o=r.return)))return[3,8];return[4,o.call(r)];case 7:l.sent(),l.label=8;case 8:return[3,10];case 9:if(i)throw i.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})})(e,t).catch(function(e){return t.error(e)})})}},22569:function(e,t,r){r.d(t,{T:function(){return A}});var a=r(73824),n=r(3799),i=r(15221);function o(e,t,r,a,n){void 0===a&&(a=0),void 0===n&&(n=!1);var i=t.schedule(function(){r(),n?e.add(this.schedule(null,a)):this.unsubscribe()},a);if(e.add(i),!n)return i}var s=r(654),l=r(10234),u=r(93895),c=r(3906),d=r(50431);function p(e){return e[e.length-1]}function f(e,t){return void 0===t&&(t=0),(0,i.e)(function(r,a){r.subscribe((0,s.x)(a,function(r){return o(a,e,function(){return a.next(r)},t)},function(){return o(a,e,function(){return a.complete()},t)},function(r){return o(a,e,function(){return a.error(r)},t)}))})}function m(e,t){return void 0===t&&(t=0),(0,i.e)(function(r,a){a.add(e.schedule(function(){return r.subscribe(a)},t))})}var h=r(38119),g=r(93692);function b(e,t){if(!e)throw Error("Iterable cannot be null");return new h.y(function(r){o(r,t,function(){var a=e[Symbol.asyncIterator]();o(r,t,function(){a.next().then(function(e){e.done?r.complete():r.next(e.value)})},0,!0)})})}var y=r(40117),x=r(64882),S=r(89622),T=r(54919),C=r(62528),O=r(73822),I=r(19625);function A(){for(var e,t,r=[],A=0;A<arguments.length;A++)r[A]=arguments[A];var w=(0,d.K)(p(r))?r.pop():void 0,D=(e=1/0,"number"==typeof p(r)?r.pop():e);return r.length?1===r.length?(0,n.Xf)(r[0]):(void 0===(t=D)&&(t=1/0),function e(t,r,u){return(void 0===u&&(u=1/0),(0,l.m)(r))?e(function(e,i){return(0,a.U)(function(t,a){return r(e,t,i,a)})((0,n.Xf)(t(e,i)))},u):("number"==typeof r&&(u=r),(0,i.e)(function(e,r){var a,i,l,c,d,p,f,m,h,g,b,y;return a=u,p=[],f=0,m=0,h=!1,g=function(){!h||p.length||f||r.complete()},b=function(e){return f<a?y(e):p.push(e)},y=function(e){f++;var u=!1;(0,n.Xf)(t(e,m++)).subscribe((0,s.x)(r,function(e){null==void 0||i(e),l?b(e):r.next(e)},function(){u=!0},void 0,function(){if(u)try{for(f--;p.length&&f<a;)!function(){var e=p.shift();1?y(e):o(r,c,function(){return y(e)})}();g()}catch(e){r.error(e)}}))},e.subscribe((0,s.x)(r,b,function(){h=!0,g()})),function(){null==void 0||d()}}))}(u.y,t))(w?function(e,t){if(null!=e){if((0,y.c)(e))return(0,n.Xf)(e).pipe(m(t),f(t));if((0,S.z)(e))return new h.y(function(r){var a=0;return t.schedule(function(){a===e.length?r.complete():(r.next(e[a++]),r.closed||this.schedule())})});if((0,x.t)(e))return(0,n.Xf)(e).pipe(m(t),f(t));if((0,C.D)(e))return b(e,t);if((0,T.T)(e))return new h.y(function(r){var a;return o(r,t,function(){a=e[g.h](),o(r,t,function(){var e,t,n;try{t=(e=a.next()).value,n=e.done}catch(e){r.error(e);return}n?r.complete():r.next(t)},0,!0)}),function(){return(0,l.m)(null==a?void 0:a.return)&&a.return()}});if((0,I.L)(e))return b((0,I.Q)(e),t)}throw(0,O.z)(e)}(r,w):(0,n.Xf)(r)):c.E}},654:function(e,t,r){r.d(t,{x:function(){return n}});var a=r(66469);function n(e,t,r,a,n){return new i(e,t,r,a,n)}var i=function(e){function t(t,r,a,n,i,o){var s=e.call(this,t)||this;return s.onFinalize=i,s.shouldUnsubscribe=o,s._next=r?function(e){try{r(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=n?function(e){try{n(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=a?function(){try{a()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return(0,a.ZT)(t,e),t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;e.prototype.unsubscribe.call(this),r||null===(t=this.onFinalize)||void 0===t||t.call(this)}},t}(r(13703).Lv)},82820:function(e,t,r){r.d(t,{b:function(){return o}});var a=r(73106),n=r(15221),i=r(654);function o(e,t){return void 0===t&&(t=a.z),(0,n.e)(function(r,a){var n=null,o=null,s=null,l=function(){if(n){n.unsubscribe(),n=null;var e=o;o=null,a.next(e)}};function u(){var r=s+e,i=t.now();if(i<r){n=this.schedule(void 0,r-i),a.add(n);return}l()}r.subscribe((0,i.x)(a,function(r){o=r,s=t.now(),n||(n=t.schedule(u,e),a.add(n))},function(){l(),a.complete()},void 0,function(){o=n=null}))})}},73506:function(e,t,r){r.d(t,{h:function(){return i}});var a=r(15221),n=r(654);function i(e,t){return(0,a.e)(function(r,a){var i=0;r.subscribe((0,n.x)(a,function(r){return e.call(t,r,i++)&&a.next(r)}))})}},73824:function(e,t,r){r.d(t,{U:function(){return i}});var a=r(15221),n=r(654);function i(e,t){return(0,a.e)(function(r,a){var i=0;r.subscribe((0,n.x)(a,function(r){a.next(e.call(t,r,i++))}))})}},30485:function(e,t,r){r.d(t,{p:function(){return u}});
7319var a=r(73106),n=r(15221),i=r(654),o=r(3799),s=r(38119),l=r(50431);function u(e,t,r){void 0===t&&(t=a.z);var u,c,d,p,f,m=(u=e,c=t,void 0===u&&(u=0),void 0===d&&(d=a.P),p=-1,null!=c&&((0,l.K)(c)?d=c:p=c),new s.y(function(e){var t,r=(t=u)instanceof Date&&!isNaN(t)?+u-d.now():u;r<0&&(r=0);var a=0;return d.schedule(function(){e.closed||(e.next(a++),0<=p?this.schedule(void 0,p):e.complete())},r)}));return f=function(){return m},(0,n.e)(function(e,t){var a=null!=r?r:{},n=a.leading,s=void 0===n||n,l=a.trailing,u=void 0!==l&&l,c=!1,d=null,p=null,m=!1,h=function(){null==p||p.unsubscribe(),p=null,u&&(y(),m&&t.complete())},g=function(){p=null,m&&t.complete()},b=function(e){return p=(0,o.Xf)(f(e)).subscribe((0,i.x)(t,h,g))},y=function(){if(c){c=!1;var e=d;d=null,t.next(e),m||b(e)}};e.subscribe((0,i.x)(t,function(e){c=!0,d=e,p&&!p.closed||(s?y():b(e))},function(){m=!0,u&&c&&p&&!p.closed||t.complete()}))})}},73106:function(e,t,r){r.d(t,{P:function(){return d},z:function(){return c}});var a=r(66469),n=function(e){function t(t,r){return e.call(this)||this}return(0,a.ZT)(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(r(56355).w0),i={setInterval:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=i.delegate;return(null==o?void 0:o.setInterval)?o.setInterval.apply(o,(0,a.ev)([e,t],(0,a.CR)(r))):setInterval.apply(void 0,(0,a.ev)([e,t],(0,a.CR)(r)))},clearInterval:function(e){var t=i.delegate;return((null==t?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0},o=r(99437),s=function(e){function t(t,r){var a=e.call(this,t,r)||this;return a.scheduler=t,a.work=r,a.pending=!1,a}return(0,a.ZT)(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var r,a=this.id,n=this.scheduler;return null!=a&&(this.id=this.recycleAsyncId(n,a,t)),this.pending=!0,this.delay=t,this.id=null!==(r=this.id)&&void 0!==r?r:this.requestAsyncId(n,this.id,t),this},t.prototype.requestAsyncId=function(e,t,r){return void 0===r&&(r=0),i.setInterval(e.flush.bind(e,this),r)},t.prototype.recycleAsyncId=function(e,t,r){if(void 0===r&&(r=0),null!=r&&this.delay===r&&!1===this.pending)return t;null!=t&&i.clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return Error("executing a cancelled action");this.pending=!1;var r=this._execute(e,t);if(r)return r;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var r,a=!1;try{this.work(e)}catch(e){a=!0,r=e||Error("Scheduled action threw falsy error")}if(a)return this.unsubscribe(),r},t.prototype.unsubscribe=function(){if(!this.closed){var t=this.id,r=this.scheduler,a=r.actions;this.work=this.state=this.scheduler=null,this.pending=!1,(0,o.P)(a,this),null!=t&&(this.id=this.recycleAsyncId(r,t,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t}(n),l={now:function(){return(l.delegate||Date).now()},delegate:void 0},u=function(){function e(t,r){void 0===r&&(r=e.now),this.schedulerActionCtor=t,this.now=r}return e.prototype.schedule=function(e,t,r){return void 0===t&&(t=0),new this.schedulerActionCtor(this,e).schedule(r,t)},e.now=l.now,e}(),c=new(function(e){function t(t,r){void 0===r&&(r=u.now);var a=e.call(this,t,r)||this;return a.actions=[],a._active=!1,a}return(0,a.ZT)(t,e),t.prototype.flush=function(e){var t,r=this.actions;if(this._active){r.push(e);return}this._active=!0;do if(t=e.execute(e.state,e.delay))break;while(e=r.shift());if(this._active=!1,t){for(;e=r.shift();)e.unsubscribe();throw t}},t}(u))(s),d=c},87828:function(e,t,r){r.d(t,{z:function(){return n}});var a=r(66469),n={setTimeout:function(e,t){for(var r=[],i=2;i<arguments.length;i++)r[i-2]=arguments[i];var o=n.delegate;return(null==o?void 0:o.setTimeout)?o.setTimeout.apply(o,(0,a.ev)([e,t],(0,a.CR)(r))):setTimeout.apply(void 0,(0,a.ev)([e,t],(0,a.CR)(r)))},clearTimeout:function(e){var t=n.delegate;return((null==t?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0}},93692:function(e,t,r){r.d(t,{h:function(){return a}});var a="function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"},21436:function(e,t,r){r.d(t,{L:function(){return a}});var a="function"==typeof Symbol&&Symbol.observable||"@@observable"},99437:function(e,t,r){r.d(t,{P:function(){return a}});function a(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}},83117:function(e,t,r){r.d(t,{d:function(){return a}});function a(e){var t=e(function(e){Error.call(e),e.stack=Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}},86478:function(e,t,r){r.d(t,{O:function(){return o},x:function(){return i}});var a=r(44619),n=null;function i(e){if(a.v.useDeprecatedSynchronousErrorHandling){var t=!n;if(t&&(n={errorThrown:!1,error:null}),e(),t){var r=n,i=r.errorThrown,o=r.error;if(n=null,i)throw o}}else e()}function o(e){a.v.useDeprecatedSynchronousErrorHandling&&n&&(n.errorThrown=!0,n.error=e)}},93895:function(e,t,r){r.d(t,{y:function(){return a}});function a(e){return e}},89622:function(e,t,r){r.d(t,{z:function(){return a}});var a=function(e){return e&&"number"==typeof e.length&&"function"!=typeof e}},62528:function(e,t,r){r.d(t,{D:function(){return n}});var a=r(10234);function n(e){return Symbol.asyncIterator&&(0,a.m)(null==e?void 0:e[Symbol.asyncIterator])}},10234:function(e,t,r){r.d(t,{m:function(){return a}});function a(e){return"function"==typeof e}},40117:function(e,t,r){r.d(t,{c:function(){return i}});var a=r(21436),n=r(10234);function i(e){return(0,n.m)(e[a.L])}},54919:function(e,t,r){r.d(t,{T:function(){return i}});var a=r(93692),n=r(10234);function i(e){return(0,n.m)(null==e?void 0:e[a.h])}},64882:function(e,t,r){r.d(t,{t:function(){return n}});var a=r(10234);function n(e){return(0,a.m)(null==e?void 0:e.then)}},19625:function(e,t,r){r.d(t,{L:function(){return o},Q:function(){return i}});var a=r(66469),n=r(10234);function i(e){return(0,a.FC)(this,arguments,function(){var t,r,n;return(0,a.Jh)(this,function(i){switch(i.label){case 0:t=e.getReader(),i.label=1;case 1:i.trys.push([1,,9,10]),i.label=2;case 2:return[4,(0,a.qq)(t.read())];case 3:if(n=(r=i.sent()).value,!r.done)return[3,5];return[4,(0,a.qq)(void 0)];case 4:return[2,i.sent()];case 5:return[4,(0,a.qq)(n)];case 6:return[4,i.sent()];case 7:return i.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function o(e){return(0,n.m)(null==e?void 0:e.getReader)}},50431:function(e,t,r){r.d(t,{K:function(){return n}});var a=r(10234);function n(e){return e&&(0,a.m)(e.schedule)}},15221:function(e,t,r){r.d(t,{e:function(){return n}});var a=r(10234);function n(e){return function(t){if((0,a.m)(null==t?void 0:t.lift))return t.lift(function(t){try{return e(t,this)}catch(e){this.error(e)}});throw TypeError("Unable to lift unknown Observable type")}}},6342:function(e,t,r){r.d(t,{h:function(){return i}});var a=r(44619),n=r(87828);function i(e){n.z.setTimeout(function(){var t=a.v.onUnhandledError;if(t)t(e);else throw e})}},73822:function(e,t,r){r.d(t,{z:function(){return a}});function a(e){return TypeError("You provided "+(null!==e&&"object"==typeof e?"an invali
7319d object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}},66469:function(e,t,r){r.d(t,{CR:function(){return l},FC:function(){return d},Jh:function(){return o},KL:function(){return p},XA:function(){return s},ZT:function(){return n},ev:function(){return u},mG:function(){return i},qq:function(){return c}});var a=function(e,t){return(a=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function n(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function i(e,t,r,a){return new(r||(r=Promise))(function(n,i){function o(e){try{l(a.next(e))}catch(e){i(e)}}function s(e){try{l(a.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?n(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(o,s)}l((a=a.apply(e,t||[])).next())})}function o(e,t){var r,a,n,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(l){return function(s){if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(r=1,a&&(n=2&s[0]?a.return:s[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,s[1])).done)return n;switch(a=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,a=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=(n=i.trys).length>0&&n[n.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],a=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}function s(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],a=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&a>=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function l(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,n,i=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(a=i.next()).done;)o.push(a.value)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return o}function u(e,t,r){if(r||2==arguments.length)for(var a,n=0,i=t.length;n<i;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}function c(e){return this instanceof c?(this.v=e,this):new c(e)}function d(e,t,r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var a,n=r.apply(e,t||[]),i=[];return a=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),o("next"),o("throw"),o("return",function(e){return function(t){return Promise.resolve(t).then(e,u)}}),a[Symbol.asyncIterator]=function(){return this},a;function o(e,t){n[e]&&(a[e]=function(t){return new Promise(function(r,a){i.push([e,t,r,a])>1||s(e,t)})},t&&(a[e]=t(a[e])))}function s(e,t){try{var r;(r=n[e](t)).value instanceof c?Promise.resolve(r.value.v).then(l,u):d(i[0][2],r)}catch(e){d(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function d(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function p(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=s(e),t={},a("next"),a("throw"),a("return"),t[Symbol.asyncIterator]=function(){return this},t);function a(r){t[r]=e[r]&&function(t){return new Promise(function(a,n){!function(e,t,r,a){Promise.resolve(a).then(function(t){e({value:t,done:r})},t)}(a,n,(t=e[r](t)).done,t.value)})}}}"function"==typeof SuppressedError&&SuppressedError}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.