1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[210],{3589:function(e,t,i){let r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E,C,T,P,D,I,O,R,L,B,z,F,N,U,k,V,j,G,H,W,q,X,Y,Q,Z,K,J,$,ee,et,ei,er,es,ea,en,eo,el,eh,ec,ed,eu,ep,ef,em,eg,ev,ey,ex,eb,ew,eS,e_,eA,eM,eE,eC,eT,eP,eD,eI,eO,eR,eL,eB,ez,eF,eN,eU,ek,eV,ej,eG,eH,eW,eq,eX,eY,eQ,eZ,eK,eJ,e$,e0,e1,e2,e3,e4,e5,e6,e8,e9,e7,te,tt,ti,tr,ts,ta,tn,to;i.d(t,{M:function(){return Bj}});var tl,th,tc=i(357),td=i(9109).lW,tu=Object.create,tp=Object.defineProperty,tf=Object.getOwnPropertyDescriptor,tm=Object.getOwnPropertyNames,tg=Object.getPrototypeOf,tv=Object.prototype.hasOwnProperty,ty=(e,t,i)=>t in e?tp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,tx=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tb=(e,t,i,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of tm(t))tv.call(e,s)||s===i||tp(e,s,{get:()=>t[s],enumerable:!(r=tf(t,s))||r.enumerable});return e},tw=(e,t,i)=>(i=null!=e?tu(tg(e)):{},tb(!t&&e&&e.__esModule?i:tp(i,"default",{value:e,enumerable:!0}),e)),tS=(e,t,i)=>(ty(e,"symbol"!=typeof t?t+"":t,i),i),t_=tx((e,t)=>{var i;i=function(){return e.importState=function(t){var i=new e;return i.importState(t),i},e;function e(){return function(e){var t,i,r=0,s=0,a=0,o=1;0==e.length&&(e=[+new Date]);var l=(t=4022871197,(i=function(e){e=e.toString();for(var i=0;i<e.length;i++){var r=.02519603282416938*(t+=e.charCodeAt(i));t=r>>>0,r-=t,r*=t,t=r>>>0,r-=t,t+=4294967296*r}return(t>>>0)*23283064365386963e-26}).version="Mash 0.9",i);r=l(" "),s=l(" "),a=l(" ");for(var h=0;h<e.length;h++)(r-=l(e[h]))<0&&(r+=1),(s-=l(e[h]))<0&&(s+=1),(a-=l(e[h]))<0&&(a+=1);l=null;var c=function(){var e=2091639*r+23283064365386963e-26*o;return r=s,s=a,a=e-(o=0|e)};return c.next=c,c.uint32=function(){return 4294967296*c()},c.fract53=function(){return c()+(2097152*c()|0)*11102230246251565e-32},c.version="Alea 0.9",c.args=e,c.exportState=function(){return[r,s,a,o]},c.importState=function(e){r=+e[0]||0,s=+e[1]||0,a=+e[2]||0,o=+e[3]||0},c}(Array.prototype.slice.call(arguments))}},"object"==typeof e?t.exports=i():"function"==typeof define&&define.amd?define(i):e.Alea=i()}),tA=tx((e,t)=>{var i,r;i=e,r=function(e){e.SVD=function(e,t,i,r,s){if(t=void 0===t||t,i=void 0===i||i,s=1e-64/(r=r||2220446049250313e-31),!e)throw TypeError("Matrix a is not defined");var a,o,l,h,c,d,u,p,f,m,g,v,y=e[0].length,x=e.length;if(x<y)throw TypeError("Invalid matrix: m < n");for(var b=[],w=[],S=[],_="f"===t?x:y,A=m=u=0;A<x;A++)w[A]=Array(_).fill(0);for(A=0;A<y;A++)S[A]=Array(y).fill(0);var M,E=Array(y).fill(0);for(A=0;A<x;A++)for(a=0;a<y;a++)w[A][a]=e[A][a];for(A=0;A<y;A++){for(b[A]=u,f=0,l=A+1,a=A;a<x;a++)f+=Math.pow(w[a][A],2);if(f<s)u=0;else for(p=(d=w[A][A])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A]=d-u,a=l;a<y;a++){for(f=0,o=A;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(E[A]=u,f=0,a=l;a<y;a++)f+=Math.pow(w[A][a],2);if(f<s)u=0;else{for(p=(d=w[A][A+1])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A+1]=d-u,a=l;a<y;a++)b[a]=w[A][a]/p;for(a=l;a<x;a++){for(f=0,o=l;o<y;o++)f+=w[a][o]*w[A][o];for(o=l;o<y;o++)w[a][o]=w[a][o]+f*b[o]}}m<(g=Math.abs(E[A])+Math.abs(b[A]))&&(m=g)}if(i)for(A=y-1;0<=A;A--){if(0!==u){for(p=w[A][A+1]*u,a=l;a<y;a++)S[a][A]=w[A][a]/p;for(a=l;a<y;a++){for(f=0,o=l;o<y;o++)f+=w[A][o]*S[o][a];for(o=l;o<y;o++)S[o][a]=S[o][a]+f*S[o][A]}}for(a=l;a<y;a++)S[A][a]=0,S[a][A]=0;S[A][A]=1,u=b[A],l=A}if(t){if("f"===t)for(A=y;A<x;A++){for(a=y;a<x;a++)w[A][a]=0;w[A][A]=1}for(A=y-1;0<=A;A--){for(l=A+1,u=E[A],a=l;a<_;a++)w[A][a]=0;if(0!==u){for(p=w[A][A]*u,a=l;a<_;a++){for(f=0,o=l;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(a=A;a<x;a++)w[a][A]=w[a][A]/u}else for(a=A;a<x;a++)w[a][A]=0;w[A][A]=w[A][A]+1}}for(r*=m,o=y-1;0<=o;o--)for(var C=0;C<50;C++){for(M=!1,l=o;0<=l;l--){if(Math.abs(b[l])<=r){M=!0;break}if(Math.abs(E[l-1])<=r)break}if(!M){for(c=0,h=l-(f=1),A=l;A<o+1&&(d=f*b[A],b[A]=c*b[A],!(Math.abs(d)<=r));A++)if(u=E[A],E[A]=Math.sqrt(d*d+u*u),c=u/(p=E[A]),f=-d/p,t)for(a=0;a<x;a++)g=w[a][h],v=w[a][A],w[a][h]=g*c+v*f,w[a][A]=-g*f+v*c}if(v=E[o],l===o){if(v<0&&(E[o]=-v,i))for(a=0;a<y;a++)S[a][o]=-S[a][o];break}for(m=E[l],u=Math.sqrt((d=(((g=E[o-1])-v)*(g+v)+((u=b[o-1])-(p=b[o]))*(u+p))/(2*p*g))*d+1),d=((m-v)*(m+v)+p*(g/(d<0?d-u:d+u)-p))/m,A=l+(f=c=1);A<o+1;A++){if(u=b[A],g=E[A],p=f*u,u*=c,v=Math.sqrt(d*d+p*p),d=m*(c=d/(b[A-1]=v))+u*(f=p/v),u=-m*f+u*c,p=g*f,g*=c,i)for(a=0;a<y;a++)m=S[a][A-1],v=S[a][A],S[a][A-1]=m*c+v*f,S[a][A]=-m*f+v*c;if(v=Math.sqrt(d*d+p*p),d=(c=d/(E[A-1]=v))*u+(f=p/v)*g,m=-f*u+c*g,t)for(a=0;a<x;a++)g=w[a][A-1],v=w[a][A],w[a][A-1]=g*c+v*f,w[a][A]=-g*f+v*c}b[l]=0,b[o]=d,E[o]=m}for(A=0;A<y;A++)E[A]<r&&(E[A]=0);return{u:w,q:E,v:S}}
1,e.VERSION="1.1.1",Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof e&&"u">typeof t?r(e):"function"==typeof define&&define.amd?define(["exports"],r):r((i="u">typeof globalThis?globalThis:i||self).SVDJS={})}),tM=tx((e,t)=>{var i,r;i=e,r=function(){var e=function(e,i){if(void 0===e&&(e=[]),void 0===i&&(i=t),this.data=e,this.length=this.data.length,this.compare=i,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function t(e,t){return e<t?-1:e>t?1:0}return e.prototype.push=function(e){this.data.push(e),this.length++,this._up(this.length-1)},e.prototype.pop=function(){if(0!==this.length){var e=this.data[0],t=this.data.pop();return this.length--,this.length>0&&(this.data[0]=t,this._down(0)),e}},e.prototype.peek=function(){return this.data[0]},e.prototype._up=function(e){for(var t=this.data,i=this.compare,r=t[e];e>0;){var s=e-1>>1,a=t[s];if(i(r,a)>=0)break;t[e]=a,e=s}t[e]=r},e.prototype._down=function(e){for(var t=this.data,i=this.compare,r=this.length>>1,s=t[e];e<r;){var a=(e<<1)+1,o=t[a],l=a+1;if(l<this.length&&0>i(t[l],o)&&(a=l,o=t[l]),i(o,s)>=0)break;t[e]=o,e=a}t[e]=s},e},"object"==typeof e&&"u">typeof t?t.exports=r():"function"==typeof define&&define.amd?define(r):(i=i||self).TinyQueue=r()}),tE=tx((e,t)=>{var i=tM();function r(e,t,r){t=t||1;for(var o,l,h,c,d=0;d<e[0].length;d++){var u=e[0][d];(!d||u[0]<o)&&(o=u[0]),(!d||u[1]<l)&&(l=u[1]),(!d||u[0]>h)&&(h=u[0]),(!d||u[1]>c)&&(c=u[1])}var p=h-o,f=c-l,m=Math.min(p,f),g=m/2;if(0===m){var v=[o,l];return v.distance=0,v}for(var y=new i(void 0,s),x=o;x<h;x+=m)for(var b=l;b<c;b+=m)y.push(new a(x+g,b+g,g,e));var w=function(e){for(var t=0,i=0,r=0,s=e[0],o=0,l=s.length,h=l-1;o<l;h=o++){var c=s[o],d=s[h],u=c[0]*d[1]-d[0]*c[1];i+=(c[0]+d[0])*u,r+=(c[1]+d[1])*u,t+=3*u}return 0===t?new a(s[0][0],s[0][1],0,e):new a(i/t,r/t,0,e)}(e),S=new a(o+p/2,l+f/2,0,e);S.d>w.d&&(w=S);for(var _=y.length;y.length;){var A=y.pop();A.d>w.d&&(w=A,r&&console.log("found best %d after %d probes",Math.round(1e4*A.d)/1e4,_)),A.max-w.d<=t||(g=A.h/2,y.push(new a(A.x-g,A.y-g,g,e)),y.push(new a(A.x+g,A.y-g,g,e)),y.push(new a(A.x-g,A.y+g,g,e)),y.push(new a(A.x+g,A.y+g,g,e)),_+=4)}r&&(console.log("num probes: "+_),console.log("best distance: "+w.d));var M=[w.x,w.y];return M.distance=w.d,M}function s(e,t){return t.max-e.max}function a(e,t,i,r){this.x=e,this.y=t,this.h=i,this.d=function(e,t,i){for(var r=!1,s=1/0,a=0;a<i.length;a++)for(var o=i[a],l=0,h=o.length,c=h-1;l<h;c=l++){var d=o[l],u=o[c];d[1]>t!=u[1]>t&&e<(u[0]-d[0])*(t-d[1])/(u[1]-d[1])+d[0]&&(r=!r),s=Math.min(s,function(e,t,i,r){var s=i[0],a=i[1],o=r[0]-s,l=r[1]-a;if(0!==o||0!==l){var h=((e-s)*o+(t-a)*l)/(o*o+l*l);h>1?(s=r[0],a=r[1]):h>0&&(s+=o*h,a+=l*h)}return(o=e-s)*o+(l=t-a)*l}(e,t,d,u))}return 0===s?0:(r?1:-1)*Math.sqrt(s)}(e,t,r),this.max=this.d+this.h*Math.SQRT2}i.default&&(i=i.default),t.exports=r,t.exports.default=r}),tC=tx((e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)},t.exports=e.default}),tT=tx((e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()},t.exports=e.default}),tP=tx((e,t)=>{function i(e,t,r,s){this.message=e,this.expected=t,this.found=r,this.location=s,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}!function(e,t){function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i}(i,Error),i.buildMessage=function(e,t){var i={literal:function(e){return'"'+s(e.text)+'"'},class:function(e){var t,i="";for(t=0;t<e.parts.length;t++)i+=e.parts[t]instanceof Array?a(e.parts[t][0])+"-"+a(e.parts[t][1]):a(e.parts[t]);return"["+(e.inverted?"^":"")+i+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function r(e){return e.charCodeAt(0).toString(16).toUpperCase()}function s(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}function a(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}return"Expected "+function(e){var t,r,s,a=Array(e.length);for(r=0;r<e.length;r++)a[r]=i[(t=e[r]).type](t);if(a.sort(),a.length>0){for(r=1,s=1;r<a.length;r++)a[r-1]!==a[r]&&(a[s]=a[r],s++);a.length=s}switch(a.length){case 1:return a[0];
1case 2:return a[0]+" or "+a[1];default:return a.slice(0,-1).join(", ")+", or "+a[a.length-1]}}(e)+" but "+(t?'"'+s(t)+'"':"end of input")+" found."},t.exports={SyntaxError:i,parse:function(e,t){t=void 0!==t?t:{};var r,s,a,o,l,h,c,d,u={},p={svg_path:eo},f=eo,m=function(e){if(!e)return[];for(var t=[],i=0;i<e.length;i++)t=t.concat.apply(t,e[i]);var r=t[0];return r&&"m"==r.code&&(delete r.relative,r.code="M"),t},g=function(e,t){return function(e,t){if(!t)return[e];for(var i=[e],r=0,s=t.length;r<s;r++)i[r+1]=t[r][1];return i}(e,t)},v=/^[Mm]/,y=es(["M","m"],!1,!1),x=function(e,t,i){var r=eP(e,[t]);return i&&(r=r.concat(eP("M"==e?"L":"l",i[1]))),r},b=/^[Zz]/,w=es(["Z","z"],!1,!1),S=/^[Ll]/,_=es(["L","l"],!1,!1),A=function(e,t){return eP(e,t)},M=/^[Hh]/,E=es(["H","h"],!1,!1),C=/^[Vv]/,T=es(["V","v"],!1,!1),P=/^[Cc]/,D=es(["C","c"],!1,!1),I=/^[Ss]/,O=es(["S","s"],!1,!1),R=/^[Qq]/,L=es(["Q","q"],!1,!1),B=/^[Tt]/,z=es(["T","t"],!1,!1),F=/^[Aa]/,N=es(["A","a"],!1,!1),U=/^[01]/,k=es(["0","1"],!1,!1),V=function(){return""},j=er(",",!1),G=function(e){return e.join("")},H=er(".",!1),W=/^[eE]/,q=es(["e","E"],!1,!1),X=/^[+\-]/,Y=es(["+","-"],!1,!1),Q=/^[0-9]/,Z=es([["0","9"]],!1,!1),K=/^[ \t\n\r]/,J=es([" "," ",` 2`,"\r"],!1,!1),$=0,ee=[{line:1,column:1}],et=0,ei=[];if("startRule"in t){if(!(t.startRule in p))throw Error("Can't start parsing from rule \""+t.startRule+'".');f=p[t.startRule]}function er(e,t){return{type:"literal",text:e,ignoreCase:t}}function es(e,t,i){return{type:"class",parts:e,inverted:t,ignoreCase:i}}function ea(t){var i,r=ee[t];if(r)return r;for(i=t-1;!ee[i];)i--;for(r={line:(r=ee[i]).line,column:r.column};i<t;)10===e.charCodeAt(i)?(r.line++,r.column=1):r.column++,i++;return ee[t]=r,r}function en(e){$<et||($>et&&(et=$,ei=[]),ei.push(e))}function eo(){var e,t,i,r,s;for(e=$,t=[],i=eE();i!==u;)t.push(i),i=eE();if(t!==u){if((i=function(){var e,t,i,r,s,a;if(e=$,(t=el())!==u){for(i=[],r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();for(s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u);r!==u;){for(i.push(r),r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u)}i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=m(i):($=e,e=u)}else $=e,e=u}else $=e,e=u;return e}function el(){var t,i,r,s,a,o;if(t=$,(i=function(){var t,i,r,s,a,o,l;if(t=$,v.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(y)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=eg())!==u?(a=$,(o=eb())===u&&(o=null),o!==u&&(l=ec())!==u?a=o=[o,l]:($=a,a=u),a===u&&(a=null),a!==u?t=i=x(i,s,a):($=t,t=u)):($=t,t=u)}else $=t,t=u;return t}())!==u){for(r=[],s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();for(a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u);s!==u;){for(r.push(s),s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u)}r!==u?t=i=g(i,r):($=t,t=u)}else $=t,t=u;return t}function eh(){var t,i;return b.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(w)),i!==u&&(i=eP("Z")),(t=i)===u&&(t=function(){var t,i,r,s;if(t=$,S.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(_)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ec())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,M.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(E)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{x:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,C.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(T)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{y:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,P.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(D)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=eu())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,I.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(O)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ep())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,R.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(L)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ef())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,B.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(z)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,F.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(N)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=em())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}()),t}function ec(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function ed(){var e,t,i,r,s,a;if(e=$,(t=ey())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function eu(){var e,t,i,r,s,a,o,l,h;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?((s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?(o=t,l=r,h=a,e=t={x1:o.x,y1:o.y,x2:l.x,y2:l.y,x:h.x,y:h.y}):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function ep(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x2:s.x,y2:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function ef(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x1:s.x,y1:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function em(){var e,t,i,r,s,a,o,l,h,c,d,p;return e=$,(t=ev())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ev())!==u?((s=eb())===u&&(s=null),s!==u&&(a=ey())!==u&&eb()!==u&&(o=ex())!==u?((l=eb())===u&&(l=null),l!==u&&(h=ex())!==u?((c=eb())===u&&(c=null),c!==u&&(d=eg())!==u?e=t={rx:t,ry:r,xAxisRotation:a,largeArc:o,sweep:h,x:(p=d).x,y:p.y}:($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function eg(){var e,t,i,r;return e=$,(t=ey())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ey())!==u?e=t={x:t,y:r}:($=e,e=u)):($=e,e=u),e}function ev(){var e;return(e=eS())===u&&(e=eM()),e!==u&&(e*=1),e}function ey(){var e,t,i;return e=$,(t=eA())===u&&(t=null),t!==u&&(i=eS())!==u?e=t=[t,i]:($=e,e=u),e===u&&(e=$,(t=eA())===u&&(t=null),t!==u&&(i=eM())!==u?e=t=[t,i]:($=e,e=u)),e!==u&&(e=1*e.join("")),e}function ex(){var t;return U.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(k)),t!==u&&(t="1"==t),t}function eb(){var e,t,i,r,s;if(e=$,t=[],(i=eE())!==u)for(;i!==u;)t.push(i),i=eE();else t=u;if(t!==u){if((i=ew())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=[t,i,r]:($=e,e=u)}else $=e,e=u}else $=e,e=u;if(e===u){if(e=$,t=$,(i=ew())!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?t=i=[i,r]:($=t,t=u)}else $=t,t=u;t!==u&&(t=V()),e=t}return e}function ew(){var t;return 44===e.charCodeAt($)?(t=",",$++):(t=u,en(j)),t}function eS(){var t,i,r,s,a,o,l;return t=$,(s=$,(a=eM())===u&&(a=null),a!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u&&(l=eM())!==u?s=a=[a,o,l]:($=s,s=u)):($=s,s=u),s===u&&(s=$,(a=eM())!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u?s=a=[a,o]:($=s,s=u)):($=s,s=u)),s!==u&&(s=G(s)),(i=s)!==u)?((r=e_())===u&&(r=null),r!==u?t=i=[i,r]:($=t,t=u)):($=t,t=u),t===u&&(t=$,(i=eM())!==u&&(r=e_())!==u?t=i=[i,r]:($=t,t=u)),t!==u&&(t=G(t)),t}function e_(){var t,i,r,s;return t=$,W.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(q)),i!==u?((r=eA())===u&&(r=null),r!==u&&(s=eM())!==u?t=i=[i,r,s]:($=t,t=u)):($=t,t=u),t!==u&&(t=G(t)),t}function eA(){var t;return X.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(Y)),t}function eM(){var t,i;if(t=[],Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(Z)),i!==u)for(;i!==u;)t.push(i),Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(Z));else t=u;return t!==u&&(t=t.join("")),t}function eE(){var t;return K.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(J)),t!==u&&(t=V()),t}var eC={m:"moveto",l:"lineto",h:"horizontal lineto",v:"vertical lineto",c:"curveto",s:"smooth curveto",q:"quadratic curveto",t:"smooth quadratic curveto",a:"elliptical arc",z:"closepath"};for(var eT in eC)eC[eT.toUpperCase()]=eC[eT];function eP(e,t){t||(t=[{}]);for(var i=t.length;i--;){var r={code:e,command:eC[e]};for(var s in e==e.toLowerCase()&&(r.relative=!0),t[i])r[s]=t[i][s];t[i]=r}return t}if((d=f())!==u&&$===e.length)return d;throw d!==u&&$<e.length&&en({type:"end"}),l=ei,h=et<e.length?e.charAt(et):null,r=et,s=et<e.length?et+1:et,a=ea(r),o=ea(s),c={start:{offset:r,line:a.line,column:a.column},end:{offset:s,line:o.line,column:o.column}},new i(i.buildMessage(l,h),l,h,c)}}}),tD=tx((e,t)=>{var i=tP().parse;i.parseSVG=i,i.makeAbsolute=function(e){var t,i={x:0,y:0},r={x:"x0",y:"y0",x1:"x0",y1:"y0",x2:"x0",y2:"y0"};return e.forEach(function(e){for(var s in"moveto"===e.command&&(t=e),e.x0=i.x,e.y0=i.y,r)s in e&&(e[s]+=e.relative?e[r[s]]:0);"x"in e||(e.x=i.x),"y"in e||(e.y=i.y),e.relative=!1,e.code=e.code.toUpperCase(),"closepath"==e.command&&(e.x=t.x,e.y=t.y),i=e}),e},t.exports=i}),tI=tx((e,t)=>{t.exports=function(e,t){for(var i=e.split("."),r=t.split("."),s=0;s<3;s++){var a=Number(i[s]),o=Number(r[s]);if(a>o)return 1;if(o>a)return -1;if(!isNaN(a)&&isNaN(o))return 1;if(isNaN(a)&&!isNaN(o))return -1}return 0}}),tO={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},tR="srgb",tL="srgb-linear",tB="300 es",tz=class{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let i=this._listeners;void 0===i[e]&&(i[e]=[]),-1===i[e].indexOf(t)&&i[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let i=this._listeners;return void 0!==i[e]&&-1!==i[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let i=this._listeners[e];if(void 0!==i){let e=i.indexOf(t);-1!==e&&i.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let i=t.slice(0);for(let t=0,r=i.length;t<r;t++)i[t].call(this,e);e.target=null}}},tF=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","5
25","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],tN=1234567,tU=Math.PI/180,tk=180/Math.PI;function tV(){let e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,i=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return(tF[255&e]+tF[e>>8&255]+tF[e>>16&255]+tF[e>>24&255]+"-"+tF[255&t]+tF[t>>8&255]+"-"+tF[t>>16&15|64]+tF[t>>24&255]+"-"+tF[63&i|128]+tF[i>>8&255]+"-"+tF[i>>16&255]+tF[i>>24&255]+tF[255&r]+tF[r>>8&255]+tF[r>>16&255]+tF[r>>24&255]).toLowerCase()}function tj(e,t,i){return Math.max(t,Math.min(i,e))}function tG(e,t){return(e%t+t)%t}function tH(e,t,i){return(1-i)*e+i*t}function tW(e){return(e&e-1)==0&&0!==e}function tq(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function tX(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function tY(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function tQ(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}var tZ=Object.freeze({__proto__:null,DEG2RAD:tU,RAD2DEG:tk,ceilPowerOfTwo:tq,clamp:tj,damp:function(e,t,i,r){return tH(e,t,1-Math.exp(-i*r))},degToRad:function(e){return e*tU},denormalize:tY,euclideanModulo:tG,floorPowerOfTwo:tX,generateUUID:tV,inverseLerp:function(e,t,i){return e!==t?(i-e)/(t-e):0},isPowerOfTwo:tW,lerp:tH,mapLinear:function(e,t,i,r,s){return r+(e-t)*(s-r)/(i-t)},normalize:tQ,pingpong:function(e,t=1){return t-Math.abs(tG(e,2*t)-t)},radToDeg:function(e){return e*tk},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},seededRandom:function(e){void 0!==e&&(tN=e);let t=tN+=1831565813;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/4294967296},setQuaternionFromProperEuler:function(e,t,i,r,s){let a=Math.cos,o=Math.sin,l=a(i/2),h=o(i/2),c=a((t+r)/2),d=o((t+r)/2),u=a((t-r)/2),p=o((t-r)/2),f=a((r-t)/2),m=o((r-t)/2);switch(s){case"XYX":e.set(l*d,h*u,h*p,l*c);break;case"YZY":e.set(h*p,l*d,h*u,l*c);break;case"ZXZ":e.set(h*u,h*p,l*d,l*c);break;case"XZX":e.set(l*d,h*m,h*f,l*c);break;case"YXY":e.set(h*f,l*d,h*m,l*c);break;case"ZYZ":e.set(h*m,h*f,l*d,l*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}},smootherstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*e*(e*(6*e-15)+10)},smoothstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*(3-2*e)}}),tK=class{constructor(e=0,t=0){tK.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}
vendor: 4,588 bytes, line 2
2sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,i=this.y,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6],this.y=r[1]*t+r[4]*i+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let i=Math.cos(t),r=Math.sin(t),s=this.x-e.x,a=this.y-e.y;return this.x=s*i-a*r+e.x,this.y=s*r+a*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},tJ=class{constructor(){tJ.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,i,r,s,a,o,l,h){let c=this.elements;return c[0]=e,c[1]=r,c[2]=o,c[3]=t,c[4]=s,c[5]=l,c[6]=i,c[7]=a,c[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[3],l=i[6],h=i[1],c=i[4],d=i[7],u=i[2],p=i[5],f=i[8],m=r[0],g=r[3],v=r[6],y=r[1],x=r[4],b=r[7],w=r[2],S=r[5],_=r[8];return s[0]=a*m+o*y+l*w,s[3]=a*g+o*x+l*S,s[6]=a*v+o*b+l*_,s[1]=h*m+c*y+d*w,s[4]=h*g+c*x+d*S,s[7]=h*v+c*b+d*_,s[2]=u*m+p*y+f*w,s[5]=u*g+p*x+f*S,s[8]=u*v+p*b+f*_,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8];return t*a*c-t*o*h-i*s*c+i*o*l+r*s*h-r*a*l}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=c*a-o*h,u=o*l-c*s,p=h*s-a*l,f=t*d+i*u+r*p;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);let m=1/f;return e[0]=d*m,e[1]=(r*h-c*i)*m,e[2]=(o*i-r*a)*m,e[3]=u*m,e[4]=(c*t-r*l)*m,e[5]=(r*s-o*t)*m,e[6]=p*m,e[7]=(i*l-h*t)*m,e[8]=(a*t-i*s)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,s,a,o){let l=Math.cos(s),h=Math.sin(s);
2return this.set(i*l,i*h,-i*(l*a+h*o)+a+e,-r*h,r*l,-r*(-h*a+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(t$.makeScale(e,t)),this}rotate(e){return this.premultiply(t$.makeRotation(-e)),this}translate(e,t){return this.premultiply(t$.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<9;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}},t$=new tJ;function t0(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var t1={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function t2(e,t){return new t1[e](t)}function t3(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function t4(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function t5(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}var t6={[tR]:{[tL]:t4},[tL]:{[tR]:t5}},t8={legacyMode:!0,get workingColorSpace(){return tL},set workingColorSpace(n){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(e,t,i){if(this.legacyMode||t===i||!t||!i)return e;if(t6[t]&&void 0!==t6[t][i]){let r=t6[t][i];return e.r=r(e.r),e.g=r(e.g),e.b=r(e.b),e}throw Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)}},t9={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},t7={r:0,g:0,b:0},ie={h:0,s:0,l:0},it={h:0,s:0,l:0};function ii(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*6*(2/3-i):e}function ir(e,t){return t.r=e.r,t.g=e.g,t.b=e.b,t}var is=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===t&&void 0===i?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=tR){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,t8.toWorkingColorSpace(this,t),this}setRGB(e,t,i,r=t8.workingColorSpace){return this.r=e,this.g=t,this.b=i,t8.toWorkingColorSpace(this,r),this}setHSL(e,t,i,r=t8.workingColorSpace){if(e=tG(e,1),t=tj(t,0,1),i=tj(i,0,1),0===t)this.r=this.g=this.b=i;else{let r=i<=.5?i*(1+t):i+t-i*t,s=2*i-r;this.r=ii(s,r,e+1/3),this.g=ii(s,r,e),this.b=ii(s,r,e-1/3)}return t8.toWorkingColorSpace(this,r),this}setStyle(e,t=tR){let i;function r(t){void 0!==t&&1>parseFloat(t)&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e)){let e,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(e=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,t8.toWorkingColorSpace(this,t),r(e[4]),this;if(e=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,t8.toWorkingColorSpace(this,t),r(e[4]),this;break;case"hsl":case"hsla":if(e=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a)){let i=parseFloat(e[1])/360,s=parseFloat(e[2])/100,a=parseFloat(e[3])/100;return r(e[4]),this.setHSL(i,s,a,t)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){let e=i[1],r=e.length;if(3===r)return this.r=parseInt(e.charAt(0)+e.charAt(0),16)/255,this.g=parseInt(e.charAt(1)+e.charAt(1),16)/255,this.b=parseInt(e.charAt(2)+e.charAt(2),16)/255,t8.toWorkingColorSpace(this,t),this;if(6===r)return this.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,this.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,this.b=parseInt(e.charAt(4)+e.charAt(5),16)/255,t8.toWorkingColorSpace(this,t),this}return e&&e.length>0?this.setColorName(e,t):this}setColorName(e,t=tR){let i=t9[e.toLowerCase()];return void 0!==i?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=t4(e.r),this.g=t4(e.g),this.b=t4(e.b),this}copyLinearToSRGB(e){return this.r=t5(e.r),this.g=t5(e.g),this.b=t5(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=tR){return t8.fromWorkingColorSpace(ir(this,t7),e),tj(255*t7.r,0,255)<<16^tj(255*t7.g,0,255)<<8^tj(255*t7.b,0,255)<<0}getHexString(e=tR){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=t8.workingColorSpace){t8.fromWorkingColorSpace(ir(this,t7),t);let i=t7.r,r=t7.g,s=t7.b,a=Math.max(i,r,s),o=Math.min(i,r,s),l,h,c=(o+a)/2;if(o===a)l=0,h=0;else{let e=a-o;switch(h=c<=.5?e/(a+o):e/(2-a-o),a){case i:l=(r-s)/e+(r<s?6:0);break;case r:l=(s-i)/e+2;break;case s:l=(i-r)/e+4}l/=6}return e.h=l,e.s=h,e.l=c,e}getRGB(e,t=t8.workingColorSpace){return t8.fromWorkingColorSpace(ir(this,t7),t),e.r=t7.r,e.g=t7.g,e.b=t7.b,e}getStyle(e=tR){return t8.fromWorkingColorSpace(ir(this,t7),e),e!==tR?`color(${e} ${t7.r} ${t7.g} ${t7.b})`:`rgb(${255*t7.r|0},${255*t7.g|0},${255*t7.b|0})`}offsetHSL(e,t,i){return this.getHSL(ie),ie.h+=e,ie.s+=t,ie.l+=i,this.setHSL(ie.h,ie.s,ie.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,i){return this.r=e.r+(t.r-e.r)*i,this.g=e.g+(t.g-e.g)*i,this.b=e.b+(t.b-e.b)*i,this}lerpHSL(e,t){this.getHSL(ie),e.getHSL(it);let i=tH(ie.h,it.h,t),r=tH(ie.s,it.s,t),s=tH(ie.l,it.l,t);return this.setHSL(i,r,s),this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};is.NAMES=t9;var ia,io=class{static getDataURL(e){let t;if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;if(e instanceof HTMLCanvasElement)t=e;else{void 0===ia&&(ia=t3("canvas")),ia.width=e.width,ia.height=e.height;let i=ia.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=ia}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=t3("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),s=r.data;for(let e=0;e<s.length;e++)s[e]=255*t4(s[e]/255);return i.putImageData(r,0,0),t}if(!e.data)return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),e;{let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(255*t4(t[e]/255
2)):t[e]=t4(t[e]);return{data:t,width:e.width,height:e.height}}}},il=class{constructor(e=null){this.isSource=!0,this.uuid=tV(),this.data=e,this.version=0}set needsUpdate(e){!0===e&&this.version++}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.images[this.uuid])return e.images[this.uuid];let i={uuid:this.uuid,url:""},r=this.data;if(null!==r){let e;if(Array.isArray(r)){e=[];for(let t=0,i=r.length;t<i;t++)r[t].isDataTexture?e.push(ih(r[t].image)):e.push(ih(r[t]))}else e=ih(r);i.url=e}return t||(e.images[this.uuid]=i),i}};function ih(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?io.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}var ic=0,id=class extends tz{constructor(e=id.DEFAULT_IMAGE,t=id.DEFAULT_MAPPING,i=1001,r=1001,s=1006,a=1008,o=1023,l=1009,h=id.DEFAULT_ANISOTROPY,c=3e3){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:ic++}),this.uuid=tV(),this.name="",this.source=new il(e),this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=r,this.magFilter=s,this.minFilter=a,this.anisotropy=h,this.format=o,this.internalFormat=null,this.type=l,this.offset=new tK(0,0),this.repeat=new tK(1,1),this.center=new tK(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new tJ,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}};id.DEFAULT_IMAGE=null,id.DEFAULT_MAPPING=300,id.DEFAULT_ANISOTROPY=1;var iu=class{constructor(e=0,t=0,i=0,r=1){iu.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*i+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*i+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*i+a[11]*r+a[15]*s,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,s,a=e.elements,o=a[0],l=a[4],h=a[8],c=a[1],d=a[5],u=a[9],p=a[2],f=a[6],m=a[10];if(.01>Math.abs(l-c)&&.01>Math.abs(h-p)&&.01>Math.abs(u-f)){if(.1>Math.abs(l+c)&&.1>Math.abs(h+p)&&.1>Math.abs(u+f)&&.1>Math.abs(o+d+m-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(o+1)/2,a=(d+1)/2,g=(m+1)/2,v=(l+c)/4,y=(h+p)/4,x=(u+f)/4;return e>a&&e>g?e<.01?(i=0,r=.707106781,s=.707106781):(r=v/(i=Math.sqrt(e)),s=y/i):a>g?a<.01?(i=.707106781,r=0,s=.707106781):(i=v/(r=Math.sqrt(a)),s=x/r):g<.01?(i=.707106781,r=.707106781,s=0):(i=y/(s=Math.sqrt(g)),r=x/s),this.set(i,r,s,t),this}let g=Math.sqrt((f-u)*(f-u)+(h-p)*(h-p)+(c-l)*(c-l));return .001>Math.abs(g)&&(g=1),this.x=(f-u)/g,this.y=(h-p)/g,this.z=(c-l)/g,this.w=Math.acos((o+d+m-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},ip=class extends tz{constructor(e=1,t=1,i={}
2){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new iu(0,0,e,t),this.scissorTest=!1,this.viewport=new iu(0,0,e,t),this.texture=new id({width:e,height:t,depth:1},i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==i.generateMipmaps&&i.generateMipmaps,this.texture.internalFormat=void 0!==i.internalFormat?i.internalFormat:null,this.texture.minFilter=void 0!==i.minFilter?i.minFilter:1006,this.depthBuffer=void 0===i.depthBuffer||i.depthBuffer,this.stencilBuffer=void 0!==i.stencilBuffer&&i.stencilBuffer,this.depthTexture=void 0!==i.depthTexture?i.depthTexture:null,this.samples=void 0!==i.samples?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)&&(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);return this.texture.source=new il(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}},im=class extends id{constructor(e=null,t=1,i=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},ig=class extends id{constructor(e=null,t=1,i=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},iv=class extends ip{constructor(e=1,t=1,i=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let s=this.texture;this.texture=[];for(let e=0;e<i;e++)this.texture[e]=s.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,i=1){if(this.width!==e||this.height!==t||this.depth!==i){this.width=e,this.height=t,this.depth=i;for(let r=0,s=this.texture.length;r<s;r++)this.texture[r].image.width=e,this.texture[r].image.height=t,this.texture[r].image.depth=i;this.dispose()}return this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t),this}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,i=e.texture.length;t<i;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}},iy=class{constructor(e=0,t=0,i=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=r}static slerpFlat(e,t,i,r,s,a,o){let l=i[r+0],h=i[r+1],c=i[r+2],d=i[r+3],u=s[a+0],p=s[a+1],f=s[a+2],m=s[a+3];if(0===o){e[t+0]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d;return}if(1===o){e[t+0]=u,e[t+1]=p,e[t+2]=f,e[t+3]=m;return}if(d!==m||l!==u||h!==p||c!==f){let e=1-o,t=l*u+h*p+c*f+d*m,i=t>=0?1:-1,r=1-t*t;if(r>Number.EPSILON){let s=Math.sqrt(r),a=Math.atan2(s,t*i);e=Math.sin(e*a)/s,o=Math.sin(o*a)/s}let s=o*i;if(l=l*e+u*s,h=h*e+p*s,c=c*e+f*s,d=d*e+m*s,e===1-o){let e=1/Math.sqrt(l*l+h*h+c*c+d*d);l*=e,h*=e,c*=e,d*=e}}e[t]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,r,s,a){let o=i[r],l=i[r+1],h=i[r+2],c=i[r+3],d=s[a],u=s[a+1],p=s[a+2],f=s[a+3];return e[t]=o*f+c*d+l*p-h*u,e[t+1]=l*f+c*u+h*d-o*p,e[t+2]=h*f+c*p+o*u-l*d,e[t+3]=c*f-o*d-l*u-h*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){let i=e._x,r=e._y,s=e._z,a=e._order,o=Math.cos,l=Math.sin,h=o(i/2),c=o(r/2),d=o(s/2),u=l(i/2),p=l(r/2),f=l(s/2);switch(a){case"XYZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"YXZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"ZXY":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"ZYX":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"YZX":this._x=u*c*d+h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d-u*p*f;break;case"XZY":this._x=u*c*d-h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d+u*p*f;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let i=t/2,r=Math.sin(i);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,i=t[0],r=t[4],s=t[8],a=t[1],o=t[5],l=t[9],h=t[2],c=t[6],d=t[10],u=i+o+d;if(u>0){let e=.5/Math.sqrt(u+1);this._w=.25/e,this._x=(c-l)*e,this._y=(s-h)*e,this._z=(a-r)*e}else if(i>o&&i>d){let e=2*Math.sqrt(1+i-o-d);
2this._w=(c-l)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(s+h)/e}else if(o>d){let e=2*Math.sqrt(1+o-i-d);this._w=(s-h)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(l+c)/e}else{let e=2*Math.sqrt(1+d-i-o);this._w=(a-r)/e,this._x=(s+h)/e,this._y=(l+c)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<Number.EPSILON?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x),this._w=i,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(tj(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(0===i)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=t._x,l=t._y,h=t._z,c=t._w;return this._x=i*c+a*o+r*h-s*l,this._y=r*c+a*l+s*o-i*h,this._z=s*c+a*h+i*l-r*o,this._w=a*c-i*o-r*l-s*h,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let i=this._x,r=this._y,s=this._z,a=this._w,o=a*e._w+i*e._x+r*e._y+s*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=i,this._y=r,this._z=s,this;let l=1-o*o;if(l<=Number.EPSILON){let e=1-t;return this._w=e*a+t*this._w,this._x=e*i+t*this._x,this._y=e*r+t*this._y,this._z=e*s+t*this._z,this.normalize(),this._onChangeCallback(),this}let h=Math.sqrt(l),c=Math.atan2(h,o),d=Math.sin((1-t)*c)/h,u=Math.sin(t*c)/h;return this._w=a*d+this._w*u,this._x=i*d+this._x*u,this._y=r*d+this._y*u,this._z=s*d+this._z*u,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),r=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(t*Math.cos(r),i*Math.sin(s),i*Math.cos(s),t*Math.sin(r))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},ix=class{constructor(e=0,t=0,i=0){ix.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return void 0===i&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}
vendor: 8,370 bytes, line 2
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(iw.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(iw.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*r,this.y=s[1]*t+s[4]*i+s[7]*r,this.z=s[2]*t+s[5]*i+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*i+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*i+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*i+s[10]*r+s[14])*a,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,s=e.x,a=e.y,o=e.z,l=e.w,h=l*t+a*r-o*i,c=l*i+o*t-s*r,d=l*r+s*i-a*t,u=-s*t-a*i-o*r;return this.x=h*l+-(u*s)+-(c*o)- -(d*a),this.y=c*l+-(u*a)+-(d*s)- -(h*o),this.z=d*l+-(u*o)+-(h*a)- -(c*s),this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*r,this.y=s[1]*t+s[5]*i+s[9]*r,this.z=s[2]*t+s[6]*i+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,s=e.z,a=t.x,o=t.y,l=t.z;return this.x=r*l-s*o,this.y=s*a-i*l,this.z=i*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return ib.copy(this).projectOnVector(e),this.sub(ib)}reflect(e){return this.sub(ib.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(tj(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},ib=new ix,iw=new iy,iS=class{constructor(e=new ix(1/0,1/0,1/0),t=new ix(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.length;l<h;l+=3){let h=e[l],c=e[l+1],d=e[l+2];h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromBufferAttribute(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.count;l<h;l++){let h=e.getX(l),c=e.getY(l),d=e.getZ(l);h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=iA.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let i=e.geometry;if(void 0!==i){if(t&&null!=i.attributes&&void 0!==i.attributes.position){let t=i.attributes.position;for(let i=0,r=t.count;i<r;i++)iA.fromBufferAttribute(t,i).applyMatrix4(e.matrixWorld),this.expandByPoint(iA)}else null===i.boundingBox&&i.computeBoundingBox(),iM.copy(i.boundingBox),iM.applyMatrix4(e.matrixWorld),this.union(iM)}let r=e.children;for(let e=0,i=r.length;e<i;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsSphere(e){return this.clampPoint(e.center,iA),iA.distanceToSquared(e.center)<=e.radius*e.radiu
2s}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(iO),iR.subVectors(this.max,iO),iE.subVectors(e.a,iO),iC.subVectors(e.b,iO),iT.subVectors(e.c,iO),iP.subVectors(iC,iE),iD.subVectors(iT,iC),iI.subVectors(iE,iT);let t=[0,-iP.z,iP.y,0,-iD.z,iD.y,0,-iI.z,iI.y,iP.z,0,-iP.x,iD.z,0,-iD.x,iI.z,0,-iI.x,-iP.y,iP.x,0,-iD.y,iD.x,0,-iI.y,iI.x,0];return!!(iz(t,iE,iC,iT,iR)&&iz(t=[1,0,0,0,1,0,0,0,1],iE,iC,iT,iR))&&(iL.crossVectors(iP,iD),iz(t=[iL.x,iL.y,iL.z],iE,iC,iT,iR))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return iA.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(iA).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(i_[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),i_[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),i_[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),i_[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),i_[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),i_[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),i_[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),i_[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(i_)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},i_=[new ix,new ix,new ix,new ix,new ix,new ix,new ix,new ix],iA=new ix,iM=new iS,iE=new ix,iC=new ix,iT=new ix,iP=new ix,iD=new ix,iI=new ix,iO=new ix,iR=new ix,iL=new ix,iB=new ix;function iz(e,t,i,r,s){for(let a=0,o=e.length-3;a<=o;a+=3){iB.fromArray(e,a);let o=s.x*Math.abs(iB.x)+s.y*Math.abs(iB.y)+s.z*Math.abs(iB.z),l=t.dot(iB),h=i.dot(iB),c=r.dot(iB);if(Math.max(-Math.max(l,h,c),Math.min(l,h,c))>o)return!1}return!0}var iF=new iS,iN=new ix,iU=new ix,ik=class{constructor(e=new ix,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let i=this.center;void 0!==t?i.copy(t):iF.setFromPoints(e).getCenter(i);let r=0;for(let t=0,s=e.length;t<s;t++)r=Math.max(r,i.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let i=this.center.distanceToSquared(e);return t.copy(e),i>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;iN.subVectors(e,this.center);let t=iN.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),i=(e-this.radius)*.5;this.center.addScaledVector(iN,i/e),this.radius+=i}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(iU.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(iN.copy(e.center).add(iU)),this.expandByPoint(iN.copy(e.center).sub(iU)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},iV=new ix,ij=new ix,iG=new ix,iH=new ix,iW=new ix,iq=new ix,iX=new ix,iY=class{constructor(e=new ix,t=new ix(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,iV)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=iV.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(iV.copy(this.direction).multiplyScalar(t).add(this.origin),iV.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){ij.copy(e).add(t).multiplyScalar(.5),iG.copy(t).sub(e).normalize(),iH.copy(this.origin).sub(ij);let s=.5*e.distanceTo(t),a=-this.direction.dot(iG),o=iH.dot(this.direction),l=-iH.dot(iG),h=iH.lengthSq(),c=Math.abs(1-a*a),d,u,p,f;if(c>0){if(d=a*l-o,u=a*o-l,f=s*c,d>=0){if(u>=-f){if(u<=f){let e=1/c;d*=e,u*=e,p=d*(d+a*u+2*o)+u*(a*d+u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=s)+o)))*d+u*(u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=-s)+o)))*d+u*(u+2*l)+h}else u<=-f?(u=(d=Math.max(0,-(-a*s+o)))>0?-s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h):u<=f?(d=0,p=(u=Math.min(Math.max(-s,-l),s))*(u+2*l)+h):(u=(d=Math.max(0,-(a*s+o)))>0?s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h)}else u=a>0?-s:s,p=-(d=Math.max(0,-(a*u+o)))*d+u*(u+2*l)+h;
vendor: 4,217 bytes, line 2
2return i&&i.copy(this.direction).multiplyScalar(d).add(this.origin),r&&r.copy(iG).multiplyScalar(u).add(ij),p}intersectSphere(e,t){iV.subVectors(e.center,this.origin);let i=iV.dot(this.direction),r=iV.dot(iV)-i*i,s=e.radius*e.radius;if(r>s)return null;let a=Math.sqrt(s-r),o=i-a,l=i+a;return o<0&&l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return null===i?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,s,a,o,l,h=1/this.direction.x,c=1/this.direction.y,d=1/this.direction.z,u=this.origin;return h>=0?(i=(e.min.x-u.x)*h,r=(e.max.x-u.x)*h):(i=(e.max.x-u.x)*h,r=(e.min.x-u.x)*h),c>=0?(s=(e.min.y-u.y)*c,a=(e.max.y-u.y)*c):(s=(e.max.y-u.y)*c,a=(e.min.y-u.y)*c),i>a||s>r||((s>i||isNaN(i))&&(i=s),(a<r||isNaN(r))&&(r=a),d>=0?(o=(e.min.z-u.z)*d,l=(e.max.z-u.z)*d):(o=(e.max.z-u.z)*d,l=(e.min.z-u.z)*d),i>l||o>r)||((o>i||i!=i)&&(i=o),(l<r||r!=r)&&(r=l),r<0)?null:this.at(i>=0?i:r,t)}intersectsBox(e){return null!==this.intersectBox(e,iV)}intersectTriangle(e,t,i,r,s){iW.subVectors(t,e),iq.subVectors(i,e),iX.crossVectors(iW,iq);let a=this.direction.dot(iX),o;if(a>0){if(r)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}iH.subVectors(this.origin,e);let l=o*this.direction.dot(iq.crossVectors(iH,iq));if(l<0)return null;let h=o*this.direction.dot(iW.cross(iH));if(h<0||l+h>a)return null;let c=-o*iH.dot(iX);return c<0?null:this.at(c/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},iQ=class{constructor(){iQ.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){let v=this.elements;return v[0]=e,v[4]=t,v[8]=i,v[12]=r,v[1]=s,v[5]=a,v[9]=o,v[13]=l,v[2]=h,v[6]=c,v[10]=d,v[14]=u,v[3]=p,v[7]=f,v[11]=m,v[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new iQ().fromArray(this.elements)}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){let t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,i=e.elements,r=1/iZ.setFromMatrixColumn(e,0).length(),s=1/iZ.setFromMatrixColumn(e,1).length(),a=1/iZ.setFromMatrixColumn(e,2).length();return t[0]=i[0]*r,t[1]=i[1]*r,t[2]=i[2]*r,t[3]=0,t[4]=i[4]*s,t[5]=i[5]*s,t[6]=i[6]*s,t[7]=0,t[8]=i[8]*a,t[9]=i[9]*a,t[10]=i[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,i=e.x,r=e.y,s=e.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s);if("XYZ"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=-l*d,t[8]=h,t[1]=i+r*h,t[5]=e-s*h,t[9]=-o*l,t[2]=s-e*h,t[6]=r+i*h,t[10]=a*l}else if("YXZ"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e+s*o,t[4]=r*o-i,t[8]=a*h,t[1]=a*d,t[5]=a*c,t[9]=-o,t[2]=i*o-r,t[6]=s+e*o,t[10]=a*l}else if("ZXY"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e-s*o,t[4]=-a*d,t[8]=r+i*o,t[1]=i+r*o,t[5]=a*c,t[9]=s-e*o,t[2]=-a*h,t[6]=o,t[10]=a*l}else if("ZYX"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=r*h-i,t[8]=e*h+s,t[1]=l*d,t[5]=s*h+e,t[9]=i*h-r,t[2]=-h,t[6]=o*l,t[10]=a*l}else if("YZX"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=s-e*d,t[8]=r*d+i,t[1]=d,t[5]=a*c,t[9]=-o*c,t[2]=-h*c,t[6]=i*d+r,t[10]=e-s*d}
vendor: 4,489 bytes, line 2
2else if("XZY"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=-d,t[8]=h*c,t[1]=e*d+s,t[5]=a*c,t[9]=i*d-r,t[2]=r*d-i,t[6]=o*c,t[10]=s*d+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(iJ,e,i$)}lookAt(e,t,i){let r=this.elements;return i2.subVectors(e,t),0===i2.lengthSq()&&(i2.z=1),i2.normalize(),i0.crossVectors(i,i2),0===i0.lengthSq()&&(1===Math.abs(i.z)?i2.x+=1e-4:i2.z+=1e-4,i2.normalize(),i0.crossVectors(i,i2)),i0.normalize(),i1.crossVectors(i2,i0),r[0]=i0.x,r[4]=i1.x,r[8]=i2.x,r[1]=i0.y,r[5]=i1.y,r[9]=i2.y,r[2]=i0.z,r[6]=i1.z,r[10]=i2.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[4],l=i[8],h=i[12],c=i[1],d=i[5],u=i[9],p=i[13],f=i[2],m=i[6],g=i[10],v=i[14],y=i[3],x=i[7],b=i[11],w=i[15],S=r[0],_=r[4],A=r[8],M=r[12],E=r[1],C=r[5],T=r[9],P=r[13],D=r[2],I=r[6],O=r[10],R=r[14],L=r[3],B=r[7],z=r[11],F=r[15];return s[0]=a*S+o*E+l*D+h*L,s[4]=a*_+o*C+l*I+h*B,s[8]=a*A+o*T+l*O+h*z,s[12]=a*M+o*P+l*R+h*F,s[1]=c*S+d*E+u*D+p*L,s[5]=c*_+d*C+u*I+p*B,s[9]=c*A+d*T+u*O+p*z,s[13]=c*M+d*P+u*R+p*F,s[2]=f*S+m*E+g*D+v*L,s[6]=f*_+m*C+g*I+v*B,s[10]=f*A+m*T+g*O+v*z,s[14]=f*M+m*P+g*R+v*F,s[3]=y*S+x*E+b*D+w*L,s[7]=y*_+x*C+b*I+w*B,s[11]=y*A+x*T+b*O+w*z,s[15]=y*M+x*P+b*R+w*F,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[4],r=e[8],s=e[12],a=e[1],o=e[5],l=e[9],h=e[13],c=e[2],d=e[6],u=e[10],p=e[14];return e[3]*(+s*l*d-r*h*d-s*o*u+i*h*u+r*o*p-i*l*p)+e[7]*(+t*l*p-t*h*u+s*a*u-r*a*p+r*h*c-s*l*c)+e[11]*(+t*h*d-t*o*p-s*a*d+i*a*p+s*o*c-i*h*c)+e[15]*(-r*o*c-t*l*d+t*o*u+r*a*d-i*a*u+i*l*c)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=i),this}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=e[9],u=e[10],p=e[11],f=e[12],m=e[13],g=e[14],v=e[15],y=d*g*h-m*u*h+m*l*p-o*g*p-d*l*v+o*u*v,x=f*u*h-c*g*h-f*l*p+a*g*p+c*l*v-a*u*v,b=c*m*h-f*d*h+f*o*p-a*m*p-c*o*v+a*d*v,w=f*d*l-c*m*l-f*o*u+a*m*u+c*o*g-a*d*g,S=t*y+i*x+r*b+s*w;if(0===S)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let _=1/S;return e[0]=y*_,e[1]=(m*u*s-d*g*s-m*r*p+i*g*p+d*r*v-i*u*v)*_,e[2]=(o*g*s-m*l*s+m*r*h-i*g*h-o*r*v+i*l*v)*_,e[3]=(d*l*s-o*u*s-d*r*h+i*u*h+o*r*p-i*l*p)*_,e[4]=x*_,e[5]=(c*g*s-f*u*s+f*r*p-t*g*p-c*r*v+t*u*v)*_,e[6]=(f*l*s-a*g*s-f*r*h+t*g*h+a*r*v-t*l*v)*_,e[7]=(a*u*s-c*l*s+c*r*h-t*u*h-a*r*p+t*l*p)*_,e[8]=b*_,e[9]=(f*d*s-c*m*s-f*i*p+t*m*p+c*i*v-t*d*v)*_,e[10]=(a*m*s-f*o*s+f*i*h-t*m*h-a*i*v+t*o*v)*_,e[11]=(c*o*s-a*d*s-c*i*h+t*d*h+a*i*p-t*o*p)*_,e[12]=w*_,e[13]=(c*m*r-f*d*r+f*i*u-t*m*u-c*i*g+t*d*g)*_,e[14]=(f*o*r-a*m*r-f*i*l+t*m*l+a*i*g-t*o*g)*_,e[15]=(a*d*r-c*o*r+c*i*l-t*d*l-a*i*u+t*o*u)*_,this}scale(e){let t=this.elements,i=e.x,r=e.y,s=e.z;return t[0]*=i,t[4]*=r,t[8]*=s,t[1]*=i,t[5]*=r,t[9]*=s,t[2]*=i,t[6]*=r,t[10]*=s,t[3]*=i,t[7]*=r,t[11]*=s,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let i=Math.cos(t),r=Math.sin(t),s=1-i,a=e.x,o=e.y,l=e.z,h=s*a,c=s*o;return this.set(h*a+i,h*o-r*l,h*l+r*o,0,h*o+r*l,c*o+i,c*l-r*a,0,h*l-r*o,c*l+r*a,s*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,r,s,a){return this.set(1,i,s,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,i){let r=this.elements,s=t._x,a=t._y,o=t._z,l=t._w,h=s+s,c=a+a,d=o+o,u=s*h,p=s*c,f=s*d,m=a*c,g=a*d,v=o*d,y=l*h,x=l*c,b=l*d,w=i.x,S=i.y,_=i.z;return r[0]=(1-(m+v))*w,r[1]=(p+b)*w,r[2]=(f-x)*w,r[3]=0,r[4]=(p-b)*S,r[5]=(1-(u+v))*S,r[6]=(g+y)*S,r[7]=0,r[8]=(f+x
2)*_,r[9]=(g-y)*_,r[10]=(1-(u+m))*_,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,i){let r=this.elements,s=iZ.set(r[0],r[1],r[2]).length(),a=iZ.set(r[4],r[5],r[6]).length(),o=iZ.set(r[8],r[9],r[10]).length();0>this.determinant()&&(s=-s),e.x=r[12],e.y=r[13],e.z=r[14],iK.copy(this);let l=1/s,h=1/a,c=1/o;return iK.elements[0]*=l,iK.elements[1]*=l,iK.elements[2]*=l,iK.elements[4]*=h,iK.elements[5]*=h,iK.elements[6]*=h,iK.elements[8]*=c,iK.elements[9]*=c,iK.elements[10]*=c,t.setFromRotationMatrix(iK),i.x=s,i.y=a,i.z=o,this}makePerspective(e,t,i,r,s,a){let o=this.elements;return o[0]=2*s/(t-e),o[4]=0,o[8]=(t+e)/(t-e),o[12]=0,o[1]=0,o[5]=2*s/(i-r),o[9]=(i+r)/(i-r),o[13]=0,o[2]=0,o[6]=0,o[10]=-(a+s)/(a-s),o[14]=-2*a*s/(a-s),o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(e,t,i,r,s,a){let o=this.elements,l=1/(t-e),h=1/(i-r),c=1/(a-s);return o[0]=2*l,o[4]=0,o[8]=0,o[12]=-((t+e)*l),o[1]=0,o[5]=2*h,o[9]=0,o[13]=-((i+r)*h),o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-((a+s)*c),o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<16;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}},iZ=new ix,iK=new iQ,iJ=new ix(0,0,0),i$=new ix(1,1,1),i0=new ix,i1=new ix,i2=new ix,i3=new iQ,i4=new iy,i5=class{constructor(e=0,t=0,i=0,r=i5.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=r}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,r=this._order){return this._x=e,this._y=t,this._z=i,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){let r=e.elements,s=r[0],a=r[4],o=r[8],l=r[1],h=r[5],c=r[9],d=r[2],u=r[6],p=r[10];switch(t){case"XYZ":this._y=Math.asin(tj(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(-c,p),this._z=Math.atan2(-a,s)):(this._x=Math.atan2(u,h),this._z=0);break;case"YXZ":this._x=Math.asin(-tj(c,-1,1)),.9999999>Math.abs(c)?(this._y=Math.atan2(o,p),this._z=Math.atan2(l,h)):(this._y=Math.atan2(-d,s),this._z=0);break;case"ZXY":this._x=Math.asin(tj(u,-1,1)),.9999999>Math.abs(u)?(this._y=Math.atan2(-d,p),this._z=Math.atan2(-a,h)):(this._y=0,this._z=Math.atan2(l,s));break;case"ZYX":this._y=Math.asin(-tj(d,-1,1)),.9999999>Math.abs(d)?(this._x=Math.atan2(u,p),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-a,h));break;case"YZX":this._z=Math.asin(tj(l,-1,1)),.9999999>Math.abs(l)?(this._x=Math.atan2(-c,h),this._y=Math.atan2(-d,s)):(this._x=0,this._y=Math.atan2(o,p));break;case"XZY":this._z=Math.asin(-tj(a,-1,1)),.9999999>Math.abs(a)?(this._x=Math.atan2(u,h),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-c,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===i&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return i3.makeRotationFromQuaternion(e),this.setFromRotationMatrix(i3,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return i4.setFromEuler(this),this.setFromQuaternion(i4,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};i5.DEFAULT_ORDER="XYZ";var i6=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!=0}
2isEnabled(e){return(this.mask&(1<<e|0))!=0}},i8=0,i9=new ix,i7=new iy,re=new iQ,rt=new ix,ri=new ix,rr=new ix,rs=new iy,ra=new ix(1,0,0),rn=new ix(0,1,0),ro=new ix(0,0,1),rl={type:"added"},rh={type:"removed"},rc=class extends tz{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:i8++}),this.uuid=tV(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=rc.DEFAULT_UP.clone();let e=new ix,t=new i5,i=new iy,r=new ix(1,1,1);t._onChange(function(){i.setFromEuler(t,!1)}),i._onChange(function(){t.setFromQuaternion(i,void 0,!1)}),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:r},modelViewMatrix:{value:new iQ},normalMatrix:{value:new tJ}}),this.matrix=new iQ,this.matrixWorld=new iQ,this.matrixAutoUpdate=rc.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=rc.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new i6,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return i7.setFromAxisAngle(e,t),this.quaternion.multiply(i7),this}rotateOnWorldAxis(e,t){return i7.setFromAxisAngle(e,t),this.quaternion.premultiply(i7),this}rotateX(e){return this.rotateOnAxis(ra,e)}rotateY(e){return this.rotateOnAxis(rn,e)}rotateZ(e){return this.rotateOnAxis(ro,e)}translateOnAxis(e,t){return i9.copy(e).applyQuaternion(this.quaternion),this.position.add(i9.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(ra,e)}translateY(e){return this.translateOnAxis(rn,e)}translateZ(e){return this.translateOnAxis(ro,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(re.copy(this.matrixWorld).invert())}lookAt(e,t,i){e.isVector3?rt.copy(e):rt.set(e,t,i);let r=this.parent;this.updateWorldMatrix(!0,!1),ri.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?re.lookAt(ri,rt,this.up):re.lookAt(rt,ri,this.up),this.quaternion.setFromRotationMatrix(re),r&&(re.extractRotation(r.matrixWorld),i7.setFromRotationMatrix(re),this.quaternion.premultiply(i7.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?console.error("THREE.Object3D.add: object can't be added as a child of itself.",e):e&&e.isObject3D?(null!==e.parent&&e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(rl)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e),this}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return -1!==t&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(rh)),this}removeFromParent(){let e=this.parent;return null!==e&&e.remove(this),this}clear(){for(let e=0;e<this.children.length;e++){let t=this.children[e];t.parent=null,t.dispatchEvent(rh)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),re.copy(this.matrixWorld).invert(),null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),re.multiply(e.parent.matrixWorld)),e.applyMatrix4(re),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let i=0,r=this.children.length;i<r;i++){let r=this.children[i].getObjectByProperty(e,t);if(void 0!==r)return r}}getObjectsByProperty(e,t){let i=[];this[e]===t&&i.push(this);for(let r=0,s=this.children.length;r<s;r++){let s=this.children[r].getObjectsByProperty(e,t);s.length>0&&(i=i.concat(s))}return i}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ri,e,rr),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ri,rs,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverse(e)}traverseVisible(e){if(!1===this.visible)return;e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverseVisible(e)}traverseAncestors(e){let t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.copy(this.matrix
2):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let i=0,r=t.length;i<r;i++){let r=t[i];(!0===r.matrixWorldAutoUpdate||!0===e)&&r.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let i=this.parent;if(!0===e&&null!==i&&!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===t){let e=this.children;for(let t=0,i=e.length;t<i;t++){let i=e[t];!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=void 0===e||"string"==typeof e,i={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});let r={};function s(t,i){return void 0===t[i.uuid]&&(t[i.uuid]=i.toJSON(e)),i.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let i=t.shapes;if(Array.isArray(i))for(let t=0,r=i.length;t<r;t++){let r=i[t];s(e.shapes,r)}else s(e.shapes,i)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(s(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),void 0!==this.material){if(Array.isArray(this.material)){let t=[];for(let i=0,r=this.material.length;i<r;i++)t.push(s(e.materials,this.material[i]));r.material=t}else r.material=s(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let i=this.animations[t];r.animations.push(s(e.animations,i))}}if(t){let t=a(e.geometries),r=a(e.materials),s=a(e.textures),o=a(e.images),l=a(e.shapes),h=a(e.skeletons),c=a(e.animations),d=a(e.nodes);t.length>0&&(i.geometries=t),r.length>0&&(i.materials=r),s.length>0&&(i.textures=s),o.length>0&&(i.images=o),l.length>0&&(i.shapes=l),h.length>0&&(i.skeletons=h),c.length>0&&(i.animations=c),d.length>0&&(i.nodes=d)}return i.object=r,i;function a(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t<e.children.length;t++){let i=e.children[t];this.add(i.clone())}return this}};rc.DEFAULT_UP=new ix(0,1,0),rc.DEFAULT_MATRIX_AUTO_UPDATE=!0,rc.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var rd=new ix,ru=new ix,rp=new ix,rf=new ix,rm=new ix,rg=new ix,rv=new ix,ry=new ix,rx=new ix,rb=new ix,rw=class{constructor(e=new ix,t=new ix,i=new ix){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),rd.subVectors(e,t),r.cross(rd);let s=r.lengthSq();return s>0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,i,r,s){rd.subVectors(r,t),ru.subVectors(i,t),rp.subVectors(e,t);let a=rd.dot(rd),o=rd.dot(ru),l=rd.dot(rp),h=ru.dot(ru),c=ru.dot(rp),d=a*h-o*o;if(0===d)return s.set(-2,-1,-1);let u=1/d,p=(h*l-o*c)*u,f=(a*c-o*l)*u;return s.set(1-p-f,f,p)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,rf),rf.x>=0&&rf.y>=0&&rf.x+rf.y<=1}static getUV(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,rf),l.set(0,0),l.addScaledVector(s,rf.x),l.addScaledVector(a,rf.y),l.addScaledVector(o,rf.z),l}static isFrontFacing(e,t,i,r){return rd.subVectors(i,t),ru.subVectors(e,t),0>rd.cross(ru).dot(r)}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return rd.subVectors(this.c,this.b),ru.subVectors(this.a,this.b),.5*rd.cross(ru).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return rw.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return rw.getBarycoord(e,this.a,this.b,this.c,t)}
2getUV(e,t,i,r,s){return rw.getUV(e,this.a,this.b,this.c,t,i,r,s)}containsPoint(e){return rw.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return rw.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,s=this.c,a,o;rm.subVectors(r,i),rg.subVectors(s,i),ry.subVectors(e,i);let l=rm.dot(ry),h=rg.dot(ry);if(l<=0&&h<=0)return t.copy(i);rx.subVectors(e,r);let c=rm.dot(rx),d=rg.dot(rx);if(c>=0&&d<=c)return t.copy(r);let u=l*d-c*h;if(u<=0&&l>=0&&c<=0)return a=l/(l-c),t.copy(i).addScaledVector(rm,a);rb.subVectors(e,s);let p=rm.dot(rb),f=rg.dot(rb);if(f>=0&&p<=f)return t.copy(s);let m=p*h-l*f;if(m<=0&&h>=0&&f<=0)return o=h/(h-f),t.copy(i).addScaledVector(rg,o);let g=c*f-p*d;if(g<=0&&d-c>=0&&p-f>=0)return rv.subVectors(s,r),o=(d-c)/(d-c+(p-f)),t.copy(r).addScaledVector(rv,o);let v=1/(g+m+u);return a=m*v,o=u*v,t.copy(i).addScaledVector(rm,a).addScaledVector(rg,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},rS=0,r_=class extends tz{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:rS++}),this.uuid=tV(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let i=e[t];if(void 0===i){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}let r=this[t];if(void 0===r){console.warn("THREE."+this.type+": '"+t+"' is not a property of this material.");continue}r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}
vendor: 11,949 bytes, line 2
2if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),t){let t=r(e.textures),s=r(e.images);t.length>0&&(i.textures=t),s.length>0&&(i.images=s)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(null!==t){let e=t.length;i=Array(e);for(let r=0;r!==e;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}},rA=class extends r_{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new is(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},rM=new ix,rE=new tK,rC=class{constructor(e,t,i=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=i,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,s=this.itemSize;r<s;r++)this.array[e+r]=t.array[i+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(2===this.itemSize)for(let t=0,i=this.count;t<i;t++)rE.fromBufferAttribute(this,t),rE.applyMatrix3(e),this.setXY(t,rE.x,rE.y);else if(3===this.itemSize)for(let t=0,i=this.count;t<i;t++)rM.fromBufferAttribute(this,t),rM.applyMatrix3(e),this.setXYZ(t,rM.x,rM.y,rM.z);return this}applyMatrix4(e){for(let t=0,i=this.count;t<i;t++)rM.fromBufferAttribute(this,t),rM.applyMatrix4(e),this.setXYZ(t,rM.x,rM.y,rM.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)rM.fromBufferAttribute(this,t),rM.applyNormalMatrix(e),this.setXYZ(t,rM.x,rM.y,rM.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)rM.fromBufferAttribute(this,t),rM.transformDirection(e),this.setXYZ(t,rM.x,rM.y,rM.z);return this}set(e,t=0){return this.array.set(e,t),this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=tY(t,this.array)),t}setX(e,t){return this.normalized&&(t=tQ(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=tY(t,this.array)),t}setY(e,t){return this.normalized&&(t=tQ(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=tY(t,this.array)),t}setZ(e,t){return this.normalized&&(t=tQ(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=tY(t,this.array)),t}setW(e,t){return this.normalized&&(t=tQ(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,i){return e*=this.itemSize,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array)),this.array[e+0]=t,this.array[e+1]=i,this}setXYZ(e,t,i,r){return e*=this.itemSize,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array),r=tQ(r,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e*=this.itemSize,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array),r=tQ(r,this.array),s=tQ(s,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this.array[e+3]=s,this}
2onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return""!==this.name&&(e.name=this.name),35044!==this.usage&&(e.usage=this.usage),(0!==this.updateRange.offset||-1!==this.updateRange.count)&&(e.updateRange=this.updateRange),e}copyColorsArray(){console.error("THREE.BufferAttribute: copyColorsArray() was removed in r144.")}copyVector2sArray(){console.error("THREE.BufferAttribute: copyVector2sArray() was removed in r144.")}copyVector3sArray(){console.error("THREE.BufferAttribute: copyVector3sArray() was removed in r144.")}copyVector4sArray(){console.error("THREE.BufferAttribute: copyVector4sArray() was removed in r144.")}},rT=class extends rC{constructor(e,t,i){super(new Uint16Array(e),t,i)}},rP=class extends rC{constructor(e,t,i){super(new Uint32Array(e),t,i)}},rD=class extends rC{constructor(e,t,i){super(new Float32Array(e),t,i)}},rI=0,rO=new iQ,rR=new rc,rL=new ix,rB=new iS,rz=new iS,rF=new ix,rN=class extends tz{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:rI++}),this.uuid=tV(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(t0(e)?rP:rT)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return void 0!==this.attributes[e]}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(void 0!==i){let t=new tJ().getNormalMatrix(e);i.applyNormalMatrix(t),i.needsUpdate=!0}let r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(e),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(e){return rO.makeRotationFromQuaternion(e),this.applyMatrix4(rO),this}rotateX(e){return rO.makeRotationX(e),this.applyMatrix4(rO),this}rotateY(e){return rO.makeRotationY(e),this.applyMatrix4(rO),this}rotateZ(e){return rO.makeRotationZ(e),this.applyMatrix4(rO),this}translate(e,t,i){return rO.makeTranslation(e,t,i),this.applyMatrix4(rO),this}scale(e,t,i){return rO.makeScale(e,t,i),this.applyMatrix4(rO),this}lookAt(e){return rR.lookAt(e),rR.updateMatrix(),this.applyMatrix4(rR.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(rL).negate(),this.translate(rL.x,rL.y,rL.z),this}setFromPoints(e){let t=[];for(let i=0,r=e.length;i<r;i++){let r=e[i];t.push(r.x,r.y,r.z||0)}return this.setAttribute("position",new rD(t,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new iS);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingBox.set(new ix(-1/0,-1/0,-1/0),new ix(1/0,1/0,1/0));return}if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rB.setFromBufferAttribute(i),this.morphTargetsRelative?(rF.addVectors(this.boundingBox.min,rB.min),this.boundingBox.expandByPoint(rF),rF.addVectors(this.boundingBox.max,rB.max),this.boundingBox.expandByPoint(rF)):(this.boundingBox.expandByPoint(rB.min),this.boundingBox.expandByPoint(rB.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new ik);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingSphere.set(new ix,1/0);return}if(e){let i=this.boundingSphere.center;if(rB.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rz.setFromBufferAttribute(i),this.morphTargetsRelative?(rF.addVectors(rB.min,rz.min),rB.expandByPoint(rF),rF.addVectors(rB.max,rz.max),rB.expandByPoint(rF)):(rB.expandByPoint(rz.min),rB.expandByPoint(rz.max))}rB.getCenter(i);let r=0;for(let t=0,s=e.count;t<s;t++)rF.fromBufferAttribute(e,t),r=Math.max(r,i.distanceToSquared(rF));if(t)for(let s=0,a=t.length;s<a;s++){let a=t[s],o=this.morphTargetsRelative;for(let t=0,s=a.count;t<s;t++)rF.fromBufferAttribute(a,t),o&&(rL.fromBufferAttribute(e,t),rF.add(rL)),r=Math.max(r,i.distanceToSquared(rF))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(null===e||void 0===t.position||void 0===t.normal||void 0===t.uv){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let i=e.array,r=t.position.array,s=t.normal.array,a=t.uv.array,o=r.length/3;!1===this.hasAttribute("tangent")&&this.setAttribute("tangent",new rC(new Float32Array(4*o),4));let l=this.getAttribute("tangent").array,h=[],c=[];for(let e=0;e<o;e++)h[e]=new ix,c[e]=new ix;let d=new ix,u=new ix,p=new ix,f=new tK,m=new tK,g=new tK,v=new ix,y=new ix,x=this.groups;0===x.length&&(x=[{start:0,count:i.length}]);for(let e=0,t=x.length;e<t;++e){let t=x[e],s=t.start,o=t.count;for(let e=s,t=s+o;e<t;e+=3)!function(e,t,i){d.fromArray(r,3*e),u.fromArray(r,3*t),p.fromArray(r,3*i),f.fromArray(a,2*e),m.fromArray(a,2*t),g.fromArray(a,2*i),u.sub(d),p.sub(d),m.sub(f),g.sub(f);let s=1/(m.x*g.y-g.x*m.y);isFinite(s)&&(v.copy(u).multiplyScalar(g.y).addScaledVector(p,-m.y).multiplyScalar(s),y.copy(p).multiplyScalar(m.x).addScaledVector(u,-g.x).multiplyScalar(s),h[e].add(v),h[t].add(v),h[i].add(v),c[e].add(y),c[t].add(y),c[i].add(y))}(i[e+0],i[e+1],i[e+2])}let b=new ix,w=new ix,S=new ix,_=new ix;function A(e){S.fromArray(s,3*e),_.copy(S);let t=h[e];b.copy(t),b.sub(S.multiplyScalar(S.dot(t))).normalize(),w.crossVectors(_,t);let i=0>w.dot(c[e])?-1:1;l[4*e]=b.x,l[4*e+1]=b.y,l[4*e+2]=b.z,l[4*e+3]=i}for(let e=0,t=x.length;e<t;++e){let t=x[e],r=t.start,s=t.count;for(let e=r,t=r+s;e<t;e+=3)A(i[e+0]),A(i[e+1]),A(i[e+2])}}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(void 0!==t){let i=this.getAttribute("normal");if(void 0===i)i=new rC(new Float32Array(3*t.count),3),this.setAttribute("normal",i);else for(let e=0,t=i.count;e<t;e++)i.setXYZ(e,0,0,0);let r=new ix,s=new ix,a=new ix,o=new ix,l=new ix,h=new ix,c=new ix,d=new ix;if(e)for(let u=0,p=e.count;u<p;u+=3){let p=e.getX(u+0),f=e.getX(u+1),m=e.getX(u+2);r.fromBufferAttribute(t,p),s.fromBufferAttribute(t,f),a.fromBufferAttribute(t,m),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,f),h.fromBufferAttribute(i,m),o.add(c),l.add(c),h.add(c),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(f,l.x,l.y,l.z),i.setXYZ(m,h.x,h.y,h.z)}else for(let e=0,o=t.count;e<o;e+=3)r.fromBufferAttribute(t,e+0),s.fromBufferAttribute(t,e+1),a.fromBufferAttribute(t,e+2),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),i.setXYZ(e+0,c.x,c.y,c.z),i.setXYZ(e+1,c.x,c.y,c.z),i.setXYZ(e+2,c.x,c.y,c.z);this.normalizeNormals(),i.needsUpdate=!0}}merge(){return console.error("THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead."),this}normalizeNormals(){let e=this.attributes.normal;for(let t=0,i=e.count;t<i;t++)rF.fromBufferAttribute(e,t),rF.normalize(),e.setXYZ(t,rF.x,rF.y,rF.z)}toNonIndexed(){function e(e,t){let i=e.array,r=e.itemSize,s=e.normalized,a=new i.constructor(t.length*r),o=0,l=0;for(let s=0,h=t.length;s<h;s++){o=e.isInterleavedBufferAttribute?t[s]*e.data.stride+e.offset:t[s]*r;for(let e=0;e<r;e++)a[l++]=i[o++]}return new rC(a,r,s)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let t=new rN,i=this.index.array,r=this.attributes;for(let s in r){let a=e(r[s],i);t.setAttribute(s,a)}let s=this.morphAttributes;for(let r in s){let a=[],o=s[r];for(let t=0,r=o.length;t<r;t++){let r=e(o[t],i);a.push(r)}t.morphAttributes[r]=a}t.morphTargetsRelative=this.morphTargetsRelative;let a=this.groups;for(let e=0,i=a.length;e<i;e++){let i=a[e];t.addGroup(i.start,i.count,i.materialIndex)}return t}toJSON(){let e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};
2if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let t in i){let r=i[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},s=!1;for(let t in this.morphAttributes){let i=this.morphAttributes[t],a=[];for(let t=0,r=i.length;t<r;t++){let r=i[t];a.push(r.toJSON(e.data))}a.length>0&&(r[t]=a,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return null!==o&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;null!==i&&this.setIndex(i.clone(t));let r=e.attributes;for(let e in r){let i=r[e];this.setAttribute(e,i.clone(t))}let s=e.morphAttributes;for(let e in s){let i=[],r=s[e];for(let e=0,s=r.length;e<s;e++)i.push(r[e].clone(t));this.morphAttributes[e]=i}this.morphTargetsRelative=e.morphTargetsRelative;let a=e.groups;for(let e=0,t=a.length;e<t;e++){let t=a[e];this.addGroup(t.start,t.count,t.materialIndex)}let o=e.boundingBox;null!==o&&(this.boundingBox=o.clone());let l=e.boundingSphere;return null!==l&&(this.boundingSphere=l.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,void 0!==e.parameters&&(this.parameters=Object.assign({},e.parameters)),this}dispose(){this.dispatchEvent({type:"dispose"})}},rU=new iQ,rk=new iY,rV=new ik,rj=new ix,rG=new ix,rH=new ix,rW=new ix,rq=new ix,rX=new tK,rY=new tK,rQ=new tK,rZ=new ix,rK=new ix,rJ=class extends rc{constructor(e=new rN,t=new rA){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let i=this.geometry,r=i.attributes.position,s=i.morphAttributes.position,a=i.morphTargetsRelative;t.fromBufferAttribute(r,e);let o=this.morphTargetInfluences;if(s&&o){rq.set(0,0,0);for(let i=0,r=s.length;i<r;i++){let r=o[i],l=s[i];0!==r&&(rW.fromBufferAttribute(l,e),a?rq.addScaledVector(rW,r):rq.addScaledVector(rW.sub(t),r))}t.add(rq)}return this.isSkinnedMesh&&this.boneTransform(e,t),t}raycast(e,t){let i=this.geometry,r=this.material,s=this.matrixWorld;if(void 0===r||(null===i.boundingSphere&&i.computeBoundingSphere(),rV.copy(i.boundingSphere),rV.applyMatrix4(s),!1===e.ray.intersectsSphere(rV))||(rU.copy(s).invert(),rk.copy(e.ray).applyMatrix4(rU),null!==i.boundingBox&&!1===rk.intersectsBox(i.boundingBox)))return;let a,o=i.index,l=i.attributes.position,h=i.attributes.uv,c=i.attributes.uv2,d=i.groups,u=i.drawRange;if(null!==o){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],l=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(o.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=r$(this,l,e,rk,h,c,o.getX(i),o.getX(i+1),o.getX(i+2)))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(o.count,u.start+u.count);for(let l=i;l<s;l+=3)(a=r$(this,r,e,rk,h,c,o.getX(l),o.getX(l+1),o.getX(l+2)))&&(a.faceIndex=Math.floor(l/3),t.push(a))}}else if(void 0!==l){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],o=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(l.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=r$(this,o,e,rk,h,c,i,i+1,i+2))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(l.count,u.start+u.count);for(let o=i;o<s;o+=3)(a=r$(this,r,e,rk,h,c,o,o+1,o+2))&&(a.faceIndex=Math.floor(o/3),t.pu
2sh(a))}}}};function r$(e,t,i,r,s,a,o,l,h){e.getVertexPosition(o,rj),e.getVertexPosition(l,rG),e.getVertexPosition(h,rH);let c=function(e,t,i,r,s,a,o,l){if(null===(1===t.side?r.intersectTriangle(o,a,s,!0,l):r.intersectTriangle(s,a,o,0===t.side,l)))return null;rK.copy(l),rK.applyMatrix4(e.matrixWorld);let h=i.ray.origin.distanceTo(rK);return h<i.near||h>i.far?null:{distance:h,point:rK.clone(),object:e}}(e,t,i,r,rj,rG,rH,rZ);if(c){s&&(rX.fromBufferAttribute(s,o),rY.fromBufferAttribute(s,l),rQ.fromBufferAttribute(s,h),c.uv=rw.getUV(rZ,rj,rG,rH,rX,rY,rQ,new tK)),a&&(rX.fromBufferAttribute(a,o),rY.fromBufferAttribute(a,l),rQ.fromBufferAttribute(a,h),c.uv2=rw.getUV(rZ,rj,rG,rH,rX,rY,rQ,new tK));let e={a:o,b:l,c:h,normal:new ix,materialIndex:0};rw.getNormal(rj,rG,rH,e.normal),c.face=e}return c}var r0=class extends rN{constructor(e=1,t=1,i=1,r=1,s=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:r,heightSegments:s,depthSegments:a};let o=this;r=Math.floor(r),s=Math.floor(s);let l=[],h=[],c=[],d=[],u=0,p=0;function f(e,t,i,r,s,a,f,m,g,v,y){let x=a/g,b=f/v,w=a/2,S=f/2,_=m/2,A=g+1,M=v+1,E=0,C=0,T=new ix;for(let a=0;a<M;a++){let o=a*b-S;for(let l=0;l<A;l++){let u=l*x-w;T[e]=u*r,T[t]=o*s,T[i]=_,h.push(T.x,T.y,T.z),T[e]=0,T[t]=0,T[i]=m>0?1:-1,c.push(T.x,T.y,T.z),d.push(l/g),d.push(1-a/v),E+=1}}for(let e=0;e<v;e++)for(let t=0;t<g;t++){let i=u+t+A*e,r=u+t+A*(e+1),s=u+(t+1)+A*(e+1),a=u+(t+1)+A*e;l.push(i,r,a),l.push(r,s,a),C+=6}o.addGroup(p,C,y),p+=C,u+=E}f("z","y","x",-1,-1,i,t,e,a=Math.floor(a),s,0),f("z","y","x",1,-1,i,t,-e,a,s,1),f("x","z","y",1,1,e,i,t,r,a,2),f("x","z","y",1,-1,e,i,-t,r,a,3),f("x","y","z",1,-1,e,t,i,r,s,4),f("x","y","z",-1,-1,e,t,-i,r,s,5),this.setIndex(l),this.setAttribute("position",new rD(h,3)),this.setAttribute("normal",new rD(c,3)),this.setAttribute("uv",new rD(d,2))}static fromJSON(e){return new r0(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};function r1(e){let t={};for(let i in e)for(let r in t[i]={},e[i]){let s=e[i][r];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?t[i][r]=s.clone():Array.isArray(s)?t[i][r]=s.slice():t[i][r]=s}return t}function r2(e){let t={};for(let i=0;i<e.length;i++){let r=r1(e[i]);for(let e in r)t[e]=r[e]}return t}function r3(e){return null===e.getRenderTarget()&&3001===e.outputEncoding?tR:tL}var r4={clone:r1,merge:r2},r5=`void main() { 3 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 4}`,r6=`void main() { 5 gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); 6}`,r8=class extends r_{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=r5,this.fragmentShader=r6,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==e&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=r1(e.uniforms),this.uniformsGroups=function(e){let t=[];for(let i=0;i<e.length;i++)t.push(e[i].clone());return t}(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);for(let i in t.glslVersion=this.glslVersion,t.uniforms={},this.uniforms){let r=this.uniforms[i].value;r&&r.isTexture?t.uniforms[i]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[i]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[i]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[i]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[i]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[i]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[i]={type:"m4",value:r.toArray()}:t.uniforms[i]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;let i={};for(let e in this.extensions)!0===this.extensions[e]&&(i[e]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},r9=class extends rc{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new iQ,this.projectionMatrix=new iQ,this.projectionMatrixInverse=new iQ}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},r7=class extends r9{constructor(e=50,t=1,i=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*tk*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*tU*this.fov);return .5*this.getFilmHeight()/e}
6getEffectiveFOV(){return 2*tk*Math.atan(Math.tan(.5*tU*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,r,s,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*tU*this.fov)/this.zoom,i=2*t,r=this.aspect*i,s=-.5*r,a=this.view;if(null!==this.view&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;s+=a.offsetX*r/e,t-=a.offsetY*i/o,r*=a.width/e,i*=a.height/o}let o=this.filmOffset;0!==o&&(s+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+r,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},se=class extends rc{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i;let r=new r7(-90,1,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(1,0,0),this.add(r);let s=new r7(-90,1,e,t);s.layers=this.layers,s.up.set(0,1,0),s.lookAt(-1,0,0),this.add(s);let a=new r7(-90,1,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(0,1,0),this.add(a);let o=new r7(-90,1,e,t);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(0,-1,0),this.add(o);let l=new r7(-90,1,e,t);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,1),this.add(l);let h=new r7(-90,1,e,t);h.layers=this.layers,h.up.set(0,1,0),h.lookAt(0,0,-1),this.add(h)}update(e,t){null===this.parent&&this.updateMatrixWorld();let i=this.renderTarget,[r,s,a,o,l,h]=this.children,c=e.getRenderTarget(),d=e.toneMapping,u=e.xr.enabled;e.toneMapping=0,e.xr.enabled=!1;let p=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,r),e.setRenderTarget(i,1),e.render(t,s),e.setRenderTarget(i,2),e.render(t,a),e.setRenderTarget(i,3),e.render(t,o),e.setRenderTarget(i,4),e.render(t,l),i.texture.generateMipmaps=p,e.setRenderTarget(i,5),e.render(t,h),e.setRenderTarget(c),e.toneMapping=d,e.xr.enabled=u,i.texture.needsPMREMUpdate=!0}},st=class extends id{constructor(e,t,i,r,s,a,o,l,h,c){super(e=void 0!==e?e:[],t=void 0!==t?t:301,i,r,s,a,o,l,h,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},si=class extends ip{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1};this.texture=new st([i,i,i,i,i,i],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:` 7 8 varying vec3 vWorldDirection; 9 10 vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 11 12 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 13 14 } 15 16 void main() { 17 18 vWorldDirection = transformDirection( position, modelMatrix ); 19 20 #include <begin_vertex> 21 #include <project_vertex> 22 23 } 24 `,fragmentShader:` 25 26 uniform sampler2D tEquirect; 27 28 varying vec3 vWorldDirection; 29 30 #include <common> 31 32 void main() { 33 34 vec3 direction = normalize( vWorldDirection ); 35 36 vec2 sampleUV = equirectUv( direction ); 37 38 gl_FragColor = texture2D( tEquirect, sampleUV ); 39 40 } 41 `},r=new r0(5,5,5),s=new r8({name:"CubemapFromEquirect",uniforms:r1(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});s.uniforms.tEquirect.value=t;let a=new rJ(r,s),o=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new se(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,i,r){let s=e.getRenderTarget();for(let s=0;s<6;s++)e.setRenderTarget(this,s),e.clear(t,i,r);e.setRenderTarget(s)}},sr=new ix,ss=new ix,sa=new tJ,sn=class{constructor(e=new ix(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,r){return this.normal.set(e,t,i),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}
41setFromCoplanarPoints(e,t,i){let r=sr.subVectors(i,t).cross(ss.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){let i=e.delta(sr),r=this.normal.dot(i);if(0===r)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;let s=-(e.start.dot(this.normal)+this.constant)/r;return s<0||s>1?null:t.copy(i).multiplyScalar(s).add(e.start)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||sa.getNormalMatrix(e),r=this.coplanarPoint(sr).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},so=new ik,sl=new ix,sh=class{constructor(e=new sn,t=new sn,i=new sn,r=new sn,s=new sn,a=new sn){this.planes=[e,t,i,r,s,a]}set(e,t,i,r,s,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(r),o[4].copy(s),o[5].copy(a),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){let t=this.planes,i=e.elements,r=i[0],s=i[1],a=i[2],o=i[3],l=i[4],h=i[5],c=i[6],d=i[7],u=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],y=i[14],x=i[15];return t[0].setComponents(o-r,d-l,m-u,x-g).normalize(),t[1].setComponents(o+r,d+l,m+u,x+g).normalize(),t[2].setComponents(o+s,d+h,m+p,x+v).normalize(),t[3].setComponents(o-s,d-h,m-p,x-v).normalize(),t[4].setComponents(o-a,d-c,m-f,x-y).normalize(),t[5].setComponents(o+a,d+c,m+f,x+y).normalize(),this}intersectsObject(e){let t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),so.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(so)}intersectsSprite(e){return so.center.set(0,0,0),so.radius=.7071067811865476,so.applyMatrix4(e.matrixWorld),this.intersectsSphere(so)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(i)<r)return!1;return!0}intersectsBox(e){let t=this.planes;for(let i=0;i<6;i++){let r=t[i];if(sl.x=r.normal.x>0?e.max.x:e.min.x,sl.y=r.normal.y>0?e.max.y:e.min.y,sl.z=r.normal.z>0?e.max.z:e.min.z,0>r.distanceToPoint(sl))return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(0>t[i].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}};function sc(){let e=null,t=!1,i=null,r=null;function s(t,a){i(t,a),r=e.requestAnimationFrame(s)}return{start:function(){!0!==t&&null!==i&&(r=e.requestAnimationFrame(s),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){i=e},setContext:function(t){e=t}}}function sd(e,t){let i=t.isWebGL2,r=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),r.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);let i=r.get(t);i&&(e.deleteBuffer(i.buffer),r.delete(t))},update:function(t,s){var a,o;let l,h;if(t.isGLBufferAttribute){let e=r.get(t);(!e||e.version<t.version)&&r.set(t,{buffer:t.buffer,type:t.type,bytesPerElement:t.elementSize,version:t.version});return}t.isInterleavedBufferAttribute&&(t=t.data);let c=r.get(t);void 0===c?r.set(t,function(t,r){let s,a=t.array,o=t.usage,l=e.createBuffer();if(e.bindBuffer(r,l),e.bufferData(r,a,o),t.onUploadCallback(),a instanceof Float32Array)s=5126;else if(a instanceof Uint16Array){if(t.isFloat16BufferAttribute){if(i)s=5131;else throw Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.")}else s=5123}else if(a instanceof Int16Array)s=5122;else if(a instanceof Uint32Array)s=5125;else if(a instanceof Int32Array)s=5124;else if(a instanceof Int8Array)s=5120;else if(a instanceof Uint8Array)s=5121;else if(a instanceof Uint8ClampedArray)s=5121;else throw Error("THREE.WebGLAttributes: Unsupported buffer data format: "+a);return{buffer:l,type:s,bytesPerElement:a.BYTES_PER_ELEMENT,version:t.version}}(t,s)):c.version<t.version&&(a=c.buffer,l=(o=t).array,h=o.updateRange,e.bindBuffer(s,a),-1===h.count?e.bufferSubData(s,0,l):(i?e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l,h.offset,h.count):e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l.subarray(h.offset,h.offset+h.count)),h.count=-1),o.onUploadCallback(),c.version=t.version)}}}var su=class extends rN{constructor(e=1,t=1,i=1,r=1){super(),this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:i,heightSegments:r};let s=e/2,a=t/2,o=Math.floor(i),l=Math.floor(r),h=o+1,c=l+1,d=e/o,u=t/l,p=[],f=[],m=[],g=[];for(let e=0;e<c;
vendor: 4,273 bytes, lines 41-119
41e++){let t=e*u-a;for(let i=0;i<h;i++){let r=i*d-s;f.push(r,-t,0),m.push(0,0,1),g.push(i/o),g.push(1-e/l)}}for(let e=0;e<l;e++)for(let t=0;t<o;t++){let i=t+h*e,r=t+h*(e+1),s=t+1+h*(e+1),a=t+1+h*e;p.push(i,r,a),p.push(r,s,a)}this.setIndex(p),this.setAttribute("position",new rD(f,3)),this.setAttribute("normal",new rD(m,3)),this.setAttribute("uv",new rD(g,2))}static fromJSON(e){return new su(e.width,e.height,e.widthSegments,e.heightSegments)}},sp={alphamap_fragment:`#ifdef USE_ALPHAMAP 42 diffuseColor.a *= texture2D( alphaMap, vUv ).g; 43#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP 44 uniform sampler2D alphaMap; 45#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST 46 if ( diffuseColor.a < alphaTest ) discard; 47#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST 48 uniform float alphaTest; 49#endif`,aomap_fragment:`#ifdef USE_AOMAP 50 float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; 51 reflectedLight.indirectDiffuse *= ambientOcclusion; 52 #if defined( USE_ENVMAP ) && defined( STANDARD ) 53 float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) ); 54 reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); 55 #endif 56#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP 57 uniform sampler2D aoMap; 58 uniform float aoMapIntensity; 59#endif`,begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:`vec3 objectNormal = vec3( normal ); 60#ifdef USE_TANGENT 61 vec3 objectTangent = vec3( tangent.xyz ); 62#endif`,bsdfs:`vec3 BRDF_Lambert( const in vec3 diffuseColor ) { 63 return RECIPROCAL_PI * diffuseColor; 64} 65vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { 66 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 67 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 68} 69float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { 70 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 71 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 72} 73vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { 74 float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); 75 float x2 = x * x; 76 float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); 77 return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); 78} 79float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { 80 float a2 = pow2( alpha ); 81 float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); 82 float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); 83 return 0.5 / max( gv + gl, EPSILON ); 84} 85float D_GGX( const in float alpha, const in float dotNH ) { 86 float a2 = pow2( alpha ); 87 float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; 88 return RECIPROCAL_PI * a2 / pow2( denom ); 89} 90vec3 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 ) { 91 float alpha = pow2( roughness ); 92 vec3 halfDir = normalize( lightDir + viewDir ); 93 float dotNL = saturate( dot( normal, lightDir ) ); 94 float dotNV = saturate( dot( normal, viewDir ) ); 95 float dotNH = saturate( dot( normal, halfDir ) ); 96 float dotVH = saturate( dot( viewDir, halfDir ) ); 97 vec3 F = F_Schlick( f0, f90, dotVH ); 98 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 99 float D = D_GGX( alpha, dotNH ); 100 return F * ( V * D ); 101} 102#ifdef USE_IRIDESCENCE 103 vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) { 104 float alpha = pow2( roughness ); 105 vec3 halfDir = normalize( lightDir + viewDir ); 106 float dotNL = saturate( dot( normal, lightDir ) ); 107 float dotNV = saturate( dot( normal, viewDir ) ); 108 float dotNH = saturate( dot( normal, halfDir ) ); 109 float dotVH = saturate( dot( viewDir, halfDir ) ); 110 vec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence ); 111 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 112 float D = D_GGX( alpha, dotNH ); 113 return F * ( V * D ); 114 } 115#endif 116vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { 117 const float LUT_SIZE = 64.0; 118 const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; 119 const float LUT_BIAS = 0.5 / LUT_SIZE;
120 float dotNV = saturate( dot( N, V ) ); 121 vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); 122 uv = uv * LUT_SCALE + LUT_BIAS; 123 return uv; 124} 125float LTC_ClippedSphereFormFactor( const in vec3 f ) { 126 float l = length( f ); 127 return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); 128} 129vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { 130 float x = dot( v1, v2 ); 131 float y = abs( x ); 132 float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; 133 float b = 3.4175940 + ( 4.1616724 + y ) * y; 134 float v = a / b; 135 float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; 136 return cross( v1, v2 ) * theta_sintheta; 137} 138vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { 139 vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; 140 vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; 141 vec3 lightNormal = cross( v1, v2 ); 142 if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); 143 vec3 T1, T2; 144 T1 = normalize( V - N * dot( V, N ) ); 145 T2 = - cross( N, T1 ); 146 mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); 147 vec3 coords[ 4 ]; 148 coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); 149 coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); 150 coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); 151 coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); 152 coords[ 0 ] = normalize( coords[ 0 ] ); 153 coords[ 1 ] = normalize( coords[ 1 ] ); 154 coords[ 2 ] = normalize( coords[ 2 ] ); 155 coords[ 3 ] = normalize( coords[ 3 ] ); 156 vec3 vectorFormFactor = vec3( 0.0 ); 157 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); 158 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); 159 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); 160 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); 161 float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); 162 return vec3( result ); 163} 164float G_BlinnPhong_Implicit( ) { 165 return 0.25; 166} 167float D_BlinnPhong( const in float shininess, const in float dotNH ) { 168 return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess ); 169} 170vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) { 171 vec3 halfDir = normalize( lightDir + viewDir ); 172 float dotNH = saturate( dot( normal, halfDir ) ); 173 float dotVH = saturate( dot( viewDir, halfDir ) ); 174 vec3 F = F_Schlick( specularColor, 1.0, dotVH ); 175 float G = G_BlinnPhong_Implicit( ); 176 float D = D_BlinnPhong( shininess, dotNH ); 177 return F * ( G * D ); 178} 179#if defined( USE_SHEEN ) 180float D_Charlie( float roughness, float dotNH ) { 181 float alpha = pow2( roughness ); 182 float invAlpha = 1.0 / alpha; 183 float cos2h = dotNH * dotNH; 184 float sin2h = max( 1.0 - cos2h, 0.0078125 ); 185 return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); 186} 187float V_Neubelt( float dotNV, float dotNL ) { 188 return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); 189} 190vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { 191 vec3 halfDir = normalize( lightDir + viewDir ); 192 float dotNL = saturate( dot( normal, lightDir ) ); 193 float dotNV = saturate( dot( normal, viewDir ) ); 194 float dotNH = saturate( dot( normal, halfDir ) ); 195 float D = D_Charlie( sheenRoughness, dotNH ); 196 float V = V_Neubelt( dotNV, dotNL ); 197 return sheenColor * ( D * V ); 198} 199#endif`,iridescence_fragment:`#ifdef USE_IRIDESCENCE 200 const mat3 XYZ_TO_REC709 = mat3( 201 3.2404542, -0.9692660, 0.0556434, 202 -1.5371385, 1.8760108, -0.2040259, 203 -0.4985314, 0.0415560, 1.0572252 204 ); 205 vec3 Fresnel0ToIor( vec3 fresnel0 ) { 206 vec3 sqrtF0 = sqrt( fresnel0 ); 207 return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); 208 } 209 vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) { 210 return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); 211 } 212 float IorToFresnel0( float transmittedIor, float incidentIor ) { 213 return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); 214 } 215 vec3 evalSensitivity( float OPD, vec3 shift ) { 216 float phase = 2.0 * PI * OPD * 1.0e-9; 217 vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); 218 vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); 219 vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); 220 vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var ); 221 xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); 222 xyz /= 1.0685e-7; 223 vec3 rgb = XYZ_TO_REC709 * xyz; 224 return rgb; 225 } 226 vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) { 227 vec3 I; 228 float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); 229 float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); 230 float cosTheta2Sq = 1.0 - sinTheta2Sq; 231 if ( cosTheta2Sq < 0.0 ) { 232 return vec3( 1.0 ); 233 } 234 float cosTheta2 = sqrt( cosTheta2Sq ); 235 float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
236 float R12 = F_Schlick( R0, 1.0, cosTheta1 ); 237 float R21 = R12; 238 float T121 = 1.0 - R12; 239 float phi12 = 0.0; 240 if ( iridescenceIOR < outsideIOR ) phi12 = PI; 241 float phi21 = PI - phi12; 242 vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR ); 243 vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 ); 244 vec3 phi23 = vec3( 0.0 ); 245 if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; 246 if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; 247 if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; 248 float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; 249 vec3 phi = vec3( phi21 ) + phi23; 250 vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 ); 251 vec3 r123 = sqrt( R123 ); 252 vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); 253 vec3 C0 = R12 + Rs; 254 I = C0; 255 vec3 Cm = Rs - T121; 256 for ( int m = 1; m <= 2; ++ m ) { 257 Cm *= r123; 258 vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi ); 259 I += Cm * Sm; 260 } 261 return max( I, vec3( 0.0 ) ); 262 } 263#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP 264 uniform sampler2D bumpMap; 265 uniform float bumpScale; 266 vec2 dHdxy_fwd() { 267 vec2 dSTdx = dFdx( vUv ); 268 vec2 dSTdy = dFdy( vUv ); 269 float Hll = bumpScale * texture2D( bumpMap, vUv ).x; 270 float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll; 271 float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll; 272 return vec2( dBx, dBy ); 273 } 274 vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 275 vec3 vSigmaX = dFdx( surf_pos.xyz ); 276 vec3 vSigmaY = dFdy( surf_pos.xyz ); 277 vec3 vN = surf_norm; 278 vec3 R1 = cross( vSigmaY, vN ); 279 vec3 R2 = cross( vN, vSigmaX ); 280 float fDet = dot( vSigmaX, R1 ) * faceDirection; 281 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 282 return normalize( abs( fDet ) * surf_norm - vGrad ); 283 } 284#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0 285 vec4 plane; 286 #pragma unroll_loop_start 287 for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { 288 plane = clippingPlanes[ i ]; 289 if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; 290 } 291 #pragma unroll_loop_end 292 #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES 293 bool clipped = true; 294 #pragma unroll_loop_start 295 for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { 296 plane = clippingPlanes[ i ]; 297 clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; 298 } 299 #pragma unroll_loop_end 300 if ( clipped ) discard; 301 #endif 302#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 303 varying vec3 vClipPosition; 304 uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; 305#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 306 varying vec3 vClipPosition; 307#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 308 vClipPosition = - mvPosition.xyz; 309#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) 310 diffuseColor *= vColor; 311#elif defined( USE_COLOR ) 312 diffuseColor.rgb *= vColor; 313#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) 314 varying vec4 vColor; 315#elif defined( USE_COLOR ) 316 varying vec3 vColor; 317#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) 318 varying vec4 vColor; 319#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 320 varying vec3 vColor; 321#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) 322 vColor = vec4( 1.0 ); 323#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 324 vColor = vec3( 1.0 ); 325#endif 326#ifdef USE_COLOR 327 vColor *= color; 328#endif 329#ifdef USE_INSTANCING_COLOR 330 vColor.xyz *= instanceColor.xyz; 331#endif`,common:`#define PI 3.141592653589793 332#define PI2 6.283185307179586 333#define PI_HALF 1.5707963267948966 334#define RECIPROCAL_PI 0.3183098861837907 335#define RECIPROCAL_PI2 0.15915494309189535 336#define EPSILON 1e-6 337#ifndef saturate 338#define saturate( a ) clamp( a, 0.0, 1.0 ) 339#endif 340#define whiteComplement( a ) ( 1.0 - saturate( a ) ) 341float pow2( const in float x ) { return x*x; } 342vec3 pow2( const in vec3 x ) { return x*x; } 343float pow3( const in float x ) { return x*x*x; } 344float pow4( const in float x ) { float x2 = x*x; return x2*x2; } 345float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } 346float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } 347highp float rand( const in vec2 uv ) { 348 const highp float a = 12.9898, b = 78.233, c = 43758.5453; 349 highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); 350 return fract( sin( sn ) * c ); 351} 352#ifdef HIGH_PRECISION 353 float precisionSafeLength( vec3 v ) { return length( v ); } 354#else 355 float precisionSafeLength( vec3 v ) { 356 float maxComponent = max3( abs( v ) ); 357 return length( v / maxComponent ) * maxComponent; 358 } 359#endif 360struct IncidentLight { 361 vec3 color; 362 vec3 direction; 363 bool visible; 364}; 365struct ReflectedLight { 366 vec3 directDiffuse; 367 vec3 directSpecular; 368 vec3 indirectDiffuse; 369 vec3 indirectSpecular; 370}; 371struct GeometricContext { 372 vec3 position; 373 vec3 normal; 374 vec3 viewDir; 375#ifdef USE_CLEARCOAT 376 vec3 clearcoatNormal; 377#endif 378}; 379vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 380 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 381} 382vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { 383 return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); 384} 385mat3 transposeMat3( const in mat3 m ) { 386 mat3 tmp; 387 tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); 388 tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); 389 tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); 390 return tmp; 391} 392float luminance( const in vec3 rgb ) { 393 const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 ); 394 return dot( weights, rgb ); 395} 396bool isPerspectiveMatrix( mat4 m ) { 397 return m[ 2 ][ 3 ] == - 1.0; 398} 399vec2 equirectUv( in vec3 dir ) { 400 float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; 401 float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; 402 return vec2( u, v ); 403}`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV 404 #define cubeUV_minMipLevel 4.0 405 #define cubeUV_minTileSize 16.0 406 float getFace( vec3 direction ) { 407 vec3 absDirection = abs( direction ); 408 float face = - 1.0; 409 if ( absDirection.x > absDirection.z ) { 410 if ( absDirection.x > absDirection.y ) 411 face = direction.x > 0.0 ? 0.0 : 3.0; 412 else 413 face = direction.y > 0.0 ? 1.0 : 4.0; 414 } else { 415 if ( absDirection.z > absDirection.y ) 416 face = direction.z > 0.0 ? 2.0 : 5.0; 417 else 418 face = direction.y > 0.0 ? 1.0 : 4.0; 419 } 420 return face; 421 } 422 vec2 getUV( vec3 direction, float face ) { 423 vec2 uv; 424 if ( face == 0.0 ) { 425 uv = vec2( direction.z, direction.y ) / abs( direction.x ); 426 } else if ( face == 1.0 ) { 427 uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); 428 } else if ( face == 2.0 ) { 429 uv = vec2( - direction.x, direction.y ) / abs( direction.z ); 430 } else if ( face == 3.0 ) { 431 uv = vec2( - direction.z, direction.y ) / abs( direction.x ); 432 } else if ( face == 4.0 ) { 433 uv = vec2( - direction.x, direction.z ) / abs( direction.y ); 434 } else { 435 uv = vec2( direction.x, direction.y ) / abs( direction.z ); 436 } 437 return 0.5 * ( uv + 1.0 ); 438 } 439 vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { 440 float face = getFace( direction ); 441 float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); 442 mipInt = max( mipInt, cubeUV_minMipLevel ); 443 float faceSize = exp2( mipInt );
444 highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; 445 if ( face > 2.0 ) { 446 uv.y += faceSize; 447 face -= 3.0; 448 } 449 uv.x += face * faceSize; 450 uv.x += filterInt * 3.0 * cubeUV_minTileSize; 451 uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); 452 uv.x *= CUBEUV_TEXEL_WIDTH; 453 uv.y *= CUBEUV_TEXEL_HEIGHT; 454 #ifdef texture2DGradEXT 455 return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; 456 #else 457 return texture2D( envMap, uv ).rgb; 458 #endif 459 } 460 #define cubeUV_r0 1.0 461 #define cubeUV_v0 0.339 462 #define cubeUV_m0 - 2.0 463 #define cubeUV_r1 0.8 464 #define cubeUV_v1 0.276 465 #define cubeUV_m1 - 1.0 466 #define cubeUV_r4 0.4 467 #define cubeUV_v4 0.046 468 #define cubeUV_m4 2.0 469 #define cubeUV_r5 0.305 470 #define cubeUV_v5 0.016 471 #define cubeUV_m5 3.0 472 #define cubeUV_r6 0.21 473 #define cubeUV_v6 0.0038 474 #define cubeUV_m6 4.0 475 float roughnessToMip( float roughness ) { 476 float mip = 0.0; 477 if ( roughness >= cubeUV_r1 ) { 478 mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; 479 } else if ( roughness >= cubeUV_r4 ) { 480 mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; 481 } else if ( roughness >= cubeUV_r5 ) { 482 mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; 483 } else if ( roughness >= cubeUV_r6 ) { 484 mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; 485 } else { 486 mip = - 2.0 * log2( 1.16 * roughness ); } 487 return mip; 488 } 489 vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { 490 float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); 491 float mipF = fract( mip ); 492 float mipInt = floor( mip ); 493 vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); 494 if ( mipF == 0.0 ) { 495 return vec4( color0, 1.0 ); 496 } else { 497 vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); 498 return vec4( mix( color0, color1, mipF ), 1.0 ); 499 } 500 } 501#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; 502#ifdef USE_INSTANCING 503 mat3 m = mat3( instanceMatrix ); 504 transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); 505 transformedNormal = m * transformedNormal; 506#endif 507transformedNormal = normalMatrix * transformedNormal; 508#ifdef FLIP_SIDED 509 transformedNormal = - transformedNormal; 510#endif 511#ifdef USE_TANGENT 512 vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; 513 #ifdef FLIP_SIDED 514 transformedTangent = - transformedTangent; 515 #endif 516#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP 517 uniform sampler2D displacementMap; 518 uniform float displacementScale; 519 uniform float displacementBias; 520#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP 521 transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); 522#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP 523 vec4 emissiveColor = texture2D( emissiveMap, vUv ); 524 totalEmissiveRadiance *= emissiveColor.rgb; 525#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP 526 uniform sampler2D emissiveMap; 527#endif`,encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:`vec4 LinearToLinear( in vec4 value ) { 528 return value; 529} 530vec4 LinearTosRGB( in vec4 value ) { 531 return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); 532}`,envmap_fragment:`#ifdef USE_ENVMAP 533 #ifdef ENV_WORLDPOS 534 vec3 cameraToFrag; 535 if ( isOrthographic ) { 536 cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 537 } else { 538 cameraToFrag = normalize( vWorldPosition - cameraPosition ); 539 } 540 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 541 #ifdef ENVMAP_MODE_REFLECTION 542 vec3 reflectVec = reflect( cameraToFrag, worldNormal ); 543 #else 544 vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); 545 #endif 546 #else 547 vec3 reflectVec = vReflect; 548 #endif 549 #ifdef ENVMAP_TYPE_CUBE 550 vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); 551 #else 552 vec4 envColor = vec4( 0.0 ); 553 #endif 554 #ifdef ENVMAP_BLENDING_MULTIPLY 555 outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); 556 #elif defined( ENVMAP_BLENDING_MIX ) 557 outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); 558 #elif defined( ENVMAP_BLENDING_ADD ) 559 outgoingLight += envColor.xyz * specularStrength * reflectivity; 560 #endif 561#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP 562 uniform float envMapIntensity; 563 uniform float flipEnvMap; 564 #ifdef ENVMAP_TYPE_CUBE 565 uniform samplerCube envMap; 566 #else 567 uniform sampler2D envMap; 568 #endif 569 570#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP 571 uniform float reflectivity; 572 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 573 #define ENV_WORLDPOS 574 #endif 575 #ifdef ENV_WORLDPOS 576 varying vec3 vWorldPosition; 577 uniform float refractionRatio; 578 #else 579 varying vec3 vReflect; 580 #endif 581#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP 582 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 583 #define ENV_WORLDPOS 584 #endif 585 #ifdef ENV_WORLDPOS 586 587 varying vec3 vWorldPosition; 588 #else 589 varying vec3 vReflect; 590 uniform float refractionRatio; 591 #endif 592#endif`,envmap_physical_pars_fragment:`#if defined( USE_ENVMAP ) 593 vec3 getIBLIrradiance( const in vec3 normal ) { 594 #if defined( ENVMAP_TYPE_CUBE_UV ) 595 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 596 vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 ); 597 return PI * envMapColor.rgb * envMapIntensity; 598 #else 599 return vec3( 0.0 ); 600 #endif 601 } 602 vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { 603 #if defined( ENVMAP_TYPE_CUBE_UV ) 604 vec3 reflectVec = reflect( - viewDir, normal ); 605 reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); 606 reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); 607 vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness ); 608 return envMapColor.rgb * envMapIntensity; 609 #else 610 return vec3( 0.0 ); 611 #endif 612 } 613#endif`,envmap_vertex:`#ifdef USE_ENVMAP 614 #ifdef ENV_WORLDPOS 615 vWorldPosition = worldPosition.xyz; 616 #else 617 vec3 cameraToVertex; 618 if ( isOrthographic ) { 619 cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 620 } else {
621 cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); 622 } 623 vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 624 #ifdef ENVMAP_MODE_REFLECTION 625 vReflect = reflect( cameraToVertex, worldNormal ); 626 #else 627 vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); 628 #endif 629 #endif 630#endif`,fog_vertex:`#ifdef USE_FOG 631 vFogDepth = - mvPosition.z; 632#endif`,fog_pars_vertex:`#ifdef USE_FOG 633 varying float vFogDepth; 634#endif`,fog_fragment:`#ifdef USE_FOG 635 #ifdef FOG_EXP2 636 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); 637 #else 638 float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); 639 #endif 640 gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); 641#endif`,fog_pars_fragment:`#ifdef USE_FOG 642 uniform vec3 fogColor; 643 varying float vFogDepth; 644 #ifdef FOG_EXP2 645 uniform float fogDensity; 646 #else 647 uniform float fogNear; 648 uniform float fogFar; 649 #endif 650#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP 651 uniform sampler2D gradientMap; 652#endif 653vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { 654 float dotNL = dot( normal, lightDirection ); 655 vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); 656 #ifdef USE_GRADIENTMAP 657 return vec3( texture2D( gradientMap, coord ).r ); 658 #else 659 vec2 fw = fwidth( coord ) * 0.5; 660 return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); 661 #endif 662}`,lightmap_fragment:`#ifdef USE_LIGHTMAP 663 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 664 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 665 reflectedLight.indirectDiffuse += lightMapIrradiance; 666#endif`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP 667 uniform sampler2D lightMap; 668 uniform float lightMapIntensity; 669#endif`,lights_lambert_fragment:`LambertMaterial material; 670material.diffuseColor = diffuseColor.rgb; 671material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; 672struct LambertMaterial { 673 vec3 diffuseColor; 674 float specularStrength; 675}; 676void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 677 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 678 vec3 irradiance = dotNL * directLight.color; 679 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 680} 681void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 682 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 683} 684#define RE_Direct RE_Direct_Lambert 685#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; 686uniform vec3 ambientLightColor; 687uniform vec3 lightProbe[ 9 ]; 688vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { 689 float x = normal.x, y = normal.y, z = normal.z; 690 vec3 result = shCoefficients[ 0 ] * 0.886227; 691 result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; 692 result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; 693 result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; 694 result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; 695 result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; 696 result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); 697 result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; 698 result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); 699 return result; 700} 701vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { 702 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 703 vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); 704 return irradiance; 705} 706vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { 707 vec3 irradiance = ambientLightColor; 708 return irradiance; 709} 710float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { 711 #if defined ( PHYSICALLY_CORRECT_LIGHTS ) 712 float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); 713 if ( cutoffDistance > 0.0 ) { 714 distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); 715 } 716 return distanceFalloff; 717 #else 718 if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { 719 return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); 720 } 721 return 1.0; 722 #endif 723} 724float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { 725 return smoothstep( coneCosine, penumbraCosine, angleCosine ); 726} 727#if NUM_DIR_LIGHTS > 0 728 struct DirectionalLight { 729 vec3 direction; 730 vec3 color; 731 }; 732 uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; 733 void getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) { 734 light.color = directionalLight.color; 735 light.direction = directionalLight.direction; 736 light.visible = true; 737 } 738#endif 739#if NUM_POINT_LIGHTS > 0 740 struct PointLight { 741 vec3 position; 742 vec3 color; 743 float distance; 744 float decay; 745 }; 746 uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; 747 void getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) { 748 vec3 lVector = pointLight.position - geometry.position; 749 light.direction = normalize( lVector ); 750 float lightDistance = length( lVector ); 751 light.color = pointLight.color; 752 light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); 753 light.visible = ( light.color != vec3( 0.0 ) ); 754 } 755#endif
756#if NUM_SPOT_LIGHTS > 0 757 struct SpotLight { 758 vec3 position; 759 vec3 direction; 760 vec3 color; 761 float distance; 762 float decay; 763 float coneCos; 764 float penumbraCos; 765 }; 766 uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; 767 void getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) { 768 vec3 lVector = spotLight.position - geometry.position; 769 light.direction = normalize( lVector ); 770 float angleCos = dot( light.direction, spotLight.direction ); 771 float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); 772 if ( spotAttenuation > 0.0 ) { 773 float lightDistance = length( lVector ); 774 light.color = spotLight.color * spotAttenuation; 775 light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); 776 light.visible = ( light.color != vec3( 0.0 ) ); 777 } else { 778 light.color = vec3( 0.0 ); 779 light.visible = false; 780 } 781 } 782#endif 783#if NUM_RECT_AREA_LIGHTS > 0 784 struct RectAreaLight { 785 vec3 color; 786 vec3 position; 787 vec3 halfWidth; 788 vec3 halfHeight; 789 }; 790 uniform sampler2D ltc_1; uniform sampler2D ltc_2; 791 uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; 792#endif 793#if NUM_HEMI_LIGHTS > 0 794 struct HemisphereLight { 795 vec3 direction; 796 vec3 skyColor; 797 vec3 groundColor; 798 }; 799 uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; 800 vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { 801 float dotNL = dot( normal, hemiLight.direction ); 802 float hemiDiffuseWeight = 0.5 * dotNL + 0.5; 803 vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); 804 return irradiance; 805 } 806#endif`,lights_toon_fragment:`ToonMaterial material; 807material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; 808struct ToonMaterial { 809 vec3 diffuseColor; 810}; 811void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 812 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 813 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 814} 815void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 816 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 817} 818#define RE_Direct RE_Direct_Toon 819#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; 820material.diffuseColor = diffuseColor.rgb; 821material.specularColor = specular; 822material.specularShininess = shininess; 823material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; 824struct BlinnPhongMaterial { 825 vec3 diffuseColor; 826 vec3 specularColor; 827 float specularShininess; 828 float specularStrength; 829}; 830void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 831 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 832 vec3 irradiance = dotNL * directLight.color; 833 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 834 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 835} 836void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 837 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 838} 839#define RE_Direct RE_Direct_BlinnPhong 840#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; 841material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); 842vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) ); 843float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); 844material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; 845material.roughness = min( material.roughness, 1.0 ); 846#ifdef IOR 847 material.ior = ior; 848 #ifdef SPECULAR 849 float specularIntensityFactor = specularIntensity; 850 vec3 specularColorFactor = specularColor; 851 #ifdef USE_SPECULARINTENSITYMAP 852 specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a; 853 #endif 854 #ifdef USE_SPECULARCOLORMAP 855 specularColorFactor *= texture2D( specularColorMap, vUv ).rgb; 856 #endif 857 material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); 858 #else 859 float specularIntensityFactor = 1.0; 860 vec3 specularColorFactor = vec3( 1.0 ); 861 material.specularF90 = 1.0; 862 #endif 863 material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); 864#else 865 material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); 866 material.specularF90 = 1.0; 867#endif 868#ifdef USE_CLEARCOAT 869 material.clearcoat = clearcoat; 870 material.clearcoatRoughness = clearcoatRoughness; 871 material.clearcoatF0 = vec3( 0.04 ); 872 material.clearcoatF90 = 1.0; 873 #ifdef USE_CLEARCOATMAP 874 material.clearcoat *= texture2D( clearcoatMap, vUv ).x; 875 #endif 876 #ifdef USE_CLEARCOAT_ROUGHNESSMAP 877 material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y; 878 #endif 879 material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); 880 material.clearcoatRoughness += geometryRoughness; 881 material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); 882#endif
883#ifdef USE_IRIDESCENCE 884 material.iridescence = iridescence; 885 material.iridescenceIOR = iridescenceIOR; 886 #ifdef USE_IRIDESCENCEMAP 887 material.iridescence *= texture2D( iridescenceMap, vUv ).r; 888 #endif 889 #ifdef USE_IRIDESCENCE_THICKNESSMAP 890 material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum; 891 #else 892 material.iridescenceThickness = iridescenceThicknessMaximum; 893 #endif 894#endif 895#ifdef USE_SHEEN 896 material.sheenColor = sheenColor; 897 #ifdef USE_SHEENCOLORMAP 898 material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb; 899 #endif 900 material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); 901 #ifdef USE_SHEENROUGHNESSMAP 902 material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a; 903 #endif 904#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { 905 vec3 diffuseColor; 906 float roughness; 907 vec3 specularColor; 908 float specularF90; 909 #ifdef USE_CLEARCOAT 910 float clearcoat; 911 float clearcoatRoughness; 912 vec3 clearcoatF0; 913 float clearcoatF90; 914 #endif 915 #ifdef USE_IRIDESCENCE 916 float iridescence; 917 float iridescenceIOR; 918 float iridescenceThickness; 919 vec3 iridescenceFresnel; 920 vec3 iridescenceF0; 921 #endif 922 #ifdef USE_SHEEN 923 vec3 sheenColor; 924 float sheenRoughness; 925 #endif 926 #ifdef IOR 927 float ior; 928 #endif 929 #ifdef USE_TRANSMISSION 930 float transmission; 931 float transmissionAlpha; 932 float thickness; 933 float attenuationDistance; 934 vec3 attenuationColor; 935 #endif 936}; 937vec3 clearcoatSpecular = vec3( 0.0 ); 938vec3 sheenSpecular = vec3( 0.0 ); 939float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 940 float dotNV = saturate( dot( normal, viewDir ) ); 941 float r2 = roughness * roughness; 942 float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; 943 float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; 944 float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); 945 return saturate( DG * RECIPROCAL_PI ); 946} 947vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 948 float dotNV = saturate( dot( normal, viewDir ) ); 949 const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); 950 const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); 951 vec4 r = roughness * c0 + c1; 952 float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; 953 vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; 954 return fab; 955} 956vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { 957 vec2 fab = DFGApprox( normal, viewDir, roughness ); 958 return specularColor * fab.x + specularF90 * fab.y; 959} 960#ifdef USE_IRIDESCENCE 961void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { 962#else 963void 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 ) { 964#endif 965 vec2 fab = DFGApprox( normal, viewDir, roughness ); 966 #ifdef USE_IRIDESCENCE 967 vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); 968 #else 969 vec3 Fr = specularColor; 970 #endif 971 vec3 FssEss = Fr * fab.x + specularF90 * fab.y; 972 float Ess = fab.x + fab.y; 973 float Ems = 1.0 - Ess; 974 vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); 975 singleScatter += FssEss; 976 multiScatter += Fms * Ems; 977} 978#if NUM_RECT_AREA_LIGHTS > 0 979 void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 980 vec3 normal = geometry.normal; 981 vec3 viewDir = geometry.viewDir; 982 vec3 position = geometry.position; 983 vec3 lightPos = rectAreaLight.position; 984 vec3 halfWidth = rectAreaLight.halfWidth; 985 vec3 halfHeight = rectAreaLight.halfHeight; 986 vec3 lightColor = rectAreaLight.color; 987 float roughness = material.roughness; 988 vec3 rectCoords[ 4 ]; 989 rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; 990 rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; 991 rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; 992 vec2 uv = LTC_Uv( normal, viewDir, roughness ); 993 vec4 t1 = texture2D( ltc_1, uv ); 994 vec4 t2 = texture2D( ltc_2, uv ); 995 mat3 mInv = mat3( 996 vec3( t1.x, 0, t1.y ), 997 vec3( 0, 1, 0 ), 998 vec3( t1.z, 0, t1.w ) 999 ); 1000 vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); 1001 reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); 1002 reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); 1003 } 1004#endif 1005void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
1006 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 1007 vec3 irradiance = dotNL * directLight.color; 1008 #ifdef USE_CLEARCOAT 1009 float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); 1010 vec3 ccIrradiance = dotNLcc * directLight.color; 1011 clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1012 #endif 1013 #ifdef USE_SHEEN 1014 sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); 1015 #endif 1016 #ifdef USE_IRIDESCENCE 1017 reflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); 1018 #else 1019 reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness ); 1020 #endif 1021 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1022} 1023void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 1024 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1025} 1026void 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) { 1027 #ifdef USE_CLEARCOAT 1028 clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1029 #endif 1030 #ifdef USE_SHEEN 1031 sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); 1032 #endif 1033 vec3 singleScattering = vec3( 0.0 ); 1034 vec3 multiScattering = vec3( 0.0 ); 1035 vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; 1036 #ifdef USE_IRIDESCENCE 1037 computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); 1038 #else 1039 computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); 1040 #endif 1041 vec3 totalScattering = singleScattering + multiScattering; 1042 vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); 1043 reflectedLight.indirectSpecular += radiance * singleScattering; 1044 reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; 1045 reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; 1046} 1047#define RE_Direct RE_Direct_Physical 1048#define RE_Direct_RectArea RE_Direct_RectArea_Physical 1049#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical 1050#define RE_IndirectSpecular RE_IndirectSpecular_Physical 1051float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { 1052 return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); 1053}`,lights_fragment_begin:` 1054GeometricContext geometry; 1055geometry.position = - vViewPosition; 1056geometry.normal = normal; 1057geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); 1058#ifdef USE_CLEARCOAT 1059 geometry.clearcoatNormal = clearcoatNormal; 1060#endif 1061#ifdef USE_IRIDESCENCE 1062 float dotNVi = saturate( dot( normal, geometry.viewDir ) ); 1063 if ( material.iridescenceThickness == 0.0 ) { 1064 material.iridescence = 0.0; 1065 } else { 1066 material.iridescence = saturate( material.iridescence ); 1067 } 1068 if ( material.iridescence > 0.0 ) { 1069 material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); 1070 material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); 1071 } 1072#endif 1073IncidentLight directLight; 1074#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) 1075 PointLight pointLight; 1076 #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 1077 PointLightShadow pointLightShadow; 1078 #endif 1079 #pragma unroll_loop_start 1080 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 1081 pointLight = pointLights[ i ]; 1082 getPointLightInfo( pointLight, geometry, directLight ); 1083 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) 1084 pointLightShadow = pointLightShadows[ i ]; 1085 directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; 1086 #endif 1087 RE_Direct( directLight, geometry, material, reflectedLight ); 1088 } 1089 #pragma unroll_loop_end 1090#endif
1091#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) 1092 SpotLight spotLight; 1093 vec4 spotColor; 1094 vec3 spotLightCoord; 1095 bool inSpotLightMap; 1096 #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 1097 SpotLightShadow spotLightShadow; 1098 #endif 1099 #pragma unroll_loop_start 1100 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 1101 spotLight = spotLights[ i ]; 1102 getSpotLightInfo( spotLight, geometry, directLight ); 1103 #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1104 #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX 1105 #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1106 #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS 1107 #else 1108 #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1109 #endif 1110 #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) 1111 spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; 1112 inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); 1113 spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); 1114 directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; 1115 #endif 1116 #undef SPOT_LIGHT_MAP_INDEX 1117 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1118 spotLightShadow = spotLightShadows[ i ]; 1119 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1120 #endif 1121 RE_Direct( directLight, geometry, material, reflectedLight ); 1122 } 1123 #pragma unroll_loop_end 1124#endif 1125#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) 1126 DirectionalLight directionalLight; 1127 #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 1128 DirectionalLightShadow directionalLightShadow; 1129 #endif 1130 #pragma unroll_loop_start 1131 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 1132 directionalLight = directionalLights[ i ]; 1133 getDirectionalLightInfo( directionalLight, geometry, directLight ); 1134 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) 1135 directionalLightShadow = directionalLightShadows[ i ]; 1136 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1137 #endif 1138 RE_Direct( directLight, geometry, material, reflectedLight ); 1139 } 1140 #pragma unroll_loop_end 1141#endif 1142#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) 1143 RectAreaLight rectAreaLight; 1144 #pragma unroll_loop_start 1145 for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { 1146 rectAreaLight = rectAreaLights[ i ]; 1147 RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight ); 1148 } 1149 #pragma unroll_loop_end 1150#endif 1151#if defined( RE_IndirectDiffuse ) 1152 vec3 iblIrradiance = vec3( 0.0 ); 1153 vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); 1154 irradiance += getLightProbeIrradiance( lightProbe, geometry.normal ); 1155 #if ( NUM_HEMI_LIGHTS > 0 ) 1156 #pragma unroll_loop_start 1157 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 1158 irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 1159 } 1160 #pragma unroll_loop_end 1161 #endif 1162#endif 1163#if defined( RE_IndirectSpecular ) 1164 vec3 radiance = vec3( 0.0 ); 1165 vec3 clearcoatRadiance = vec3( 0.0 ); 1166#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) 1167 #ifdef USE_LIGHTMAP 1168 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 1169 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 1170 irradiance += lightMapIrradiance; 1171 #endif 1172 #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) 1173 iblIrradiance += getIBLIrradiance( geometry.normal ); 1174 #endif 1175#endif 1176#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) 1177 radiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness ); 1178 #ifdef USE_CLEARCOAT 1179 clearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness ); 1180 #endif 1181#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) 1182 RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight ); 1183#endif 1184#if defined( RE_IndirectSpecular ) 1185 RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight ); 1186#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1187 gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; 1188#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1189 uniform float logDepthBufFC; 1190 varying float vFragDepth; 1191 varying float vIsPerspective; 1192#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF 1193 #ifdef USE_LOGDEPTHBUF_EXT 1194 varying float vFragDepth; 1195 varying float vIsPerspective; 1196 #else 1197 uniform float logDepthBufFC; 1198 #endif 1199#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF 1200 #ifdef USE_LOGDEPTHBUF_EXT 1201 vFragDepth = 1.0 + gl_Position.w; 1202 vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); 1203 #else 1204 if ( isPerspectiveMatrix( projectionMatrix ) ) { 1205 gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0; 1206 gl_Position.z *= gl_Position.w; 1207 } 1208 #endif 1209#endif`,map_fragment:`#ifdef USE_MAP 1210 vec4 sampledDiffuseColor = texture2D( map, vUv ); 1211 #ifdef DECODE_VIDEO_TEXTURE 1212 sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); 1213 #endif 1214 diffuseColor *= sampledDiffuseColor; 1215#endif`,map_pars_fragment:`#ifdef USE_MAP 1216 uniform sampler2D map; 1217#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1218 vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; 1219#endif 1220#ifdef USE_MAP 1221 diffuseColor *= texture2D( map, uv ); 1222#endif 1223#ifdef USE_ALPHAMAP 1224 diffuseColor.a *= texture2D( alphaMap, uv ).g; 1225#endif`,map_particle_pars_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1226 uniform mat3 uvTransform; 1227#endif 1228#ifdef USE_MAP 1229 uniform sampler2D map; 1230#endif 1231#ifdef USE_ALPHAMAP 1232 uniform sampler2D alphaMap; 1233#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; 1234#ifdef USE_METALNESSMAP 1235 vec4 texelMetalness = texture2D( metalnessMap, vUv ); 1236 metalnessFactor *= texelMetalness.b; 1237#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP 1238 uniform sampler2D metalnessMap; 1239#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE ) 1240 vColor *= morphTargetBaseInfluence; 1241 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1242 #if defined( USE_COLOR_ALPHA ) 1243 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; 1244 #elif defined( USE_COLOR ) 1245 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; 1246 #endif 1247 } 1248#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS 1249 objectNormal *= morphTargetBaseInfluence; 1250 #ifdef MORPHTARGETS_TEXTURE 1251 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1252 if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; 1253 } 1254 #else 1255 objectNormal += morphNormal0 * morphTargetInfluences[ 0 ]; 1256 objectNormal += morphNormal1 * morphTargetInfluences[ 1 ]; 1257 objectNormal += morphNormal2 * morphTargetInfluences[ 2 ]; 1258 objectNormal += morphNormal3 * morphTargetInfluences[ 3 ]; 1259 #endif 1260#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS 1261 uniform float morphTargetBaseInfluence; 1262 #ifdef MORPHTARGETS_TEXTURE 1263 uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; 1264 uniform sampler2DArray morphTargetsTexture; 1265 uniform ivec2 morphTargetsTextureSize; 1266 vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { 1267 int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; 1268 int y = texelIndex / morphTargetsTextureSize.x; 1269 int x = texelIndex - y * morphTargetsTextureSize.x; 1270 ivec3 morphUV = ivec3( x, y, morphTargetIndex ); 1271 return texelFetch( morphTargetsTexture, morphUV, 0 ); 1272 } 1273 #else 1274 #ifndef USE_MORPHNORMALS 1275 uniform float morphTargetInfluences[ 8 ]; 1276 #else 1277 uniform float morphTargetInfluences[ 4 ]; 1278 #endif 1279 #endif 1280#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS 1281 transformed *= morphTargetBaseInfluence; 1282 #ifdef MORPHTARGETS_TEXTURE 1283 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1284 if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; 1285 } 1286 #else 1287 transformed += morphTarget0 * morphTargetInfluences[ 0 ]; 1288 transformed += morphTarget1 * morphTargetInfluences[ 1 ]; 1289 transformed += morphTarget2 * morphTargetInfluences[ 2 ]; 1290 transformed += morphTarget3 * morphTargetInfluences[ 3 ]; 1291 #ifndef USE_MORPHNORMALS 1292 transformed += morphTarget4 * morphTargetInfluences[ 4 ]; 1293 transformed += morphTarget5 * morphTargetInfluences[ 5 ]; 1294 transformed += morphTarget6 * morphTargetInfluences[ 6 ]; 1295 transformed += morphTarget7 * morphTargetInfluences[ 7 ]; 1296 #endif 1297 #endif 1298#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; 1299#ifdef FLAT_SHADED 1300 vec3 fdx = dFdx( vViewPosition ); 1301 vec3 fdy = dFdy( vViewPosition ); 1302 vec3 normal = normalize( cross( fdx, fdy ) ); 1303#else 1304 vec3 normal = normalize( vNormal ); 1305 #ifdef DOUBLE_SIDED 1306 normal = normal * faceDirection; 1307 #endif 1308 #ifdef USE_TANGENT 1309 vec3 tangent = normalize( vTangent ); 1310 vec3 bitangent = normalize( vBitangent ); 1311 #ifdef DOUBLE_SIDED 1312 tangent = tangent * faceDirection; 1313 bitangent = bitangent * faceDirection; 1314 #endif 1315 #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP ) 1316 mat3 vTBN = mat3( tangent, bitangent, normal ); 1317 #endif 1318 #endif 1319#endif 1320vec3 geometryNormal = normal;`,normal_fragment_maps:`#ifdef OBJECTSPACE_NORMALMAP 1321 normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1322 #ifdef FLIP_SIDED 1323 normal = - normal; 1324 #endif 1325 #ifdef DOUBLE_SIDED 1326 normal = normal * faceDirection; 1327 #endif 1328 normal = normalize( normalMatrix * normal ); 1329#elif defined( TANGENTSPACE_NORMALMAP ) 1330 vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1331 mapN.xy *= normalScale; 1332 #ifdef USE_TANGENT 1333 normal = normalize( vTBN * mapN ); 1334 #else
1335 normal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection ); 1336 #endif 1337#elif defined( USE_BUMPMAP ) 1338 normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); 1339#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED 1340 varying vec3 vNormal; 1341 #ifdef USE_TANGENT 1342 varying vec3 vTangent; 1343 varying vec3 vBitangent; 1344 #endif 1345#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED 1346 varying vec3 vNormal; 1347 #ifdef USE_TANGENT 1348 varying vec3 vTangent; 1349 varying vec3 vBitangent; 1350 #endif 1351#endif`,normal_vertex:`#ifndef FLAT_SHADED 1352 vNormal = normalize( transformedNormal ); 1353 #ifdef USE_TANGENT 1354 vTangent = normalize( transformedTangent ); 1355 vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); 1356 #endif 1357#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP 1358 uniform sampler2D normalMap; 1359 uniform vec2 normalScale; 1360#endif 1361#ifdef OBJECTSPACE_NORMALMAP 1362 uniform mat3 normalMatrix; 1363#endif 1364#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) 1365 vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) { 1366 vec3 q0 = dFdx( eye_pos.xyz ); 1367 vec3 q1 = dFdy( eye_pos.xyz ); 1368 vec2 st0 = dFdx( vUv.st ); 1369 vec2 st1 = dFdy( vUv.st ); 1370 vec3 N = surf_norm; 1371 vec3 q1perp = cross( q1, N ); 1372 vec3 q0perp = cross( N, q0 ); 1373 vec3 T = q1perp * st0.x + q0perp * st1.x; 1374 vec3 B = q1perp * st0.y + q0perp * st1.y; 1375 float det = max( dot( T, T ), dot( B, B ) ); 1376 float scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det ); 1377 return normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z ); 1378 } 1379#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT 1380 vec3 clearcoatNormal = geometryNormal; 1381#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP 1382 vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0; 1383 clearcoatMapN.xy *= clearcoatNormalScale; 1384 #ifdef USE_TANGENT 1385 clearcoatNormal = normalize( vTBN * clearcoatMapN ); 1386 #else 1387 clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection ); 1388 #endif 1389#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP 1390 uniform sampler2D clearcoatMap; 1391#endif 1392#ifdef USE_CLEARCOAT_ROUGHNESSMAP 1393 uniform sampler2D clearcoatRoughnessMap; 1394#endif 1395#ifdef USE_CLEARCOAT_NORMALMAP 1396 uniform sampler2D clearcoatNormalMap; 1397 uniform vec2 clearcoatNormalScale; 1398#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP 1399 uniform sampler2D iridescenceMap; 1400#endif 1401#ifdef USE_IRIDESCENCE_THICKNESSMAP 1402 uniform sampler2D iridescenceThicknessMap; 1403#endif`,output_fragment:`#ifdef OPAQUE 1404diffuseColor.a = 1.0; 1405#endif 1406#ifdef USE_TRANSMISSION 1407diffuseColor.a *= material.transmissionAlpha + 0.1; 1408#endif 1409gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { 1410 return normalize( normal ) * 0.5 + 0.5; 1411} 1412vec3 unpackRGBToNormal( const in vec3 rgb ) { 1413 return 2.0 * rgb.xyz - 1.0; 1414} 1415const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.; 1416const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); 1417const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); 1418const float ShiftRight8 = 1. / 256.; 1419vec4 packDepthToRGBA( const in float v ) { 1420 vec4 r = vec4( fract( v * PackFactors ), v ); 1421 r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale; 1422} 1423float unpackRGBAToDepth( const in vec4 v ) { 1424 return dot( v, UnpackFactors ); 1425} 1426vec2 packDepthToRG( in highp float v ) { 1427 return packDepthToRGBA( v ).yx; 1428} 1429float unpackRGToDepth( const in highp vec2 v ) { 1430 return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) ); 1431} 1432vec4 pack2HalfToRGBA( vec2 v ) { 1433 vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); 1434 return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); 1435} 1436vec2 unpackRGBATo2Half( vec4 v ) { 1437 return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); 1438} 1439float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { 1440 return ( viewZ + near ) / ( near - far ); 1441} 1442float orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) { 1443 return linearClipZ * ( near - far ) - near; 1444} 1445float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { 1446 return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); 1447} 1448float perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) { 1449 return ( near * far ) / ( ( far - near ) * invClipZ - far ); 1450}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA 1451 gl_FragColor.rgb *= gl_FragColor.a; 1452#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); 1453#ifdef USE_INSTANCING 1454 mvPosition = instanceMatrix * mvPosition; 1455#endif 1456mvPosition = modelViewMatrix * mvPosition; 1457gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING 1458 gl_FragColor.rgb = dithering( gl_FragColor.rgb ); 1459#endif`,dithering_pars_fragment:`#ifdef DITHERING 1460 vec3 dithering( vec3 color ) { 1461 float grid_position = rand( gl_FragCoord.xy ); 1462 vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); 1463 dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); 1464 return color + dither_shift_RGB; 1465 } 1466#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; 1467#ifdef USE_ROUGHNESSMAP 1468 vec4 texelRoughness = texture2D( roughnessMap, vUv ); 1469 roughnessFactor *= texelRoughness.g; 1470#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP 1471 uniform sampler2D roughnessMap;
1472#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 1473 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1474#endif 1475#if NUM_SPOT_LIGHT_MAPS > 0 1476 uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; 1477#endif 1478#ifdef USE_SHADOWMAP 1479 #if NUM_DIR_LIGHT_SHADOWS > 0 1480 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 1481 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1482 struct DirectionalLightShadow { 1483 float shadowBias; 1484 float shadowNormalBias; 1485 float shadowRadius; 1486 vec2 shadowMapSize; 1487 }; 1488 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1489 #endif 1490 #if NUM_SPOT_LIGHT_SHADOWS > 0 1491 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 1492 struct SpotLightShadow { 1493 float shadowBias; 1494 float shadowNormalBias; 1495 float shadowRadius; 1496 vec2 shadowMapSize; 1497 }; 1498 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1499 #endif 1500 #if NUM_POINT_LIGHT_SHADOWS > 0 1501 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 1502 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1503 struct PointLightShadow { 1504 float shadowBias; 1505 float shadowNormalBias; 1506 float shadowRadius; 1507 vec2 shadowMapSize; 1508 float shadowCameraNear; 1509 float shadowCameraFar; 1510 }; 1511 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1512 #endif 1513 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 1514 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 1515 } 1516 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 1517 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 1518 } 1519 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 1520 float occlusion = 1.0; 1521 vec2 distribution = texture2DDistribution( shadow, uv ); 1522 float hard_shadow = step( compare , distribution.x ); 1523 if (hard_shadow != 1.0 ) { 1524 float distance = compare - distribution.x ; 1525 float variance = max( 0.00000, distribution.y * distribution.y ); 1526 float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 1527 } 1528 return occlusion; 1529 } 1530 float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 1531 float shadow = 1.0; 1532 shadowCoord.xyz /= shadowCoord.w; 1533 shadowCoord.z += shadowBias; 1534 bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; 1535 bool frustumTest = inFrustum && shadowCoord.z <= 1.0; 1536 if ( frustumTest ) { 1537 #if defined( SHADOWMAP_TYPE_PCF ) 1538 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1539 float dx0 = - texelSize.x * shadowRadius; 1540 float dy0 = - texelSize.y * shadowRadius; 1541 float dx1 = + texelSize.x * shadowRadius; 1542 float dy1 = + texelSize.y * shadowRadius; 1543 float dx2 = dx0 / 2.0; 1544 float dy2 = dy0 / 2.0; 1545 float dx3 = dx1 / 2.0; 1546 float dy3 = dy1 / 2.0; 1547 shadow = ( 1548 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + 1549 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + 1550 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + 1551 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + 1552 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + 1553 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + 1554 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + 1555 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + 1556 texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + 1557 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + 1558 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + 1559 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + 1560 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + 1561 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + 1562 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + 1563 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + 1564 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) 1565 ) * ( 1.0 / 17.0 ); 1566 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 1567 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1568 float dx = texelSize.x; 1569 float dy = texelSize.y; 1570 vec2 uv = shadowCoord.xy;
1571 vec2 f = fract( uv * shadowMapSize + 0.5 ); 1572 uv -= f * texelSize; 1573 shadow = ( 1574 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 1575 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 1576 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 1577 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 1578 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 1579 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 1580 f.x ) + 1581 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 1582 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 1583 f.x ) + 1584 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 1585 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 1586 f.y ) + 1587 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 1588 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 1589 f.y ) + 1590 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 1591 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 1592 f.x ), 1593 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 1594 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 1595 f.x ), 1596 f.y ) 1597 ) * ( 1.0 / 9.0 ); 1598 #elif defined( SHADOWMAP_TYPE_VSM ) 1599 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 1600 #else 1601 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 1602 #endif 1603 } 1604 return shadow; 1605 } 1606 vec2 cubeToUV( vec3 v, float texelSizeY ) { 1607 vec3 absV = abs( v ); 1608 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 1609 absV *= scaleToCube; 1610 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 1611 vec2 planar = v.xy; 1612 float almostATexel = 1.5 * texelSizeY; 1613 float almostOne = 1.0 - almostATexel; 1614 if ( absV.z >= almostOne ) { 1615 if ( v.z > 0.0 ) 1616 planar.x = 4.0 - v.x; 1617 } else if ( absV.x >= almostOne ) { 1618 float signX = sign( v.x ); 1619 planar.x = v.z * signX + 2.0 * signX; 1620 } else if ( absV.y >= almostOne ) { 1621 float signY = sign( v.y ); 1622 planar.x = v.x + 2.0 * signY + 2.0; 1623 planar.y = v.z * signY - 2.0; 1624 } 1625 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 1626 } 1627 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 1628 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 1629 vec3 lightToPosition = shadowCoord.xyz; 1630 float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; 1631 vec3 bd3D = normalize( lightToPosition ); 1632 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) 1633 vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; 1634 return ( 1635 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + 1636 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + 1637 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + 1638 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + 1639 texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + 1640 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + 1641 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + 1642 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + 1643 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) 1644 ) * ( 1.0 / 9.0 ); 1645 #else 1646 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); 1647 #endif 1648 } 1649#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 1650 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; 1651 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1652#endif 1653#ifdef USE_SHADOWMAP 1654 #if NUM_DIR_LIGHT_SHADOWS > 0 1655 uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; 1656 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1657 struct DirectionalLightShadow { 1658 float shadowBias; 1659 float shadowNormalBias; 1660 float shadowRadius; 1661 vec2 shadowMapSize; 1662 }; 1663 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1664 #endif
1665 #if NUM_SPOT_LIGHT_SHADOWS > 0 1666 struct SpotLightShadow { 1667 float shadowBias; 1668 float shadowNormalBias; 1669 float shadowRadius; 1670 vec2 shadowMapSize; 1671 }; 1672 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1673 #endif 1674 #if NUM_POINT_LIGHT_SHADOWS > 0 1675 uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; 1676 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1677 struct PointLightShadow { 1678 float shadowBias; 1679 float shadowNormalBias; 1680 float shadowRadius; 1681 vec2 shadowMapSize; 1682 float shadowCameraNear; 1683 float shadowCameraFar; 1684 }; 1685 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1686 #endif 1687#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) 1688 vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 1689 vec4 shadowWorldPosition; 1690#endif 1691#if defined( USE_SHADOWMAP ) 1692 #if NUM_DIR_LIGHT_SHADOWS > 0 1693 #pragma unroll_loop_start 1694 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1695 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); 1696 vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; 1697 } 1698 #pragma unroll_loop_end 1699 #endif 1700 #if NUM_POINT_LIGHT_SHADOWS > 0 1701 #pragma unroll_loop_start 1702 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1703 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); 1704 vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; 1705 } 1706 #pragma unroll_loop_end 1707 #endif 1708#endif 1709#if NUM_SPOT_LIGHT_COORDS > 0 1710 #pragma unroll_loop_start 1711 for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { 1712 shadowWorldPosition = worldPosition; 1713 #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1714 shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; 1715 #endif 1716 vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; 1717 } 1718 #pragma unroll_loop_end 1719#endif`,shadowmask_pars_fragment:`float getShadowMask() { 1720 float shadow = 1.0; 1721 #ifdef USE_SHADOWMAP 1722 #if NUM_DIR_LIGHT_SHADOWS > 0 1723 DirectionalLightShadow directionalLight; 1724 #pragma unroll_loop_start 1725 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1726 directionalLight = directionalLightShadows[ i ]; 1727 shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1728 } 1729 #pragma unroll_loop_end 1730 #endif 1731 #if NUM_SPOT_LIGHT_SHADOWS > 0 1732 SpotLightShadow spotLight; 1733 #pragma unroll_loop_start 1734 for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { 1735 spotLight = spotLightShadows[ i ]; 1736 shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1737 } 1738 #pragma unroll_loop_end 1739 #endif 1740 #if NUM_POINT_LIGHT_SHADOWS > 0 1741 PointLightShadow pointLight; 1742 #pragma unroll_loop_start 1743 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1744 pointLight = pointLightShadows[ i ]; 1745 shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; 1746 } 1747 #pragma unroll_loop_end 1748 #endif 1749 #endif 1750 return shadow; 1751}`,skinbase_vertex:`#ifdef USE_SKINNING 1752 mat4 boneMatX = getBoneMatrix( skinIndex.x ); 1753 mat4 boneMatY = getBoneMatrix( skinIndex.y ); 1754 mat4 boneMatZ = getBoneMatrix( skinIndex.z ); 1755 mat4 boneMatW = getBoneMatrix( skinIndex.w ); 1756#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING 1757 uniform mat4 bindMatrix; 1758 uniform mat4 bindMatrixInverse; 1759 uniform highp sampler2D boneTexture; 1760 uniform int boneTextureSize; 1761 mat4 getBoneMatrix( const in float i ) { 1762 float j = i * 4.0; 1763 float x = mod( j, float( boneTextureSize ) ); 1764 float y = floor( j / float( boneTextureSize ) ); 1765 float dx = 1.0 / float( boneTextureSize ); 1766 float dy = 1.0 / float( boneTextureSize ); 1767 y = dy * ( y + 0.5 ); 1768 vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) ); 1769 vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) ); 1770 vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) ); 1771 vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) ); 1772 mat4 bone = mat4( v1, v2, v3, v4 ); 1773 return bone; 1774 } 1775#endif`,skinning_vertex:`#ifdef USE_SKINNING 1776 vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); 1777 vec4 skinned = vec4( 0.0 ); 1778 skinned += boneMatX * skinVertex * skinWeight.x; 1779 skinned += boneMatY * skinVertex * skinWeight.y; 1780 skinned += boneMatZ * skinVertex * skinWeight.z; 1781 skinned += boneMatW * skinVertex * skinWeight.w; 1782 transformed = ( bindMatrixInverse * skinned ).xyz; 1783#endif`,skinnormal_vertex:`#ifdef USE_SKINNING 1784 mat4 skinMatrix = mat4( 0.0 ); 1785 skinMatrix += skinWeight.x * boneMatX; 1786 skinMatrix += skinWeight.y * boneMatY; 1787 skinMatrix += skinWeight.z * boneMatZ; 1788 skinMatrix += skinWeight.w * boneMatW; 1789 skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; 1790 objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; 1791 #ifdef USE_TANGENT 1792 objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; 1793 #endif 1794#endif`,specularmap_fragment:`float specularStrength; 1795#ifdef USE_SPECULARMAP 1796 vec4 texelSpecular = texture2D( specularMap, vUv ); 1797 specularStrength = texelSpecular.r; 1798#else 1799 specularStrength = 1.0; 1800#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP 1801 uniform sampler2D specularMap; 1802#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) 1803 gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); 1804#endif`,tonemapping_pars_fragment:`#ifndef saturate 1805#define saturate( a ) clamp( a, 0.0, 1.0 ) 1806#endif 1807uniform float toneMappingExposure; 1808vec3 LinearToneMapping( vec3 color ) { 1809 return toneMappingExposure * color; 1810} 1811vec3 ReinhardToneMapping( vec3 color ) { 1812 color *= toneMappingExposure; 1813 return saturate( color / ( vec3( 1.0 ) + color ) ); 1814} 1815vec3 OptimizedCineonToneMapping( vec3 color ) { 1816 color *= toneMappingExposure; 1817 color = max( vec3( 0.0 ), color - 0.004 ); 1818 return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); 1819} 1820vec3 RRTAndODTFit( vec3 v ) { 1821 vec3 a = v * ( v + 0.0245786 ) - 0.000090537; 1822 vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; 1823 return a / b; 1824} 1825vec3 ACESFilmicToneMapping( vec3 color ) { 1826 const mat3 ACESInputMat = mat3( 1827 vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), 1828 vec3( 0.04823, 0.01566, 0.83777 ) 1829 ); 1830 const mat3 ACESOutputMat = mat3( 1831 vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), 1832 vec3( -0.07367, -0.00605, 1.07602 ) 1833 ); 1834 color *= toneMappingExposure / 0.6; 1835 color = ACESInputMat * color; 1836 color = RRTAndODTFit( color ); 1837 color = ACESOutputMat * color; 1838 return saturate( color ); 1839} 1840vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION 1841 material.transmission = transmission; 1842 material.transmissionAlpha = 1.0; 1843 material.thickness = thickness; 1844 material.attenuationDistance = attenuationDistance; 1845 material.attenuationColor = attenuationColor; 1846 #ifdef USE_TRANSMISSIONMAP 1847 material.transmission *= texture2D( transmissionMap, vUv ).r; 1848 #endif 1849 #ifdef USE_THICKNESSMAP 1850 material.thickness *= texture2D( thicknessMap, vUv ).g;
1851 #endif 1852 vec3 pos = vWorldPosition; 1853 vec3 v = normalize( cameraPosition - pos ); 1854 vec3 n = inverseTransformDirection( normal, viewMatrix ); 1855 vec4 transmission = getIBLVolumeRefraction( 1856 n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, 1857 pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness, 1858 material.attenuationColor, material.attenuationDistance ); 1859 material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); 1860 totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); 1861#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION 1862 uniform float transmission; 1863 uniform float thickness; 1864 uniform float attenuationDistance; 1865 uniform vec3 attenuationColor; 1866 #ifdef USE_TRANSMISSIONMAP 1867 uniform sampler2D transmissionMap; 1868 #endif 1869 #ifdef USE_THICKNESSMAP 1870 uniform sampler2D thicknessMap; 1871 #endif 1872 uniform vec2 transmissionSamplerSize; 1873 uniform sampler2D transmissionSamplerMap; 1874 uniform mat4 modelMatrix; 1875 uniform mat4 projectionMatrix; 1876 varying vec3 vWorldPosition; 1877 vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { 1878 vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); 1879 vec3 modelScale; 1880 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 1881 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 1882 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 1883 return normalize( refractionVector ) * thickness * modelScale; 1884 } 1885 float applyIorToRoughness( const in float roughness, const in float ior ) { 1886 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 1887 } 1888 vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { 1889 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 1890 #ifdef texture2DLodEXT 1891 return texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1892 #else 1893 return texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1894 #endif 1895 } 1896 vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { 1897 if ( isinf( attenuationDistance ) ) { 1898 return radiance; 1899 } else { 1900 vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; 1901 vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance * radiance; 1902 } 1903 } 1904 vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, 1905 const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, 1906 const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness, 1907 const in vec3 attenuationColor, const in float attenuationDistance ) { 1908 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 1909 vec3 refractedRayExit = position + transmissionRay; 1910 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 1911 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 1912 refractionCoords += 1.0; 1913 refractionCoords /= 2.0; 1914 vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); 1915 vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); 1916 vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); 1917 return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); 1918 } 1919#endif`,uv_pars_fragment:`#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) ) 1920 varying vec2 vUv; 1921#endif`,uv_pars_vertex:`#ifdef USE_UV 1922 #ifdef UVS_VERTEX_ONLY 1923 vec2 vUv; 1924 #else 1925 varying vec2 vUv; 1926 #endif 1927 uniform mat3 uvTransform; 1928#endif`,uv_vertex:`#ifdef USE_UV 1929 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1930#endif`,uv2_pars_fragment:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1931 varying vec2 vUv2; 1932#endif`,uv2_pars_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1933 attribute vec2 uv2; 1934 varying vec2 vUv2; 1935 uniform mat3 uv2Transform; 1936#endif`,uv2_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1937 vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy; 1938#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_L
1938IGHT_COORDS > 0 1939 vec4 worldPosition = vec4( transformed, 1.0 ); 1940 #ifdef USE_INSTANCING 1941 worldPosition = instanceMatrix * worldPosition; 1942 #endif 1943 worldPosition = modelMatrix * worldPosition; 1944#endif`,background_vert:`varying vec2 vUv; 1945uniform mat3 uvTransform; 1946void main() { 1947 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1948 gl_Position = vec4( position.xy, 1.0, 1.0 ); 1949}`,background_frag:`uniform sampler2D t2D; 1950uniform float backgroundIntensity; 1951varying vec2 vUv; 1952void main() { 1953 vec4 texColor = texture2D( t2D, vUv ); 1954 #ifdef DECODE_VIDEO_TEXTURE 1955 texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); 1956 #endif 1957 texColor.rgb *= backgroundIntensity; 1958 gl_FragColor = texColor; 1959 #include <tonemapping_fragment> 1960 #include <encodings_fragment> 1961}`,backgroundCube_vert:`varying vec3 vWorldDirection; 1962#include <common> 1963void main() { 1964 vWorldDirection = transformDirection( position, modelMatrix ); 1965 #include <begin_vertex> 1966 #include <project_vertex> 1967 gl_Position.z = gl_Position.w; 1968}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE 1969 uniform samplerCube envMap; 1970#elif defined( ENVMAP_TYPE_CUBE_UV ) 1971 uniform sampler2D envMap; 1972#endif 1973uniform float flipEnvMap; 1974uniform float backgroundBlurriness; 1975uniform float backgroundIntensity; 1976varying vec3 vWorldDirection; 1977#include <cube_uv_reflection_fragment> 1978void main() { 1979 #ifdef ENVMAP_TYPE_CUBE 1980 vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); 1981 #elif defined( ENVMAP_TYPE_CUBE_UV ) 1982 vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness ); 1983 #else 1984 vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 1985 #endif 1986 texColor.rgb *= backgroundIntensity; 1987 gl_FragColor = texColor; 1988 #include <tonemapping_fragment> 1989 #include <encodings_fragment> 1990}`,cube_vert:`varying vec3 vWorldDirection; 1991#include <common> 1992void main() { 1993 vWorldDirection = transformDirection( position, modelMatrix ); 1994 #include <begin_vertex> 1995 #include <project_vertex> 1996 gl_Position.z = gl_Position.w; 1997}`,cube_frag:`uniform samplerCube tCube; 1998uniform float tFlip; 1999uniform float opacity; 2000varying vec3 vWorldDirection; 2001void main() { 2002 vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); 2003 gl_FragColor = texColor; 2004 gl_FragColor.a *= opacity; 2005 #include <tonemapping_fragment> 2006 #include <encodings_fragment> 2007}`,depth_vert:`#include <common> 2008#include <uv_pars_vertex> 2009#include <displacementmap_pars_vertex> 2010#include <morphtarget_pars_vertex> 2011#include <skinning_pars_vertex> 2012#include <logdepthbuf_pars_vertex> 2013#include <clipping_planes_pars_vertex> 2014varying vec2 vHighPrecisionZW; 2015void main() { 2016 #include <uv_vertex> 2017 #include <skinbase_vertex> 2018 #ifdef USE_DISPLACEMENTMAP 2019 #include <beginnormal_vertex> 2020 #include <morphnormal_vertex> 2021 #include <skinnormal_vertex> 2022 #endif 2023 #include <begin_vertex> 2024 #include <morphtarget_vertex> 2025 #include <skinning_vertex> 2026 #include <displacementmap_vertex> 2027 #include <project_vertex> 2028 #include <logdepthbuf_vertex> 2029 #include <clipping_planes_vertex> 2030 vHighPrecisionZW = gl_Position.zw; 2031}`,depth_frag:`#if DEPTH_PACKING == 3200 2032 uniform float opacity; 2033#endif 2034#include <common> 2035#include <packing> 2036#include <uv_pars_fragment> 2037#include <map_pars_fragment> 2038#include <alphamap_pars_fragment> 2039#include <alphatest_pars_fragment> 2040#include <logdepthbuf_pars_fragment> 2041#include <clipping_planes_pars_fragment> 2042varying vec2 vHighPrecisionZW; 2043void main() { 2044 #include <clipping_planes_fragment> 2045 vec4 diffuseColor = vec4( 1.0 ); 2046 #if DEPTH_PACKING == 3200 2047 diffuseColor.a = opacity; 2048 #endif 2049 #include <map_fragment> 2050 #include <alphamap_fragment> 2051 #include <alphatest_fragment> 2052 #include <logdepthbuf_fragment> 2053 float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; 2054 #if DEPTH_PACKING == 3200 2055 gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); 2056 #elif DEPTH_PACKING == 3201 2057 gl_FragColor = packDepthToRGBA( fragCoordZ ); 2058 #endif 2059}`,distanceRGBA_vert:`#define DISTANCE 2060varying vec3 vWorldPosition; 2061#include <common> 2062#include <uv_pars_vertex> 2063#include <displacementmap_pars_vertex> 2064#include <morphtarget_pars_vertex> 2065#include <skinning_pars_vertex> 2066#include <clipping_planes_pars_vertex> 2067void main() { 2068 #include <uv_vertex> 2069 #include <skinbase_vertex> 2070 #ifdef USE_DISPLACEMENTMAP 2071 #include <beginnormal_vertex> 2072 #include <morphnormal_vertex> 2073 #include <skinnormal_vertex> 2074 #endif 2075 #include <begin_vertex> 2076 #include <morphtarget_vertex> 2077 #include <skinning_vertex> 2078 #include <displacementmap_vertex> 2079 #include <project_vertex> 2080 #include <worldpos_vertex> 2081 #include <clipping_planes_vertex> 2082 vWorldPosition = worldPosition.xyz; 2083}`,distanceRGBA_frag:`#define DISTANCE 2084uniform vec3 referencePosition; 2085uniform float nearDistance; 2086uniform float farDistance; 2087varying vec3 vWorldPosition; 2088#include <common> 2089#include <packing> 2090#include <uv_pars_fragment> 2091#include <map_pars_fragment> 2092#include <alphamap_pars_fragment> 2093#include <alphatest_pars_fragment> 2094#include <clipping_planes_pars_fragment> 2095void main () { 2096 #include <clipping_planes_fragment> 2097 vec4 diffuseColor = vec4( 1.0 ); 2098 #include <map_fragment> 2099 #include <alphamap_fragment> 2100 #include <alphatest_fragment> 2101 float dist = length( vWorldPosition - referencePosition ); 2102 dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); 2103 dist = saturate( dist ); 2104 gl_FragColor = packDepthToRGBA( dist ); 2105}`,equirect_vert:`varying vec3 vWorldDirection; 2106#include <common> 2107void main() { 2108 vWorldDirection = transformDirection( position, modelMatrix ); 2109 #include <begin_vertex> 2110 #include <project_vertex> 2111}`,equirect_frag:`uniform sampler2D tEquirect; 2112varying vec3 vWorldDirection; 2113#include <common> 2114void main() { 2115 vec3 direction = normalize( vWorldDirection ); 2116 vec2 sampleUV = equirectUv( direction ); 2117 gl_FragColor = texture2D( tEquirect, sampleUV ); 2118 #include <tonemapping_fragment> 2119 #include <encodings_fragment> 2120}`,linedashed_vert:`uniform float scale; 2121attribute float lineDistance; 2122varying float vLineDistance; 2123#include <common> 2124#include <color_pars_vertex> 2125#include <fog_pars_vertex> 2126#include <morphtarget_pars_vertex> 2127#include <logdepthbuf_pars_vertex> 2128#include <clipping_planes_pars_vertex> 2129void main() { 2130 vLineDistance = scale * lineDistance; 2131 #include <color_vertex> 2132 #include <morphcolor_vertex> 2133 #include <begin_vertex> 2134 #include <morphtarget_vertex> 2135 #include <project_vertex> 2136 #include <logdepthbuf_vertex> 2137 #include <clipping_planes_vertex> 2138 #include <fog_vertex> 2139}`,linedashed_frag:`uniform vec3 diffuse; 2140uniform float opacity; 2141uniform float dashSize; 2142uniform float totalSize; 2143varying float vLineDistance; 2144#include <common> 2145#include <color_pars_fragment> 2146#include <fog_pars_fragment> 2147#include <logdepthbuf_pars_fragment> 2148#include <clipping_planes_pars_fragment> 2149void main() { 2150 #include <clipping_planes_fragment> 2151 if ( mod( vLineDistance, totalSize ) > dashSize ) { 2152 discard; 2153 } 2154 vec3 outgoingLight = vec3( 0.0 ); 2155 vec4 diffuseColor = vec4( diffuse, opacity ); 2156 #include <logdepthbuf_fragment> 2157 #include <color_fragment> 2158 outgoingLight = diffuseColor.rgb; 2159 #include <output_fragment> 2160 #include <tonemapping_fragment> 2161 #include <encodings_fragment> 2162 #include <fog_fragment> 2163 #include <premultiplied_alpha_fragment> 2164}`,meshbasic_vert:`#include <common> 2165#include <uv_pars_vertex> 2166#include <uv2_pars_vertex> 2167#include <envmap_pars_vertex> 2168#include <color_pars_vertex> 2169#include <fog_pars_vertex> 2170#include <morphtarget_pars_vertex> 2171#include <skinning_pars_vertex> 2172#include <logdepthbuf_pars_vertex> 2173#include <clipping_planes_pars_vertex> 2174void main() { 2175 #include <uv_vertex> 2176 #include <uv2_vertex> 2177 #include <color_vertex> 2178 #include <morphcolor_vertex> 2179 #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) 2180 #include <beginnormal_vertex> 2181 #include <morphnormal_vertex> 2182 #include <skinbase_vertex> 2183 #include <skinnormal_vertex> 2184 #include <defaultnormal_vertex> 2185 #endif 2186 #include <begin_vertex> 2187 #include <morphtarget_vertex> 2188 #include <skinning_vertex> 2189 #include <project_vertex> 2190 #include <logdepthbuf_vertex> 2191 #include <clipping_planes_vertex> 2192 #include <worldpos_vertex> 2193 #include <envmap_vertex> 2194 #include <fog_vertex> 2195}`,meshbasic_frag:`uniform vec3 diffuse; 2196uniform float opacity; 2197#ifndef FLAT_SHADED 2198 varying vec3 vNormal; 2199#endif 2200#include <common> 2201#include <dithering_pars_fragment> 2202#include <color_pars_fragment> 2203#include <uv_pars_fragment> 2204#include <uv2_pars_fragment> 2205#include <map_pars_fragment> 2206#include <alphamap_pars_fragment> 2207#include <alphatest_pars_fragment> 2208#include <aomap_pars_fragment> 2209#include <lightmap_pars_fragment> 2210#include <envmap_common_pars_fragment> 2211#include <envmap_pars_fragment> 2212#include <fog_pars_fragment> 2213#include <specularmap_pars_fragment> 2214#include <logdepthbuf_pars_fragment> 2215#include <clipping_planes_pars_fragment> 2216void main() { 2217 #include <clipping_planes_fragment> 2218 vec4 diffuseColor = vec4( diffuse, opacity ); 2219 #include <logdepthbuf_fragment> 2220 #include <map_fragment> 2221 #include <color_fragment> 2222 #include <alphamap_fragment> 2223 #include <alphatest_fragment> 2224 #include <specularmap_fragment> 2225 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2226 #ifdef USE_LIGHTMAP 2227 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 2228 reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; 2229 #else 2230 reflectedLight.indirectDiffuse += vec3( 1.0 ); 2231 #endif 2232 #include <aomap_fragment> 2233 reflectedLight.indirectDiffuse *= diffuseColor.rgb; 2234 vec3 outgoingLight = reflectedLight.indirectDiffuse; 2235 #include <envmap_fragment> 2236 #include <output_fragment> 2237 #include <tonemapping_fragment> 2238 #include <encodings_fragment> 2239 #include <fog_fragment> 2240 #include <premultiplied_alpha_fragment> 2241 #include <dithering_fragment> 2242}`,meshlambert_vert:`#define LAMBERT 2243varying vec3 vViewPosition; 2244#include <common> 2245#include <uv_pars_vertex> 2246#include <uv2_pars_vertex> 2247#include <displacementmap_pars_vertex> 2248#include <envmap_pars_vertex> 2249#include <color_pars_vertex> 2250#include <fog_pars_vertex> 2251#include <normal_pars_vertex> 2252#include <morphtarget_pars_vertex> 2253#include <skinning_pars_vertex> 2254#include <shadowmap_pars_vertex> 2255#include <logdepthbuf_pars_vertex> 2256#include <clipping_planes_pars_vertex> 2257void main() { 2258 #include <uv_vertex> 2259 #include <uv2_vertex> 2260 #include <color_vertex> 2261 #include <morphcolor_vertex> 2262 #include <beginnormal_vertex> 2263 #include <morphnormal_vertex> 2264 #include <skinbase_vertex> 2265 #include <skinnormal_vertex> 2266 #include <defaultnormal_vertex> 2267 #include <normal_vertex> 2268 #include <begin_vertex> 2269 #include <morphtarget_vertex> 2270 #include <skinning_vertex> 2271 #include <displacementmap_vertex> 2272 #include <project_vertex> 2273 #include <logdepthbuf_vertex> 2274 #include <clipping_planes_vertex> 2275 vViewPosition = - mvPosition.xyz; 2276 #include <worldpos_vertex> 2277 #include <envmap_vertex> 2278 #include <shadowmap_vertex> 2279 #include <fog_vertex> 2280}`,meshlambert_frag:`#define LAMBERT 2281uniform vec3 diffuse; 2282uniform vec3 emissive; 2283uniform float opacity; 2284#include <common> 2285#include <packing> 2286#include <dithering_pars_fragment> 2287#include <color_pars_fragment> 2288#include <uv_pars_fragment> 2289#include <uv2_pars_fragment> 2290#include <map_pars_fragment> 2291#include <alphamap_pars_fragment> 2292#include <alphatest_pars_fragment> 2293#include <aomap_pars_fragment> 2294#include <lightmap_pars_fragment> 2295#include <emissivemap_pars_fragment> 2296#include <envmap_common_pars_fragment> 2297#include <envmap_pars_fragment> 2298#include <fog_pars_fragment> 2299#include <bsdfs> 2300#include <lights_pars_begin> 2301#include <normal_pars_fragment> 2302#include <lights_lambert_pars_fragment> 2303#include <shadowmap_pars_fragment> 2304#include <bumpmap_pars_fragment> 2305#include <normalmap_pars_fragment> 2306#include <specularmap_pars_fragment> 2307#include <logdepthbuf_pars_fragment> 2308#include <clipping_planes_pars_fragment> 2309void main() { 2310 #include <clipping_planes_fragment> 2311 vec4 diffuseColor = vec4( diffuse, opacity ); 2312 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2313 vec3 totalEmissiveRadiance = emissive; 2314 #include <logdepthbuf_fragment> 2315 #include <map_fragment> 2316 #include <color_fragment> 2317 #include <alphamap_fragment> 2318 #include <alphatest_fragment> 2319 #include <specularmap_fragment> 2320 #include <normal_fragment_begin> 2321 #include <normal_fragment_maps> 2322 #include <emissivemap_fragment> 2323 #include <lights_lambert_fragment> 2324 #include <lights_fragment_begin> 2325 #include <lights_fragment_maps> 2326 #include <lights_fragment_end> 2327 #include <aomap_fragment> 2328 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2329 #include <envmap_fragment> 2330 #include <output_fragment> 2331 #include <tonemapping_fragment> 2332 #include <encodings_fragment> 2333 #include <fog_fragment> 2334 #include <premultiplied_alpha_fragment> 2335 #include <dithering_fragment> 2336}`,meshmatcap_vert:`#define MATCAP 2337varying vec3 vViewPosition; 2338#include <common> 2339#include <uv_pars_vertex> 2340#include <color_pars_vertex> 2341#include <displacementmap_pars_vertex> 2342#include <fog_pars_vertex> 2343#include <normal_pars_vertex> 2344#include <morphtarget_pars_vertex> 2345#include <skinning_pars_vertex> 2346#include <logdepthbuf_pars_vertex> 2347#include <clipping_planes_pars_vertex> 2348void main() { 2349 #include <uv_vertex> 2350 #include <color_vertex> 2351 #include <morphcolor_vertex> 2352 #include <beginnormal_vertex> 2353 #include <morphnormal_vertex> 2354 #include <skinbase_vertex> 2355 #include <skinnormal_vertex> 2356 #include <defaultnormal_vertex> 2357 #include <normal_vertex> 2358 #include <begin_vertex> 2359 #include <morphtarget_vertex> 2360 #include <skinning_vertex> 2361 #include <displacementmap_vertex> 2362 #include <project_vertex> 2363 #include <logdepthbuf_vertex> 2364 #include <clipping_planes_vertex> 2365 #include <fog_vertex> 2366 vViewPosition = - mvPosition.xyz; 2367}`,meshmatcap_frag:`#define MATCAP 2368uniform vec3 diffuse; 2369uniform float opacity; 2370uniform sampler2D matcap; 2371varying vec3 vViewPosition; 2372#include <common> 2373#include <dithering_pars_fragment> 2374#include <color_pars_fragment> 2375#include <uv_pars_fragment> 2376#include <map_pars_fragment> 2377#include <alphamap_pars_fragment> 2378#include <alphatest_pars_fragment> 2379#include <fog_pars_fragment> 2380#include <normal_pars_fragment> 2381#include <bumpmap_pars_fragment> 2382#include <normalmap_pars_fragment> 2383#include <logdepthbuf_pars_fragment> 2384#include <clipping_planes_pars_fragment> 2385void main() { 2386 #include <clipping_planes_fragment> 2387 vec4 diffuseColor = vec4( diffuse, opacity ); 2388 #include <logdepthbuf_fragment> 2389 #include <map_fragment> 2390 #include <color_fragment> 2391 #include <alphamap_fragment> 2392 #include <alphatest_fragment> 2393 #include <normal_fragment_begin> 2394 #include <normal_fragment_maps> 2395 vec3 viewDir = normalize( vViewPosition ); 2396 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 2397 vec3 y = cross( viewDir, x ); 2398 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; 2399 #ifdef USE_MATCAP
2400 vec4 matcapColor = texture2D( matcap, uv ); 2401 #else 2402 vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); 2403 #endif 2404 vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; 2405 #include <output_fragment> 2406 #include <tonemapping_fragment> 2407 #include <encodings_fragment> 2408 #include <fog_fragment> 2409 #include <premultiplied_alpha_fragment> 2410 #include <dithering_fragment> 2411}`,meshnormal_vert:`#define NORMAL 2412#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2413 varying vec3 vViewPosition; 2414#endif 2415#include <common> 2416#include <uv_pars_vertex> 2417#include <displacementmap_pars_vertex> 2418#include <normal_pars_vertex> 2419#include <morphtarget_pars_vertex> 2420#include <skinning_pars_vertex> 2421#include <logdepthbuf_pars_vertex> 2422#include <clipping_planes_pars_vertex> 2423void main() { 2424 #include <uv_vertex> 2425 #include <beginnormal_vertex> 2426 #include <morphnormal_vertex> 2427 #include <skinbase_vertex> 2428 #include <skinnormal_vertex> 2429 #include <defaultnormal_vertex> 2430 #include <normal_vertex> 2431 #include <begin_vertex> 2432 #include <morphtarget_vertex> 2433 #include <skinning_vertex> 2434 #include <displacementmap_vertex> 2435 #include <project_vertex> 2436 #include <logdepthbuf_vertex> 2437 #include <clipping_planes_vertex> 2438#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2439 vViewPosition = - mvPosition.xyz; 2440#endif 2441}`,meshnormal_frag:`#define NORMAL 2442uniform float opacity; 2443#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2444 varying vec3 vViewPosition; 2445#endif 2446#include <packing> 2447#include <uv_pars_fragment> 2448#include <normal_pars_fragment> 2449#include <bumpmap_pars_fragment> 2450#include <normalmap_pars_fragment> 2451#include <logdepthbuf_pars_fragment> 2452#include <clipping_planes_pars_fragment> 2453void main() { 2454 #include <clipping_planes_fragment> 2455 #include <logdepthbuf_fragment> 2456 #include <normal_fragment_begin> 2457 #include <normal_fragment_maps> 2458 gl_FragColor = vec4( packNormalToRGB( normal ), opacity ); 2459 #ifdef OPAQUE 2460 gl_FragColor.a = 1.0; 2461 #endif 2462}`,meshphong_vert:`#define PHONG 2463varying vec3 vViewPosition; 2464#include <common> 2465#include <uv_pars_vertex> 2466#include <uv2_pars_vertex> 2467#include <displacementmap_pars_vertex> 2468#include <envmap_pars_vertex> 2469#include <color_pars_vertex> 2470#include <fog_pars_vertex> 2471#include <normal_pars_vertex> 2472#include <morphtarget_pars_vertex> 2473#include <skinning_pars_vertex> 2474#include <shadowmap_pars_vertex> 2475#include <logdepthbuf_pars_vertex> 2476#include <clipping_planes_pars_vertex> 2477void main() { 2478 #include <uv_vertex> 2479 #include <uv2_vertex> 2480 #include <color_vertex> 2481 #include <morphcolor_vertex> 2482 #include <beginnormal_vertex> 2483 #include <morphnormal_vertex> 2484 #include <skinbase_vertex> 2485 #include <skinnormal_vertex> 2486 #include <defaultnormal_vertex> 2487 #include <normal_vertex> 2488 #include <begin_vertex> 2489 #include <morphtarget_vertex> 2490 #include <skinning_vertex> 2491 #include <displacementmap_vertex> 2492 #include <project_vertex> 2493 #include <logdepthbuf_vertex> 2494 #include <clipping_planes_vertex> 2495 vViewPosition = - mvPosition.xyz; 2496 #include <worldpos_vertex> 2497 #include <envmap_vertex> 2498 #include <shadowmap_vertex> 2499 #include <fog_vertex> 2500}`,meshphong_frag:`#define PHONG 2501uniform vec3 diffuse; 2502uniform vec3 emissive; 2503uniform vec3 specular; 2504uniform float shininess; 2505uniform float opacity; 2506#include <common> 2507#include <packing> 2508#include <dithering_pars_fragment> 2509#include <color_pars_fragment> 2510#include <uv_pars_fragment> 2511#include <uv2_pars_fragment> 2512#include <map_pars_fragment> 2513#include <alphamap_pars_fragment> 2514#include <alphatest_pars_fragment> 2515#include <aomap_pars_fragment> 2516#include <lightmap_pars_fragment> 2517#include <emissivemap_pars_fragment> 2518#include <envmap_common_pars_fragment> 2519#include <envmap_pars_fragment> 2520#include <fog_pars_fragment> 2521#include <bsdfs> 2522#include <lights_pars_begin> 2523#include <normal_pars_fragment> 2524#include <lights_phong_pars_fragment> 2525#include <shadowmap_pars_fragment> 2526#include <bumpmap_pars_fragment> 2527#include <normalmap_pars_fragment> 2528#include <specularmap_pars_fragment> 2529#include <logdepthbuf_pars_fragment> 2530#include <clipping_planes_pars_fragment> 2531void main() { 2532 #include <clipping_planes_fragment> 2533 vec4 diffuseColor = vec4( diffuse, opacity ); 2534 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2535 vec3 totalEmissiveRadiance = emissive; 2536 #include <logdepthbuf_fragment> 2537 #include <map_fragment> 2538 #include <color_fragment> 2539 #include <alphamap_fragment> 2540 #include <alphatest_fragment> 2541 #include <specularmap_fragment> 2542 #include <normal_fragment_begin> 2543 #include <normal_fragment_maps> 2544 #include <emissivemap_fragment> 2545 #include <lights_phong_fragment> 2546 #include <lights_fragment_begin> 2547 #include <lights_fragment_maps> 2548 #include <lights_fragment_end> 2549 #include <aomap_fragment> 2550 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; 2551 #include <envmap_fragment> 2552 #include <output_fragment> 2553 #include <tonemapping_fragment> 2554 #include <encodings_fragment> 2555 #include <fog_fragment> 2556 #include <premultiplied_alpha_fragment> 2557 #include <dithering_fragment> 2558}`,meshphysical_vert:`#define STANDARD 2559varying vec3 vViewPosition; 2560#ifdef USE_TRANSMISSION 2561 varying vec3 vWorldPosition; 2562#endif 2563#include <common> 2564#include <uv_pars_vertex> 2565#include <uv2_pars_vertex> 2566#include <displacementmap_pars_vertex> 2567#include <color_pars_vertex> 2568#include <fog_pars_vertex> 2569#include <normal_pars_vertex> 2570#include <morphtarget_pars_vertex> 2571#include <skinning_pars_vertex> 2572#include <shadowmap_pars_vertex> 2573#include <logdepthbuf_pars_vertex> 2574#include <clipping_planes_pars_vertex> 2575void main() { 2576 #include <uv_vertex> 2577 #include <uv2_vertex> 2578 #include <color_vertex> 2579 #include <morphcolor_vertex> 2580 #include <beginnormal_vertex> 2581 #include <morphnormal_vertex> 2582 #include <skinbase_vertex> 2583 #include <skinnormal_vertex> 2584 #include <defaultnormal_vertex> 2585 #include <normal_vertex> 2586 #include <begin_vertex> 2587 #include <morphtarget_vertex> 2588 #include <skinning_vertex> 2589 #include <displacementmap_vertex> 2590 #include <project_vertex> 2591 #include <logdepthbuf_vertex> 2592 #include <clipping_planes_vertex> 2593 vViewPosition = - mvPosition.xyz; 2594 #include <worldpos_vertex> 2595 #include <shadowmap_vertex> 2596 #include <fog_vertex> 2597#ifdef USE_TRANSMISSION 2598 vWorldPosition = worldPosition.xyz; 2599#endif 2600}`,meshphysical_frag:`#define STANDARD 2601#ifdef PHYSICAL 2602 #define IOR 2603 #define SPECULAR 2604#endif 2605uniform vec3 diffuse; 2606uniform vec3 emissive; 2607uniform float roughness; 2608uniform float metalness; 2609uniform float opacity; 2610#ifdef IOR 2611 uniform float ior; 2612#endif 2613#ifdef SPECULAR 2614 uniform float specularIntensity; 2615 uniform vec3 specularColor; 2616 #ifdef USE_SPECULARINTENSITYMAP 2617 uniform sampler2D specularIntensityMap; 2618 #endif 2619 #ifdef USE_SPECULARCOLORMAP 2620 uniform sampler2D specularColorMap; 2621 #endif 2622#endif 2623#ifdef USE_CLEARCOAT 2624 uniform float clearcoat; 2625 uniform float clearcoatRoughness; 2626#endif
2627#ifdef USE_IRIDESCENCE 2628 uniform float iridescence; 2629 uniform float iridescenceIOR; 2630 uniform float iridescenceThicknessMinimum; 2631 uniform float iridescenceThicknessMaximum; 2632#endif 2633#ifdef USE_SHEEN 2634 uniform vec3 sheenColor; 2635 uniform float sheenRoughness; 2636 #ifdef USE_SHEENCOLORMAP 2637 uniform sampler2D sheenColorMap; 2638 #endif 2639 #ifdef USE_SHEENROUGHNESSMAP 2640 uniform sampler2D sheenRoughnessMap; 2641 #endif 2642#endif 2643varying vec3 vViewPosition; 2644#include <common> 2645#include <packing> 2646#include <dithering_pars_fragment> 2647#include <color_pars_fragment> 2648#include <uv_pars_fragment> 2649#include <uv2_pars_fragment> 2650#include <map_pars_fragment> 2651#include <alphamap_pars_fragment> 2652#include <alphatest_pars_fragment> 2653#include <aomap_pars_fragment> 2654#include <lightmap_pars_fragment> 2655#include <emissivemap_pars_fragment> 2656#include <bsdfs> 2657#include <iridescence_fragment> 2658#include <cube_uv_reflection_fragment> 2659#include <envmap_common_pars_fragment> 2660#include <envmap_physical_pars_fragment> 2661#include <fog_pars_fragment> 2662#include <lights_pars_begin> 2663#include <normal_pars_fragment> 2664#include <lights_physical_pars_fragment> 2665#include <transmission_pars_fragment> 2666#include <shadowmap_pars_fragment> 2667#include <bumpmap_pars_fragment> 2668#include <normalmap_pars_fragment> 2669#include <clearcoat_pars_fragment> 2670#include <iridescence_pars_fragment> 2671#include <roughnessmap_pars_fragment> 2672#include <metalnessmap_pars_fragment> 2673#include <logdepthbuf_pars_fragment> 2674#include <clipping_planes_pars_fragment> 2675void main() { 2676 #include <clipping_planes_fragment> 2677 vec4 diffuseColor = vec4( diffuse, opacity ); 2678 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2679 vec3 totalEmissiveRadiance = emissive; 2680 #include <logdepthbuf_fragment> 2681 #include <map_fragment> 2682 #include <color_fragment> 2683 #include <alphamap_fragment> 2684 #include <alphatest_fragment> 2685 #include <roughnessmap_fragment> 2686 #include <metalnessmap_fragment> 2687 #include <normal_fragment_begin> 2688 #include <normal_fragment_maps> 2689 #include <clearcoat_normal_fragment_begin> 2690 #include <clearcoat_normal_fragment_maps> 2691 #include <emissivemap_fragment> 2692 #include <lights_physical_fragment> 2693 #include <lights_fragment_begin> 2694 #include <lights_fragment_maps> 2695 #include <lights_fragment_end> 2696 #include <aomap_fragment> 2697 vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; 2698 vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; 2699 #include <transmission_fragment> 2700 vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; 2701 #ifdef USE_SHEEN 2702 float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); 2703 outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; 2704 #endif 2705 #ifdef USE_CLEARCOAT 2706 float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); 2707 vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); 2708 outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; 2709 #endif 2710 #include <output_fragment> 2711 #include <tonemapping_fragment> 2712 #include <encodings_fragment> 2713 #include <fog_fragment> 2714 #include <premultiplied_alpha_fragment> 2715 #include <dithering_fragment> 2716}`,meshtoon_vert:`#define TOON 2717varying vec3 vViewPosition; 2718#include <common> 2719#include <uv_pars_vertex> 2720#include <uv2_pars_vertex> 2721#include <displacementmap_pars_vertex> 2722#include <color_pars_vertex> 2723#include <fog_pars_vertex> 2724#include <normal_pars_vertex> 2725#include <morphtarget_pars_vertex> 2726#include <skinning_pars_vertex> 2727#include <shadowmap_pars_vertex> 2728#include <logdepthbuf_pars_vertex> 2729#include <clipping_planes_pars_vertex> 2730void main() { 2731 #include <uv_vertex> 2732 #include <uv2_vertex> 2733 #include <color_vertex> 2734 #include <morphcolor_vertex> 2735 #include <beginnormal_vertex> 2736 #include <morphnormal_vertex> 2737 #include <skinbase_vertex> 2738 #include <skinnormal_vertex> 2739 #include <defaultnormal_vertex> 2740 #include <normal_vertex> 2741 #include <begin_vertex> 2742 #include <morphtarget_vertex> 2743 #include <skinning_vertex> 2744 #include <displacementmap_vertex> 2745 #include <project_vertex> 2746 #include <logdepthbuf_vertex> 2747 #include <clipping_planes_vertex> 2748 vViewPosition = - mvPosition.xyz; 2749 #include <worldpos_vertex> 2750 #include <shadowmap_vertex> 2751 #include <fog_vertex> 2752}`,meshtoon_frag:`#define TOON 2753uniform vec3 diffuse; 2754uniform vec3 emissive; 2755uniform float opacity; 2756#include <common> 2757#include <packing> 2758#include <dithering_pars_fragment> 2759#include <color_pars_fragment> 2760#include <uv_pars_fragment> 2761#include <uv2_pars_fragment> 2762#include <map_pars_fragment> 2763#include <alphamap_pars_fragment> 2764#include <alphatest_pars_fragment> 2765#include <aomap_pars_fragment> 2766#include <lightmap_pars_fragment> 2767#include <emissivemap_pars_fragment> 2768#include <gradientmap_pars_fragment> 2769#include <fog_pars_fragment> 2770#include <bsdfs> 2771#include <lights_pars_begin> 2772#include <normal_pars_fragment> 2773#include <lights_toon_pars_fragment> 2774#include <shadowmap_pars_fragment> 2775#include <bumpmap_pars_fragment> 2776#include <normalmap_pars_fragment> 2777#include <logdepthbuf_pars_fragment> 2778#include <clipping_planes_pars_fragment> 2779void main() { 2780 #include <clipping_planes_fragment> 2781 vec4 diffuseColor = vec4( diffuse, opacity ); 2782 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2783 vec3 totalEmissiveRadiance = emissive; 2784 #include <logdepthbuf_fragment> 2785 #include <map_fragment> 2786 #include <color_fragment> 2787 #include <alphamap_fragment> 2788 #include <alphatest_fragment> 2789 #include <normal_fragment_begin> 2790 #include <normal_fragment_maps> 2791 #include <emissivemap_fragment> 2792 #include <lights_toon_fragment> 2793 #include <lights_fragment_begin> 2794 #include <lights_fragment_maps> 2795 #include <lights_fragment_end> 2796 #include <aomap_fragment> 2797 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2798 #include <output_fragment> 2799 #include <tonemapping_fragment> 2800 #include <encodings_fragment> 2801 #include <fog_fragment> 2802 #include <premultiplied_alpha_fragment> 2803 #include <dithering_fragment> 2804}`,points_vert:`uniform float size; 2805uniform float scale; 2806#include <common> 2807#include <color_pars_vertex> 2808#include <fog_pars_vertex> 2809#include <morphtarget_pars_vertex> 2810#include <logdepthbuf_pars_vertex> 2811#include <clipping_planes_pars_vertex> 2812void main() { 2813 #include <color_vertex> 2814 #include <morphcolor_vertex> 2815 #include <begin_vertex> 2816 #include <morphtarget_vertex> 2817 #include <project_vertex> 2818 gl_PointSize = size; 2819 #ifdef USE_SIZEATTENUATION 2820 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2821 if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); 2822 #endif 2823 #include <logdepthbuf_vertex> 2824 #include <clipping_planes_vertex> 2825 #include <worldpos_vertex> 2826 #include <fog_vertex> 2827}`,points_frag:`uniform vec3 diffuse; 2828uniform float opacity; 2829#include <common> 2830#include <color_pars_fragment> 2831#include <map_particle_pars_fragment> 2832#include <alphatest_pars_fragment> 2833#include <fog_pars_fragment> 2834#include <logdepthbuf_pars_fragment> 2835#include <clipping_planes_pars_fragment> 2836void main() { 2837 #include <clipping_planes_fragment> 2838 vec3 outgoingLight = vec3( 0.0 ); 2839 vec4 diffuseColor = vec4( diffuse, opacity ); 2840 #include <logdepthbuf_fragment> 2841 #include <map_particle_fragment> 2842 #include <color_fragment> 2843 #include <alphatest_fragment> 2844 outgoingLight = diffuseColor.rgb; 2845 #include <output_fragment> 2846 #include <tonemapping_fragment> 2847 #include <encodings_fragment> 2848 #include <fog_fragment> 2849 #include <premultiplied_alpha_fragment> 2850}`,shadow_vert:`#include <common> 2851#include <fog_pars_vertex> 2852#include <morphtarget_pars_vertex> 2853#include <skinning_pars_vertex> 2854#include <shadowmap_pars_vertex> 2855void main() { 2856 #include <beginnormal_vertex> 2857 #include <morphnormal_vertex> 2858 #include <skinbase_vertex> 2859 #include <skinnormal_vertex> 2860 #include <defaultnormal_vertex> 2861 #include <begin_vertex> 2862 #include <morphtarget_vertex> 2863 #include <skinning_vertex> 2864 #include <project_vertex> 2865 #include <worldpos_vertex> 2866 #include <shadowmap_vertex> 2867 #include <fog_vertex> 2868}`,shadow_frag:`uniform vec3 color; 2869uniform float opacity; 2870#include <common> 2871#include <packing> 2872#include <fog_pars_fragment> 2873#include <bsdfs> 2874#include <lights_pars_begin> 2875#include <shadowmap_pars_fragment> 2876#include <shadowmask_pars_fragment> 2877void main() { 2878 gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); 2879 #include <tonemapping_fragment> 2880 #include <encodings_fragment> 2881 #include <fog_fragment> 2882}`,sprite_vert:`uniform float rotation; 2883uniform vec2 center; 2884#include <common> 2885#include <uv_pars_vertex> 2886#include <fog_pars_vertex> 2887#include <logdepthbuf_pars_vertex> 2888#include <clipping_planes_pars_vertex> 2889void main() { 2890 #include <uv_vertex> 2891 vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 2892 vec2 scale; 2893 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 2894 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 2895 #ifndef USE_SIZEATTENUATION 2896 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2897 if ( isPerspective ) scale *= - mvPosition.z; 2898 #endif 2899 vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; 2900 vec2 rotatedPosition; 2901 rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; 2902 rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; 2903 mvPosition.xy += rotatedPosition; 2904 gl_Position = projectionMatrix * mvPosition; 2905 #include <logdepthbuf_vertex> 2906 #include <clipping_planes_vertex> 2907 #include <fog_vertex> 2908}`,sprite_frag:`uniform vec3 diffuse; 2909uniform float opacity; 2910#include <common> 2911#include <uv_pars_fragment> 2912#include <map_pars_fragment> 2913#include <alphamap_pars_fragment> 2914#include <alphatest_pars_fragment> 2915#include <fog_pars_fragment> 2916#include <logdepthbuf_pars_fragment> 2917#include <clipping_planes_pars_fragment> 2918void main() { 2919 #include <clipping_planes_fragment> 2920 vec3 outgoingLight = vec3( 0.0 ); 2921 vec4 diffuseColor = vec4( diffuse, opacity ); 2922 #include <logdepthbuf_fragment> 2923 #include <map_fragment> 2924 #include <alphamap_fragment> 2925 #include <alphatest_fragment> 2926 outgoingLight = diffuseColor.rgb; 2927 #include <output_fragment> 2928 #include <tonemapping_fragment> 2929 #include <encodings_fragment> 2930 #include <fog_fragment> 2931}`},sf={common:{diffuse:{value:new is(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new tJ},uv2Transform:{value:new tJ},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new tK(1,1)}}
2931,displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new is(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new is(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tJ}},sprite:{diffuse:{value:new is(16777215)},opacity:{value:1},center:{value:new tK(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tJ}}},sm={basic:{uniforms:r2([sf.common,sf.specularmap,sf.envmap,sf.aomap,sf.lightmap,sf.fog]),vertexShader:sp.meshbasic_vert,fragmentShader:sp.meshbasic_frag},lambert:{uniforms:r2([sf.common,sf.specularmap,sf.envmap,sf.aomap,sf.lightmap,sf.emissivemap,sf.bumpmap,sf.normalmap,sf.displacementmap,sf.fog,sf.lights,{emissive:{value:new is(0)}}]),vertexShader:sp.meshlambert_vert,fragmentShader:sp.meshlambert_frag},phong:{uniforms:r2([sf.common,sf.specularmap,sf.envmap,sf.aomap,sf.lightmap,sf.emissivemap,sf.bumpmap,sf.normalmap,sf.displacementmap,sf.fog,sf.lights,{emissive:{value:new is(0)},specular:{value:new is(1118481)},shininess:{value:30}}]),vertexShader:sp.meshphong_vert,fragmentShader:sp.meshphong_frag},standard:{uniforms:r2([sf.common,sf.envmap,sf.aomap,sf.lightmap,sf.emissivemap,sf.bumpmap,sf.normalmap,sf.displacementmap,sf.roughnessmap,sf.metalnessmap,sf.fog,sf.lights,{emissive:{value:new is(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sp.meshphysical_vert,fragmentShader:sp.meshphysical_frag},toon:{uniforms:r2([sf.common,sf.aomap,sf.lightmap,sf.emissivemap,sf.bumpmap,sf.normalmap,sf.displacementmap,sf.gradientmap,sf.fog,sf.lights,{emissive:{value:new is(0)}}]),vertexShader:sp.meshtoon_vert,fragmentShader:sp.meshtoon_frag},matcap:{uniforms:r2([sf.common,sf.bumpmap,sf.normalmap,sf.displacementmap,sf.fog,{matcap:{value:null}}]),vertexShader:sp.meshmatcap_vert,fragmentShader:sp.meshmatcap_frag},points:{uniforms:r2([sf.points,sf.fog]),vertexShader:sp.points_vert,fragmentShader:sp.points_frag},dashed:{uniforms:r2([sf.common,sf.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sp.linedashed_vert,fragmentShader:sp.linedashed_frag},depth:{uniforms:r2([sf.common,sf.displacementmap]),vertexShader:sp.depth_vert,fragmentShader:sp.depth_frag},normal:{uniforms:r2([sf.common,sf.bumpmap,sf.normalmap,sf.displacementmap,{opacity:{value:1}}]),vertexShader:sp.meshnormal_vert,fragmentShader:sp.meshnormal_frag},sprite:{uniforms:r2([sf.sprite,sf.fog]),vertexShader:sp.sprite_vert,fragmentShader:sp.sprite_frag},background:{uniforms:{uvTransform:{value:new tJ},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:sp.background_vert,fragmentShader:sp.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:sp.backgroundCube_vert,fragmentShader:sp.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:sp.cube_vert,fragmentShader:sp.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sp.equirect_vert,fragmentShader:sp.equirect_frag},distanceRGBA:{uniforms:r2([sf.common,sf.displacementmap,{referencePosition:{value:new ix},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sp.distanceRGBA_vert,fragmentShader:sp.distanceRGBA_frag},shadow:{uniforms:r2([sf.lights,sf.fog,{color:{value:new is(0)},opacity:{value:1}}]),vertexShader:sp.shadow_vert,fragmentShader:sp.shadow_frag}};sm.physical={uniforms:r2([sm.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new tK(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new is(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new tK},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new is(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new is(1,1,1)},specularColorMap:{value:null}}]),vertexShader:sp.meshphysical_vert,fragmentShader:sp.meshphysical_frag};var sg={r:0,b:0,g:0};function sv(e,t,i,r,s,a,o){let l=new is(0),h=!0===a?0:1,c,d,u=null,p=0,f=null;function m(t,i){t.getRGB(sg,r3(e)),r.buffers.color.setClear(sg.r,sg.g,sg.b,i,o)}return{getClearColor:function(){return l},setClearColor:function(e,t=1){l.set(e),m(l,h=t)},getClearAlpha:function(){return h},setClearAlpha:function(e){m(l,h=e)},render:function(r,a){let o=!1,g=!0===a.isScene?a.background:null;g&&g.isTexture&&(g=(a.backgroundBlurriness>0?i:t).get(g));let v=e.xr,y=v.getSession&&v.getSession();y&&"additive"===y.environmentBlendMode&&(g=null),null===g?m(l,h):g&&g.isColor&&(m(g,1),o=!0),(e.autoClear||o)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),g&&(g.isCubeTexture||306===g.mapping)?(void 0===d&&((d=new rJ(new r0(1,1,1),new r8({name:"Backgroun
2931dCubeMaterial",uniforms:r1(sm.backgroundCube.uniforms),vertexShader:sm.backgroundCube.vertexShader,fragmentShader:sm.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),d.geometry.deleteAttribute("uv"),d.onBeforeRender=function(e,t,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(d.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(d)),d.material.uniforms.envMap.value=g,d.material.uniforms.flipEnvMap.value=g.isCubeTexture&&!1===g.isRenderTargetTexture?-1:1,d.material.uniforms.backgroundBlurriness.value=a.backgroundBlurriness,d.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,d.material.toneMapped=3001!==g.encoding,(u!==g||p!==g.version||f!==e.toneMapping)&&(d.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),d.layers.enableAll(),r.unshift(d,d.geometry,d.material,0,0,null)):g&&g.isTexture&&(void 0===c&&((c=new rJ(new su(2,2),new r8({name:"BackgroundMaterial",uniforms:r1(sm.background.uniforms),vertexShader:sm.background.vertexShader,fragmentShader:sm.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=g,c.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,c.material.toneMapped=3001!==g.encoding,!0===g.matrixAutoUpdate&&g.updateMatrix(),c.material.uniforms.uvTransform.value.copy(g.matrix),(u!==g||p!==g.version||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),c.layers.enableAll(),r.unshift(c,c.geometry,c.material,0,0,null))}}}function sy(e,t,i,r){let s=e.getParameter(34921),a=r.isWebGL2?null:t.get("OES_vertex_array_object"),o=r.isWebGL2||null!==a,l={},h=f(null),c=h,d=!1;function u(t){return r.isWebGL2?e.bindVertexArray(t):a.bindVertexArrayOES(t)}function p(t){return r.isWebGL2?e.deleteVertexArray(t):a.deleteVertexArrayOES(t)}function f(e){let t=[],i=[],r=[];for(let e=0;e<s;e++)t[e]=0,i[e]=0,r[e]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:t,enabledAttributes:i,attributeDivisors:r,object:e,attributes:{},index:null}}function m(){let e=c.newAttributes;for(let t=0,i=e.length;t<i;t++)e[t]=0}function g(e){v(e,0)}function v(i,s){let a=c.newAttributes,o=c.enabledAttributes,l=c.attributeDivisors;a[i]=1,0===o[i]&&(e.enableVertexAttribArray(i),o[i]=1),l[i]!==s&&((r.isWebGL2?e:t.get("ANGLE_instanced_arrays"))[r.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](i,s),l[i]=s)}function y(){let t=c.newAttributes,i=c.enabledAttributes;for(let r=0,s=i.length;r<s;r++)i[r]!==t[r]&&(e.disableVertexAttribArray(r),i[r]=0)}function x(t,i,s,a,o,l){!0===r.isWebGL2&&(5124===s||5125===s)?e.vertexAttribIPointer(t,i,s,o,l):e.vertexAttribPointer(t,i,s,a,o,l)}function b(){w(),d=!0,c!==h&&u((c=h).object)}function w(){h.geometry=null,h.program=null,h.wireframe=!1}return{setup:function(s,h,p,b,w){let S=!1;if(o){let t,i,o,d;let m=(t=!0===h.wireframe,void 0===(i=l[b.id])&&(i={},l[b.id]=i),void 0===(o=i[p.id])&&(o={},i[p.id]=o),void 0===(d=o[t])&&(d=f(r.isWebGL2?e.createVertexArray():a.createVertexArrayOES()),o[t]=d),d);c!==m&&u((c=m).object),(S=function(e,t,i,r){let s=c.attributes,a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=s[t],r=a[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===i||i.attribute!==r||r&&i.data!==r.data)return!0;o++}return c.attributesNum!==o||c.index!==r}(s,b,p,w))&&function(e,t,i,r){let s={},a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=a[t];void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor));let r={};r.attribute=i,i&&i.data&&(r.data=i.data),s[t]=r,o++}c.attributes=s,c.attributesNum=o,c.index=r}(s,b,p,w)}else{let e=!0===h.wireframe;(c.geometry!==b.id||c.program!==p.id||c.wireframe!==e)&&(c.geometry=b.id,c.program=p.id,c.wireframe=e,S=!0)}null!==w&&i.update(w,34963),(S||d)&&(d=!1,function(s,a,o,l){if(!1===r.isWebGL2&&(s.isInstancedMesh||l.isInstancedBufferGeometry)&&null===t.get("ANGLE_instanced_arrays"))return;m();let h=l.attributes,c=o.getAttributes(),d=a.defaultAttributeValues;for(let t in c){let r=c[t];if(r.location>=0){let a=h[t];if(void 0===a&&("instanceMatrix"===t&&s.instanceMatrix&&(a=s.instanceMatrix),"instanceColor"===t&&s.instanceColor&&(a=s.instanceColor)),void 0!==a){let t=a.normalized,o=a.itemSize,h=i.get(a);if(void 0===h)continue;let c=h.buffer,d=h.type,u=h.bytesPerElement;if(a.isInterleavedBufferAttribute){let i=a.data,h=i.stride,p=a.offset;if(i.isInstancedInterleavedBuffer){for(let e=0;e<r.locationSize;e++)v(r.location+e,i.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=i.meshPerAttribute*i.count)}else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,h*u,(p+o/r.locationSize*e)*u)}else{if(a.isInstancedBufferAttribute){for(let e=0;e<r.locationSize;e++)v(r.location+e,a.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=a.meshPerAttribute*a.count)}
2931else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,o*u,o/r.locationSize*e*u)}}else if(void 0!==d){let i=d[t];if(void 0!==i)switch(i.length){case 2:e.vertexAttrib2fv(r.location,i);break;case 3:e.vertexAttrib3fv(r.location,i);break;case 4:e.vertexAttrib4fv(r.location,i);break;default:e.vertexAttrib1fv(r.location,i)}}}}y()}(s,h,p,b),null!==w&&e.bindBuffer(34963,i.get(w).buffer))},reset:b,resetDefaultState:w,dispose:function(){for(let e in b(),l){let t=l[e];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e]}},releaseStatesOfGeometry:function(e){if(void 0===l[e.id])return;let t=l[e.id];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e.id]},releaseStatesOfProgram:function(e){for(let t in l){let i=l[t];if(void 0===i[e.id])continue;let r=i[e.id];for(let e in r)p(r[e].object),delete r[e];delete i[e.id]}},initAttributes:m,enableAttribute:g,disableUnusedAttributes:y}}function sx(e,t,i,r){let s=r.isWebGL2,a;this.setMode=function(e){a=e},this.render=function(t,r){e.drawArrays(a,t,r),i.update(r,a,1)},this.renderInstances=function(r,o,l){let h,c;if(0!==l){if(s)h=e,c="drawArraysInstanced";else if(h=t.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===h){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}h[c](a,r,o,l),i.update(o,a,l)}}}function sb(e,t,i){let r;function s(t){if("highp"===t){if(e.getShaderPrecisionFormat(35633,36338).precision>0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}let a="u">typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,o=void 0!==i.precision?i.precision:"highp",l=s(o);l!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",l,"instead."),o=l);let h=a||t.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,d=e.getParameter(34930),u=e.getParameter(35660),p=e.getParameter(3379),f=e.getParameter(34076),m=e.getParameter(34921),g=e.getParameter(36347),v=e.getParameter(36348),y=e.getParameter(36349),x=u>0,b=a||t.has("OES_texture_float"),w=a?e.getParameter(36183):0;return{isWebGL2:a,drawBuffers:h,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let i=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:s,precision:o,logarithmicDepthBuffer:c,maxTextures:d,maxVertexTextures:u,maxTextureSize:p,maxCubemapSize:f,maxAttributes:m,maxVertexUniforms:g,maxVaryings:v,maxFragmentUniforms:y,vertexTextures:x,floatFragmentTextures:b,floatVertexTextures:x&&b,maxSamples:w}}function sw(e){let t=this,i=null,r=0,s=!1,a=!1,o=new sn,l=new tJ,h={value:null,needsUpdate:!1};function c(e,i,r,s){let a=null!==e?e.length:0,c=null;if(0!==a){if(c=h.value,!0!==s||null===c){let t=r+4*a,s=i.matrixWorldInverse;l.getNormalMatrix(s),(null===c||c.length<t)&&(c=new Float32Array(t));for(let t=0,i=r;t!==a;++t,i+=4)o.copy(e[t]).applyMatrix4(s,l),o.normal.toArray(c,i),c[i+3]=o.constant}h.value=c,h.needsUpdate=!0}return t.numPlanes=a,t.numIntersection=0,c}this.uniform=h,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let i=0!==e.length||t||0!==r||s;return s=t,r=e.length,i},this.beginShadows=function(){a=!0,c(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){i=c(e,t,0)},this.setState=function(o,l,d){let u=o.clippingPlanes,p=o.clipIntersection,f=o.clipShadows,m=e.get(o);if(s&&null!==u&&0!==u.length&&(!a||f)){let e=a?0:r,t=4*e,s=m.clippingState||null;h.value=s,s=c(u,l,t,d);for(let e=0;e!==t;++e)s[e]=i[e];m.clippingState=s,this.numIntersection=p?this.numPlanes:0,this.numPlanes+=e}else a?c(null):(h.value!==i&&(h.value=i,h.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0)}}function sS(e){let t=new WeakMap;function i(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){let a=s.mapping;if(303===a||304===a){if(t.has(s))return i(t.get(s).texture,s.mapping);{let a=s.image;if(!a||!(a.height>0))return null;{let o=new si(a.height/2);return o.fromEquirectangularTexture(e,s),t.set(s,o),s.addEventListener("dispose",r),i(o.texture,s.mapping)}}}}return s},dispose:function(){t=new WeakMap}}}var s_=class extends r9{constructor(e=-1,t=1,i=1,r=-1,s=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="Orthogra
2931phicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=r,this.near=s,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,i,r,s,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,s=i-e,a=i+e,o=r+t,l=r-t;if(null!==this.view&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=e*this.view.offsetX,a=s+e*this.view.width,o-=t*this.view.offsetY,l=o-t*this.view.height}this.projectionMatrix.makeOrthographic(s,a,o,l,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}},sA=[.125,.215,.35,.446,.526,.582],sM=new s_,sE=new is,sC=null,sT=(1+Math.sqrt(5))/2,sP=1/sT,sD=[new ix(1,1,1),new ix(-1,1,1),new ix(1,1,-1),new ix(-1,1,-1),new ix(0,sT,sP),new ix(0,sT,-sP),new ix(sP,0,sT),new ix(-sP,0,sT),new ix(sT,sP,0),new ix(-sT,sP,0)],sI=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,r=100){sC=this._renderer.getRenderTarget(),this._setSize(256);let s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,i,r,s),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=sB(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=sL(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(sC),e.scissorTest=!1,sR(e,0,0,e.width,e.height)}_fromTexture(e,t){301===e.mapping||302===e.mapping?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),sC=this._renderer.getRenderTarget();let i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,encoding:3e3,depthBuffer:!1},r=sO(e,t,i);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=sO(e,t,i);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}
2931=function(e){let t=[],i=[],r=[],s=e,a=e-4+1+sA.length;for(let o=0;o<a;o++){let a=Math.pow(2,s);i.push(a);let l=1/a;o>e-4?l=sA[o-e+4-1]:0===o&&(l=0),r.push(l);let h=1/(a-2),c=-h,d=1+h,u=[c,c,d,c,d,d,c,c,d,d,c,d],p=new Float32Array(108),f=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,i=e>2?0:-1,r=[t,i,0,t+2/3,i,0,t+2/3,i+1,0,t,i,0,t+2/3,i+1,0,t,i+1,0];p.set(r,18*e),f.set(u,12*e);let s=[e,e,e,e,e,e];m.set(s,6*e)}let g=new rN;g.setAttribute("position",new rC(p,3)),g.setAttribute("uv",new rC(f,2)),g.setAttribute("faceIndex",new rC(m,1)),t.push(g),s>4&&s--}return{lodPlanes:t,sizeLods:i,sigmas:r}}(r)),this._blurMaterial=new r8({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new ix(0,1,0)}},vertexShader:sz(),fragmentShader:` 2932 2933 precision mediump float; 2934 precision mediump int; 2935 2936 varying vec3 vOutputDirection; 2937 2938 uniform sampler2D envMap; 2939 uniform int samples; 2940 uniform float weights[ n ]; 2941 uniform bool latitudinal; 2942 uniform float dTheta; 2943 uniform float mipInt; 2944 uniform vec3 poleAxis; 2945 2946 #define ENVMAP_TYPE_CUBE_UV 2947 #include <cube_uv_reflection_fragment> 2948 2949 vec3 getSample( float theta, vec3 axis ) { 2950 2951 float cosTheta = cos( theta ); 2952 // Rodrigues' axis-angle rotation 2953 vec3 sampleDirection = vOutputDirection * cosTheta 2954 + cross( axis, vOutputDirection ) * sin( theta ) 2955 + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); 2956 2957 return bilinearCubeUV( envMap, sampleDirection, mipInt ); 2958 2959 } 2960 2961 void main() { 2962 2963 vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); 2964 2965 if ( all( equal( axis, vec3( 0.0 ) ) ) ) { 2966 2967 axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); 2968 2969 } 2970 2971 axis = normalize( axis ); 2972 2973 gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 2974 gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); 2975 2976 for ( int i = 1; i < n; i++ ) { 2977 2978 if ( i >= samples ) { 2979 2980 break; 2981 2982 } 2983 2984 float theta = dTheta * float( i ); 2985 gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); 2986 gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); 2987 2988 } 2989 2990 } 2991 `,blending:0,depthTest:!1,depthWrite:!1})}return r}_compileMaterial(e){let t=new rJ(this._lodPlanes[0],e);this._renderer.compile(t,sM)}_sceneToCubeUV(e,t,i,r){let s=new r7(90,1,t,i),a=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],l=this._renderer,h=l.autoClear,c=l.toneMapping;l.getClearColor(sE),l.toneMapping=0,l.autoClear=!1;
2991let d=new rA({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),u=new rJ(new r0,d),p=!1,f=e.background;f?f.isColor&&(d.color.copy(f),e.background=null,p=!0):(d.color.copy(sE),p=!0);for(let t=0;t<6;t++){let i=t%3;0===i?(s.up.set(0,a[t],0),s.lookAt(o[t],0,0)):1===i?(s.up.set(0,0,a[t]),s.lookAt(0,o[t],0)):(s.up.set(0,a[t],0),s.lookAt(0,0,o[t]));let h=this._cubeSize;sR(r,i*h,t>2?h:0,h,h),l.setRenderTarget(r),p&&l.render(u,s),l.render(e,s)}u.geometry.dispose(),u.material.dispose(),l.toneMapping=c,l.autoClear=h,e.background=f}_textureToCubeUV(e,t){let i=this._renderer,r=301===e.mapping||302===e.mapping;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=sB()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=sL());let s=r?this._cubemapMaterial:this._equirectMaterial,a=new rJ(this._lodPlanes[0],s);s.uniforms.envMap.value=e;let o=this._cubeSize;sR(t,0,0,3*o,2*o),i.setRenderTarget(t),i.render(a,sM)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let t=1;t<this._lodPlanes.length;t++){let i=Math.sqrt(this._sigmas[t]*this._sigmas[t]-this._sigmas[t-1]*this._sigmas[t-1]),r=sD[(t-1)%sD.length];this._blur(e,t-1,t,i,r)}t.autoClear=i}_blur(e,t,i,r,s){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,r,"latitudinal",s),this._halfBlur(a,e,i,i,r,"longitudinal",s)}_halfBlur(e,t,i,r,s,a,o){let l=this._renderer,h=this._blurMaterial;"latitudinal"!==a&&"longitudinal"!==a&&console.error("blur direction must be either latitudinal or longitudinal!");let c=new rJ(this._lodPlanes[r],h),d=h.uniforms,u=this._sizeLods[i]-1,p=isFinite(s)?Math.PI/(2*u):2*Math.PI/39,f=s/p,m=isFinite(s)?1+Math.floor(3*f):20;m>20&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);let g=[],v=0;for(let e=0;e<20;++e){let t=e/f,i=Math.exp(-t*t/2);g.push(i),0===e?v+=i:e<m&&(v+=2*i)}for(let e=0;e<g.length;e++)g[e]=g[e]/v;d.envMap.value=e.texture,d.samples.value=m,d.weights.value=g,d.latitudinal.value="latitudinal"===a,o&&(d.poleAxis.value=o);let{_lodMax:y}=this;d.dTheta.value=p,d.mipInt.value=y-i;let x=this._sizeLods[r],b=4*(this._cubeSize-x);sR(t,3*x*(r>y-4?r-y+4:0),b,3*x,2*x),l.setRenderTarget(t),l.render(c,sM)}};function sO(e,t,i){let r=new ip(e,t,i);return r.texture.mapping=306,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function sR(e,t,i,r,s){e.viewport.set(t,i,r,s),e.scissor.set(t,i,r,s)}function sL(){return new r8({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:sz(),fragmentShader:` 2992 2993 precision mediump float; 2994 precision mediump int; 2995 2996 varying vec3 vOutputDirection; 2997 2998 uniform sampler2D envMap; 2999 3000 #include <common> 3001 3002 void main() { 3003 3004 vec3 outputDirection = normalize( vOutputDirection ); 3005 vec2 uv = equirectUv( outputDirection ); 3006 3007 gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); 3008 3009 } 3010 `,blending:0,depthTest:!1,depthWrite:!1})}function sB(){return new r8({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:sz(),fragmentShader:` 3011 3012 precision mediump float; 3013 precision mediump int; 3014 3015 uniform float flipEnvMap; 3016 3017 varying vec3 vOutputDirection; 3018 3019 uniform samplerCube envMap; 3020 3021 void main() { 3022 3023 gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); 3024 3025 } 3026 `,blending:0,depthTest:!1,depthWrite:!1})}function sz(){return` 3027 3028 precision mediump float; 3029 precision mediump int; 3030 3031 attribute float faceIndex; 3032 3033 varying vec3 vOutputDirection; 3034 3035 // RH coordinate system; PMREM face-indexing convention 3036 vec3 getDirection( vec2 uv, float face ) { 3037 3038 uv = 2.0 * uv - 1.0; 3039 3040 vec3 direction = vec3( uv, 1.0 ); 3041 3042 if ( face == 0.0 ) { 3043 3044 direction = direction.zyx; // ( 1, v, u ) pos x 3045 3046 } else if ( face == 1.0 ) { 3047 3048 direction = direction.xzy; 3049 direction.xz *= -1.0; // ( -u, 1, -v ) pos y 3050 3051 } else if ( face == 2.0 ) { 3052 3053 direction.x *= -1.0; // ( -u, v, 1 ) pos z 3054 3055 } else if ( face == 3.0 ) { 3056 3057 direction = direction.zyx; 3058 direction.xz *= -1.0; // ( -1, v, -u ) neg x 3059 3060 } else if ( face == 4.0 ) { 3061 3062 direction = direction.xzy; 3063 direction.xy *= -1.0; // ( -u, -1, v ) neg y 3064 3065 } else if ( face == 5.0 ) { 3066 3067 direction.z *= -1.0; // ( u, v, -1 ) neg z 3068 3069 } 3070 3071 return direction; 3072 3073 } 3074 3075 void main() { 3076 3077 vOutputDirection = getDirection( uv, faceIndex ); 3078 gl_Position = vec4( position, 1.0 ); 3079 3080 } 3081 `}function sF(e){let t=new WeakMap,i=null;function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture){let a=s.mapping,o=303===a||304===a,l=301===a||302===a;if(o||l){if(s.isRenderTargetTexture&&!0===s.needsPMREMUpdate){s.needsPMREMUpdate=!1;let r=t.get(s);return null===i&&(i=new sI(e)),r=o?i.fromEquirectangular(s,r):i.fromCubemap(s,r),t.set(s,r),r.texture}if(t.has(s))return t.get(s).texture;{let a=s.image;if(!(o&&a&&a.height>0||l&&a&&function(e){let t=0;for(let i=0;i<6;i++)void 0!==e[i]&&t++;return 6===t}(a)))return null;{null===i&&(i=new sI(e));let a=o?i.fromEquirectangular(s):i.fromCubemap(s);return t.set(s,a),s.addEventListener("dispose",r),a.texture}}}}return s},dispose:function(){t=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function sN(e){let t={};function i(i){let r;if(void 0!==t[i])return t[i];switch(i){case"WEBGL_depth_texture":r=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=e.getExtension(i)}return t[i]=r,r}return{has:function(e){return null!==i(e)},init:function(e){e.isWebGL2?i("EXT_color_buffer_float"):(i("WEBGL_depth_texture"),i("OES_texture_float"),i("OES_texture_half_float"),i("OES_texture_half_float_linear"),i("OES_standard_derivatives"),i("OES_element_index_uint"),i("OES_vertex_array_object"),i("ANGLE_instanced_arrays")),i("OES_texture_float_linear"),i("EXT_color_buffer_half_float"),i("WEBGL_multisampled_render_to_texture")},get:function(e){let t=i(e);return null===t&&console.warn("THREE.WebGLRenderer: "+e+" extension not supported."),t}}}function sU(e,t,i,r){let s={},a=new WeakMap;function o(e){let l=e.target;for(let e in null!==l.index&&t.remove(l.index),l.attributes)t.remove(l.attributes[e]);l.removeEventListener("dispose",o),delete s[l.id];let h=a.get(l);
3081h&&(t.remove(h),a.delete(l)),r.releaseStatesOfGeometry(l),!0===l.isInstancedBufferGeometry&&delete l._maxInstanceCount,i.memory.geometries--}function l(e){let i=[],r=e.index,s=e.attributes.position,o=0;if(null!==r){let e=r.array;o=r.version;for(let t=0,r=e.length;t<r;t+=3){let r=e[t+0],s=e[t+1],a=e[t+2];i.push(r,s,s,a,a,r)}}else{let e=s.array;o=s.version;for(let t=0,r=e.length/3-1;t<r;t+=3){let e=t+0,r=t+1,s=t+2;i.push(e,r,r,s,s,e)}}let l=new(t0(i)?rP:rT)(i,1);l.version=o;let h=a.get(e);h&&t.remove(h),a.set(e,l)}return{get:function(e,t){return!0===s[t.id]||(t.addEventListener("dispose",o),s[t.id]=!0,i.memory.geometries++),t},update:function(e){let i=e.attributes;for(let e in i)t.update(i[e],34962);let r=e.morphAttributes;for(let e in r){let i=r[e];for(let e=0,r=i.length;e<r;e++)t.update(i[e],34962)}},getWireframeAttribute:function(e){let t=a.get(e);if(t){let i=e.index;null!==i&&t.version<i.version&&l(e)}else l(e);return a.get(e)}}}function sk(e,t,i,r){let s,a,o=r.isWebGL2,l;this.setMode=function(e){l=e},this.setIndex=function(e){s=e.type,a=e.bytesPerElement},this.render=function(t,r){e.drawElements(l,r,s,t*a),i.update(r,l,1)},this.renderInstances=function(r,h,c){let d,u;if(0!==c){if(o)d=e,u="drawElementsInstanced";else if(d=t.get("ANGLE_instanced_arrays"),u="drawElementsInstancedANGLE",null===d){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}d[u](l,h,s,r*a,c),i.update(h,l,c)}}}function sV(e){let t={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:t,programs:null,autoReset:!0,reset:function(){t.frame++,t.calls=0,t.triangles=0,t.points=0,t.lines=0},update:function(e,i,r){switch(t.calls++,i){case 4:t.triangles+=e/3*r;break;case 1:t.lines+=e/2*r;break;case 3:t.lines+=r*(e-1);break;case 2:t.lines+=r*e;break;case 0:t.points+=r*e;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",i)}}}}function sj(e,t){return e[0]-t[0]}function sG(e,t){return Math.abs(t[1])-Math.abs(e[1])}function sH(e,t,i){let r={},s=new Float32Array(8),a=new WeakMap,o=new iu,l=[];for(let e=0;e<8;e++)l[e]=[e,0];return{update:function(h,c,d,u){let p=h.morphTargetInfluences;if(!0===t.isWebGL2){let r=c.morphAttributes.position||c.morphAttributes.normal||c.morphAttributes.color,s=void 0!==r?r.length:0,l=a.get(c);if(void 0===l||l.count!==s){let e=function(){y.dispose(),a.delete(c),c.removeEventListener("dispose",e)};void 0!==l&&l.texture.dispose();let i=void 0!==c.morphAttributes.position,r=void 0!==c.morphAttributes.normal,h=void 0!==c.morphAttributes.color,d=c.morphAttributes.position||[],u=c.morphAttributes.normal||[],p=c.morphAttributes.color||[],f=0;!0===i&&(f=1),!0===r&&(f=2),!0===h&&(f=3);let m=c.attributes.position.count*f,g=1;m>t.maxTextureSize&&(g=Math.ceil(m/t.maxTextureSize),m=t.maxTextureSize);let v=new Float32Array(m*g*4*s),y=new im(v,m,g,s);y.type=1015,y.needsUpdate=!0;let x=4*f;for(let e=0;e<s;e++){let t=d[e],s=u[e],a=p[e],l=m*g*4*e;for(let e=0;e<t.count;e++){let c=e*x;!0===i&&(o.fromBufferAttribute(t,e),v[l+c+0]=o.x,v[l+c+1]=o.y,v[l+c+2]=o.z,v[l+c+3]=0),!0===r&&(o.fromBufferAttribute(s,e),v[l+c+4]=o.x,v[l+c+5]=o.y,v[l+c+6]=o.z,v[l+c+7]=0),!0===h&&(o.fromBufferAttribute(a,e),v[l+c+8]=o.x,v[l+c+9]=o.y,v[l+c+10]=o.z,v[l+c+11]=4===a.itemSize?o.w:1)}}l={count:s,texture:y,size:new tK(m,g)},a.set(c,l),c.addEventListener("dispose",e)}let h=0;for(let e=0;e<p.length;e++)h+=p[e];let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",p),u.getUniforms().setValue(e,"morphTargetsTexture",l.texture,i),u.getUniforms().setValue(e,"morphTargetsTextureSize",l.size)}else{let t=void 0===p?0:p.length,i=r[c.id];if(void 0===i||i.length!==t){i=[];for(let e=0;e<t;e++)i[e]=[e,0];r[c.id]=i}for(let e=0;e<t;e++){let t=i[e];t[0]=e,t[1]=p[e]}i.sort(sG);for(let e=0;e<8;e++)e<t&&i[e][1]?(l[e][0]=i[e][0],l[e][1]=i[e][1]):(l[e][0]=Number.MAX_SAFE_INTEGER,l[e][1]=0);l.sort(sj);let a=c.morphAttributes.position,o=c.morphAttributes.normal,h=0;for(let e=0;e<8;e++){let t=l[e],i=t[0],r=t[1];i!==Number.MAX_SAFE_INTEGER&&r?(a&&c.getAttribute("morphTarget"+e)!==a[i]&&c.setAttribute("morphTarget"+e,a[i]),o&&c.getAttribute("morphNormal"+e)!==o[i]&&c.setAttribute("morphNormal"+e,o[i]),s[e]=r,h+=r):(a&&!0===c.hasAttribute("morphTarget"+e)&&c.deleteAttribute("morphTarget"+e),o&&!0===c.hasAttribute("morphNormal"+e)&&c.deleteAttribute("morphNormal"+e),s[e]=0)}let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",s)}}}}function sW(e,t,i,r){let s=new WeakMap;function a(e){let t=e.target;t.removeEventListener("dispose",a),i.remove(t.instanceMatrix),null!==t.instanceColor&&i.remove(t.instanceColor)}return{update:function(e){let o=r.render.frame,l=e.geometry,h=t.get(e,l);return s.get(h)!==o&&(t.update(h),s.set(h,o)),e.isInstancedMesh&&(!1===e.hasEventListener("dispose",a)&&e.addEventListener("dispose",a),i.update(e.instanceMatrix,34962),null!==e.instanceColor&&i.update(e.instanceColor,34962)),h},dispose:function(){s=new WeakMap}}}var sq=new id,sX=new im,sY=new ig,sQ=new st,sZ=[],sK=[],sJ=new Float32Array(16),s$=new Float32Array(9),s0=new Float32Array(4);function s1(e,t,i){let r=e[0];if(r<=0||r>0)return e;let s=t*i,a=sZ[s];if(void 0===a&&(a=new Float32Array(s),sZ[s]=a),0!==t){r.toArray(a,0);for(let r=1,s=0;r!==t;++r)s+=i,e[r].toArray(a,s)}return a}function s2(e,t){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(e[i]!==t[i])return!1;return!0}function s3(e,t){for(let i=0,r=t.length;i<r;i++)e[i]=t[i]}function s4(e,t){let i=sK[t];void 0===i&&(i=new Int32Array(t),sK[t]=i);for(let r=0;r!==t;++r)i[r]=e.allocateTextureUnit();return i}function s5(e,t){let i=this.cache;i[0]!==t&&(e.uniform1f(this.addr,t),i[0]=t)}function s6(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2f(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s2(i,t))return;e.uniform2fv(this.addr,t),s3(i,t)}}function s8(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3f(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else if(void 0!==t.r)(i[0]!==t.r||i[1]!==t.g||i[2]!==t.b)&&(e.uniform3f(this.addr,t.r,t.g,t.b),i[0]=t.r,i[1]=t.g,i[2]=t.b);else{if(s2(i,t))return;e.uniform3fv(this.addr,t),s3(i,t)}}function s9(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4f(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s2(i,t))return;e.uniform4fv(this.addr,t),s3(i,t)}}function s7(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s2(i,t))return;e.uniformMatrix2fv(this.addr,!1,t),s3(i,t)}else{if(s2(i,r))return;s0.set(r),e.uniformMatrix2fv(this.addr,!1,s0),s3(i,r)}}function ae(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s2(i,t))return;e.uniformMatrix3fv(this.addr,!1,t),s3(i,t)}else{if(s2(i,r))return;s$.set(r),e.uniformMatrix3fv(this.addr,!1,s$),s3(i,r)}}function at(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s2(i,t))return;e.uniformMatrix4fv(this.addr,!1,t),s3(i,t)}else{if(s2(i,r))return;sJ.set(r),e.uniformMatrix4fv(this.addr,!1,sJ),s3(i,r)}}function ai(e,t){let i=this.cache;i[0]!==t&&(e.uniform1i(this.addr,t),i[0]=t)}function ar(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2i(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s2(i,t))return;e.uniform2iv(this.addr,t),s3(i,t)}}function as(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3i(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s2(i,t))return;e.uniform3iv(this.addr,t),s3(i,t)}}function aa(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4i(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s2(i,t))return;e.uniform4iv(this.addr,t),s3(i,t)}}function an(e,t){let i=this.cache;i[0]!==t&&(e.uniform1ui(this.addr,t),i[0]=t)}function ao(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2ui(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s2(i,t))return;e.uniform2uiv(this.addr,t),s3(i,t)}}function al(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3ui(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s2(i,t))return;e.uniform3uiv(this.addr,t),s3(i,t)}}function ah(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4ui(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s2(i,t))return;e.uniform4uiv(this.addr,t),s3(i,t)}}function ac(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2D(t||sq,s)}function ad(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture3D(t||sY,s)}function au(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTextureCube(t||sQ,s)}function ap(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2DArray(t||sX,s)}function af(e,t){e.uniform1fv(this.addr,t)}function am(e,t){let i=s1(t,this.size,2);e.uniform2fv(this.addr,i)}function ag(e,t){let i=s1(t,this.size,3);e.uniform3fv(this.addr,i)}function av(e,t){let i=s1(t,this.size,4);e.uniform4fv(this.addr,i)}function ay(e,t){let i=s1(t,this.size,4);e.uniformMatrix2fv(this.addr,!1,i)}function ax(e,t){let i=s1(t,this.size,9);e.uniformMatrix3fv(this.addr,!1,i)}function ab(e,t){let i=s1(t,this.size,16);e.uniformMatrix4fv(this.addr,!1,i)}function aw(e,t){e.uniform1iv(this.addr,t)}function aS(e,t){e.uniform2iv(this.addr,t)}function a_(e,t){e.uniform3iv(this.addr,t)}function aA(e,t){e.uniform4iv(this.addr,t)}function aM(e,t){e.uniform1uiv(this.addr,t)}function aE(e,t){e.uniform2uiv(this.addr,t)}function aC(e,t){e.uniform3uiv(this.addr,t)}function aT(e,t){e.uniform4uiv(this.addr,t)}function aP(e,t,i){let r=this.cache,s=t.length,a=s4(i,s);s2(r,a)||(e.uniform1iv(this.addr,a),s3(r,a));for(let e=0;e!==s;++e)i.setTexture2D(t[e]||sq,a[e])}function aD(e,t,i){let r=this.cache,s=t.length,a=s4(i,s);s2(r,a)||(e.uniform1iv(this.addr,a),s3(r,a));for(let e=0;e!==s;++e)i.setTexture3D(t[e]||sY,a[e])}function aI(e,t,i){let r=this.cache,s=t.length,a=s4(i,s);s2(r,a)||(e.uniform1iv(this.addr,a),s3(r,a));for(let e=0;e!==s;++e)i.setTextureCube(t[e]||sQ,a[e])}function aO(e,t,i){let r=this.cache,s=t.length,a=s4(i,s);s2(r,a)||(e.uniform1iv(this.addr,a),s3(r,a));for(let e=0;e!==s;++e)i.setTexture2DArray(t[e]||sX,a[e])}var aR=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.setValue=function(e){switch(e){case 5126:return s5;case 35664:return s6;case 35665:return s8;case 35666:return s9;case 35674:return s7;case 35675:return ae;case 35676:return at;case 5124:case 35670:return ai;case 35667:case 35671:return ar;case 35668:case 35672:return as;case 35669:case 35673:return aa;case 5125:return an;case 36294:return ao;case 36295:return al;case 36296:return ah;case 35678:case 36198:case 36298:case 36306:case 35682:return ac;case 35679:case 36299:case 36307:return ad;case 35680:case 36300:case 36308:case 36293:return au;case 36289:case 36303:case 36311:case 36292:return ap}}(t.type)}},aL=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.size=t.size,this.setValue=function(e){switch(e){case 5126:return af;
3081case 35664:return am;case 35665:return ag;case 35666:return av;case 35674:return ay;case 35675:return ax;case 35676:return ab;case 5124:case 35670:return aw;case 35667:case 35671:return aS;case 35668:case 35672:return a_;case 35669:case 35673:return aA;case 5125:return aM;case 36294:return aE;case 36295:return aC;case 36296:return aT;case 35678:case 36198:case 36298:case 36306:case 35682:return aP;case 35679:case 36299:case 36307:return aD;case 35680:case 36300:case 36308:case 36293:return aI;case 36289:case 36303:case 36311:case 36292:return aO}}(t.type)}},aB=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){let r=this.seq;for(let s=0,a=r.length;s!==a;++s){let a=r[s];a.setValue(e,t[a.id],i)}}},az=/(\w+)(\])?(\[|\.)?/g;function aF(e,t){e.seq.push(t),e.map[t.id]=t}var aN=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,35718);for(let r=0;r<i;++r){let i=e.getActiveUniform(t,r),s=e.getUniformLocation(t,i.name);!function(e,t,i){let r=e.name,s=r.length;for(az.lastIndex=0;;){let a=az.exec(r),o=az.lastIndex,l=a[1],h="]"===a[2],c=a[3];if(h&&(l|=0),void 0===c||"["===c&&o+2===s){aF(i,void 0===c?new aR(l,e,t):new aL(l,e,t));break}{let e=i.map[l];void 0===e&&aF(i,e=new aB(l)),i=e}}}(i,s,this)}}setValue(e,t,i,r){let s=this.map[t];void 0!==s&&s.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];void 0!==r&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let s=0,a=t.length;s!==a;++s){let a=t[s],o=i[a.id];!1!==o.needsUpdate&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,s=e.length;r!==s;++r){let s=e[r];s.id in t&&i.push(s)}return i}};function aU(e,t,i){let r=e.createShader(t);return e.shaderSource(r,i),e.compileShader(r),r}var ak=0;function aV(e,t,i){let r=e.getShaderParameter(t,35713),s=e.getShaderInfoLog(t).trim();if(r&&""===s)return"";let a=/ERROR: 0:(\d+)/.exec(s);if(!a)return s;{let r=parseInt(a[1]);return i.toUpperCase()+` 3082 3083`+s+` 3084 3085`+function(e,t){let i=e.split(` 3086`),r=[],s=Math.max(t-6,0),a=Math.min(t+6,i.length);for(let e=s;e<a;e++){let s=e+1;r.push(`${s===t?">":" "} ${s}: ${i[e]}`)}return r.join(` 3087`)}(e.getShaderSource(t),r)}}function aj(e){return""!==e}function aG(e,t){let i=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function aH(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var aW=/^[ \t]*#include +<([\w\d./]+)>/gm;function aq(e){return e.replace(aW,aX)}function aX(e,t){let i=sp[t];if(void 0===i)throw Error("Can not resolve #include <"+t+">");return aq(i)}var aY=/#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;function aQ(e){return e.replace(aY,aZ)}function aZ(e,t,i,r){let s="";for(let e=parseInt(t);e<parseInt(i);e++)s+=r.replace(/\[\s*i\s*\]/g,"[ "+e+" ]").replace(/UNROLLED_LOOP_INDEX/g,e);return s}function aK(e){let t="precision "+e.precision+` float; 3088precision `+e.precision+" int;";return"highp"===e.precision?t+=` 3089#define HIGH_PRECISION`:"mediump"===e.precision?t+=` 3090#define MEDIUM_PRECISION`:"lowp"===e.precision&&(t+=` 3091#define LOW_PRECISION`),t}function aJ(e,t,i,r){let s,a,o;let l,h,c=e.getContext(),d=i.defines,u=i.vertexShader,p=i.fragmentShader,f=(s="SHADOWMAP_TYPE_BASIC",1===i.shadowMapType?s="SHADOWMAP_TYPE_PCF":2===i.shadowMapType?s="SHADOWMAP_TYPE_PCF_SOFT":3===i.shadowMapType&&(s="SHADOWMAP_TYPE_VSM"),s),m=function(e){let t="ENVMAP_TYPE_CUBE";if(e.envMap)switch(e.envMapMode){case 301:case 302:t="ENVMAP_TYPE_CUBE";break;case 306:t="ENVMAP_TYPE_CUBE_UV"}return t}(i),g=(a="ENVMAP_MODE_REFLECTION",i.envMap&&302===i.envMapMode&&(a="ENVMAP_MODE_REFRACTION"),a),v=function(e){let t="ENVMAP_BLENDING_NONE";if(e.envMap)switch(e.combine){case 0:t="ENVMAP_BLENDING_MULTIPLY";break;case 1:t="ENVMAP_BLENDING_MIX";break;case 2:t="ENVMAP_BLENDING_ADD"}return t}(i),y=function(e){let t=e.envMapCubeUVHeight;if(null===t)return null;let i=Math.log2(t)-2;return{texelWidth:1/(3*Math.max(Math.pow(2,i),112)),texelHeight:1/t,maxMip:i}}
3091(i),x=i.isWebGL2?"":[i.extensionDerivatives||i.envMapCubeUVHeight||i.bumpMap||i.tangentSpaceNormalMap||i.clearcoatNormalMap||i.flatShading||"physical"===i.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(i.extensionFragDepth||i.logarithmicDepthBuffer)&&i.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",i.extensionDrawBuffers&&i.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(i.extensionShaderTextureLOD||i.envMap||i.transmission)&&i.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(aj).join(` 3092`),b=function(e){let t=[];for(let i in e){let r=e[i];!1!==r&&t.push("#define "+i+" "+r)}return t.join(` 3093`)}(d),w=c.createProgram(),S,_,A=i.glslVersion?"#version "+i.glslVersion+` 3094`:"";i.isRawShaderMaterial?((S=[b].filter(aj).join(` 3095`)).length>0&&(S+=` 3096`),(_=[x,b].filter(aj).join(` 3097`)).length>0&&(_+=` 3098`)):(S=[aK(i),"#define SHADER_NAME "+i.shaderName,b,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+g:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` 3099`].filter(aj).join(` 3100`),_=[x,aK(i),"#define SHADER_NAME "+i.shaderName,b,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+m:"",i.envMap?"#define "+g:"",i.envMap?"#define "+v:"",
3100y?"#define CUBEUV_TEXEL_WIDTH "+y.texelWidth:"",y?"#define CUBEUV_TEXEL_HEIGHT "+y.texelHeight:"",y?"#define CUBEUV_MAX_MIP "+y.maxMip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==i.toneMapping?"#define TONE_MAPPING":"",0!==i.toneMapping?sp.tonemapping_pars_fragment:"",0!==i.toneMapping?function(e,t){let i;switch(t){case 1:i="Linear";break;case 2:i="Reinhard";break;case 3:i="OptimizedCineon";break;case 4:i="ACESFilmic";break;case 5:i="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),i="Linear"}return"vec3 "+e+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",sp.encodings_pars_fragment,"vec4 linearToOutputTexel( vec4 value ) { return LinearTo"+(o=function(e){switch(e){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",e),["Linear","( value )"]}}(i.outputEncoding))[0]+o[1]+"; }",i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"",` 3101`].filter(aj).join(` 3102`)),u=aH(u=aG(u=aq(u),i),i),p=aH(p=aG(p=aq(p),i),i),u=aQ(u),p=aQ(p),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(A=`#version 300 es 3103`,S=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join(` 3104`)+` 3105`+S,_=["#define varying in",i.glslVersion===tB?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===tB?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` 3106`)+` 3107`+_);let M=A+S+u,E=A+_+p,C=aU(c,35633,M),T=aU(c,35632,E);if(c.attachShader(w,C),c.attachShader(w,T),void 0!==i.index0AttributeName?c.bindAttribLocation(w,0,i.index0AttributeName):!0===i.morphTargets&&c.bindAttribLocation(w,0,"position"),c.linkProgram(w),e.debug.checkSha
3107derErrors){let e=c.getProgramInfoLog(w).trim(),t=c.getShaderInfoLog(C).trim(),i=c.getShaderInfoLog(T).trim(),r=!0,s=!0;if(!1===c.getProgramParameter(w,35714)){r=!1;let t=aV(c,C,"vertex"),i=aV(c,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+c.getError()+" - VALIDATE_STATUS "+c.getProgramParameter(w,35715)+` 3108 3109Program Info Log: `+e+` 3110`+t+` 3111`+i)}else""!==e?console.warn("THREE.WebGLProgram: Program Info Log:",e):(""===t||""===i)&&(s=!1);s&&(this.diagnostics={runnable:r,programLog:e,vertexShader:{log:t,prefix:S},fragmentShader:{log:i,prefix:_}})}return c.deleteShader(C),c.deleteShader(T),this.getUniforms=function(){return void 0===l&&(l=new aN(c,w)),l},this.getAttributes=function(){return void 0===h&&(h=function(e,t){let i={},r=e.getProgramParameter(t,35721);for(let s=0;s<r;s++){let r=e.getActiveAttrib(t,s),a=r.name,o=1;35674===r.type&&(o=2),35675===r.type&&(o=3),35676===r.type&&(o=4),i[a]={type:r.type,location:e.getAttribLocation(t,a),locationSize:o}}return i}(c,w)),h},this.destroy=function(){r.releaseStatesOfProgram(this),c.deleteProgram(w),this.program=void 0},this.name=i.shaderName,this.id=ak++,this.cacheKey=t,this.usedTimes=1,this.program=w,this.vertexShader=C,this.fragmentShader=T,this}var a$=0,a0=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return!1===a.has(r)&&(a.add(r),r.usedTimes++),!1===a.has(s)&&(a.add(s),s.usedTimes++),this}remove(e){for(let t of this.materialCache.get(e))t.usedTimes--,0===t.usedTimes&&this.shaderCache.delete(t.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return void 0===i&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return void 0===i&&(i=new a1(e),t.set(e,i)),i}},a1=class{constructor(e){this.id=a$++,this.code=e,this.usedTimes=0}};function a2(e,t,i,r,s,a,o){let l=new i6,h=new a0,c=[],d=s.isWebGL2,u=s.logarithmicDepthBuffer,p=s.vertexTextures,f=s.precision,m={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};return{getParameters:function(a,l,c,g,v){let y,x,b,w,S=g.fog,_=v.geometry,A=a.isMeshStandardMaterial?g.environment:null,M=(a.isMeshStandardMaterial?i:t).get(a.envMap||A),E=M&&306===M.mapping?M.image.height:null,C=m[a.type];null!==a.precision&&(f=s.getMaxPrecision(a.precision))!==a.precision&&console.warn("THREE.WebGLProgram.getParameters:",a.precision,"not supported, using",f,"instead.");let T=_.morphAttributes.position||_.morphAttributes.normal||_.morphAttributes.color,P=void 0!==T?T.length:0,D=0;if(void 0!==_.morphAttributes.position&&(D=1),void 0!==_.morphAttributes.normal&&(D=2),void 0!==_.morphAttributes.color&&(D=3),C){let e=sm[C];y=e.vertexShader,x=e.fragmentShader}else y=a.vertexShader,x=a.fragmentShader,h.update(a),b=h.getVertexShaderID(a),w=h.getFragmentShaderID(a);let I=e.getRenderTarget(),O=a.alphaTest>0,R=a.clearcoat>0,L=a.iridescence>0;return{isWebGL2:d,shaderID:C,shaderName:a.type,vertexShader:y,fragmentShader:x,defines:a.defines,customVertexShaderID:b,customFragmentShaderID:w,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:f,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:p,outputEncoding:null===I?e.outputEncoding:!0===I.isXRRenderTarget?I.texture.encoding:3e3,map:!!a.map,matcap:!!a.matcap,envMap:!!M,envMapMode:M&&M.mapping,envMapCubeUVHeight:E,lightMap:!!a.lightMap,aoMap:!!a.aoMap,emissiveMap:!!a.emissiveMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,objectSpaceNormalMap:1===a.normalMapType,tangentSpaceNormalMap:0===a.normalMapType,decodeVideoTexture:!!a.map&&!0===a.map.isVideoTexture&&3001===a.map.encoding,clearcoat:R,clearcoatMap:R&&!!a.clearcoatMap,clearcoatRoughnessMap:R&&!!a.clearcoatRoughnessMap,clearcoatNormalMap:R&&!!a.clearcoatNormalMap,iridescence:L,iridescenceMap:L&&!!a.iridescenceMap,iridescenceThicknessMap:L&&!!a.iridescenceThicknessMap,displacementMap:!!a.displacementMap,roughnessMap:!!a.roughnessMap,metalnessMap:!!a.metalnessMap,specularMap:!!a.specularMap,specularIntensityMap:!!a.specularIntensityMap,specularColorMap:!!a.specularColorMap,opaque:!1===a.transparent&&1===a.blending,alphaMap:!!a.alphaMap,alphaTest:O,gradientMap:!!a.gradientMap,sheen:a.sheen>0,sheenColorMap:!!a.sheenColorMap,sheenRoughnessMap:!!a.sheenRoughnessMap,transmission:a.transmission>0,transmissionMap:!!a.transmissionMap,thicknessMap:!!a.thicknessMap,combine:a.combine,vertexTangents:!!a.normalMap&&!!_.attributes.tangent,vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!_.attributes.color&&4===_.attributes.color.itemSize,vertexUvs:!!a.map||!!a.bumpMap||!!a.normalMap||!!a.specularMap||!!a.alphaMap||!!a.emissiveMap||!!a.roughnessMap||!!a.metalnessMap||!!a.clearcoatMap||!!a.clearcoatRoughnessMap||!!a.clearcoatNormalMap||!!a.iridescenceMap||!!a.iridescenceThicknessMap||!!a.displacementMap||!!a.transmissionMap||!!a.thicknessMap||!!a.specularIntensityMap||!!a.specularColorMap||!!a.sheenColorMap||!!a.sheenRoughnessMap,uvsVertexOnly:!(a.map||a.bumpMap||a.normalMap||a.specularMap||a.alphaMap||a.emissiveMap||a.roughnessMap||a.metalnessMap||a.clearcoatNormalMap||a.iridescenceMap||a.iridescenceThicknessMap||a.transmission>0||a.transmissionMap||a.thicknessMap||a.specularIntensityMap||a.specularColorMap||a.sheen>0||a.sheenColorMap||a.sheenRoughnessMap)&&!!a.displacementMap,fog:!!S,useFog:!0===a.fog,fogExp2:S&&S.isFogExp2,flatShading:!!a.flatShading,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:u,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==_.morphAttributes.position,morphNormals:void 0!==_.morphAttributes.normal,morphColors:void 0!==_.morphAttributes.color,morphTargetsCount:P,morphTextureStride:D,numDirLights:l.directional.length,numPointLights:l.point.length,numSpotLights:l.spot.length,numSpotLightMaps:l.spotLightMap.length,numRectAreaLights:l.rectArea.length,numHemiLights:l.hemi.length,numDirLightShadows:l.directionalShadowMap.length,numPointLightShadows:l.pointShadowMap.length,numSpotLightShadows:l.spotShadowMap.length,numSpotLightShadowsWithMaps:l.numSpotLightShadowsWithMaps,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:a.toneMapped?e.toneMapping:0,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,useDepthPacking:!!a.depthPacking,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionDerivatives:a.extensions&&a.extensions.derivatives,extensionFragDepth:a.extensions&&a.extensions.fragDepth,extensionDrawBuffers:a.extensions&&a.extensions.drawBuffers,extensionShaderTextureLOD:a.extensions&&a.extensions.shaderTextureLOD,rendererExtensionFragDepth:d||r.has("EXT_frag_depth"),rendererExtensionDrawBuffers:d||r.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:d||r.has("EXT_shader_texture_lod"),customProgramCacheKey:a.customProgramCacheKey()}},getProgramCacheKey:function(t){let i=[];if(t.shaderID?i.push(t.shaderID):(i.push(t.customVertexShaderID),i.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)i.push(e),i.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(i.push(t.precision),i.push(t.outputEncoding),i.push(t.envMapMode),i.push(t.envMapCubeUVHeight),i.push(t.combine),i.push(t.vertexUvs),i.push(t.fogExp2),i.push(t.sizeAttenuation),i.push(t.morphTargetsCount),i.push(t.morphAttributeCount),i.push(t.numDirLights),i.push(t.numPointLights),i.push(t.numSpotLights),i.push(t.numSpotLightMaps),i.push(t.numHemiLights),i.push(t.numRectAreaLights),i.push(t.numDirLightShadows),i.push(t.numPointLightShadows),i.push(t.numSpotLightShadows),i.push(t.numSpotLightShadowsWithMaps),i.push(t.shadowMapType),i.push(t.toneMapping),i.push(t.numClippingPlanes),i.push(t.numClipIntersection),i.push(t.depthPacking),l.disableAll(),t.isWebGL2&&l.enable(0),t.supportsVertexTextures&&l.enable(1),t.instancing&&l.enable(2),t.instancingColor&&l.enable(3),t.map&&l.enable(4),t.matcap&&l.enable(5),t.envMap&&l.enable(6),t.lightMap&&l.enable(7),t.aoMap&&l.enable(8),t.emissiveMap&&l.enable(9),t.bumpMap&&l.enable(10),t.normalMap&&l.enable(11),t.objectSpaceNormalMap&&l.enable(12),t.tangentSpaceNormalMap&&l.enable(13),t.clearcoat&&l.enable(14),t.clearcoatMap&&l.enable(15),t.clearcoatRoughnessMap&&l.enable(16),t.clearcoatNormalMap&&l.enable(17),t.iridescence&&l.enable(18),t.iridescenceMap&&l.enable(19),t.iridescenceThicknessMap&&l.enable(20),t.dis
3111placementMap&&l.enable(21),t.specularMap&&l.enable(22),t.roughnessMap&&l.enable(23),t.metalnessMap&&l.enable(24),t.gradientMap&&l.enable(25),t.alphaMap&&l.enable(26),t.alphaTest&&l.enable(27),t.vertexColors&&l.enable(28),t.vertexAlphas&&l.enable(29),t.vertexUvs&&l.enable(30),t.vertexTangents&&l.enable(31),t.uvsVertexOnly&&l.enable(32),i.push(l.mask),l.disableAll(),t.fog&&l.enable(0),t.useFog&&l.enable(1),t.flatShading&&l.enable(2),t.logarithmicDepthBuffer&&l.enable(3),t.skinning&&l.enable(4),t.morphTargets&&l.enable(5),t.morphNormals&&l.enable(6),t.morphColors&&l.enable(7),t.premultipliedAlpha&&l.enable(8),t.shadowMapEnabled&&l.enable(9),t.physicallyCorrectLights&&l.enable(10),t.doubleSided&&l.enable(11),t.flipSided&&l.enable(12),t.useDepthPacking&&l.enable(13),t.dithering&&l.enable(14),t.specularIntensityMap&&l.enable(15),t.specularColorMap&&l.enable(16),t.transmission&&l.enable(17),t.transmissionMap&&l.enable(18),t.thicknessMap&&l.enable(19),t.sheen&&l.enable(20),t.sheenColorMap&&l.enable(21),t.sheenRoughnessMap&&l.enable(22),t.decodeVideoTexture&&l.enable(23),t.opaque&&l.enable(24),i.push(l.mask),i.push(e.outputEncoding)),i.push(t.customProgramCacheKey),i.join()},getUniforms:function(e){let t=m[e.type],i;if(t){let e=sm[t];i=r4.clone(e.uniforms)}else i=e.uniforms;return i},acquireProgram:function(t,i){let r;for(let e=0,t=c.length;e<t;e++){let t=c[e];if(t.cacheKey===i){r=t,++r.usedTimes;break}}return void 0===r&&(r=new aJ(e,i,t,a),c.push(r)),r},releaseProgram:function(e){if(0==--e.usedTimes){let t=c.indexOf(e);c[t]=c[c.length-1],c.pop(),e.destroy()}},releaseShaderCache:function(e){h.remove(e)},programs:c,dispose:function(){h.dispose()}}}function a3(){let e=new WeakMap;return{get:function(t){let i=e.get(t);return void 0===i&&(i={},e.set(t,i)),i},remove:function(t){e.delete(t)},update:function(t,i,r){e.get(t)[i]=r},dispose:function(){e=new WeakMap}}}function a4(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function a5(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function a6(){let e=[],t=0,i=[],r=[],s=[];function a(i,r,s,a,o,l){let h=e[t];return void 0===h?(h={id:i.id,object:i,geometry:r,material:s,groupOrder:a,renderOrder:i.renderOrder,z:o,group:l},e[t]=h):(h.id=i.id,h.object=i,h.geometry=r,h.material=s,h.groupOrder=a,h.renderOrder=i.renderOrder,h.z=o,h.group=l),t++,h}return{opaque:i,transmissive:r,transparent:s,init:function(){t=0,i.length=0,r.length=0,s.length=0},push:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.push(d):!0===o.transparent?s.push(d):i.push(d)},unshift:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.unshift(d):!0===o.transparent?s.unshift(d):i.unshift(d)},finish:function(){for(let i=t,r=e.length;i<r;i++){let t=e[i];if(null===t.id)break;t.id=null,t.object=null,t.geometry=null,t.material=null,t.group=null}},sort:function(e,t){i.length>1&&i.sort(e||a4),r.length>
31111&&r.sort(t||a5),s.length>1&&s.sort(t||a5)}}}function a8(){let e=new WeakMap;return{get:function(t,i){let r=e.get(t),s;return void 0===r?(s=new a6,e.set(t,[s])):i>=r.length?(s=new a6,r.push(s)):s=r[i],s},dispose:function(){e=new WeakMap}}}function a9(){let e={};return{get:function(t){let i;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":i={direction:new ix,color:new is};break;case"SpotLight":i={position:new ix,direction:new ix,color:new is,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new ix,color:new is,distance:0,decay:0};break;case"HemisphereLight":i={direction:new ix,skyColor:new is,groundColor:new is};break;case"RectAreaLight":i={color:new is,position:new ix,halfWidth:new ix,halfHeight:new ix}}return e[t.id]=i,i}}}var a7=0;function ne(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function nt(e,t){let i;let r=new a9,s=(i={},{get:function(e){let t;if(void 0!==i[e.id])return i[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tK};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tK,shadowCameraNear:1,shadowCameraFar:1e3}}return i[e.id]=t,t}}),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let e=0;e<9;e++)a.probe.push(new ix);let o=new ix,l=new iQ,h=new iQ;return{setup:function(i,o){let l=0,h=0,c=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let d=0,u=0,p=0,f=0,m=0,g=0,v=0,y=0,x=0,b=0;i.sort(ne);let w=!0!==o?Math.PI:1;for(let e=0,t=i.length;e<t;e++){let t=i[e],o=t.color,S=t.intensity,_=t.distance,A=t.shadow&&t.shadow.map?t.shadow.map.texture:null;if(t.isAmbientLight)l+=o.r*S*w,h+=o.g*S*w,c+=o.b*S*w;else if(t.isLightProbe)for(let e=0;e<9;e++)a.probe[e].addScaledVector(t.sh.coefficients[e],S);else if(t.isDirectionalLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,a.directionalShadow[d]=i,a.directionalShadowMap[d]=A,a.directionalShadowMatrix[d]=t.shadow.matrix,g++}a.directional[d]=e,d++}else if(t.isSpotLight){let e=r.get(t);e.position.setFromMatrixPosition(t.matrixWorld),e.color.copy(o).multiplyScalar(S*w),e.distance=_,e.coneCos=Math.cos(t.angle),e.penumbraCos=Math.cos(t.angle*(1-t.penumbra)),e.decay=t.decay,a.spot[p]=e;let i=t.shadow;if(t.map&&(a.spotLightMap[x]=t.map,x++,i.updateMatrices(t),t.castShadow&&b++),a.spotLightMatrix[p]=i.matrix,t.castShadow){let e=s.get(t);e.shadowBias=i.bias,e.shadowNormalBias=i.normalBias,e.shadowRadius=i.radius,e.shadowMapSize=i.mapSize,a.spotShadow[p]=e,a.spotShadowMap[p]=A,y++}p++}else if(t.isRectAreaLight){let e=r.get(t);e.color.copy(o).multiplyScalar(S),e.halfWidth.set(.5*t.width,0,0),e.halfHeight.set(0,.5*t.height,0),a.rectArea[f]=e,f++}else if(t.isPointLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),e.distance=t.distance,e.decay=t.decay,t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,i.shadowCameraNear=e.camera.near,i.shadowCameraFar=e.camera.far,a.pointShadow[u]=i,a.pointShadowMap[u]=A,a.pointShadowMatrix[u]=t.shadow.matrix,v++}a.point[u]=e,u++}else if(t.isHemisphereLight){let e=r.get(t);e.skyColor.copy(t.color).multiplyScalar(S*w),e.groundColor.copy(t.groundColor).multiplyScalar(S*w),a.hemi[m]=e,m++}}f>0&&(t.isWebGL2||!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=sf.LTC_FLOAT_1,a.rectAreaLTC2=sf.LTC_FLOAT_2):!0===e.has("OES_texture_half_float_linear")?(a.rectAreaLTC1=sf.LTC_HALF_1,a.rectAreaLTC2=sf.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),a.ambient[0]=l,a.ambient[1]=h,a.ambient[2]=c;let S=a.hash;(S.directionalLength!==d||S.pointLength!==u||S.spotLength!==p||S.rectAreaLength!==f||S.hemiLength!==m||S.numDirectionalShadows!==g||S.numPointShadows!==v||S.numSpotShadows!==y||S.numSpotMaps!==x)&&(a.directional.length=d,a.spot.length=p,a.rectArea.length=f,a.point.length=u,a.hemi.length=m,a.directionalShadow.length=g,a.directionalShadowMap.length=g,a.pointShadow.length=v,a.pointShadowMap.length=v,a.spotShadow.length=y,a.spotShadowMap.length=y,a.directionalShadowMatrix.length=g,a.pointShadowMatrix.length=v,a.spotLightMatrix.length=y+x-b,a.spotLightMap.length=x,a.numSpotLightShadowsWithMaps=b,S.directionalLength=d,S.pointLength=u,S.spotLength=p,S.rectAreaLength=f,S.hemiLength=m,S.numDirectionalShadows=g,S.numPointShadows=v,S.numSpotShadows=y,S.numSpotMaps=x,a.version=a7++)},setupView:function(e,t){let i=0,r=0,s=0,c=0,d=0,u=t.matrixWorldInverse;for(let t=0,p=e.length;t<p;t++){let p=e[t];if(p.isDirectionalLight){let e=a.directional[i];e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),i++}else if(p.isSpotLight){let e=a.spot[s];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),s++}else if(p.isRectAreaLight){let e=a.rectArea[c];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),h.identity(),l.copy(p.matrixWorld),l.premultiply(u),h.extractRotation(l),e.halfWidth.set(.5*p.width,0,0),e.halfHeight.set(0,.5*p.height,0),e.halfWidth.applyMatrix4(h),e.halfHeight.applyMatrix4(h),c++}else if(p.isPointLight){let e=a.point[r];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),r++}else if(p.isHemisphereLight){let e=a.hemi[d];e.direction.setFromMatrixPosition(p.matrixWorld),e.direction.transformDirection(u),d++}}},state:a}}function ni(e,t){let i=new nt(e,t),r=[],s=[];return{init:function(){r.length=0,s.length=0},state:{lightsArray:r,shadowsArray:s,lights:i},setupLights:function(e){i.setup(r,e)},setupLightsView:function(e){i.setupView(r,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){s.push(e)}}}function nr(e,t){let i=new WeakMap;return{get:function(r,s=0){let a=i.get(r),o;return void 0===a?(o=new ni(e,t),i.set(r,[o])):s>=a.length?(o=new ni(e,t),a.push(o)):o=a[s],o},dispose:function(){i=new WeakMap}}}var ns=class extends r_{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},na=class extends r_{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new ix,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},nn=`void main() { 3112 gl_Position = vec4( position, 1.0 ); 3113}`,no=`uniform sampler2D shadow_pass; 3114uniform vec2 resolution; 3115uniform float radius; 3116#include <packing> 3117void main() {
3118 const float samples = float( VSM_SAMPLES ); 3119 float mean = 0.0; 3120 float squared_mean = 0.0; 3121 float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); 3122 float uvStart = samples <= 1.0 ? 0.0 : - 1.0; 3123 for ( float i = 0.0; i < samples; i ++ ) { 3124 float uvOffset = uvStart + i * uvStride; 3125 #ifdef HORIZONTAL_PASS 3126 vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); 3127 mean += distribution.x; 3128 squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; 3129 #else 3130 float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); 3131 mean += depth; 3132 squared_mean += depth * depth; 3133 #endif 3134 } 3135 mean = mean / samples; 3136 squared_mean = squared_mean / samples; 3137 float std_dev = sqrt( squared_mean - mean * mean ); 3138 gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); 3139}`;function nl(e,t,i){let r=new sh,s=new tK,a=new tK,o=new iu,l=new ns({depthPacking:3201}),h=new na,c={},d=i.maxTextureSize,u={0:1,1:0,2:2},p=new r8({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new tK},radius:{value:4}},vertexShader:nn,fragmentShader:no}),f=p.clone();f.defines.HORIZONTAL_PASS=1;let m=new rN;m.setAttribute("position",new rC(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let g=new rJ(m,p),v=this;function y(t,i,r,s,a,o){let d=null,p=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==p)d=p;else if(d=!0===r.isPointLight?h:l,e.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){let e=d.uuid,t=i.uuid,r=c[e];void 0===r&&(r={},c[e]=r);let s=r[t];void 0===s&&(s=d.clone(),r[t]=s),d=s}return d.visible=i.visible,d.wireframe=i.wireframe,3===o?d.side=null!==i.shadowSide?i.shadowSide:i.side:d.side=null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.map=i.map,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=s,d.farDistance=a),d}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(i,l,h){if(!1===v.enabled||!1===v.autoUpdate&&!1===v.needsUpdate||0===i.length)return;let c=e.getRenderTarget(),u=e.getActiveCubeFace(),m=e.getActiveMipmapLevel(),x=e.state;x.setBlending(0),x.buffers.color.setClear(1,1,1,1),x.buffers.depth.setTest(!0),x.setScissorTest(!1);for(let c=0,u=i.length;c<u;c++){let u=i[c],m=u.shadow;if(void 0===m){console.warn("THREE.WebGLShadowMap:",u,"has no shadow.");continue}if(!1===m.autoUpdate&&!1===m.needsUpdate)continue;s.copy(m.mapSize);let v=m.getFrameExtents();if(s.multiply(v),a.copy(m.mapSize),(s.x>d||s.y>d)&&(s.x>d&&(a.x=Math.floor(d/v.x),s.x=a.x*v.x,m.mapSize.x=a.x),s.y>d&&(a.y=Math.floor(d/v.y),s.y=a.y*v.y,m.mapSize.y=a.y)),null===m.map){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};m.map=new ip(s.x,s.y,e),m.map.texture.name=u.name+".shadowMap",m.camera.updateProjectionMatrix()}e.setRenderTarget(m.map),e.clear();let b=m.getViewportCount();for(let i=0;i<b;i++){let s=m.getViewport(i);o.set(a.x*s.x,a.y*s.y,a.x*s.z,a.y*s.w),x.viewport(o),m.updateMatrices(u,i),r=m.getFrustum(),function i(s,a,o,l,h){if(!1===s.visible)return;if(s.layers.test(a.layers)&&(s.isMesh||s.isLine||s.isPoints)&&(s.castShadow||s.receiveShadow&&3===h)&&(!s.frustumCulled||r.intersectsObject(s))){s.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,s.matrixWorld);let i=t.update(s),r=s.material;if(Array.isArray(r)){let t=i.groups;for(let a=0,c=t.length;a<c;a++){let c=t[a],d=r[c.materialIndex];if(d&&d.visible){let t=y(s,d,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,c)}}}else if(r.visible){let t=y(s,r,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,null)}}let c=s.children;for(let e=0,t=c.length;e<t;e++)i(c[e],a,o,l,h)}(l,h,m.camera,u,this.type)}!0!==m.isPointLightShadow&&3===this.type&&function(i,r){let a=t.update(g);p.defines.VSM_SAMPLES!==i.blurSamples&&(p.defines.VSM_SAMPLES=i.blurSamples,f.defines.VSM_SAMPLES=i.blurSamples,p.needsUpdate=!0,f.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new ip(s.x,s.y)),p.uniforms.shadow_pass.value=i.map.texture,p.uniforms.resolution.value=i.mapSize,p.uniforms.radius.value=i.radius,e.setRenderTarget(i.mapPass),e.clear(),e.renderBufferDirect(r,null,a,p,g,null),f.uniforms.shadow_pass.value=i.mapPass.texture,f.uniforms.resolution.value=i.mapSize,f.uniforms.radius.value=i.radius,e.setRenderTarget(i.map),e.clear(),e.renderBufferDirect(r,null,a,f,g,null)}(m,h),m.needsUpdate=!1}v.needsUpdate=!1,e.setRenderTarget(c,u,m)}
3139}function nh(e,t,i){let r=i.isWebGL2,s=new function(){let t=!1,i=new iu,r=null,s=new iu(0,0,0,0);return{setMask:function(i){r===i||t||(e.colorMask(i,i,i,i),r=i)},setLocked:function(e){t=e},setClear:function(t,r,a,o,l){!0===l&&(t*=o,r*=o,a*=o),i.set(t,r,a,o),!1===s.equals(i)&&(e.clearColor(t,r,a,o),s.copy(i))},reset:function(){t=!1,r=null,s.set(-1,0,0,0)}}},a=new function(){let t=!1,i=null,r=null,s=null;return{setTest:function(e){e?k(2929):V(2929)},setMask:function(r){i===r||t||(e.depthMask(r),i=r)},setFunc:function(t){if(r!==t){switch(t){case 0:e.depthFunc(512);break;case 1:e.depthFunc(519);break;case 2:e.depthFunc(513);break;case 3:default:e.depthFunc(515);break;case 4:e.depthFunc(514);break;case 5:e.depthFunc(518);break;case 6:e.depthFunc(516);break;case 7:e.depthFunc(517)}r=t}},setLocked:function(e){t=e},setClear:function(t){s!==t&&(e.clearDepth(t),s=t)},reset:function(){t=!1,i=null,r=null,s=null}}},o=new function(){let t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null;return{setTest:function(e){t||(e?k(2960):V(2960))},setMask:function(r){i===r||t||(e.stencilMask(r),i=r)},setFunc:function(t,i,o){(r!==t||s!==i||a!==o)&&(e.stencilFunc(t,i,o),r=t,s=i,a=o)},setOp:function(t,i,r){(o!==t||l!==i||h!==r)&&(e.stencilOp(t,i,r),o=t,l=i,h=r)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null}}},l=new WeakMap,h=new WeakMap,c={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,P=e.getParameter(35661),D=!1,I=e.getParameter(7938);-1!==I.indexOf("WebGL")?D=parseFloat(/^WebGL (\d)/.exec(I)[1])>=1:-1!==I.indexOf("OpenGL ES")&&(D=parseFloat(/^OpenGL ES (\d)/.exec(I)[1])>=2);let O=null,R={},L=e.getParameter(3088),B=e.getParameter(2978),z=new iu().fromArray(L),F=new iu().fromArray(B);function N(t,i,r){let s=new Uint8Array(4),a=e.createTexture();e.bindTexture(t,a),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(let t=0;t<r;t++)e.texImage2D(i+t,0,6408,1,1,0,6408,5121,s);return a}let U={};function k(t){!0!==c[t]&&(e.enable(t),c[t]=!0)}function V(t){!1!==c[t]&&(e.disable(t),c[t]=!1)}U[3553]=N(3553,3553,1),U[34067]=N(34067,34069,6),s.setClear(0,0,0,1),a.setClear(1),o.setClear(0),k(2929),a.setFunc(3),W(!1),q(1),k(2884),H(0);let j={100:32774,101:32778,102:32779};if(r)j[103]=32775,j[104]=32776;else{let e=t.get("EXT_blend_minmax");null!==e&&(j[103]=e.MIN_EXT,j[104]=e.MAX_EXT)}let G={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function H(t,i,r,s,a,o,l,h){if(0===t){!0===m&&(V(3042),m=!1);return}if(!1===m&&(k(3042),m=!0),5!==t){if(t!==g||h!==_){if((100!==v||100!==b)&&(e.blendEquation(32774),v=100,b=100),h)switch(t){case 1:e.blendFuncSeparate(1,771,1,771);break;case 2:e.blendFunc(1,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}else switch(t){case 1:e.blendFuncSeparate(770,771,1,771);break;case 2:e.blendFunc(770,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}y=null,x=null,w=null,S=null,g=t,_=h}return}a=a||i,o=o||r,l=l||s,(i!==v||a!==b)&&(e.blendEquationSeparate(j[i],j[a]),v=i,b=a),(r!==y||s!==x||o!==w||l!==S)&&(e.blendFuncSeparate(G[r],G[s],G[o],G[l]),y=r,x=s,w=o,S=l),g=t,_=!1}function W(t){A!==t&&(t?e.frontFace(2304):e.frontFace(2305),A=t)}function q(t){0!==t?(k(2884),t!==M&&(1===t?e.cullFace(1029):2===t?e.cullFace(1028):e.cullFace(1032))):V(2884),M=t}function X(t,i,r){t?(k(32823),(C!==i||T!==r)&&(e.polygonOffset(i,r),C=i,T=r)):V(32823)}return{buffers:{color:s,depth:a,stencil:o},enable:k,disable:V,bindFramebuffer:function(t,i){return d[t]!==i&&(e.bindFramebuffer(t,i),d[t]=i,r&&(36009===t&&(d[36160]=i),36160===t&&(d[36009]=i)),!0)},drawBuffers:function(r,s){let a=p,o=!1;if(r){if(void 0===(a=u.get(s))&&(a=[],u.set(s,a)),r.isWebGLMultipleRenderTargets){let e=r.texture;if(a.length!==e.length||36064!==a[0]){for(let t=0,i=e.length;t<i;t++)a[t]=36064+t;a.length=e.length,o=!0}}else 36064!==a[0]&&(a[0]=36064,o=!0)}else 1029!==a[0]&&(a[0]=1029,o=!0);
3139o&&(i.isWebGL2?e.drawBuffers(a):t.get("WEBGL_draw_buffers").drawBuffersWEBGL(a))},useProgram:function(t){return f!==t&&(e.useProgram(t),f=t,!0)},setBlending:H,setMaterial:function(e,t){2===e.side?V(2884):k(2884);let i=1===e.side;t&&(i=!i),W(i),1===e.blending&&!1===e.transparent?H(0):H(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),a.setFunc(e.depthFunc),a.setTest(e.depthTest),a.setMask(e.depthWrite),s.setMask(e.colorWrite);let r=e.stencilWrite;o.setTest(r),r&&(o.setMask(e.stencilWriteMask),o.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),o.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),X(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?k(32926):V(32926)},setFlipSided:W,setCullFace:q,setLineWidth:function(t){t!==E&&(D&&e.lineWidth(t),E=t)},setPolygonOffset:X,setScissorTest:function(e){e?k(3089):V(3089)},activeTexture:function(t){void 0===t&&(t=33984+P-1),O!==t&&(e.activeTexture(t),O=t)},bindTexture:function(t,i,r){void 0===r&&(r=null===O?33984+P-1:O);let s=R[r];void 0===s&&(s={type:void 0,texture:void 0},R[r]=s),(s.type!==t||s.texture!==i)&&(O!==r&&(e.activeTexture(r),O=r),e.bindTexture(t,i||U[t]),s.type=t,s.texture=i)},unbindTexture:function(){let t=R[O];void 0!==t&&void 0!==t.type&&(e.bindTexture(t.type,null),t.type=void 0,t.texture=void 0)},compressedTexImage2D:function(){try{e.compressedTexImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexImage3D:function(){try{e.compressedTexImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage2D:function(){try{e.texImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage3D:function(){try{e.texImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},updateUBOMapping:function(t,i){let r=h.get(i);void 0===r&&(r=new WeakMap,h.set(i,r));let s=r.get(t);void 0===s&&(s=e.getUniformBlockIndex(i,t.name),r.set(t,s))},uniformBlockBinding:function(t,i){let r=h.get(i).get(t);l.get(i)!==r&&(e.uniformBlockBinding(i,r,t.__bindingPointIndex),l.set(i,r))},texStorage2D:function(){try{e.texStorage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texStorage3D:function(){try{e.texStorage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage2D:function(){try{e.texSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage3D:function(){try{e.texSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage2D:function(){try{e.compressedTexSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage3D:function(){try{e.compressedTexSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},scissor:function(t){!1===z.equals(t)&&(e.scissor(t.x,t.y,t.z,t.w),z.copy(t))},viewport:function(t){!1===F.equals(t)&&(e.viewport(t.x,t.y,t.z,t.w),F.copy(t))},reset:function(){e.disable(3042),e.disable(2884),e.disable(2929),e.disable(32823),e.disable(3089),e.disable(2960),e.disable(32926),e.blendEquation(32774),e.blendFunc(1,0),e.blendFuncSeparate(1,0,1,0),e.colorMask(!0,!0,!0,!0),e.clearColor(0,0,0,0),e.depthMask(!0),e.depthFunc(513),e.clearDepth(1),e.stencilMask(4294967295),e.stencilFunc(519,0,4294967295),e.stencilOp(7680,7680,7680),e.clearStencil(0),e.cullFace(1029),e.frontFace(2305),e.polygonOffset(0,0),e.activeTexture(33984),e.bindFramebuffer(36160,null),!0===r&&(e.bindFramebuffer(36009,null),e.bindFramebuffer(36008,null)),e.useProgram(null),e.lineWidth(1),e.scissor(0,0,e.canvas.width,e.canvas.height),e.viewport(0,0,e.canvas.width,e.canvas.height),c={},O=null,R={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,z.set(0,0,e.canvas.width,e.canvas.height),F.set(0,0,e.canvas.width,e.canvas.height),s.reset(),a.reset(),o.reset()}}}function nc(e,t,i,r,s,a,o){let l=s.isWebGL2,h=s.maxTextures,c=s.maxCubemapSize,d=s.maxTextureSize,u=s.maxSamples,p=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,f=!(typeof navigator>"u")&&/OculusBrowser/g.test(navigator.userAgent),m=new WeakMap,g,v=new WeakMap,y=!1;try{y="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch{}function x(e,t){return y?new OffscreenCanvas(e,t):t3("canvas")}function b(e,t,i,r){let s=1;if((e.width>r||e.height>r)&&(s=r/Math.max(e.width,e.height)),s<1||!0===t){if(!("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap))return"data"in e&&c
3139onsole.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+e.width+"x"+e.height+")."),e;{let r=t?tX:Math.floor,a=r(s*e.width),o=r(s*e.height);void 0===g&&(g=x(a,o));let l=i?x(a,o):g;return l.width=a,l.height=o,l.getContext("2d").drawImage(e,0,0,a,o),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+e.width+"x"+e.height+") to ("+a+"x"+o+")."),l}}return e}function w(e){return tW(e.width)&&tW(e.height)}function S(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function _(t){e.generateMipmap(t)}function A(i,r,s,a,o=!1){if(!1===l)return r;if(null!==i){if(void 0!==e[i])return e[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let h=r;return 6403===r&&(5126===s&&(h=33326),5131===s&&(h=33325),5121===s&&(h=33321)),33319===r&&(5126===s&&(h=33328),5131===s&&(h=33327),5121===s&&(h=33323)),6408===r&&(5126===s&&(h=34836),5131===s&&(h=34842),5121===s&&(h=3001===a&&!1===o?35907:32856),32819===s&&(h=32854),32820===s&&(h=32855)),(33325===h||33326===h||33327===h||33328===h||34842===h||34836===h)&&t.get("EXT_color_buffer_float"),h}function M(e,t,i){return!0===S(e,i)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function E(e){return 1003===e||1004===e||1005===e?9728:9729}function C(e){let t=e.target;t.removeEventListener("dispose",C),function(e){let t=r.get(e);if(void 0===t.__webglInit)return;let i=e.source,s=v.get(i);if(s){let r=s[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&P(e),0===Object.keys(s).length&&v.delete(i)}r.remove(e)}(t),t.isVideoTexture&&m.delete(t)}function T(t){let i=t.target;i.removeEventListener("dispose",T),function(t){let i=t.texture,s=r.get(t),a=r.get(i);if(void 0!==a.__webglTexture&&(e.deleteTexture(a.__webglTexture),o.memory.textures--),t.depthTexture&&t.depthTexture.dispose(),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++)e.deleteFramebuffer(s.__webglFramebuffer[t]),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer[t]);else{if(e.deleteFramebuffer(s.__webglFramebuffer),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer),s.__webglMultisampledFramebuffer&&e.deleteFramebuffer(s.__webglMultisampledFramebuffer),s.__webglColorRenderbuffer)for(let t=0;t<s.__webglColorRenderbuffer.length;t++)s.__webglColorRenderbuffer[t]&&e.deleteRenderbuffer(s.__webglColorRenderbuffer[t]);s.__webglDepthRenderbuffer&&e.deleteRenderbuffer(s.__webglDepthRenderbuffer)}if(t.isWebGLMultipleRenderTargets)for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);s.__webglTexture&&(e.deleteTexture(s.__webglTexture),o.memory.textures--),r.remove(i[t])}r.remove(i),r.remove(t)}(i)}function P(t){let i=r.get(t);e.deleteTexture(i.__webglTexture);let s=t.source,a=v.get(s);delete a[i.__cacheKey],o.memory.textures--}let D=0;function I(e,t){let s,a=r.get(e);if(e.isVideoTexture&&(s=o.render.frame,m.get(e)!==s&&(m.set(e,s),e.update())),!1===e.isRenderTargetTexture&&e.version>0&&a.__version!==e.version){let i=e.image;if(null===i)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(!1===i.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{z(a,e,t);return}}i.bindTexture(3553,a.__webglTexture,33984+t)}let O={1e3:10497,1001:33071,1002:33648},R={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function L(i,a,o){if(o?(e.texParameteri(i,10242,O[a.wrapS]),e.texParameteri(i,10243,O[a.wrapT]),(32879===i||35866===i)&&e.texParameteri(i,32882,O[a.wrapR]),e.texParameteri(i,10240,R[a.magFilter]),e.texParameteri(i,10241,R[a.minFilter])):(e.texParameteri(i,10242,33071),e.texParameteri(i,10243,33071),(32879===i||35866===i)&&e.texParameteri(i,32882,33071),(1001!==a.wrapS||1001!==a.wrapT)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),e.texParameteri(i,10240,E(a.magFilter)),e.texParameteri(i,10241,E(a.minFilter)),1003!==a.minFilter&&1006!==a.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===t.has("EXT_texture_filter_anisotropic")){let o=t.get("EXT_texture_filter_anisotropic");1003!==a.magFilter&&(1005===a.minFilter||1008===a.minFilter)&&(1015!==a.type||!1!==t.has("OES_texture_float_linear"))&&(!1!==l||1016!==a.type||!1!==t.has("OES_texture_half_float_linear"))&&(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(e.texParameterf(i,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,s.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function B(t,i){let r,s=!1;void 0===t.__webglInit&&(t.__webglInit=!0,i.addEventListener("dispose",C));let a=i.source,l=v.get(a);void 0===l&&(l={},v.set(a,l));let h=((r=[]).push(i.wrapS),r.push(i.wrapT),r.push(i.wrapR||0),r.push(i.magFilter),r.push(i.minFilter),r.push(i.anisotropy),r.push(i.internalFormat),r.push(i.format),r.push(i.type),r.push(i.generateMipmaps),r.push(i.premultiplyAlpha),r.push(i.flipY),r.push(i.unpackAlignment),r.push(i.encoding),r.join());if(h!==t.__cacheKey){void 0===l[h]&&(l[h]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,s=!0),l[h].usedTimes++;let r=l[t.__cacheKey];void 0!==r&&(l[t.__cacheKey].usedTimes--,0===r.usedTimes&&P(i)),t.__cacheKey=h,t.__webglTexture=l[h].texture}return s}function z(t,s,o){let h=3553;(s.isDataArrayTexture||s.isCompressedArrayTexture)&&(h=35866),s.isData3DTexture&&(h=32879);let c=B(t,s),u=s.source;i.bindTexture(h,t.__webglTexture,33984+o);let p=r.get(u);if(u.version!==p.__version||!0===c){i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let t=!l&&(1001!==s.wrapS||1001!==s.wrapT||1003!==s.minFilter&&1006!==s.minFilter)&&!1===w(s.image),r=b
3139(s.image,t,!1,d),f=w(r=j(s,r))||l,m=a.convert(s.format,s.encoding),g=a.convert(s.type),v=A(s.internalFormat,m,g,s.encoding,s.isVideoTexture);L(h,s,f);let y,x=s.mipmaps,E=l&&!0!==s.isVideoTexture,C=void 0===p.__version||!0===c,T=M(s,r,f);if(s.isDepthTexture)v=6402,l?v=1015===s.type?36012:1014===s.type?33190:1020===s.type?35056:33189:1015===s.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===s.format&&6402===v&&1012!==s.type&&1014!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),s.type=1014,g=a.convert(s.type)),1027===s.format&&6402===v&&(v=34041,1020!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),s.type=1020,g=a.convert(s.type))),C&&(E?i.texStorage2D(3553,1,v,r.width,r.height):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,null));else if(s.isDataTexture){if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,r.width,r.height,m,g,r.data)):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,r.data)}else if(s.isCompressedTexture){if(s.isCompressedArrayTexture){E&&C&&i.texStorage3D(35866,T,v,x[0].width,x[0].height,r.depth);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,y.data,0,0):i.compressedTexImage3D(35866,e,v,y.width,y.height,r.depth,0,y.data,0,0):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,g,y.data):i.texImage3D(35866,e,v,y.width,y.height,r.depth,0,m,g,y.data)}else{E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage2D(3553,e,0,0,y.width,y.height,m,y.data):i.compressedTexImage2D(3553,e,v,y.width,y.height,0,y.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data)}}else if(s.isDataArrayTexture)E?(C&&i.texStorage3D(35866,T,v,r.width,r.height,r.depth),i.texSubImage3D(35866,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(35866,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isData3DTexture)E?(C&&i.texStorage3D(32879,T,v,r.width,r.height,r.depth),i.texSubImage3D(32879,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(32879,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isFramebufferTexture){if(C){if(E)i.texStorage2D(3553,T,v,r.width,r.height);else{let e=r.width,t=r.height;for(let r=0;r<T;r++)i.texImage2D(3553,r,v,e,t,0,m,g,null),e>>=1,t>>=1}}}else if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,m,g,y):i.texImage2D(3553,e,v,m,g,y);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,m,g,r)):i.texImage2D(3553,0,v,m,g,r);S(s,f)&&_(h),p.__version=u.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version}function F(t,s,o,l,h){let c=a.convert(o.format,o.encoding),d=a.convert(o.type),u=A(o.internalFormat,c,d,o.encoding);r.get(s).__hasExternalTextures||(32879===h||35866===h?i.texImage3D(h,0,u,s.width,s.height,s.depth,0,c,d,null):i.texImage2D(h,0,u,s.width,s.height,0,c,d,null)),i.bindFramebuffer(36160,t),V(s)?p.framebufferTexture2DMultisampleEXT(36160,l,h,r.get(o).__webglTexture,0,k(s)):(3553===h||h>=34069&&h<=34074)&&e.framebufferTexture2D(36160,l,h,r.get(o).__webglTexture,0),i.bindFramebuffer(36160,null)}function N(t,i,r){if(e.bindRenderbuffer(36161,t),i.depthBuffer&&!i.stencilBuffer){let s=33189;if(r||V(i)){let t=i.depthTexture;t&&t.isDepthTexture&&(1015===t.type?s=36012:1014===t.type&&(s=33190));let r=k(i);V(i)?p.renderbufferStorageMultisampleEXT(36161,r,s,i.width,i.height):e.renderbufferStorageMultisample(36161,r,s,i.width,i.height)}else e.renderbufferStorage(36161,s,i.width,i.height);e.framebufferRenderbuffer(36160,36096,36161,t)}else if(i.depthBuffer&&i.stencilBuffer){let s=k(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,s,35056,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,s,35056,i.width,i.height):e.renderbufferStorage(36161,34041,i.width,i.height),e.framebufferRenderbuffer(36160,33306,36161,t)}
3139else{let t=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let s=0;s<t.length;s++){let o=t[s],l=a.convert(o.format,o.encoding),h=a.convert(o.type),c=A(o.internalFormat,l,h,o.encoding),d=k(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,d,c,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,d,c,i.width,i.height):e.renderbufferStorage(36161,c,i.width,i.height)}}e.bindRenderbuffer(36161,null)}function U(t){let s=r.get(t),a=!0===t.isWebGLCubeRenderTarget;if(t.depthTexture&&!s.__autoAllocateDepthBuffer){if(a)throw Error("target.depthTexture not supported in Cube render targets");!function(t,s){if(s&&s.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(i.bindFramebuffer(36160,t),!(s.depthTexture&&s.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(s.depthTexture).__webglTexture&&s.depthTexture.image.width===s.width&&s.depthTexture.image.height===s.height||(s.depthTexture.image.width=s.width,s.depthTexture.image.height=s.height,s.depthTexture.needsUpdate=!0),I(s.depthTexture,0);let a=r.get(s.depthTexture).__webglTexture,o=k(s);if(1026===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,36096,3553,a,0,o):e.framebufferTexture2D(36160,36096,3553,a,0);else if(1027===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,33306,3553,a,0,o):e.framebufferTexture2D(36160,33306,3553,a,0);else throw Error("Unknown depthTexture format")}(s.__webglFramebuffer,t)}else if(a){s.__webglDepthbuffer=[];for(let r=0;r<6;r++)i.bindFramebuffer(36160,s.__webglFramebuffer[r]),s.__webglDepthbuffer[r]=e.createRenderbuffer(),N(s.__webglDepthbuffer[r],t,!1)}else i.bindFramebuffer(36160,s.__webglFramebuffer),s.__webglDepthbuffer=e.createRenderbuffer(),N(s.__webglDepthbuffer,t,!1);i.bindFramebuffer(36160,null)}function k(e){return Math.min(u,e.samples)}function V(e){let i=r.get(e);return l&&e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function j(e,i){let r=e.encoding,s=e.format,a=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||1035===e.format||3e3!==r&&(3001===r?!1===l?!0===t.has("EXT_sRGB")&&1023===s?(e.format=1035,e.minFilter=1006,e.generateMipmaps=!1):i=io.sRGBToLinear(i):(1023!==s||1009!==a)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",r)),i}this.allocateTextureUnit=function(){let e=D;return e>=h&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+h),D+=1,e},this.resetTextureUnits=function(){D=0},this.setTexture2D=I,this.setTexture2DArray=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(35866,s.__webglTexture,33984+t)},this.setTexture3D=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(32879,s.__webglTexture,33984+t)},this.setTextureCube=function(t,s){let o=r.get(t);if(t.version>0&&o.__version!==t.version){(function(t,s,o){if(6!==s.image.length)return;let h=B(t,s),d=s.source;i.bindTexture(34067,t.__webglTexture,33984+o);let u=r.get(d);if(d.version!==u.__version||!0===h){let t;i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let r=s.isCompressedTexture||s.image[0].isCompressedTexture,p=s.image[0]&&s.image[0].isDataTexture,f=[];for(let e=0;e<6;e++)r||p?f[e]=p?s.image[e].image:s.image[e]:f[e]=b(s.image[e],!1,!0,c),f[e]=j(s,f[e]);let m=f[0],g=w(m)||l,v=a.convert(s.format,s.encoding),y=a.convert(s.type),x=A(s.internalFormat,v,y,s.encoding),E=l&&!0!==s.isVideoTexture,C=void 0===u.__version||!0===h,T=M(s,m,g);if(L(34067,s,g),r){E&&C&&i.texStorage2D(34067,T,x,m.width,m.height);for(let e=0;e<6;e++){t=f[e].mipmaps;for(let r=0;r<t.length;r++){let a=t[r];1023!==s.format?null!==v?E?i.compressedTexSubImage2D(34069+e,r,0,0,a.width,a.height,v,a.data):i.compressedTexImage2D(34069+e,r,x,a.width,a.height,0,a.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):E?i.texSubImage2D(34069+e,r,0,0,a.width,a.height,v,y,a.data):i.texImage2D(34069+e,r,x,a.width,a.height,0,v,y,a.data)}}}else{t=s.mipmaps,E&&C&&(t.length>0&&T++,i.texStorage2D(34067,T,x,f[0].width,f[0].height));for(let e=0;e<6;e++)if(p){E?i.texSubImage2D(34069+e,0,0,0,f[e].width,f[e].height,v,y,f[e].data):i.texImage2D(34069+e,0,x,f[e].width,f[e].height,0,v,y,f[e].data);for(let r=0;r<t.length;r++){let s=t[r].image[e].image;E?i.texSubImage2D(34069+e,r+1,0,0,s.width,s.height,v,y,s.data):i.texImage2D(34069+e,r+1,x,s.width,s.height,0,v,y,s.data)}}else{E?i.texSubImage2D(34069+e,0,0,0,v,y,f[e]):i.texImage2D(34069+e,0,x,v,y,f[e]);for(let r=0;r<t.length;r++){let s=t[r];E?i.texSubImage2D(34069+e,r+1,0,0,v,y,s.image[e]):i.texImage2D(34069+e,r+1,x,v,y,s.image[e])}}}
3139S(s,g)&&_(34067),u.__version=d.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version})(o,t,s);return}i.bindTexture(34067,o.__webglTexture,33984+s)},this.rebindTextures=function(e,t,i){let s=r.get(e);void 0!==t&&F(s.__webglFramebuffer,e,e.texture,36064,3553),void 0!==i&&U(e)},this.setupRenderTarget=function(t){let h=t.texture,c=r.get(t),d=r.get(h);t.addEventListener("dispose",T),!0!==t.isWebGLMultipleRenderTargets&&(void 0===d.__webglTexture&&(d.__webglTexture=e.createTexture()),d.__version=h.version,o.memory.textures++);let u=!0===t.isWebGLCubeRenderTarget,p=!0===t.isWebGLMultipleRenderTargets,f=w(t)||l;if(u){c.__webglFramebuffer=[];for(let t=0;t<6;t++)c.__webglFramebuffer[t]=e.createFramebuffer()}else{if(c.__webglFramebuffer=e.createFramebuffer(),p){if(s.drawBuffers){let i=t.texture;for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);void 0===s.__webglTexture&&(s.__webglTexture=e.createTexture(),o.memory.textures++)}}else console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.")}if(l&&t.samples>0&&!1===V(t)){let r=p?h:[h];c.__webglMultisampledFramebuffer=e.createFramebuffer(),c.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,c.__webglMultisampledFramebuffer);for(let i=0;i<r.length;i++){let s=r[i];c.__webglColorRenderbuffer[i]=e.createRenderbuffer(),e.bindRenderbuffer(36161,c.__webglColorRenderbuffer[i]);let o=a.convert(s.format,s.encoding),l=a.convert(s.type),h=A(s.internalFormat,o,l,s.encoding,!0===t.isXRRenderTarget),d=k(t);e.renderbufferStorageMultisample(36161,d,h,t.width,t.height),e.framebufferRenderbuffer(36160,36064+i,36161,c.__webglColorRenderbuffer[i])}e.bindRenderbuffer(36161,null),t.depthBuffer&&(c.__webglDepthRenderbuffer=e.createRenderbuffer(),N(c.__webglDepthRenderbuffer,t,!0)),i.bindFramebuffer(36160,null)}}if(u){i.bindTexture(34067,d.__webglTexture),L(34067,h,f);for(let e=0;e<6;e++)F(c.__webglFramebuffer[e],t,h,36064,34069+e);S(h,f)&&_(34067),i.unbindTexture()}else if(p){let e=t.texture;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=r.get(a);i.bindTexture(3553,o.__webglTexture),L(3553,a,f),F(c.__webglFramebuffer,t,a,36064+s,3553),S(a,f)&&_(3553)}i.unbindTexture()}else{let e=3553;(t.isWebGL3DRenderTarget||t.isWebGLArrayRenderTarget)&&(l?e=t.isWebGL3DRenderTarget?32879:35866:console.error("THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.")),i.bindTexture(e,d.__webglTexture),L(e,h,f),F(c.__webglFramebuffer,t,h,36064,e),S(h,f)&&_(e),i.unbindTexture()}t.depthBuffer&&U(t)},this.updateRenderTargetMipmap=function(e){let t=w(e)||l,s=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let a=0,o=s.length;a<o;a++){let o=s[a];if(S(o,t)){let t=e.isWebGLCubeRenderTarget?34067:3553,s=r.get(o).__webglTexture;i.bindTexture(t,s),_(t),i.unbindTexture()}}},this.updateMultisampleRenderTarget=function(t){if(l&&t.samples>0&&!1===V(t)){let s=t.isWebGLMultipleRenderTargets?t.texture:[t.texture],a=t.width,o=t.height,l=16384,h=[],c=t.stencilBuffer?33306:36096,d=r.get(t),u=!0===t.isWebGLMultipleRenderTargets;if(u)for(let t=0;t<s.length;t++)i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,3
31396161,null),i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,null,0);i.bindFramebuffer(36008,d.__webglMultisampledFramebuffer),i.bindFramebuffer(36009,d.__webglFramebuffer);for(let i=0;i<s.length;i++){h.push(36064+i),t.depthBuffer&&h.push(c);let p=void 0!==d.__ignoreDepthValues&&d.__ignoreDepthValues;if(!1===p&&(t.depthBuffer&&(l|=256),t.stencilBuffer&&(l|=1024)),u&&e.framebufferRenderbuffer(36008,36064,36161,d.__webglColorRenderbuffer[i]),!0===p&&(e.invalidateFramebuffer(36008,[c]),e.invalidateFramebuffer(36009,[c])),u){let t=r.get(s[i]).__webglTexture;e.framebufferTexture2D(36009,36064,3553,t,0)}e.blitFramebuffer(0,0,a,o,0,0,a,o,l,9728),f&&e.invalidateFramebuffer(36008,h)}if(i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),u)for(let t=0;t<s.length;t++){i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,36161,d.__webglColorRenderbuffer[t]);let a=r.get(s[t]).__webglTexture;i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,a,0)}i.bindFramebuffer(36009,d.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=U,this.setupFrameBufferTexture=F,this.useMultisampledRTT=V}function nd(e,t,i){let r=i.isWebGL2;return{convert:function(i,s=null){let a;if(1009===i)return 5121;if(1017===i)return 32819;if(1018===i)return 32820;if(1010===i)return 5120;if(1011===i)return 5122;if(1012===i)return 5123;if(1013===i)return 5124;if(1014===i)return 5125;if(1015===i)return 5126;if(1016===i)return r?5131:null!==(a=t.get("OES_texture_half_float"))?a.HALF_FLOAT_OES:null;if(1021===i)return 6406;if(1023===i)return 6408;if(1024===i)return 6409;if(1025===i)return 6410;if(1026===i)return 6402;if(1027===i)return 34041;if(1035===i)return null!==(a=t.get("EXT_sRGB"))?a.SRGB_ALPHA_EXT:null;if(1028===i)return 6403;if(1029===i)return 36244;if(1030===i)return 33319;if(1031===i)return 33320;if(1033===i)return 36249;if(33776===i||33777===i||33778===i||33779===i){if(3001===s){if(null===(a=t.get("WEBGL_compressed_texture_s3tc_srgb")))return null;if(33776===i)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(null===(a=t.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===i)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}}if(35840===i||35841===i||35842===i||35843===i){if(null===(a=t.get("WEBGL_compressed_texture_pvrtc")))return null;if(35840===i)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===i)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===i)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===i)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===i)return null!==(a=t.get("WEBGL_compressed_texture_etc1"))?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===i||37496===i){if(null===(a=t.get("WEBGL_compressed_texture_etc")))return null;if(37492===i)return 3001===s?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(37496===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}if(37808===i||37809===i||37810===i||37811===i||37812===i||37813===i||37814===i||37815===i||37816===i||37817===i||37818===i||37819===i||37820===i||37821===i){if(null===(a=t.get("WEBGL_compressed_texture_astc")))return null;if(37808===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(37809===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(37810===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(37811===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(37812===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(37813===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(37814===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(37815===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(37816===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(37817===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(37818===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(37819===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(37820===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(37821===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}if(36492===i){if(null===(a=t.get("EXT_texture_compression_bptc")))return null;if(36492===i)return 3001===s?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}if(36283===i||36284===i||36285===i||36286===i){if(null===(a=t.get("EXT_texture_compression_rgtc")))return null;
3139if(36492===i)return a.COMPRESSED_RED_RGTC1_EXT;if(36284===i)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(36285===i)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(36286===i)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return 1020===i?r?34042:null!==(a=t.get("WEBGL_depth_texture"))?a.UNSIGNED_INT_24_8_WEBGL:null:void 0!==e[i]?e[i]:null}}}var nu=class extends r7{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},np=class extends rc{constructor(){super(),this.isGroup=!0,this.type="Group"}},nf={type:"move"},nm=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new np,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new np,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new ix,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new ix),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new np,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new ix,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new ix),this._grip}dispatchEvent(e){return null!==this._targetRay&&this._targetRay.dispatchEvent(e),null!==this._grip&&this._grip.dispatchEvent(e),null!==this._hand&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(e,t,i){let r=null,s=null,a=null,o=this._targetRay,l=this._grip,h=this._hand;if(e&&"visible-blurred"!==t.session.visibilityState){if(h&&e.hand){for(let r of(a=!0,e.hand.values())){let e=t.getJointPose(r,i),s=this._getHandJoint(h,r);null!==e&&(s.matrix.fromArray(e.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.jointRadius=e.radius),s.visible=null!==e}let r=h.joints["index-finger-tip"],s=h.joints["thumb-tip"],o=r.position.distanceTo(s.position);h.inputState.pinching&&o>.025?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!h.inputState.pinching&&o<=.015&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==l&&e.gripSpace&&null!==(s=t.getPose(e.gripSpace,i))&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1);null!==o&&(null===(r=t.getPose(e.targetRaySpace,i))&&null!==s&&(r=s),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(nf)))}return null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),null!==h&&(h.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let i=new np;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},ng=class extends id{constructor(e,t,i,r,s,a,o,l,h,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&1026===c&&(i=1014),void 0===i&&1027===c&&(i=1020),super(null,r,s,a,o,l,c,i,h),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==o?o:1003,this.minFilter=void 0!==l?l:1003,this.flipY=!1,this.generateMipmaps=!1}},nv=class extends tz{constructor(e,t){super();let i=this,r=null,s=1,a=null,o="local-floor",l=1,h=null,c=null,d=null,u=null,p=null,f=null,m=t.getContextAttributes(),g=null,v=null,y=[],x=[],b=new Set,w=new Map,S=new r7;S.layers.enable(1),S.viewport=new iu;let _=new r7;_.layers.enable(2),_.viewport=new iu;let A=[S,_],M=new nu;M.layers.enable(1),M.layers.enable(2);let E=null,C=null;function T(e){let t=x.indexOf(e.inputSource);if(-1===t)return;let i=y[t];void 0!==i&&i.dispatchEvent({type:e.type,data:e.inputSource})}function P(){r.removeEventListener("select",T),r.removeEventListener("selectstart",T),r.removeEventListener("selectend",T),r.removeEventListener("squeeze",T),r.removeEventListener("squeezestart",T),r.removeEventListener("squeezeend",T),r.removeEventListener("end",P),r.removeEventListener("inputsourceschange",D);for(let e=0;e<y.length;e++){let t=x[e];null!==t&&(x[e]=null,y[e].disconnect(t))}E=null,C=null,e.setRenderTarget(g),p=null,u=null,d=null,r=null,v=null,B.stop(),i.isPresenting=!1,i.dispatchEvent({type:"sessionend"})}function D(e){for(let t=0;t<e.removed.length;t++){let i=e.removed[t],r=x.indexOf(i);r>=0&&(x[r]=null,y[r].disconnect(i))}for(let t=0;t<e.added.length;t++){let i=e.added[t],r=x.indexOf(i);if(-1===r){for(let e=0;e<y.length;e++)if(e>=x.length){x.push(i),r=e;break}else if(null===x[e]){x[e]=i,r=e;break}if(-1===r)break}let s=y[r];s&&s.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=y[e];return void 0===t&&(t=new nm,y[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=y[e];return void 0===t&&(t=new nm,y[e]=t),t.getGripSpace()},this.getHand=function(e){let t=y[e];return void 0===t&&(t=new nm,y[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){s=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){o=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return h||a},this.setReferenceSpace=function(e){h=e},this.getBaseLayer=function(){return null!==u?u:p},this.getBinding=function(){return d},this.getFrame=function(){return f}
3139,this.getSession=function(){return r},this.setSession=async function(c){if(null!==(r=c)){if(g=e.getRenderTarget(),r.addEventListener("select",T),r.addEventListener("selectstart",T),r.addEventListener("selectend",T),r.addEventListener("squeeze",T),r.addEventListener("squeezestart",T),r.addEventListener("squeezeend",T),r.addEventListener("end",P),r.addEventListener("inputsourceschange",D),!0!==m.xrCompatible&&await t.makeXRCompatible(),void 0===r.renderState.layers||!1===e.capabilities.isWebGL2){let i={antialias:void 0!==r.renderState.layers||m.antialias,alpha:m.alpha,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:s};p=new XRWebGLLayer(r,t,i),r.updateRenderState({baseLayer:p}),v=new ip(p.framebufferWidth,p.framebufferHeight,{format:1023,type:1009,encoding:e.outputEncoding,stencilBuffer:m.stencil})}else{let i=null,a=null,o=null;m.depth&&(o=m.stencil?35056:33190,i=m.stencil?1027:1026,a=m.stencil?1020:1014);let l={colorFormat:32856,depthFormat:o,scaleFactor:s};u=(d=new XRWebGLBinding(r,t)).createProjectionLayer(l),r.updateRenderState({layers:[u]}),v=new ip(u.textureWidth,u.textureHeight,{format:1023,type:1009,depthTexture:new ng(u.textureWidth,u.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:m.stencil,encoding:e.outputEncoding,samples:m.antialias?4:0}),e.properties.get(v).__ignoreDepthValues=u.ignoreDepthValues}v.isXRRenderTarget=!0,this.setFoveation(l),h=null,a=await r.requestReferenceSpace(o),B.setContext(r),B.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};let I=new ix,O=new ix;function R(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===r)return;M.near=_.near=S.near=e.near,M.far=_.far=S.far=e.far,(E!==M.near||C!==M.far)&&(r.updateRenderState({depthNear:M.near,depthFar:M.far}),E=M.near,C=M.far);let t=e.parent,i=M.cameras;R(M,t);for(let e=0;e<i.length;e++)R(i[e],t);M.matrixWorld.decompose(M.position,M.quaternion,M.scale),e.matrix.copy(M.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale);let s=e.children;for(let e=0,t=s.length;e<t;e++)s[e].updateMatrixWorld(!0);2===i.length?function(e,t,i){I.setFromMatrixPosition(t.matrixWorld),O.setFromMatrixPosition(i.matrixWorld);let r=I.distanceTo(O),s=t.projectionMatrix.elements,a=i.projectionMatrix.elements,o=s[14]/(s[10]-1),l=s[14]/(s[10]+1),h=(s[9]+1)/s[5],c=(s[9]-1)/s[5],d=(s[8]-1)/s[0],u=(a[8]+1)/a[0],p=r/(-d+u),f=-(p*d);t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(f),e.translateZ(p),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert();let m=o+p,g=l+p;e.projectionMatrix.makePerspective(o*d-f,o*u+(r-f),h*l/g*m,c*l/g*m,m,g)}(M,S,_):M.projectionMatrix.copy(S.projectionMatrix)},this.getCamera=function(){return M},this.getFoveation=function(){if(!(null===u&&null===p))return l},this.setFoveation=function(e){l=e,null!==u&&(u.fixedFoveation=e),null!==p&&void 0!==p.fixedFoveation&&(p.fixedFoveation=e)},this.getPlanes=function(){return b};let L=null,B=new sc;B.setAnimationLoop(function(t,r){if(c=r.getViewerPose(h||a),f=r,null!==c){let t=c.views;null!==p&&(e.setRenderTargetFramebuffer(v,p.framebuffer),e.setRenderTarget(v));let i=!1;t.length!==M.cameras.length&&(M.cameras.length=0,i=!0);for(let r=0;r<t.length;r++){let s=t[r],a=null;if(null!==p)a=p.getViewport(s);else{let t=d.getViewSubImage(u,s);a=t.viewport,0===r&&(e.setRenderTargetTextures(v,t.colorTexture,u.ignoreDepthValues?void 0:t.depthStencilTexture),e.setRenderTarget(v))}let o=A[r];void 0===o&&((o=new r7).layers.enable(r),o.viewport=new iu,A[r]=o),o.matrix.fromArray(s.transform.matrix),o.projectionMatrix.fromArray(s.projectionMatrix),o.viewport.set(a.x,a.y,a.width,a.height),0===r&&M.matrix.copy(o.matrix),!0===i&&M.cameras.push(o)}}for(let e=0;e<y.length;e++){let t=x[e],i=y[e];null!==t&&void 0!==i&&i.update(t,r,h||a)}if(L&&L(t,r),r.detectedPlanes){i.dispatchEvent({type:"planesdetected",data:r.detectedPlanes});let e=null;for(let t of b)r.detectedPlanes.has(t)||(null===e&&(e=[]),e.push(t));if(null!==e)for(let t of e)b.delete(t),w.delete(t),i.dispatchEvent({type:"planeremoved",data:t});for(let e of r.detectedPlanes)if(b.has(e)){let t=w.get(e);e.lastChangedTime>t&&(w.set(e,e.lastChangedTime),i.dispatchEvent({type:"planechanged",data:e}))}else b.add(e),w.set(e,r.lastChangedTime),i.dispatchEvent({type:"planeadded",data:e})}f=null}),this.setAnimationLoop=function(e){L=e},this.dispose=function(){}}};function ny(e,t){function i(i,r){let s,a;i.opacity.value=r.opacity,r.color&&i.diffuse.value.copy(r.color),r.emissive&&i.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(i.map.value=r.map),r.alphaMap&&(i.alphaMap.value=r.alphaMap),r.bumpMap&&(i.bumpMap.value=r.bumpMap,i.bumpScale.value=r.bumpScale,1===r.side&&(i.bumpScale.value*=-1)),r.displacementMap&&(i.displacementMap.value=r.displacementMap,i.displacementScale.value=r.displacementScale,i.displacementBias.value=r.displacementBias),r.emissiveMap&&(i.emissiveMap.value=r.emissiveMap),r.normalMap&&(i.normalMap.value=r.normalMap,i.normalScale.value.copy(r.normalScale),1===r.side&&i.normalScale.value.negate()),r.specularMap&&(i.specularMap.value=r.specularMap),r.alphaTest>0&&(i.alphaTest.value=r.alphaTest);let o=t.get(r).envMap;if(o&&(i.envMap.value=o,i.flipEnvMap.value=o.isCubeTexture&&!1===o.isRenderTargetTexture?-1:1,i.reflectivity.value=r.reflectivity,i.ior.value=r.
3139ior,i.refractionRatio.value=r.refractionRatio),r.lightMap){i.lightMap.value=r.lightMap;let t=!0!==e.physicallyCorrectLights?Math.PI:1;i.lightMapIntensity.value=r.lightMapIntensity*t}r.aoMap&&(i.aoMap.value=r.aoMap,i.aoMapIntensity.value=r.aoMapIntensity),r.map?s=r.map:r.specularMap?s=r.specularMap:r.displacementMap?s=r.displacementMap:r.normalMap?s=r.normalMap:r.bumpMap?s=r.bumpMap:r.roughnessMap?s=r.roughnessMap:r.metalnessMap?s=r.metalnessMap:r.alphaMap?s=r.alphaMap:r.emissiveMap?s=r.emissiveMap:r.clearcoatMap?s=r.clearcoatMap:r.clearcoatNormalMap?s=r.clearcoatNormalMap:r.clearcoatRoughnessMap?s=r.clearcoatRoughnessMap:r.iridescenceMap?s=r.iridescenceMap:r.iridescenceThicknessMap?s=r.iridescenceThicknessMap:r.specularIntensityMap?s=r.specularIntensityMap:r.specularColorMap?s=r.specularColorMap:r.transmissionMap?s=r.transmissionMap:r.thicknessMap?s=r.thicknessMap:r.sheenColorMap?s=r.sheenColorMap:r.sheenRoughnessMap&&(s=r.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),i.uvTransform.value.copy(s.matrix)),r.aoMap?a=r.aoMap:r.lightMap&&(a=r.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,i){i.color.getRGB(t.fogColor.value,r3(e)),i.isFog?(t.fogNear.value=i.near,t.fogFar.value=i.far):i.isFogExp2&&(t.fogDensity.value=i.density)},refreshMaterialUniforms:function(e,r,s,a,o){let l,h;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),r.gradientMap&&(e.gradientMap.value=r.gradientMap)):r.isMeshPhongMaterial?(i(e,r),e.specular.value.copy(r.specular),e.shininess.value=Math.max(r.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),e.roughness.value=r.roughness,e.metalness.value=r.metalness,r.roughnessMap&&(e.roughnessMap.value=r.roughnessMap),r.metalnessMap&&(e.metalnessMap.value=r.metalnessMap),t.get(r).envMap&&(e.envMapIntensity.value=r.envMapIntensity),r.isMeshPhysicalMaterial&&(e.ior.value=r.ior,r.sheen>0&&(e.sheenColor.value.copy(r.sheenColor).multiplyScalar(r.sheen),e.sheenRoughness.value=r.sheenRoughness,r.sheenColorMap&&(e.sheenColorMap.value=r.sheenColorMap),r.sheenRoughnessMap&&(e.sheenRoughnessMap.value=r.sheenRoughnessMap)),r.clearcoat>0&&(e.clearcoat.value=r.clearcoat,e.clearcoatRoughness.value=r.clearcoatRoughness,r.clearcoatMap&&(e.clearcoatMap.value=r.clearcoatMap),r.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=r.clearcoatRoughnessMap),r.clearcoatNormalMap&&(e.clearcoatNormalScale.value.copy(r.clearcoatNormalScale),e.clearcoatNormalMap.value=r.clearcoatNormalMap,1===r.side&&e.clearcoatNormalScale.value.negate())),r.iridescence>0&&(e.iridescence.value=r.iridescence,e.iridescenceIOR.value=r.iridescenceIOR,e.iridescenceThicknessMinimum.value=r.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=r.iridescenceThicknessRange[1],r.iridescenceMap&&(e.iridescenceMap.value=r.iridescenceMap),r.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=r.iridescenceThicknessMap)),r.transmission>0&&(e.transmission.value=r.transmission,e.transmissionSamplerMap.value=o.texture,e.transmissionSamplerSize.value.set(o.width,o.height),r.transmissionMap&&(e.transmissionMap.value=r.transmissionMap),e.thickness.value=r.thickness,r.thicknessMap&&(e.thicknessMap.value=r.thicknessMap),e.attenuationDistance.value=r.attenuationDistance,e.attenuationColor.value.copy(r.attenuationColor)),e.specularIntensity.value=r.specularIntensity,e.specularColor.value.copy(r.specularColor),r.specularIntensityMap&&(e.specularIntensityMap.value=r.specularIntensityMap),r.specularColorMap&&(e.specularColorMap.value=r.specularColorMap))):r.isMeshMatcapMaterial?(i(e,r),r.matcap&&(e.matcap.value=r.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),e.referencePosition.value.copy(r.referencePosition),e.nearDistance.value=r.nearDistance,e.farDistance.value=r.farDistance):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,r.isLineDashedMaterial&&(e.dashSize.value=r.dashSize,e.totalSize.value=r.dashSize
3139+r.gapSize,e.scale.value=r.scale)):r.isPointsMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.size.value=r.size*s,e.scale.value=.5*a,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?l=r.map:r.alphaMap&&(l=r.alphaMap),void 0!==l&&(!0===l.matrixAutoUpdate&&l.updateMatrix(),e.uvTransform.value.copy(l.matrix))):r.isSpriteMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.rotation.value=r.rotation,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?h=r.map:r.alphaMap&&(h=r.alphaMap),void 0!==h&&(!0===h.matrixAutoUpdate&&h.updateMatrix(),e.uvTransform.value.copy(h.matrix))):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function nx(e,t,i,r){let s={},a={},o=[],l=i.isWebGL2?e.getParameter(35375):0;function h(e){let t={boundary:0,storage:0};return"number"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function c(t){let i=t.target;i.removeEventListener("dispose",c);let r=o.indexOf(i.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(s[i.id]),delete s[i.id],delete a[i.id]}return{bind:function(e,t){let i=t.program;r.uniformBlockBinding(e,i)},update:function(i,d){let u,p,f,m,g=s[i.id];void 0===g&&(function(e){let t=e.uniforms,i=0,r=0;for(let e=0,s=t.length;e<s;e++){let s=t[e],a={boundary:0,storage:0},o=Array.isArray(s.value)?s.value:[s.value];for(let e=0,t=o.length;e<t;e++){let t=h(o[e]);a.boundary+=t.boundary,a.storage+=t.storage}if(s.__data=new Float32Array(a.storage/Float32Array.BYTES_PER_ELEMENT),s.__offset=i,e>0){let e=16-(r=i%16);0!==r&&e-a.boundary<0&&(i+=16-r,s.__offset=i)}i+=a.storage}(r=i%16)>0&&(i+=16-r),e.__size=i,e.__cache={}}(i),u=function(){for(let e=0;e<l;e++)if(-1===o.indexOf(e))return o.push(e),e;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}(),i.__bindingPointIndex=u,p=e.createBuffer(),f=i.__size,m=i.usage,e.bindBuffer(35345,p),e.bufferData(35345,f,m),e.bindBuffer(35345,null),e.bindBufferBase(35345,u,p),g=p,s[i.id]=g,i.addEventListener("dispose",c));let v=d.program;r.updateUBOMapping(i,v);let y=t.render.frame;a[i.id]!==y&&(function(t){let i=s[t.id],r=t.uniforms,a=t.__cache;e.bindBuffer(35345,i);for(let t=0,i=r.length;t<i;t++){let i=r[t];if(!0===function(e,t,i){let r=e.value;if(void 0===i[t]){if("number"==typeof r)i[t]=r;else{let e=Array.isArray(r)?r:[r],s=[];for(let t=0;t<e.length;t++)s.push(e[t].clone());i[t]=s}return!0}if("number"==typeof r){if(i[t]!==r)return i[t]=r,!0}else{let e=Array.isArray(i[t])?i[t]:[i[t]],s=Array.isArray(r)?r:[r];for(let t=0;t<e.length;t++){let i=e[t];if(!1===i.equals(s[t]))return i.copy(s[t]),!0}}return!1}(i,t,a)){let t=i.__offset,r=Array.isArray(i.value)?i.value:[i.value],s=0;for(let a=0;a<r.length;a++){let o=r[a],l=h(o);"number"==typeof o?(i.__data[0]=o,e.bufferSubData(35345,t+s,i.__data)):o.isMatrix3?(i.__data[0]=o.elements[0],i.__data[1]=o.elements[1],i.__data[2]=o.elements[2],i.__data[3]=o.elements[0],i.__data[4]=o.elements[3],i.__data[5]=o.elements[4],i.__data[6]=o.elements[5],i.__data[7]=o.elements[0],i.__data[8]=o.elements[6],i.__data[9]=o.elements[7],i.__data[10]=o.elements[8],i.__data[11]=o.elements[0]):(o.toArray(i.__data,s),s+=l.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(35345,t,i.__data)}}e.bindBuffer(35345,null)}(i),a[i.id]=y)},dispose:function(){for(let t in s)e.deleteBuffer(s[t]);o=[],s={},a={}}}}function nb(e={}){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E;this.isWebGLRenderer=!0;let C=void 0!==e.canvas?e.canvas:((E=t3("canvas")).style.display="block",E),T=void 0!==e.context?e.context:null,P=void 0===e.depth||e.depth,D=void 0===e.stencil||e.stencil,I=void 0!==e.antialias&&e.antialias,O=void 0===e.premultipliedAlpha||e.premultipliedAlpha,R=void 0!==e.preserveDrawingBuffer&&e.preserveDrawingBuffer,L=void 0!==e.powerPreference?e.powerPreference:"default",B=void 0!==e.failIfMajorPerformanceCaveat&&e.failIfMajorPerformanceCaveat,z;z=null!==T?T.getContextAttributes().alpha:void 0!==e.alpha&&e.alpha;let F=null,N=null,U=[],k=[];
3139this.domElement=C,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;let V=this,j=!1,G=0,H=0,W=null,q=-1,X=null,Y=new iu,Q=new iu,Z=null,K=C.width,J=C.height,$=1,ee=null,et=null,ei=new iu(0,0,K,J),er=new iu(0,0,K,J),es=!1,ea=new sh,en=!1,eo=!1,el=null,eh=new iQ,ec=new tK,ed=new ix,eu={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function ep(){return null===W?$:1}let ef=T;function em(e,t){for(let i=0;i<e.length;i++){let r=e[i],s=C.getContext(r,t);if(null!==s)return s}return null}try{if("setAttribute"in C&&C.setAttribute("data-engine","three.js r149"),C.addEventListener("webglcontextlost",ey,!1),C.addEventListener("webglcontextrestored",ex,!1),C.addEventListener("webglcontextcreationerror",eb,!1),null===ef){let e=["webgl2","webgl","experimental-webgl"];if(!0===V.isWebGL1Renderer&&e.shift(),ef=em(e,{alpha:!0,depth:P,stencil:D,antialias:I,premultipliedAlpha:O,preserveDrawingBuffer:R,powerPreference:L,failIfMajorPerformanceCaveat:B}),null===ef)throw em(e)?Error("Error creating WebGL context with your selected attributes."):Error("Error creating WebGL context.")}void 0===ef.getShaderPrecisionFormat&&(ef.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){throw console.error("THREE.WebGLRenderer: "+e.message),e}function eg(){t=new sN(ef),i=new sb(ef,t,e),t.init(i),_=new nd(ef,t,i),r=new nh(ef,t,i),s=new sV,a=new a3,o=new nc(ef,t,r,a,i,_,s),l=new sS(V),h=new sF(V),c=new sd(ef,i),A=new sy(ef,t,c,i),d=new sU(ef,c,s,A),u=new sW(ef,d,c,s),b=new sH(ef,i,o),v=new sw(a),p=new a2(V,l,h,t,i,A,v),f=new ny(V,a),m=new a8,g=new nr(t,i),x=new sv(V,l,h,r,u,z,O),y=new nl(V,u,i),M=new nx(ef,s,i,r),w=new sx(ef,t,s,i),S=new sk(ef,t,s,i),s.programs=p.programs,V.capabilities=i,V.extensions=t,V.properties=a,V.renderLists=m,V.shadowMap=y,V.state=r,V.info=s}eg();let ev=new nv(V,ef);function ey(e){e.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),j=!0}function ex(){console.log("THREE.WebGLRenderer: Context Restored."),j=!1;let e=s.autoReset,t=y.enabled,i=y.autoUpdate,r=y.needsUpdate,a=y.type;eg(),s.autoReset=e,y.enabled=t,y.autoUpdate=i,y.needsUpdate=r,y.type=a}function eb(e){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",e.statusMessage)}function ew(e){let t,i=e.target;i.removeEventListener("dispose",ew),void 0!==(t=a.get(i).programs)&&(t.forEach(function(e){p.releaseProgram(e)}),i.isShaderMaterial&&p.releaseShaderCache(i)),a.remove(i)}this.xr=ev,this.getContext=function(){return ef},this.getContextAttributes=function(){return ef.getContextAttributes()},this.forceContextLoss=function(){let e=t.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=t.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return $},this.setPixelRatio=function(e){void 0!==e&&($=e,this.setSize(K,J,!1))},this.getSize=function(e){return e.set(K,J)},this.setSize=function(e,t,i){if(ev.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}K=e,J=t,C.width=Math.floor(e*$),C.height=Math.floor(t*$),!1!==i&&(C.style.width=e+"px",C.style.height=t+"px"),this.setViewport(0,0,e,t)},this.getDrawingBufferSize=function(e){return e.set(K*$,J*$).floor()},this.setDrawingBufferSize=function(e,t,i){K=e,J=t,$=i,C.width=Math.floor(e*i),C.height=Math.floor(t*i),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy(Y)},this.getViewport=function(e){return e.copy(ei)},this.setViewport=function(e,t,i,s){e.isVector4?ei.set(e.x,e.y,e.z,e.w):ei.set(e,t,i,s),r.viewport(Y.copy(ei).multiplyScalar($).floor())},this.getScissor=function(e){return e.copy(er)},this.setScissor=function(e,t,i,s){e.isVector4?er.set(e.x,e.y,e.z,e.w):er.set(e,t,i,s),r.scissor(Q.copy(er).multiplyScalar($).floor())},this.getScissorTest=function(){return es},this.setScissorTest=function(e){r.setScissorTest(es=e)},this.setOpaqueSort=function(e){ee=e},this.setTransparentSort=function(e){et=e},this.getClearColor=function(e){return e.copy(x.getClearColor())},this.setClearColor=function(){x.setClearColor.apply(x,arguments)},this.getClearAlpha=function(){return x.getClearAlpha()},this.setClearAlpha=function(){x.setClearAlpha.apply(x,arguments)},this.clear=function(e=!0,t=!0,i=!0){let r=0;e&&(r|=16384),t&&(r|=256),i&&(r|=1024),ef.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){C.removeEventListener("webglcontextlost",ey,!1),C.removeEventListener("webglcontextrestored",ex,!1),C.removeEventListener("webglcontextcreationerror",eb,!1),m.dispose(),g.dispose(),a.dispose(),l.dispose(),h.dispose(),u.dispose(),A.dispose(),M.dispose(),p.dispose(),ev.dispose(),ev.removeEventListener("sessionstart",e_),ev.removeEventListener("sessionend",eA),el&&(el.dispose(),el=null),eM.stop()},this.renderBufferDirect=function(e,t,s,u,p,m){null===t&&(t=eu);let g=p.isMesh&&0>p.matrixWorld.determinant(),y=function(e,t,s,c,d){var u;!0!==t.isScene&&(t=eu),o.resetTextureUnits();let p=t.fog,m=c.isMeshStandardMaterial?t.environment:null,g=null===W?V.outputEncoding:!0===W.isXRRenderTarget?W.texture.encoding:3e3,y=(c.isMeshStandardMaterial?h:l).get(c.envMap||m),x=!0===c.vertexColors&&!!s.attributes.color&&4===s.attributes.color.itemSize,w=!!c.normalMap&&!!s.attributes.tangent,S=!!s.morphAttributes.position,_=!!s.morphAttributes.normal,A=!!s.morphAttributes.color,E=c.toneMapped?V.toneMapping:0,C=s.morphAttributes.position||s.morphAttributes.normal||s.morphAttributes.color,T=void 0!==C?C.length:0,P=a.get(c),D=N.state.lights;if(!0===en&&(!0===eo||e!==X)){let t=e===X&&c.id===q;v.setState(c,e,t)}let I=!1;c.version===P.__version?(P.needsLights&&P.lightsStateVersion!==D.state.ver
3139sion||P.outputEncoding!==g||d.isInstancedMesh&&!1===P.instancing||!d.isInstancedMesh&&!0===P.instancing||d.isSkinnedMesh&&!1===P.skinning||!d.isSkinnedMesh&&!0===P.skinning||P.envMap!==y||!0===c.fog&&P.fog!==p||void 0!==P.numClippingPlanes&&(P.numClippingPlanes!==v.numPlanes||P.numIntersection!==v.numIntersection)||P.vertexAlphas!==x||P.vertexTangents!==w||P.morphTargets!==S||P.morphNormals!==_||P.morphColors!==A||P.toneMapping!==E||!0===i.isWebGL2&&P.morphTargetsCount!==T)&&(I=!0):(I=!0,P.__version=c.version);let O=P.currentProgram;!0===I&&(O=eT(c,t,d));let R=!1,L=!1,B=!1,z=O.getUniforms(),F=P.uniforms;if(r.useProgram(O.program)&&(R=!0,L=!0,B=!0),c.id!==q&&(q=c.id,L=!0),R||X!==e){if(z.setValue(ef,"projectionMatrix",e.projectionMatrix),i.logarithmicDepthBuffer&&z.setValue(ef,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),X!==e&&(X=e,L=!0,B=!0),c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshStandardMaterial||c.envMap){let t=z.map.cameraPosition;void 0!==t&&t.setValue(ef,ed.setFromMatrixPosition(e.matrixWorld))}(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial)&&z.setValue(ef,"isOrthographic",!0===e.isOrthographicCamera),(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial||c.isShadowMaterial||d.isSkinnedMesh)&&z.setValue(ef,"viewMatrix",e.matrixWorldInverse)}if(d.isSkinnedMesh){z.setOptional(ef,d,"bindMatrix"),z.setOptional(ef,d,"bindMatrixInverse");let e=d.skeleton;e&&(i.floatVertexTextures?(null===e.boneTexture&&e.computeBoneTexture(),z.setValue(ef,"boneTexture",e.boneTexture,o),z.setValue(ef,"boneTextureSize",e.boneTextureSize)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}let U=s.morphAttributes;if((void 0!==U.position||void 0!==U.normal||void 0!==U.color&&!0===i.isWebGL2)&&b.update(d,s,c,O),(L||P.receiveShadow!==d.receiveShadow)&&(P.receiveShadow=d.receiveShadow,z.setValue(ef,"receiveShadow",d.receiveShadow)),c.isMeshGouraudMaterial&&null!==c.envMap&&(F.envMap.value=y,F.flipEnvMap.value=y.isCubeTexture&&!1===y.isRenderTargetTexture?-1:1),L&&(z.setValue(ef,"toneMappingExposure",V.toneMappingExposure),P.needsLights&&(u=B,F.ambientLightColor.needsUpdate=u,F.lightProbe.needsUpdate=u,F.directionalLights.needsUpdate=u,F.directionalLightShadows.needsUpdate=u,F.pointLights.needsUpdate=u,F.pointLightShadows.needsUpdate=u,F.spotLights.needsUpdate=u,F.spotLightShadows.needsUpdate=u,F.rectAreaLights.needsUpdate=u,F.hemisphereLights.needsUpdate=u),p&&!0===c.fog&&f.refreshFogUniforms(F,p),f.refreshMaterialUniforms(F,c,$,J,el),aN.upload(ef,P.uniformsList,F,o)),c.isShaderMaterial&&!0===c.uniformsNeedUpdate&&(aN.upload(ef,P.uniformsList,F,o),c.uniformsNeedUpdate=!1),c.isSpriteMaterial&&z.setValue(ef,"center",d.center),z.setValue(ef,"modelViewMatrix",d.modelViewMatrix),z.setValue(ef,"normalMatrix",d.normalMatrix),z.setValue(ef,"modelMatrix",d.matrixWorld),d.previousModelViewMatrix&&z.setValue(ef,"previousModelViewMatrix",d.previousModelViewMatrix),e.previousProjectionMatrix&&z.setValue(ef,"previousProjectionMatrix",e.previousProjectionMatrix),c.isShaderMaterial||c.isRawShaderMaterial){let e=c.uniformsGroups;for(let t=0,r=e.length;t<r;t++)if(i.isWebGL2){let i=e[t];M.update(i,O),M.bind(i,O)}else console.warn("THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.")}return O}(e,t,s,u,p);r.setMaterial(u,g);let x=s.index,_=1;!0===u.wireframe&&(x=d.getWireframeAttribute(s),_=2);let E=s.drawRange,C=s.attributes.position,T=E.start*_,P=(E.start+E.count)*_;null!==m&&(T=Math.max(T,m.start*_),P=Math.min(P,(m.start+m.count)*_)),null!==x?(T=Math.max(T,0),P=Math.min(P,x.count)):null!=C&&(T=Math.max(T,0),P=Math.min(P,C.count));let D=P-T;if(D<0||D===1/0)return;A.setup(p,u,y,s,x);let I,O=w;if(null!==x&&(I=c.get(x),(O=S).setIndex(I)),p.isMesh)!0===u.wireframe?(r.setLineWidth(u.wireframeLinewidth*ep()),O.setMode(1)):O.setMode(4);
3139else if(p.isLine){let e=u.linewidth;void 0===e&&(e=1),r.setLineWidth(e*ep()),p.isLineSegments?O.setMode(1):p.isLineLoop?O.setMode(2):O.setMode(3)}else p.isPoints?O.setMode(0):p.isSprite&&O.setMode(4);if(p.isInstancedMesh)O.renderInstances(T,D,p.count);else if(s.isInstancedBufferGeometry){let e=void 0!==s._maxInstanceCount?s._maxInstanceCount:1/0,t=Math.min(s.instanceCount,e);O.renderInstances(T,D,t)}else O.render(T,D)},this.compile=function(e,t){function i(e,t,i){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eT(e,t,i),e.side=0,e.needsUpdate=!0,eT(e,t,i),e.side=2):eT(e,t,i)}(N=g.get(e)).init(),k.push(N),e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(N.pushLight(e),e.castShadow&&N.pushShadow(e))}),N.setupLights(V.physicallyCorrectLights),e.traverse(function(t){let r=t.material;if(r){if(Array.isArray(r))for(let s=0;s<r.length;s++)i(r[s],e,t);else i(r,e,t)}}),k.pop(),N=null};let eS=null;function e_(){eM.stop()}function eA(){eM.start()}let eM=new sc;function eE(e,s,a,l){let h,c,d,u=e.opaque,p=e.transmissive,f=e.transparent;N.setupLightsView(a),!0===en&&v.setGlobalState(V.clippingPlanes,a),p.length>0&&(h=i.isWebGL2,null===el&&(el=new ip(1,1,{generateMipmaps:!0,type:t.has("EXT_color_buffer_half_float")?1016:1009,minFilter:1008,samples:h&&!0===I?4:0})),V.getDrawingBufferSize(ec),h?el.setSize(ec.x,ec.y):el.setSize(tX(ec.x),tX(ec.y)),c=V.getRenderTarget(),V.setRenderTarget(el),V.clear(),d=V.toneMapping,V.toneMapping=0,eC(u,s,a),V.toneMapping=d,o.updateMultisampleRenderTarget(el),o.updateRenderTargetMipmap(el),V.setRenderTarget(c)),l&&r.viewport(Y.copy(l)),u.length>0&&eC(u,s,a),p.length>0&&eC(p,s,a),f.length>0&&eC(f,s,a),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function eC(e,t,i){let r=!0===t.isScene?t.overrideMaterial:null;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=a.object,l=a.geometry,h=null===r?a.material:r,c=a.group;o.layers.test(i.layers)&&(o.onBeforeRender(V,t,i,l,h,c),o.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,o.matrixWorld),o.normalMatrix.getNormalMatrix(o.modelViewMatrix),h.onBeforeRender(V,t,i,l,o,c),!0===h.transparent&&2===h.side&&!1===h.forceSinglePass?(h.side=1,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=0,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=2):V.renderBufferDirect(i,t,l,h,o,c),o.onAfterRender(V,t,i,l,h,c))}}function eT(e,t,i){!0!==t.isScene&&(t=eu);let r=a.get(e),s=N.state.lights,o=N.state.shadowsArray,c=s.state.version,d=p.getParameters(e,s.state,o,t,i),u=p.getProgramCacheKey(d),f=r.programs;r.environment=e.isMeshStandardMaterial?t.environment:null,r.fog=t.fog,r.envMap=(e.isMeshStandardMaterial?h:l).get(e.envMap||r.environment),void 0===f&&(e.addEventListener("dispose",ew),f=new Map,r.programs=f);let m=f.get(u);if(void 0!==m){if(r.currentProgram===m&&r.lightsStateVersion===c)return eP(e,d),m}else d.uniforms=p.getUniforms(e),e.onBuild(i,d,V),e.onBeforeCompile(d,V),m=p.acquireProgram(d,u),f.set(u,m),r.uniforms=d.uniforms;let g=r.uniforms;(e.isShaderMaterial||e.isRawShaderMaterial)&&!0!==e.clipping||(g.clippingPlanes=v.uniform),eP(e,d),r.needsLights=e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&!0===e.lights,r.lightsStateVersion=c,r.needsLights&&(g.ambientLightColor.value=s.state.ambient,g.lightProbe.value=s.state.probe,g.directionalLights.value=s.state.directional,g.directionalLightShadows.value=s.state.directionalShadow,g.spotLights.value=s.state.spot,g.spotLightShadows.value=s.state.spotShadow,g.rectAreaLights.value=s.state.rectArea,g.ltc_1.value=s.state.rectAreaLTC1,g.ltc_2.value=s.state.rectAreaLTC2,g.pointLights.value=s.state.point,g.pointLightShadows.value=s.state.pointShadow,g.hemisphereLights.value=s.state.hemi,g.directionalShadowMap.value=s.state.directionalShadowMap,g.directionalShadowMatrix.value=s.state.directionalShadowMatrix,g.spotShadowMap.value=s.state.spotShadowMap,g.spotLightMatrix.value=s.state.spotLightMatrix,g.spotLightMap.value=s.state.spotLightMap,g.pointShadowMap.value=s.state.pointShadowMap,g.pointShadowMatrix.value=s.state.pointShadowMatrix);let y=m.getUniforms(),x=aN.seqWithValue(y.seq,g);return r.currentProgram=m,r.uniformsList=x,m}function eP(e,t){let i=a.get(e);i.outputEncoding=t.outputEncoding,i.instancing=t.instancing,i.skinning=t.skinning,i.morphTargets=t.morphTargets,i.morphNormals=t.morphNormals,i.morphColors=t.morphColors,i.morphTargetsCount=t.morphTargetsCount,i.numClippingPlanes=t.numClippingPlanes,i.numIntersection=t.numClipIntersection,i.vertexAlphas=t.vertexAlphas,i.vertexTangents=t.vertexTangents,i.toneMapping=t.toneMapping}eM.setAnimationLoop(function(e){eS&&eS(e)}),"u">typeof self&&eM.setContext(self),this.setAnimationLoop=function(e){eS=e,ev.setAnimationLoop(e),null===e?eM.stop():eM.start()},ev.addEventListener("sessionstart",e_),ev.addEventListener("sessionend",eA),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(!0===j)return;!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===ev.enabled&&!0===ev.isPresenting&&(!0===ev.cameraAutoUpdate&&ev.updateCamera(t),t=ev.getCamera()),!0===e.isScene&&e.onBeforeRender(V,e,t,W),(N=g.get(e,k.length)).init(),k.push(N),eh.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),ea.setFromProjectionMatrix(eh),eo=this.localClippingEnabled,en=v.init(this.clippingPlanes,eo),(F=m.get(e,U.length)).init(),U.push(F),function e(t,i,r,a){if(!1===t.visible)return;if(t.layers.test(i.layers)){if(t.isGroup)r=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(i);else if(t.isLight)N.pushLight(t),t.castShadow&&N.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||ea.intersectsSprite(t)){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;i.visible&&F.push(t,e,i,r,ed.z,null)}}else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==s.render.frame&&(t.skeleton.update(),t.skeleton.frame=s.render.frame),!t.frustumCulled||ea.intersectsObject(t))){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;if(Array.isArray(i)){let s=e.groups;for(let a=0,o=s.length;a<o;a++){let o=s[a],l=i[o.materialIndex];l&&l.visible&&F.push(t,e,l,r,ed.z,o)}}else i.visible&&F.push(t,e,i,r,ed.z,null)}}let o=t.children;for(let t=0,s=o.length;t<s;t++)e(o[t],i,r,a)}(e,t,0,V.sortObjects),F.finish(),!0===V.sortObjects&&F.sort(ee,et),!0===en&&v.beginShadows();let i=N.state.shadowsArray;if(y.render(i,e,t),!0===en&&v.endShadows(),!0===this.info.autoReset&&this.info.reset(),x.render(F,e),N.setupLights(V.physicallyCorrectLights),t.isArrayCamera){let i=t.cameras;for(let t=0,r=i.length;t<r;t++){let r=i[t];eE(F,e,r,r.viewport)}}else eE(F,e,t);null!==W&&(o.updateMultisampleRenderTarget(W),o.updateRenderTargetMipmap(W)),!0===e.isScene&&e.onAfterRender(V,e,t),A.resetDefaultState(),q=-1,X=null,k.pop(),N=k.length>0?k[k.length-1]:null,U.pop(),F=U.length>0?U[U.length-1]:null},this.getActiveCubeFace=function(){return G},this.getActiveMipmapLevel=function(){return H},this.getRenderTarget=function(){return W},this.setRenderTargetTextures=function(e,i,r){a.get(e.texture).__webglTexture=i,a.get(e.depthTexture).__webglTexture=r;let s=a.get(e);s.__hasExternalTextures=!0,s.__hasExternalTextures&&(s.__autoAllocateDepthBuffer=void 0===r,s.__autoAllocateDepthBuffer||!0===t.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),s.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(e,t){let i=a.get(e);i.__webglFramebuffer=t,i.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,s=0){W=e,G=t,H=s;let l=!0,h=null,c=!1,d=!1;if(e){let s=a.get(e);void 0!==s.__useDefaultFramebuffer?(r.bindFramebuffer(36160,null),l=!1):void 0===s.__webglFramebuffer?o.setupRenderTarget(e):s.__hasExternalTextures&&o.rebindTextures(e,a.get(e.texture).__webglTexture,a.get(e.depthTexture).__webglTexture);let u=e.texture;(u.isData3DTexture||u.isDataArrayTexture||u.isCompressedArrayTexture)&&(d=!0);let p=a.get(e).__webglFramebuffer;
3139e.isWebGLCubeRenderTarget?(h=p[t],c=!0):h=i.isWebGL2&&e.samples>0&&!1===o.useMultisampledRTT(e)?a.get(e).__webglMultisampledFramebuffer:p,Y.copy(e.viewport),Q.copy(e.scissor),Z=e.scissorTest}else Y.copy(ei).multiplyScalar($).floor(),Q.copy(er).multiplyScalar($).floor(),Z=es;if(r.bindFramebuffer(36160,h)&&i.drawBuffers&&l&&r.drawBuffers(e,h),r.viewport(Y),r.scissor(Q),r.setScissorTest(Z),c){let i=a.get(e.texture);ef.framebufferTexture2D(36160,36064,34069+t,i.__webglTexture,s)}else if(d){let i=a.get(e.texture);ef.framebufferTextureLayer(36160,36064,i.__webglTexture,s||0,t||0)}q=-1},this.readRenderTargetPixels=function(e,s,o,l,h,c,d){if(!(e&&e.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let u=a.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==d&&(u=u[d]),u){r.bindFramebuffer(36160,u);try{let r=e.texture,a=r.format,d=r.type;if(1023!==a&&_.convert(a)!==ef.getParameter(35739)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}let u=1016===d&&(t.has("EXT_color_buffer_half_float")||i.isWebGL2&&t.has("EXT_color_buffer_float"));if(1009!==d&&_.convert(d)!==ef.getParameter(35738)&&!(1015===d&&(i.isWebG
3139L2||t.has("OES_texture_float")||t.has("WEBGL_color_buffer_float")))&&!u){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}s>=0&&s<=e.width-l&&o>=0&&o<=e.height-h&&ef.readPixels(s,o,l,h,_.convert(a),_.convert(d),c)}finally{let e=null!==W?a.get(W).__webglFramebuffer:null;r.bindFramebuffer(36160,e)}}},this.copyFramebufferToTexture=function(e,t,i=0){let s=Math.pow(2,-i),a=Math.floor(t.image.width*s),l=Math.floor(t.image.height*s);o.setTexture2D(t,0),ef.copyTexSubImage2D(3553,i,0,0,e.x,e.y,a,l),r.unbindTexture()},this.copyTextureToTexture=function(e,t,i,s=0){let a=t.image.width,l=t.image.height,h=_.convert(i.format),c=_.convert(i.type);o.setTexture2D(i,0),ef.pixelStorei(37440,i.flipY),ef.pixelStorei(37441,i.premultiplyAlpha),ef.pixelStorei(3317,i.unpackAlignment),t.isDataTexture?ef.texSubImage2D(3553,s,e.x,e.y,a,l,h,c,t.image.data):t.isCompressedTexture?ef.compressedTexSubImage2D(3553,s,e.x,e.y,t.mipmaps[0].width,t.mipmaps[0].height,h,t.mipmaps[0].data):ef.texSubImage2D(3553,s,e.x,e.y,h,c,t.image),0===s&&i.generateMipmaps&&ef.generateMipmap(3553),r.unbindTexture()},this.copyTextureToTexture3D=function(e,t,i,s,a=0){if(V.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}let l=e.max.x-e.min.x+1,h=e.max.y-e.min.y+1,c=e.max.z-e.min.z+1,d=_.convert(s.format),u=_.convert(s.type),p;if(s.isData3DTexture)o.setTexture3D(s,0),p=32879;else if(s.isDataArrayTexture)o.setTexture2DArray(s,0),p=35866;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}ef.pixelStorei(37440,s.flipY),ef.pixelStorei(37441,s.premultiplyAlpha),ef.pixelStorei(3317,s.unpackAlignment);let f=ef.getParameter(3314),m=ef.getParameter(32878),g=ef.getParameter(3316),v=ef.getParameter(3315),y=ef.getParameter(32877),x=i.isCompressedTexture?i.mipmaps[0]:i.image;ef.pixelStorei(3314,x.width),ef.pixelStorei(32878,x.height),ef.pixelStorei(3316,e.min.x),ef.pixelStorei(3315,e.min.y),ef.pixelStorei(32877,e.min.z),i.isDataTexture||i.isData3DTexture?ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x.data):i.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),ef.compressedTexSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,x.data)):ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x),ef.pixelStorei(3314,f),ef.pixelStorei(32878,m),ef.pixelStorei(3316,g),ef.pixelStorei(3315,v),ef.pixelStorei(32877,y),0===a&&s.generateMipmaps&&ef.generateMipmap(p),r.unbindTexture()},this.initTexture=function(e){e.isCubeTexture?o.setTextureCube(e,0):e.isData3DTexture?o.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?o.setTexture2DArray(e,0):o.setTexture2D(e,0),r.unbindTexture()},this.resetState=function(){G=0,H=0,W=null,r.reset(),A.reset()},"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends nb{}).prototype.isWebGL1Renderer=!0;var nw=class{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new is(e),this.near=t,this.far=i}clone(){return new nw(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}},nS=class extends rc{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(e){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=e}},n_=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=tV()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let r=0,s=this.stride;r<s;r++)this.array[e+r]=t.array[i+r];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tV()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),i=new this.constructor(t,this.stride);return i.setUsage(this.usage),i}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tV()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},nA=new ix,nM=class{constructor(e,t,i,r=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=i,this.normalized=r}
3139get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,i=this.data.count;t<i;t++)nA.fromBufferAttribute(this,t),nA.applyMatrix4(e),this.setXYZ(t,nA.x,nA.y,nA.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)nA.fromBufferAttribute(this,t),nA.applyNormalMatrix(e),this.setXYZ(t,nA.x,nA.y,nA.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)nA.fromBufferAttribute(this,t),nA.transformDirection(e),this.setXYZ(t,nA.x,nA.y,nA.z);return this}setX(e,t){return this.normalized&&(t=tQ(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=tQ(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=tQ(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=tQ(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=tY(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=tY(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=tY(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=tY(t,this.array)),t}setXY(e,t,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this}setXYZ(e,t,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array),r=tQ(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e=e*this.data.stride+this.offset,this.normalized&&(t=tQ(t,this.array),i=tQ(i,this.array),r=tQ(r,this.array),s=tQ(s,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this.data.array[e+3]=s,this}clone(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new nM(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized);{console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return new rC(new this.array.constructor(e),this.itemSize,this.normalized)}}toJSON(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized};{console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}}},nE=class extends rc{constructor(){super(),this.isBone=!0,this.type="Bone"}},nC=class extends id{constructor(e=null,t=1,i=1,r,s,a,o,l,h=1003,c=1003,d,u){super(null,a,o,l,h,c,r,s,d,u),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},nT=new iQ,nP=new iQ,nD=class{constructor(e=[],t=[]){this.uuid=tV(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(16*e.length),0===t.length)this.calculateInverses();else if(e.length!==t.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new iQ)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let t=new iQ;this.bones[e]&&t.copy(this.bones[e].matrixWorld).invert(),this.boneInverses.push(t)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&t.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&(t.parent&&t.parent.isBone?(t.matrix.copy(t.parent.matrixWorld).invert(),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))}}update(){let e=this.bones,t=this.boneInverses,i=this.boneMatrices,r=this.boneTexture;for(let r=0,s=e.length;r<s;r++){let s=e[r]?e[r].matrixWorld:nP;nT.multiplyMatrices(s,t[r]),nT.toArray(i,16*r)}null!==r&&(r.needsUpdate=!0)}clone(){return new nD(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(4*this.bones.length),t=new Float32Array((e=Math.max(e=tq(e),4))*e*4);t.set(this.boneMatrices);let i=new nC(t,e,e,1023,1015);return i.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=i,this.boneTextureSize=e,this}getBoneByName(e){for(let t=0,i=this.bones.length;t<i;t++){let i=this.bones[t];if(i.name===e)return i}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(e,t){this.uuid=e.uuid;
3139for(let i=0,r=e.bones.length;i<r;i++){let r=e.bones[i],s=t[r];void 0===s&&(console.warn("THREE.Skeleton: No bone found with UUID:",r),s=new nE),this.bones.push(s),this.boneInverses.push(new iQ().fromArray(e.boneInverses[i]))}return this.init(),this}toJSON(){let e={metadata:{version:4.5,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,i=this.boneInverses;for(let r=0,s=t.length;r<s;r++){let s=t[r];e.bones.push(s.uuid);let a=i[r];e.boneInverses.push(a.toArray())}return e}},nI=class extends rC{constructor(e,t,i,r=1){super(e,t,i),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=r}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},nO=new iQ,nR=new iQ,nL=[],nB=new iQ,nz=new rJ,nF=class extends rJ{constructor(e,t,i){super(e,t),this.isInstancedMesh=!0,this.instanceMatrix=new nI(new Float32Array(16*i),16),this.instanceColor=null,this.count=i,this.frustumCulled=!1;for(let e=0;e<i;e++)this.setMatrixAt(e,nB)}copy(e,t){return super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),null!==e.instanceColor&&(this.instanceColor=e.instanceColor.clone()),this.count=e.count,this}getColorAt(e,t){t.fromArray(this.instanceColor.array,3*e)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,16*e)}raycast(e,t){let i=this.matrixWorld,r=this.count;if(nz.geometry=this.geometry,nz.material=this.material,void 0!==nz.material)for(let s=0;s<r;s++){this.getMatrixAt(s,nO),nR.multiplyMatrices(i,nO),nz.matrixWorld=nR,nz.raycast(e,nL);for(let e=0,i=nL.length;e<i;e++){let i=nL[e];i.instanceId=s,i.object=this,t.push(i)}nL.length=0}}setColorAt(e,t){null===this.instanceColor&&(this.instanceColor=new nI(new Float32Array(3*this.instanceMatrix.count),3)),t.toArray(this.instanceColor.array,3*e)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,16*e)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}},nN=class extends r_{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new is(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},nU=new ix,nk=new ix,nV=new iQ,nj=new iY,nG=new ik,nH=class extends rc{constructor(e=new rN,t=new nN){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[0];for(let e=1,r=t.count;e<r;e++)nU.fromBufferAttribute(t,e-1),nk.fromBufferAttribute(t,e),i[e]=i[e-1],i[e]+=nU.distanceTo(nk);e.setAttribute("lineDistance",new rD(i,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(e,t){let i=this.geometry,r=this.matrixWorld,s=e.params.Line.threshold,a=i.drawRange;if(null===i.boundingSphere&&i.computeBoundingSphere(),nG.copy(i.boundingSphere),nG.applyMatrix4(r),nG.radius+=s,!1===e.ray.intersectsSphere(nG))return;nV.copy(r).invert(),nj.copy(e.ray).applyMatrix4(nV);let o=s/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,h=new ix,c=new ix,d=new ix,u=new ix,p=this.isLineSegments?2:1,f=i.index,m=i.attributes.position;if(null!==f){let i=Math.max(0,a.start),r=Math.min(f.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){let i=f.getX(s),r=f.getX(s+1);if(h.fromBufferAttribute(m,i),c.fromBufferAttribute(m,r),nj.distanceSqToSegment(h,c,u,d)>l)continue;u.applyMatrix4(this.matrixWorld);let a=e.ray.origin.distanceTo(u);a<e.near||a>e.far||t.push({distance:a,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}else{let i=Math.max(0,a.start),r=Math.min(m.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){if(h.fromBufferAttribute(m,s),c.fromBufferAttribute(m,s+1),nj.distanceSqToSegment(h,c,u,d)>l)continue;
3139u.applyMatrix4(this.matrixWorld);let i=e.ray.origin.distanceTo(u);i<e.near||i>e.far||t.push({distance:i,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}},nW=new ix,nq=new ix,nX=class extends nH{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[];for(let e=0,r=t.count;e<r;e+=2)nW.fromBufferAttribute(t,e),nq.fromBufferAttribute(t,e+1),i[e]=0===e?0:i[e-1],i[e+1]=i[e]+nW.distanceTo(nq);e.setAttribute("lineDistance",new rD(i,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}},nY=class extends id{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isVideoTexture=!0,this.minFilter=void 0!==a?a:1006,this.magFilter=void 0!==s?s:1006,this.generateMipmaps=!1;let c=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){c.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;"requestVideoFrameCallback"in e==!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},nQ=class extends id{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isCanvasTexture=!0,this.needsUpdate=!0}},nZ=class{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],i,r=this.getPoint(0),s=0;t.push(0);for(let a=1;a<=e;a++)t.push(s+=(i=this.getPoint(a/e)).distanceTo(r)),r=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let i=this.getLengths(),r=0,s=i.length,a;a=t||e*i[s-1];let o=0,l=s-1,h;for(;o<=l;)if((h=i[r=Math.floor(o+(l-o)/2)]-a)<0)o=r+1;else if(h>0)l=r-1;else{l=r;break}if(i[r=l]===a)return r/(s-1);let c=i[r],d=i[r+1]-c;return(r+(a-c)/d)/(s-1)}getTangent(e,t){let i=e-1e-4,r=e+1e-4;i<0&&(i=0),r>1&&(r=1);let s=this.getPoint(i),a=this.getPoint(r),o=t||(s.isVector2?new tK:new ix);return o.copy(a).sub(s).normalize(),o}getTangentAt(e,t){let i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){let i=new ix,r=[],s=[],a=[],o=new ix,l=new iQ;for(let t=0;t<=e;t++){let i=t/e;r[t]=this.getTangentAt(i,new ix)}s[0]=new ix,a[0]=new ix;let h=Number.MAX_VALUE,c=Math.abs(r[0].x),d=Math.abs(r[0].y),u=Math.abs(r[0].z);c<=h&&(h=c,i.set(1,0,0)),d<=h&&(h=d,i.set(0,1,0)),u<=h&&i.set(0,0,1),o.crossVectors(r[0],i).normalize(),s[0].crossVectors(r[0],o),a[0].crossVectors(r[0],s[0]);for(let t=1;t<=e;t++){if(s[t]=s[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>Number.EPSILON){o.normalize();let e=Math.acos(tj(r[t-1].dot(r[t]),-1,1));s[t].applyMatrix4(l.makeRotationAxis(o,e))}a[t].crossVectors(r[t],s[t])}if(!0===t){let t=Math.acos(tj(s[0].dot(s[e]),-1,1));t/=e,r[0].dot(o.crossVectors(s[0],s[e]))>0&&(t=-t);for(let i=1;i<=e;i++)s[i].applyMatrix4(l.makeRotationAxis(r[i],t*i)),a[i].crossVectors(r[i],s[i])}return{tangents:r,normals:s,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.t
3139ype,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},nK=class extends nZ{constructor(e=0,t=0,i=1,r=1,s=0,a=2*Math.PI,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=r,this.aStartAngle=s,this.aEndAngle=a,this.aClockwise=o,this.aRotation=l}getPoint(e,t){let i=t||new tK,r=2*Math.PI,s=this.aEndAngle-this.aStartAngle,a=Math.abs(s)<Number.EPSILON;for(;s<0;)s+=r;for(;s>r;)s-=r;s<Number.EPSILON&&(s=a?0:r),!0!==this.aClockwise||a||(s===r?s=-r:s-=r);let o=this.aStartAngle+e*s,l=this.aX+this.xRadius*Math.cos(o),h=this.aY+this.yRadius*Math.sin(o);if(0!==this.aRotation){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),i=l-this.aX,r=h-this.aY;l=i*e-r*t+this.aX,h=i*t+r*e+this.aY}return i.set(l,h)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},nJ=class extends nK{constructor(e,t,i,r,s,a){super(e,t,i,i,r,s,a),this.isArcCurve=!0,this.type="ArcCurve"}};function n$(){let e=0,t=0,i=0,r=0;
3139function s(s,a,o,l){e=s,t=o,i=-3*s+3*a-2*o-l,r=2*s-2*a+o+l}return{initCatmullRom:function(e,t,i,r,a){s(t,i,a*(i-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,i,r,a,o,l){let h=(t-e)/a-(i-e)/(a+o)+(i-t)/o,c=(i-t)/o-(r-t)/(o+l)+(r-i)/l;s(t,i,h*=o,c*=o)},calc:function(s){let a=s*s;return e+t*s+i*a+a*s*r}}}var n0=new ix,n1=new n$,n2=new n$,n3=new n$,n4=class extends nZ{constructor(e=[],t=!1,i="centripetal",r=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=e,this.closed=t,this.curveType=i,this.tension=r}getPoint(e,t=new ix){let i,r,s=this.points,a=s.length,o=(a-(this.closed?0:1))*e,l=Math.floor(o),h=o-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/a)+1)*a:0===h&&l===a-1&&(l=a-2,h=1),this.closed||l>0?i=s[(l-1)%a]:(n0.subVectors(s[0],s[1]).add(s[0]),i=n0);let c=s[l%a],d=s[(l+1)%a];if(this.closed||l+2<a?r=s[(l+2)%a]:(n0.subVectors(s[a-1],s[a-2]).add(s[a-1]),r=n0),"centripetal"===this.curveType||"chordal"===this.curveType){let e="chordal"===this.curveType?.5:.25,t=Math.pow(i.distanceToSquared(c),e),s=Math.pow(c.distanceToSquared(d),e),a=Math.pow(d.distanceToSquared(r),e);s<1e-4&&(s=1),t<1e-4&&(t=s),a<1e-4&&(a=s),n1.initNonuniformCatmullRom(i.x,c.x,d.x,r.x,t,s,a),n2.initNonuniformCatmullRom(i.y,c.y,d.y,r.y,t,s,a),n3.initNonuniformCatmullRom(i.z,c.z,d.z,r.z,t,s,a)}else"catmullrom"===this.curveType&&(n1.initCatmullRom(i.x,c.x,d.x,r.x,this.tension),n2.initCatmullRom(i.y,c.y,d.y,r.y,this.tension),n3.initCatmullRom(i.z,c.z,d.z,r.z,this.tension));return t.set(n1.calc(h),n2.calc(h),n3.calc(h)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new ix().fromArray(i))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function n5(e,t,i,r,s){let a=(r-t)*.5,o=(s-i)*.5,l=e*e;return e*l*(2*i-2*r+a+o)+(-3*i+3*r-2*a-o)*l+a*e+i}function n6(e,t,i,r){let s;return(s=1-e)*s*t+2*(1-e)*e*i+e*e*r}function n8(e,t,i,r,s){let a,o;return(a=1-e)*a*a*t+3*(o=1-e)*o*e*i+3*(1-e)*e*e*r+e*e*e*s}var n9=class extends nZ{constructor(e=new tK,t=new tK,i=new tK,r=new tK){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new tK){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n8(e,i.x,r.x,s.x,a.x),n8(e,i.y,r.y,s.y,a.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},n7=class extends nZ{constructor(e=new ix,t=new ix,i=new ix,r=new ix){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new ix){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n8(e,i.x,r.x,s.x,a.x),n8(e,i.y,r.y,s.y,a.y),n8(e,i.z,r.z,s.z,a.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},oe=class extends nZ{constructor(e=new tK,t=new tK){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=e,this.v2=t}getPoint(e,t=new tK){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t){let i=t||new tK;return i.copy(this.v2).sub(this.v1).normalize(),i}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},ot=class extends nZ{constructor(e=new ix,t=new ix){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=e,this.v2=t}getPoint(e,t=new ix){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},oi=class extends nZ{constructor(e=new tK,t=new tK,i=new tK){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=e,this.v1=t,this.v2=i}
3139getPoint(e,t=new tK){let i=this.v0,r=this.v1,s=this.v2;return t.set(n6(e,i.x,r.x,s.x),n6(e,i.y,r.y,s.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},or=class extends nZ{constructor(e=new ix,t=new ix,i=new ix){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new ix){let i=this.v0,r=this.v1,s=this.v2;return t.set(n6(e,i.x,r.x,s.x),n6(e,i.y,r.y,s.y),n6(e,i.z,r.z,s.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},os=class extends nZ{constructor(e=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=e}getPoint(e,t=new tK){let i=this.points,r=(i.length-1)*e,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],h=i[s>i.length-2?i.length-1:s+1],c=i[s>i.length-3?i.length-1:s+2];return t.set(n5(a,o.x,l.x,h.x,c.x),n5(a,o.y,l.y,h.y,c.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new tK().fromArray(i))}return this}},oa=Object.freeze({__proto__:null,ArcCurve:nJ,CatmullRomCurve3:n4,CubicBezierCurve:n9,CubicBezierCurve3:n7,EllipseCurve:nK,LineCurve:oe,LineCurve3:ot,QuadraticBezierCurve:oi,QuadraticBezierCurve3:or,SplineCurve:os}),on=class extends nZ{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new oe(t,e))}getPoint(e,t){let i=e*this.getLength(),r=this.getCurveLengths(),s=0;for(;s<r.length;){if(r[s]>=i){let e=r[s]-i,a=this.curves[s],o=a.getLength(),l=0===o?0:1-e/o;return a.getPointAt(l,t)}s++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let i=0,r=this.curves.length;i<r;i++)e.push(t+=this.curves[i].getLength());return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],i;for(let r=0,s=this.curves;r<s.length;r++){let a=s[r],o=a.isEllipseCurve?2*e:a.isLineCurve||a.isLineCurve3?1:a.isS
vendor: 7,898 bytes, line 3139
3139plineCurve?e*a.points.length:e,l=a.getPoints(o);for(let e=0;e<l.length;e++){let r=l[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(i.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,i=this.curves.length;t<i;t++){let i=this.curves[t];e.curves.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(new oa[i.type]().fromJSON(i))}return this}},oo=class extends on{constructor(e){super(),this.type="Path",this.currentPoint=new tK,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,i=e.length;t<i;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let i=new oe(this.currentPoint.clone(),new tK(e,t));return this.curves.push(i),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,i,r){let s=new oi(this.currentPoint.clone(),new tK(e,t),new tK(i,r));return this.curves.push(s),this.currentPoint.set(i,r),this}bezierCurveTo(e,t,i,r,s,a){let o=new n9(this.currentPoint.clone(),new tK(e,t),new tK(i,r),new tK(s,a));return this.curves.push(o),this.currentPoint.set(s,a),this}splineThru(e){let t=new os([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,i,r,s,a){let o=this.currentPoint.x,l=this.currentPoint.y;return this.absarc(e+o,t+l,i,r,s,a),this}absarc(e,t,i,r,s,a){return this.absellipse(e,t,i,i,r,s,a),this}ellipse(e,t,i,r,s,a,o,l){let h=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(e+h,t+c,i,r,s,a,o,l),this}absellipse(e,t,i,r,s,a,o,l){let h=new nK(e,t,i,r,s,a,o,l);if(this.curves.length>0){let e=h.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(h);let c=h.getPoint(1);return this.currentPoint.copy(c),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},ol=class extends rN{constructor(e=[new tK(0,-.5),new tK(.5,0),new tK(0,.5)],t=12,i=0,r=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:i,phiLength:r},t=Math.floor(t),r=tj(r,0,2*Math.PI);let s=[],a=[],o=[],l=[],h=[],c=1/t,d=new ix,u=new tK,p=new ix,f=new ix,m=new ix,g=0,v=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,m.copy(p),p.normalize(),l.push(p.x,p.y,p.z);break;case e.length-1:l.push(m.x,m.y,m.z);break;default:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,f.copy(p),p.x+=m.x,p.y+=m.y,p.z+=m.z,p.normalize(),l.push(p.x,p.y,p.z),m.copy(f)}for(let s=0;s<=t;s++){let p=i+s*c*r,f=Math.sin(p),m=Math.cos(p);for(let i=0;i<=e.length-1;i++){d.x=e[i].x*f,d.y=e[i].y,d.z=e[i].x*m,a.push(d.x,d.y,d.z),u.x=s/t,u.y=i/(e.length-1),o.push(u.x,u.y);let r=l[3*i+0]*f,c=l[3*i+1],p=l[3*i+0]*m;h.push(r,c,p)}}for(let i=0;i<t;i++)for(let t=0;t<e.length-1;t++){let r=t+i*e.length,a=r+e.length,o=r+e.length+1,l=r+1;s.push(r,a,l),s.push(o,l,a)}this.setIndex(s),this.setAttribute("position",new rD(a,3)),this.setAttribute("uv",new rD(o,2)),this.setAttribute("normal",new rD(h,3))}static fromJSON(e){return new ol(e.points,e.segments,e.phiStart,e.phiLength)}},oh=class extends rN{constructor(e=1,t=1,i=1,r=32,s=1,a=!1,o=0,l=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:i,radialSegments:r,heightSegments:s,openEnded:a,thetaStart:o,thetaLength:l};let h=this;r=Math.floor(r),s=Math.floor(s);let c=[],d=[],u=[],p=[],f=0,m=[],g=i/2,v=0;function y(i){let s=f,a=new tK,m=new ix,y=0,x=!0===i?e:t,b=!0===i?1:-1;for(let e=1;e<=r;e++)d.push(0,g*b,0),u.push(0,b,0),p.push(.5,.5),f++;let w=f;for(let e=0;e<=r;e++){let t=e/r*l+o,i=Math.cos(t),s=Math.sin(t);m.x=x*s,m.y=g*b,m.z=x*i,d.push(m.x,m.y,m.z),u.push(0,b,0),a.x=.5*i+.5,a.y=.5*s*b+.5,p.push(a.x,a.y),f++}for(let e=0;e<r;e++){let t=s+e,r=w+e;!0===i?c.push(r,r+1,t):c.push(r+1,r,t),y+=3}h.addGroup(v,y,!0===i?1:2),v+=y}(function(){let a=new ix,y=new ix,x=0,b=(t-e)/i;for(let h=0;h<=s;h++){let c=[],v=h/s,x=v*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,s=t*l+o,h=Math.sin(s),m=Math.cos(s);y.x=x*h,y.y=-v*i+g,y.z=x*m,d.push(y.x,y.y,y.z),a.set(h,b,m).normalize(),u.push(a.x,a.y,a.z),p.push(t,1-v),c.push(f++)}m.push(c)}for(let e=0;e<r;e++)for(let t=0;t<s;t++){let i=m[t][e],r=m[t+1][e],s=m[t+1][e+1],a=m[t][e+1];c.push(i,r,a),c.push(r,s,a),x+=6}h.addGroup(v,x,0),v+=x})(),!1===a&&(e>0&&y(!0),t>0&&y(!1)),this.setIndex(c),this.setAttribute("position",new rD(d,3)),this.setAttribute("normal",new rD(u,3)),this.setAttribute("uv",new rD(p,2))}static fromJSON(e){return new oh(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},oc=class extends oh{constructor(e=1,t=1,i=32,r=1,s=!1,a=0,o=2*Math.PI){super(0,e,t,i,r,s,a,o),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o}}static fromJSON(e){return new oc(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},od=class extends rN{constructor(e=[],t=[],i=1,r=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:i,detail:r};let s=[],a=[];function o(e){s.push(e.x,e.y,e.z)}function l(t,i){let r=3*t;i.x=e[r+0],i.y=e[r+1],i.z=e[r+2]}function h(e,t,i,r){r<0&&1===e.x&&(a[t]=e.x-1),0===i.x&&0===i.z&&(a[t]=r/2/Math.PI+.5)}function c(e){return Math.atan2(e.z,-e.x)}(function(e){let i=new ix,r=new ix,s=new ix;for(let a=0;a<t.length;a+=3)l(t[a+0],i),l(t[a+1],r),l(t[a+2],s),function(e,t,i,r){let s=r+1,a=[];for(let r=0;r<=s;r++){a[r]=[];let o=e.clone().lerp(i,r/s),l=t.clone().lerp(i,r/s),h=s-r;for(let e=0;e<=h;e++)0===e&&r===s?a[r][e]=o:a[r][e]=o.clone().lerp(l,e/h)}for(let e=0;e<s;e++)for(let t=0;t<2*(s-e)-1;t++){let i=Math.floor(t/2);t%2==0?(o(a[e][i+1]),o(a[e+1][i]),o(a[e][i])):(o(a[e][i+1]),o(a[e+1][i+1]),o(a[e+1][i]))}}(i,r,s,e)})(r),function(e){let t=new ix;for(let i=0;i<s.length;i+=3)t.x=s[i+0],t.y=s[i+1],t.z=s[i+2],t.normalize().multiplyScalar(e),s[i+0]=t.x,s[i+1]=t.y,s[i+2]=t.z}(i),function(){let e=new ix;for(let t=0;t<s.length;t+=3){e.x=s[t+0],e.y=s[t+1],e.z=s[t+2];let i=c(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;a.push(i,1-r)}(function(){let e=new ix,t=new ix,i=new ix,r=new ix,o=new tK,l=new tK,d=new tK;for(let u=0,p=0;u<s.length;u+=9,p+=6){e.set(s[u+0],s[u+1],s[u+2]),t.set(s[u+3],s[u+4],s[u+5]),i.set(s[u+6],s[u+7],s[u+8]),o.set(a[p+0],a[p+1]),l.set(a[p+2],a[p+3]),d.set(a[p+4],a[p+5]),r.copy(e).add(t).add(i).divideScalar(3);let f=c(r);h(o,p+0,e,f),h(l,p+2,t,f),h(d,p+4,i,f)}})(),function(){for(let e=0;e<a.length;e+=6){let t=a[e+0],i=a[e+2],r=a[e+4],s=Math.max(t,i,r),o=Math.min(t,i,r);s>.9&&o<.1&&(t<.2&&(a[e+0]+=1),i<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new rD(s,3)),this.setAttribute("normal",new rD(s.slice(),3)),this.setAttribute("uv",new rD(a,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(e){return new od(e.vertices,e.indices,e.radius,e.details)}},ou=class extends od{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2,r=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-i,0,-r,i,0,r,-i,0,r,i,-r,-i,0,-r,i,0,r,-i,0,r,i,0,-i,0,-r,i,0,-r,-i,0,r,i,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new ou(e.radius,e.detail)}},op=class extends oo{constructor(e){super(e),this.uuid=tV(),this.type="Shape",this.holes=[]}getPointsHoles(e){let t=[];for(let i=0,r=this.holes.length;i<r;i++)t[i]=this.holes[i].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,i=this.holes.length;t<i;t++){let i=this.holes[t];e.holes.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(new oo().fromJSON(i))}return this}},of=function(e,t,i=2){let r,s,a,o,l,h,c,d=t&&t.length,u=d?t[0]*i:e.length,p=om(e,0,u,i,!0),f=[];if(!p||p.next===p.prev)return f;if(d&&(p=function(e,t,i,r){let s=[],a,o,l,h,c;for(a=0,o=t.length;a<o;a++)l=t[a]*r,h=a<o-1?t[a+1]*r:e.length,(c=om(e,l,h,r,!1))===c.next&&(c.steiner=!0),s.push(function(e){let t=e,i=e;do(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next;while(t!==e);return i}(c));for(s.sort(ov),a=0;a<s.length;a++)i=function(e,t){let i=function(e,t){let i=t,r=-1/0,s,a=e.x,o=e.y;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){let e=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=a&&e>r&&(r=e,s=i.x<i.next.x?i:i.next,e===a))return s}i=i.next}while(i!==t);if(!s)return null;let l=s,h=s.x,c=s.y,d=1/0,u;i=s;do{var p,f;a>=i.x&&i.x>=h&&a!==i.x&&ox(o<c?a:r,o,h,c,o<c?r:a,o,i.x,i.y)&&(u=Math.abs(o-i.y)/(a-i.x),oM(i,e)&&(u<d||u===d&&(i.x>s.x||i.x===s.x&&(p=s,f=i,0>ob(p.prev,p,f.prev)&&0>ob(f.next,p,p.next))))&&(s=i,d=u)),i=i.next}while(i!==l);return s}(e,t);if(!i)return t;let r=oE(i,e);return og(r,r.next),og(i,i.next)}(s[a],i);return i}(e,t,p,i)),e.length>80*i){r=a=e[0],s=o=e[1];for(let t=i;t<u;t+=i)l=e[t],h=e[t+1],l<r&&(r=l),h<s&&(s=h),l>a&&(a=l),h>o&&(o=h);c=0!==(c=Math.max(a-r,o-s))?32767/c:0}return function e(t,i,r,s,a,o,l){if(!t)return;!l&&o&&function(e,t,i,r){let s=e;do 0===s.z&&(s.z=oy(s.x,s.y,t,i,r)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==e);s.prevZ.nextZ=null,s.prevZ=null,function(e){let t,i,r,s,a,o,l,h,c=1;do{for(i=e,e=null,a=null,o=0;i;){for(o++,r=i,l=0,t=0;t<c&&(l++,r=r.nextZ);t++);for(h=c;l>0||h>0&&r;)0!==l&&(0===h||!r||i.z<=r.z)?(s=i,i=i.nextZ,l--):(s=r,r=r.nextZ,h--),a?a.nextZ=s:e=s,s.prevZ=a,a=s;i=r}a.nextZ=null,c*=2}while(o>1)}(s)}(t,s,a,o);let h=t,c,d;for(;t.prev!==t.next;){if(c=t.prev,d=t.next,o?function(e,t,i,r){let s=e.prev,a=e.next;if(ob(s,e,a)>=0)return!1;let o=s.x,l=e.x,h=a.x,c=s.y,d=e.y,u=a.y,p=o<l?o<h?o:h:l<h?l:h,f=c<d?c<u?c:u:d<u?d:u,m=o>l?o>h?o:h:l>h?l:h,g=c>d?c>u?c:u:d>u?d:u,v=oy(p,f,t,i,r),y=oy(m,g,t,i,r),x=e.prevZ,b=e.nextZ;for(;x&&x.z>=v&&b&&b.z<=y;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ox(o,c,l,d,h,u,x.x,x.y)&&ob(x.prev,x,x.next)>=0||(x=x.prevZ,b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ox(o,c,l,d,h,u,b.x,b.y)&&ob(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;x&&x.z>=v;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ox(o,c,l,d,h,u,x.x,x.y)&&ob(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;b&&b.z<=y;){if(b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ox(o,c,l,d,h,u,b.x,b.y)&&ob(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}(t,s,a,o):function(e){let t=e.prev,i=e.next;if(ob(t,e,i)>=0)return!1;let r=t.x,s=e.x,a=i.x,o=t.y,l=e.y,h=i.y,c=r<s?r<a?r:a:s<a?s:a,d=o<l?o<h?o:h:l<h?l:h,u=r>s?r>a?r:a:s>a?s:a,p=o>l?o>h?o:h:l>h?l:h,f=i.next;for(;f!==t;){if(f.x>=c&&f.x<=u&&f.y>=d&&f.y<=p&&ox(r,o,s,l,a,h,f.x,f.y)&&ob(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}(t)){i.push(c.i/r|0),i.push(t.i/r|0),i.push(d.i/r|0),oT(t),t=d.next,h=d.next;continue}if((t=d)===h){l?1===l?e(t=function(e,t,i){let r=e;do{let s=r.prev,a=r.next.next;!ow(s,a)&&oS(s,r,r.next,a)&&oM(s,a)&&oM(a,s)&&(t.push(s.i/i|0),t.push(r.i/i|0),t.push(a.i/i|0),oT(r),oT(r.next),r=e=a),r=r.next}while(r!==e);return og(r)}(og(t),i,r),i,r,s,a,o,2):2===l&&function(t,i,r,s,a,o){let l=t;do{let t=l.next.next;for(;t!==l.prev;){var h,c;
3139if(l.i!==t.i&&(h=l,c=t,h.next.i!==c.i&&h.prev.i!==c.i&&!function(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&oS(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(h,c)&&(oM(h,c)&&oM(c,h)&&function(e,t){let i=e,r=!1,s=(e.x+t.x)/2,a=(e.y+t.y)/2;do i.y>a!=i.next.y>a&&i.next.y!==i.y&&s<(i.next.x-i.x)*(a-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next;while(i!==e);return r}(h,c)&&(ob(h.prev,h,c.prev)||ob(h,c.prev,c))||ow(h,c)&&ob(h.prev,h,h.next)>0&&ob(c.prev,c,c.next)>0))){let h=oE(l,t);l=og(l,l.next),h=og(h,h.next),e(l,i,r,s,a,o,0),e(h,i,r,s,a,o,0);return}t=t.next}l=l.next}while(l!==t)}(t,i,r,s,a,o):e(og(t),i,r,s,a,o,1);break}}}(p,f,i,r,s,c,0),f};function om(e,t,i,r,s){let a,o;if(s===function(e,t,i,r){let s=0;for(let a=t,o=i-r;a<i;a+=r)s+=(e[o]-e[a])*(e[a+1]+e[o+1]),o=a;return s}(e,t,i,r)>0)for(a=t;a<i;a+=r)o=oC(a,e[a],e[a+1],o);else for(a=i-r;a>=t;a-=r)o=oC(a,e[a],e[a+1],o);return o&&ow(o,o.next)&&(oT(o),o=o.next),o}function og(e,t){if(!e)return e;t||(t=e);let i=e,r;do if(r=!1,!i.steiner&&(ow(i,i.next)||0===ob(i.prev,i,i.next))){if(oT(i),(i=t=i.prev)===i.next)break;r=!0}else i=i.next;while(r||i!==t);return t}function ov(e,t){return e.x-t.x}function oy(e,t,i,r,s){return(e=((e=((e=((e=((e=(e-i)*s|0)|e<<8)&16711935)|e<<4)&252645135)|e<<2)&858993459)|e<<1)&1431655765)|(t=((t=((t=((t=((t=(t-r)*s|0)|t<<8)&16711935)|t<<4)&252645135)|t<<2)&858993459)|t<<1)&1431655765)<<1}function ox(e,t,i,r,s,a,o,l){return(s-o)*(t-l)>=(e-o)*(a-l)&&(e-o)*(r-l)>=(i-o)*(t-l)&&(i-o)*(a-l)>=(s-o)*(r-l)}function ob(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function ow(e,t){return e.x===t.x&&e.y===t.y}function oS(e,t,i,r){let s=oA(ob(e,t,i)),a=oA(ob(e,t,r)),o=oA(ob(i,r,e)),l=oA(ob(i,r,t));return!!(s!==a&&o!==l||0===s&&o_(e,i,t)||0===a&&o_(e,r,t)||0===o&&o_(i,e,r)||0===l&&o_(i,t,r))}function o_(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function oA(e){return e>0?1:e<0?-1:0}function oM(e,t){return 0>ob(e.prev,e,e.next)?ob(e,t,e.next)>=0&&ob(e,e.prev,t)>=0:0>ob(e,t,e.prev)||0>ob(e,e.next,t)}function oE(e,t){let i=new oP(e.i,e.x,e.y),r=new oP(t.i,t.x,t.y),s=e.next,a=t.prev;return e.next=t,t.prev=e,i.next=s,s.prev=i,r.next=i,i.prev=r,a.next=r,r.prev=a,r}function oC(e,t,i,r){let s=new oP(e,t,i);return r?(s.next=r.next,s.prev=r,r.next.prev=s,r.next=s):(s.prev=s,s.next=s),s}function oT(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function oP(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}var oD=class{static area(e){let t=e.length,i=0;for(let r=t-1,s=0;s<t;r=s++)i+=e[r].x*e[s].y-e[s].x*e[r].y;return .5*i}static isClockWise(e){return 0>oD.area(e)}static triangulateShape(e,t){let i=[],r=[],s=[];oI(e),oO(i,e);let a=e.length;t.forEach(oI);for(let e=0;e<t.length;e++)r.push(a),a+=t[e].length,oO(i,t[e]);let o=of(i,r);for(let e=0;e<o.length;e+=3)s.push(o.slice(e,e+3));return s}};function oI(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function oO(e,t){for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y)}var oR=class extends od{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2;super([-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[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],e,t),this.type="IcosahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oR(e.radius,e.detail)}},oL=class extends rN{constructor(e=1,t=32,i=16,r=0,s=2*Math.PI,a=0,o=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:i,phiStart:r,phiLength:s,thetaStart:a,thetaLength:o},t=Math.max(3,Math.floor(t)),i=Math.max(2,Math.floor(i));let l=Math.min(a+o,Math.PI),h=0,c=[],d=new ix,u=new ix,p=[],f=[],m=[],g=[];for(let p=0;p<=i;p++){let v=[],y=p/i,x=0;0==p&&0==a?x=.5/t:p==i&&l==Math.PI&&(x=-.5/t);for(let i=0;i<=t;i++){let l=i/t;d.x=-e*Math.cos(r+l*s)*Math.sin(a+y*o),d.y=e*Math.cos(a+y*o),d.z=e*Math.sin(r+l*s)*Math.sin(a+y*o),f.pu
3139sh(d.x,d.y,d.z),u.copy(d).normalize(),m.push(u.x,u.y,u.z),g.push(l+x,1-y),v.push(h++)}c.push(v)}for(let e=0;e<i;e++)for(let r=0;r<t;r++){let t=c[e][r+1],s=c[e][r],o=c[e+1][r],h=c[e+1][r+1];(0!==e||a>0)&&p.push(t,s,h),(e!==i-1||l<Math.PI)&&p.push(s,o,h)}this.setIndex(p),this.setAttribute("position",new rD(f,3)),this.setAttribute("normal",new rD(m,3)),this.setAttribute("uv",new rD(g,2))}static fromJSON(e){return new oL(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}},oB=class extends rN{constructor(e=1,t=.4,i=12,r=48,s=2*Math.PI){super(),this.type="TorusGeometry",this.parameters={radius:e,tube:t,radialSegments:i,tubularSegments:r,arc:s},i=Math.floor(i),r=Math.floor(r);let a=[],o=[],l=[],h=[],c=new ix,d=new ix,u=new ix;for(let a=0;a<=i;a++)for(let p=0;p<=r;p++){let f=p/r*s,m=a/i*Math.PI*2;d.x=(e+t*Math.cos(m))*Math.cos(f),d.y=(e+t*Math.cos(m))*Math.sin(f),d.z=t*Math.sin(m),o.push(d.x,d.y,d.z),c.x=e*Math.cos(f),c.y=e*Math.sin(f),u.subVectors(d,c).normalize(),l.push(u.x,u.y,u.z),h.push(p/r),h.push(a/i)}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*e+t-1,s=(r+1)*(e-1)+t-1,o=(r+1)*(e-1)+t,l=(r+1)*e+t;a.push(i,s,l),a.push(s,o,l)}this.setIndex(a),this.setAttribute("position",new rD(o,3)),this.setAttribute("normal",new rD(l,3)),this.setAttribute("uv",new rD(h,2))}static fromJSON(e){return new oB(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}},oz=class extends rN{constructor(e=1,t=.4,i=64,r=8,s=2,a=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:e,tube:t,tubularSegments:i,radialSegments:r,p:s,q:a},i=Math.floor(i),r=Math.floor(r);let o=[],l=[],h=[],c=[],d=new ix,u=new ix,p=new ix,f=new ix,m=new ix,g=new ix,v=new ix;for(let o=0;o<=i;++o){let x=o/i*s*Math.PI*2;y(x,s,a,e,p),y(x+.01,s,a,e,f),g.subVectors(f,p),v.addVectors(f,p),m.crossVectors(g,v),v.crossVectors(m,g),m.normalize(),v.normalize();for(let e=0;e<=r;++e){let s=e/r*Math.PI*2,a=-t*Math.cos(s),f=t*Math.sin(s);d.x=p.x+(a*v.x+f*m.x),d.y=p.y+(a*v.y+f*m.y),d.z=p.z+(a*v.z+f*m.z),l.push(d.x,d.y,d.z),u.subVectors(d,p).normalize(),h.push(u.x,u.y,u.z),c.push(o/i),c.push(e/r)}}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*(e-1)+(t-1),s=(r+1)*e+(t-1),a=(r+1)*e+t,l=(r+1)*(e-1)+t;o.push(i,s,l),o.push(s,a,l)}function y(e,t,i,r,s){let a=Math.cos(e),o=Math.sin(e),l=i/t*e,h=Math.cos(l);s.x=r*(2+h)*.5*a,s.y=r*(2+h)*o*.5,s.z=r*Math.sin(l)*.5}this.setIndex(o),this.setAttribute("position",new rD(l,3)),this.setAttribute("normal",new rD(h,3)),this.setAttribute("uv",new rD(c,2))}static fromJSON(e){return new oz(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}};function oF(e,t,i){return oU(e)?new e.constructor(e.subarray(t,void 0!==i?i:e.length)):e.slice(t,i)}function oN(e,t,i){return e&&(i||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function oU(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ok(e,t,i){let r=e.length,s=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=i[a]*t;for(let i=0;i!==t;++i)s[o++]=e[r+i]}return s}function oV(e,t,i,r){let s=1,a=e[0];for(;void 0!==a&&void 0===a[r];)a=e[s++];if(void 0===a)return;let o=a[r];if(void 0!==o){if(Array.isArray(o))do void 0!==(o=a[r])&&(t.push(a.time),i.push.apply(i,o)),a=e[s++];while(void 0!==a);else if(void 0!==o.toArray)do void 0!==(o=a[r])&&(t.push(a.time),o.toArray(i,i.length)),a=e[s++];while(void 0!==a);else do void 0!==(o=a[r])&&(t.push(a.time),i.push(o)),a=e[s++];while(void 0!==a)}}var oj=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],s=t[i-1];e:{t:{let a;i:{r:if(!(e<r)){for(let a=i+2;;){if(void 0===r){if(e<s)break r;return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}if(i===a)break;if(s=r,e<(r=t[++i]))break t}a=t.length;break i}if(!(e>=s)){let o=t[1];e<o&&(i=2,s=o);for(let a=i-2;;){if(void 0===s)return this._cachedIndex=0,this.copySampleValue_(0);if(i===a)break;if(r=s,e>=(s=t[--i-1]))break t}a=i,i=0;break i}break e}for(;i<a;){let r=i+a>>>1;e<t[r]?a=r:i=r+1}if(r=t[i],void 0===(s=t[i-1]))return this._cachedIndex=0,this.copySampleValue_(0);if(void 0===r)return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}this._cachedIndex=i,this.intervalChanged_(i,s,r)}return this.interpolate_(i,s,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,r=this.valueSize,s=e*r;for(let e=0;e!==r;++e)t[e]=i[s+e];return t}interpolate_(){throw Error("call to abstract method")}intervalChanged_(){}},oG=class extends oj{constructor(e,t,i,r){super(e,t,i,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(e,t,i){let r=this.parameterPositions,s=e-2,a=e+1,o=r[s],l=r[a];if(void 0===o)switch(this.getSettings_().endingStart){case 2401:s=e,o=2*t-i;break;case 2402:s=r.length-2,o=t+r[s]-r[s+1];break;default:s=e,o=i}if(void 0===l)switch(this.getSettings_().endingEnd){case 2401:a=e,l=2*i-t;break;case 2402:a=1,l=i+r[1]-r[0];break;default:a=e-1,l=t}let h=(i-t)*.5,c=this.valueSize;this._weightPrev=h/(t-o),this._weightNext=h/(l-i),this._offsetPrev=s*c,this._offsetNext=a*c}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=this._offsetPrev,d=this._offsetNext,u=this._weightPrev,p=this._weightNext,f=(i-t)/(r-t),m=f*f,g=m*f,v=-u*g+2*u*m-u*f,y=(1+u)*g+(-1.5-2*u)*m+(-.5+u)*f+1,x=(-1-p)*g+(1.5+p)*m+.5*f,b=p*g-p*m;for(let e=0;e!==o;++e)s[e]=v*a[c+e]+y*a[h+e]+x*a[l+e]+b*a[d+e];return s}},oH=class extends oj{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=(i-t)/(r-t),d=1-c;for(let e=0;e!==o;++e)s[e]=a[h+e]*d+a[l+e]*c;return s}},oW=class extends oj{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e){return this.copySampleValue_(e-1)}},oq=class{constructor(e,t,i,r){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e,this.times=oN(t,this.TimeBufferType),this.values=oN(i,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,i;if(t.toJSON!==this.toJSON)i=t.toJSON(e);else{i={name:e.name,times:oN(e.times,Array),values:oN(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(i.interpolation=t)}return i.type=e.ValueTypeName,i}InterpolantFactoryMethodDiscrete(e){return new oW(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new oH(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new oG(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case 2300:t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){let t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t)}return console.warn("THREE.KeyframeTrack:",t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(e){if(0!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]+=e}return this}scale(e){if(1!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]*=e}return this}trim(e,t){let i=this.times,r=i.length,s=0,a=r-1;for(;s!==r&&i[s]<e;)++s;for(;-1!==a&&i[a]>t;)--a;if(++a,0!==s||a!==r){s>=a&&(s=(a=Math.max(a,1))-1);let e=this.getValueSize();this.times=oF(i,s,a),this.values=oF(this.values,s*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;0===s&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==s;t++){let r=i[t];if("number"==typeof r&&isNaN(r)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,r),e=!1;break}if(null!==a&&a>r){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,r,a),e=!1;break}a=r}if(void 0!==r&&oU(r))for(let t=0,i=r.length;t!==i;++t){let i=r[t];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,i),e=!1;break}}return e}optimize(){let e=oF(this.times),t=oF(this.values),i=this.getValueSize(),r=2302===this.getInterpolation(),s=e.length-1,a=1;for(let o=1;o<s;++o){let s=!1,l=e[o];if(l!==e[o+1]&&(1!==o||l!==e[0])){if(r)s=!0;else{let e=o*i,r=e-i,a=e+i;for(let o=0;o!==i;++o){let i=t[e+o];if(i!==t[r+o]||i!==t[a+o]){s=!0;break}}}}if(s){if(o!==a){e[a]=e[o];let r=o*i,s=a*i;for(let e=0;e!==i;++e)t[s+e]=t[r+e]}++a}}if(s>0){e[a]=e[s];for(let e=s*i,r=a*i,o=0;o!==i;++o)t[r+o]=t[e+o];++a}return a!==e.length?(this.times=oF(e,0,a),this.values=oF(t,0,a*i)):(this.times=e,this.values=t),this}clone(){let e=oF(this.times,0),t=oF(this.values,0),i=new this.constructor(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}};oq.prototype.TimeBufferType=Float32Array,oq.prototype.ValueBufferType=Float32Array,oq.prototype.DefaultInterpolation=2301;var oX=class extends oq{};oX.prototype.ValueTypeName="bool",oX.prototype.ValueBufferType=Array,oX.prototype.DefaultInterpolation=2300,oX.prototype.InterpolantFactoryMethodLinear=void 0,oX.prototype.InterpolantFactoryMethodSmooth=void 0;var oY=class extends oq{};oY.prototype.ValueTypeName="color";var oQ=class extends oq{};oQ.prototype.ValueTypeName="number";var oZ=class extends oj{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=(i-t)/(r-t),h=e*o;for(let e=h+o;h!==e;h+=4)iy.slerpFlat(s,0,a,h-o,a,h,l);return s}},oK=class extends oq{InterpolantFactoryMethodLinear(e){return new oZ(this.times,this.values,this.getValueSize(),e)}};oK.prototype.ValueTypeName="quaternion",oK.prototype.DefaultInterpolation=2301,oK.prototype.InterpolantFactoryMethodSmooth=void 0;var oJ=class extends oq{};oJ.prototype.ValueTypeName="string",oJ.prototype.ValueBufferType=Array,oJ.prototype.DefaultInterpolation=2300,oJ.prototype.InterpolantFactoryMethodLinear=void 0,oJ.prototype.InterpolantFactoryMethodSmooth=void 0;var o$=class extends oq{};o$.prototype.ValueTypeName="vector";var o0=class{constructor(e,t=-1,i,r=2500){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=tV(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let e=0,s=i.length;e!==s;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return oQ;
3139case"vector":case"vector2":case"vector3":case"vector4":return o$;case"color":return oY;case"quaternion":return oK;case"bool":case"boolean":return oX;case"string":return oJ}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],i=[];oV(e.keys,t,i,"value"),e.times=t,e.values=i}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(i[e]).scale(r));let s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=i.length;e!==r;++e)t.push(oq.toJSON(i[e]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let s=t.length,a=[];for(let e=0;e<s;e++){let o=[],l=[];o.push((e+s-1)%s,e,(e+1)%s),l.push(0,1,0);let h=function(e){let t=e.length,i=Array(t);for(let e=0;e!==t;++e)i[e]=e;return i.sort(function(t,i){return e[t]-e[i]}),i}(o);o=ok(o,1,h),l=ok(l,1,h),r||0!==o[0]||(o.push(s),l.push(l[0])),a.push(new oQ(".morphTargetInfluences["+t[e].name+"]",o,l).scale(1/i))}return new this(e,-1,a)}static findByName(e,t){let i=e;Array.isArray(e)||(i=e.geometry&&e.geometry.animations||e.animations);for(let e=0;e<i.length;e++)if(i[e].name===t)return i[e];return null}static CreateClipsFromMorphTargetSequences(e,t,i){let r={},s=/^([\w-]*?)([\d]+)$/;for(let t=0,i=e.length;t<i;t++){let i=e[t],a=i.name.match(s);if(a&&a.length>1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(i)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,i));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let i=function(e,t,i,r,s){if(0!==i.length){let a=[],o=[];oV(i,a,o,r),0!==a.length&&s.push(new e(t,a,o))}},r=[],s=e.name||"default",a=e.fps||30,o=e.blendMode,l=e.length||-1,h=e.hierarchy||[];for(let e=0;e<h.length;e++){let s=h[e].keys;if(!(!s||0===s.length)){if(s[0].morphTargets){let e={},t;for(t=0;t<s.length;t++)if(s[t].morphTargets)for(let i=0;i<s[t].morphTargets.length;i++)e[s[t].morphTargets[i]]=-1;for(let i in e){let e=[],a=[];for(let r=0;r!==s[t].morphTargets.length;++r){let r=s[t];e.push(r.time),a.push(r.morphTarget===i?1:0)}r.push(new oQ(".morphTargetInfluence["+i+"]",e,a))}l=e.length*a}else{let a=".bones["+t[e].name+"]";i(o$,a+".position",s,"pos",r),i(oK,a+".quaternion",s,"rot",r),i(o$,a+".scale",s,"scl",r)}}}return 0===r.length?null:new this(s,l,r,o)}resetDuration(){let e=this.tracks,t=0;for(let i=0,r=e.length;i!==r;++i){let e=this.tracks[i];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}},o1={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]}},o2=class{constructor(e,t,i){let r=this,s=!1,a=0,o=0,l,h=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=i,this.itemStart=function(e){o++,!1===s&&void 0!==r.onStart&&r.onStart(e,a,o),s=!0},this.itemEnd=function(e){a++,void 0!==r.onProgress&&r.onProgress(e,a,o),a===o&&(s=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(e){void 0!==r.onError&&r.onError(e)},this.resolveURL=function(e){return l?l(e):e},this.setURLModifier=function(e){return l=e,this},this.addHandler=function(e,t){return h.push(e,t),this},this.removeHandler=function(e){let t=h.indexOf(e);return -1!==t&&h.splice(t,2),this},this.getHandler=function(e){for(let t=0,i=h.length;t<i;t+=2){let i=h[t],r=h[t+1];if(i.global&&(i.lastIndex=0),i.test(e))return r}return null}}},o3=new o2,o4=class{constructor(e){this.manager=void 0!==e?e:o3,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(e,t){let i=this;return new Promise(function(r,s){i.load(e,r,t,s)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}},o5={}
3139,o6=class extends Error{constructor(e,t){super(e),this.response=t}},o8=class extends o4{constructor(e){super(e)}load(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=o1.get(e);if(void 0!==s)return this.manager.itemStart(e),setTimeout(()=>{t&&t(s),this.manager.itemEnd(e)},0),s;if(void 0!==o5[e]){o5[e].push({onLoad:t,onProgress:i,onError:r});return}o5[e]=[],o5[e].push({onLoad:t,onProgress:i,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),o=this.mimeType,l=this.responseType;fetch(a).then(t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||void 0===t.body||void 0===t.body.getReader)return t;let i=o5[e],r=t.body.getReader(),s=t.headers.get("Content-Length")||t.headers.get("X-File-Size"),a=s?parseInt(s):0,o=0!==a,l=0;return new Response(new ReadableStream({start(e){(function t(){r.read().then(({done:r,value:s})=>{if(r)e.close();else{let r=new ProgressEvent("progress",{lengthComputable:o,loaded:l+=s.byteLength,total:a});for(let e=0,t=i.length;e<t;e++){let t=i[e];t.onProgress&&t.onProgress(r)}e.enqueue(s),t()}})})()}}))}throw new o6(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(l){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,o));case"json":return e.json();default:if(void 0===o)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),i=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>i.decode(e))}}}).then(t=>{o1.add(e,t);let i=o5[e];delete o5[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onLoad&&r.onLoad(t)}}).catch(t=>{let i=o5[e];if(void 0===i)throw this.manager.itemError(e),t;delete o5[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onError&&r.onError(t)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},o9=class extends o4{constructor(e){super(e)}load(e,t,i,r){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=this,a=o1.get(e);if(void 0!==a)return s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0),a;let o=t3("img");function l(){c(),o1.add(e,this),t&&t(this),s.manager.itemEnd(e)}function h(t){c(),r&&r(t),s.manager.itemError(e),s.manager.itemEnd(e)}function c(){o.removeEventListener("load",l,!1),o.removeEventListener("error",h,!1)}return o.addEventListener("load",l,!1),o.addEventListener("error",h,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),s.manager.itemStart(e),o.src=e,o}},o7=class extends o4{constructor(e){super(e)}load(e,t,i,r){let s=new id,a=new o9(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,function(e){s.image=e,s.needsUpdate=!0,void 0!==t&&t(s)},i,r),s}},le=class extends rc{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new is(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}},lt=class extends le{constructor(e,t,i){super(e,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(rc.DEFAULT_UP),this.updateMatrix(),this.groundColor=new is(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}},li=new iQ,lr=new ix,ls=new ix,la=class{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new tK(512,512),this.map=null,this.mapPass=null,this.matrix=new iQ,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new sh,this._frameExtents=new tK(1,1),this._viewportCount=1,this._viewports=[new iu(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,i=this.matrix;lr.setFromMatrixPosition(e.matrixWorld),t.position.copy(lr),ls.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(ls),t.updateMatrixWorld(),li.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(li),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(li)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return 0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radiu
3139s=this.radius),(512!==this.mapSize.x||512!==this.mapSize.y)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},ln=class extends la{constructor(){super(new r7(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,i=2*tk*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,s=e.distance||t.far;(i!==t.fov||r!==t.aspect||s!==t.far)&&(t.fov=i,t.aspect=r,t.far=s,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},lo=class extends le{constructor(e,t,i=0,r=Math.PI/3,s=0,a=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(rc.DEFAULT_UP),this.updateMatrix(),this.target=new rc,this.distance=i,this.angle=r,this.penumbra=s,this.decay=a,this.map=null,this.shadow=new ln}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},ll=new iQ,lh=new ix,lc=new ix,ld=class extends la{constructor(){super(new r7(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new tK(4,2),this._viewportCount=6,this._viewports=[new iu(2,1,1,1),new iu(0,1,1,1),new iu(3,1,1,1),new iu(1,1,1,1),new iu(3,0,1,1),new iu(1,0,1,1)],this._cubeDirections=[new ix(1,0,0),new ix(-1,0,0),new ix(0,0,1),new ix(0,0,-1),new ix(0,1,0),new ix(0,-1,0)],this._cubeUps=[new ix(0,1,0),new ix(0,1,0),new ix(0,1,0),new ix(0,1,0),new ix(0,0,1),new ix(0,0,-1)]}updateMatrices(e,t=0){let i=this.camera,r=this.matrix,s=e.distance||i.far;s!==i.far&&(i.far=s,i.updateProjectionMatrix()),lh.setFromMatrixPosition(e.matrixWorld),i.position.copy(lh),lc.copy(i.position),lc.add(this._cubeDirections[t]),i.up.copy(this._cubeUps[t]),i.lookAt(lc),i.updateMatrixWorld(),r.makeTranslation(-lh.x,-lh.y,-lh.z),ll.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(ll)}},lu=class extends le{constructor(e,t,i=0,r=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=r,this.shadow=new ld}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},lp=class extends la{constructor(){super(new s_(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},lf=class extends le{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(rc.DEFAULT_UP),this.updateMatrix(),this.target=new rc,this.shadow=new lp}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lm=class extends rN{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){let e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}},lg=class extends o4{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new o8(s.manager);a.setPath(s.path),a.setRequestHeader(s.requestHeader),a.setWithCredentials(s.withCredentials),a.load(e,function(i){try{t(s.parse(JSON.parse(i)))}catch(t){r?r(t):console.error(t),s.manager.itemError(e)}},i,r)}parse(e){let t={},i={};function r(e,r){if(void 0!==t[r])return t[r];let s=e.interleavedBuffers[r],a=function(e,t){if(void 0!==i[t])return i[t];let r=new Uint32Array(e.arrayBuffers[t]).buffer;return i[t]=r,r}(e,s.buffer),o=new n_(t2(s.type,a),s.stride);return o.uuid=s.uuid,t[r]=o,o}let s=e.isInstancedBufferGeometry?new lm:new rN,a=e.data.index;if(void 0!==a){let e=t2(a.type,a.array);s.setIndex(new rC(e,1))}let o=e.data.attributes;for(let t in o){let i=o[t],a;if(i.isInterleavedBufferAttribute)a=new nM(r(e.data,i.data),i.itemSize,i.offset,i.normalized);else{let e=t2(i.type,i.array);a=new(i.isInstancedBufferAttribute?nI:rC)(e,i.itemSize,i.normalized)}void 0!==i.name&&(a.name=i.name),void 0!==i.usage&&a.setUsage(i.usage),void 0!==i.updateRange&&(a.updateRange.offset=i.updateRange.offset,a.updateRange.count=i.updateRange.count),s.setAttribute(t,a)}let l=e.data.morphAttributes;if(l)for(let t in l){let i=l[t],a=[];for(let t=0,s=i.length;t<s;t++){let s=i[t],o;o=s.isInterleavedBufferAttribute?new nM(r(e.data,s.data),s.itemSize,s.offset,s.normalized):new rC(t2(s.type,s.array),s.itemSize,s.normalized),void 0!==s.name&&(o.name=s.name),a.push(o)}s.morphAttributes[t]=a}e.data.morphTargetsRelative&&(s.morphTargetsRelative=!0);let h=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==h)for(let e=0,t=h.length;e!==t;++e){let t=h[e];s.addGroup(t.start,t.count,t.materialIndex)}let c=e.data.boundingSphere;if(void 0!==c){let e=new ix;void 0!==c.center&&e.fromArray(c.center),s.boundingSphere=new ik(e,c.radius)}return e.name&&(s.name=e.name),e.userData&&(s.userData=e.userData),s}},lv=class{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=ly(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=ly();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}};function ly(){return(typeof performance>"u"?Date:performance).now()}var lx=class{constructor(e,t,i){let r,s,a;switch(this.binding=e,this.valueSize=i,t){case"quaternion":r=this._slerp,s=this._slerpAdditive,a=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*i),this._workIndex=5;break;case"string":case"bool":r=this._select,s=this._select,a=this._setAdditiveIdentityOther,this.buffer=Array(5*i);break;default:r=this._lerp,s=this._lerpAdditive,a=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*i)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=s,this._setIdentity=a,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,s=e*r+r,a=this.cumulativeWeight;if(0===a){for(let e=0;e!==r;++e)i[s+e]=i[e];a=t}else{a+=t;let e=t/a;this._mixBufferRegion(i,s,0,e,r)}this.cumulativeWeight=a}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,s=this.cumulativeWeight,a=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){let e=t*this._origIndex;this._mixBufferRegion(i,r,e,1-s,t)}a>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let e=t,s=t+t;e!==s;++e)if(i[e]!==i[e+t]){o.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let e=i;e!==r;++e)t[e]=t[r+e%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;
3139for(let i=e;i<t;i++)this.buffer[i]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){let e=this._origIndex*this.valueSize,t=this._addIndex*this.valueSize;for(let i=0;i<this.valueSize;i++)this.buffer[t+i]=this.buffer[e+i]}_select(e,t,i,r,s){if(r>=.5)for(let r=0;r!==s;++r)e[t+r]=e[i+r]}_slerp(e,t,i,r){iy.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;iy.multiplyQuaternionsFlat(e,a,e,t,e,i),iy.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,i,r,s){let a=1-r;for(let o=0;o!==s;++o){let s=t+o;e[s]=e[s]*a+e[i+o]*r}}_lerpAdditive(e,t,i,r,s){for(let a=0;a!==s;++a){let s=t+a;e[s]=e[s]+e[i+a]*r}}},lb="\\[\\]\\.:\\/",lw=RegExp("["+lb+"]","g"),lS="[^"+lb+"]",l_="[^"+lb.replace("\\.","")+"]",lA=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",lS)+/(WCOD+)?/.source.replace("WCOD",l_)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",lS)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",lS)+"$"),lM=["material","materials","bones","map"],lE=class{constructor(e,t,i){let r=i||lC.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];void 0!==r&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=i.length;r!==s;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},lC=class{constructor(e,t,i){this.path=t,this.parsedPath=i||lC.parseTrackName(t),this.node=lC.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new lC.Composite(e,t,i):new lC(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(lw,"")}static parseTrackName(e){let t=lA.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){let e=i.nodeName.substring(r+1);-1!==lM.indexOf(e)&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=e)}if(null===i.propertyName||0===i.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(void 0!==i)return i}if(e.children){let i=function(e){for(let r=0;r<e.length;r++){let s=e[r];if(s.name===t||s.uuid===t)return s;let a=i(s.children);if(a)return a}return null},r=i(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)e[t++]=i[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}
3139_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,i=t.objectName,r=t.propertyName,s=t.propertyIndex;if(e||(e=lC.findNode(this.rootNode,t.nodeName)||this.rootNode,this.node=e),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e){console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.");return}if(i){let r=t.objectIndex;switch(i){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(let t=0;t<e.length;t++)if(e[t].name===r){r=t;break}break;case"map":if("map"in e){e=e.map;break}if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}e=e.material.map;break;default:if(void 0===e[i]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[i]}if(void 0!==r){if(void 0===e[r]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[r]}}let a=e[r];if(void 0===a){console.error("THREE.PropertyBinding: Trying to update property for track: "+t.nodeName+"."+r+" but it wasn't found.",e);return}let o=this.Versioning.None;this.targetObject=e,void 0!==e.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==e.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let l=this.BindingType.Direct;if(void 0!==s){if("morphTargetInfluences"===r){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}void 0!==e.morphTargetDictionary[s]&&(s=e.morphTargetDictionary[s])}l=this.BindingType.ArrayElement,this.resolvedProperty=a,this.propertyIndex=s}else void 0!==a.fromArray&&void 0!==a.toArray?(l=this.BindingType.HasFromToArray,this.resolvedProperty=a):Array.isArray(a)?(l=this.BindingType.EntireArray,this.resolvedProperty=a):this.propertyName=r;this.getValue=this.GetterByBindingType[l],this.setValue=this.SetterByBindingTypeAndVersioning[l][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};lC.Composite=lE,lC.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},lC.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},lC.prototype.GetterByBindingType=[lC.prototype._getValue_direct,lC.prototype._getValue_array,lC.prototype._getValue_arrayElement,lC.prototype._getValue_toArray],lC.prototype.SetterByBindingTypeAndVersioning=[[lC.prototype._setValue_direct,lC.prototype._setValue_direct_setNeedsUpdate,lC.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[lC.prototype._setValue_array,lC.prototype._setValue_array_setNeedsUpdate,lC.prototype._setValue_array_setMatrixWorldNeedsUpdate],[lC.prototype._setValue_arrayElement,lC.prototype._setValue_arrayElement_setNeedsUpdate,lC.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[lC.prototype._setValue_fromArray,lC.prototype._setValue_fromArray_setNeedsUpdate,lC.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var lT=class{constructor(e,t,i=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=r;let s=t.tracks,a=s.length,o=Array(a),l={endingStart:2400,endingEnd:2400};for(let e=0;e!==a;++e){let t=s[e].createInterpolant(null);o[e]=t,t.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}
3139fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i){if(e.fadeOut(t),this.fadeIn(t),i){let i=this._clip.duration,r=e._clip.duration;e.warp(1,r/i,t),this.warp(i/r,1,t)}return this}crossFadeTo(e,t,i){return e.crossFadeFrom(this,t,i)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){let r=this._mixer,s=r.time,a=this.timeScale,o=this._timeScaleInterpolant;null===o&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);let l=o.parameterPositions,h=o.sampleValues;return l[0]=s,l[1]=s+i,h[0]=e/a,h[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,r){if(!this.enabled){this._updateWeight(e);return}let s=this._startTime;if(null!==s){let r=(e-s)*i;r<0||0===i?t=0:(this._startTime=null,t=i*r)}t*=this._updateTimeScale(e);let a=this._updateTime(t),o=this._updateWeight(e);if(o>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let i=0,r=e.length;i!==r;++i)e[i].evaluate(a),t[i].accumulateAdditive(o);else for(let i=0,s=e.length;i!==s;++i)e[i].evaluate(a),t[i].accumulate(r,o)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(null!==i){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;null!==i&&(t*=i.evaluate(e)[0],e>i.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,s=this._loopCount,a=2202===i;if(0===e)return -1===s?r:a&&(1&s)==1?t-r:r;if(2200===i){-1===s&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===s&&(e>=0?(s=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),r>=t||r<0){let i=Math.floor(r/t);r-=t*i,s+=Math.abs(i);let o=this.repetitions-s;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===o){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=s,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=r;if(a&&(1&s)==1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=2401,r.endingEnd=2401):(e?r.endingStart=this.zeroSlopeAtStart?2401:2400:r.endingStart=2402,t?r.endingEnd=this.zeroSlopeAtEnd?2401:2400:r.endingEnd=2402)}_scheduleFading(e,t,i){let r=this._mixer,s=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,l=a.sampleValues;return o[0]=s,l[0]=t,o[1]=s+e,l[1]=i,this}},lP=new Float32Array(1),lD=class extends tz{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,s=r.length,a=e._propertyBindings,o=e._interpolants,l=i.uuid,h=this._bindingsByRootAndName,c=h[l];void 0===c&&(c={},h[l]=c);for(let e=0;e!==s;++e){let s=r[e],h=s.name,d=c[h];if(void 0!==d)++d.referenceCount,a[e]=d;else{if(void 0!==(d=a[e])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,l,h));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;d=new lx(lC.create(i,h,r),s.ValueTypeName,s.getValueSize()),++d.referenceCount,this._addInactiveBinding(d,l,h),a[e]=d}o[e].resultBuffer=d.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,i=e._clip.uuid,r
vendor: 5,830 bytes, line 3139
3139=this._actionsByClip[i];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,i,t)}let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t<this._nActiveActions}_addInactiveAction(e,t,i){let r=this._actions,s=this._actionsByClip,a=s[t];if(void 0===a)a={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,s[t]=a;else{let t=a.knownActions;e._byClipCacheIndex=t.length,t.push(e)}e._cacheIndex=r.length,r.push(e),a.actionByRoot[i]=e}_removeInactiveAction(e){let t=this._actions,i=t[t.length-1],r=e._cacheIndex;i._cacheIndex=r,t[r]=i,t.pop(),e._cacheIndex=null;let s=e._clip.uuid,a=this._actionsByClip,o=a[s],l=o.knownActions,h=l[l.length-1],c=e._byClipCacheIndex;h._byClipCacheIndex=c,l[c]=h,l.pop(),e._byClipCacheIndex=null;let d=o.actionByRoot,u=(e._localRoot||this._root).uuid;delete d[u],0===l.length&&delete a[s],this._removeInactiveBindingsForAction(e)}_removeInactiveBindingsForAction(e){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.referenceCount&&this._removeInactiveBinding(i)}}_lendAction(e){let t=this._actions,i=e._cacheIndex,r=this._nActiveActions++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackAction(e){let t=this._actions,i=e._cacheIndex,r=--this._nActiveActions,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_addInactiveBinding(e,t,i){let r=this._bindingsByRootAndName,s=this._bindings,a=r[t];void 0===a&&(a={},r[t]=a),a[i]=e,e._cacheIndex=s.length,s.push(e)}_removeInactiveBinding(e){let t=this._bindings,i=e.binding,r=i.rootNode.uuid,s=i.path,a=this._bindingsByRootAndName,o=a[r],l=t[t.length-1],h=e._cacheIndex;l._cacheIndex=h,t[h]=l,t.pop(),delete o[s],0===Object.keys(o).length&&delete a[r]}_lendBinding(e){let t=this._bindings,i=e._cacheIndex,r=this._nActiveBindings++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackBinding(e){let t=this._bindings,i=e._cacheIndex,r=--this._nActiveBindings,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_lendControlInterpolant(){let e=this._controlInterpolants,t=this._nActiveControlInterpolants++,i=e[t];return void 0===i&&((i=new oH(new Float32Array(2),new Float32Array(2),1,lP)).__cacheIndex=t,e[t]=i),i}_takeBackControlInterpolant(e){let t=this._controlInterpolants,i=e.__cacheIndex,r=--this._nActiveControlInterpolants,s=t[r];e.__cacheIndex=r,t[r]=e,s.__cacheIndex=i,t[i]=s}clipAction(e,t,i){let r=t||this._root,s=r.uuid,a="string"==typeof e?o0.findByName(r,e):e,o=null!==a?a.uuid:e,l=this._actionsByClip[o],h=null;if(void 0===i&&(i=null!==a?a.blendMode:2500),void 0!==l){let e=l.actionByRoot[s];if(void 0!==e&&e.blendMode===i)return e;h=l.knownActions[0],null===a&&(a=h._clip)}if(null===a)return null;let c=new lT(this,a,t,i);return this._bindAction(c,h),this._addInactiveAction(c,o,s),c}existingAction(e,t){let i=t||this._root,r=i.uuid,s="string"==typeof e?o0.findByName(i,e):e,a=s?s.uuid:e,o=this._actionsByClip[a];return void 0!==o&&o.actionByRoot[r]||null}stopAllAction(){let e=this._actions,t=this._nActiveActions;for(let i=t-1;i>=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,s=Math.sign(e),a=this._accuIndex^=1;for(let o=0;o!==i;++o)t[o]._update(r,e,s,a);let o=this._bindings,l=this._nActiveBindings;for(let e=0;e!==l;++e)o[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e<this._actions.length;e++)this._actions[e].time=0;return this.update(e)}getRoot(){return this._root}uncacheClip(e){let t=this._actions,i=e.uuid,r=this._actionsByClip,s=r[i];if(void 0!==s){let e=s.knownActions;for(let i=0,r=e.length;i!==r;++i){let r=e[i];this._deactivateAction(r);let s=r._cacheIndex,a=t[t.length-1];r._cacheIndex=null,r._byClipCacheIndex=null,a._cacheIndex=s,t[s]=a,t.pop(),this._removeInactiveBindingsForAction(r)}delete r[i]}}uncacheRoot(e){let t=e.uuid,i=this._actionsByClip;for(let e in i){let r=i[e].actionByRoot[t];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}let r=this._bindingsByRootAndName[t];if(void 0!==r)for(let e in r){let t=r[e];t.restoreOriginalState(),this._removeInactiveBinding(t)}}uncacheAction(e,t){let i=this.existingAction(e,t);null!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}},lI=class{constructor(e){this.value=e}clone(){return new lI(void 0===this.value.clone?this.value:this.value.clone())}},lO=class{constructor(e,t,i=0,r=1/0){this.ray=new iY(e,t),this.near=i,this.far=r,this.camera=null,this.layers=new i6,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):console.error("THREE.Raycaster:
3139Unsupported camera type: "+t.type)}intersectObject(e,t=!0,i=[]){return lL(e,this,i,t),i.sort(lR),i}intersectObjects(e,t=!0,i=[]){for(let r=0,s=e.length;r<s;r++)lL(e[r],this,i,t);return i.sort(lR),i}};function lR(e,t){return e.distance-t.distance}function lL(e,t,i,r){if(e.layers.test(t.layers)&&e.raycast(t,i),!0===r){let r=e.children;for(let e=0,s=r.length;e<s;e++)lL(r[e],t,i,!0)}}var lB=class{constructor(e=1,t=0,i=0){return this.radius=e,this.phi=t,this.theta=i,this}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(tj(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}},lz=new tK,lF=class{constructor(e=new tK(1/0,1/0),t=new tK(-1/0,-1/0)){this.isBox2=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=lz.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return lz.copy(e).clamp(this.min,this.max).sub(e).length()}intersect(e){return this.min.max(e.min),this.max.min(e.max),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},lN=new ix,lU=new ix,lk=class{constructor(e=new ix,t=new ix){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){lN.subVectors(e,this.start),lU.subVectors(this.end,this.start);let i=lU.dot(lU),r=lU.dot(lN)/i;return t&&(r=tj(r,0,1)),r}closestPointToPoint(e,t,i){let r=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(r).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}},lV=new ix,lj=class extends rc{constructor(e,t){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";let i=new rN,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){let i=e/32*Math.PI*2,s=t/32*Math.PI*2;r.push(Math.cos(i),Math.sin(i),1,Math.cos(s),Math.sin(s),1)}i.setAttribute("position",new rD(r,3));let s=new nN({fog:!1,toneMapped:!1});this.cone=new nX(i,s),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),lV.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(lV),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}},lG=class extends rJ{constructor(e,t,i){super(new oL(t,4,2),new rA({wireframe:!0,fog:!1,toneMapped:!1})),this.light=e,this.color=i,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},lH=new ix,lW=new ix,lq=new ix,lX=class extends rc{constructor(e,t,i){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=i,this.type="DirectionalLightHelper",void 0===t&&(t=1);let r=new rN;r.setAttribute("position",new rD([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));let s=new nN({fog:!1,toneMapped:!1});this.lightPlane=new nH(r,s),this.add(this.lightPlane),(r=new rN).setAttribute("position",new rD([0,0,0,0,0,1],3)),this.targetLine=new nH(r,s),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),lH.setFromMatrixPosition(this.light.matrixWorld),lW.setFromMatrixPosition(this.light.target.matrixWorld),lq.subVectors(lW,lH),this.lightPlane.lookAt(lW),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(lW),this.targetLine.scale.z
3139=lq.length()}},lY=new ix,lQ=new r9,lZ=class extends nX{constructor(e){let t=new rN,i=new nN({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={};function o(e,t){l(e),l(t)}function l(e){r.push(0,0,0),s.push(0,0,0),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}o("n1","n2"),o("n2","n4"),o("n4","n3"),o("n3","n1"),o("f1","f2"),o("f2","f4"),o("f4","f3"),o("f3","f1"),o("n1","f1"),o("n2","f2"),o("n3","f3"),o("n4","f4"),o("p","n1"),o("p","n2"),o("p","n3"),o("p","n4"),o("u1","u2"),o("u2","u3"),o("u3","u1"),o("c","t"),o("p","c"),o("cn1","cn2"),o("cn3","cn4"),o("cf1","cf2"),o("cf3","cf4"),t.setAttribute("position",new rD(r,3)),t.setAttribute("color",new rD(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update();let h=new is(16755200),c=new is(16711680),d=new is(43775),u=new is(16777215),p=new is(3355443);this.setColors(h,c,d,u,p)}setColors(e,t,i,r,s){let a=this.geometry.getAttribute("color");a.setXYZ(0,e.r,e.g,e.b),a.setXYZ(1,e.r,e.g,e.b),a.setXYZ(2,e.r,e.g,e.b),a.setXYZ(3,e.r,e.g,e.b),a.setXYZ(4,e.r,e.g,e.b),a.setXYZ(5,e.r,e.g,e.b),a.setXYZ(6,e.r,e.g,e.b),a.setXYZ(7,e.r,e.g,e.b),a.setXYZ(8,e.r,e.g,e.b),a.setXYZ(9,e.r,e.g,e.b),a.setXYZ(10,e.r,e.g,e.b),a.setXYZ(11,e.r,e.g,e.b),a.setXYZ(12,e.r,e.g,e.b),a.setXYZ(13,e.r,e.g,e.b),a.setXYZ(14,e.r,e.g,e.b),a.setXYZ(15,e.r,e.g,e.b),a.setXYZ(16,e.r,e.g,e.b),a.setXYZ(17,e.r,e.g,e.b),a.setXYZ(18,e.r,e.g,e.b),a.setXYZ(19,e.r,e.g,e.b),a.setXYZ(20,e.r,e.g,e.b),a.setXYZ(21,e.r,e.g,e.b),a.setXYZ(22,e.r,e.g,e.b),a.setXYZ(23,e.r,e.g,e.b),a.setXYZ(24,t.r,t.g,t.b),a.setXYZ(25,t.r,t.g,t.b),a.setXYZ(26,t.r,t.g,t.b),a.setXYZ(27,t.r,t.g,t.b),a.setXYZ(28,t.r,t.g,t.b),a.setXYZ(29,t.r,t.g,t.b),a.setXYZ(30,t.r,t.g,t.b),a.setXYZ(31,t.r,t.g,t.b),a.setXYZ(32,i.r,i.g,i.b),a.setXYZ(33,i.r,i.g,i.b),a.setXYZ(34,i.r,i.g,i.b),a.setXYZ(35,i.r,i.g,i.b),a.setXYZ(36,i.r,i.g,i.b),a.setXYZ(37,i.r,i.g,i.b),a.setXYZ(38,r.r,r.g,r.b),a.setXYZ(39,r.r,r.g,r.b),a.setXYZ(40,s.r,s.g,s.b),a.setXYZ(41,s.r,s.g,s.b),a.setXYZ(42,s.r,s.g,s.b),a.setXYZ(43,s.r,s.g,s.b),a.setXYZ(44,s.r,s.g,s.b),a.setXYZ(45,s.r,s.g,s.b),a.setXYZ(46,s.r,s.g,s.b),a.setXYZ(47,s.r,s.g,s.b),a.setXYZ(48,s.r,s.g,s.b),a.setXYZ(49,s.r,s.g,s.b),a.needsUpdate=!0}update(){let e=this.geometry,t=this.pointMap;lQ.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),lK("c",t,e,lQ,0,0,-1),lK("t",t,e,lQ,0,0,1),lK("n1",t,e,lQ,-1,-1,-1),lK("n2",t,e,lQ,1,-1,-1),lK("n3",t,e,lQ,-1,1,-1),lK("n4",t,e,lQ,1,1,-1),lK("f1",t,e,lQ,-1,-1,1),lK("f2",t,e,lQ,1,-1,1),lK("f3",t,e,lQ,-1,1,1),lK("f4",t,e,lQ,1,1,1),lK("u1",t,e,lQ,.7,1.1,-1),lK("u2",t,e,lQ,-.7,1.1,-1),lK("u3",t,e,lQ,0,2,-1),lK("cf1",t,e,lQ,-1,0,1),lK("cf2",t,e,lQ,1,0,1),lK("cf3",t,e,lQ,0,-1,1),lK("cf4",t,e,lQ,0,1,1),lK("cn1",t,e,lQ,-1,0,-1),lK("cn2",t,e,lQ,1,0,-1),lK("cn3",t,e,lQ,0,-1,-1),lK("cn4",t,e,lQ,0,1,-1),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function lK(e,t,i,r,s,a,o){lY.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],lY.x,lY.y,lY.z)}}var lJ=class extends nX{constructor(e,t=16776960){let i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),r=new rN;r.setIndex(new rC(i,1)),r.setAttribute("position",new rD([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(r,new nN({color:t,toneMapped:!1})),this.box=e,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(e){let t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(e))}dispose(){this.geometry.dispose(),this.material.dispose()}},l$=class extends nX{constructor(e=1){let t=new rN;t.setAttribute("position",new rD([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new rD([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new nN({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,i){let r=new is,s=this.geometry.attributes.color.array;return r.set(e),r.toArray(s,0),r.toArray(s,3),r.set(t),r.toArray(s,6),r.toArray(s,9),r.set(i),r.toArray(s,12),r.toArray(s,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},l0=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),i=new Uint32Array(e),r=new Uint32Array(512),s=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[256|e]=32768,s[e]=24,s[256|e]=24):t<-14?(r[e]=1024>>-t-14,r[256|e]=1024>>-t-14|32768,s[e]=-t-1,s[256|e]=-t-1):t<=15?(r[e]=t+15<<10,r[256|e]=t+15<<10|32768,s[e]=13,s[256|e]=13):t<128?(r[e]=31744,r[256|e]=64512,s[e]=24,s[256|e]=24):(r[e]=31744,r[256|e]=64512,s[e]=13,s[256|e]=13)}let a=new Uint32Array(2048),o=new Uint32Array(64),l=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,i=0;for(;(8388608&t)==0;)t<<=1,i-=8388608;t&=-8388609,i+=947912704,a[e]=t|i}for(let e=1024;e<2048;++e)a[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&&(l[e]=1024);return{floatView:t,uint32View:i,baseTable:r,shiftTable:s,mantissaTable:a,exponentTable:o,offsetTable:l}}(),l1=Object.freeze({__proto__:null,fromHalfFloat:function(e){let t=e>>10;return l0.uint32View[0]=l0.mantissaTable[l0.offsetTable[t]+(1023&e)]+l0.exponentTable[t],l0.floatView[0]},toHalfFloat:function(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=tj(e,-65504,65504),l0.floatView[0]=e;let t=l0.uint32View[0],i=t>>23&511;return l0.baseTable[i]+((8388607&t)>>l0.shiftTable[i])}});"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"149"}})),"u">typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="
3139149");var l2=Symbol("target"),l3=Symbol("unsubscribe");function l4(e){return e instanceof Date||e instanceof Set||e instanceof Map||e instanceof WeakSet||e instanceof WeakMap||ArrayBuffer.isView(e)}var l5=Array.isArray;function l6(e){return"symbol"==typeof e}var l8={after:(e,t)=>l5(e)?e.slice(t.length):""===t?e:e.slice(t.length+1),concat:(e,t)=>l5(e)?(e=[...e],t&&e.push(t),e):t&&void 0!==t.toString?(""!==e&&(e+="."),l6(t)?e+t.toString():e+t):e,initial:e=>{if(l5(e))return e.slice(0,-1);if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?"":e.slice(0,t)},last:e=>{if(l5(e))return e[e.length-1]||"";if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?e:e.slice(t+1)},walk:(e,t)=>{if(l5(e))for(let i of e)t(i);else if(""!==e){let i=0,r=e.indexOf(".");if(-1===r)t(e);else for(;i<e.length;)-1===r&&(r=e.length),t(e.slice(i,r)),i=r+1,r=e.indexOf(".",i)}},get(e,t){return this.walk(t,t=>{e&&(e=e[t])}),e}};function l9(e,t,i){return e.isUnsubscribed||t.ignoreSymbols&&l6(i)||t.ignoreUnderscores&&"_"===i.charAt(0)||"ignoreKeys"in t&&t.ignoreKeys.includes(i)}var l7=class{constructor(e){this._equals=e,this._proxyCache=new WeakMap,this._pathCache=new WeakMap,this.isUnsubscribed=!1}_getDescriptorCache(){return void 0===this._descriptorCache&&(this._descriptorCache=new WeakMap),this._descriptorCache}_getProperties(e){let t=this._getDescriptorCache(),i=t.get(e);return void 0===i&&(i={},t.set(e,i)),i}_getOwnPropertyDescriptor(e,t){if(this.isUnsubscribed)return Reflect.getOwnPropertyDescriptor(e,t);let i=this._getProperties(e),r=i[t];return void 0===r&&(r=Reflect.getOwnPropertyDescriptor(e,t),i[t]=r),r}getProxy(e,t,i,r){if(this.isUnsubscribed)return e;let s=e[r],a=s||e;this._pathCache.set(a,t);let o=this._proxyCache.get(a);return void 0===o&&(o=void 0===s?new Proxy(e,i):e,this._proxyCache.set(a,o)),o}getPath(e){return this.isUnsubscribed?void 0:this._pathCache.get(e)}isDetached(e,t){return!Object.is(e,l8.get(t,this.getPath(e)))}defineProperty(e,t,i){return!!Reflect.defineProperty(e,t,i)&&(this.isUnsubscribed||(this._getProperties(e)[t]=i),!0)}setProperty(e,t,i,r,s){if(!this._equals(s,i)||!(t in e)){let s=this._getOwnPropertyDescriptor(e,t);return void 0!==s&&"set"in s?Reflect.set(e,t,i,r):Reflect.set(e,t,i)}return!0}deleteProperty(e,t,i){if(Reflect.deleteProperty(e,t)){if(!this.isUnsubscribed){let r=this._getDescriptorCache().get(e);r&&(delete r[t],this._pathCache.delete(i))}return!0}return!1}isSameDescriptor(e,t,i){let r=this._getOwnPropertyDescriptor(t,i);return void 0!==e&&void 0!==r&&Object.is(e.value,r.value)&&(e.writable||!1)===(r.writable||!1)&&(e.enumerable||!1)===(r.enumerable||!1)&&(e.configurable||!1)===(r.configurable||!1)&&e.get===r.get&&e.set===r.set}isGetInvariant(e,t){let i=this._getOwnPropertyDescriptor(e,t);return void 0!==i&&!0!==i.configurable&&!0!==i.writable}unsubscribe(){this._descriptorCache=null,this._pathCache=null,this._proxyCache=null,this.isUnsubscribed=!0}};function he(e){return"[object Object]"===toString.call(e)}function ht(){return!0}function hi(e,t){return e.length!==t.length||e.some((e,i)=>t[i]!==e)}var hr=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]),hs=new Set(["concat","includes","indexOf","join","keys","lastIndexOf"]),ha={push:ht,pop:ht,shift:ht,unshift:ht,copyWithin:hi,reverse:hi,sort:hi,splice:hi,flat:hi,fill:hi},hn=new Set([...hr,...hs,...Object.keys(ha)]);function ho(e,t){if(e.size!==t.size)return!0;for(let i of e)if(!t.has(i))return!0;return!1}var hl=["keys","values","entries"],hh=new Set(["has","toString"]),hc={add:ho,clear:ho,delete:ho,forEach:ho},hd=new Set([...hh,...Object.keys(hc),...hl]);function hu(e,t){let i;if(e.size!==t.size)return!0;for(let[r,s]of e)if((i=t.get(r))!==s||void 0===i&&!t.has(r))return!0;return!1}var hp=new Set([...hh,"get"]),hf={set:hu,clear:hu,delete:hu,forEach:hu},hm=new Set([...hp,...Object.keys(hf),...hl]),hg=class{constructor(e,t,i,r){this._path=t,this._isChanged=!1,this._clonedCache=new Set,this._hasOnValidate=r,this._changes=r?[]:null,this.clone=void 0===t?e:this._shallowClone(e)}static isHandledMethod(e){return hr.has(e)}_shallowClone(e){let t=e;if(he(e))t={...e};else if(l5(e))t=[...e];else if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set([...e].map(e=>this._shallowClone(e)));else if(e instanceof Map)for(let[i,r]of(t=new Map,e.entries()))t.set(i,this._shallowClone(r));return this._clonedCache.add(t),t}preferredThisArg(e,t,i,r){return e?(l5(r)?this._onIsChanged=ha[t]:r instanceof Set?this._onIsChanged=hc[t]:r instanceof Map&&(this._onIsChanged=hf[t]),r):i}update(e,t,i){let r=l8.after(e,this._path);if("length"!==t){let e=this.clone;l8.walk(r,t=>{e&&e[t]&&(this._clonedCache.has(e[t])||(e[t]=this._shallowClone(e[t])),e=e[t])}),this._hasOnValidate&&this._changes.push({path:r,property:t,previous:i}),e&&e[t]&&(e[t]=i)}this._isChanged=!0}undo(e){let t;for(let i=this._changes.length-1;-1!==i;i--)t=this._changes[i],l8.get(e,t.path)[t.property]=t.previous}isChanged(e){return void 0===this._onIsChanged?this._isChanged:this._onIsChanged(this.clone,e)}},hv=class extends hg{static isHandledMethod(e){return hn.has(e)}},hy=class extends hg{undo(e){e.setTime(this.clone.getTime())}isChanged(e,t){return!t(this.clone.valueOf(),e.valueOf())}},hx=class extends hg{static isHandledMethod(e){return hd.has(e)}undo(e){for(let t of this.clone)e.add(t);for(let t of e)this.clone.has(t)||e.delete(t)}},hb=class extends hg{static isHandledMethod(e){return hm.has(e)}undo(e){for(let[t,i]of this.clone.entries())e.set(t,i);for(let t of e.keys())this.clone.has(t)||e.delete(t)}},hw=class extends hg{constructor(e,t,i,r){super(void 0,t,i,r),this._arg1=i[0],this._weakValue=e.has(this._arg1)}isChanged(e){return this._weakValue!==e.has(this._arg1)}undo(e){this._weakValue&&!e.has(this._arg1)?e.add(this._arg1):e.delete(this._arg1)}},hS=class extends hg{constructor(e,t,i,r){super(void 0,t,i,r),this._weakKey=i[0],this._weakHas=e.has(this._weakKey),this._weakValue=e.get(this._weakKey)}isChanged(e){return this._weakValue!==e.get(this._weakKey)}undo(e){let t=e.has(this._weakKey);this._weakHas&&!t?e.set(this._weakKey,this._weakValue):!this._weakHas&&t?e.delete(this._weakKey):this._weakValue!==e.get(this._weakKey)&&e.set(this._weakKey,this._weakValue)}},h_=class{constructor(e){this._stack=[],this._hasOnValidate=e}static isHandledType(e){return he(e)||l5(e)||l4(e)}static isHandledMethod(e,t){return he(e)?hg.isHandledMethod(t):l5(e)?hv.isHandledMethod(t):e instanceof Set?hx.isHandledMethod(t):e instanceof Map?hb.isHandledMethod(t):l4(e)}get isCloning(){return this._stack.length>0}start(e,t,i){let r=hg;l5(e)?r=hv:e instanceof Date?r=hy:e instanceof Set?r=hx:e instanceof Map?r=hb:e instanceof WeakSet?r=hw:e instanceof WeakMap&&(r=hS),this._stack.push(new r(e,t,i,this._hasOnValidate))}update(e,t,i){this._stack[this._stack.length-1].update(e,t,i)}preferredThisArg(e,t,i){let{name:r}=e,s=h_.isHandledMethod(i,r);return this._stack[this._stack.length-1].preferredThisArg(s,r,t,i)}isChanged(e,t,i){return this._stack[this._stack.length-1].isChanged(e,t,i)}undo(e){void 0!==this._previousClone&&this._previousClone.undo(e)}stop(){return this._previousClone=this._stack.pop(),this._previousClone.clone}},hA={equals:Object.is,isShallow:!1,pathAsArray:!1,ignoreSymbols:!1,ignoreUnderscores:!1,ignoreDetached:!1,details:!1},hM=(e,t,i={})=>{i={...hA,...i};let r=Symbol("ProxyTarget"),{equals:s,isShallow:a,ignoreDetached:o,details:l}=i,h=new l7(s),c="function"==typeof i.onValidate,d=new h_(c),u=(e,t,r,s,a)=>!c||d.isCloning||!0===i.onValidate(l8.concat(h.getPath(e),t),r,s,a),p=(t,r,s,a)=>{l9(h,i,r)||o&&h.isDetached(t,e)||f(h.getPath(t),r,s,a)},f=(e,i,r,s,a)=>{d.isCloning?d.update(e,i,s):t(l8.concat(e,i),r,s,a)},m=e=>e&&(e[r]||e),g=(t,s,l,c)=>("object"==typeof t?null===t:"function"!=typeof t)||t instanceof RegExp||"constructor"===l||a&&!h_.isHandledMethod(s,l)||l9(h,i,l)||h.isGetInvariant(s,l)||o&&h.isDetached(s,e)?t:(void 0===c&&(c=h.getPath(s)),h.getProxy(t,l8.concat(c,l),v,r)),v={get(e,t,i){if(l6(t)){if(t===r||t===l2)return e;if(t===l3&&!h.isUnsubscribed&&0===h.getPath(e).length)return h.unsubscribe(),e}return g(l4(e)?Reflect.get(e,t):Reflect.get(e,t,i),e,t)},set(e,t,i,a){i=m(i);let o=e[r]||e,l=o[t];if(s(l,i)&&t in e)return!0;let c=u(e,t,i,l);return c&&h.setProperty(o,t,i,a,l)?(p(e,t,e[t],l),!0):!c},defineProperty(e,t,i){if(!h.isSameDescriptor(i,e,t)){let r=e[t];u(e,t,i.value,r)&&h.defineProperty(e,t,i,r)&&p(e,t,i.value,r)}return!0},deleteProperty(e,t){if(!Reflect.has(e,t))return!0;let i=Reflect.get(e,t),r=u(e,t,void 0,i);return r&&h.deleteProperty(e,t,i)?(p(e,t,void 0,i),!0):!r},apply(t,i,a){let o=i[r]||i;if(h.isUnsubscribed)return Reflect.apply(t,o,a);if((!1===l||!0!==l&&!l.includes(t.name))&&h_.isHandledType(o)){var c;let r=l8.initial(h.getPath(t)),l=h_.isHandledMethod(o,t.name);d.start(o,r,a);
3139let p=Reflect.apply(t,d.preferredThisArg(t,i,o),l?a.map(e=>m(e)):a),y=d.isChanged(o,s),x=d.stop();if(h_.isHandledType(p)&&l&&(i instanceof Map&&"get"===t.name&&(r=l8.concat(r,a[0])),p=h.getProxy(p,r,v)),y){let i={name:t.name,args:a,result:p},s=d.isCloning?l8.initial(r):r,l=d.isCloning?l8.last(r):"";u(l8.get(e,s),l,o,x,i)?f(s,l,o,x,i):d.undo(o)}return(i instanceof Map||i instanceof Set)&&"object"==typeof(c=p)&&"function"==typeof c.next?function(e,t,i,r,s){let a=e.next;if("entries"===t.name)e.next=function(){let e=a.call(this);return!1===e.done&&(e.value[0]=s(e.value[0],t,e.value[0],r),e.value[1]=s(e.value[1],t,e.value[0],r)),e};else if("values"===t.name){let o=i[l2].keys();e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,o.next().value,r)),e}}else e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,e.value,r)),e};return e}(p,t,i,r,g):p}return Reflect.apply(t,i,a)}},y=h.getProxy(e,i.pathAsArray?[]:"",v);return t=t.bind(y),c&&(i.onValidate=i.onValidate.bind(y)),y};hM.target=e=>e&&e[l2]||e,hM.unsubscribe=e=>e[l3]||e;var hE="object"==typeof global&&global&&global.Object===Object&&global,hC="object"==typeof self&&self&&self.Object===Object&&self,hT=hE||hC||Function("return this")(),hP=hT.Symbol,hD=Object.prototype,hI=hD.hasOwnProperty,hO=hD.toString,hR=hP?hP.toStringTag:void 0,hL=function(e){var t=hI.call(e,hR),i=e[hR];try{e[hR]=void 0;var r=!0}catch{}var s=hO.call(e);return r&&(t?e[hR]=i:delete e[hR]),s},hB=Object.prototype.toString,hz=hP?hP.toStringTag:void 0,hF=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":hz&&hz in Object(e)?hL(e):hB.call(e)},hN=function(e){return null!=e&&"object"==typeof e},hU=function(e){return"symbol"==typeof e||hN(e)&&"[object Symbol]"==hF(e)},hk=function(e,t){for(var i=-1,r=null==e?0:e.length,s=Array(r);++i<r;)s[i]=t(e[i],i,e);return s},hV=Array.isArray,hj=1/0,hG=hP?hP.prototype:void 0,hH=hG?hG.toString:void 0,hW=function e(t){if("string"==typeof t)return t;if(hV(t))return hk(t,e)+"";if(hU(t))return hH?hH.call(t):"";var i=t+"";return"0"==i&&1/t==-hj?"-0":i},hq=/\s/,hX=function(e){for(var t=e.length;t--&&hq.test(e.charAt(t)););return t},hY=/^\s+/,hQ=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},hZ=0/0,hK=/^[-+]0x[0-9a-f]+$/i,hJ=/^0b[01]+$/i,h$=/^0o[0-7]+$/i,h0=parseInt,h1=function(e){if("number"==typeof e)return e;if(hU(e))return hZ;if(hQ(e)){var t,i="function"==typeof e.valueOf?e.valueOf():e;e=hQ(i)?i+"":i}if("string"!=typeof e)return 0===e?e:+e;e=(t=e)&&t.slice(0,hX(t)+1).replace(hY,"");var r=hJ.test(e);return r||h$.test(e)?h0(e.slice(2),r?2:8):hK.test(e)?hZ:+e},h2=function(e){return e},h3=function(e){if(!hQ(e))return!1;var t=hF(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},h4=hT["__core-js_shared__"],h5=(pi=/[^.]+$/.exec(h4&&h4.keys&&h4.keys.IE_PROTO||""))?"Symbol(src)_1."+pi:"",h6=Function.prototype.toString,h8=function(e){if(null!=e){try{return h6.call(e)}catch{}try{return e+""}catch{}}return""},h9=/^\[object .+?Constructor\]$/,h7=Object.prototype,ce=Function.prototype.toString,ct=h7.hasOwnProperty,ci=RegExp("^"+ce.call(ct).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),cr=function(e,t){var i,r=e?.[t];return hQ(i=r)&&(!h5||!(h5 in i))&&(h3(i)?ci:h9).test(h8(i))?r:void 0},cs=cr(hT,"WeakMap"),ca=Object.create,cn=function(){function e(){}return function(t){if(!hQ(t))return{};if(ca)return ca(t);e.prototype=t;var i=new e;return e.prototype=void 0,i}}(),co=function(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)},cl=function(e,t){var i=-1,r=e.length;for(t||(t=Array(r));++i<r;)t[i]=e[i];return t},ch=Date.now,cc=function(){try{var e=cr(Object,"defineProperty");return e({},"",{}),e}catch{}}(),cd=(pr=cc?function(e,t){return cc(e,"toString",{configurable:!0,enumerable:!1,value:function(){return t},writable:!0})}:h2,ps=0,pa=0,function(){var e=ch(),t=16-(e-pa);if(pa=e,t>0){if(++ps>=800)return arguments[0]}else ps=0;return pr.apply(void 0,arguments)}),cu=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r&&!1!==t(e[i],i,e););return e},cp=/^(?:0|[1-9]\d*)$/,cf=function(e,t){var i=typeof e;return!!(t=t??9007199254740991)&&("number"==i||"symbol"!=i&&cp.test(e))&&e>-1&&e%1==0&&e<t},cm=function(e,t,i){"__proto__"==t&&cc?cc(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i},cg=function(e,t){return e===t||e!=e&&t!=t},cv=Object.prototype.hasOwnProperty,cy=function(e,t,i){var r=e[t];cv.call(e,t)&&cg(r,i)&&(void 0!==i||t in e)||cm(e,t,i)},cx=function(e,t,i,r){var s=!i;i||(i={});for(var a=-1,o=t.length;++a<o;){var l=t[a],h=r?r(i[l],e[l],l,i,e):void 0;void 0===h&&(h=e[l]),s?cm(i,l,h):cy(i,l,h)}return i},cb=Math.max,cw=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},cS=function(e){return null!=e&&cw(e.length)&&!h3(e)},c_=Object.prototype,cA=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||c_)},cM=function(e,t){for(var i=-1,r=Array(e);++i<e;)r[i]=t(i);return r},cE=function(e){return hN(e)&&"[object Arguments]"==hF(e)},cC=Object.prototype,cT=cC.hasOwnProperty,cP=cC.propertyIsEnumerable,cD=cE(function(){return arguments}())?cE:function(e){return hN(e)&&cT.call(e,"callee")&&!cP.call(e,"callee")},cI="object"==typeof exports&&exports&&!exports.nodeType&&exports,cO=cI&&"object"==typeof module&&module&&!module.nodeType&&module,cR=cO&&cO.exports===cI?hT.Buffer:void 0,cL=(cR?cR.isBuffer:void 0)||function(){return!1},cB={};
3139cB["[object Float32Array]"]=cB["[object Float64Array]"]=cB["[object Int8Array]"]=cB["[object Int16Array]"]=cB["[object Int32Array]"]=cB["[object Uint8Array]"]=cB["[object Uint8ClampedArray]"]=cB["[object Uint16Array]"]=cB["[object Uint32Array]"]=!0,cB["[object Arguments]"]=cB["[object Array]"]=cB["[object ArrayBuffer]"]=cB["[object Boolean]"]=cB["[object DataView]"]=cB["[object Date]"]=cB["[object Error]"]=cB["[object Function]"]=cB["[object Map]"]=cB["[object Number]"]=cB["[object Object]"]=cB["[object RegExp]"]=cB["[object Set]"]=cB["[object String]"]=cB["[object WeakMap]"]=!1;var cz=function(e){return function(t){return e(t)}},cF="object"==typeof exports&&exports&&!exports.nodeType&&exports,cN=cF&&"object"==typeof module&&module&&!module.nodeType&&module,cU=cN&&cN.exports===cF&&hE.process,ck=function(){try{return cN&&cN.require&&cN.require("util").types||cU&&cU.binding&&cU.binding("util")}catch{}}(),cV=ck&&ck.isTypedArray,cj=cV?cz(cV):function(e){return hN(e)&&cw(e.length)&&!!cB[hF(e)]},cG=Object.prototype.hasOwnProperty,cH=function(e,t){var i=hV(e),r=!i&&cD(e),s=!i&&!r&&cL(e),a=!i&&!r&&!s&&cj(e),o=i||r||s||a,l=o?cM(e.length,String):[],h=l.length;for(var c in e)(t||cG.call(e,c))&&!(o&&("length"==c||s&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||cf(c,h)))&&l.push(c);return l},cW=function(e,t){return function(i){return e(t(i))}},cq=cW(Object.keys,Object),cX=Object.prototype.hasOwnProperty,cY=function(e){if(!cA(e))return cq(e);var t=[];for(var i in Object(e))cX.call(e,i)&&"constructor"!=i&&t.push(i);return t},cQ=function(e){return cS(e)?cH(e):cY(e)},cZ=function(e){var t=[];if(null!=e)for(var i in Object(e))t.push(i);return t},cK=Object.prototype.hasOwnProperty,cJ=function(e){if(!hQ(e))return cZ(e);var t=cA(e),i=[];for(var r in e)"constructor"==r&&(t||!cK.call(e,r))||i.push(r);return i},c$=function(e){return cS(e)?cH(e,!0):cJ(e)},c0=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c1=/^\w*$/,c2=function(e,t){if(hV(e))return!1;var i=typeof e;return!!("number"==i||"symbol"==i||"boolean"==i||null==e||hU(e))||c1.test(e)||!c0.test(e)||null!=t&&e in Object(t)},c3=cr(Object,"create"),c4=Object.prototype.hasOwnProperty,c5=Object.prototype.hasOwnProperty;function c6(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c6.prototype.clear=function(){this.__data__=c3?c3(null):{},this.size=0},c6.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},c6.prototype.get=function(e){var t=this.__data__;if(c3){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return c4.call(t,e)?t[e]:void 0},c6.prototype.has=function(e){var t=this.__data__;return c3?void 0!==t[e]:c5.call(t,e)},c6.prototype.set=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=c3&&void 0===t?"__lodash_hash_undefined__":t,this};var c8=function(e,t){for(var i=e.length;i--;)if(cg(e[i][0],t))return i;return -1},c9=Array.prototype.splice;function c7(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c7.prototype.clear=function(){this.__data__=[],this.size=0},c7.prototype.delete=function(e){var t=this.__data__,i=c8(t,e);return!(i<0)&&(i==t.length-1?t.pop():c9.call(t,i,1),--this.size,!0)},c7.prototype.get=function(e){var t=this.__data__,i=c8(t,e);return i<0?void 0:t[i][1]},c7.prototype.has=function(e){return c8(this.__data__,e)>-1},c7.prototype.set=function(e,t){var i=this.__data__,r=c8(i,e);return r<0?(++this.size,i.push([e,t])):i[r][1]=t,this};var de=cr(hT,"Map"),dt=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e},di=function(e,t){var i=e.__data__;return dt(t)?i["string"==typeof t?"string":"hash"]:i.map};function dr(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}function ds(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw TypeError("Expected a function");var i=function(){var r=arguments,s=t?t.apply(this,r):r[0],a=i.cache;if(a.has(s))return a.get(s);var o=e.apply(this,r);return i.cache=a.set(s,o)||a,o};return i.cache=new(ds.Cache||dr),i}dr.prototype.clear=function(){this.size=0,this.__data__={hash:new c6,map:new(de||c7),string:new c6}},dr.prototype.delete=function(e){var t=di(this,e).delete(e);return this.size-=t?1:0,t},dr.prototype.get=function(e){return di(this,e).get(e)},dr.prototype.has=function(e){return di(this,e).has(e)},dr.prototype.set=function(e,t){var i=di(this,e),r=i.size;return i.set(e,t),this.size+=i.size==r?0:1,this},ds.Cache=dr;var da=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,dn=/\\(\\)?/g,dl=(po=(pn=ds(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(da,function(e,i,r,s){t.push(r?s.replace(dn,"$1"):i||e)}),t},function(e){return 500===po.size&&po.clear(),e})).cache,pn),dh=function(e,t){return hV(e)?e:c2(e,t)?[e]:dl(null==e?"":hW(e))},dc=1/0,dd=function(e){if("string"==typeof e||hU(e))return e;var t=e+"";return"0"==t&&1/e==-dc?"-0":t},du=function(e,t){t=dh(t,e);for(var i=0,r=t.length;null!=e&&i<r;)e=e[dd(t[i++])];return i&&i==r?e:void 0},dp=function(e,t){for(var i=-1,r=t.length,s=e.length;++i<r;)e[s+i]=t[i];return e},df=hP?hP.isConcatSpreadable:void 0,dm=function(e){return hV(e)||cD(e)||!!(df&&e&&e[df])},dg=function e(t,i,r,s,a){var o=-1,l=t.length;for(r||(r=dm),a||(a=[]);++o<l;){var h=t[o];i>0&&r(h)?i>1?e(h,i-1,r,s,a):dp(a,h):s||(a[a.length]=h)}return a},dv=function(e){var t;return cd((t=cb((t=void 0,e.length-1),0),function(){for(var i,r=arguments,s=-1,a=cb(r.length-t,0),o=Array(a);++s<a;)o[s]=r[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=r[s];return l[t]=(null==(i=o)?0:i.length)?dg(i,1):[],co(e,this,l)}),e+"")},dy=cW(Object.getPrototypeOf,Object),dx=Object.prototype,db=Function.prototype.toString,dw=dx.hasOwnProperty,dS=db.call(Object),d_=function(e){if(!hN(e)||"[object Object]"!=hF(e))return!1;var t=dy(e);if(null===t)return!0;var i=dw.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&db.call(i)==dS},dA=function(e,t,i){var r=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(i=i>s?s:i)<0&&(i+=s),s=t>i?0:i-t>>>0,t>>>=0;for(var a=Array(s);++r<s;)a[r]=e[r+t];return a};function dM(e){var t=this.__data__=new c7(e);this.size=t.size}dM.prototype.clear=function(){this.__data__=new c7,this.size=0},dM.prototype.delete=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i},dM.prototype.get=function(e){return this.__data__.get(e)},dM.prototype.has=function(e){return this.__data__.has(e)},dM.prototype.set=function(e,t){var i=this.__data__;if(i instanceof c7){var r=i.__data__;if(!de||r.length<199)return r.push([e,t]),this.size=++i.size,this;i=this.__data__=new dr(r)}return i.set(e,t),this.size=i.size,this};var dE="object"==typeof exports&&exports&&!exports.nodeType&&exports,dC=dE&&"object"==typeof module&&module&&!module.nodeType&&module,dT=dC&&dC.exports===dE?hT.Buffer:void 0,dP=dT?dT.allocUnsafe:void 0,dD=function(e,t){if(t)return e.slice();var i=e.length,r=dP?dP(i):new e.constructor(i);return e.copy(r),r},dI=function(e,t){for(var i=-1,r=null==e?0:e.length,s=0,a=[];++i<r;){var o=e[i];t(o,i,e)&&(a[s++]=o)}return a},dO=function(){return[]},dR=Object.prototype.propertyIsEnumerable,dL=Object.getOwnPropertySymbols,dB=dL?function(e){return null==e?[]:dI(dL(e=Object(e)),function(t){return dR.call(e,t)})}:dO,dz=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)dp(t,dB(e)),e=dy(e);return t}:dO,dF=function(e,t,i){var r=t(e);return hV(e)?r:dp(r,i(e))},dN=function(e){return dF(e,cQ,dB)},dU=function(e){return dF(e,c$,dz)},dk=cr(hT,"DataView"),dV=cr(hT,"Promise"),dj=cr(hT,"Set"),dG="[object Map]",dH="[object Promise]",dW="[object Set]",dq="[object WeakMap]",dX="[object DataView]",dY=h8(dk),dQ=h8(de),dZ=h8(dV),dK=h8(dj),dJ=h8(cs),d$=hF;(dk&&d$(new dk(new ArrayBuffer(1)))!=dX||de&&d$(new de)!=dG||dV&&d$(dV.resolve())!=dH||dj&&d$(new dj)!=dW||cs&&d$(new cs)!=dq)&&(d$=function(e){var t=hF(e),i="[object Object]"==t?e.constructor:void 0,r=i?h8(i):"";if(r)switch(r){case dY:return dX;case dQ:return dG;
3139case dZ:return dH;case dK:return dW;case dJ:return dq}return t});var d0=d$,d1=Object.prototype.hasOwnProperty,d2=function(e){var t=e.length,i=new e.constructor(t);return t&&"string"==typeof e[0]&&d1.call(e,"index")&&(i.index=e.index,i.input=e.input),i},d3=hT.Uint8Array,d4=function(e){var t=new e.constructor(e.byteLength);return new d3(t).set(new d3(e)),t},d5=function(e,t){var i=t?d4(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.byteLength)},d6=/\w*$/,d8=function(e){var t=new e.constructor(e.source,d6.exec(e));return t.lastIndex=e.lastIndex,t},d9=hP?hP.prototype:void 0,d7=d9?d9.valueOf:void 0,ue=function(e,t){var i=t?d4(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)},ut=function(e,t,i){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return d4(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return d5(e,i);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return ue(e,i);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return d8(e);case"[object Symbol]":return d7?Object(d7.call(e)):{}}},ui=ck&&ck.isMap,ur=ui?cz(ui):function(e){return hN(e)&&"[object Map]"==d0(e)},us=ck&&ck.isSet,ua=us?cz(us):function(e){return hN(e)&&"[object Set]"==d0(e)},un="[object Arguments]",uo="[object Function]",ul="[object Object]",uh={};uh[un]=uh["[object Array]"]=uh["[object ArrayBuffer]"]=uh["[object DataView]"]=uh["[object Boolean]"]=uh["[object Date]"]=uh["[object Float32Array]"]=uh["[object Float64Array]"]=uh["[object Int8Array]"]=uh["[object Int16Array]"]=uh["[object Int32Array]"]=uh["[object Map]"]=uh["[object Number]"]=uh[ul]=uh["[object RegExp]"]=uh["[object Set]"]=uh["[object String]"]=uh["[object Symbol]"]=uh["[object Uint8Array]"]=uh["[object Uint8ClampedArray]"]=uh["[object Uint16Array]"]=uh["[object Uint32Array]"]=!0,uh["[object Error]"]=uh[uo]=uh["[object WeakMap]"]=!1;var uc=function e(t,i,r,s,a,o){var l,h=1&i,c=2&i,d=4&i;if(r&&(l=a?r(t,s,a,o):r(t)),void 0!==l)return l;if(!hQ(t))return t;var u=hV(t);if(u){if(l=d2(t),!h)return cl(t,l)}else{var p,f,m,g,v=d0(t),y=v==uo||"[object GeneratorFunction]"==v;if(cL(t))return dD(t,h);if(v==ul||v==un||y&&!a){if(l=c||y?{}:"function"!=typeof t.constructor||cA(t)?{}:cn(dy(t)),!h)return c?(f=(p=l)&&cx(t,c$(t),p),cx(t,dz(t),f)):(g=(m=l)&&cx(t,cQ(t),m),cx(t,dB(t),g))}else{if(!uh[v])return a?t:{};l=ut(t,v,h)}}o||(o=new dM);var x=o.get(t);if(x)return x;o.set(t,l),ua(t)?t.forEach(function(s){l.add(e(s,i,r,s,t,o))}):ur(t)&&t.forEach(function(s,a){l.set(a,e(s,i,r,a,t,o))});var b=d?c?dU:dN:c?c$:cQ,w=u?void 0:b(t);return cu(w||t,function(s,a){w&&(s=t[a=s]),cy(l,a,e(s,i,r,a,t,o))}),l},ud=function(e){return uc(e,5)};function uu(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new dr;++t<i;)this.add(e[t])}uu.prototype.add=uu.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},uu.prototype.has=function(e){return this.__data__.has(e)};var up=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r;)if(t(e[i],i,e))return!0;return!1},uf=function(e,t,i,r,s,a){var o=1&i,l=e.length,h=t.length;if(l!=h&&!(o&&h>l))return!1;var c=a.get(e),d=a.get(t);if(c&&d)return c==t&&d==e;var u=-1,p=!0,f=2&i?new uu:void 0;for(a.set(e,t),a.set(t,e);++u<l;){var m=e[u],g=t[u];if(r)var v=o?r(g,m,u,t,e,a):r(m,g,u,e,t,a);if(void 0!==v){if(v)continue;p=!1;break}if(f){if(!up(t,function(e,t){if(!f.has(t)&&(m===e||s(m,e,i,r,a)))return f.push(t)})){p=!1;break}}else if(!(m===g||s(m,g,i,r,a))){p=!1;break}}return a.delete(e),a.delete(t),p},um=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e,r){i[++t]=[r,e]}),i},ug=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e){i[++t]=e}),i},uv=hP?hP.prototype:void 0,uy=uv?uv.valueOf:void 0,ux=function(e,t,i,r,s,a,o){switch(i){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)break;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new d3(e),new d3(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return cg(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var l=um;case"[object Set]":var h=1&r;if(l||(l=ug),e.size!=t.size&&!h)break;var c=o.get(e);if(c)return c==t;r|=2,o.set(e,t);var d=uf(l(e),l(t),r,s,a,o);return o.delete(e),d;case"[object Symbol]":if(uy)return uy.call(e)==uy.call(t)}return!1},ub=Object.prototype.hasOwnProperty,uw=function(e,t,i,r,s,a){var o=1&i,l=dN(e),h=l.length;if(h!=dN(t).length&&!o)return!1;for(var c=h;c--;){var d=l[c];if(!(o?d in t:ub.call(t,d)))return!1}var u=a.get(e),p=a.get(t);if(u&&p)return u==t&&p==e;var f=!0;a.set(e,t),a.set(t,e);for(var m=o;++c<h;){var g=e[d=l[c]],v=t[d];if(r)var y=o?r(v,g,d,t,e,a):r(g,v,d,e,t,a);if(!(void 0===y?g===v||s(g,v,i,r,a):y)){f=!1;break}m||(m="constructor"==d)}if(f&&!m){var x=e.constructor,b=t.constructor;x!=b&&"constructor"in e&&"constructor"in t&&!("function"==typeof x&&x instanceof x&&"function"==typeof b&&b instanceof b)&&(f=!1)}return a.delete(e),a.delete(t),f},uS="[object Arguments]",u_="[object Array]",uA="[object Object]",uM=Object.prototype.hasOwnProperty,uE=function(e,t,i,r,s,a){var o=hV(e),l=hV(t),h=o?u_:d0(e),c=l?u_:d0(t);h=h==uS?uA:h,c=c==uS?uA:c;var d=h==uA,u=c==uA,p=h==c;if(p&&cL(e)){if(!cL(t))return!1;o=!0,d=!1}if(p&&!d)return a||(a=new dM),o||cj(e)?uf(e,t,i,r,s,a):ux(e,t,h,i,r,s,a);if(!(1&i)){var f=d&&uM.call(e,"__wrapped__"),m=u&&uM.call(t,"__wrapped__");
3139if(f||m){var g=f?e.value():e,v=m?t.value():t;return a||(a=new dM),s(g,v,i,r,a)}}return!!p&&(a||(a=new dM),uw(e,t,i,r,s,a))},uC=function(e,t){return null!=e&&t in Object(e)},uT=function(e,t,i){t=dh(t,e);for(var r=-1,s=t.length,a=!1;++r<s;){var o=dd(t[r]);if(!(a=null!=e&&i(e,o)))break;e=e[o]}return a||++r!=s?a:!!(s=null==e?0:e.length)&&cw(s)&&cf(o,s)&&(hV(e)||cD(e))},uP=function(){return hT.Date.now()},uD=Math.max,uI=Math.min,uO=function(e,t,i){var r,s,a,o,l,h,c=0,d=!1,u=!1,p=!0;if("function"!=typeof e)throw TypeError("Expected a function");function f(t){var i=r,a=s;return r=s=void 0,c=t,o=e.apply(a,i)}function m(e){var i=e-h,r=e-c;return void 0===h||i>=t||i<0||u&&r>=a}function g(){var e,i,r,s=uP();if(m(s))return v(s);l=setTimeout(g,(e=s-h,i=s-c,r=t-e,u?uI(r,a-i):r))}function v(e){return l=void 0,p&&r?f(e):(r=s=void 0,o)}function y(){var e,i=uP(),a=m(i);if(r=arguments,s=this,h=i,a){if(void 0===l)return c=e=h,l=setTimeout(g,t),d?f(e):o;if(u)return clearTimeout(l),l=setTimeout(g,t),f(h)}return void 0===l&&(l=setTimeout(g,t)),o}return t=h1(t)||0,hQ(i)&&(d=!!i.leading,a=(u="maxWait"in i)?uD(h1(i.maxWait)||0,t):a,p="trailing"in i?!!i.trailing:p),y.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=h=s=l=void 0},y.flush=function(){return void 0===l?o:v(uP())},y},uR=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},uL=function(e,t){return e>t},uB=function(e,t){return function e(t,i,r,s,a){return t===i||(null!=t&&null!=i&&(hN(t)||hN(i))?uE(t,i,r,s,e,a):t!=t&&i!=i)}(e,t)},uz=function(e,t,i){for(var r=-1,s=e.length;++r<s;){var a=e[r],o=t(a);if(null!=o&&(void 0===l?o==o&&!hU(o):i(o,l)))var l=o,h=a}return h},uF=function(e,t){var i,r;return t=dh(t,e),i=e,null==(e=(r=t).length<2?i:du(i,dA(r,0,-1)))||delete e[dd(uR(t))]},uN=function(e){return d_(e)?void 0:e},uU=dv(function(e,t){var i={};if(null==e)return i;var r=!1;t=hk(t,function(t){return t=dh(t,e),r||(r=t.length>1),t}),cx(e,dU(e),i),r&&(i=uc(i,7,uN));for(var s=t.length;s--;)uF(i,t[s]);return i}),uk=function(e,t,i,r){if(!hQ(e))return e;t=dh(t,e);for(var s=-1,a=t.length,o=a-1,l=e;null!=l&&++s<a;){var h=dd(t[s]),c=i;if("__proto__"===h||"constructor"===h||"prototype"===h)break;if(s!=o){var d=l[h];void 0===(c=r?r(d,h,l):void 0)&&(c=hQ(d)?d:cf(t[s+1])?[]:{})}cy(l,h,c),l=l[h]}return e},uV=function(e,t,i){for(var r=-1,s=t.length,a={};++r<s;){var o=t[r],l=du(e,o);i(l,o)&&uk(a,dh(o,e),l)}return a},uj=dv(function(e,t){return null==e?{}:uV(e,t,function(t,i){return null!=e&&uT(e,i,uC)})}),uG=function(e,t,i){var r=!0,s=!0;if("function"!=typeof e)throw TypeError("Expected a function");return hQ(i)&&(r="leading"in i?!!i.leading:r,s="trailing"in i?!!i.trailing:s),uO(e,t,{leading:r,maxWait:t,trailing:s})};function uH(e){for(let t of Object.keys(e))void 0===e[t]&&delete e[t];return e}function uW(e,t){return Object.setPrototypeOf(e,t),e}var uq=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().includes(" electron/"),uX=(uq&&(()=>{if(typeof window>"u")return;let e=new URLSearchParams(window.location.search).get("desktop-app-version");return e?(window.localStorage.setItem("desktop-app-version",e),e):window.localStorage.getItem("desktop-app-version")??"0.0.6"})(),!(typeof window>"u")&&window.navigator.platform.toUpperCase().includes("MAC")),uY=!(typeof window>"u")&&(/iPad|iPhone|iPod/.test(window.navigator.userAgent)||uX&&"ontouchend"in document),uQ=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1,uZ=!(typeof window>"u")&&("ontouchstart"in window||navigator.maxTouchPoints>0),uK=(()=>{if(typeof window>"u")return!1;let e=navigator.userAgent,t=navigator.vendor;return/Safari/i.test(e)&&/Apple Computer/.test(t)})(),uJ=Number((()=>{if(typeof window>"u")return null;let e=navigator.userAgent.match(/Version\/(\d+\.\d)/);return e&&e[1]})());function u$(e){return Array.isArray(e)?e:[e]}function u0(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0}function u1(e){return uX?e.metaKey:e.ctrlKey}var u2=[],u3={},u4={},u5={};function u6(e){u2.includes(e)||u2.push(e)}function u8(e){delete u3[e.pointerId];for(let t=0;t<u2.length;t++)if(u2[t].pointerId===e.pointerId){u2.splice(t,1);break}}function u9(e){if("touch"!==e.pointerType)return;let t=u3[e.pointerId];void 0===t&&(t={x:0,y:0},u3[e.pointerId]=t),t.x=e.pageX,t.y=e.pageY}function u7(e){return u3[(e.pointerId===u2[0].pointerId?u2[1]:u2[0]).pointerId]}function pe(e){u4[e.key]=!0,u5[e.key]=void 0===u5[e.key]?1:u5[e.key]+1}function pt(e){if(uX&&u4.Meta)for(let e in u4)u4[e]=!1;else u4[e.key]=!1;u5={}}var pi,pr,ps,pa,pn,po,pl,ph,pc,pd=new Promise(e=>{pl=e}),pu=new Promise(e=>{pc=e}),pp=class{modifyById(e,t){if(void 0===this[e])throw Error("not expected");{let i={...this,[e]:t};return Object.setPrototypeOf(i,pp.prototype),i}}add(e,t){return this.runOp({type:1,id:e,data:t})?.data??this}runOp(e){if(1===e.type){let t=this[e.id],i;i=void 0===t?{type:2,id:e.id}:{type:1,id:e.id,data:t};let{id:r,data:s}=e,a={...this,[r]:s};return Object.setPrototypeOf(a,pp.prototype),{data:a,actual:e,reverse:i}
3139}if(2===e.type){let{id:t}=e,i=this[t];if(void 0===i)return null;{let r={...this};return Object.setPrototypeOf(r,pp.prototype),delete r[t],{data:r,actual:e,reverse:{type:1,id:t,data:i}}}}return null}};function pf(e){if(void 0!==e.deepFreeze){e.deepFreeze(e);return}for(let t of Object.getOwnPropertyNames(e)){let i=e[t];i&&"object"==typeof i&&pf(i)}return Object.freeze(e)}var pm=class extends Error{};function pg(e){let t={...e};return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),t}function pv(e,t,i){if(void 0===e?void 0===t?(e=0,t=10):e=t-10:void 0===t&&(t=e+10),e>t){let i=e;e=t,t=i}let r=[],s=1/(i+1);for(let a=0;a<i;a++){let i=e+(t-e)*(a+.75+.5*Math.random())*s;r.push(i)}return r}function py(e){return e instanceof Uint8Array||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Float32Array||e instanceof Float64Array}var px=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,px.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pf(this[e]),e++}fillCaches0(e,t){for(let i of(this.objCaches.set(e.id,e),this.parentCaches.set(e.id,t),e.children))this.fillCaches0(i,e.id)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,this.parentCaches=new Map,this))this.fillCaches0(e,null)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}nonExistOrDescendantOf(e,t){if(!this.has(e))return!0;for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}rootAcestor(e){for(;e;){let t=this.parent(e);if(t)e=t;else break}return e}isDescendantOf(e,t){for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}data(e){return this.get(e)?.data}has(e){return void 0!==this.childrenOf(e)}get(e){return this.fillCaches(),this.objCaches.get(e)}childrenOf(e){return null===e?this:this.get(e)?.children}traverseFrom(e,t){if(null===e)this.traverse(t);else{let i=this.get(e);i&&function e(t,i){if(!0!==i(t.id,t.data))for(let r of t.children)e(r,i)}(i,t)}}traverse(e){!function e(t,i){for(let r of t)!0!==i(r.id,r.data)&&e(r.children,i)}(this,e)}totalSize(){return this.fillCaches(),this.objCaches.size}parent(e){return this.fillCaches(),this.parentCaches.get(e)}childrenArray(e){return null===e?this:this.get(e).children}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this.parent(e),r=this.childrenArray(i),s=r.findIndex(t=>t.id===e);if(s<0)throw Error("not expected");let a=r[s];return(r=[...r])[s]={...a,data:t},this.modifyArrayBy(i,r)}}modifyArrayBy(e,t){let i=e,r=t;for(;null!==i;){let e=r,t=i;if(void 0===(i=this.parent(i)))throw Error();let s=(r=this.childrenArray(i)).findIndex(e=>e.id===t);if(s<0)throw Error();(r=[...r])[s]={...r[s],children:e}}Object.setPrototypeOf(r,px.prototype);let s=r;return s.fillCaches(),s}runOp(e){switch(e.type){case 7:return this.addOp(e);case 8:return this.deleteOp(e);case 9:return this.moveOp(e)}return null}checkDuplicatedIdRec({id:e,children:t}){if(void 0!==this.get(e))return!0;for(let e of t)if(this.checkDuplicatedIdRec(e))return!0;return!1}addOp(e){let{parent:t,fi:i,id:r,data:s,children:a}=e;if(null!==t&&void 0===this.get(t)||this.checkDuplicatedIdRec(e))return null;{let o=this.childrenArray(t),l={fi:i,id:r,data:s,children:a};return(o=[...o,l]).sort((e,t)=>e.fi-t.fi),e.localIndex=o.indexOf(l),{data:this.modifyArrayBy(t,o),actual:e,reverse:{type:8,id:r}}}}deleteOp(e){let{id:t}=e;if(null===this.get(t))return null;{let i=this.parent(t);if(void 0===i)return null;let r=this.childrenArray(i),s=r.findIndex(e=>e.id===t);e.localIndex=s;let a=(r=[...r]).splice(s,1)[0];return{data:this.modifyArrayBy(i,r),actual:e,reverse:{type:7,...a,parent:i}}}}moveOp(e){let{parent:t,fi:i,id:r}=e;if(null!==t&&void 0===this.get(t))return this.deleteOp({type:8,id:r});if(null!==t){let e=t;for(;null!==e;){if(void 0===e)throw Error();if(e===r)throw new pm("cyclic tree");e=this.parent(e)}}let s=this.parent(r);if(void 0===s)return null;let a=s,o=this.childrenArray(s),l=o.findIndex(e=>e.id===r),h=(o=[...o]).splice(l,1)[0],c=this.modifyArrayBy(s,o);s=t,o=c.childrenArray(s);let d=h.fi;return(o=[...o,h={...h,fi:i}]).sort((e,t)=>
3139e.fi-t.fi),e.localIndex=o.indexOf(h),{data:c=c.modifyArrayBy(s,o),actual:e,reverse:{type:9,parent:a,fi:d,id:r}}}previous(e,t){if(null===t){let t=this.childrenArray(e);return 0===t.length?null:t[t.length-1].id}let i=null;for(let r of this.childrenArray(e)){if(r.id===t)return i;i=r.id}return null}traverseSortNext(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)+1;if(r<i.length)return i[r].id;if(t)return this.traverseSortNext(t)}}sortNext(e){let t=this.childrenArray(e);return t.length>0?t[0].id:this.traverseSortNext(e)}traverseSortPrevious(e){let t=this.childrenArray(e);return t.length>0?this.traverseSortPrevious(t[t.length-1].id):e}sortPrevious(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)-1;return r>=0?this.traverseSortPrevious(i[r].id):t}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push({...i,...e})}for(let e of(t.sort((e,t)=>(function(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0})(e.sortKey,t.sortKey)),t))delete e.sortKey;return t}getWithSortKey(e){var t=e;let i=[],r=this.get(t),s=r;if(void 0!==r){for(;t;)i.splice(0,0,r.fi),null!==(t=this.parent(t))&&(r=this.get(t));return{...s,sortKey:i}}}insertBeforeHelper(e,t,i){return this.insertAfterHelper(e,this.previous(e,t),i)}insertAfterHelper(e,t,i){let r=this.childrenArray(e);if(null===t){if(0===r.length)return pv(0,i,i);{let e=r[0].fi;return pv(e-i,e,i)}}{let s=this.get(t);if(void 0===s||this.parent(t)!==e)throw Error("illegal args");let a=r.find(e=>e.fi>s.fi);if(void 0!==a)return pv(s.fi,a.fi,i);{let e=r[r.length-1].fi;return pv(e,e+i,i)}}}};(p_||(p_={})).runOp=function(e,t){if(0!==t.type)return null;if(Array.isArray(e)){let i=t.props,r={},s=[...e],a=!1;if(i)for(let e of Object.keys(i)){let t=parseInt(e);if(isNaN(t))throw Error("wrong index");r[e]=s[t],s[t]=i[e],a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}{let i=t.props,r={},s={...e},a=!1;if(i)for(let e of Object.keys(i)){r[e]=s[e];let t=i[e];void 0===t?delete s[e]:s[e]=t,a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}};var pb=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,pb.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pf(this[e]),e++}fillCaches0(e){this.objCaches.set(e.id,e)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,Object.getOwnPropertyDescriptor(this,"objCaches").enumerable=!1,this))this.fillCaches0(e)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}data(e){return this.get(e)?.data}get(e){return this.fillCaches(),this.objCaches.get(e)}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this,r=i.findIndex(t=>t.id===e);if(r<0)throw Error("not expected");let s=i[r];return(i=[...i])[r]={...s,data:t},this.modifyArrayBy(i)}}modifyArrayBy(e){return Object.setPrototypeOf(e,pb.prototype),"u">typeof tc||e.fillCaches(),e}runOp(e){switch(e.type){case 4:return this.addOp(e);case 5:return this.deleteOp(e);case 6:return this.moveOp(e)}return null}addOp(e){let{fi:t,id:i,data:r}=e,s=this,a={fi:t,id:i,data:r};return(s=[...s,a]).sort((e,t)=>e.fi-t.fi),e.localIndex=s.indexOf(a),{data:this.modifyArrayBy(s),actual:e,reverse:{type:5,id:i}}}deleteOp(e){let{id:t}=e,i=this,r=i.findIndex(e=>e.id===t);if(-1===r)return null;e.localIndex=r;let s=(i=[...i]).splice(r,1)[0];return{data:this.modifyArrayBy(i),actual:e,reverse:{type:4,...s}}}moveOp(e){let{fi:t,id:i}=e,r=this,s=(r=[...r]).findIndex(e=>e.id===i);if(-1===s)return null;let a=r[s].fi,o={...r[s],fi:t};return r[s]=o,r.sort((e,t)=>e.fi-t.fi),e.localIndex=r.indexOf(o),{data:this.modifyArrayBy(r),actual:e,reverse:{type:6,fi:a,id:i}}}previous(e){if(null===e)return 0===this.length?null:this[this.length-1].id;let t=null;for(let i of this){if(i.id===e)return t;t=i.id}return null}insertBeforeHelper(e,t){return this.insertAfterHelper(this.previous(e),t)}insertAfterHelper(e,t){if(null===e){if(0===this.length)return pv(0,t,t);{let e=this[0].fi;return pv(e-t,e,t)}}{let i=this.get(e);if(void 0===i)throw Error("illegal args");let r=this.find(e=>e.fi>i.fi);if(void 0!==r)return pv(i.fi,r.fi,t);{let e=this[this.length-1].fi;return pv(e,e+t,t)}}}};function pw(e){return e&&"object"==typeof e&&e instanceof pM}var pS,p_,pA,pM=class{unusedFunOverridesTable(e){}runOp(e){let t=[],i=this,r=0,s={};for(;r<e.path.length;){if(t.push(i),void 0!==(i=void 0===i?void 0:i[e.path[r]])&&!pw(i))return null;r+=1}for(let[t,r]of(i=i?pg(i):new pM,Object.entries(e.props))){let e=i[t];s[t]=e,void 0===r?delete i[t]:i[t]=r}for(;r>0;){if(0===Object.keys(i).length){let s=t[r-1];s&&(i=pg(s),delete i[e.path[r-1]])}else{let s=t[r-1];if(s){let t=pg(s);t[e.path[r-1]]=i,i=t}else{let t=new pM;t[e.path[r-1]]=i,i=t}}r-=1}
3139let a=Object.setPrototypeOf(i,pM.prototype),o={...e,props:s};return{data:a,actual:e,reverse:o}}};function pE(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pC(e.data,t[r]);if(i=i||void 0!==s,void 0===s&&(s=e.data),!e.children)return{...e,id:r,data:s};{let a=pE(e.children,t);return void 0!==a?i=!0:a=e.children,{...e,id:r,data:s,children:a}}});if(i)return r}function pC(e,t){if(!pw(t))return t;if(e instanceof px){let i=pE(e,t);return void 0!==i&&Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i}if(e instanceof pb)return function(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pC(e.data,t[r]);return i=i||void 0!==s,void 0===s&&(s=e.data),{...e,id:r,data:s}});if(i)return Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r}(e,t);if(Array.isArray(e)){let i=!1,r=e.map((e,r)=>{let s=pC(e,t[r]);return i=i||void 0!==s,void 0===s&&(s=e),s});return i?(Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r):void 0}if(e instanceof pM)return pT(e,t);if(e&&"object"==typeof e){let i={},r=!1;for(let[s,a]of Object.entries(e)){let e=pC(a,t[s]);r=r||void 0!==e,void 0===e&&(e=a),i[s]=e}return r?(Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i):void 0}}function pT(e,t){if(void 0===e)return t;if(void 0===t)return e;if(!pw(t))return t;if(!pw(e))return pA.apply(e,t);let i=new Set;for(let t of Object.keys(e))i.add(t);for(let e of Object.keys(t))i.add(e);let r=new pM;for(let s of i){let i=pT(void 0===e?void 0:e[s],void 0===t?void 0:t[s]);r[s]=i}return r}function pP(e,t){return null===e?null:(e.cur[e.len]=t,e.len+=1,e)}function pD(e){e&&(e.len-=1)}(pJ=pA||(pA={})).apply=function(e,t){return pC(e,t)??e},pJ.merge=function(e,t){return pT(e,t)},pJ.filterOp=function(e,t){let i=0,r=t.path,s=e;for(;i<r.length&&void 0!==s;){if(void 0===(s=p2.zoomOnce(s,r[i])))return t;if(!pw(s))return;i+=1}if(void 0===s)return t;if(pw(s)){if(0===t.type){let e={...t.props};for(let t of Object.keys(s))delete e[t];return{...t,props:e}}{if(1!==t.type&&4!==t.type&&7!==t.type)return t;let e=pE([t],s);return e?(console.log(e),e):t}}},(p$||(p$={})).replaceProps=function(e,t){let i=p2.zoom(t,e.path);if("object"!=typeof i)return{...e,props:{}};{let t={};for(let r of Object.keys(e.props))t[r]=i[r];return{...e,props:t}}},(e=>{function t(e,t){let i=t.path;for(var r=[];;){let s;if(e instanceof pM&&0===t.type&&null===(s=e.runOp({...t,path:i.slice(r.length)}))&&(s=void 0),void 0===s&&r.length===i.length&&(s=e instanceof px||e instanceof pb||e instanceof pp?e.runOp(t):p_.runOp(e,t)),void 0!==s){if(null===s)return null;{let e=s.data;for(let t=r.length-1;t>=0;t--){let s=i[t],a=r[t];if(a instanceof px){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pb){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pp){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pM)e=Object.setPrototypeOf({...a,[s]:e},pM.prototype);else if("object"!=typeof a)return null;else if(Array.isArray(a)){if("string"==typeof s&&isNaN(s=parseInt(s)))throw Error("Invalid path");let t=e;(e=[...a])[s]=t}else e={...a,[s]:e}}return{data:e,actual:{...s.actual,path:i},reverse:{...s.reverse,path:i}}}}let a=i[r.length],o;if(e instanceof px){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else if(e instanceof pb){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else null!==e&&(o=e[a]);if(void 0===o)return null;r.push(e),e=o}}function i(e,t){for(let i=0;i<e.length&&i<t.length;i++)if(e[i]!==t[i])return!0;return!1}function r(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}e.drop=function(e,t){return{...e,path:e.path.slice(t)}},e.applySimple=function(e,i){return t(e,i)?.data??e},e.apply=t,e.pathDisjoint=i,e.pathEq=r,e.commutative=function(e,t){return i(e.path,t.path)},e.subsumed=function(e,t){return!!(0===e.type&&0===t.type&&r(e.path,t.path))&&Object.keys(e.props).every(e=>void 0!==t.props[e])}})(p0||(p0={})),(e=>{function t(e,t){var i=e;let r=[],s=[];for(let e of t)try{if(3===e.type||5===e.type&&"variables"===e.path[e.path.length-1]){let t,a,o;if(3===e.type?(t=p2.zoom(i,[...e.path,e.id]),o=p0.apply(i,{...e,type:2})):(t=p2.zoom(i,[...e.path,e.id,"value"]),o=p0.apply(i,e)),null!==o){i=o.data;let[l,h]=function(e,t){let i={cur:[],result:[],len:0};return[e=function e(t,i,r){if(t instanceof px){let s=function t(i,r,s){let a=!1,o=i.map(i=>{let o=i.id,l=r[o];if(void 0!==l&&"string"==typeof l&&(a=!0,o=l,null!==s))throw Error("not supported");let h=e(i.data,r,pP(s,o));pD(s),a=a||void 0!==h,void 0===h&&(h=i.data);let c=t(i.children,r,s);return void 0!==c?a=!0:c=i.children,{...i,id:o,data:h,children:c}});if(a)return o}(t,i,r);return void 0!==s&&Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s}if(t instanceof pb)return function(t,i,r){let s=!1,a=t.map(t=>{let a=t.id,o=i[a];if(void 0!==o&&"string"==typeof o&&(s=!0,a=o,null!==r))throw Error("not supported");let l=e(t.data,i,pP(r,a));return pD(r),s=s||void 0!==l,void 0===l&&(l=t.data),{...t,id:a,data:l}});if(s)return Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a}(t,i,r);if(Array.isArray(t)){let s=!1,a=t.map((t,a)=>{let o=e(t,i,pP(r,a));return pD(r),s=s||void 0!==o,void 0===o&&(o=t),o});return s?(Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a):void 0}if(t&&"object"==typeof t&&!py(t)){let s={},a=!1;for(let[o,l]of Object.entries(t))if("name"!==o&&"variableId"!==o){let t=i[o];if("string"==typeof t){if(null!==r)throw Error("not supported");a=!0,o=t}let h=e(l,i,pP(r,o));pD(r),a=a||void 0!==h,void 0===h&&(h=l),s[o]=h}else s[o]=l;return a?(Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s):void 0}{var s;if("string"!=typeof t)return;let e=i[t];return void 0!==e&&(s=r,null!==s&&s.result.push(s.cur.slice(0,s.len))),e}}(e,t,i)??e,i.result]}(i,{[e.id]:t});i=l;for(let o=0;o<h.length;o++){let l=h[o],c=l.pop();if("number"==typeof c){let r=[c];for(let e=o+1;e<h.length;e++){let t=h[e],i=t[t.length-1];if("number"==typeof i&&p2.equal(l,t.slice(0,t.length-1)))r.push(i),h.splice(e,1);else break}let s=p2.zoom(i,l);a=s.map((t,i)=>r.includes(i)?e.id:t),t=s,c=l.pop()}else{if("alphaOverride"===c||"alpha"===c){let e=t/=100,r=p2.zoom(i,l.slice(0,l.length-2)),s=r.layers.map(t=>
3139t.id===l[l.length-1]?{...t,data:{...t.data,[c]:e}}:t);Object.setPrototypeOf(s,Object.getPrototypeOf(r.layers)),r.layers=s}a=e.id}r.push({type:0,path:l,props:{[c]:t}}),s.push({type:0,path:l,props:{[c]:a}})}s.push(o.reverse),r.push(o.actual)}}else{let t=p0.apply(i,e);null!==t&&(r.push(t.actual),i=t.data,s.push(t.reverse))}}catch(e){if(e instanceof pm)return null;throw e}return{data:i,actual:r,reverse:s.reverse()}}e.empty=function(){return[]},e.removePrefix=function(e,t){let i=[];for(let r of e){let[e,...s]=r.path;e===t&&i.push({...r,path:s})}return i},e.addPrefix=function(e,t){return e.map(e=>({...e,path:[t,...e.path]}))},e.concat=function(e,t){return[...e,...t]},e.compress=function(e,t){return[...e.filter(e=>!t.some(t=>p0.subsumed(e,t))),...t]},e.commutative=function(e,t){return e.every(e=>t.every(t=>p0.commutative(e,t)))},e.applyAll=function(e,i){for(let r of i){let i=t(e,r);null!==i&&(e=i.data)}return e},e.apply=t})(p1||(p1={}));var pI=Symbol(),pO=Symbol(),pR=Symbol(),pL=class{reportOp(e,t,i=[]){let r=this;if(null!==t){for(r._current=t.data;!(r instanceof pG);){let e=r._path,t=r._current;if(""!==e&&i.splice(0,0,e),null===(r=r._parent))return;r.update(e,t)}r.push(i,e,t.actual,t.reverse)}}deleteChildren(e){if(this._children){let t=this._children[e];if(t){let i=t[pR];i&&i(),delete this._children[e]}}}},pB=class extends pL{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){if(Array.isArray(this._current)){if("string"==typeof e&&isNaN(e=parseInt(e)))throw Error("Invalid path");this._current=[...this._current],this._current[e]=t}else this._current={...this._current,[e]:t}}runOp(e){this.reportOp(e,p_.runOp(this._current,e),e.path)}},pz=class extends pL{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){this._current={...this._current,[e]:t},Object.setPrototypeOf(this._current,pp.prototype)}runOp(e){this.reportOp(e,this._current.runOp(e))}},pF={get(e,t){if(t===pR)return()=>{e._parent=null};if(t===pI)return e._current;if(t===pO)return e;let{_current:i,_children:r}=e;if("push"===t&&Array.isArray(i))throw Error("not supported to expand array");let s=void 0===r?void 0:r[t];if(void 0!==s)return s;let a=i[t],o=pH(e,t,a);return o!==a?(void 0===r&&(r={},e._children=r),r[t]=o,o):a},has:(e,t)=>t in e._current,ownKeys:e=>Reflect.ownKeys(e._current),defineProperty(){throw Error("not supported")},getPrototypeOf:e=>Object.getPrototypeOf(e._current),setPrototypeOf(){throw Error("not supported")},getOwnPropertyDescriptor(e,t){let i=e._current,r=Reflect.getOwnPropertyDescriptor(i,t);return r&&{writable:!0,configurable:!0,enumerable:r.enumerable,value:i[t]}}},pN={...pF,set(e,t,i){let r={type:0,props:{[t]:pX(i)??i}};return e.deleteChildren(t),e.runOp(r),!0},deleteProperty:(e,t)=>(e.deleteChildren(t),e.runOp({type:0,props:{[t]:void 0}}),!0)},pU={...pF,set(e,t,i){return void 0===i?this.deleteProperty(e,t):(e.deleteChildren(t),e.runOp({type:1,id:t,data:i})),!0},deleteProperty:(e,t)=>(e.runOp({type:2,id:t}),!0)},pk=class extends pL{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pR]=()=>{this._parent=null}}unproxy(){return this._current}update(e,t){this._current=this._current.modifyById(e,t)}runOp(e){this.reportOp(e,this._current.runOp(e))}randomId(){return this._current.randomId()}isDescendantOf(e,t){return this._current.isDescendantOf(e,t)}childrenOf(e){return this._current.childrenOf(e)}traverse(e){return this._current.traverse(e)}get(e){return this._current.get(e)}parent(e){return this._current.parent(e)}traverse(e){this._current.traverse((t,i)=>{e(t,this.data(t))})}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pH(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}add(e,t,i,r,s){this.runOp({type:7,parent:e,fi:t,id:i,data:r,children:s})}move(e,t,i){this.runOp({type:9,parent:e,fi:t,id:i})}insertAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}insertBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}moveAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}moveBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}delete(e){this.deleteChildren(e),this.runOp({type:8,id:e})}sortNext(e){return this._current.sortNext(e)}sortPrevious(e){return this._current.sortPrevious(e)}getAllSorted(e){return this._current.getAllSorted(e)}},pV=class extends pL{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pR]=()=>{this._parent=null}}unproxy(){return this._current}get length(){return this._current.length}forEach(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id,r=this._current[i].fi;e(this.data(this._current[i].id),t,r)}}find(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id;if(e(this.data(t),t))return this.get(t)}}update(e,t){this._current=this._current.modifyById(e,t)}randomId(){return this._current.randomId()}get(e){return{...this._current.get(e),data:this.data(e)}}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pH(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}runOp(e){this.reportOp(e,this._current.runOp(e))}add(e,t,i){this.runOp({type:4,fi:e,id:t,data:i})}move(e,t){this.runOp({type:6,fi:e,id:t})}insertAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}insertBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}moveAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}moveBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}delete(e){this.deleteChildren(e),this.runOp({type:5,id:e})}};function pj(e,t,i){if(e.length>0){let r=e[e.length-1];if(0===r.type&&0===t.type&&p2.equal(r.path,i)){Object.assign(r.props,t.props);return}}e.push({...t,path:i})}var pG=class extends pL{constructor(e){super(),this.ts=[],this.actual=[],this.reverse=[],this._current=e}update(e,t){if(""!==e)throw Error("");this._current=t}push(e,t,i,r){pj(this.ts,t,e),pj(this.actual,i,e),pj(this.reverse,r,e)}result(){return{data:this._current,ts:this.ts,actual:this.actual,reverse:this.reverse.reverse()}}};function pH(e,t,i){return i instanceof px?new pk(e,t,i):i instanceof pb?new pV(e,t,i):i instanceof pp?new Proxy(new pz(e,t,i),pU):null!==i&&"object"==typeof i?py(i)?i:new Proxy(new pB(e,t,i),pN):i}function pW(e){let t=new pG(e);return[pH(t,"",e),t]}function pq(e,t){let[i,r]=pW(e);return t(i),r.result()}function pX(e){return e instanceof pk||e instanceof pV?e._current:null!==e&&"object"==typeof e?e[pI]:e}function pY(e,t){let i=[];if(!(t.length<=e.length))return null;for(var r=0;r<t.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e=>{function t(e,t){return(e instanceof px||e instanceof pk)&&"string"==typeof t||(e instanceof pb||e instanceof pV)&&"string"==typeof t?e.data(t):"number"==typeof t&&Array.isArray(e)||"string"==typeof t&&"object"==typeof e&&null!==e?e[t]:void 0}function i(e,i,r=0){for(;r<i.length&&void 0!==e;)e=t(e,i[r]),r+=1;return e}e.equal=function(e,t){if(t.length!==e.length)return!1;for(var i=0;i<e.length;){if(e[i]!==t[i])return!1;i+=1}return!0},e.removeOverridden=function(e,t,r){let s=i(r,e);if(void 0===s||"object"!=typeof s||null===s)return t;{let e={...t};
3139return Object.keys(s).forEach(t=>{delete e[t]}),e}},e.zoomOnce=t,e.zoom=i})(p2||(p2={}));var pQ=class{},pZ=class extends pQ{constructor(e){super(),this.id=e}},pK=class extends pQ{constructor(e){super(),this.data=e}};try{p3=new TextDecoder}catch{}var pJ,p$,p0,p1,p2,p3,p4,p5,p6,p8,p9,p7,fe,ft=0,fi=[],fr=fi,fs=0,fa={},fn=0,fo=0,fl=[],fh={useRecords:!1,mapsAsObjects:!0},fc=class{},fd=new fc;fd.name="MessagePack 0xC1";var fu=!1,fp=class{constructor(e){e&&(!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0)),Object.assign(this,e)}unpack(e,t){if(p4)return fN(()=>(fU(),this?this.unpack(e,t):fp.prototype.unpack.call(fh,e,t)));p5=t>-1?t:e.length,ft=0,fs=0,fo=0,p8=null,fr=fi,p9=null,p4=e;try{fe=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){throw p4=null,e instanceof Uint8Array?t:Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof fp){if(fa=this,this.structures)return p6=this.structures,ff();(!p6||p6.length>0)&&(p6=[])}else fa=fh,(!p6||p6.length>0)&&(p6=[]);return ff()}unpackMultiple(e,t){let i,r=0;try{fu=!0;let s=e.length,a=this?this.unpack(e,s):fV.unpack(e,s);if(t){for(t(a);ft<s;)if(r=ft,!1===t(ff()))return}else{for(i=[a];ft<s;)r=ft,i.push(ff());return i}}catch(e){throw e.lastPosition=r,e.values=i,e}finally{fu=!1,fU()}}_mergeStructures(e,t){e=e||[];for(let t=0,i=e.length;t<i;t++){let i=e[t];i&&(i.isShared=!0,t>=32&&(i.highByte=t-32>>5))}for(let i in e.sharedLength=e.length,t||[])if(i>=0){let r=e[i],s=t[i];s&&(r&&((e.restoreStructures||(e.restoreStructures=[]))[i]=r),e[i]=s)}return this.structures=e}decode(e,t){return this.unpack(e,t)}};function ff(){try{if(!fa.trusted&&!fu){let e=p6.sharedLength||0;e<p6.length&&(p6.length=e)}let e=fg();if(ft==p5)p6.restoreStructures&&fm(),p6=null,p4=null,p7&&(p7=null);else if(ft>p5){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}else if(!fu)throw Error("Data read, but end of buffer not reached");return e}catch(e){throw p6.restoreStructures&&fm(),fU(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function fm(){for(let e in p6.restoreStructures)p6[e]=p6.restoreStructures[e];p6.restoreStructures=null}function fg(){let e=p4[ft++];if(e<160){if(e<128){if(e<64)return e;{let t=p6[63&e]||fa.getStructures&&fb()[63&e];return t?(t.read||(t.read=fy(t,63&e)),t.read()):e}}if(e<144){if(e-=128,fa.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fL()]=fg();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fg(),fg());return t}}{let t=Array(e-=144);for(let i=0;i<e;i++)t[i]=fg();return t}}if(e<192){let t=e-160;if(fo>=ft)return p8.slice(ft-fn,(ft+=t)-fn);if(0==fo&&p5<140){let e=t<16?fD(t):fP(t);if(null!=e)return e}return fw(t)}{let t;switch(e){case 192:return null;case 193:return p9?(t=fg())>0?p9[1].slice(p9.position1,p9.position1+=t):p9[0].slice(p9.position0,p9.position0-=t):fd;case 194:return!1;case 195:return!0;case 196:return fI(p4[ft++]);case 197:return t=fe.getUint16(ft),ft+=2,fI(t);case 198:return t=fe.getUint32(ft),ft+=4,fI(t);case 199:return fO(p4[ft++]);case 200:return t=fe.getUint16(ft),ft+=2,fO(t);case 201:return t=fe.getUint32(ft),ft+=4,fO(t);case 202:if(t=fe.getFloat32(ft),fa.useFloat32>2){let e=fk[(127&p4[ft])<<1|p4[ft+1]>>7];return ft+=4,(e*t+(t>0?.5:-.5)>>0)/e}return ft+=4,t;case 203:return t=fe.getFloat64(ft),ft+=8,t;case 204:return p4[ft++];case 205:return t=fe.getUint16(ft),ft+=2,t;case 206:return t=fe.getUint32(ft),ft+=4,t;case 207:return t=fa.int64AsNumber?4294967296*fe.getUint32(ft)+fe.getUint32(ft+4):fe.getBigUint64(ft),ft+=8,t;case 208:return fe.getInt8(ft++);case 209:return t=fe.getInt16(ft),ft+=2,t;case 210:return t=fe.getInt32(ft),ft+=4,t;case 211:return t=fa.int64AsNumber?4294967296*fe.getInt32(ft)+fe.getUint32(ft+4):fe.getBigInt64(ft),ft+=8,t;case 212:if(114==(t=p4[ft++]))return fB(63&p4[ft++]);{let e=fl[t];if(e)return e.read?(ft++,e.read(fg())):e.noBuffer?(ft++,e()):e(p4.subarray(ft,++ft));throw Error("Unknown extension "+t)}case 213:return 114==(t=p4[ft])?(ft++,fB(63&p4[ft++],p4[ft++])):fO(2);case 214:return fO(4);case 215:return fO(8);case 216:return fO(16);case 217:return t=p4[ft++],fo>=ft?p8.slice(ft-fn,(ft+=t)-fn):fS(t);case 218:return t=fe.getUint16(ft),ft+=2,fo>=ft?p8.slice(ft-fn,(ft+=t)-fn):f_(t);case 219:return t=fe.getUint32(ft),ft+=4,fo>=ft?p8.slice(ft-fn,(ft+=t)-fn):fA(t);case 220:return t=fe.getUint16(ft),ft+=2,fE(t);case 221:return t=fe.getUint32(ft),ft+=4,fE(t);case 222:return t=fe.getUint16(ft),ft+=2,fC(t);case 223:return t=fe.getUint32(ft),ft+=4,fC(t);default:if(e>=224)return e-256;if(void 0===e){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}throw Error("Unknown MessagePack token "+e)}}}var fv=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function fy(e,t){function i(){if(i.count++>2){let i=e.read=Function("r","return function(){return {"+e.map(e=>fv.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}}")(fg);return 0===e.highByte&&(e.read=fx(t,e.read)),i()}let r={};for(let t=0,i=e.length;t<i;t++)r[e[t]]=fg();return r}return i.count=0,0===e.highByte?fx(t,i):i}var fx=(e,t)=>function(){let i=p4[ft++];if(0===i)return t();let r=e<32?-(e+(i<<5)):e+(i<<5),s=p6[r]||fb()[r];if(!s)throw Error("Record id is not defined for "+r);return s.read||(s.read=fy(s,e)),s.read()};function fb(){let e=fN(()=>
3139(p4=null,fa.getStructures()));return p6=fa._mergeStructures(e,p6)}var fw=fM,fS=fM,f_=fM,fA=fM;function fM(e){let t;if(e<16&&(t=fD(e)))return t;if(e>64&&p3)return p3.decode(p4.subarray(ft,ft+=e));let i=ft+e,r=[];for(t="";ft<i;){let e=p4[ft++];if((128&e)==0)r.push(e);else if((224&e)==192){let t=63&p4[ft++];r.push((31&e)<<6|t)}else if((240&e)==224){let t=63&p4[ft++],i=63&p4[ft++];r.push((31&e)<<12|t<<6|i)}else if((248&e)==240){let t=(7&e)<<18|(63&p4[ft++])<<12|(63&p4[ft++])<<6|63&p4[ft++];t>65535&&(t-=65536,r.push(t>>>10&1023|55296),t=56320|1023&t),r.push(t)}else r.push(e);r.length>=4096&&(t+=fT.apply(String,r),r.length=0)}return r.length>0&&(t+=fT.apply(String,r)),t}function fE(e){let t=Array(e);for(let i=0;i<e;i++)t[i]=fg();return t}function fC(e){if(fa.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fL()]=fg();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fg(),fg());return t}}var fT=String.fromCharCode;function fP(e){let t=ft,i=Array(e);for(let r=0;r<e;r++){let e=p4[ft++];if((128&e)>0){ft=t;return}i[r]=e}return fT.apply(String,i)}function fD(e){if(e<4){if(e<2){if(0===e)return"";{let e=p4[ft++];if((128&e)>1){ft-=1;return}return fT(e)}}{let t=p4[ft++],i=p4[ft++];if((128&t)>0||(128&i)>0){ft-=2;return}if(e<3)return fT(t,i);let r=p4[ft++];if((128&r)>0){ft-=3;return}return fT(t,i,r)}}{let t=p4[ft++],i=p4[ft++],r=p4[ft++],s=p4[ft++];if((128&t)>0||(128&i)>0||(128&r)>0||(128&s)>0){ft-=4;return}if(e<6){if(4===e)return fT(t,i,r,s);{let e=p4[ft++];if((128&e)>0){ft-=5;return}return fT(t,i,r,s,e)}}if(e<8){let a=p4[ft++],o=p4[ft++];if((128&a)>0||(128&o)>0){ft-=6;return}if(e<7)return fT(t,i,r,s,a,o);let l=p4[ft++];if((128&l)>0){ft-=7;return}return fT(t,i,r,s,a,o,l)}{let a=p4[ft++],o=p4[ft++],l=p4[ft++],h=p4[ft++];if((128&a)>0||(128&o)>0||(128&l)>0||(128&h)>0){ft-=8;return}if(e<10){if(8===e)return fT(t,i,r,s,a,o,l,h);{let e=p4[ft++];if((128&e)>0){ft-=9;return}return fT(t,i,r,s,a,o,l,h,e)}}if(e<12){let c=p4[ft++],d=p4[ft++];if((128&c)>0||(128&d)>0){ft-=10;return}if(e<11)return fT(t,i,r,s,a,o,l,h,c,d);let u=p4[ft++];if((128&u)>0){ft-=11;return}return fT(t,i,r,s,a,o,l,h,c,d,u)}{let c=p4[ft++],d=p4[ft++],u=p4[ft++],p=p4[ft++];if((128&c)>0||(128&d)>0||(128&u)>0||(128&p)>0){ft-=12;return}if(e<14){if(12===e)return fT(t,i,r,s,a,o,l,h,c,d,u,p);{let e=p4[ft++];if((128&e)>0){ft-=13;return}return fT(t,i,r,s,a,o,l,h,c,d,u,p,e)}}{let f=p4[ft++],m=p4[ft++];if((128&f)>0||(128&m)>0){ft-=14;return}if(e<15)return fT(t,i,r,s,a,o,l,h,c,d,u,p,f,m);let g=p4[ft++];if((128&g)>0){ft-=15;return}return fT(t,i,r,s,a,o,l,h,c,d,u,p,f,m,g)}}}}}function fI(e){return fa.copyBuffers?Uint8Array.prototype.slice.call(p4,ft,ft+=e):p4.subarray(ft,ft+=e)}function fO(e){let t=p4[ft++];if(fl[t])return fl[t](p4.subarray(ft,ft+=e));throw Error("Unknown extension type "+t)}var fR=Array(4096);function fL(){let e=p4[ft++];if(!(e>=160)||!(e<192))return ft--,fg();if(e-=160,fo>=ft)return p8.slice(ft-fn,(ft+=e)-fn);if(!(0==fo&&p5<180))return fw(e);let t=(e<<5^(e>1?fe.getUint16(ft):e>0?p4[ft]:0))&4095,i=fR[t],r=ft,s=ft+e-3,a,o=0;if(i&&i.bytes==e){for(;r<s;){if((a=fe.getUint32(r))!=i[o++]){r=1879048192;break}r+=4}for(s+=3;r<s;)if((a=p4[r++])!=i[o++]){r=1879048192;break}if(r===s)return ft=r,i.string;s-=3,r=ft}for(i=[],fR[t]=i,i.bytes=e;r<s;)a=fe.getUint32(r),i.push(a),r+=4;for(s+=3;r<s;)a=p4[r++],i.push(a);let l=e<16?fD(e):fP(e);return null!=l?i.string=l:i.string=fw(e)}var fB=(e,t)=>{var i=fg();let r=e;void 0!==t&&(e=e<32?-((t<<5)+e):(t<<5)+e,i.highByte=t);let s=p6[e];return s&&s.isShared&&((p6.restoreStructures||(p6.restoreStructures=[]))[e]=s),p6[e]=i,i.read=fy(i,r),i.read()},fz="object"==typeof self?self:global;fl[0]=()=>{},fl[0].noBuffer=!0,fl[101]=()=>{let e=fg();return(fz[e[0]]||Error)(e[1])},fl[105]=e=>{let t=fe.getUint32(ft-4);p7||(p7=new Map);let i=p4[ft],r,s={target:r=i>=144&&i<160||220==i||221==i?[]:{}};p7.set(t,s);let a=fg();return s.used?Object.assign(r,a):(s.target=a,a)},fl[112]=e=>{let t=fe.getUint32(ft-4),i=p7.get(t);return i.used=!0,i.target},fl[115]=()=>new Set(fg());var fF=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(e=>e+"Array");function fN(e){let t=p5,i=ft,r=fs,s=fn,a=fo,o=p8,l=fr,h=p7,c=p9,d=new Uint8Array(p4.slice(0,p5)),u=p6,p=p6.slice(0,p6.length),f=fa,m=fu,g=e();return p5=t,ft=i,fs=r,fn=s,fo=a,p8=o,fr=l,p7=h,p9=c,p4=d,fu=m,(p6=u).splice(0,p6.length,...p),fa=f,fe=new DataView(p4.buffer,p4.byteOffset,p4.byteLength),g}function fU(){p4=null,p7=null,p6=null}fl[116]=e=>{let t=e[0],i=fF[t];
3139if(!i)throw Error("Could not find typed array for code "+t);return new fz[i](Uint8Array.prototype.slice.call(e,1).buffer)},fl[120]=()=>{let e=fg();return new RegExp(e[0],e[1])},fl[98]=e=>{let t=(e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3],i=ft;ft+=t-4,(p9=[fg(),fg()]).position0=0,p9.position1=0;let r=ft;ft=i;try{return fg()}finally{ft=r}},fl[255]=e=>new Date(4==e.length?(16777216*e[0]+(e[1]<<16)+(e[2]<<8)+e[3])*1e3:8==e.length?((e[0]<<22)+(e[1]<<14)+(e[2]<<6)+(e[3]>>2))/1e6+((3&e[3])*4294967296+16777216*e[4]+(e[5]<<16)+(e[6]<<8)+e[7])*1e3:12==e.length?((e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3])/1e6+((128&e[4]?-281474976710656:0)+1099511627776*e[6]+4294967296*e[7]+16777216*e[8]+(e[9]<<16)+(e[10]<<8)+e[11])*1e3:"invalid");var fk=Array(147);for(let e=0;e<256;e++)fk[e]=+("1e"+Math.floor(45.15-.30103*e));var fV=new fp({useRecords:!1});new Uint8Array((fV.unpack,fV.unpackMultiple,fV.unpack,new Float32Array(1)).buffer,0,4);try{fj=new TextEncoder}catch{}var fj,fG,fH,fW,fq,fX,fY="u">typeof td,fQ=fY?td.allocUnsafeSlow:Uint8Array,fZ=fY?td:Uint8Array,fK=fY?4294967296:2144337920,fJ=0,f$=null,f0=/[\u0080-\uFFFF]/,f1=Symbol("record-id"),f2=class extends fp{constructor(e){super(e),this.offset=0;let t,i,r,s,a,o=0,l=fZ.prototype.utf8Write?function(e,t,i){return fW.utf8Write(e,t,i)}:!!fj&&!!fj.encodeInto&&function(e,t){return fj.encodeInto(e,fW.subarray(t)).written},h=this;e||(e={});let c=e&&e.sequential,d=e.structures||e.saveStructures,u=e.maxSharedStructures;if(null==u&&(u=d?32:0),u>8160)throw Error("Maximum maxSharedStructure is 8160");let p=e.maxOwnStructures;null==p&&(p=d?32:64),c&&!e.saveStructures&&(this.structures=[]);let f=u>32||p+u>64,m=u+64,g=u+p+64;if(g>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let v=[],y=0,x=0;this.pack=this.encode=function(e,l){if(fW||(fq=new DataView((fW=new fQ(8192)).buffer,0,8192),fJ=0),(fX=fW.length-10)-fJ<2048?(fq=new DataView((fW=new fQ(fW.length)).buffer,0,fW.length),fX=fW.length-10,fJ=0):fJ=fJ+7&2147483640,t=fJ,a=h.structuredClone?new Map:null,h.bundleStrings?(f$=["",""],fW[fJ++]=214,fW[fJ++]=98,f$.position=fJ-t,fJ+=4):f$=null,i=h.structures){i.uninitialized&&(i=h._mergeStructures(h.getStructures()));let e=i.sharedLength||0;if(e>u)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+i.sharedLength);if(!i.transitions){i.transitions=Object.create(null);for(let t=0;t<e;t++){let e=i[t];if(!e)continue;let r,s=i.transitions;for(let t=0,i=e.length;t<i;t++){let i=e[t];(r=s[i])||(r=s[i]=Object.create(null)),s=r}s[f1]=t+64}o=e}c||(i.nextId=e+64)}r&&(r=!1),s=i||[];try{if(b(e),f$){fq.setUint32(f$.position+t,fJ-f$.position-t);let e=f$;f$=null,b(e[0]),b(e[1])}if(h.offset=fJ,a&&a.idsToInsert){(fJ+=6*a.idsToInsert.length)>fX&&S(fJ),h.offset=fJ;let e=function(e,t){let i,r=6*t.length,s=e.length-r;for(t.sort((e,t)=>e.offset>t.offset?1:-1);i=t.pop();){let t=i.offset,a=i.id;e.copyWithin(t+r,t,s);let o=t+(r-=6);e[o++]=214,e[o++]=105,e[o++]=a>>24,e[o++]=a>>16&255,e[o++]=a>>8&255,e[o++]=255&a,s=t}return e}(fW.subarray(t,fJ),a.idsToInsert);return a=null,e}return l&mt?(fW.start=t,fW.end=fJ,fW):fW.subarray(t,fJ)}finally{if(i){if(x<10&&x++,y>1e4)i.transitions=null,x=0,y=0,v.length>0&&(v=[]);else if(v.length>0&&!c){for(let e=0,t=v.length;e<t;e++)v[e][f1]=0;v=[]}if(r&&h.saveStructures){let r=i.sharedLength||u;i.length>r&&(i=i.slice(0,r));let s=fW.subarray(t,fJ);return!1===h.saveStructures(i,o)?(h._mergeStructures(h.getStructures()),h.pack(e)):(o=r,s)}}l&mi&&(fJ=t)}};let b=e=>{fJ>fX&&(fW=S(fJ));var i,r=typeof e;if("string"===r){let t,r=e.length;if(f$&&r>=8&&r<4096){let t=f0.test(e);f$[t?0:1]+=e,fW[fJ++]=193,b(t?-r:r);return}t=r<32?1:r<256?2:r<65536?3:5;let s=3*r;if(fJ+s>fX&&(fW=S(fJ+s)),r<64||!l){let s,a,o,l=fJ+t;for(s=0;s<r;s++)(a=e.charCodeAt(s))<128?fW[l++]=a:(a<2048?fW[l++]=a>>6|192:((64512&a)==55296&&(64512&(o=e.charCodeAt(s+1)))==56320?(a=65536+((1023&a)<<10)+(1023&o),s++,fW[l++]=a>>18|240,fW[l++]=a>>12&63|128):fW[l++]=a>>12|224,fW[l++]=a>>6&63|128),fW[l++]=63&a|128);i=l-fJ-t}else i=l(e,fJ+t,s);i<32?fW[fJ++]=160|i:i<256?(t<2&&fW.copyWithin(fJ+2,fJ+1,fJ+1+i),fW[fJ++]=217,fW[fJ++]=i):i<65536?(t<3&&fW.copyWithin(fJ+3,fJ+2,fJ+2+i),fW[fJ++]=218,fW[fJ++
3139]=i>>8,fW[fJ++]=255&i):(t<5&&fW.copyWithin(fJ+5,fJ+3,fJ+3+i),fW[fJ++]=219,fq.setUint32(fJ,i),fJ+=4),fJ+=i}else if("number"===r){if(e>>>0===e)e<64?fW[fJ++]=e:e<256?(fW[fJ++]=204,fW[fJ++]=e):e<65536?(fW[fJ++]=205,fW[fJ++]=e>>8,fW[fJ++]=255&e):(fW[fJ++]=206,fq.setUint32(fJ,e),fJ+=4);else if(e>>0===e)e>=-32?fW[fJ++]=256+e:e>=-128?(fW[fJ++]=208,fW[fJ++]=e+256):e>=-32768?(fW[fJ++]=209,fq.setInt16(fJ,e),fJ+=2):(fW[fJ++]=210,fq.setInt32(fJ,e),fJ+=4);else{let t;if((t=this.useFloat32)>0&&e<4294967296&&e>=-2147483648){let i;if(fW[fJ++]=202,fq.setFloat32(fJ,e),t<4||(i=e*fk[(127&fW[fJ])<<1|fW[fJ+1]>>7])>>0===i){fJ+=4;return}fJ--}fW[fJ++]=203,fq.setFloat64(fJ,e),fJ+=8}}else if("object"===r){if(e){if(a){let i=a.get(e);if(i){if(!i.id){let e=a.idsToInsert||(a.idsToInsert=[]);i.id=e.push(i)}fW[fJ++]=214,fW[fJ++]=112,fq.setUint32(fJ,i.id),fJ+=4;return}a.set(e,{offset:fJ-t})}let r=e.constructor;if(r===Object)w(e,!0);else if(r===Array){(i=e.length)<16?fW[fJ++]=144|i:i<65536?(fW[fJ++]=220,fW[fJ++]=i>>8,fW[fJ++]=255&i):(fW[fJ++]=221,fq.setUint32(fJ,i),fJ+=4);for(let t=0;t<i;t++)b(e[t])}else if(r===Map)for(let[t,r]of((i=e.size)<16?fW[fJ++]=128|i:i<65536?(fW[fJ++]=222,fW[fJ++]=i>>8,fW[fJ++]=255&i):(fW[fJ++]=223,fq.setUint32(fJ,i),fJ+=4),e))b(t),b(r);else{for(let t=0,i=fG.length;t<i;t++)if(e instanceof fH[t]){let i,r=fG[t];if(r.write){r.type&&(fW[fJ++]=212,fW[fJ++]=r.type,fW[fJ++]=0),b(r.write.call(this,e));return}let s=fW,a=fq,o=fJ;fW=null;try{i=r.pack.call(this,e,e=>(fW=s,s=null,(fJ+=e)>fX&&S(fJ),{target:fW,targetView:fq,position:fJ-e}),b)}finally{s&&(fW=s,fq=a,fJ=o,fX=fW.length-10)}i&&(i.length+fJ>fX&&S(i.length+fJ),fJ=function(e,t,i,r){let s=e.length;switch(s){case 1:t[i++]=212;break;case 2:t[i++]=213;break;case 4:t[i++]=214;break;case 8:t[i++]=215;break;case 16:t[i++]=216;break;default:s<256?(t[i++]=199,t[i++]=s):(s<65536?(t[i++]=200,t[i++]=s>>8):(t[i++]=201,t[i++]=s>>24,t[i++]=s>>16&255,t[i++]=s>>8&255),t[i++]=255&s)}return t[i++]=r,t.set(e,i),i+=s}(i,fW,fJ,r.type));return}w(e,!e.hasOwnProperty)}}else fW[fJ++]=192}else if("boolean"===r)fW[fJ++]=e?195:194;else if("bigint"===r){if(e<BigInt(1)<<BigInt(63)&&e>=-(BigInt(1)<<BigInt(63)))fW[fJ++]=211,fq.setBigInt64(fJ,e);else if(e<BigInt(1)<<BigInt(64)&&e>0)fW[fJ++]=207,fq.setBigUint64(fJ,e);else if(this.largeBigIntToFloat)fW[fJ++]=203,fq.setFloat64(fJ,Number(e));else throw RangeError(e+" was too large to fit in MessagePack 64-bit integer format, set largeBigIntToFloat to convert to float-64");fJ+=8}else if("undefined"===r)this.encodeUndefinedAsNil?fW[fJ++]=192:(fW[fJ++]=212,fW[fJ++]=0,fW[fJ++]=0);else if("function"===r)b(this.writeFunction&&this.writeFunction());else throw Error("Unknown type: "+r)},w=!1===this.useRecords?this.variableMapSize?e=>{let t,i=Object.keys(e),r=i.length;r<16?fW[fJ++]=128|r:r<65536?(fW[fJ++]=222,fW[fJ++]=r>>8,fW[fJ++]=255&r):(fW[fJ++]=223,fq.setUint32(fJ,r),fJ+=4);for(let s=0;s<r;s++)b(t=i[s]),b(e[t])}:(e,i)=>{fW[fJ++]=222;let r=fJ-t;fJ+=2;let s=0;for(let t in e)(i||e.hasOwnProperty(t))&&(b(t),b(e[t]),s++);fW[r+++t]=s>>8,fW[r+t]=255&s}:e=>{let t=Object.keys(e),i,a=s.transitions||(s.transitions=Object.create(null)),o=0;for(let e=0,r=t.length;e<r;e++){let r=t[e];(i=a[r])||(i=a[r]=Object.create(null),o++),a=i}let l=a[f1];if(l)l>=96&&f?(fW[fJ++]=(31&(l-=96))+96,fW[fJ++]=l>>5):fW[fJ++]=l;else{(l=s.nextId)||(l=64),l<m&&this.shouldShareStructure&&!this.shouldShareStructure(t)?((l=s.nextOwnId)<g||(l=m),s.nextOwnId=l+1):(l>=g&&(l=m),s.nextId=l+1);let e=t.highByte=l>=96&&f?l-96>>5:-1;a[f1]=l,s[l-64]=t,l<m?(t.isShared=!0,s.sharedLength=l-63,r=!0,e>=0?(fW[fJ++]=(31&l)+96,fW[fJ++]=e):fW[fJ++]=l):(e>=0?(fW[fJ++]=213,fW[fJ++]=114,fW[fJ++]=(31&l)+96,fW[fJ++]=e):(fW[fJ++]=212,fW[fJ++]=114,fW[fJ++]=l),o&&(y+=x*o),v.length>=p&&(v.shift()[f1]=0),v.push(a),b(t))}for(let i=0,r=t.length;i<r;i++)b(e[t[i]])},S=e=>{let i;if(e>16777216){if(e-t>fK)throw Error("Packed buffer would be larger than maximum buffer size");i=Math.min(fK,4096*Math.round(Math.max((e-t)*(e>67108864?1.25:2),4194304)/4096))}else i=(Math.max(e-t<<2,fW.length-1)>>12)+1<<12;let r=new fQ(i);return fq=new DataView(r.buffer,0,i),fW.copy?fW.copy(r,0,t,e):r.set(fW.slice(t,e)),fJ-=t,t=0,fX=r.length-10,fW=r}}useBuffer(e){fq=new DataView((fW=e).buffer,fW.byteOffset,fW.byteLength),fJ=0}};function f3(e,t,i,r){let s=e.byteLength;if(s+1<256){var{target:a,position:o}=i(4+s);a[o++]=199,a[o++]=s+1}else if(s+1<65536){var{target:a,position:o}=i(5+s);a[o++]=200,a[o++]=s+1>>8,a[o++]=s+1&255}else{var{target:a,position:o,targetView:l}=i(7+s);a[o++]=201,l.setUint32(o,s+1),o+=4}a[o++]=116,a[o++]=t,a.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),o)}function f4(e,t){let i=e.byteLength;if(i<256){var r,s,{target:r,position:s}=t(i+2);
3139r[s++]=196,r[s++]=i}else if(i<65536){var{target:r,position:s}=t(i+3);r[s++]=197,r[s++]=i>>8,r[s++]=255&i}else{var{target:r,position:s,targetView:a}=t(i+5);r[s++]=198,a.setUint32(s,i),s+=4}r.set(e,s)}function f5(e){if(e.Class){if(!e.pack&&!e.write)throw Error("Extension has no pack or write function");if(e.pack&&!e.type)throw Error("Extension has no type (numeric code to identify the extension)");fH.unshift(e.Class),fG.unshift(e)}e.unpack?fl[e.type]=e.unpack:fl[e.type]=e}fH=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,fc],fG=[{pack(e,t,i){let r=e.getTime()/1e3;if((this.useTimestamp32||0===e.getMilliseconds())&&r>=0&&r<4294967296){let{target:e,targetView:i,position:s}=t(6);e[s++]=214,e[s++]=255,i.setUint32(s,r)}else if(r>0&&r<17179869184){let{target:i,targetView:s,position:a}=t(10);i[a++]=215,i[a++]=255,s.setUint32(a,4e6*e.getMilliseconds()+(r/1e3/4294967296>>0)),s.setUint32(a+4,r)}else if(isNaN(r)){if(this.onInvalidDate)return t(0),i(this.onInvalidDate());let{target:e,targetView:r,position:s}=t(3);e[s++]=212,e[s++]=255,e[s++]=255}else{let{target:i,targetView:s,position:a}=t(15);i[a++]=199,i[a++]=12,i[a++]=255,s.setUint32(a,1e6*e.getMilliseconds()),s.setBigInt64(a+4,BigInt(Math.floor(r)))}}},{pack(e,t,i){let r=Array.from(e),{target:s,position:a}=t(this.structuredClone?3:0);this.structuredClone&&(s[a++]=212,s[a++]=115,s[a++]=0),i(r)}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=101,r[s++]=0),i([e.name,e.message])}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=120,r[s++]=0),i([e.source,e.flags])}},{pack(e,t){this.structuredClone?f3(e,16,t):f4(fY?td.from(e):new Uint8Array(e),t)}},{pack(e,t){let i=e.constructor;i!==fZ&&this.structuredClone?f3(e,fF.indexOf(i.name),t):f4(e,t)}},{pack(e,t){let{target:i,position:r}=t(1);i[r]=193}}];var f6=new f2({useRecords:!1});f6.pack,f6.pack;var{NEVER:f8,ALWAYS:f9,DECIMAL_ROUND:f7,DECIMAL_FIT:me}={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},mt=512,mi=1024,mr=new f2({structuredClone:!0});function ms(e){return"MouseDown"===e||"MouseUp"===e||"KeyDown"===e||"KeyUp"===e||"Collision"===e||"Trigger"===e}f5({Class:pp.prototype.constructor,type:1,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pp.prototype),e)}),f5({Class:pb.prototype.constructor,type:2,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,pb.prototype),e)}),f5({Class:px.prototype.constructor,type:3,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,px.prototype),e)}),f5({Class:pZ.prototype.constructor,type:4,write:e=>e.id,read:e=>new pZ(e)}),f5({Class:pK.prototype.constructor,type:5,write:e=>e.data,read:e=>new pK(e)}),f5({Class:pM.prototype.constructor,type:6,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pM.prototype),e)}),(e=>{function t(e){return mr.pack(e)}e.serialize=t,e.deserialize=function(e){return mr.unpack(e)},e.checksum=function(e){return(function(e){var t=0;if(0===e.length)return t;for(let i=0;i<e.length;i++)t=(t<<5)-t+e[i],t&=t;return t})(t(function e(t){if(py(t))return t;if(Array.isArray(t))return t.map(e);if("object"!=typeof t||null===t)return t;{let i={};for(let r of Object.keys(t).sort())i[r]=e(t[r]);return Object.setPrototypeOf(i,Object.getPrototypeOf(t)),i}}(e))).toString()}})(mn||(mn={})),(ma=mo||(mo={})).toEventUIType=function(e){return"Conditional"===e.type?"Distance"===e.condition.type?"Distance":"StateChange":e.type},ma.fromEventUIType=function(e){return"Distance"===e||"StateChange"===e?"Conditional":e};var ma,mn,mo,ml,mh={LookAt:[],Follow:["Create"],DragDrop:["Transition","Animation","Audio","Particles","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseHover:["Transition","Animation","Particles","Create","Destroy","SwitchCamera","SceneTransition","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Scroll:["Transition","Animation","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Start:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Conditional:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MousePress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyPress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],GameControl:["Transition","Animation","Audio","Particles","Create","Conditional"],Collision:["Transition","Animation","Audio","Particles","Video","Create","Destroy","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Trigger:["Transition","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Resize:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],VariableChange:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],API:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],WEBHOOK:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],AIAssistantListener:["SetVariable"],AIAssistantTrigger:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"]};(mx=ml||(ml={})).is=function(e){return"MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type},mx.defaultData=function(e){return"MouseDown"===e||"MouseUp"===e||"MousePress"===e?{type:e,mode:"Object",disabled:!1,actions:new pb}:{type:e,disabled:!1,key:void 0,actions:new pb}},(mb=mq||(mq={})).propertyDefaultData=function(e){return{type:"Property",value:[e??null,"position","x"]}},mb.valueDefaultData={type:"Literal",value:0},(mw=mX||(mX={})).comparisonDefaultData=function(e){return{type:"Comparison",operator:"==",lOperand:mq.propertyDefaultData(e),rOperand:{...mq.valueDefaultData}}},mw.distanceDefaultData=function(e){return{type:"Distance",toObject:e??null,fromObject:e??null,distance:200}},mw.stateDefaultData=function(e,t){return{type:"State",object:e??null,state:t??null}},(mY||(mY={})).isConditionalSubActions=function(e){return void 0!==e.find(e=>"ifActions"===e||"elseActions"===e)},(mS=mQ||(mQ={})).is=function(e){return"Conditional"===e.type},mS.defaultData=function(e){return{type:"Conditional",disabled:!1,inActions:new pb,outActions:new pb,condition:mX.distanceDefaultData(e)}},(mZ||(mZ={})).defaultData={type:"DragDrop",cursor:"hand",disabled:!1,dampingFactor:1,objects:[],snapTo:"center",snapSurfaceMode:"bbox",snapSurfaceOffset:0,dropOn:"all",autoOrient:!0,dropDestinations:[],plane:"adaptive",planeMode:"locked",referenceFrame:"global",limits:[-1/0,1/0,-1/0,1/0,-1/0,1/0],drop:!1,resetOnSnapFail:!1,snapSpeed:20,resetSpeed:20,dragDropActions:{drag:new pb,drop:new pb}},(mK||(mK={})).defaultData={type:"Follow",disabled:!1,maxDelta:0,dampingFactor:1,target:"cursor",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledTranslation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5,actions:new pb},(mJ||(mJ={})).defaultData={type:"LookAt",disabled:!1,distance:1e3,dampingFactor:1,target:"cursor",tilt:"up",axis:"z",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledRotation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5},(m_=m$||(m$={})).is=function(e){return"MouseHover"===e.type},m_.defaultData=function(){return{type:"MouseHover",disabled:!1,actions:new pb}},(mA=m0||(m0={})).is=function(e){return"Scroll"===e.type},mA.defaultData=function(){return{type:"Scroll",disabled:!1,steps:100,trigger:"load",startFrom:"enter",enterAnchor:"top",startOffset:0,endAfter:400,actions:new pb}},(mM=m1||(m1={})).is=function(e){return"Start"===e.type},mM.defaultData=function(){return{type:"Start",disabled:!1,actions:new pb}},(mE=m2||(m2={})).is=function(e){return"Collision"===e.type},mE.defaultData=function(){return{type:"Collision",disabled:!1,target:"character",actions:new pb}},(mC=m3||(m3={})).is=function(e){return"Trigger"===e.type},mC.defaultData=function(e,t){return{type:"Trigger",disabled:!1,target:"all",triggeringObjects:[],actions:new pb,triggerZone:"box",position:t.toArray(),rotation:[0,0,0],size:e.toArray(),radius:e.length()/2,helperVisible:!0}},(mT=m4||(m4={}
3139)).defaultSizes={mobile:[480,480],tablet:[768,768],desktop:[1200,1200],custom:[769,1200]},mT.is=function(e){return"Resize"===e.type},mT.sizeToDevice=function(e){return"string"==typeof e?e:"custom"},mT.deviceToSize=function(e){return"string"==typeof e?[...mT.defaultSizes[e]]:[...e]},mT.defaultData=function(){let e={size:"mobile",operator:"<",actions:new pb},t={size:"tablet",operator:"<",actions:new pb},i={size:[...mT.defaultSizes.custom],operator:"<>",actions:new pb},r=new pb;return r.push({id:tZ.generateUUID(),fi:0,data:e},{id:tZ.generateUUID(),fi:1,data:t},{id:tZ.generateUUID(),fi:2,data:i}),{type:"Resize",disabled:!1,orientation:"horizontal",breakpoints:r}},mT.defaultBreakpointData=function(){return{size:[...mT.defaultSizes.custom],operator:"<>",actions:new pb}},(mP=m5||(m5={})).propertyPaths={Position:["position"],"Position X":["position","x"],"Position Y":["position","y"],"Position Z":["position","z"],Rotation:["rotation"],"Rotation X":["rotation","x"],"Rotation Y":["rotation","y"],"Rotation Z":["rotation","z"],Scale:["scale"],"Scale X":["scale","x"],"Scale Y":["scale","y"],"Scale Z":["scale","z"],Width:["width"],Height:["height"],Depth:["depth"],"Mouse Position X":["mouse","x"],"Mouse Position Y":["mouse","y"],"Mouse Pressed":["mouse","pressed"],"Screen Width":["mouse","width"],"Screen Height":["mouse","height"],"Hit Position X":["raycast","x"],"Hit Position Y":["raycast","y"],"Hit Position Z":["raycast","z"],"Hit Object Position X":["raycast","objX"],"Hit Object Position Y":["raycast","objY"],"Hit Object Position Z":["raycast","objZ"]},mP.is=function(e){return"VariableChange"===e.type},mP.defaultData=function(){return{disabled:!1,type:"VariableChange",actions:new pb,variableId:"",objectId:null,property:"Position X"}},(mD=m6||(m6={})).is=function(e){return"API"===e.type},mD.defaultData=function(){return{disabled:!1,type:"API",successActions:new pb,errorActions:new pb,userAPIId:""}},(mI=m8||(m8={})).is=function(e){return"WEBHOOK"===e.type},mI.defaultData=function(){return{disabled:!1,type:"WEBHOOK",actions:new pb,userWebhookId:""}},(mO=m9||(m9={})).is=function(e){return"AIAssistantListener"===e.type},mO.defaultData=function(){return{disabled:!1,type:"AIAssistantListener",actions:new pb,analysis:"average",analysisRange:[0,71],analysisSingle:0}},(mR=m7||(m7={})).is=function(e){return"AIAssistantTrigger"===e.type},mR.defaultData=function(){return{disabled:!1,description:"",type:"AIAssistantTrigger",actions:new pb}};var mc="personal camera",md="a218fcc3-276b-49b9-b485-49037fd14f5f";function mu(e){return"string"==typeof e&&36===e.length&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}(e=>{function t(e,t){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function i(e,i){return Math.sqrt(t(e,i))}function r(t,i,r){let s=e.sub(i,t),a=e.sub(r,t),o=e.dot(s,a)/e.dot(s,s),l=e.scalarMultiply(s,o);return e.add(t,l)}e.isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]},e.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i]},e.add=function(e,t){return[e[0]+t[0],e[1]+t[1]]},e.sub=function(e,t){return[e[0]-t[0],e[1]-t[1]]},e.multiply=function(e,t){return[e[0]*t[0],e[1]*t[1]]},e.divide=function(e,t){return[e[0]/t[0],e[1]/t[1]]},e.distanceSquared=t,e.distance=i,e.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},e.scalarMultiply=function(e,t){return[e[0]*t,e[1]*t]},e.projectionOnto=r,e.projectionOntoDistance=function(e,t,s){return i(e,r(e,t,s))},e.center=function(e,t){return[(e[0]+t[0])*.5,(e[1]+t[1])*.5]}})(ge||(ge={})),(mL=gt||(gt={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},mL.add=function(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]},mL.sub=function(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]},mL.div=function(e,t){return[e[0]/t[0],e[1]/t[1],e[2]/t[2]]},mL.mul=function(e,t){return[e[0]*t[0],e[1]*t[1],e[2]*t[2]]},mL.dist=function(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2])},mL.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]},(mB=gi||(gi={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},mB.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i,e[3]+(t[3]-e[3])*i]},(e=>{let t=180/Math.PI,i=Math.PI/180;function r(e){return"number"==typeof e?e*t:e}function s(e){return"number"==typeof e?e*i:e}e.radToDeg=function(e){return[r(e[0]),r(e[1]),r(e[2])]},e.degToRad=function(e){return[s(e[0]),s(e[1]),s(e[2])]}})(gr||(gr={})),(mz=gs||(gs={})).identity=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],mz.isEqual=function(e,t){for(let i=0;i<16;i++)if(e[i]!==t[i])return!1;return!0},mz.simplify=function(e){return e??mz.identity}
3139,mz.applyMatrix4=function(e,t){let i=t.slice(0);for(var r=0,s=t.length;r<s;r+=3){let s=e[3]*t[r]+e[7]*t[r+1]+e[11]*t[r+2]+e[15];i[r]=(e[0]*t[r]+e[4]*t[r+1]+e[8]*t[r+2]+e[12])/s,i[r+1]=(e[1]*t[r]+e[5]*t[r+1]+e[9]*t[r+2]+e[13])/s,i[r+2]=(e[2]*t[r]+e[6]*t[r+1]+e[10]*t[r+2]+e[14])/s}return i},(mF=ga||(ga={})).isRGB=function(e){return"object"==typeof e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b},mF.white={r:1,g:1,b:1},mF.red={r:1,g:0,b:0},mF.black={r:0,g:0,b:0},mF.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:1}},mF.clone=function(e){return{r:e.r,g:e.g,b:e.b}},mF.fromHex=function(e){return{r:((e=Math.floor(e))>>16&255)/255,g:(e>>8&255)/255,b:(255&e)/255}},mF.toHex=function(e){return 65536*Math.round(255*e.r)+256*Math.round(255*e.g)+Math.round(255*e.b)},mF.equals=function(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b},mF.equalsFixed=function(e,t){return e.r.toFixed(2)===t.r.toFixed(2)&&e.g.toFixed(2)===t.g.toFixed(2)&&e.b.toFixed(2)===t.b.toFixed(2)},mF.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i}},(mN=gn||(gn={})).white={...ga.white,a:1},mN.transparent={...ga.white,a:0},mN.from0to1=function(e){return{r:e[0],g:e[1],b:e[2],a:e[3]}},mN.fromHexAndA=function(e,t){return{...ga.fromHex(e),a:t}},mN.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:e.a}},mN.equals=function(e,t){return ga.equals(e,t)&&e.a===t.a},mN.equalsFixed=function(e,t){return ga.equalsFixed(e,t)&&e.a.toFixed(2)===t.a.toFixed(2)},mN.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i,a:e.a+(t.a-e.a)*i}},mN.toStyle=function({r:e,g:t,b:i,a:r}=mN.white){return`rgba(${255*e}, ${255*t}, ${255*i}, ${r})`},(go||(go={})).identity={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},(gl||(gl={})).defaultData={mass:1,stiffness:80,damping:10,velocity:0},(gh||(gh={})).defaultData={control1:[.5,0],control2:[.5,1]},(r=gc||(gc={})).linear=[0,0,1,1],r.ease=[.25,.1,.25,1],r.easeIn=[.42,0,1,1],r.easeOut=[0,0,.58,1],r.easeInOut=[.42,0,.58,1],(mU=gd||(gd={})).all=["PerspectiveCamera","OrthographicCamera"],mU.is=function(e){return mU.all.includes(e)},(mk=gu||(gu={})).DefaultUp=[0,1,0],mk.DefaultTargetOffset=1e3,mk.defaultData={far:1e5,type:"OrthographicCamera",perspective:{near:70,fov:45,zoom:1},orthographic:{near:-1e5,zoom:1},up:mk.DefaultUp,isUpVectorFlipped:!1,targetOffset:mk.DefaultTargetOffset},mk.getZoom=function(e){return"PerspectiveCamera"===e.type?e.perspective?.zoom??1:e.orthographic?.zoom??1},(mV=gp||(gp={})).defaultData=function(e,t=.1){return{disabled:!1,type:"linear",hideBase:!1,count:3,radial:{radius:2*Math.max(e[0],e[1]),start:0,end:360,alignment:!1,axis:"y",scale:[1,1,1],rotation:[0,0,0],position:[0,0,0]},toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},linear:{scale:[1,1,1],rotation:[0,0,0],position:[e[0]+e[0]*t,0,0]},grid:{count:[2,2,2],size:e.map(e=>e*(1+t)),useCenter:!0},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}}},mV.merge=function(e,t){let i={...e};if(mp.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i.radial={...e.radial},t.radial){let r=e.radial,s=t.radial;mf.forEach(e=>{Object.assign(i.radial,{[e]:s[e]??r[e]})})}if(i.linear={...e.linear},t.linear){let r=e.linear,s=t.linear;mm.forEach(e=>{Object.assign(i.linear,{[e]:s[e]??r[e]})})}if(i.grid={...e.grid},t.grid){let r=e.grid,s=t.grid;mg.forEach(e=>{Object.assign(i.grid,{[e]:s[e]??r[e]})})}if(i.toObject={...e.toObject},t.toObject){let r=e.toObject,s=t.toObject;mv.forEach(e=>{Object.assign(i.toObject,{[e]:s[e]??r[e]})})}if(i.randomnessObject={...e.randomnessObject},t.randomnessObject){let r=e.randomnessObject,s=t.randomnessObject;my.forEach(e=>{Object.assign(i.randomnessObject,{[e]:s[e]??r[e]})})}return i},(mj=gf||(gf={})).defaultData={radial:{},linear:{},grid:{},toObject:{},randomnessObject:{}},s=["radial","linear","grid","toObject","randomnessObject"],mj.toOps=function(e,t){let i=[];for(let r of(void 0!==e.count&&i.push({type:0,path:t,props:{count:e.count}}),s)){let s=e[r];s&&Object.keys(s).length>0&&i.push({type:0,path:[...t,r],props:s})}return i};
3139var mp=["count"],mf=["radius","start","end","position","scale","rotation"],mm=["position","scale","rotation"],mg=["count","size"],mv=["count","position","scale","rotation"],my=["strength","scale","rotation","position","movement","seed","freqScale"];(mG=gm||(gm={})).all=["PointLight","SpotLight","DirectionalLight","HemisphereLight"],mG.is=function(e){return mG.all.includes(e)},(gg||(gg={})).defaultData=function(e){return function(e){if("PointLight"===e)return{type:e,color:gn.white,intensity:1,distance:2e3,decay:1,shadows:!0,shadowResolution:1024,shadowRadius:1,penumbraSize:.5,depth:1e5};if("SpotLight"===e)return{type:e,color:gn.white,intensity:1,distance:2e3,decay:1,shadows:!0,penumbra:0,angle:30/180*Math.PI,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};if("DirectionalLight"===e)return{type:e,color:gn.white,intensity:1,shadows:!0,size:2e3,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};throw Error("not implemented")}(e)},(a=gv||(gv={})).defaultShapeData={type:"PlaneEmitterShape",size:[100,100,100]},a.defaultCollisionData={colliderEntityId:null,collisionBounce:.75},a.defaultData={renderMaterial:{type:"particleMaterial",color:{r:1,g:.2,b:.545,a:1},color2:{r:.945,g:.714,b:.184,a:1},coloring:"gradient",ease:"linearFadeOut",easeSize:"linearFadeOut",transparent:!0,size:[40,40],texture:"pt_default_particle",spriteRotation:[0,0]},birthRatePerSec:50,gravity:1,noiseStrength:0,noiseScale:0,noiseSeed:1,noiseType:"curl",randomRotation:0,randomScale:.2,randomMass:.5,rootObjectType:"instancedMesh",life:1,direction:[0,0,0],directionMode:"axis",speed:10,shape:a.defaultShapeData,autoPlay:!0,emitTimeDelay:0,emitTimeCycle:"infinity",emitTimeDuration:1,...a.defaultCollisionData},(gy||(gy={})).defaultData={enabled:"visibility",fusedBody:!0,rigidBody:"positioned",density:1,pointMass:0,gravityScale:1,friction:.5,damping:0,restitution:.2,colliderType:"convex",enabledRotation:[!0,!0,!0],enabledTranslation:[!0,!0,!0]},(mH=gx||(gx={})).defaultData={castShadow:!0,receiveShadow:!0},mH.equals=function(e,t){return e.castShadow===t.castShadow&&e.receiveShadow===t.receiveShadow},(mW=gb||(gb={})).defaultData={flatShading:!1,wireframe:!1,side:0},mW.equals=function(e,t){return e.flatShading===t.flatShading&&e.side===t.side&&e.wireframe===t.wireframe},(gw||(gw={})).defaultData={...gb.defaultData,...gx.defaultData},(gS||(gS={})).getMaterialData=function(e,t){let i=[];if("material"in e){let r="string"==typeof e.material?t.materials[e.material]??t.lib.materials[e.material]?.asset:e.material;r&&i.push(r)}else if("materials"in e)for(let r of e.materials){let e="string"==typeof r?t.materials[r]??t.lib.materials[r]?.asset:r;e&&i.push(e)}return i},(o=g_||(g_={})).defaultVideo={data:"",thumb:"/_assets/_videos/catThumb.png",type:"video",name:"Cat video"},o.maxSize=3e7,(gA||(gA={})).is=function(e){return"texture"===e||"video"===e||"color"===e||"depth"===e||"normal"===e||"gradient"===e||"noise"===e||"fresnel"===e||"rainbow"===e||"toon"===e||"outline"===e||"particle"===e||"transmission"===e||"matcap"===e||"displace"===e||"pattern"===e||"light"===e},(gM||(gM={})).is=function(e){return"phong"===e||"toon"===e||"lambert"===e||"physical"===e};var mx,mb,mw,mS,m_,mA,mM,mE,mC,mT,mP,mD,mI,mO,mR,mL,mB,mz,mF,mN,mU,mk,mV,mj,mG,mH,mW,mq,mX,mY,mQ,mZ,mK,mJ,m$,m0,m1,m2,m3,m4,m5,m6,m8,m9,m7,ge,gt,gi,gr,gs,ga,gn,go,gl,gh,gc,gd,gu,gp,gf,gm,gg,gv,gy,gx,gb,gw,gS,g_,gA,gM,gE,gC=["mode","gradientType","noiseType","displacementType","projection","cnormal","crop","axis","side"],gT=["wrapping","image","video","name","minFilter","magFilter"];(vE=gE||(gE={})).patch=function(e,t){let{texture:i,...r}=t;if(Object.assign(e,r),i){let t=e.texture;t&&Object.assign(t,i)}},vE.defaultData=function(e,t){return"light"===e&&t?function(e){let t={mode:0,isMask:!1,visible:!0,bumpMap:void 0,bumpMapIntensity:5,roughnessMap:void 0,alphaOverride:1};switch(e){case"phong":return{...t,category:"phong",specular:{r:.2,g:.2,b:.2},shininess:5,type:"light",visible:!0,mode:0,occlusion:!0,alpha:.6};case"toon":return{...t,category:"toon",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1};case"lambert":return{...t,category:"lambert",emissive:{r:0,g:0,b:0},type:"light",alpha:1,visible:!0,mode:0,occlusion:!0};case"physical":return{...t,category:"physical",roughness:.2,metalness:.2,reflectivity:.2,type:"light",alpha:1,visible:!0,mode:0,occlusion:!0}}}(t):function(e){let t={alpha:1,mode:0,isMask:!1,visible:!0};switch(e){case"texture":return{...t,type:"texture",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{image:"image_0",wrapping:1e3,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006}
vendor: 7,777 bytes, line 3139
3139,crop:!1};case"video":return{...t,type:"video",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{video:g_.defaultVideo,wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"color":return{...t,type:"color",color:ga.fromHex(5526619)};case"depth":return{...t,type:"depth",gradientType:1,smooth:!1,isVector:!0,isWorldSpace:!1,origin:[0,0,0],direction:[1,0,0],colors:[[1,1,1,1],[0,0,0,1]],steps:[0,1],near:50,far:200};case"normal":return{...t,type:"normal",cnormal:[1,1,1]};case"gradient":return{...t,type:"gradient",gradientType:0,smooth:!1,colors:[[0,0,0,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,1,1,1,1,1,1,1,1,1],num:2,angle:0,offset:[0,0],morph:[0,0]};case"noise":return{...t,type:"noise",size:[100,100,100],noiseType:0,scale:1,move:1,colorA:{...ga.fromHex(6710886),a:1},colorB:{...ga.fromHex(6710886),a:1},colorC:{...ga.fromHex(16777215),a:1},colorD:{...ga.fromHex(16777215),a:1},distortion:[1,1],fA:[1.7,9.2],fB:[8.3,2.8],voronoiStyle:0,highCut:1,lowCut:0,smoothness:.3,seed:0,quality:1};case"fresnel":return{...t,type:"fresnel",color:gn.fromHexAndA(16777215,1),bias:.1,scale:1,intensity:2,factor:1};case"rainbow":return{...t,type:"rainbow",filmThickness:30,movement:0,wavelengths:[0,0,0],noiseStrength:0,noiseScale:1,offset:[0,0,0]};case"toon":return{...t,type:"toon",positioning:2,colors:[[0,0,0,1],[.5,.5,.5,1],[.5,.5,.5,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,.475,.525,1,1,1,1,1,1,1],num:4,source:[0,1e3,0],isWorldSpace:!0,noiseStrength:0,noiseScale:1,shadowColor:gn.fromHexAndA(0,0),offset:[0,0,0]};case"outline":return{...t,type:"outline",outlineColor:gn.fromHexAndA(0,1),contourColor:gn.fromHexAndA(0,1),outlineWidth:2,contourWidth:5,outlineThreshold:.4,contourThreshold:0,outlineSmoothing:0,contourFrequency:10,contourDirection:[0,1,0],positionalLines:!1,compensation:!0};case"matcap":return{...t,type:"matcap",texture:{image:"matcap_0",wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006}};case"transmission":return{...t,type:"transmission",thickness:10,ior:1.5,roughness:1};case"displace":return{visible:!0,type:"displace",displacementType:"noise",noiseType:0,scale:10,movement:1,offset:[0,0,0],intensity:8,voronoiStyle:0,smoothness:.3,seed:0,highCut:1,lowCut:0,quality:1};case"pattern":return{...t,type:"pattern",style:0,projection:0,axis:"y",blending:0,offset:[0,0],colorA:{...ga.fromHex(0),a:1},colorB:{...ga.fromHex(16777215),a:1},frequency:[10,10],size:.5,variation:0,smoothness:.5,zigzag:0,rotation:0,vertical:[0,1],horizontal:[0,1],sides:6}}}(e)},(e=>{function t(e,t="layer1",i="layer2"){let r=new pb;return r.push({fi:0,data:gE.defaultData("light",e),id:t}),r.push({fi:1,data:gE.defaultData("color"),id:i}),{layers:r}}e.isMergable=function(e){return!e.layers.some(e=>"texture"===e.data.type&&0!==e.data.projection||"depth"===e.data.type&&!e.data.isWorldSpace||"noise"===e.data.type||"displace"===e.data.type)},e.getHash=function(e){let t="";return e.layers.forEach(e=>{Object.entries(e.data).forEach(([e,i])=>{t+=`${e}${i}`,Array.isArray(i)?i.forEach(e=>t+=`${e}`):"object"==typeof i?Object.values(i).forEach(e=>{"number"==typeof e?t+=`${e.toFixed(4)}`:t+=`${e}`}):t+=`${i}`})}),t},e.defaultEmptyData=function(){return{layers:new pb}},e.defaultData=function(e="layer1",i="layer2"){return t("phong",e,i)},e.withName=function(e,t){return{...e,name:t}},e.defaultTwoLayerData=t,e.defaultUIObjectMaterial=function(e){let t=gE.defaultData("texture");e&&Object.assign(t.texture,{image:e});let i=new pb;return i.push({fi:0,data:t,id:"layer1"}),i.push({fi:1,data:{...gE.defaultData("transmission"),alpha:1},id:"layer2"}),i.push({fi:2,data:{...gE.defaultData("light","lambert"),alpha:0},id:"layer3"}),{layers:i}},e.defaultTwoLayerTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gE.defaultData("texture");Object.assign(s.texture,{image:e});let a=new pb;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gE.defaultData("light",t),id:r}),{layers:a}},e.defaultTwoLayerVideoTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gE.defaultData("video");Object.assign(s.texture,{video:e});let a=new pb;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gE.defaultData("light",t),id:r}),{layers:a}}})(vk||(vk={})),(vV||(vV={})).defaultData=function(){return{points:new pb,roundness:0,shapeHoles:[],isClosed:!1}},(vj||(vj={})).defaultData=function(){return{points:new pb,lastInsertionPlane:null,subdivisions:12,isClosed:!1}};var gP={type:"Ellipse",width:50,height:50,spikes:16,angle:360,innerRadius:0};(vG||(vG={})).merge=function(e,t){let i={...e};return gI.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i};var gD={shape:gP,depth:1,offset:0,bevel:50,bevelSides:6,angle:0,twist:0,startScale:1,endScale:1,capType:"flat"},gI=["depth","offset","angle","twist","startScale","endScale"];(vC=vH||(vH={})).is2DParametricMesh=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"UIGeometry"===e},vC.isParametricMesh=function(e){return"PolygonGeometry"===e||"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"PathGeometry"===e||"VectorGeometry"===e||"ConeGeometry"===e||"CubeGeometry"===e||"CylinderGeometry"===e||"DodecahedronGeometry"===e||"HelixGeometry"===e||"IcosahedronGeometry"===e||"LatheGeometry"===e||"PyramidGeometry"===e||"SphereGeometry"===e||"PlaneGeometry"===e||"BackdropGeometry"===e||"TorusGeometry"===e||"TorusKnotGeometry"===e||"BooleanGeometry"===e||"TextGeometry"===e||"InputGeometry"===e},(vW||(vW={})).merge=function(e,t){let i={...e};return Object.assign(i,t),"PathGeometry"===i.type&&"extrusion"in t&&t.extrusion&&(i.extrusion={...e.extrusion},Object.assign(i.extrusion,vG.merge(i.extrusion,t.extrusion))),i},(vT=vq||(vq={})).defaultData=function(e){if("RectangleGeometry"===e)return{width:320,height:320,type:e,cornerRadius:[0,0,0,0],cornerType:0,depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("UIGeometry"===e)return{type:e,frame:"",cornerRadius:[0,0,0,0],cornerType:0,width:1,height:1};if("PathGeometry"===e)return{type:e,width:1,height:1,depth:1,path:vj.defaultData(),extrusion:gD};if("VectorGeometry"===e)return{width:1,height:1,type:e,subdivisions:12,shape:vV.defaultData(),depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("BooleanGeometry"===e)return{type:e,operation:2,width:0,height:0,depth:0,phongAngle:35};if("TextGeometry"===e)return{type:e,width:100,height:100,depth:0,horizontalAlign:1,verticalAlign:1,fontSize:16,lineHeight:1.2,letterSpacing:0,text:{textValue:""},textTransform:1,font:"Roboto_regular",editable:!1,extrudeBevelSize:0,extrudeBevelSegments:1};if("InputGeometry"===e)return{...vT.defaultData("TextGeometry"),type:e,editable:!0};if("SphereGeometry"===e)return{type:"SphereGeometry",width:100,height:100,depth:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180};throw Error("not implemented")};var gO=["width","height","depth"];function gR(e){e.layers.forEach(e=>{if("depth"===e.type&&void 0!==e.colorA){let t=e.colorA,i=e.colorB,r=[[t.r,t.g,t.b,t.a],[i.r,i.g,i.b,i.a]],s=[0,1];for(let e=2;e<10;e++)r.push(r[1]),s.push(1);let a={...uj(pX(e),"type","visible","isVector","isWorldSpace","origin","alpha","mode"),near:Math.max(0,e.near),far:Math.max(0,e.far),colors:r,steps:s,num:2,direction:[1,0,0],smooth:!1,gradientType:1};Object.assign(e,a)}else if("depth"===e.type&&1===e.gradientType&&(e.near<0||e.far<0)){let t={...pX(e),near:Math.max(e.near,0),far:Math.max(e.far,0)};Object.assign(e,t)}})}function gL(e,t){Object.values(e.shared.materials).forEach(e=>t(e))}function gB(e,t){e.scene.objects.traverse((e,i)=>
3139{"materials"in i?i.materials.forEach((e,r)=>{void 0===e&&(i.materials[r]=vk.defaultData(),e=i.materials[r]),"string"!=typeof e&&t(e)}):"material"in i?"string"!=typeof i.material&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)):"Mesh"===i.type&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)),"overrides"in i&&Object.values(i.overrides).forEach(e=>{e.material&&"string"!=typeof e.material&&Object.getPrototypeOf(e.material)!==pM.prototype&&t(e.material)})})}function gz(e){void 0===e.layers&&Object.assign(e,vk.defaultTwoLayerData("lambert"))}function gF(e){e.layers&&e.layers.forEach(e=>{if("depth"===e.type&&10===e.colors.length){let t=[...e.colors];t.push(e.colors[9]);let i=[...e.steps];i.push(e.steps[9]);let r={...pX(e),colors:t,steps:i};Object.assign(e,r)}})}function gN(e){e.scene.objects.traverse((e,t)=>{"materials"in t?t.materials.forEach(e=>{"string"!=typeof e&&gF(e)}):"material"in t&&"string"!=typeof t.material&&gF(t.material)}),Object.values(e.shared.materials).forEach(e=>gF(e))}function gU(e){e.layers&&e.layers.forEach(e=>{"depth"===e.type&&void 0!==e.num&&(e.colors=e.colors.slice(0,e.num),e.steps=e.steps.slice(0,e.num),delete e.num)})}function gk(e){e.layers&&e.layers.forEach(e=>{"displace"!==e.type&&void 0===e.isMask&&(e.isMask=!1),("texture"===e.type||"video"===e.type)&&void 0===e.blending&&(e.blending=0),("noise"===e.type||"displace"===e.type&&"noise"===e.displacementType)&&(void 0===e.voronoiStyle&&(e.voronoiStyle=0),void 0===e.highCut&&(e.highCut=1),void 0===e.lowCut&&(e.lowCut=0),void 0===e.smoothness&&(e.smoothness=.3),void 0===e.seed&&(e.seed=0),void 0===e.quality&&(e.quality=1))})}function gV(e){let t=e.layers.find(e=>"light"===e.type)?.data;t?.category==="basic"&&(Object.assign(t,gE.defaultData("light","phong")),t.visible=!1)}function gj(e){gL(e,gV),gB(e,gV)}function gG(e){e.layers.forEach(e=>{"light"===e.type&&"toon"!==e.category&&void 0===e.occlusion&&(e.occlusion=!0)})}function gH(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.bumpMapIntensity&&(e.bumpMapIntensity=5)})}function gW(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.alphaOverride&&(e.alphaOverride=1)})}(vX||(vX={})).defaultData={enabled:!1,useBackgroundColor:!1,color:ga.white,near:.1,far:2e3},l={opacity:1,blendFunction:13,enabled:!1},(vY||(vY={})).defaultData={enabled:!1,pixelation:{...l,blendFunction:16,granularity:15},bloom:{...l,blendFunction:16,intensity:1,blurScale:1,luminanceThreshold:.25,luminanceSmoothing:.025,kernelSize:3},chromaticAberration:{...l,offset:[2,2]},vignette:{...l,darkness:1,offset:0},hueSaturation:{...l,hue:3,saturation:0},brightnessContrast:{...l,brightness:.25,contrast:0},depthOfField:{...l,focusDistance:100,focalLength:20,bokehScale:5},noise:{...l,blendFunction:16}},(vQ||(vQ={})).defaultData={softShadowQuality:"low"},(vZ||(vZ={})).defaultData={enabled:!0,color:{r:.8274509803921568,g:.8274509803921568,b:.8274509803921568},intensity:.75},(vK||(vK={})).defaultData={occlusion:!1,aoFullRes:!1,radius:256,bias:.5,aoColor:{r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}},(vJ||(vJ={})).defaultData={usePhysics:!1,gravity:-10},(v$||(v$={})).defaultData={playCamera:mc,gameControlObject:null},(v0||(v0={})).defaultData={backgroundColor:gn.fromHexAndA(2960946,1),postprocessing:vY.defaultData,fog:vX.defaultData,globalPhysics:vJ.defaultData,ambient:vZ.defaultData,ao:vK.defaultData,shadow:vQ.defaultData,publish:v$.defaultData},(v1||(v1={})).defaultData={colliderType:"box",size:[100,100,100],colliderHelperVisible:!0,forceType:"collider",forceRange:"global",forceIntensity:.5,forceDambing:.95},(vP=v2||(v2={})).isComponentRelated=function(e){return"Component"===e||"Instance"===e},vP.isEmptyOrComponent=function(e){return"Empty"===e||"Instance"===e},(vD=v3||(v3={})).identity={...go.identity,hiddenMatrix:gs.identity},vD.fromObject=function(e){return{position:e.position,rotation:e.rotation,scale:e.scale,hiddenMatrix:e.hiddenMatrix}},vD.merge=function(e,t){return{position:t?.position||e.position,rotation:t?.rotation||e.rotation,scale:t?.scale||e.scale,hiddenMatrix:t?.hiddenMatrix||e.hiddenMatrix}},vD.diff=function(e,t){return uH({position:gt.isEqual(e.position,t.position)?void 0:t.position,rotation:gt.isEqual(e.rotation,t.rotation)?void 0:t.rotation,scale:gt.isEqual(e.scale,t.scale)?null:t.scale,hiddenMatrix:gs.isEqual(e.hiddenMatrix,t.hiddenMatrix)?void 0:t.hiddenMatrix})},(v4||(v4={})).defaultData={states:new pb,events:new pb,visible:!0,raycastLock:!1,physics:gy.defaultData,pathSnapping:{pathId:null,
vendor: 4,204 bytes, line 3139
3139slide:0,offset:0,orientation:"tangential"},...v3.identity,cloner:null},(v5||(v5={})).defaultData={type:"Empty",...v4.defaultData},(v6||(v6={})).defaultData={type:"ParticleCollider",...v1.defaultData,...v4.defaultData},(v8||(v8={})).defaultData={type:"Component",...v4.defaultData},(v9||(v9={})).defaultData={type:"Particle",...v4.defaultData,...gv.defaultData},(v7||(v7={})).defaultData={type:"Mesh",...v4.defaultData,...gw.defaultData},(ye||(ye={})).defaultData={...v4.defaultData,...v3.identity,position:[0,0,gu.DefaultTargetOffset],...gu.defaultData},(vI=yt||(yt={})).defaultData=function(e){return{...v4.defaultData,...gg.defaultData(e)}},vI.defaultDirectionalLightData={...vI.defaultData("DirectionalLight"),position:[200,300,300],name:"Directional Light",intensity:.7},(e=>{function t(e,t,i=0){for(;i<t.length;){let r=e?e[t[i]]:void 0;if(t.length===i+1)return r;if(!r)return;e=r.descendants,i+=1}}e.resolveWithDes=t,e.resolve=function(e,i,r=0){let s=t(e,i,r);if(s){let e=Object.keys(s);if(1===e.length&&"descendants"===e[0])return}return s}})(yi||(yi={})),(e=>{function t(e,t){return{...v4.defaultData,...t,component:e,overrides:new pM,physics:void 0,events:void 0,type:"Instance"}}e.rootOverrideProps=["physics","events"],e.compositeNonOptionalOverrideProps=["geometry"],e.compositeEntireOverrideOverrideProps=["material"],e.ofComponent=t,e.fromComponentData=function(e){let i=v3.fromObject(e.data);return t(e.id,i)}})(yr||(yr={})),(vO=ys||(ys={})).defaultData={type:"Page",...v4.defaultData,physics:{...gy.defaultData,fusedBody:!1},...v0.defaultData,camera:ye.defaultData},vO.isUIPage=function(e){return void 0!==e.uiScene},(h=ya||(ya={})).defaultCamera={position:[0,0,1e3],scale:[1,1,1],rotation:[0,0,0],hiddenMatrix:gs.identity,name:"Play Camera",visible:!0,raycastLock:!1,physics:gy.defaultData,states:new pb,events:new pb,cloner:null,pathSnapping:{pathId:null,orientation:"tangential",slide:0,offset:0},...gu.defaultData},h.KeysByResetCategory={States:["states"],Events:["events"],Material:["material","materials"],Geometry:["geometry"],Position:["position"],Rotation:["rotation"],Scale:["scale"],Transform:["position","scale","rotation","hiddenMatrix"],Name:["name"],Visibility:["visible","raycastLock","flatShading","wireframe","side"],Shadows:["castShadow","receiveShadow"],Cloner:["cloner"],Physics:["physics"]},h.defaultMeshObject={name:"Rectangle",...v4.defaultData,...v7.defaultData,geometry:vq.defaultData("RectangleGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultBooleanObject={name:"Boolean",...v4.defaultData,...v7.defaultData,geometry:vq.defaultData("BooleanGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultTextObject={name:"Text",...v4.defaultData,...v7.defaultData,geometry:vq.defaultData("TextGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultInputObject={name:"Input",...v4.defaultData,...v7.defaultData,geometry:vq.defaultData("InputGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},(vR=yn||(yn={})).newEmpty=function(e,t){let i={name:t};return"Mesh"===e.type?(i.geometry={},"material"in e&&(i.material={layers:new pM}),"materials"in e&&(i.materials=e.materials.map(e=>({layers:new pM})))):gd.is(e.type)&&(i.perspective={},i.orthographic={}),i},vR.toOps=function(e,t){let i,r=[],s={orthographic:0,perspective:0,geometry:0};function a(e,t){for(let[i,s]of Object.entries(t.layers)){let{texture:t,...a}=s;if(void 0!==t&&Object.keys(t).length>0){let s={path:[...e,"layers",i,"texture"],props:t,type:0};r.push(s)}if(Object.keys(a).length>0){let t={path:[...e,"layers",i],props:a,type:0};r.push(t)}}}for(let[e,o]of Object.entries(t))if("name"!==e){if("cloner"===e)r.push(...gf.toOps(o,["cloner"]));else if("pathSnapping"===e)r.push({path:[e],props:{slide:o.slide,offset:o.offset},type:0});else if("material"===e)a(["material"],o);else if("materials"===e)for(let[e,t]of Object.entries(o))a(["materials",e],t);else if(0===s[e]){if("geometry"===e&&void 0!==o.extrusion){let t={path:[e,"extrusion"],props:o.extrusion,type:0};r.push(t),o={...o},delete o.extrusion}if(Object.keys(o).length>0){let t={path:[e],props:o,type:0};r.push(t)}}else void 0===i&&(i={path:[],props:{}
3139,type:0},r.push(i)),i.props[e]=o}return r},vR.patch=function(e,t){if(void 0===t)return e;let i={...e};return(Object.assign(i,v3.merge(i,t)),Object.assign(i,{pathSnapping:Object.assign({},i.pathSnapping,{slide:t.pathSnapping?.slide??i.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??i.pathSnapping?.offset??0})}),gd.is(e.type))?(i.orthographic={...i.orthographic},i.perspective={...i.perspective},t.orthographic?.zoom!==void 0&&(i.orthographic.zoom=t.orthographic.zoom),t.perspective?.zoom!==void 0&&(i.perspective.zoom=t.perspective.zoom),void 0!==t.isUpVectorFlipped&&(i.isUpVectorFlipped=t.isUpVectorFlipped),void 0!==t.targetOffset&&(i.targetOffset=t.targetOffset)):"Mesh"===e.type?("geometry"in t&&Object.assign(i,{geometry:vW.merge(i.geometry,t.geometry)}),(t.material||t.materials)&&(i=function(e,t){if(void 0===t)return e;let i={...e};return"material"in i&&"material"in t&&t.material&&(i.material=pq(i.material,e=>{if("string"!=typeof e)for(let[i,r]of Object.entries(t.material.layers)){let t=e.layers.data(i);t&&gE.patch(t,r)}}).data),i.materials&&t.materials&&(i.materials=pq(i.materials,e=>{for(let r=0;r<i.materials.length;r++){let i=t.materials[r];if("string"!=typeof i)for(let[t,s]of Object.entries(i.layers)){let i=e[r]?.layers?.data(t);i&&gE.patch(i,s)}}}).data),i}(i,t)),i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gp.merge(i.cloner,t.cloner)})):"Empty"===e.type?i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gp.merge(i.cloner,t.cloner)}):gm.is(e.type)&&(void 0!==t.intensity&&(i.intensity=t.intensity),void 0!==t.color&&("string"==typeof t.color?i.color=t.color:i.color=ga.clone(t.color))),i},(yo||(yo={})).defaultData={enablePan:!0,enableZoom:!0,enableRotate:!0,enableDamping:!0,rotationLimitsMode:0,rotationVerticalOffset:{min:Math.PI/4,max:Math.PI/4},rotationHorizontalOffset:{min:Math.PI/4,max:Math.PI/4},rotationSoftLimit:2,panLimitsMode:0,panVerticalOffset:{min:250,max:250},panHorizontalOffset:{min:250,max:250},panSoftLimit:2,zoomLimitsEnabled:!1,zoomLimits:{min:.1,max:2},autoRotate:!1,autoRotateSpeed:2,autoRotateClockwise:!0,hoverRotatePanMode:0,hoverRotatePanStrength:20,hoverRotateDamping:.125,isTouchZoom:!0,orbitTouches:2,panTouches:3,resetHoverEffectOnPointerLeave:!0},(yl||(yl={})).defaultData={orbitControls:yo.defaultData,playPage:md,withBackground:!0,preventScroll:!1,preventTouchScroll:!1,hideCursor:!1,mouseEventTarget:"canvas",joystickSizeAndXYOffset:Array(12).fill(0).map((e,t)=>{let i=0,r=0;return t<5?r=-30:t<10&&(r=30),0===t||10===t||5===t?i=30:(4===t||11===t||9===t)&&(i=-30),[120,[i,r],"show"]}),settings:{image:{format:"jpg",ratio:1},video:{format:"mp4",imageFormat:"jpg",fps:30,mbps:80,ratio:Math.max(1,"u">typeof window?Math.floor(window.devicePixelRatio):1),stopMode:"manual",duration:5e3},web:{logo:!0,compress:!0,preset:1,preload:!0,hint:!1,imageQuality:70}},stopRaycast:!0,hdTransmission:!1},(yh||(yh={})).defaultData={id:"basic",label:"Basic",style:"None",prompt:""},(yc||(yc={})).defaultData={weather:0,shadows:0,lightOrigin:0,temperature:0,sun:0,camera:0,environment:0,particles:0,nature:0,floor:0},(c=yd||(yd={})).defaultData=()=>({mode:"line-art-both",prompt:"",negativePrompt:"",style:{...yh.defaultData},isRandomSeed:!0,seed:c.generateSeed(),guessMode:!1,advanced:!1,steps:20,guidanceScale:7.5,controlNetScale:1,modifiers:yc.defaultData}),c.generateSeed=()=>Math.round(1e5*Math.random()),(vL=yu||(yu={})).physicsEnabled=function(e){return void 0!==e.find(e=>"Page"===e.data.type&&e.data.globalPhysics.usePhysics)},vL.traverseModuleInstances=function(e,t,i){e.scene.objects.traverseFrom(t,(t,r)=>{if("Instance"===r.type){let s=yM.getComponentData(e,r.component)?.data;s&&i(t,r,s.events)}else i(t,r,r.events)})},(e=>{function t(t=!0,i=[]){let r=[],s=ya.defaultMeshObject;t&&(r.push({...e.defaultLight}),r.push({fi:1,id:"7ba78968-2a55-48f2-b14c-5191da3e075e",data:s,children:[]})),r.push(...i);let a=new px;return a.push({fi:1,id:md,data:{...ys.defaultData,name:"Scene 1"},children:r}),a}function i(t){return{...e.defaultData,objects:uW(t,px.prototype)}}e.TRASH_CAN_ID="830a2708-8ed9-49cf-a68e-085299892222",e.defaultLight={fi:-1,data:yt.defaultDirectionalLightData,id:"830a2708-8ed9-49cf-a68e-085299899103",children:[]},e.createDefaultObjectTreeWithPage=t,e.defaultData={objects:t(),publish:yl.defaultData,styles:yd.defaultData()},e.emptyDataWithoutPage=function(){return{objects:new px,publish:yl.defaultData,styles:yd.defaultData()}},e.emptyDataWithPage=function(e=!0){return{objects:t(e),publish:yl.defaultData,styles:yd.defaultData()}},e.emptyData=function(){return{objects:new px,publish:{...yl.defaultData},styles:yd.defaultData()}},e.withObjs=i,e.withObj=function(e,t){return i([{id:e,data:t,children:[],fi:0}])}})(yp||(yp={})),(yf||(yf={})).defaultData={preset:"fullscreen",allowResponsive:!1,size:[512,512],coords:[0,0],sceneScale:1,color:{r:0,g:0,b:0,a:.5}},(d=ym||(ym={})).defaultData=e=>({url:e,name:"New Webhook",parametersSchemas:new pb}),d.defaultParameterValueByType=e=>"number"===e?0:"boolean"!==e&&"",(yg||(yg={})).defaultData=(e,t="GET")=>({url:e,method:t,name:"New API",headers:new pb,queries:new pb,autoStart:!0}),(e=>{function t(e){return void 0!==e.textValue}function i(e){return"boolean"==typeof e}e.isTextValue=t,e.isNumber=function(e){return"number"==typeof e},e.isBoolean=i,e.typeOfVariable=function(e){return t(e)?"string":i(e)?"boolean":"number"},e.getDisplayedValue=function(t){return e.isTextValue(t)?Array.isArray(t.textValue)?t.textValue.map(e=>e.toString().padStart(t.padding??2,"0")).join(t.deliminator??":")+(void 0!==t.suffix?" "+t.suffix:""):t.textValue.toString():e.isBoolean(t)?t?"True":"False":e.isNumber(t)?parseFloat(t.toFixed(3)).toString():t.toString()}})(yv||(yv={})),(yy||(yy={})).all=["images","videos","colors","audios","particles","fonts","materials","variables"],(yx||(yx={}
3139)).all=[...yy.all,"components"],(yb||(yb={})).defaultData=function(){return{images:new pp,videos:new pp,colors:new pp,audios:new pp,particles:new pp,fonts:new pp,materials:new pp,components:new pp,variables:new pp,userAPIs:new pp,userWebhooks:new pp}},(yw||(yw={})).defaultData=function(){return{images:new pp,videos:new pp,colors:new pp,audios:new pp,particles:new pp,fonts:new pp,materials:new pp,components:new pp,variables:new pp,userAPIs:new pp,userWebhooks:new pp}},(vB=yS||(yS={})).defaultColors=function(){let e={};return e["89b10010-844c-11ec-a8a3-0242ac120002"]={r:.5,g:.5,b:.5,a:1,name:"Default Color"},uW(e,pp.prototype)},vB.defaultImages=function(){return uW({},pp.prototype)},vB.emptyData=function(){return{catelogs:new pp,materials:new pp,images:new pp,videos:new pp,colors:new pp,audios:new pp,particles:new pp,fonts:new pp,variables:new pb,userAPIs:new pp,userWebhooks:new pp,lib:yw.defaultData()}},vB.defaultVariables=function(e){switch(e){case"number":return{value:0,name:"Number"};case"boolean":return{value:!1,name:"Boolean"};case"string":return{value:{textValue:"String value"},name:"String"};case"time":let t=[0,0,0];return{name:"Time",value:{textValue:t,deliminator:":",padding:2,suffix:"AM"},dynamicVariableType:"time",format:"HH:mm:ss",format12h24h:"12ampm",timeZone:null,hasEnd:!1,endValue:{textValue:t,deliminator:":",padding:2,suffix:"AM"},autoStart:!0,repeat:!1};case"counter":return{name:"Counter",value:0,dynamicVariableType:"counter",updateInterval:1e3,increment:1,autoStart:!0,hasEnd:!0,endValue:60,repeat:!0,randomStart:!1,range:[0,100],decimals:0};case"random":return{name:"Random",value:0,dynamicVariableType:"random",updateInterval:1e3,increment:1,autoStart:!0,isStatic:!1,hasEnd:!0,endValue:60,repeat:!0,min:0,max:100,decimals:0};default:console.error("Unknown variable type",e)}},vB.getFormattedTimerTime=function(e,t){if("HH:mm:ss"===t.format){let t=Math.floor(e/3600),i=Math.floor((e-3600*t)/60),r=Math.round(e-3600*t-60*i);return{textValue:[t,i,r]}}if("mm:ss"!==t.format)return e="number"===t.format?Math.round(e):Math.round(1e3*e)/1e3;{let t=Math.floor(e/60),i=Math.round(e-60*t);return{textValue:[t,i]}}},(y_||(y_={})).list=["idle","move","jump","run"],(u=yA||(yA={})).defaultColliderData={type:"capsule",height:200,radius:50,position:[0,0,0],rotation:[0,0,0]},u.defaultDataThirdPerson={moveMode:"walk",forwardDirection:"+z",speedTranslate:1e3,speedRotate:100,runMultiplier:2,rotationMode:"normal",rotBy:"keys",rotByTouch:"drag",delayPos:[.3,.3],delayRot:[.3,.3],keyAssignments:[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","▲"],["rotPosY","◀"],["rotNegX","▼"],["rotNegY","▶"],["jump","Space"],["run","⇧"],["none","Ctrl"]],touchControl:!0,joystickPosLoc:5,joystickRotLoc:11,jumpTouchButtonLoc:9,collider:u.defaultColliderData,colliderHelperVisible:!0,collisionEnabled:!0,jumpPower:100,resetYPosition:3e3,alignToGround:!1,autoOrientMove:!0,orientWith:"camera",orientMode:"radial",delayPosCamera:.3,delayRotCamera:.3,camera:"",cameraXAxis:"Limit",cameraYAxis:"Free",cameraRotXLimits:[0,Math.PI/2],cameraRotYLimits:[-Math.PI/2,Math.PI/2],gameActions:{idle:new pb,move:new pb,jump:new pb,run:new pb},navmesh:{enabled:!1,ch:6,cs:6,walkableClimb:5,walkableHeight:1,walkableRadius:0,zones:"all",objects:[],helperVisible:!0,destinationHelperRadius:0,destinationHelperColor:gn.fromHexAndA(3728051,1)}};var gq=180/Math.PI;function gX(e){e.rotation=e.rotation.slice(0,3).map(e=>e*gq)}function gY(e){gX(e),"Page"===e.type&&gX(e.camera),e.states?.forEach(e=>{void 0===e.rotation||null===e.rotation||(e.rotation=e.rotation.slice(0,3).map(e=>e*gq))});let t=e.geometry;t&&"SphereGeometry"===t.type&&(t.thetaLength=(t.thetaLength??180)*gq),t&&"TorusGeometry"===t.type&&(t.arc=t.arc*gq),t&&"PathGeometry"===t.type&&(t.extrusion.angle*=gq,t.extrusion.twist*=gq),"Mesh"===e.type&&"TextGeometry"===e.geometry.type&&(e.geometry.text={textValue:e.geometry.text}),Array.isArray(pX(e.events))&&e.events?.forEach(e=>{("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type||"Collision"===e.type||"Trigger"===e.type)&&(e.runMode=e.toggle?"Toggle":"Repeat")})}function gQ(e){let t=e.schema??0;if(115!==t){let i;for(let i of(console.warn("updating from ",t,"to ",115),function(e,t){let i,r;if(t<1&&(gB(e,gR),gL(e,gR),e.schema=1),t<2&&(Object.assign(e.scene.publish,{orbitControls:{...yo.defaultData,...pX(e.scene.publish.orbitControls)}}
3139),e.schema=2),t<3&&(function(e){function t(e){if(e.layers){for(let t of Object.values(e.layers))if(t){for(let[e,i]of Object.entries(t))if((gC.includes(e)||"boolean"==typeof i)&&delete t[e],"texture"===e)for(let[e,t]of Object.entries(i))(gT.includes(e)||"boolean"==typeof t)&&delete i[e]}}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{e.material?t(e.material):e.materials&&e.materials.forEach(e=>{t(e)})})})}(e),e.schema=3),t<4&&(e.scene.publish.withBackground=!0,e.schema=4),t<5&&(e.scene.publish.settings.web={compress:!0,preload:!0,preset:1,logo:!0,hint:!1},e.schema=5),t<6&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.cloner;i&&(i.radial.scale=i.radial.scale.map(e=>e+1),i.linear.scale=i.linear.scale.map(e=>e+1))})}(e),e.schema=6),t<7&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&("DodecahedronGeometry"===i.type||"IcosahedronGeometry"===i.type)&&(i.detail=Math.round(i.detail))})}(e),e.schema=7),t<8&&(e.schema=8),t<9&&(gN(e),e.schema=9),t<10&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("BooleanGeometry"===t.geometry.type||"SubdivGeometry"===t.geometry.type)&&(t.geometry.phongAngle=35)})}(e),e.schema=10),t<11&&(e.scene.environment.ambientLight.softShadows=!1,e.scene.environment.ambientLight.softShadowQuality="low",e.scene.objects.traverse((e,t)=>{("DirectionalLight"===t.type||"SpotLight"===t.type)&&(t.shadowResolution=1024,t.shadowRadius=1,t.depth=1e5)}),e.shared.penumbraSize=[,,,,,].fill(.5),e.schema=11),t<12&&(gN(e),e.schema=12),t<13&&(e.shared.audios=uW({},pp.prototype),e.schema=13),t<14&&(Object.entries(i=e.shared.materials).forEach(([e,t])=>{t.layers||Object.assign(i,{[e]:{name:"Untitled Material",layers:[{fi:0,data:{type:"light",category:"phong",alpha:.6,visible:!0,mode:0,specular:{r:.2,g:.2,b:.2},shininess:5},id:"layer1"},{fi:1,data:{type:"color",alpha:1,visible:!0,mode:0,color:{r:.2823529411764706,g:.2823529411764706,b:.30196078431372547}},id:"layer2"}]}})}),e.schema=14),t<15&&(Object.entries(pX(e.shared.images)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.images[t]}),Object.entries(pX(e.shared.audios)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.audios[t]}),e.schema=15),t<16&&(e.scene.publish.settings.web.preload=!1,e.schema=16),t<17&&(gB(e,gU),gL(e,gU),e.schema=17),t<18&&(gB(e,gz),gL(e,gz),e.schema=18),t<19&&(Object.assign(e.scene.publish.settings,{video:{...yl.defaultData.settings.video,...pX(e.scene.publish.settings.video)}}),e.schema=19),t<20&&(e.shared.fonts=uW({},pp.prototype),r=[],e.scene.objects.traverse((t,i)=>{if("TextFrame"===i.type){let s=vk.defaultTwoLayerData("phong"),a="string"==typeof i.color?e.shared.colors[i.color]:i.color;s.layers[1].data.color={r:a.r,g:a.g,b:a.b},s.layers[1].data.alpha=i.alpha;let o=i.font.replace(".typeface","").replace(/optimer/gi,"open sans").replace("space_mono","space mono").replace(/alma_mono/gi,"varela round").replace(/droid_sans_mono/gi,"noto sans mono").replace(/droid_sans|gentilis|gnomon_(simple|foreground)|helvetiker/gi,"roboto").replace(/droid_serif/gi,"roboto slab").replace("_sans"," sans").replace("crimson_text","crimson text").replace("medium_medium","medium").replace("fatface_fatface","fatface").replace("100hairline","thin").replace("200thin","extralight").replace("300light","light").replace("500medium","medium").replace("600semi","semibold").replace("800heavy","extrabold").replace("900black","black").replace(/bodoni_(11|16|24|36|48|72|96)([^_])/gi,"bodoni_$1_$2").replace(/bodoni_(11|16|24|36|48|72|96)/gi,"bodoni moda").replace(/(thin|hairline)(_regular)?/gi,"100").replace(/(extra|ultra)light(_regular)?/gi,"200").replace(/light(_regular)?/gi,"300").replace(/_book|_normal|_roman/gi,"_regular").replace(/medium(_regular)?/gi,"500").replace(/(semi|demi)bold(_regular)?/gi,"600").replace(/(extra|ultra)bold(_regular)?/gi,"800").replace(/bold(_regular)?/gi,"700").replace(/(black|heavy|fatface)(_regular)?/gi,"900").replace(/([1-9]00)_italic/gi,"$1italic").replace(/regularitalic/gi,"italic").replace(/regularitalic/gi,"italic").split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");void 0===e.shared.fonts[o]&&(e.shared.fonts[o]={name:o});let l={name:i.name,...v4.defaultData,...v7.defaultData,flatShading:!1,wireframe:!1,geometry:{...vq.defaultData("TextGeometry"),width:i.width,height:i.height,font:o,depth:0,horizontalAlign:i.horizontalAlign,verticalAlign:i.verticalAlign,fontSize:1.40625*i.fontSize,lineHeight:i.lineHeight/1.40625,letterSpacing:i.letterSpacing-1,text:i.text,textTransform:i.textTransform,extrudeBevelSize:0,extrudeBevelSegments:1},material:s,states:pX(i.states),events:pX(i.events),visible:i.visible,raycastLock:i.raycastLock,position:i.position,rotation:i.rotation,scale:i.scale,hiddenMatrix:i.hiddenMatrix}
3139,h=pX(e.scene.objects).parent(t);e.scene.objects.insertAfter(h??null,t,[{id:t+"new",data:l,children:[]}]),r.push(t)}}),r.forEach(t=>{e.scene.objects.delete(t)}),e.schema=20),t<21&&(function(e){let t={0:"MouseDown",1:"MouseUp",2:"MouseHover",5:"KeyDown",6:"KeyUp",7:"Start",9:"LookAt",10:"Follow",11:"Scroll",12:"Audio",13:"GameControl"};e.scene.objects.traverse((e,i)=>{i.events.forEach(e=>{if(t[Number(e.type)]){if(Object.assign(e,{type:t[Number(e.type)]}),"Audio"===e.type&&"audioEvent"in e&&(Object.assign(e,{playAudio:e.audioEvent}),delete e.audioEvent),"GameControl"===e.type)Object.assign(e,{gameActions:{idle:new pb,move:new pb,jump:new pb}});else{let t=new pb;Object.assign(e,{actions:t}),("MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type)&&"url"in e&&t.push({fi:0,id:tZ.generateUUID(),data:{type:"Link",url:e.url,delay:0}}),"targets"in e&&(e.targets.forEach((e,i,r)=>{let s={easing:e.easing,duration:e.duration};6===e.easing?Object.assign(s,uj(e,"mass","stiffness","damping","velocity")):5===e.easing&&Object.assign(s,{control1:{...e.control1},control2:{...e.control2}});let a={repeat:e.repeat?-1:0,delay:e.delay,delayDirection:e.delayDirection,direction:e.cycle&&e.rewind?"pingpong-rewind":e.cycle?"pingpong":"normal"},o={state:e.state,...a,...s},l={allowSlerp:!0,type:"Transition",object:e.object,repeat:0,delay:0,delayDirection:void 0,direction:"normal",tweens:new pb({fi:0,id:tZ.generateUUID(),data:{state:void 0,repeat:0,delay:0,delayDirection:void 0,direction:"normal",duration:0,easing:4}},{fi:1,id:tZ.generateUUID(),data:o})};t.push({fi:r,id:i,data:l})}),delete e.targets)}}})})}(e),function(e){e.scene.objects.traverse((e,t)=>{function i(e,i){let r=new pb,s=[];if(t.events.forEach((e,t,a)=>{if("Audio"===e.type&&e.trigger===i){let i;s.push(t),"play"===e.interaction?i={...uj(e,"interaction","audio","delay","volume","loop"),triggerAfter:"after"in e?e.after:void 0,toggle:"after"in e?e.toggle:void 0,type:"Audio"}:("pause"===e.interaction||"stop"===e.interaction)&&(i={...uj(e,"interaction","delay","object","playAudio"),type:"Audio"}),i&&r.push({fi:a,id:t,data:i})}}),s.forEach(e=>t.events.delete(e)),r.length){let i=t.events.find(t=>t.type===e)?.data;i?"actions"in i&&i.actions.insertBefore(null,r):t.events.insertBefore(null,[{id:tZ.generateUUID(),data:{type:e,actions:r}}])}}i("Start","start"),i("MouseDown","mouseDown"),i("MouseUp","mouseUp"),i("KeyDown","keyDown"),i("KeyUp","keyUp")})}(e),e.schema=21),t<22&&(gj(e),e.schema=22),t<23&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(t.geometry.scaleBaked||(t.geometry.scaleBaked=[1,1,1]))})}(e),e.schema=23),t<24&&(function(e){e.scene.objects.traverse((e,t)=>{"Empty"!==t.type&&"Mesh"!==t.type||!t.cloner||t.cloner.randomnessObject||t.cloner.toObject||t.cloner.randomness||(t.cloner={...t.cloner,toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}})})}(e),e.schema=24),(t<25||void 0===e.shared.videos)&&(e.shared.videos=uW({},pp.prototype),t<25&&(e.schema=25)),t<26&&(function(e){e.scene.objects.traverse((t,i)=>{let r=e.scene.objects.unproxy().parent(t);if(r){let t=pX(e.scene.objects.data(r));t&&"Mesh"===t.type&&"BooleanGeometry"===t.geometry.type&&"Mesh"===i.type&&(i.visible=!0!==pX(i).booleanExclude)}})}(e),e.schema=26),t<27&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("NonParametricGeometry"===t.geometry.type?void 0!==t.material&&delete t.material:void 0!==t.materials&&delete t.materials)})}(e),e.schema=27),t<28&&(gj(e),e.schema=28),t<29&&(function(e){function t(e){for(let i in Object.setPrototypeOf(e,pM.prototype),e){var t;Object.setPrototypeOf(t=e[i],pM.prototype),t.texture&&Object.setPrototypeOf(t.texture,pM.prototype)}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{if(e.material){let i=pX(e.material).layers;t(i),e.material.layers=i}if(e.materials)for(let i=0;i<e.materials.length;i++){let r=e.materials[i],s=pX(r).layers;t(s),r.layers=s}})})}(e),e.schema=29),t<30&&(function(e){e.scene.objects.traverse((e,t)=>
vendor: 4,122 bytes, line 3139
3139{"Mesh"!==t.type||"NonParametricGeometry"!==t.geometry.type||"material"in t||"materials"in t||(t.material=vk.defaultTwoLayerData("phong"))})}(e),e.schema=30),t<31&&(void 0===e.scene.publish.orbitControls.autoZoom&&(e.scene.publish.orbitControls.autoZoom=!1),e.scene.objects.traverse((e,t)=>{("OrthographicCamera"===t.type||"PerspectiveCamera"===t.type)&&(void 0===t.orthographic.autoZoom&&(t.orthographic.autoZoom=!1),void 0===t.orthographic.autoZoomFrustumSize&&(t.orthographic.autoZoomFrustumSize=790))}),e.schema=31),t<33&&(function(e){e.scene.objects.traverse((e,t)=>{void 0===t.pathSnapping&&(t.pathSnapping={pathId:null,slide:0,offset:0,orientation:"tangential"}),void 0===t.pathSnapping.offset&&(t.pathSnapping.offset=0)})}(e),e.schema=33),t<34&&(void 0===e.scene.publish.mouseEventTarget&&(e.scene.publish.mouseEventTarget="canvas"),void 0===e.scene.publish.settings.web.hint&&(e.scene.publish.settings.web.hint=!1),e.schema=34),t<35&&(function(e){let{video:t}=e.scene.publish.settings;"gif"===t.format&&t.fps>48&&(t.fps=15)}(e),e.schema=35),t<36&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.resetYPosition=Math.abs(e.resetYPosition-t.position[1]))})})}(e),e.schema=36),t<37&&(function(e){let t=e.scene.environment.usePhysics;e.scene.objects.traverse((e,i)=>{t&&null===i.physics?i.collision=!1:i.collision="visibility"})}(e),e.schema=37),t<38&&(gB(e,gk),gL(e,gk),e.schema=38),t<39&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.navmesh=yA.defaultDataThirdPerson.navmesh)})})}(e),e.schema=39),t<40&&(e.scene.styles||(e.scene.styles=yd.defaultData()),e.schema=40),t<41&&(void 0===e.scene.environment.ambientLight.occlusion&&(e.scene.environment.ambientLight.occlusion=!1),void 0===e.scene.environment.ambientLight.aoFullRes&&(e.scene.environment.ambientLight.aoFullRes=!1),void 0===e.scene.environment.ambientLight.radius&&(e.scene.environment.ambientLight.radius=256),void 0===e.scene.environment.ambientLight.bias&&(e.scene.environment.ambientLight.bias=.5),void 0===e.scene.environment.ambientLight.aoColor&&(e.scene.environment.ambientLight.aoColor={r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}),gB(e,gG),gL(e,gG),e.schema=41),t<42&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&Object.assign(e.gameActions,{run:new pb})})})}(e),e.schema=42),t<43&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.keyAssignments=[...e.keyAssignments,["run","⇧"],["none","Ctrl"]])})})}(e),e.schema=43),t<99){gB(e,gH),gL(e,gH),null===e.scene.publish.playCamera&&(e.scene.publish.playCamera=mc);let t=pX(e.scene.objects),i=e.scene.objects;for(let r of(e.scene.publish.playPage=md,i.insertBefore(null,null,[{id:md,data:{...ys.defaultData,backgroundColor:e.scene.backgroundColor,fog:e.scene.fog,postprocessing:e.scene.postprocessing,ao:uj(e.scene.environment.ambientLight,"occlusion","aoFullRes","radius","bias","aoColor"),publish:{playCamera:e.scene.publish.playCamera,gameControlObject:e.scene.publish.gameControlObject},shadow:uj(e.scene.environment.ambientLight,"softShadowQuality"),globalPhysics:{...vJ.defaultData,...uj(e.scene.environment,"usePhysics","gravity")},camera:pX(e.scene.ownerCamera)??ys.defaultData.camera,name:"Scene"},children:[]}]),t))r.id!==yp.TRASH_CAN_ID&&i.move(md,r.fi,r.id);let r=0,s=0;e.shared.penumbraSize&&e.scene.objects.traverse((t,i)=>{"DirectionalLight"===i.type?(i.penumbraSize=e.shared.penumbraSize[Math.min(r,2)],r+=1):"SpotLight"===i.type&&(i.penumbraSize=e.shared.penumbraSize[3+Math.min(s,1)],s+=1),(void 0===i.physics||null===i.physics)&&"Instance"!==i.type&&(i.physics={},Object.assign(i.physics,gy.defaultData)),void 0!==i.physics&&null!==i.physics&&(i.physics.enabled=i.collision??"visibility",delete i.collision)}),e.schema=99}}(e,t),t<100&&(void 0===e.scene.publish.joystickSizeAndXYOffset&&(e.scene.publish.joystickSizeAndXYOffset=yl.defaultData.joystickSizeAndXYOffset),e.schema=100),t<101&&(gB(e,gW),gL(e,gW),e.schema=101),t<102&&(function(e){e.scene.objects.traverse((e,t)=>
3139{let i=t.geometry;i&&"PathGeometry"===i.type&&(i.extrusion.capType="flat",i.extrusion.bevel=50,i.extrusion.bevelSides=6,"Custom"===i.extrusion.shape.type&&(i.extrusion.shape.shapeQuality="low"))})}(e),e.schema=102),t<104&&(e.shared.catelogs=new pp,e.shared.lib=yw.defaultData(),e.schema=104),t<105&&(e.shared.variables=uW({},pp.prototype),e.scene.objects.traverse((e,t)=>{gY(t)}),e.schema=105),Object.values(e.shared.lib.components)))!function(e){let t=e.schema??104;115!==t&&t<105&&(function e(t,i){for(let r of(i(t.data),t.children))e(r,i)}(e.asset,gY),e.schema=105)}(i);t<106&&(i=pX(e.shared.variables),e.shared.variables=uW(Object.entries(i??{}).map(([e,t],i)=>({fi:i,id:e,data:t})),pb.prototype),e.schema=106),t<107&&(e.shared.lib.variables=yw.defaultData().variables,e.schema=107),t<109&&(e.shared.particles=uW({},pp.prototype),e.shared.lib&&(e.shared.lib.particles=yw.defaultData().particles),e.schema=109),t<110&&(function(e){e.scene.objects.traverse((e,t)=>{"Particle"===t.type&&"number"==typeof t.renderMaterial.size&&Object.assign(t.renderMaterial,{size:[t.renderMaterial.size,t.renderMaterial.size]})})}(e),e.schema=110),t<111&&(e.scene.objects.traverse((e,t)=>{Array.isArray(pX(t.events))&&t.events?.forEach(e=>{"disabled"in e||(e.disabled=!1),("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type)&&(e.mode=e.mode||"Object")})}),e.schema=111),t<112&&(function(e){e.scene.objects.traverse((e,t)=>{"Page"===t.type&&(t.postprocessing.depthOfField.focusDistance=100,t.postprocessing.depthOfField.focalLength=20,t.postprocessing.depthOfField.bokehScale=5)})}(e),e.schema=112),t<113&&(function(e){e.scene.objects.traverse((e,t)=>{!1!==Array.isArray(pX(t.events))&&t.events?.forEach(e=>{let t=e.runMode;"MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"Collision"===e.type||"Trigger"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode=t??"Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle"===t?"Toggle":"Normal")}):"MouseHover"===e.type||"MousePress"===e.type||"KeyPress"===e.type?e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}):"GameControl"===e.type?(delete e.actions,Object.keys(e.gameActions).forEach(t=>{e.gameActions[t]?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),"Animation"===e.type&&(e.runMode="Normal")})})):"DragDrop"===e.type?(delete e.actions,e.dragDropActions?.drag?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}),e.dragDropActions?.drop?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})):"Resize"===e.type?(delete e.actions,e.breakpoints?.forEach(e=>{e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})})):"Start"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Once"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"VariableChange"===e.type||"Scroll"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"Conditional"===e.type&&(delete e.actions,e.inActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}),e.outActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}))})})}(e),e.schema=113),t<114&&(void 0===e.scene.publish.settings.web.imageQuality&&(e.scene.publish.settings.web.imageQuality=70),e.schema=114),t<115&&(e.shared.userAPIs=uW({},pp.prototype),e.shared.userWebhooks=uW({},pp.prototype),e.shared.lib&&(e.shared.lib.userAPIs=yw.defaultData().userAPIs,e.shared.lib.userWebhooks=yw.defaultData().userWebhooks),e.schema=115)}}function gZ(e,t=!1){let i=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),s=new Set(Object.keys(e[0].morphAttributes)),a={},o={},l=e[0].morphTargetsRelative,h=new rN,c=0;for(let d=0;d<e.length;++d){let u=e[d],p=0;if(i!==(null!==u.index))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;
3139for(let e in u.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===a[e]&&(a[e]=[]),a[e].push(u.attributes[e]),p++}if(p!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". Make sure all geometries have the same number of attributes."),null;if(l!==u.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(let e in u.morphAttributes){if(!s.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". .morphAttributes must be consistent throughout all geometries."),null;void 0===o[e]&&(o[e]=[]),o[e].push(u.morphAttributes[e])}if(t){let e;if(i)e=u.index.count;else{if(void 0===u.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". The geometry must have either an index or a position attribute"),null;e=u.attributes.position.count}h.addGroup(c,e,d),c+=e}}if(i){let t=0,i=[];for(let r=0;r<e.length;++r){let s=e[r].index;for(let e=0;e<s.count;++e)i.push(s.getX(e)+t);t+=e[r].attributes.position.count}h.setIndex(i)}for(let e in a){let t=gK(a[e]);if(!t)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" attribute."),null;h.setAttribute(e,t)}for(let e in o){let t=o[e][0].length;if(0===t)break;h.morphAttributes=h.morphAttributes||{},h.morphAttributes[e]=[];for(let i=0;i<t;++i){let t=[];for(let r=0;r<o[e].length;++r)t.push(o[e][r][i]);let r=gK(t);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" morphAttribute."),null;h.morphAttributes[e].push(r)}}return h}function gK(e){let t,i,r,s=0;for(let a=0;a<e.length;++a){let o=e[a];if(o.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=o.array.constructor),t!==o.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===i&&(i=o.itemSize),i!==o.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=o.normalized),r!==o.normalized)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;s+=o.array.length}let a=new t(s),o=0;for(let t=0;t<e.length;++t)a.set(e[t].array,o),o+=e[t].array.length;return new rC(a,i,r)}(vz=yM||(yM={})).defaultData={schema:115,scene:yp.defaultData,frames:new pp().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yf.defaultData),shared:{...yS.emptyData(),colors:yS.defaultColors()}},vz.emptyDataForImports=function(){return{schema:115,scene:yp.emptyDataWithPage(),frames:new pp().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yf.defaultData),shared:{...yS.emptyData(),colors:yS.defaultColors(),images:yS.defaultImages()}}},vz.emptyData=function(){return{schema:115,scene:yp.emptyDataWithPage(),frames:new pp().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yf.defaultData),shared:yS.emptyData()}},vz.clipboard2dData=function(){return{schema:115,scene:yp.emptyData(),frames:new pp,shared:yS.emptyData()}},vz.collabHelper={...p1,updateSchema:e=>(e.schema??0)<115?pq(e,gQ):(e.schema??0)-115},vz.updateSchemaDirectly=function(e){let t=vz.collabHelper.updateSchema(e);return"number"==typeof t?0===t?e:null:t.data},vz.withoutLib=function(e){return{...e,shared:{...e.shared,lib:yw.defaultData()}}},vz.getComponentData=function(e,t){let i=e.scene.objects.get(t);if(i&&"Component"===i.data.type)return i;{let i=e.shared.lib.components[t];if(i)return i.asset}},vz.hasSensitiveData=function(e){for(let t of Object.values(e.shared.userAPIs))for(let e of t.headers)if("authorization"===e.data.key.toLowerCase()&&""!==e.data.value)return!0;return!1},(yE||(yE={})).emptyImage={data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=",name:"empty"},(yC||(yC={})).is=function(e){return!0},(vF=yT||(yT={})).defaultData={position:[0,0],scale:[1,1],rotation:0,shear:[0,0]},vF.merge=function(e,t){return{position:t?.position??e.position,rotation:t?.rotation??e.rotation,scale:t?.scale??e.scale,shear:t?.shear??e.shear}},vF.diff=function(e,t){return uH({position:ge.isEqual(e.position,t.position)?void 0:t.position,rotation:e.rotation===t.rotation?void 0:t.rotation,scale:ge.isEqual(e.scale,t.scale)?void 0:t.scale,shear:e.shear&&t.shear&&ge.isEqual(e.shear,t.shear)?void 0:t.shear})},(yP||(yP={})).defaultData={horizontalConstraint:0,verticalConstraint:0},(yD||(yD={})).defaultData={direction:"row",wrap:"unwrap",align:"top-left",gap:10,rowGap:10,autoGap:!1,autoRowGap:!1,leftPadding:8,rightPadding:8,topPadding:8,bottomPadding:8},(yI||(yI={})).defaultData={opacity:1,fill:{color:gn.fromHexAndA(5526619,1),enabled:!0},stroke:{color:gn.from0to1([0,0,0,1]),thickness:1,enabled:!1,mode:"inside"},layerBlur:{radius:2,enabled:!1},backgroundBlur:{radius:2,enabled:!1},dropShadow:{offset:[10,10],blurRadius:10,color:gn.from0to1([0,0,0,1]),enabled:!1,spread:0},innerShadow:{offset:[10,10],blurRadius:10,color:gn.from0to1([0,0,0,1]),enabled:!1,spread:0}},(vN=yO||(yO={})).newEmpty=function(e,t){return{name:t}},vN.patch=function(e,t){if(void 0===t)return e;let i={...e};return Object.assign(i,yT.merge(i,t)),i=function(e,t){if(void 0===t)return e;let i={...e};return"fill"in i&&"fill"in t&&void 0!==t.fill&&Object.assign(i,{fill:{...i.fill,...t.fill}}),"stroke"in i&&"stroke"in t&&void 0!==t.stroke&&Object.assign(i,{stroke:{...i.stroke,...t.stroke}}),"layerBlur"in i&&"layerBlur"in t&&void 0!==t.layerBlur&&Object.assign(i,{layerBlur:{...i.layerBlur,...t.layerBlur}}),"backgroundBlur"in i&&"backgroundBlur"in t&&void 0!==t.backgroundBlur&&Object.assign(i,{backgroundBlur:{...i.backgroundBlur,...t.backgroundBlur}}),"dropShadow"in i&&"dropShadow"in t&&void 0!==t.dropShadow&&Object.assign(i,{dropShadow:{...i.dropShadow,...t.dropShadow}}),"innerShadow"in i&&"innerShadow"in t&&void 0!==t.innerShadow&&Object.assign(i,{innerShadow:{...i.innerShadow,...t.innerShadow}}),i}(i=function(e,t){if(void 0===t)return e;let i={...e};for(let e of["width","height","cornerRadius"])e in i&&e in t&&void 0!==t[e]&&Object.assign(i,{[e]:t[e]});return i}(i,t),t)},vN.toOps=function(e,t){let i,r=[];for(let[e,s]of Object.entries(t))"name"!==e&&(void 0===i&&(i={path:[],props:{}
3139,type:0},r.push(i)),i.props[e]=s);return r},(yR||(yR={})).defaultData={...yT.defaultData,...yP.defaultData,states:new pb,events:new pb,visible:!0,raycastLock:!1},(yL||(yL={})).defaultData={...yR.defaultData,...yI.defaultData},(yB||(yB={})).defaultData={cornerRadius:[0,0,0,0]},(yz||(yz={})).defaultData={...yL.defaultData,type:"ellipse2d",width:100,height:100,name:"Ellipse"},(yF||(yF={})).defaultData={...yL.defaultData,...yB.defaultData,type:"rectangle2d",width:100,height:100,name:"Rectangle"},(yN||(yN={})).defaultData={...yL.defaultData,type:"text2d",width:100,height:100,fontSize:12,lineHeight:1.2,letterSpacing:0,text:{textValue:"Hello world"},horizontalAlign:1,verticalAlign:1,textTransform:1,font:"Roboto_regular",name:"Text"},(yU||(yU={})).defaultData={...yL.defaultData,type:"path2d",path:"",name:"Path"},(yk||(yk={})).is=function(e){return"ellipse2d"===e.type||"rectangle2d"===e.type||"text2d"===e.type||"vector2d"===e.type||"path2d"===e.type},(yV||(yV={})).defaultData={...yR.defaultData,name:"Group",type:"group2d"},(yj||(yj={})).defaultData=()=>({...yR.defaultData,...yB.defaultData,...yI.defaultData,name:"Frame",type:"frame2d",clipped:!0,width:200,height:200,fill:{color:gn.fromHexAndA(4737101,1),enabled:!0},stroke:{color:gn.fromHexAndA(0,1),thickness:1,enabled:!1,mode:"inside"},backgroundBlur:{radius:2,enabled:!1},layerBlur:{radius:2,enabled:!1}}),(vU=yG||(yG={})).defaultData=function(e){switch(e){case"rectangle2d":case"vector2d":return{...yF.defaultData};case"ellipse2d":return{...yz.defaultData};case"text2d":return{...yN.defaultData};case"path2d":return{...yU.defaultData};case"frame2d":return{...yj.defaultData()};case"group2d":return{...yV.defaultData}}},vU.getPivot=function(e){return"width"in e&&"height"in e?["number"==typeof e.width?.5*e.width:0,"number"==typeof e.height?.5*e.height:0]:[0,0]},vU.isResizeable=function(e){return"rectangle2d"===e.type||"ellipse2d"===e.type||"text2d"===e.type||"frame2d"===e.type},vU.isAutoLayoutable=function(e){return"frame2d"===e.type&&void 0!==e.autoLayout},vU.hasCorners=function(e){return"rectangle2d"===e.type||"frame2d"===e.type},(p=yH||(yH={})).defaultData={name:"UI",type:"scene2d",objects:new px},p.emptyData=function(){return{type:"scene2d",objects:new px}};var gJ=class{constructor(){}};function g$(e,t,i){return i.min.x=t[e],i.min.y=t[e+1],i.min.z=t[e+2],i.max.x=t[e+3],i.max.y=t[e+4],i.max.z=t[e+5],i}function g0(e){let t=-1,i=-1/0;for(let r=0;r<3;r++){let s=e[r+3]-e[r];s>i&&(i=s,t=r)}return t}function g1(e,t,i){let r,s;for(let a=0;a<3;a++){let o=a+3;r=e[a],s=t[a],i[a]=r<s?r:s,r=e[o],s=t[o],i[o]=r>s?r:s}}function g2(e,t,i){for(let r=0;r<3;r++){let s=t[e+2*r],a=t[e+2*r+1],o=s-a,l=s+a;o<i[r]&&(i[r]=o),l>i[r+3]&&(i[r+3]=l)}}function g3(e){let t=e[3]-e[0],i=e[4]-e[1],r=e[5]-e[2];return 2*(t*i+i*r+r*t)}function g4(e,t,i,r,s=null){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0,u=1/0,p=1/0,f=1/0,m=-1/0,g=-1/0,v=-1/0,y=null!==s;for(let r=6*t,s=(t+i)*6;r<s;r+=6){let t=e[r+0],i=e[r+1],s=t-i,x=t+i;s<a&&(a=s),x>h&&(h=x),y&&t<u&&(u=t),y&&t>m&&(m=t);let b=e[r+2],w=e[r+3],S=b-w,_=b+w;S<o&&(o=S),_>c&&(c=_),y&&b<p&&(p=b),y&&b>g&&(g=b);let A=e[r+4],M=e[r+5],E=A-M,C=A+M;E<l&&(l=E),C>d&&(d=C),y&&A<f&&(f=A),y&&A>v&&(v=A)}r[0]=a,r[1]=o,r[2]=l,r[3]=h,r[4]=c,r[5]=d,y&&(s[0]=u,s[1]=p,s[2]=f,s[3]=m,s[4]=g,s[5]=v)}var g5=(e,t)=>e.candidate-t.candidate,g6=Array(32).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),g8=new Float32Array(6),g9=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,r=-1/0;for(let s=0,a=e.length;s<a;s++){let a=e[s][t];i=a<i?a:i,r=a>r?a:r}this.min=i,this.max=r}setFromPoints(e,t){let i=1/0,r=-1/0;for(let s=0,a=t.length;s<a;s++){let a=t[s],o=e.dot(a);i=o<i?o:i,r=o>r?o:r}this.min=i,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};g9.prototype.setFromBox=(f=new ix,function(e,t){let i=t.min,r=t.max,s=1/0,a=-1/0;for(let t=0;t<=1;t++)for(let o=0;o<=1;o++)for(let l=0;l<=1;l++){f.x=i.x*t+r.x*(1-t),f.y=i.y*o+r.y*(1-o),f.z=i.z*l+r.z*(1-l);let h=e.dot(f);s=Math.min(h,s),a=Math.max(h,a)}this.min=s,this.max=a}),new g9;var g7=(m=new ix,g=new ix,v=new ix,function(e,t,i){let r=e.start,s=t.start;v.subVectors(r,s),m.subVectors(e.end,e.start),g.subVectors(t.end,t.start);let a=v.dot(g),o=g.dot(m),l=g.dot(g),h=v.dot(m),c=m.dot(m)*l-o*o,d,u;d=0!==c?(a*o-h*l)/c:0,u=(a+d*o)/l,i.x=d,i.y=u}),ve=(y=new tK,x=new ix,b=new ix,function(e,t,i,r){g7(e,t,y);let s=y.x,a=y.y;if(s>=0&&s<=1&&a>=0&&a<=1){e.at(s,i),t.at(a,r);return}if(s>=0&&s<=1){a<0?t.at(0,r):t.at(1,r),e.closestPointToPoint(r,!0,i);return}if(a>=0&&a<=1){s<0?e.at(0,i):e.at(1,i),t.closestPointToPoint(i,!0,r);return}{let o,l;if(o=s<0?e.start:e.end,l=a<0?t.start:t.end,e.closestPointToPoint(l,!0,x),t.closestPointToPoint(o,!0,b),x.distanceToSquared(l)<=b.distanceToSquared(o)){i.copy(x),r.copy(l);return}i.copy(o),r.copy(b);return}}),vt=(w=new ix,S=new ix,_=new sn,A=new lk,function(e,t){let{radius:i,center:r}=e,{a:s,b:a,c:o}=t;if(A.start=s,A.end=a,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i||(A.start=s,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i)||(A.start=a,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i))return!0;let l=t.getPlane(_);if(Math.abs(l.distanceToPoint(r))<=i){let e=l.projectPoint(r,S);if(t.containsPoint(e))return!0}return!1});function vi(e){return 1e-15>Math.abs(e)}var vr=class extends rw{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new ix),this.satBounds=[,,,,].fill().map(()=>new g9),this.points=[this.a,this.b,this.c],this.sphere=new ik,this.plane=new sn,this.needsUpdate=!0}intersectsSphere(e){return vt(e,this)}update(){let e=this.a,t=this.b,i=this.c,r=this.points,s=this.satAxes,a=this.satBounds,o=s[0],l=a[0];this.getNormal(o),l.setFromPoints(o,r);let h=s[1],c=a[1];h.subVectors(e,t),c.setFromPoints(h,r);let d=s[2],u=a[2];d.subVectors(t,i),u.setFromPoints(d,r);let p=s[3],f=a[3];p.subVectors(i,e),f.setFromPoints(p,r),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,e),this.needsUpdate=!1}};vr.prototype.closestPointToSegment=(M=new ix,E=new ix,C=new lk,function(e,t=null,i=null){let{start:r,end:s}=e,a=this.points,o,l=1/0;for(let r=0;r<3;r++){let s=(r+1)%3;C.start.copy(a[r]),C.end.copy(a[s]),ve(C,e,M,E),(o=M.distanceToSquared(E))<l&&(l=o,t&&t.copy(M),i&&i.copy(E))}return this.closestPointToPoint(r,M),(o=r.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(r)),this.closestPointToPoint(s,M),(o=s.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(s)),Math.sqrt(l)}),vr.prototype.intersectsTriangle=(T=new vr,P=[,,,],D=[,,,],I=new g9,O=new g9,R=new ix,L=new ix,B=new ix,z=new ix,F=new lk,N=new lk,U=new lk,function(e,t=null,i=!1){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update(
3139):(T.copy(e),T.update(),e=T);let r=this.plane,s=e.plane;if(Math.abs(r.normal.dot(s.normal))>1-1e-10){let r=this.satBounds,s=this.satAxes;D[0]=e.a,D[1]=e.b,D[2]=e.c;for(let e=0;e<4;e++){let t=r[e],i=s[e];if(I.setFromPoints(i,D),t.isSeparated(I))return!1}let a=e.satBounds,o=e.satAxes;P[0]=this.a,P[1]=this.b,P[2]=this.c;for(let e=0;e<4;e++){let t=a[e],i=o[e];if(I.setFromPoints(i,P),t.isSeparated(I))return!1}for(let e=0;e<4;e++){let t=s[e];for(let e=0;e<4;e++){let i=o[e];if(R.crossVectors(t,i),I.setFromPoints(R,P),O.setFromPoints(R,D),I.isSeparated(O))return!1}}return t&&(i||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),t.start.set(0,0,0),t.end.set(0,0,0)),!0}{let i=this.points,a=!1,o=0;for(let e=0;e<3;e++){let t=i[e],r=i[(e+1)%3];F.start.copy(t),F.end.copy(r),F.delta(L);let l=a?N.start:N.end,h=vi(s.distanceToPoint(t));if(vi(s.normal.dot(L))&&h){N.copy(F),o=2;break}if((s.intersectLine(F,l)||h)&&!vi(l.distanceTo(r))){if(o++,a)break;a=!0}}if(1===o&&e.containsPoint(N.end))return t&&(t.start.copy(N.end),t.end.copy(N.end)),!0;if(2!==o)return!1;let l=e.points,h=!1,c=0;for(let e=0;e<3;e++){let t=l[e],i=l[(e+1)%3];F.start.copy(t),F.end.copy(i),F.delta(B);let s=h?U.start:U.end,a=vi(r.distanceToPoint(t));if(vi(r.normal.dot(B))&&a){U.copy(F),c=2;break}if((r.intersectLine(F,s)||a)&&!vi(s.distanceTo(i))){if(c++,h)break;h=!0}}if(1===c&&this.containsPoint(U.end))return t&&(t.start.copy(U.end),t.end.copy(U.end)),!0;if(2!==c)return!1;if(N.delta(L),U.delta(B),0>L.dot(B)){let e=U.start;U.start=U.end,U.end=e}let d=N.start.dot(L),u=N.end.dot(L),p=U.start.dot(L),f=U.end.dot(L);return(d===f||p===u||u<p!=d<f)&&(t&&(z.subVectors(N.start,U.start),z.dot(L)>0?t.start.copy(N.start):t.start.copy(U.start),z.subVectors(N.end,U.end),0>z.dot(L)?t.end.copy(N.end):t.end.copy(U.end)),!0)}}),vr.prototype.distanceToPoint=(k=new ix,function(e){return this.closestPointToPoint(e,k),e.distanceTo(k)}),vr.prototype.distanceToTriangle=(V=new ix,j=new ix,G=["a","b","c"],H=new lk,W=new lk,function(e,t=null,i=null){let r=t||i?H:null;if(this.intersectsTriangle(e,r))return(t||i)&&(t&&r.getCenter(t),i&&r.getCenter(i)),0;let s=1/0;for(let r=0;r<3;r++){let a,o=G[r],l=e[o];this.closestPointToPoint(l,V),(a=l.distanceToSquared(V))<s&&(s=a,t&&t.copy(V),i&&i.copy(l));let h=this[o];e.closestPointToPoint(h,V),(a=h.distanceToSquared(V))<s&&(s=a,t&&t.copy(h),i&&i.copy(V))}for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];H.set(this[a],this[o]);for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];W.set(e[a],e[o]),ve(H,W,V,j);let l=V.distanceToSquared(j);l<s&&(s=l,t&&t.copy(V),i&&i.copy(j))}}return Math.sqrt(s)});var vs=class{constructor(e,t,i){this.isOrientedBox=!0,this.min=new ix,this.max=new ix,this.matrix=new iQ,this.invMatrix=new iQ,this.points=Array(8).fill().map(()=>new ix),this.satAxes=[,,,].fill().map(()=>new ix),this.satBounds=[,,,].fill().map(()=>new g9),this.alignedSatBounds=[,,,].fill().map(()=>new g9),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};vs.prototype.update=function(){let e=this.matrix,t=this.min,i=this.max,r=this.points;for(let s=0;s<=1;s++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let l=r[1*s|2*a|4*o];l.x=s?i.x:t.x,l.y=a?i.y:t.y,l.z=o?i.z:t.z,l.applyMatrix4(e)}let s=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],i=s[e],l=r[1<<e];t.subVectors(o,l),i.setFromPoints(t,r)}let l=this.alignedSatBounds;l[0].setFromPointsField(r,"x"),l[1].setFromPointsField(r,"y"),l[2].setFromPointsField(r,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1},vs.prototype.intersectsBox=(q=new g9,function(e){this.needsUpdate&&this.update();let t=e.min,i=e.max,r=this.satBounds,s=this.satAxes,a=this.alignedSatBounds;if(q.min=t.x,q.max=i.x,a[0].isSeparated(q)||(q.min=t.y,q.max=i.y,a[1].isSeparated(q))||(q.min=t.z,q.max=i.z,a[2].isSeparated(q)))return!1;for(let t=0;t<3;t++){let i=s[t],a=r[t];if(q.setFromBox(i,e),a.isSeparated(q))return!1}return!0}),vs.prototype.intersectsTriangle=(X=new vr,Y=[,,,],Q=new g9,Z=new g9,K=new ix,function(e){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update(
3139):(X.copy(e),X.update(),e=X);let t=this.satBounds,i=this.satAxes;Y[0]=e.a,Y[1]=e.b,Y[2]=e.c;for(let e=0;e<3;e++){let r=t[e],s=i[e];if(Q.setFromPoints(s,Y),r.isSeparated(Q))return!1}let r=e.satBounds,s=e.satAxes,a=this.points;for(let e=0;e<3;e++){let t=r[e],i=s[e];if(Q.setFromPoints(i,a),t.isSeparated(Q))return!1}for(let e=0;e<3;e++){let t=i[e];for(let e=0;e<4;e++){let i=s[e];if(K.crossVectors(t,i),Q.setFromPoints(K,Y),Z.setFromPoints(K,a),Q.isSeparated(Z))return!1}}return!0}),vs.prototype.closestPointToPoint=function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t},vs.prototype.distanceToPoint=(J=new ix,function(e){return this.closestPointToPoint(e,J),e.distanceTo(J)}),vs.prototype.distanceToBox=($=["x","y","z"],ee=Array(12).fill().map(()=>new lk),et=Array(12).fill().map(()=>new lk),ei=new ix,er=new ix,function(e,t=0,i=null,r=null){if(this.needsUpdate&&this.update(),this.intersectsBox(e))return(i||r)&&(e.getCenter(er),this.closestPointToPoint(er,ei),e.closestPointToPoint(ei,er),i&&i.copy(ei),r&&r.copy(er)),0;let s=t*t,a=e.min,o=e.max,l=this.points,h=1/0;for(let e=0;e<8;e++){let t=l[e];er.copy(t).clamp(a,o);let c=t.distanceToSquared(er);if(c<h&&(h=c,i&&i.copy(t),r&&r.copy(er),c<s))return Math.sqrt(c)}let c=0;for(let e=0;e<3;e++)for(let t=0;t<=1;t++)for(let i=0;i<=1;i++){let r=(e+1)%3,s=(e+2)%3,h=t<<r|i<<s,d=1<<e|t<<r|i<<s,u=l[h],p=l[d];ee[c].set(u,p);let f=$[e],m=$[r],g=$[s],v=et[c],y=v.start,x=v.end;y[f]=a[f],y[m]=t?a[m]:o[m],y[g]=i?a[g]:o[m],x[f]=o[f],x[m]=t?a[m]:o[m],x[g]=i?a[g]:o[m],c++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let l=0;l<=1;l++){er.x=e?o.x:a.x,er.y=t?o.y:a.y,er.z=l?o.z:a.z,this.closestPointToPoint(er,ei);let c=er.distanceToSquared(ei);if(c<h&&(h=c,i&&i.copy(ei),r&&r.copy(er),c<s))return Math.sqrt(c)}for(let e=0;e<12;e++){let t=ee[e];for(let e=0;e<12;e++){ve(t,et[e],ei,er);let a=ei.distanceToSquared(er);if(a<h&&(h=a,i&&i.copy(ei),r&&r.copy(er),a<s))return Math.sqrt(a)}}return Math.sqrt(h)});var va=new ix,vn=new ix,vo=new ix,vl=new tK,vh=new tK,vc=new tK,vd=new ix,vu=new ix,vp=new ix,vf=new ix;function vm(e,t,i,r,s){let a=3*r,o=e.index.getX(a),l=e.index.getX(a+1),h=e.index.getX(a+2),{position:c,normal:d,uv:u,uv1:p}=e.attributes,f=function(e,t,i,r,s,a,o,l,h){va.fromBufferAttribute(t,a),vn.fromBufferAttribute(t,o),vo.fromBufferAttribute(t,l);let c=null===(1===h?e.intersectTriangle(vo,vn,va,!0,vf):e.intersectTriangle(va,vn,vo,2!==h,vf))?null:{distance:e.origin.distanceTo(vf),point:vf.clone()};if(c){r&&(vl.fromBufferAttribute(r,a),vh.fromBufferAttribute(r,o),vc.fromBufferAttribute(r,l),c.uv=rw.getInterpolation(vf,va,vn,vo,vl,vh,vc,new tK)),s&&(vl.fromBufferAttribute(s,a),vh.fromBufferAttribute(s,o),vc.fromBufferAttribute(s,l),c.uv1=rw.getInterpolation(vf,va,vn,vo,vl,vh,vc,new tK)),i&&(vd.fromBufferAttribute(i,a),vu.fromBufferAttribute(i,o),vp.fromBufferAttribute(i,l),c.normal=rw.getInterpolation(vf,va,vn,vo,vd,vu,vp,new ix),c.normal.dot(e.direction)>0&&c.normal.multiplyScalar(-1));let t={a:a,b:o,c:l,normal:new ix,materialIndex:0};rw.getNormal(va,vn,vo,t.normal),c.face=t,c.faceIndex=a}return c}(i,c,d,u,p,o,l,h,t);return f?(f.faceIndex=r,s&&s.push(f),f):null}function vg(e,t,i,r){let s=e.a,a=e.b,o=e.c,l=t,h=t+1,c=t+2;i&&(l=i.getX(t),h=i.getX(t+1),c=i.getX(t+2)),s.x=r.getX(l),s.y=r.getY(l),s.z=r.getZ(l),a.x=r.getX(h),a.y=r.getY(h),a.z=r.getZ(h),o.x=r.getX(c),o.y=r.getY(c),o.z=r.getZ(c)}function vv(e,t,i,r,s,a,o){let l=i.index,h=i.attributes.position;for(let i=e,c=t+e;i<c;i++)if(vg(o,3*i,l,h),o.needsUpdate=!0,r(o,i,s,a))return!0;return!1}var vy=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return 0===e.length?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}};function vx(e,t){return 65535===t[e+15]}var vb=new iS,vw=new ix,vS=["x","y","z"],v_=(en=[],eo=new vy(()=>new iS),function(...e){es=eo.getPrimitive(),ea=eo.getPrimitive(),en.push(es,ea);let t=function e(t,i,r,s,a=null,o=0,l=0){function h(e){let t=2*e,i=yX,r=yY;for(;!vx(t,i);)e+=8,t=2*e;return r[e+6]}function c(e){let t=2*e,i=yX,r=yY;for(;!vx(t,i);)t=2*(e=r[e+6]);return r[e+6]+i[t+14]}let d=2*t,u=yq,p=yX,f=yY;if(vx(d,p)){let e=f[t+6],i=p[d+14];return g$(t,u,es),s(e,i,!1,l,o+t,es)}{let d=t+8,m=f[t+6],g=d,v=m,y,x,b,w;if(a&&(b=es,w=ea,g$(g,u,b),g$(v,u,w),y=a(b),(x=a(w))<y)){g=m,v=d;let e=y;y=x,x=e,b=w}b||g$(g,u,b=es);let S=r(b,vx(2*g,p),y,l+1,o+g),_;if(2===S){let e=h(g),t=c(g)-e;_=s(e,t,!0,l+1,o+g,b)}else _=S&&e(g,i,r,s,a,o,l+1);if(_)return!0;g$(v,u,w=ea);let A=r(w,vx(2*v,p),x,l+1,o+v),M;
3139if(2===A){let e=h(v),t=c(v)-e;M=s(e,t,!0,l+1,o+v,w)}else M=A&&e(v,i,r,s,a,o,l+1);return!!M}}(...e);eo.releasePrimitive(es),eo.releasePrimitive(ea),en.pop(),en.pop();let i=en.length;return i>0&&(ea=en[i-1],es=en[i-2]),t}),vA=(el=new vr,eh=new vr,ec=new iQ,ed=new vs,eu=new vs,function e(t,i,r,s,a=null){let o=2*t,l=yq,h=yX,c=yY;if(null===a&&(r.boundingBox||r.computeBoundingBox(),ed.set(r.boundingBox.min,r.boundingBox.max,s),a=ed),vx(o,h)){let e=i.index,a=i.attributes.position,d=r.index,u=r.attributes.position,p=c[t+6],f=h[o+14];if(ec.copy(s).invert(),r.boundsTree)return g$(t,l,eu),eu.matrix.copy(ec),eu.needsUpdate=!0,r.boundsTree.shapecast({intersectsBounds:e=>eu.intersectsBox(e),intersectsTriangle:t=>{t.a.applyMatrix4(s),t.b.applyMatrix4(s),t.c.applyMatrix4(s),t.needsUpdate=!0;for(let i=3*p,r=(f+p)*3;i<r;i+=3)if(vg(eh,i,e,a),eh.needsUpdate=!0,t.intersectsTriangle(eh))return!0;return!1}});for(let t=3*p,i=f+3*p;t<i;t+=3){vg(el,t,e,a),el.a.applyMatrix4(ec),el.b.applyMatrix4(ec),el.c.applyMatrix4(ec),el.needsUpdate=!0;for(let e=0,t=d.count;e<t;e+=3)if(vg(eh,e,d,u),eh.needsUpdate=!0,el.intersectsTriangle(eh))return!0}}else{let o=t+8,h=c[t+6];return g$(o,l,vb),!!(a.intersectsBox(vb)&&e(o,i,r,s,a)||(g$(h,l,vb),a.intersectsBox(vb)&&e(h,i,r,s,a)))}});function vM(e,t,i,r){return g$(e,t,vb),i.intersectBox(vb,r)}var vE,vC,vT,vP,vD,vI,vO,vR,vL,vB,vz,vF,vN,vU,vk,vV,vj,vG,vH,vW,vq,vX,vY,vQ,vZ,vK,vJ,v$,v0,v1,v2,v3,v4,v5,v6,v8,v9,v7,ye,yt,yi,yr,ys,ya,yn,yo,yl,yh,yc,yd,yu,yp,yf,ym,yg,yv,yy,yx,yb,yw,yS,y_,yA,yM,yE,yC,yT,yP,yD,yI,yO,yR,yL,yB,yz,yF,yN,yU,yk,yV,yj,yG,yH,yW,yq,yX,yY,yQ=[];function yZ(e){yW&&yQ.push(yW),yW=e,yq=new Float32Array(e),yX=new Uint16Array(e),yY=new Uint32Array(e)}function yK(){yW=null,yq=null,yX=null,yY=null,yQ.length&&yZ(yQ.pop())}var yJ=Symbol("skip tree generation"),y$=new iS,y0=new iS,y1=new iQ,y2=new vs,y3=new vs,y4=new ix,y5=new ix,y6=new ix,y8=new ix,y9=new ix,y7=new iS,xe=new vy(()=>new vr),xt=class{static serialize(e,t={}){if(t.isBufferGeometry)return console.warn("MeshBVH.serialize: The arguments for the function have changed. See documentation for new signature."),xt.serialize(arguments[0],{cloneBuffers:void 0===arguments[2]||arguments[2]});t={cloneBuffers:!0,...t};let i=e.geometry,r=e._roots,s=i.getIndex();return t.cloneBuffers?{roots:r.map(e=>e.slice()),index:s.array.slice()}:{roots:r,index:s.array}}static deserialize(e,t,i={}){if("boolean"==typeof i)return console.warn("MeshBVH.deserialize: The arguments for the function have changed. See documentation for new signature."),xt.deserialize(arguments[0],arguments[1],{setIndex:void 0===arguments[2]||arguments[2]});i={setIndex:!0,...i};let{index:r,roots:s}=e,a=new xt(t,{...i,[yJ]:!0});if(a._roots=s,i.setIndex){let i=t.getIndex();if(null===i){let i=new rC(e.index,1,!1);t.setIndex(i)}else i.array!==r&&(i.array.set(r),i.needsUpdate=!0)}return a}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw Error("MeshBVH: Only BufferGeometries are supported.");if((t=Object.assign({strategy:0,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,[yJ]:!1},t)).useSharedArrayBuffer&&typeof SharedArrayBuffer>"u")throw Error("MeshBVH: SharedArrayBuffer is not available.");this._roots=null,t[yJ]||(this._roots=function(e,t){let i=function(e,t){function i(e){p&&p(e/f)}function r(t,s,p,f=null,g=0){if(!m&&g>=h&&(m=!0,c&&(console.warn(`MeshBVH: Max depth of ${h} reached when generating BVH. Consider increasing maxDepth.`),console.warn(e))),p<=d||g>=h)return i(s+p),t.offset=s,t.count=p,t;let v=function(e,t,i,r,s,a){let o=-1,l=0;if(0===a)-1!==(o=g0(t))&&(l=(t[o]+t[o+3])/2);else if(1===a)-1!==(o=g0(e))&&(l=function(e,t,i,r){let s=0;for(let a=t,o=t+i;a<o;a++)s+=e[6*a+2*r];return s/i}(i,r,s,o));else if(2===a){let a=g3(e),h=1.25*s,c=6*r,d=(r+s)*6;for(let e=0;e<3;e++){let r=t[e],u=(t[e+3]-r)/32;if(s<8){let t=[...g6];t.length=s;let r=0;for(let s=c;s<d;s+=6,r++){let a=t[r];a.candidate=i[s+2*e],a.count=0;let{bounds:o,leftCacheBounds:l,rightCacheBounds:h}=a;for(let e=0;e<3;e++)h[e]=1/0,h[e+3]=-1/0,l[e]=1/0,l[e+3]=-1/0,o[e]=1/0,o[e+3]=-1/0;g2(s,i,o)}t.sort(g5);let u=s;for(let e=0;e<u;e++){let i=t[e];for(;
3139e+1<u&&t[e+1].candidate===i.candidate;)t.splice(e+1,1),u--}for(let r=c;r<d;r+=6){let s=i[r+2*e];for(let e=0;e<u;e++){let a=t[e];s>=a.candidate?g2(r,i,a.rightCacheBounds):(g2(r,i,a.leftCacheBounds),a.count++)}}for(let i=0;i<u;i++){let r=t[i],c=r.count,d=s-r.count,u=r.leftCacheBounds,p=r.rightCacheBounds,f=0;0!==c&&(f=g3(u)/a);let m=0;0!==d&&(m=g3(p)/a);let g=1+1.25*(f*c+m*d);g<h&&(o=e,h=g,l=r.candidate)}}else{for(let e=0;e<32;e++){let t=g6[e];t.count=0,t.candidate=r+u+e*u;let i=t.bounds;for(let e=0;e<3;e++)i[e]=1/0,i[e+3]=-1/0}for(let t=c;t<d;t+=6){let s=~~((i[t+2*e]-r)/u);s>=32&&(s=31);let a=g6[s];a.count++,g2(t,i,a.bounds)}let t=g6[31];!function(e,t){t.set(e)}(t.bounds,t.rightCacheBounds);for(let e=30;e>=0;e--){let t=g6[e],i=g6[e+1];g1(t.bounds,i.rightCacheBounds,t.rightCacheBounds)}let p=0;for(let t=0;t<31;t++){let i=g6[t],r=i.count,c=i.bounds,d=g6[t+1].rightCacheBounds;0!==r&&(0===p?function(e,t){t.set(e)}(c,g8):g1(c,g8,g8));let u=0,f=0;0!==(p+=r)&&(u=g3(g8)/a);let m=s-p;0!==m&&(f=g3(d)/a);let g=1+1.25*(u*p+f*m);g<h&&(o=e,h=g,l=i.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:l}}(t.boundingData,f,o,s,p,u);if(-1===v.axis)return i(s+p),t.offset=s,t.count=p,t;let y=function(e,t,i,r,s){let a=i,o=i+r-1,l=s.pos,h=2*s.axis;for(;;){for(;a<=o&&t[6*a+h]<l;)a++;for(;a<=o&&t[6*o+h]>=l;)o--;if(!(a<o))return a;for(let i=0;i<3;i++){let r=e[3*a+i];e[3*a+i]=e[3*o+i],e[3*o+i]=r;let s=t[6*a+2*i+0];t[6*a+2*i+0]=t[6*o+2*i+0],t[6*o+2*i+0]=s;let l=t[6*a+2*i+1];t[6*a+2*i+1]=t[6*o+2*i+1],t[6*o+2*i+1]=l}a++,o--}}(l,o,s,p,v);if(y===s||y===s+p)i(s+p),t.offset=s,t.count=p;else{t.splitAxis=v.axis;let e=new gJ,i=y-s;t.left=e,e.boundingData=new Float32Array(6),g4(o,s,i,e.boundingData,a),r(e,s,i,a,g+1);let l=new gJ,h=p-i;t.right=l,l.boundingData=new Float32Array(6),g4(o,y,h,l.boundingData,a),r(l,y,h,a,g+1)}return t}!function(e,t){if(!e.index){let i=e.attributes.position.count,r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s;s=i>65535?new Uint32Array(new r(4*i)):new Uint16Array(new r(2*i)),e.setIndex(new rC(s,1));for(let e=0;e<i;e++)s[e]=e}}(e,t);let s=new Float32Array(6),a=new Float32Array(6),o=function(e,t){let i=e.attributes.position,r=e.index.array,s=r.length/3,a=new Float32Array(6*s),o=i.normalized,l=i.array,h=i.offset||0,c=3;i.isInterleavedBufferAttribute&&(c=i.data.stride);let d=["getX","getY","getZ"];for(let e=0;e<s;e++){let s=3*e,u=6*e,p,f,m;o?(p=r[s+0],f=r[s+1],m=r[s+2]):(p=r[s+0]*c+h,f=r[s+1]*c+h,m=r[s+2]*c+h);for(let e=0;e<3;e++){let r,s,h;o?(r=i[d[e]](p),s=i[d[e]](f),h=i[d[e]](m)):(r=l[p+e],s=l[f+e],h=l[m+e]);let c=r;s<c&&(c=s),h<c&&(c=h);let g=r;s>g&&(g=s),h>g&&(g=h);let v=(g-c)/2,y=2*e;a[u+y+0]=c+v,a[u+y+1]=v+(Math.abs(c)+v)*5960464477539063e-23,c<t[e]&&(t[e]=c),g>t[e+3]&&(t[e+3]=g)}}return a}(e,s),l=e.index.array,h=t.maxDepth,c=t.verbose,d=t.maxLeafTris,u=t.strategy,p=t.onProgress,f=e.index.count/3,m=!1,g=[],v=function(e){if(!e.groups||!e.groups.length)return[{offset:0,count:e.index.count/3}];let t=[],i=new Set;for(let t of e.groups)i.add(t.start),i.add(t.start+t.count);let r=Array.from(i.values()).sort((e,t)=>e-t);for(let e=0;e<r.length-1;e++){let i=r[e],s=r[e+1];t.push({offset:i/3,count:(s-i)/3})}return t}(e);if(1===v.length){let e=v[0],t=new gJ;t.boundingData=s,function(e,t,i,r){let s=1/0,a=1/0,o=1/0,l=-1/0,h=-1/0,c=-1/0;for(let r=6*t,d=(t+i)*6;r<d;r+=6){let t=e[r+0];t<s&&(s=t),t>l&&(l=t);let i=e[r+2];i<a&&(a=i),i>h&&(h=i);let d=e[r+4];d<o&&(o=d),d>c&&(c=d)}r[0]=s,r[1]=a,r[2]=o,r[3]=l,r[4]=h,r[5]=c}(o,e.offset,e.count,a),r(t,e.offset,e.count,a),g.push(t)}else for(let e of v){let t=new gJ;t.boundingData=new Float32Array(6),g4(o,e.offset,e.count,t.boundingData,a),r(t,e.offset,e.count,a),g.push(t)}return g}(e,t),r,s,a,o=[],l=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let e=0;e<i.length;e++){let t=i[e],h=new l(32*function e(t){return t.count?1:1+e(t.left)+e(t.right)}(t));r=new Float32Array(h),s=new Uint32Array(h),a=new Uint16Array(h),function e(t,i){let o=t/4,l=t/2,h=!!i.count,c=i.boundingData;for(let e=0;e<6;e++)r[o+e]=c[e];if(h){let e=i.offset,r=i.count;return s[o+6]=e,a[l+14]=r,a[l+15]=65535,t+32}{let r=i.left,a=i.right,l=i.splitAxis,h;if((h=e(t+32,r))/4>4294967296)throw Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return s[o+6]=h/4,h=e(h,a),s[o+7]=l,h}}(0,t),o.push(h)}return o}
3139(e,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new iS))),this.geometry=e}refit(e=null){e&&Array.isArray(e)&&(e=new Set(e));let t=this.geometry,i=t.index.array,r=t.attributes.position,s,a,o,l,h=0,c=this._roots;for(let t=0,d=c.length;t<d;t++)a=new Uint32Array(s=c[t]),o=new Uint16Array(s),l=new Float32Array(s),function t(s,h,c=!1){let d=2*s;if(65535===o[d+15]){let e=a[s+6],t=o[d+14],h=1/0,c=1/0,u=1/0,p=-1/0,f=-1/0,m=-1/0;for(let s=3*e,a=3*(e+t);s<a;s++){let e=i[s],t=r.getX(e),a=r.getY(e),o=r.getZ(e);t<h&&(h=t),t>p&&(p=t),a<c&&(c=a),a>f&&(f=a),o<u&&(u=o),o>m&&(m=o)}return(l[s+0]!==h||l[s+1]!==c||l[s+2]!==u||l[s+3]!==p||l[s+4]!==f||l[s+5]!==m)&&(l[s+0]=h,l[s+1]=c,l[s+2]=u,l[s+3]=p,l[s+4]=f,l[s+5]=m,!0)}{let i=s+8,r=a[s+6],o=i+h,d=r+h,u=c,p=!1,f=!1;e?u||(p=e.has(o),f=e.has(d),u=!p&&!f):(p=!0,f=!0);let m=u||p,g=u||f,v=!1;m&&(v=t(i,h,u));let y=!1;g&&(y=t(r,h,u));let x=v||y;if(x)for(let e=0;e<3;e++){let t=i+e,a=r+e,o=l[t],h=l[t+3],c=l[a],d=l[a+3];l[s+e]=o<c?o:c,l[s+e+3]=h>d?h:d}return x}}(0,h),h+=s.byteLength}traverse(e,t=0){let i=this._roots[t],r=new Uint32Array(i),s=new Uint16Array(i);!function t(a,o=0){let l=2*a,h=65535===s[l+15];if(h){let t=r[a+6],c=s[l+14];e(o,h,new Float32Array(i,4*a,6),t,c)}else{let s=r[a+6],l=r[a+7];e(o,h,new Float32Array(i,4*a,6),l)||(t(a+8,o+1),t(s,o+1))}}(0)}raycast(e,t=0){let i=this._roots,r=this.geometry,s=[],a=t.isMaterial,o=Array.isArray(t),l=r.groups,h=a?t.side:t;for(let a=0,c=i.length;a<c;a++){let c=o?t[l[a].materialIndex].side:h,d=s.length;if(yZ(i[a]),function e(t,i,r,s,a){let o=2*t,l=yq,h=yX,c=yY;if(vx(o,h))!function(e,t,i,r,s,a){for(let o=r,l=r+s;o<l;o++)vm(e,t,i,o,a)}(i,r,s,c[t+6],h[o+14],a);else{let o=t+8;vM(o,l,s,vw)&&e(o,i,r,s,a);let h=c[t+6];vM(h,l,s,vw)&&e(h,i,r,s,a)}}(0,r,c,e,s),yK(),o){let e=l[a].materialIndex;for(let t=d,i=s.length;t<i;t++)s[t].face.materialIndex=e}}return s}raycastFirst(e,t=0){let i=this._roots,r=this.geometry,s=t.isMaterial,a=Array.isArray(t),o=null,l=r.groups,h=s?t.side:t;for(let s=0,c=i.length;s<c;s++){let c=a?t[l[s].materialIndex].side:h;yZ(i[s]);let d=function e(t,i,r,s){let a=2*t,o=yq,l=yX,h=yY;if(vx(a,l))return function(e,t,i,r,s){let a=1/0,o=null;for(let l=r,h=r+s;l<h;l++){let r=vm(e,t,i,l);r&&r.distance<a&&(o=r,a=r.distance)}return o}(i,r,s,h[t+6],l[a+14]);{let a=h[t+7],l=vS[a],c=s.direction[l]>=0,d,u;c?(d=t+8,u=h[t+6]):(d=h[t+6],u=t+8);let p=vM(d,o,s,vw)?e(d,i,r,s):null;if(p){let e=p.point[l];if(c?e<=o[u+a]:e>=o[u+a+3])return p}let f=vM(u,o,s,vw)?e(u,i,r,s):null;return p&&f?p.distance<=f.distance?p:f:p||f||null}}(0,r,c,e);yK(),null!=d&&(null==o||d.distance<o.distance)&&(o=d,a&&(d.face.materialIndex=l[s].materialIndex))}return o}intersectsGeometry(e,t){let i=this.geometry,r=!1;for(let s of this._roots)if(yZ(s),r=vA(0,i,e,t),yK(),r)break;return r}shapecast(e,t,i){let r=this.geometry;if(e instanceof Function){if(t){let e=t;t=(t,i,r,s)=>{let a=3*i;return e(t,a,a+1,a+2,r,s)}}e={boundsTraverseOrder:i,intersectsBounds:e,intersectsTriangle:t,intersectsRange:null},console.warn("MeshBVH: Shapecast function signature has changed and now takes an object of callbacks as a second argument. See docs for new signature.")}let s=xe.getPrimitive(),{boundsTraverseOrder:a,intersectsBounds:o,intersectsRange:l,intersectsTriangle:h}=e;if(l&&h){let e=l;l=(t,i,a,o,l)=>!!e(t,i,a,o,l)||vv(t,i,r,h,a,o,s)}else l||(l=h?(e,t,i,a)=>vv(e,t,r,h,i,a,s):(e,t,i)=>i);let c=!1,d=0;for(let e of this._roots){if(yZ(e),c=v_(0,r,o,l,a,d),yK(),c)break;d+=e.byteLength}return xe.releasePrimitive(s),c}bvhcast(e,t,i){let{intersectsRanges:r,intersectsTriangles:s}=i,a=this.geometry.index,o=this.geometry.attributes.position,l=e.geometry.index,h=e.geometry.attributes.position;y1.copy(t).invert();let c=xe.getPrimitive(),d=xe.getPrimitive();if(s){let e=function(e,i,r,u,p,f,m,g){for(let v=r,y=r+u;v<y;v++){vg(d,3*v,l,h),d.a.applyMatrix4(t),d.b.applyMatrix4(t),d.c.applyMatrix4(t),d.needsUpdate=!0;for(let t=e,r=e+i;t<r;t++)if(vg(c,3*t,a,o),c.needsUpdate=!0,s(c,d,t,v,p,f,m,g))return!0}return!1};if(r){let t=r;r=function(i,r,s,a,o,l,h,c){return!!t(i,r,s,a,o,l,h,c)||e(i,r,s,a,o,l,h,c)}}else r=e}e.getBoundingBox(y0),y0.applyMatrix4(t);let u=this.shapecast({intersectsBounds:e=>y0.intersectsBox(e),intersectsRange:(t,i,s,a,o,l)=>(y$.copy(l),y$.applyMatrix4(y1),e.shapecast({intersectsBounds:e=>y$.intersectsBox(e),intersectsRange:(e,s,l,h,c)=>r(t,i,e,s,a,o,h,c)}
3139))});return xe.releasePrimitive(c),xe.releasePrimitive(d),u}intersectsBox(e,t){return y2.set(e.min,e.max,t),y2.needsUpdate=!0,this.shapecast({intersectsBounds:e=>y2.intersectsBox(e),intersectsTriangle:e=>y2.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},r={},s=0,a=1/0){e.boundingBox||e.computeBoundingBox(),y2.set(e.boundingBox.min,e.boundingBox.max,t),y2.needsUpdate=!0;let o=this.geometry,l=o.attributes.position,h=o.index,c=e.attributes.position,d=e.index,u=xe.getPrimitive(),p=xe.getPrimitive(),f=null,m=null;r&&(f=y8,m=y9);let g=1/0,v=null,y=null;return y1.copy(t).invert(),y3.matrix.copy(y1),this.shapecast({boundsTraverseOrder:e=>y2.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a&&(t&&(y3.min.copy(e.min),y3.max.copy(e.max),y3.needsUpdate=!0),!0),intersectsRange:(i,r)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:e=>y3.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a,intersectsRange:(e,a)=>{for(let o=3*e,x=(e+a)*3;o<x;o+=3){vg(p,o,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vg(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y5,f);if(t<g&&(y6.copy(y5),m&&m.copy(f),g=t,v=e/3,y=o/3),t<s)return!0}}}});{let e=d?d.count:c.count;for(let a=0;a<e;a+=3){vg(p,a,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vg(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y5,f);if(t<g&&(y6.copy(y5),m&&m.copy(f),g=t,v=e/3,y=a/3),t<s)return!0}}}}}),xe.releasePrimitive(u),xe.releasePrimitive(p),g===1/0?null:(i.point?i.point.copy(y6):i.point=y6.clone(),i.distance=g,i.faceIndex=v,r&&(r.point?r.point.copy(m):r.point=m.clone(),r.point.applyMatrix4(y1),y6.applyMatrix4(y1),r.distance=y6.sub(r.point).length(),r.faceIndex=y),i)}closestPointToPoint(e,t={},i=0,r=1/0){let s=i*i,a=r*r,o=1/0,l=null;if(this.shapecast({boundsTraverseOrder:t=>(y4.copy(e).clamp(t.min,t.max),y4.distanceToSquared(e)),intersectsBounds:(e,t,i)=>i<o&&i<a,intersectsTriangle:(t,i)=>{t.closestPointToPoint(e,y4);let r=e.distanceToSquared(y4);return r<o&&(y5.copy(y4),o=r,l=i),r<s}}),o===1/0)return null;let h=Math.sqrt(o);return t.point?t.point.copy(y5):t.point=y5.clone(),t.distance=h,t.faceIndex=l,t}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{g$(0,new Float32Array(t),y7),e.union(y7)}),e}},xi=tw(t_()),xr=.5*(Math.sqrt(3)-1),xs=(3-Math.sqrt(3))/6,xa=1/3,xn=1/6,xo=e=>0|Math.floor(e),xl=new Float64Array([1,1,-1,1,1,-1,-1,-1,1,0,-1,0,1,0,-1,0,0,1,0,-1,0,1,0,-1]),xh=new Float64Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function xc(e=Math.random){let t=xd(e),i=new Float64Array(t).map(e=>xl[e%12*2]),r=new Float64Array(t).map(e=>xl[e%12*2+1]);return function(e,s){let a=0,o=0,l=0,h=(e+s)*xr,c=xo(e+h),d=xo(s+h),u=(c+d)*xs,p=e-(c-u),f=s-(d-u),m,g;p>f?(m=1,g=0):(m=0,g=1);let v=p-m+xs,y=f-g+xs,x=p-1+2*xs,b=f-1+2*xs,w=255&c,S=255&d,_=.5-p*p-f*f;if(_>=0){let e=w+t[S],s=i[e],o=r[e];_*=_,a=_*_*(s*p+o*f)}let A=.5-v*v-y*y;if(A>=0){let e=w+m+t[S+g],s=i[e],a=r[e];A*=A,o=A*A*(s*v+a*y)}let M=.5-x*x-b*b;if(M>=0){let e=w+1+t[S+1],s=i[e],a=r[e];M*=M,l=M*M*(s*x+a*b)}return 70*(a+o+l)}}function xd(e){let t=new Uint8Array(512);for(let e=0;e<256;e++)t[e]=e;for(let i=0;i<255;i++){let r=i+~~(e()*(256-i)),s=t[i];t[i]=t[r],t[r]=s}for(let e=256;e<512;e++)t[e]=t[e-256];return t}var xu,xp=new rw,xf=class{constructor(e){this.weightAttribute=null;let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.distribution=null}build(){let e=this.positionAttribute,t=new Float32Array(e.count/3);for(let i=0;i<e.count;i+=3){let r=1;xp.a.fromBufferAttribute(e,i),xp.b.fromBufferAttribute(e,i+1),xp.c.fromBufferAttribute(e,i+2),r*=xp.getArea(),t[i/3]=r}this.distribution=new Float32Array(e.count/3);let i=0;for(let e=0;e<t.length;e++)i+=t[e],this.distribution[e]=i;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t){if(this.distribution){let i=this.distribution[this.distribution.length-1],r=this.binarySearch(this.randomFunction()*i);return this.sampleFace(r,e,t)}}binarySearch(e){if(!this.distribution)return 0;let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i){let r=this.randomFunction(),s=this.randomFunction();return r+s>1&&(r=1-r,s=1-s),xp.a.fromBufferAttribute(this.positionAttribute,3*e),xp.b.fromBufferAttribute(this.positionAttribute,3*e+1),xp.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(xp.a,r).addScaledVector(xp.b,s).addScaledVector(xp.c,1-(r+s)),xp.getNormal(i),this}},xm=tw(tA()),xg=new iQ,xv=new iQ,xy=new iQ;(xu||(xu={})).is=function(e){return e&&e.__isSPEObject};var xx=e=>class extends e{constructor(){super(...arguments),this.previousModelViewMatrix=new iQ,this.copyPreviousMatrix=!0,this.hiddenMatrix=new iQ,this.matrixWorldRigid=new iQ,this.shearScale=new iQ,this.shearScaleInv=new iQ}get __isSPEObject(){return!0}isDescendantOf(e){e instanceof rc&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}updateMatrixWorld(e){for(let t of(this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix
3139):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0),this.children))t.updateMatrixWorld(e)}updateWorldMatrix(e,t){let i=this.parent;if(e&&null!==i&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),t)for(let e of this.children)e.updateWorldMatrix(!1,!0)}traverseChildren(e,t=0){for(let i of this.children)xu.is(i)&&i.traverseObject(e,t+1)}traverseObject(e,t=0){if(!0!==e(this,t))for(let i of this.children)xu.is(i)&&i.traverseObject(e,t+1)}updateMatrixWorldSVD(){let e=this.matrixWorld.elements,t=[[e[0],e[4],e[8]],[e[1],e[5],e[9]],[e[2],e[6],e[10]]],{u:i,v:r,q:s}=(0,xm.SVD)(t),a=xg.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),o=xv.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1),l=xy.copy(o).transpose();this.shearScale.makeScale(s[0],s[1],s[2]).multiply(l).premultiply(o),this.shearScaleInv.copy(this.shearScale).invert(),this.matrixWorldRigid.multiplyMatrices(a,l).copyPosition(this.matrixWorld),s.every(e=>.01>Math.abs(s[0]-e))?this.hasNonUniformScale=!1:this.hasNonUniformScale=!0}attach(e,t){this.updateWorldMatrix(!0,!1);let i=new iQ().copy(this.matrixWorld).invert();return null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i.multiply(e.parent.matrixWorld)),"hiddenMatrix"in e&&e.hiddenMatrix instanceof iQ?e.hiddenMatrix.premultiply(i):e.applyMatrix4(i),e.updateWorldMatrix(!1,!1),this.add(e),void 0!==t&&(this.children.pop(),this.children.splice(t,0,e)),this}copy(e,t=!1){return super.copy(e,t),this.hasNonUniformScale=e.hasNonUniformScale,this}onAfterRender(e,t,i,r,s,a){this.copyPreviousMatrix&&this.previousModelViewMatrix.copy(this.modelViewMatrix)}},xb=class extends xx(rc){},xw=e=>"Mesh"===e.type,xS=class extends xb{constructor(e){super(),this.object=e,this.matrixAutoUpdate=!1,this.hasNonUniformScale=e.hasNonUniformScale}raycast(e,t){}expand(){let e=0,t=this.object.entityChildren(e);for(;t;){let i=this.children[e];i?.object!==t&&(i&&this.remove(i),i=new xS(t),this.add(i),this.children.splice(e,0,this.children.pop()),i.matrixWorldNeedsUpdate=!0,i.matrixAutoUpdate=!1,i.matrix=t.matrix,i.hiddenMatrix=t.hiddenMatrix),i.expand(),e+=1,t=this.object.entityChildren(e)}for(;this.children.length>e;)this.remove(this.children[e])}get visible(){return void 0!==this.playModeVisible?this.playModeVisible:this.object.visible||this.object.dataPatched.visible&&this.object.dataPatched.cloner?.hideBase===!0}set visible(e){}get castShadow(){return this.object.castShadow}set castShadow(e){}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){}get isMesh(){return xw(this.object)}get isLight(){return this.object.isLight}get layers(){return this.object.layers}set layers(e){}get isCamera(){return!1}get geometry(){if(this.object.geometry)return this.object.geometry}get material(){if(this.object.material)return this.object.material}},x_=new ix,xA=new ix,xM=new iQ,xE=[new ix(-1,1,1),new ix(-1,-1,1),new ix(1,-1,1),new ix(1,1,1),new ix(-1,1,-1),new ix(-1,-1,-1),new ix(1,-1,-1),new ix(1,1,-1)],xC=[[0,3],[1,2],[5,6],[4,7],[0,1],[3,2],[7,6],[4,5],[0,4],[1,5],[2,6],[3,7]],xT=[[0,2],[7,5],[4,1],[3,6],[4,3],[1,6]],xP=(e,t,i)=>{e.updateEntityBoxSize(x_,xA),xM.copy(t).multiply(e.matrixWorld),0===xA.x&&0===xA.y&&0===xA.z?i.push(new ix(x_.x,x_.y,x_.z).applyMatrix4(xM)):xE.forEach(e=>{i.push(e.clone().multiply(xA).add(x_).applyMatrix4(xM))})},xD=class extends iS{constructor(){super(...arguments),this.matrix=new iQ,this.vertices=[],this.faces=[],this.edges=[],this.centerEdges=[]}copy(e){return super.copy(e),this.matrix.copy(e.matrix),this.vertices=e.vertices.map(e=>e.clone()),this.faces=e.faces.map(e=>e.clone()),this.edges=e.edges.map(e=>e.clone()),this.centerEdges=e.centerEdges.map(e=>e.clone()),this}setFromObjectSize(e,t=!1){e.updateWorldMatrix(!1,t),this.makeEmpty(),this.matrix.copy(e.matrixWorld);let i=new iQ().copy(e.matrixWorld).invert();return this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];return!0===i?e.traverseEntity(e=>{if(e.visible||e.cloner&&e.data.visible){if(!("geometry"in e)){r.push(new ix);return}xP(e,t,r)}}):xP(e,t,r),this.setFromPoints(r)}getCenter(e){return(e=super.getCenter(e)).applyMatrix4(this.matrix
3139),e}getPositionToCenter(e){return(e=super.getCenter(e)).applyMatrix4(xM.copy(this.matrix).setPosition(0,0,0)),e}computeVertices(){this.getSize(xA).multiplyScalar(.5),this.getCenter(x_),xM.copy(this.matrix).setPosition(x_),this.vertices=xE.map(e=>e.clone().multiply(xA).applyMatrix4(xM))}computeEdges(){this.vertices.length>0&&this.computeVertices(),this.edges=xC.map(([e,t])=>new lk(this.vertices[e],this.vertices[t])),this.centerEdges=this.edges.map(e=>e.getCenter(new ix))}computeFaces(){this.vertices.length>0&&this.computeVertices(),this.faces=xT.map(([e,t])=>this.vertices[e].clone().add(this.vertices[t]).multiplyScalar(.5))}},xI={Cloner:()=>{},changeEntityProptotype:()=>{},createEntity:()=>{}},xO=class extends on{constructor(){super()}getPoints(e=12){let t=[],i,r=this.getCurveLengths(),s=r[r.length-1]/r.length;for(let a=0,o=this.curves;a<o.length;a++){let l=o[a],h=Math.ceil(e*(0===a?r[a]:r[a]-r[a-1])/s),c=l.getPoints(h);for(let e=0;e<c.length;e++){let r=c[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}};function xR(e,t,i){return .001>=t.clone().sub(e).cross(t.clone().sub(i)).length()}function xL(e,t){let i=new ix(...e.position),r=new ix(...e.controlNext.position),s=new ix(...t.controlPrevious.position),a=new ix(...t.position);return xR(i,r,a)&&xR(i,s,a)}function xB(e){let t=e.points.map(e=>new ix(...e.data.position)),i=[e.points[0]],r=new ix(...i[0].data.position);for(let s=0;s<e.points.length-1;s++)xR(r,t[s],t[s+1])||(i.push(e.points[s]),r=t[s]);i.push(e.points[e.points.length-1]);let s=e.isClosed,a=i.length-(s?0:1),o=i.length,l=[];for(let t=0;t<o;t++){let r=i[t].data,a=new ix(...r.position),h=new ix(...r.controlPrevious.position),c=new ix(...r.controlNext.position),d={position:a,baseRoundness:r.roundness,controlPrevious:h,controlNext:c};if(0===r.roundness||!e.isClosed&&(0===t||t===o-1)){l[t]={...d,removedLength:0};continue}let u=s&&0==t?o-1:t-1,p=s&&t==o-1?0:t+1,f=i[u].data,m=i[p].data,g=new ix(...f.position),v=new ix(...m.position),y=g.clone().sub(a).normalize(),x=v.clone().sub(a).normalize();Object.assign(d,{prevDir:y,nextDir:x});let b=xL(f,r),w=xL(r,m);if(b&&w){let e=y.clone().add(x).normalize(),i=e.clone().cross(y).length()/y.dot(e);l[t]={...d,tan:i,removedLength:r.roundness/i}}else l[t]={...d,removedLength:0}}for(let e=0;e<a;e++){let t=e,i=s&&e===o-1?0:e+1,r=l[t],a=l[i];if(0!==r.removedLength||0!==a.removedLength){let e=r.position.distanceTo(a.position);r.removedLength=Math.min(r.removedLength,e/2),a.removedLength=Math.min(a.removedLength,e/2)}}let h=[];for(let e=0;e<a;e++){let t=e,r=s&&e===o-1?0:e+1,a=l[t],c=l[r],d=null;if(xL(i[t].data,i[r].data)){let e=a.position.clone(),t=c.position.clone();(0!==a.removedLength||0!==c.removedLength)&&(a.nextDir&&e.add(a.nextDir.clone().setLength(a.removedLength)),c.prevDir&&t.add(c.prevDir.clone().setLength(c.removedLength))),e.distanceTo(t)>.001&&(d=new n7(e,e.clone().lerp(t,.3),t.clone().lerp(e,.3),t))}else a.position.distanceTo(c.position)>.001&&(d=new n7(a.position,a.controlNext,c.controlPrevious,c.position));h[2*e+1]=d}for(let e=0;e<o;e++){let t=l[e];if(0===t.removedLength){h[2*e]=null;continue}let i=t.position,r=t.prevDir.clone().multiplyScalar(t.removedLength).add(i),s=t.nextDir.clone().multiplyScalar(t.removedLength).add(i),a=t.tan*t.removedLength,o=t.prevDir.clone().add(t.nextDir).normalize(),c=r.clone().lerp(s,.5),d=r.distanceTo(s)/2,u=o.clone().multiplyScalar(Math.sqrt(Math.pow(a,2)-Math.pow(d,2))).add(c),p=o.clone().multiplyScalar(-a).add(u),f=i.distanceTo(p)/i.distanceTo(c),m=t.prevDir.clone().multiplyScalar(f*i.distanceTo(r)).add(i),g=m.clone().lerp(p,2),v=r.clone().lerp(m,4/3),y=s.clone().lerp(g,4/3);h[2*e]=new n7(r,v,y,s)}let c=new xO;return h.forEach(e=>{e&&c.add(e)}),c}(wZ||(wZ={})).is=function(e){return e&&e.__isEntity};var xz=e=>wZ.is(e),xF={type:"completeState",isfromEntity:!0},xN=["x","y","z"],xU=new ix,xk=new ix().set(0,1,0),xV=e=>class extends xx(e){constructor(){super(...arguments),this.raycastLock=!1,this.scaleLock=!1,this.disposed=!1,this.stateSelection=null,this.destroyedInAction=!1,this.instances=[],this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this._singleBBox=new xD,this._recursiveBBox=new xD,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this._needApplyPathSnapping=!0,this.attachedPaths=new Set}get __isEntity(){return!0}entityChildren(e){let t=this.children[e];if(wZ.is(t))return t}entityChildrenCount(){let e=this.children.length;for(;e--;)if(wZ.is(this.children[e]))return e+1;return 0}get isConcreteEntity(){return"string"==typeof this.identity}get isVirtualEntity(){return"string"!=typeof this.identity}get isInstanceRoot(){return this.isConcreteEntity&&"Instance"===this.data.type}nearestInstanceSelfOrParent(){let e=this;for(;"Instance"!==e.data.type;){let t=e.parent;if(!wZ.is(t))return;e=t}return e}
vendor: 4,144 bytes, line 3139
3139forInstancesRec(e){this.instances.forEach(t=>{t.disposed||e(t),t.forInstancesRec(e)})}super_Entity(e,t){"string"==typeof e&&(this.uuid=e),this.identity=e,this.data=t,this.matrixAutoUpdate=!1,this.dataPatched=this.data}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)yn.toOps(this.data,e.data).forEach(e=>{let i=p$.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=yn.patch(this.data,i),yn.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched,t),this.stateSelection=e,this.updatePathSnapping(this.dataPatched.pathSnapping)}}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges(),this._singleBBox.computeFaces()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges(),this._recursiveBBox.computeFaces()),this._recursiveBBox}updateEntityBoxSize(e,t){e.setScalar(0),t.setScalar(0)}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{xz(e)&&e.resetBBoxNeedsUpdateSelf()}),this.traverseEntity(e=>{e.resetBBoxNeedsUpdateSelf()})}find(e){let t;return this.traverseEntity(i=>{i.uuid===e&&(t=i)}),t}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children,i=t.indexOf(this)+1;if(wZ.is(t[i]))return t[i];if(wZ.is(e))return e.traverseSortNextHelper()}}sortNext(){let e=this.children;return this.children.length>0&&wZ.is(this.children[0])?e[0]:this.traverseSortNextHelper()}goUp(e){let t=this;for(;e>0&&null!==t;)t=t.parent,e-=1;return t}hasAnccestorOrSelf(e){return this===e||this.hasAnccestor(e)}hasAnccestor(e){let t=this.parent;for(;t;){if(e===t)return!0;t=t.parent}return!1}countToAccestor(e){let t=0,i=this;for(;i!==e;){if(null===i)return -1;i=i.parent,t+=1}return t}forEachEntity(e){for(let t of this.children)xz(t)&&e(t)}traverseEntityAncestors(e){this.traverseAncestors(t=>{wZ.is(t)&&e(t)})}traverseConcreteEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xz(i)&&i.isConcreteEntity&&i.traverseEntity(e,t+1)}traverseEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xz(i)&&i.traverseEntity(e,t+1)}traverseVisibleEntity(e){for(let t of(e(this),this.children))xz(t)&&t.visible&&t.traverseVisibleEntity(e)}updateMatrix(){super.updateMatrix(),this.cloner&&this.cloner.onObjUpdateMatrix(),this.dispatchEvent({type:"updateMatrix"})}updateMatrixWorld(e){super.updateMatrixWorld(e),this.dispatchEvent({type:"updateMatrixWorld"})}copy(e,t=!1){return super.copy(e,t),this.dataPatched=e.dataPatched,this.raycastLock=e.raycastLock,this.scaleLock=e.scaleLock,this.hiddenMatrix.copy(e.hiddenMatrix),this}hasEntityChild(){return this.children.some(e=>xz(e))}isAncestorOf(e){if(this.uuid===e)return!1;let t=!1;return this.traverseEntity(i=>{i.uuid===e&&(t=!0)}),t}toObjectTransformState(e=[]){return this.updateWorldMatrix(!0,!1),uU({position:this.position.toArray(),rotation:[this.rotation.x*tZ.RAD2DEG,this.rotation.y*tZ.RAD2DEG,this.rotation.z*tZ.RAD2DEG],scale:this.scale.toArray(),hiddenMatrix:this.hiddenMatrix.toArray()},e)}getTransformValues(e,t,i){return t[e].map((t,r)=>i?.shared.getVariable(t,[this.uuid,e,xN[r]])??t)}updateTransformState(e,t){let i=!1;return e.position&&(this.position.fromArray(this.getTransformValues("position",e,t)),i=!0),e.rotation&&(xU.fromArray(this.getTransformValues("rotation",e,t)).multiplyScalar(tZ.DEG2RAD),this.rotation.setFromVector3(xU),i=!0),e.scale&&(this.scale.fromArray(this.getTransformValues("scale",e,t)),i=!0),void 0!==e.hiddenMatrix&&(i=!0,this.hiddenMatrix.fromArray(e.hiddenMatrix??gs.identity)),i&&(this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>
3139{e.invalidateClonerTransform(this)})),e.position&&e.rotation&&e.scale&&void 0!==e.hiddenMatrix&&this.updateWorldMatrix(!1,!0),i}onVariableUpdate(e=!1){if(e){this.resetBBoxNeedsUpdate();return}this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>{e.invalidateClonerTransform(this)})}dispose(){this.disposed=!0,this.cloner&&(this.cloner.removeFromParent(),this.cloner=void 0)}disposeChildrenRecursively(){for(let e of this.children)wZ.is(e)&&e.disposeRecursively()}disposeRecursively(){this.dispose(),this.children.forEach(e=>{wZ.is(e)&&e.disposeRecursively()})}toState(e=[]){return uU({name:this.name,visible:this.visible,raycastLock:this.raycastLock,...this.toObjectTransformState(e)},e)}updateByObjUpdateOp(e,t){void 0!==e&&this.updateByOp({type:0,props:e,path:[]},{...this.data,...e},t,!1)}updateByOp(e,t,i,r){let s=this.data;this.data=t;let a=e,o=pY(e.path,["states","*"]);if(null!==o){if(0===e.type){let[t]=o;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p2.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}a={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}if(void 0!==e.props.material&&"material"in t){let{material:e,...i}=t;t=i}let i=p2.removeOverridden(e.path,e.props,t);a={...e,props:i}}}if(this.updateByPatchedOpBase(a,yn.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i),pY(e.path,["overrides"])){let r=[],s=[...e.path];for(r.push(s[1]),s.splice(0,2);s.length>0&&"descendants"===s[0];)r.push(s[1]),s.splice(0,2);if(void 0===r[r.length-1]){if(0===e.type)for(let t of Object.keys(e.props)){r[r.length-1]=t;let s=i.scene.findInstance([this.uuid,...r]);s&&(s.overrideData=e.props[t],s.updateState(pA.apply(s.component.data,s.overrideData),i))}}else{let a=i.scene.findInstance([this.uuid,...r]);if(a){let o=p2.zoom(a.component.data,s);if(0===(e={...e,path:s}).type){let t=e.props;if(o)for(let[i,r]of Object.entries(e.props))void 0===r&&(t===e.props&&(t={...e.props}),t[i]=o[i]);e={...e,props:t}}a.overrideData=yi.resolve(t.overrides,r),a.updateByOp(e,p0.applySimple(a.data,e),i,!1)}}}else if(this.instances.length>0){let r;if(0===e.path.length&&0===e.type){let t;for(let i of yr.rootOverrideProps)i in e.props&&(void 0===t&&(t={}),t[i]=e.props[i]);t&&(r={...e,props:t})}else for(let t of yr.rootOverrideProps)if(pY(e.path,[t])){r=e;break}void 0!==r&&this.instances.forEach(e=>{if(e.isInstanceRoot){let t=pA.filterOp(e.overrideData,r);t&&e.updateByOp(t,p0.applySimple(e.data,t),i,!0)}}),this.instances.forEach(r=>{if(!r.isInstanceRoot){let a=pA.filterOp(r.overrideData,e);if(a){let o;o=s===r.data&&e===a?t:p0.applySimple(r.data,a),r.updateByOp(a,o,i,!0)}}})}}updateByPatchedOpBase(e,t,i){if(this.dataPatched=t,0===e.path.length&&0===e.type)void 0===e.props.type||gd.is(e.props.type)||xI.changeEntityProptotype(this,t,i);else if(1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&"type"in e.props)for(let e of(xI.changeEntityProptotype(this,t,i),this.children))wZ.is(e)&&e.updateVisible(i.scene);this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){if(0===e.path.length&&0===e.type&&this.updateState(e.props,i),"morphTargetInfluences"===e.path[0]&&0===e.type){let r=t.morphTargetInfluences.get(e.path[1])?.data.name;r&&this.updateMorphInfluences(r,i.shared.getVariable(e.props.value,[this.uuid,"morphTargetInfluences",r]))}if(null!==pY(e.path,["pathSnapping"])&&this.updatePathSnapping(t.pathSnapping),null!==pY(e.path,["cloner"])){let r=p0.drop(e,1);0===r.path.length&&0===r.type&&!0===r.props.disabled?this.setFromClonerState(null,i):this.cloner?this.cloner.updateState(t.cloner,i.scene):(this.setFromClonerState(t.cloner,i),this.expandCloner(i.scene)),this.updateVisible(i.scene)}}updatePathSnapping(e=this.dataPatched.pathSnapping){this._updatedPathSnapping=e,this._needApplyPathSnapping=!0}get updatedPathSnapping(){return this._updatedPathSnapping}applyPathSnapping(e){let t=this._updatedPathSnapping?.pathId??this.dataPatched.pathSnapping.pathId,i=this._updatedPathSnapping?.slide??this.dataPatched.pathSnapping.slide??0,r=this._updatedPathSnapping?.offset??this.dataPatched.pathSnapping.offset??0,s=this._updatedPathSnapping?.orientation??this.dataPatched.pathSnapping.orientation;if(null===t)return;let a=e.find(t);if(!a||!1===this._needApplyPathSnapping)return;this._needApplyPathSnapping=!1;let o=a.data;if(o.geometry.path.points.length<=1)return;let l=xB(o.geometry.path),h=(i+r)%1;i+r===1&&0===h&&(h=1);let c=null;try{c=l.curves.length?l.getPointAt(h):null}catch(e){}if(null===c)return;let d=this.parent?this.parent?.matrixWorld:new iQ;a.updateMatrixWorld();let u=new iQ().multiplyMatrices(d.clone().invert(),a.matrixWorld);c.applyMatrix4(u);let p={position:c.toArray(),rotation:o.rotation};if("tangential"===s){let e=new iQ().extractRotation(a.matrixWorld),t=l.getTangentAt(h).applyMatrix4(e).add(c),i=new iQ().lookAt(c,t,xk),r=xU.setFromEuler(new i5().setFromRotationMatrix(i)).multiplyScalar(tZ.RAD2DEG);p={...p,rotation:r.toArray()}}this.updateTransformState(p),this.traverseEntity(e=>{e._cameraType&&e.dispatchEvent(xF)})}updateVisible(e){if(this.visible=this.dataPatched.visible&&(!this.dataPatched.cloner||(this.dataPatched.cloner.disabled??!1)||this.dataPatched.cloner?.hideBase!==!0),!e)return;let t=!1;this.traverseEntity(e=>{if("Splat"===e.data.type)return t=!0,!0}),t&&e.reloadSplats()}updateState_Entity(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.raycastLock&&(this.raycastLock=e.raycastLock),void 0!==e.visible&&(this.updateVisible(t?.scene),this.resetBBoxNeedsUpdate()),t&&"cloner"in e&&void 0!==e.cloner&&(this.setFromClonerState(e.cloner,t),this.updateVisible(t.scene)),this.updateTransformState(e,t)}get attachedSurfaceCloners(){return this.children.filter(e=>e instanceof xI.Cloner&&"toObject"===e.parameters.type)}setFromClonerState(e,t){this.disposed||(null===e||e.disabled?(this.cloner&&this.cloner.removeFromParent(),this.cloner=void 0):void 0===this.cloner?(this.cloner=new xI.Cloner(this,e),t.scene.addPendingExpandCloner(this)):this.cloner.updateState(e,t.scene))}expandCloner(e){!this.disposed&&this.cloner&&this.cloner.expandClones(e)}invalidateClonerTransform(e){this.cloner&&this.cloner.invalidateTransform(e)}requestRender(){this.dispatchEvent({type:"requestRender"})}},xj=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:64,heightSegments:1,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadius:8,cornerSegments:8,hollow:0},e.parameters);i.thetaLength=tZ.clamp(i.thetaLength,0,360);let r=i.width/2,s=i.radiusTop??r,a=i.radiusBottom??r;return s===a?(s=r,a=r):s>a?(s=r,a=a*r/s):(s=s*r/a,a=r),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width),radiusTop:s,radiusBottom:a})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,radiusTop:c,radiusBottom:d,cornerRadius:u,cornerSegments:p,hollow:f}=e.parameters,m;return 0===h?(m=new rN).setAttribute("position",new rD([],3)):m=u||f?new xW(c,d,r,s,a,o,l,h*Math.PI/180,u,u,p,f):new oh(c,d,r,s,a,o,l,h*Math.PI/180),m.scale(1,1,i/t),Object.assign(m,{userData:{...e,type:"CylinderGeometry"}})}};function xG(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function xH(e){return new tK(e.y,-e.x)}var xW=class extends rN{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p=!1){super(),this.type="RoundedCylinderBufferGeometry",e=void 0!==e?e:1,t=void 0!==t?t:1,i=i||1,r=Math.floor(r)||8,s=Math.floor(s)||1,a=void 0!==a&&a,o=void 0!==o?o:0,l=void 0!==l?l:2*Math.PI,a&&(h=0,c=0);let f=[],m=[],g=[],v=[],y=0,x=i/2,b=new ix,w=new ix;p&&0==e&&(e=h),p&&0==t&&(t=c);let S=new tK(e,x),_=new tK(t,-x),A=null,M=null,E=null,C=null,T=S.clone().sub(_),P=0,D=0,I=0;u>0&&(P=Math.min(e,t)*(1-u),D=e-P,I=t-P);let O=S.clone();O.x-=P;let R=Math.PI-T.angle(),L=T.angle(),B=Math.tan(L/2),z=Math.tan(R/2),F=B+z;
3139if(h=Math.min(h,(e-D)/(u?F:z),T.length()/F),c=Math.min(c,(t-I)/(u?F:B),T.length()/F),h>0){let e=h/B;A=S.clone().sub(new tK(e,h)),u&&(E=A.clone(),E.x-=P-F*h),S.sub(T.clone().setLength(e))}if(c>0){let e=c/z;M=_.clone().sub(new tK(e,-c)),_.add(T.clone().setLength(e)),u&&(C=M.clone(),C.x-=P-F*c,O.sub(T.clone().setLength(e)))}let N=.5>(T=S.clone().sub(_)).length(),U=[];for(let d=0;d<=r;d++){let p=[],f=d/r,x=f*l+o,S=new tK(Math.sin(x),Math.cos(x));if(C&&M?(k(p,f,S,R,c,C,-1,!0),k(p,f,S,L,c,M,-1,!1)):M?(V(p,S,M.x,0,-1),k(p,f,S,L,c,M,-1,!1)):a||V(p,S,t,I,-1),xG(xH(T).normalize(),S,b),!N)for(let e=0;e<=s;e++){let t=e/s;xG(T.clone().multiplyScalar(t).add(_),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}if(E&&A?(k(p,f,S,R,h,A,1,!1),k(p,f,S,L,h,E,1,!0)):A?(k(p,f,S,R,h,A,1,!1),V(p,S,A.x,0,1)):a||V(p,S,e,D,1),u&&!N){xG(xH(T).multiplyScalar(-1).normalize(),S,b);for(let e=0;e<=s;e++){let t=e/s;xG(T.clone().multiplyScalar(-t).add(O),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}}u&&!a&&p.push(p[0]),U.push(p)}for(let e=0;e<U.length-1;e++)for(let t=0;t<U[0].length-1;t++){if(a&&u&&t==s)continue;let i=U[e][t],r=U[e+1][t],o=U[e+1][t+1],l=U[e][t+1],h=m[3*o+0],c=m[3*o+2];f.push(i,r,l),(0!=h||0!=c)&&f.push(r,o,l)}function k(e,t,r,s,a,o,l,h){for(let c=0;c<d+1;c++){let u=c/d,p=l<0?u:1-u;h&&(p-=1);let f=new tK(Math.sin(p*=s),Math.cos(p)*l);xG(f.clone().multiplyScalar(a).add(o),r,w),m.push(w.x,w.y,w.z),xG(f,r,b),g.push(b.x,b.y,b.z),v.push(t,.5+w.y/i),e.push(y++)}}function V(e,t,i,r,s){let a=new ix,o=new tK,l=[i,r];for(let i of(s<0&&l.reverse(),l))o.set(i,x*s),xG(o,t,a),m.push(a.x,a.y,a.z),g.push(0,s,0),v.push(.5,.5),e.push(y++)}function j(i,r,s){let a=new tK(Math.sin(s),Math.cos(s)),o=new tK(-Math.cos(s),Math.sin(s)),l=new ix,h=i<0?(e,t,i)=>f.push(e,t,i):(e,t,i)=>f.push(e,i,t);xG(new tK((e+t+D+I)/4,0),a,l),m.push(l.x,l.y,l.z),g.push(o.x,0,o.y),v.push(.5,.5);let c=y++;for(let e of r){let t=m.slice(3*e,3*e+3);m.push(...t),g.push(o.x,0,o.y);let i=v.slice(2*e,2*e+2);v.push(...i),y++}for(let e=c+1;e<y-1;e++)h(c,e,e+1);h(c,y-1,c+1)}l<2*Math.PI&&(j(-1,U[0],o),j(1,U[U.length-1],o+l)),this.setIndex(f),this.setAttribute("position",new rD(m,3)),this.setAttribute("normal",new rD(g,3)),this.setAttribute("uv",new rD(v,2))}},xq=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,heightSegments:8,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadiusTop:8,cornerRadiusBottom:8,cornerSegments:8},e.parameters);return i.thetaLength=tZ.clamp(i.thetaLength,0,360),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,cornerRadiusTop:c,cornerRadiusBottom:d,cornerSegments:u}=e.parameters,p;return 0===h?(p=new rN).setAttribute("position",new rD([],3)):p=c>0||d>0||h<360?new xW(0,t/2,r,s,a,o,l,h*Math.PI/180,c,d,u,0,!0):new oc(t/2,r,s,a,o),p.scale(1,1,i/t),Object.assign(p,{userData:{...e,type:"ConeGeometry"}})}},xX=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:1,heightSegments:1,depthSegments:1,cornerRadius:8,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,widthSegments:s,heightSegments:a,depthSegments:o,cornerRadius:l,cornerSegments:h}=e.parameters;return Object.assign(0===l?new r0(t,i,r,s,a,o):new xQ(t,i,r,s,a,o,l,h),{userData:{...e,type:"CubeGeometry"}})}},xY=Math.PI/2,xQ=class extends rN{constructor(e=1,t=1,i=1,r=1,s=1,a=1,o=0,l=4){super(),this.type="BoxGeometry",r=Math.floor(r),s=Math.floor(s),a=Math.floor(a),l=Math.floor(l),o=Math.min(o,e/2,t/2,i/2);let h=[],c=[],d=[],u=[],p=0;function f(e,t,i,r,s,a,l,f,m,g){let v=(a-2*o)/m,y=(l-2*o)/g,x=a/2-o,b=l/2-o,w=f/2,S=m+1,_=g+1,A=0,M=new ix;for(let a=0;a<_;a++){let o=a*y-b;for(let l=0;l<S;l++){let h=l*v-x;
3139M[e]=h*r,M[t]=o*s,M[i]=w,c.push(M.x,M.y,M.z),M[e]=0,M[t]=0,M[i]=f>0?1:-1,d.push(M.x,M.y,M.z),u.push(l/m),u.push(1-a/g),A+=1}}for(let e=0;e<g;e++)for(let t=0;t<m;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=A}function m(e,t,i,r,s,a,f,m,g,v){let y=(f-2*o)/v,x=f/2-o,b=m/2-o,w=g/2,S=v+1,_=0,A=new ix,M=new ix;for(let h=0;h<l+1;h++){let p=h/l*xY,f=Math.sin(p)*o,m=(1-Math.cos(p))*o,g=Math.sin(p),E=Math.cos(p);A[t]=(b+f)*s,A[i]=(w-m)*a,M[e]=0,M[t]=g*Math.sign(A[t]),M[i]=E*Math.sign(A[i]);for(let t=0;t<S;t++){let i=t*y-x;A[e]=i*r,c.push(A.x,A.y,A.z),d.push(M.x,M.y,M.z),u.push(t/v),u.push(0),_+=1}}for(let e=0;e<l;e++)for(let t=0;t<v;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=_}function g(r,s,a){let f=new ix,m=new ix(e/2,t/2,i/2);m.subScalar(o);let g=[],v=r*s*a>0?(e,t,i)=>h.push(e,t,i):(e,t,i)=>h.push(e,i,t);for(let e=0;e<=l;e++){let t=[],i=xY*(1-e/l),h=Math.cos(i),v=Math.sin(i),y=0;for(let i=0;i<=e;i++){let i=Math.cos(y),l=Math.sin(y);f.x=h*i,f.y=v,f.z=h*l;let g=m.clone().addScaledVector(f,o);c.push(r*g.x,s*g.y,a*g.z),d.push(r*f.x,s*f.y,a*f.z),u.push(0,0),t.push(p++),y+=xY/e}g.push(t)}let y=g.length-1;for(let e=0;e<y;e++){let t=g[e],i=g[e+1],r=t.length-1;v(t[0],i[1],i[0]);for(let e=1;e<=r;e++)v(t[e-1],t[e],i[e]),v(t[e],i[e+1],i[e])}}f("z","y","x",-1,-1,i,t,e,a,s),f("z","y","x",1,-1,i,t,-e,a,s),f("x","z","y",1,1,e,i,t,r,a),f("x","z","y",1,-1,e,i,-t,r,a),f("x","y","z",1,-1,e,t,i,r,s),f("x","y","z",-1,-1,e,t,-i,r,s),o>0&&(m("z","y","x",-1,-1,1,i,t,e,a),m("z","y","x",1,-1,-1,i,t,e,a),m("z","y","x",-1,1,-1,i,t,e,a),m("z","y","x",1,1,1,i,t,e,a),m("x","y","z",-1,-1,-1,e,t,i,r),m("x","y","z",1,-1,1,e,t,i,r),m("x","y","z",-1,1,1,e,t,i,r),m("x","y","z",1,1,-1,e,t,i,r),m("y","x","z",-1,-1,1,t,e,i,s),m("y","x","z",1,-1,-1,t,e,i,s),m("y","x","z",1,1,1,t,e,i,s),m("y","x","z",-1,1,-1,t,e,i,s),g(1,1,1),g(-1,1,1),g(1,-1,1),g(-1,-1,1),g(1,1,-1),g(-1,1,-1),g(1,-1,-1),g(-1,-1,-1)),this.setIndex(h),this.setAttribute("position",new rD(c,3)),this.setAttribute("normal",new rD(d,3)),this.setAttribute("uv",new rD(u,2))}},xZ=class extends rN{constructor(e=[],t=[],i="",r=1,s=.2,a=4){super(),this.type="PolyhedronGeometryRound";let o=[],l=[],h=[];(function(){0==(s=Math.min(1-1e-5,s))&&(a=0);let l={IcosahedronGeometry:5,DodecahedronGeometry:3,HexahedronGeometry:3,OctahedronGeometry:4,TetrahedronGeometry:3}[i],c=new ix,d=c.clone(),u=new rw,p=s*r,f=r-p,m=a+1,g=new ix,v=(e,t)=>g.subVectors(e,t).normalize(),y=(e,t)=>Array(e).fill(void 0).map(t),x=y(e.length/3,(t,i)=>new ix().fromArray(e,3*i).setLength(r)),b=[];for(let e=0;e<x.length;e++){let i=x[e],r=[],s,a,o,l=1e10,h=-1;for(;-1!=(h=t.indexOf(e,h+1));){let e=h-h%3;s=t[e+(h+1)%3],a=t[e+(h+2)%3],l=Math.min(l,o=i.distanceToSquared(x[s])),r.push([s,a,o])}l+=1e-6;let c=[],d=0,u=r.length;for(let t=0;t<u;t++){[s,a,o]=r[d];let t=b[s]?.includes(e)==!0;o<=l&&c.push(s+1e6*+t),d=r.findIndex(e=>e[0]==a)}b.push(c)}let w=[];{let e=0,t=0,i,r,s=3==l;for(let o=0;o<=a;o++){i=o*(o+1)/2,r=(o+1)*(o+2)/2;for(let l=0;l<a-o;l++)[e,t]=[i+l+o+2,r+l+o+3],w.push(i,r,...s?[t,i]:[e,r],t,e),[i,r]=[e,t];w.push(i,r,i+a+2)}}let S=c.clone(),_=c.clone(),A=c.clone(),M=c.clone(),E=c.clone(),C=[],T=y(x.length,()=>y(l,()=>c.clone()));for(let e=0;e<x.length;e++){c.copy(x[e]).normalize(),S.copy(c).multiplyScalar(f);let t=b[e];for(let i=0;i<t.length;i++){let r=t[i],s=t[(i+1)%l];u.setFromPointsAndIndices(x,e,r%1e6,s%1e6),u.b.sub(u.a).setLength(1e10).add(u.a),u.c.sub(u.a).setLength(1e10).add(u.a),u.closestPointToPoint(S,T[e][i])}let i=[],r=[],s=[],y=new ix;0==a&&[...T[e]].reduce((e,t)=>e.add(t),y).multiplyScalar(1/l);for(let t=0;t<l;t++){let o=[],h=(t-1+l)%l,u=T[e][h],x=T[e][t];c.copy(u).sub(S),d.copy(x).sub(S);let b=S.angleTo(c),w=c.angleTo(d),C=Math.cos(b)*p;0==a?_.copy(y):_.copy(S).setLength(f+C),r.push(C);let P=[_,u,x];for(let e=0;e<2;e++){let t=P[e],r=P[e+1];M.subVectors(t,S),E.subVectors(r,S),A.crossVectors(M,E).normalize();for(let r=0;r<m;r++){let s=[b,w][e]*r/m;c.copy(M).applyAxisAngle(A,s).add(S),i.push(c.clone()),e&&(v(c,S),o.push([0==r?t:c.clone(),g.clone()]))}e&&(v(r,S),o.push([r,g.clone()]))}s.push(o)}C.push(s);let P=2*m;for(let e=0;e<l;e++){let t=P*e,s=(e+1)%l*P,a=[i[t]];for(let o=1;o<m;o++){M=i[t+o],E=i[s+o],a.push(M);for(let t=1,i=o-2+1;t<=i;t++)c.lerpVectors(M,E,t/(i+1)),c.sub(S).setLength(r[e]).add(S),a.push(c.clone());a.push(E)}for(let e=0;e<m;e++)a.push(i[e+m+t]);a.push(i[s+m]);let d=w.map(e=>a[e]);o.push(...d.map(e=>[e.x,e.y,e.z]).flat()),h.push(...d.map(e=>(v(e,S),[g.x,g.y,g.z])).flat())}}let P=[];for(let e=0;e<b.length;e++)for(let t=0;t<l;t++){let i=b[e][t];if(i<1e6){let r=b[i].findIndex(t=>t%1e6==e),s=C[e][t],a=C[i][r];for(let e=0;e<m;e++){let t=s[e],i=a[m-e],r=s[e+1];
3139[t,i,r,r,i,a[m-(e+1)]].forEach(e=>{o.push(e[0].x,e[0].y,e[0].z),h.push(e[1].x,e[1].y,e[1].z)})}P.push(s[0][0],a[m][0],s[m][0],a[0][0])}}for(;P.length;){let e,t,i,r;[e,t]=P.splice(0,2);let s=[e];for(;e!=t;)s.push(t),r=(i=P.indexOf(t))%2,t=P.splice(i-r,2)[1-r];g.subVectors(s[0],s[1]).cross(c.subVectors(s[0],s[2])).normalize();let a=0>g.dot(s[0]);a&&g.negate();for(let e=1;e<=s.length-2;e++)[s[e+ +a],s[e+1-+a],s[0]].forEach(e=>{o.push(e.x,e.y,e.z),h.push(g.x,g.y,g.z)})}})(),function(){let e=new ix;for(let t=0;t<o.length;t+=3){e.x=o[t+0],e.y=o[t+1],e.z=o[t+2];let i=u(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;l.push(i,1-r)}let t=new ix,i=new ix,r=new ix,s=new ix,a=new tK,h=new tK,c=new tK,d=(e,t,i,r)=>{r<0&&1===e.x&&(l[t]=e.x-1),0===i.x&&0===i.z&&(l[t]=r/2/Math.PI+.5)};for(let e=0,p=0;e<o.length;e+=9,p+=6){t.set(o[e+0],o[e+1],o[e+2]),i.set(o[e+3],o[e+4],o[e+5]),r.set(o[e+6],o[e+7],o[e+8]),a.set(l[p+0],l[p+1]),h.set(l[p+2],l[p+3]),c.set(l[p+4],l[p+5]),s.copy(t).add(i).add(r).divideScalar(3);let f=u(s);d(a,p+0,t,f),d(h,p+2,i,f),d(c,p+4,r,f)}for(let e=0;e<l.length;e+=6){let t=l[e+0],i=l[e+2],r=l[e+4],s=Math.max(t,i,r),a=Math.min(t,i,r);s>
vendor: 1,347 bytes, line 3139
3139.9&&a<.1&&(t<.2&&(l[e+0]+=1),i<.2&&(l[e+2]+=1),r<.2&&(l[e+4]+=1))}function u(e){return Math.atan2(e.z,-e.x)}}(),this.setAttribute("position",new rD(o,3)),this.setAttribute("normal",new rD(h,3)),this.setAttribute("uv",new rD(l,2))}static fromJSON(e){return new xZ(e.vertices,e.indices,e.radius,e.corner,e.cornerSides)}},xK=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new xJ(.5*t,a,o):new ou(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"DodecahedronGeometry"}})}},xJ=class extends xZ{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s=1/r,a="DodecahedronGeometry";super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-r,0,-s,r,0,s,-r,0,s,r,-s,-r,0,-s,r,0,s,-r,0,s,r,0,-r,0,-s,r,0,-s,-r,0,s,r,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
vendor: 4,241 bytes, line 3139
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,e,t,i),this.type=a}static fromJSON(e){return new xJ(e.radius,e.corner,e.cornerSides)}},x$=class{constructor(e){this.position=new tK,this.startPosition=new tK,this.uuid=tZ.generateUUID(),this.position=e.clone()}start(){this.reset()}reset(){this.startPosition.copy(this.position)}applyOffset(e){this.position.copy(this.startPosition).add(e)}copy(e){return this.position.copy(e.position),this.startPosition.copy(e.startPosition),this}clone(){return new x$(this.position).copy(this)}toJSON(){return[this.position.x,this.position.y]}},x0=class extends x${constructor(e){super(e.position),this.parent=e}copy(e){return super.copy(e),this}clone(){return new x0(this.parent).copy(this)}},x1=class extends x${constructor(e,t){super(t),this.controls=[],this.roundness=0,this.areControlsDirectionsMirrored=!0,this.uuid=e,this.controls.push(new x0(this),new x0(this))}static create(e,t){let i=new x1(e,new tK(...t.position));return i.controls[0].position.set(...t.controlPrevious.position),i.controls[1].position.set(...t.controlNext.position),i.roundness=t.roundness,i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored,i}getOppositeControl(e){let t=this.controls.indexOf(e);return 0===t?this.controls[1]:1===t?this.controls[0]:null}applyOffsetToControls(e,t=1){for(let i=0,r=this.controls.length;i<r;i++){let r=this.controls[i];this.position.distanceTo(r.position)<=t?r.position.copy(this.position):r.applyOffset(e)}}controlsMoved(){return!(this.position.equals(this.controls[0].position)&&this.position.equals(this.controls[1].position))}copy(e){return super.copy(e),this.controls[0].copy(e.controls[0]),this.controls[1].copy(e.controls[1]),this.roundness=e.roundness,this.uuid=e.uuid,this}clone(){return new x1(this.uuid,this.position).copy(this)}toJSON(){return super.toJSON().concat(this.controls[0].toJSON(),this.controls[1].toJSON(),[this.roundness])}computeTangents(){return[this.curveBefore?.getTangentAt(1),this.curveAfter?.getTangentAt(0)]}computeNormals(e=new tK,t=new tK){let[i,r]=this.computeTangents();return i&&r&&(x2(i,e),x2(r,t)),[e,t]}computeTangent(e=new tK){let[t,i]=this.computeTangents();return t&&i&&e.copy(t).add(i).normalize(),e}computeNormal(e=new tK){let[t,i]=this.computeNormals();return e.copy(t).add(i).normalize(),e}};function x2(e,t=new tK){let i=e.length();return t.set(-e.y/i,e.x/i)}var x3=e=>e,x4=new tK,x5=new tK,x6=new tK,x8=new tK,x9=new tK,x7=new tK,be=new ix,bt=new ix;function bi(e,t,i=Number.EPSILON){return Math.abs(e-t)<i}function br(e,t,i){let r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),s=Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)),a=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));return Math.acos((s*s+r*r-a*a)/(2*s*r))}function bs(e,t,i){return 0===x4.copy(t).sub(e).cross(x5.copy(i).sub(e))}function ba(e,t){return e.position.equals(e.controls[1].position)&&t.position.equals(t.controls[0].position)}function bn(e,t){return bs(e.position,e.controls[1].position,t.position)&&bs(e.position,t.controls[0].position,t.position)}function bo(e,t=12,i=!1){let r=[];for(let s=0,a=e.length;s<a;s++){let a=e[s],o=0;if(i&&void 0!==a.roundedCurveCorner){let e=.5*bl(a.roundedCurveCorner,t);s>0&&(r[s-1]+=e),o+=e}void 0!==a.curveAfter&&(o+=bl(a.curveAfter,t)),r.push(o)}return e.length>0&&i&&void 0!==e[0].roundedCurveCorner&&(r[e.length-1]+=.5*bl(e[0].roundedCurveCorner,t)),r}function bl(e,t=12){return e&&e instanceof nK?2*t:e&&(e instanceof oe||e instanceof ot)?1:e&&e instanceof os?t*e.points.length:t}var bh=new tK,bc=new tK,bd=new tK,bu=new tK,bp=new tK,bf=new tK,bm=class extends op{constructor(e=100,t=100){super(),this.points=[],this.shapeHoles=[],this.plane=new sn(new ix(0,0,-1)),this.subdivision=0,this.controlSnapDistance=4,this.pointIDs=0,this.isMesh2D=!1,this.isText=!1,this._roundness=0,this.isClosed=!1,this.useCubicForRoundedCorners=!0,this.uuid=tZ.generateUUID(),this.needsUpdate=!1,this.roundedCurves=[],this._width=e,this._height=t}static createFromState(e,t,i){let r=new bm;return r.isClosed=e.isClosed,r.points=e.points.map(e=>x1.create(e.id,e.data)),"number"==typeof e.roundness&&(r.roundness=e.roundness),r.shapeHoles=e.shapeHoles.map(e=>bm.createFromState(e)),void 0!==t&&void 0!==i&&r.applySize(t,i),r.update(
3139),r}get width(){return this._width}get height(){return this._height}get roundness(){return this._roundness}set roundness(e){if(this._roundness!==e){this._roundness=e;for(let t=0,i=this.points.length;t<i;t++)this.points[t].roundness=e;this.needsUpdate=!0}}getPointsIndexesByIds(e){return e.map(e=>this.getPointIndexById(e)).filter(e=>e>=0)}getPointIndexById(e){let t=this.points.length,i=this.points.findIndex(t=>t.uuid===e);if(i<0){let i=t;for(let t=0,r=this.shapeHoles.length;t<r;t++){let r=this.shapeHoles[t],s=r.points.length,a=r.getPointIndexById(e);if(!(a<0))return a+i;i+=s}}return i}getLineIndexById(e){return this.getPointIndexById(e)}getBezierPoint(e){if(e<=this.points.length-1)return this.points[e];if(this.shapeHoles.length>0){let t=this.points.length;for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=e-t;if(s<=r.points.length-1)return r.points[s];t+=r.points.length}}throw Error("This shape does not have a point for this index: "+e)}getBezierPointIndex(e){let t=this.points.indexOf(e);if(t>=0)return t;if(t=this.points.length,this.shapeHoles.length>0)for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=r.points.indexOf(e);if(s>=0)return t+s;t+=r.points.length}return -1}getAllPoints(){let e=[].concat(...this.shapeHoles.map(e=>e.points));return[...this.points,...e]}applySize(e,t){0===e&&(e=.001),0===t&&(t=.001),this._width=e,this._height=t}applyScale(e,t){let i=bh.set(e,t);for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];t.position.multiply(i),t.controls[0].position.multiply(i),t.controls[1].position.multiply(i)}for(let i=0,r=this.shapeHoles.length;i<r;i++)this.shapeHoles[i].applyScale(e,t);this._update()}createPoint(e,t=0,i=tZ.generateUUID()){let r=new x1(i,e instanceof tK?e:new tK(e,t));return r.roundness=this.roundness,r}addPoint(e){this.points.push(e),this.needsUpdate=!0}addPointAt(e,t){this.points.splice(t,0,e),this.needsUpdate=!0}getPointByUuid(e){for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];if(i.uuid===e)return i}for(let t=0,i=this.shapeHoles.length;t<i;t++){let i=this.shapeHoles[t].getPointByUuid(e);if(i)return i}}getFirstPoint(){return this.points[0]}getLastPoint(){return this.points[this.points.length-1]}removePoint(e){let t=this.points.indexOf(e);t>=0&&this.points.splice(t,1),this.needsUpdate=!0}removePointById(e){let t=this.points.find(t=>t.uuid===e);t&&this.removePoint(t)}update(){for(let e=0,t=this.shapeHoles.length;e<t;e++)this.shapeHoles[e].update();this._update()}extractShapePointsToBuffer(e,t=12,i=!1){this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t);let r=i?this.roundedCurveDivisions:this.curveDivisions;return function(e,t,i=12,r=!0){let s=bt.set(0,0,0),a,o=0,l=[];for(let r=0;r<t.length;r++){let h=x3(t[r]),c=bl(h,i);l.push(c);for(let t=0;t<=c;t++)if(h instanceof n9||h instanceof oi||h instanceof oe){if(h.getPoint(t/c,x4),s.set(x4.x,x4.y,0),void 0!==a&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(a,s))continue;void 0===a&&(a=be),a.copy(s),e.setXYZ(o,s.x,s.y,s.z),o++}}r&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++)}(e,i?this.roundedCurves:this.curves,t,this.autoClose),r.reduce((e,t)=>e+t,0)+1}computeCurveDivisions(e=12){return this.curveDivisions=bo(this.points,e,!1),this.roundedCurveDivisions=bo(this.points,e,!0),this.curveDivisions}extractFilteredShapePointsToBuffer(e,t,i=12){return 2*(function(e,t,i,r=12,s=!0){let a=bt.set(0,0,0),o=0,l=[];for(let s=0;s<t.length;s++){if(!1===i[s])continue;let h,c=x3(t[s]),d=bl(c,r);l.push(d);for(let t=0;t<=d;t++)if(c instanceof n9||c instanceof oi||c instanceof oe){if(c.getPoint(t/d,x4),a.set(x4.x,x4.y,0),h?.equals(a))continue;void 0===h?h=be:(e.setXYZ(o,h.x,h.y,h.z),o++,e.setXYZ(o,a.x,a.y,a.z),o++),h.copy(a)}}return s&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++),l})(e,this.curves,t,i,this.autoClose).reduce((e,t)=>e+t,0)}extractShapePointsToFlatArray(e,t=12){return this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t),function(e,t,i=12,r=!0){let s,a=0;for(let r=0;r<t.length;r++){let o=x3(t[r]),l=bl(o,i);for(let t=0;t<=l;t++)if(o instanceof n9||o instanceof oi||o instanceof oe){if(o.getPoint(t/l,x4),void 0!==s&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(s,x4,1e-12))continue;void 0===s&&(s=x5),s.copy(x4),e.push(x4.x,x4.y),a++}}return bi(e[0],e[e.length-2],1e-12)&&bi(e[1],e[e.length-1],1e-12)&&(e.pop(),e.pop()),r&&a>1&&!(bi(e[a-1],e[1],1e-12)&&bi(e[a-2],e[0],1e-12))&&(e.push(e[0],e[1]),a++),e}(e,this.roundedCurves,t,this.autoClose)}getCurveIndexFromVertexId(e,t=!1){let i=0;void 0===this.curveDivisions&&this.computeCurveDivisions(this.subdivision);let r=t?this.roundedCurveDivisions:this.curveDivisions,s=0;
3139t&&void 0!==this.points[0].roundedCurveCorner&&(s=.5*bl(this.points[0].roundedCurveCorner,this.subdivision));let a=e-s;a<0&&(a+=r.reduce((e,t)=>e+t,0));for(let e=0,t=r.length;e<t;e++){let t=r[e];if(a<i+t)return[e,(a-i+1)/t];i+=t}return[0,1]}getCurveT(e,t,i){let r=this.points[e],s=this.points[e>=this.points.length-1?0:e+1],a=this.curveDivisions,o=a[e];if(ba(r,s)){let e=r.position.distanceTo(s.position);return r.position.distanceTo(bh.set(i.x,i.y))/e}let l=0;for(let t=0;t<e;t++)l+=a[t];return(t-l)/o}dispose(){}_applyCurveForPoint(e,t){ba(t,e)?this.lineTo(e.position.x,e.position.y):this.bezierCurveTo(t.controls[1].position.x,t.controls[1].position.y,e.controls[0].position.x,e.controls[0].position.y,e.position.x,e.position.y);let i=this.curves[this.curves.length-1];e.curveBefore=i,t.curveAfter=i;let r=i.clone();e.roundedCurveBefore=r,t.roundedCurveAfter=r,e.roundedCurveCorner=void 0,this.roundedCurves.push(r)}_update(){if(this.curves=[],this.roundedCurves=[],!this.points.length)return;for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];if(0===e)this.moveTo(t.position.x,t.position.y);else{let i=this.points[e-1];this._applyCurveForPoint(t,i)}}let e=this.getLastPoint();if(e?.curveAfter&&(e.curveAfter=void 0),this.isClosed){let e=this.points[0],t=this.points[this.points.length-1];this._applyCurveForPoint(e,t)}if(this.points.length>2){let e=0;for(let i=0,r=this.points.length;i<r;i++){var t;let r=this.points[i],s=this.points[i-1]??this.points[this.points.length-1],a=this.points[i+1]??this.points[0],o=r.roundness,l=s&&a&&bn(s,r)&&bn(r,a)&&bs(s.position,r.position,a.position);if(!r.controlsMoved()&&o>0&&!l){let s,a=r.curveBefore,l=r.curveAfter;if(void 0===a||void 0===l)continue;let h=r.roundedCurveBefore,c=r.roundedCurveAfter,d=a.getLength(),u=l.getLength(),p=Math.min(Math.min(o,.499*d),Math.min(o,.499*u)),f=1-p/d,m=p/u,g=a.getPointAt(f,bh),v=l.getPointAt(m,bc);if(this._subSplitCurve(a,h,f,g,void 0),this._subSplitCurve(l,c,m,void 0,v),this.useCubicForRoundedCorners){let e=Math.tan(br(g,r.position,v)/2)*g.distanceTo(r.position),[i,a]=function(e,t,i,r,s){let a=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=(e.y+t.y)/2,l=(e.x+t.x)/2,h=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(e.y-t.y)/a,c=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(t.x-e.x)/a;return r.set(l+h,o+c),s.set(l-h,o-c),[r,s]}(g,v,e,bd,bu),[o,l]=function(e,t,i,r,s,a){let o=t.x-e.x,l=t.y-e.y,h=i.x-e.x,c=i.y-e.y,d=Math.sqrt((o+h)*(o+h)+(l+c)*(l+c)),u;return br(t,e,i)>Math.PI&&(d*=-1),u=bi(c,l)?(l+c)*(r/d-.5)*8/3/(o-h):(o+h)*(r/d-.5)*8/3/(c-l),s.set(t.x-u*l,t.y+u*o),a.set(i.x+u*c,i.y-u*h),[s,a]}((t=r.position,i.distanceTo(t)<a.distanceTo(t)?a:i),g,v,e,bp,bf);s=new n9(g.clone(),o.clone(),l.clone(),v.clone())}else s=new oi(g.clone(),r.position.clone(),v.clone());r.roundedCurveCorner=s,this.roundedCurves.splice(i+e,0,s),e++}}}}_subSplitCurve(e,t,i,r,s){if(e instanceof oe)void 0!==r&&t.v2.copy(r),void 0!==s&&t.v1.copy(s);else{let a=e.getUtoTmapping(i,0),o=function(e,t,i,r,s=.5){let a=x4.subVectors(t,e).multiplyScalar(s).add(e),o=x5.subVectors(i,t).multiplyScalar(s).add(t),l=x6.subVectors(r,i).multiplyScalar(s).add(i),h=x8.subVectors(o,a).multiplyScalar(s).add(a),c=x9.subVectors(l,o).multiplyScalar(s).add(o),d=x7.subVectors(c,h).multiplyScalar(s).add(h);return[e.x,e.y,a.x,a.y,h.x,h.y,d.x,d.y,c.x,c.y,l.x,l.y,r.x,r.y]}(e.v0,e.v1,e.v2,e.v3,a);return void 0!==r&&(t.v0.set(o[0],o[1]),t.v1.set(o[2],o[3]),t.v2.set(o[4],o[5]),t.v3.set(o[6],o[7])),void 0!==s&&(t.v0.set(o[6],o[7]),t.v1.set(o[8],o[9]),t.v2.set(o[10],o[11]),t.v3.set(o[12],o[13])),t}return t}clone(){let e=new bm(this._width,this._height);return e.points=this.points.map(e=>e.clone()),e.isClosed=this.isClosed,e.roundness=this.roundness,e.isMesh2D=this.isMesh2D,e.shapeHoles=this.shapeHoles.map(e=>e.clone()),e}toJSON(){return{points:this.points.reduce((e,t)=>e.concat(t.toJSON()),[]),shapeHoles:this.shapeHoles.map(e=>e.toJSON()),isClosed:this.isClosed,roundness:this.roundness}}fromJSON(e){this.points=[],this.pointIDs=0;let t=e.points.length/7;for(let i=0;i<t;i++){let t=7*i,r=e.points[t+0],s=e.points[t+1],a=e.points[t+2],o=e.points[t+3],l=e.points[t+4],h=e.points[t+5],c=e.points[t+6],d=new x1(tZ.generateUUID(),new tK(r,s));d.controls[0].position.set(a,o),d.controls[1].position.set(l,h),d.roundness=c,this.points.push(d)}return this.shapeHoles=e.shapeHoles?.length?e.shapeHoles.map(e=>{let t=new bm;return t.fromJSON(e),t}):[],this.isClosed=e.isClosed,this._roundness=e.roundness,this._update(),this}fromShape(e,t=!1){this.isText=t;let i=(e,t)=>{t instanceof n9&&t.v3.equals(e.position)&&e.controls[0].position.copy(t.v2)};return this.points=(e=>{let t=[],r,s;for(r=0,s=e.length;r<s;r++)e[r]instanceof oi&&(e[r]=function(e){let t=new tK;t.addVectors(e.v0,x4.subVectors(e.v1,e.v0).multiplyScalar(2/3));let i=new tK;return i.addVectors(e.v2,x5.subVectors(e.v1,e.v2).multiplyScalar(2/3)),new n9(e.v0,t,i,e.v2)}(e[r]));for(r=0,s=e.length;r<s;r++){let s=e[r],a=r>0?e[r-1]:null,o;s instanceof n9?(o=this.createPoint(s.v0)).controls[1].position.copy(s.v1):s instanceof oe&&(
vendor: 12,851 bytes, line 3139
3139o=this.createPoint(s.v1)),void 0!==o&&(null!==a&&i(o,a),t.push(o))}let a=e[e.length-1],o=!1;return a instanceof n9?a.v3.equals(t[0].position)&&(t[0].controls[0].position.copy(a.v2),o=!0):a instanceof oe&&a.v2.equals(t[0].position)&&(o=!0),this.isClosed=o,t})(e.curves),e instanceof op&&(this.shapeHoles=e.holes.map(e=>{let t=new bm;return t.fromShape(e),t})),this.update(),this}updatePoint(e,t){let i=this.getPointByUuid(e);i&&(void 0!==t.position&&i.position.fromArray(t.position),void 0!==t.roundness&&(i.roundness=t.roundness),void 0!==t.areControlsDirectionsMirrored&&(i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored),this.needsUpdate=!0)}updatePreviousControl(e,t){let i=this.getPointByUuid(e)?.controls[0];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}updateNextControl(e,t){let i=this.getPointByUuid(e)?.controls[1];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}},bg=2*Math.PI;function bv({x:e,y:t},i,r,s,a){return{x:e*i+s,y:t*r+a}}function by(e,t,i,r){let s=Math.min(1,Math.max(-1,e*i+t*r));return(e*r-t*i<0?-1:1)*Math.acos(s)}function bx(e,t){if(!e)throw t||"Assertion Failed!"}(wY=wK||(wK={}))[wY.ODD=0]="ODD",wY[wY.NONZERO=1]="NONZERO",wY[wY.POSITIVE=2]="POSITIVE",wY[wY.NEGATIVE=3]="NEGATIVE",wY[wY.ABS_GEQ_TWO=4]="ABS_GEQ_TWO",(wQ=wJ||(wJ={}))[wQ.POLYGONS=0]="POLYGONS",wQ[wQ.CONNECTED_POLYGONS=1]="CONNECTED_POLYGONS",wQ[wQ.BOUNDARY_CONTOURS=2]="BOUNDARY_CONTOURS";var bb=function(){function e(){}return e.vertEq=function(e,t){return e.s===t.s&&e.t===t.t},e.vertLeq=function(e,t){return e.s<t.s||e.s===t.s&&e.t<=t.t},e.transLeq=function(e,t){return e.t<t.t||e.t===t.t&&e.s<=t.s},e.edgeGoesLeft=function(t){return e.vertLeq(t.Dst,t.Org)},e.edgeGoesRight=function(t){return e.vertLeq(t.Org,t.Dst)},e.vertL1dist=function(e,t){return Math.abs(e.s-t.s)+Math.abs(e.t-t.t)},e.edgeEval=function(t,i,r){bx(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?s<a?i.t-t.t+(t.t-r.t)*(s/(s+a)):i.t-r.t+(r.t-t.t)*(a/(s+a)):0},e.edgeSign=function(t,i,r){bx(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?(i.t-r.t)*s+(i.t-t.t)*a:0},e.transEval=function(t,i,r){bx(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?s<a?i.s-t.s+(t.s-r.s)*(s/(s+a)):i.s-r.s+(r.s-t.s)*(a/(s+a)):0},e.transSign=function(t,i,r){bx(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?(i.s-r.s)*s+(i.s-t.s)*a:0},e.vertCCW=function(e,t,i){return e.s*(t.t-i.t)+t.s*(i.t-e.t)+i.s*(e.t-t.t)>=0},e.interpolate=function(e,t,i,r){return(e=e<0?0:e)<=(i=i<0?0:i)?0===i?(t+r)/2:t+e/(e+i)*(r-t):r+i/(e+i)*(t-r)},e.intersect=function(t,i,r,s,a){var o,l,h;e.vertLeq(t,i)||(h=t,t=i,i=h),e.vertLeq(r,s)||(h=r,r=s,s=h),e.vertLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.vertLeq(r,i)?e.vertLeq(i,s)?((o=e.edgeEval(t,r,i))+(l=e.edgeEval(r,i,s))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,i.s)):((o=e.edgeSign(t,r,i))+(l=-e.edgeSign(t,s,i))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,s.s)):a.s=(r.s+i.s)/2,e.transLeq(t,i)||(h=t,t=i,i=h),e.transLeq(r,s)||(h=r,r=s,s=h),e.transLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.transLeq(r,i)?e.transLeq(i,s)?((o=e.transEval(t,r,i))+(l=e.transEval(r,i,s))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,i.t)):((o=e.transSign(t,r,i))+(l=-e.transSign(t,s,i))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,s.t)):a.t=(r.t+i.t)/2},e}(),bw=function(){this.next=null,this.prev=null,this.anEdge=null,this.trail=null,this.n=0,this.marked=!1,this.inside=!1},bS=function(){function e(e){this.side=e,this.next=null,this.Org=null,this.Sym=null,this.Onext=null,this.Lnext=null,this.Lface=null,this.activeRegion=null,this.winding=0}return Object.defineProperty(e.prototype,"Rface",{get:function(){return this.Sym.Lface},set:function(e){this.Sym.Lface=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dst",{get:function(){return this.Sym.Org},set:function(e){this.Sym.Org=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Oprev",{get:function(){return this.Sym.Lnext},set:function(e){this.Sym.Lnext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Lprev",{get:function(){return this.Onext.Sym},set:function(e){this.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dprev",{get:function(){return this.Lnext.Sym},set:function(e){this.Lnext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rprev",{get:function(){return this.Sym.Onext},set:function(e){this.Sym.Onext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dnext",{get:function(){return this.Sym.Onext.Sym},set:function(e){this.Sym.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rnext",{get:function(){return this.Sym.Lnext.Sym},set:function(e){this.Sym.Lnext.Sym=e},enumerable:!0,configurable:!0}),e}(),b_=function(){this.next=null,this.prev=null,this.anEdge=null,this.coords=[0,0,0],this.s=0,this.t=0,this.pqHandle=0,this.n=0,this.idx=0},bA=function(){function e(){var e=new b_,t=new bw,i=new bS(0),r=new bS(1);e.next=e.prev=e,e.anEdge=null,t.next=t.prev=t,i.next=i,i.Sym=r,r.next=r,r.Sym=i,this.vHead=e,this.fHead=t,this.eHead=i,this.eHeadSym=r}return e.prototype.makeEdge_=function(e){var t=new bS(0),i=new bS(1);e.Sym.side<e.side&&(e=e.Sym);var r=e.Sym.next;return i.next=r,r.Sym.next=t,t.next=e,e.Sym.next=i,t.Sym=i,t.Onext=t,t.Lnext=i,t.Org=null,t.Lface=null,t.winding=0,t.activeRegion=null,i.Sym=t,i.Onext=i,i.Lnext=t,i.Org=null,i.Lface=null,i.winding=0,i.activeRegion=null,t},e.prototype.splice_=function(e,t){var i=e.Onext,r=t.Onext;i.Sym.Lnext=t,r.Sym.Lnext=e,e.Onext=r,t.Onext=i},e.prototype.makeVertex_=function(e,t,i){bx(e,"Vertex can't be null!");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t;var s=t;do s.Org=e,s=s.Onext;while(s!==t)},e.prototype.makeFace_=function(e,t,i){bx(e,"Face can't be null");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t,e.trail=null,e.marked=!1,e.inside=i.inside;var s=t;do s.Lface=e,s=s.Lnext;while(s!==t)},e.prototype.killEdge_=function(e){e.Sym.side<e.side&&(e=e.Sym);var t=e.next,i=e.Sym.next;t.Sym.next=i,i.Sym.next=t},e.prototype.killVertex_=function(e,t){var i=e.anEdge,r=i;do r.Org=t,r=r.Onext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.killFace_=function(e,t){var i=e.anEdge,r=i;do r.Lface=t,r=r.Lnext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.makeEdge=function(){var e=new b_,t=new b_,i=new bw,r=this.makeEdge_(this.eHead);return this.makeVertex_(e,r,this.vHead),this.makeVertex_(t,r.Sym,this.vHead),this.makeFace_(i,r,this.fHead),r},e.prototype.splice=function(e,t){var i=!1,r=!1;if(e!==t){if(t.Org!==e.Org&&(r=!0,this.killVertex_(t.Org,e.Org)),t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(t,e),!r){var s=new b_;this.makeVertex_(s,t,e.Org),e.Org.anEdge=e}if(!i){var a=new bw;this.makeFace_(a,t,e.Lface),e.Lface.anEdge=e}}},e.prototype.delete=function(e){var t=e.Sym,i=!1;if(e.Lface!==e.Rface&&(i=!0,this.killFace_(e.Lface,e.Rface)),e.Onext===e)this.killVertex_(e.Org,null);else if(e.Rface.anEdge=e.Oprev,e.Org.anEdge=e.Onext,this.splice_(e,e.Oprev),!i){var r=new bw;this.makeFace_(r,e,e.Lface)}t.Onext===t?(this.killVertex_(t.Org,null),this.killFace_(t.Lface,null)):(e.Lface.anEdge=t.Oprev,t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),this.killEdge_(e)},e.prototype.addEdgeVertex=function(e){var t=this.makeEdge_(e),i=t.Sym;this.splice_(t,e.Lnext),t.Org=e.Dst;var r=new b_;return this.makeVertex_(r,i,t.Org),t.Lface=i.Lface=e.Lface,t},e.prototype.splitEdge=function(e){var t=this.addEdgeVertex(e).Sym;return this.splice_(e.Sym,e.Sym.Oprev),this.splice_(e.Sym,t),e.Dst=t.Org,t.Dst.anEdge=t.Sym,t.Rface=e.Rface,t.winding=e.winding,t.Sym.winding=e.Sym.winding,t.idx=e.idx,t.Sym.idx=e.Sym.idx,t},e.prototype.connect=function(e,t){var i=!1,r=this.makeEdge_(e),s=r.Sym;if(t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(r,e.Lnext),this.splice_(s,t),r.Org=e.Dst,s.Org=t.Org,r.Lface=s.Lface=e.Lface,e.Lface.anEdge=s,!i){var a=new bw;this.makeFace_(a,r,e.Lface)}return r},e.prototype.zapFace=function(e){var t,i,r,s,a,o=e.anEdge;i=o.Lnext;do i=(t=i).Lnext,t.Lface=null,null===t.Rface&&(t.Onext===t?this.killVertex_(t.Org,null):(t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),(r=t.Sym).Onext===r?this.killVertex_(r.Org,null):(r.Org.anEdge=r.Onext,this.splice_(r,r.Oprev)),this.killEdge_(t));while(t!=o);s=e.prev,(a=e.next).prev=s,s.next=a},e.prototype.countFaceVerts_=function(e){var t=e.anEdge,i=0;do i++,t=t.Lnext;while(t!==e.anEdge);return i},e.prototype.mergeConvexFaces=function(e){var t,i,r,s,a;for(t=this.fHead.next;t!==this.fHead;t=t.next)if(t.inside)for(a=(i=t.anEdge).Org;r=i.Lnext,(s=i.Sym)&&s.Lface&&s.Lface.inside&&this.countFaceVerts_(t)+this.countFaceVerts_(s.Lface)-2<=e&&bb.vertCCW(i.Lprev.Org,i.Org,s.Lnext.Lnext.Org)&&bb.vertCCW(s.Lprev.Org,s.Org,i.Lnext.Lnext.Org)&&(r=s.Lnext,this.delete(s),i=null,s=null),!(i&&i.Lnext.Org===a);)i=r;return!0},e.prototype.check=function(){var e,t,i,r,s,a,o=this.fHead,l=this.vHead,h=this.eHead;for(t=o,t=o;(e=t.next)!==o;t=e){bx(e.prev===t),s=e.anEdge;do bx(s.Sym!==s),bx(s.Sym.Sym===s),bx(s.Lnext.Onext.Sym===s),bx(s.Onext.Sym.Lnext===s),bx(s.Lface===e),s=s.Lnext;while(s!==e.anEdge)}for(bx(e.prev===t&&null===e.anEdge),r=l,r=l;(i=r.next)!==l;r=i){bx(i.prev===r),s=i.anEdge;do bx(s.Sym!==s),bx(s.Sym.Sym===s),bx(s.Lnext.Onext.Sym===s),bx(s.Onext.Sym.Lnext===s),bx(s.Org===i),s=s.Onext;while(s!==i.anEdge)}for(bx(i.prev===r&&null===i.anEdge),a=h,a=h;(s=a.next)!==h;a=s)bx(s.Sym.next===a.Sym),bx(s.Sym!==s),bx(s.Sym.Sym===s),bx(null!==s.Org),bx(null!==s.Dst),bx(s.Lnext.Onext.Sym===s),bx(s.Onext.Sym.Lnext===s);bx(s.Sym.next===a.Sym&&s.Sym===this.eHeadSym&&s.Sym.Sym===s&&null===s.Org&&null===s.Dst&&null===s.Lface&&null===s.Rface)},e}(),bM=function(){this.handle=null},bE=function(){this.key=null,this.node=0},bC=function(){function e(e,t){this.leq=t,this.max=0,this.nodes=[],this.handles=[],this.initialized=!1,this.freeList=0,this.size=0,this.max=e,this.nodes=[],this.handles=[];for(var i=0;i<e+1;i++)this.nodes[i]=new bM,this.handles[i]=new bE;this.initialized=!1,this.nodes[1].handle=1,this.handles[1].key=null}return e.prototype.floatDown_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if((r=e<<1)<this.size&&this.leq(a[s[r+1].handle].key,a[s[r].handle].key)&&++r,bx(r<=this.max),i=s[r].handle,r>this.size||this.leq(a[t].key,a[i].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.floatUp_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if(i=s[r=e>>1].handle,0===r||this.leq(a[i].key,a[t].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.init=function(){for(var e=this.size;e>=1;--e)this.floatDown_(e);this.initialized=!0},e.prototype.min=function(){return this.handles[this.nodes[1].handle].key},e.prototype.insert=function(e){var t,i,r,s;if(2*(t=++this.size)>this.max){for(this.max*=2,s=this.nodes.length,this.nodes.length=this.max+1,r=s;r<this.nodes.length;r++)this.nodes[r]=new bM;for(s=this.handles.length,this.handles.length=this.max+1,r=s;r<this.handles.length;r++)this.handles[r]=new bE}return 0===this.freeList?i=t:(i=this.freeList,this.freeList=this.handles[i].node),this.nodes[t].handle=i,this.handles[i].node=t,this.handles[i].key=e,this.initialized&&this.floatUp_(t),i},e.prototype.extractMin=function(){var e=this.nodes,t=this.handles,i=e[1].handle,r=t[i].key;return this.size>0&&(e[1].handle=e[this.size].handle,t[e[1].handle].node=1,t[i].key=null,t[i].node=this.freeList,this.freeList=i,--this.size,this.size>0&&this.floatDown_(1)),r},e.prototype.delete=function(e){var t,i=this.nodes,r=this.handles;bx(e>=1&&e<=this.max&&null!==r[e].key),i[t=r[e].node].handle=i[this.size].handle,r[i[t].handle].node=t,--this.size,t<=this.size&&(t<=1||this.leq(r[i[t>>1].handle].key,r[i[t].handle].key)?this.floatDown_(t):this.floatUp_(t)),r[e].key=null,r[e].node=this.freeList,this.freeList=e},e}(),bT=function(){this.eUp=null,this.nodeUp=null,this.windingNumber=0,this.inside=!1,this.sentinel=!1,this.dirty=!1,this.fixUpperEdge=!1},bP=function(){this.key=null,this.next=null,this.prev=null},bD=function(){function e(e,t){this.frame=e,this.leq=t,this.head=new bP,this.head.next=this.head,this.head.prev=this.head}return e.prototype.min=function(){return this.head.next},e.prototype.max=function(){return this.head.prev},e.prototype.insert=function(e){return this.insertBefore(this.head,e)},e.prototype.search=function(e){var t=this.head;do t=t.next;while(null!==t.key&&!this.leq(this.frame,e,t.key));return t},e.prototype.insertBefore=function(e,t){do e=e.prev;while(null!==e.key&&!this.leq(this.frame,e.key,t));var i=new bP;return i.key=t,i.next=e.next,e.next.prev=i,i.prev=e,e.next=i,i},e.prototype.delete=function(e){e.next.prev=e.prev,e.prev.next=e.next},e}(),bI=function(){function e(){}
3139return e.regionBelow=function(e){return e.nodeUp.prev.key},e.regionAbove=function(e){return e.nodeUp.next.key},e.debugEvent=function(e){},e.addWinding=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.edgeLeq=function(e,t,i){var r=e.event,s=t.eUp,a=i.eUp;return s.Dst===r?a.Dst===r?bb.vertLeq(s.Org,a.Org)?0>=bb.edgeSign(a.Dst,s.Org,a.Org):bb.edgeSign(s.Dst,a.Org,s.Org)>=0:0>=bb.edgeSign(a.Dst,r,a.Org):a.Dst===r?bb.edgeSign(s.Dst,r,s.Org)>=0:bb.edgeEval(s.Dst,r,s.Org)>=bb.edgeEval(a.Dst,r,a.Org)},e.deleteRegion=function(e,t){t.fixUpperEdge&&bx(0===t.eUp.winding),t.eUp.activeRegion=null,e.dict.delete(t.nodeUp)},e.fixUpperEdge=function(e,t,i){bx(t.fixUpperEdge),e.mesh.delete(t.eUp),t.fixUpperEdge=!1,t.eUp=i,i.activeRegion=t},e.topLeftRegion=function(t,i){var r,s=i.eUp.Org;do i=e.regionAbove(i);while(i.eUp.Org===s);if(i.fixUpperEdge){if(null===(r=t.mesh.connect(e.regionBelow(i).eUp.Sym,i.eUp.Lnext)))return null;e.fixUpperEdge(t,i,r),i=e.regionAbove(i)}return i},e.topRightRegion=function(t){var i=t.eUp.Dst;do t=e.regionAbove(t);while(t.eUp.Dst===i);return t},e.addRegionBelow=function(e,t,i){var r=new bT;return r.eUp=i,r.nodeUp=e.dict.insertBefore(t.nodeUp,r),r.fixUpperEdge=!1,r.sentinel=!1,r.dirty=!1,i.activeRegion=r,r},e.isWindingInside=function(e,t){switch(e.windingRule){case wK.ODD:return(1&t)!=0;case wK.NONZERO:return 0!==t;case wK.POSITIVE:return t>0;case wK.NEGATIVE:return t<0;case wK.ABS_GEQ_TWO:return t>=2||t<=-2}throw Error("Invalid winding rulle")},e.computeWinding=function(t,i){i.windingNumber=e.regionAbove(i).windingNumber+i.eUp.winding,i.inside=e.isWindingInside(t,i.windingNumber)},e.finishRegion=function(t,i){var r=i.eUp,s=r.Lface;s.inside=i.inside,s.anEdge=r,e.deleteRegion(t,i)},e.finishLeftRegions=function(t,i,r){for(var s,a=null,o=i,l=i.eUp;o!==r;){if(o.fixUpperEdge=!1,(s=(a=e.regionBelow(o)).eUp).Org!=l.Org){if(!a.fixUpperEdge){e.finishRegion(t,o);break}s=t.mesh.connect(l.Lprev,s.Sym),e.fixUpperEdge(t,a,s)}l.Onext!==s&&(t.mesh.splice(s.Oprev,s),t.mesh.splice(l,s)),e.finishRegion(t,o),l=a.eUp,o=a}return l},e.addRightEdges=function(t,i,r,s,a,o){var l,h,c,d,u=!0;c=r;do bx(bb.vertLeq(c.Org,c.Dst)),e.addRegionBelow(t,i,c.Sym),c=c.Onext;while(c!==s);for(null===a&&(a=e.regionBelow(i).eUp.Rprev),h=i,d=a;(c=(l=e.regionBelow(h)).eUp.Sym).Org===d.Org;)c.Onext!==d&&(t.mesh.splice(c.Oprev,c),t.mesh.splice(d.Oprev,c)),l.windingNumber=h.windingNumber-c.winding,l.inside=e.isWindingInside(t,l.windingNumber),h.dirty=!0,!u&&e.checkForRightSplice(t,h)&&(e.addWinding(c,d),e.deleteRegion(t,h),t.mesh.delete(d)),u=!1,h=l,d=c;h.dirty=!0,bx(h.windingNumber-c.winding===l.windingNumber),o&&e.walkDirtyRegions(t,h)},e.spliceMergeVertices=function(e,t,i){e.mesh.splice(t,i)},e.vertexWeights=function(e,t,i){var r=bb.vertL1dist(t,e),s=bb.vertL1dist(i,e),a=.5*s/(r+s),o=.5*r/(r+s);e.coords[0]+=a*t.coords[0]+o*i.coords[0],e.coords[1]+=a*t.coords[1]+o*i.coords[1],e.coords[2]+=a*t.coords[2]+o*i.coords[2]},e.getIntersectData=function(t,i,r,s,a,o){i.coords[0]=i.coords[1]=i.coords[2]=0,i.idx=-1,e.vertexWeights(i,r,s),e.vertexWeights(i,a,o)},e.checkForRightSplice=function(t,i){var r=e.regionBelow(i),s=i.eUp,a=r.eUp;if(bb.vertLeq(s.Org,a.Org)){if(bb.edgeSign(a.Dst,s.Org,a.Org)>0)return!1;bb.vertEq(s.Org,a.Org)?s.Org!==a.Org&&(t.pq.delete(s.Org.pqHandle),e.spliceMergeVertices(t,a.Oprev,s)):(t.mesh.splitEdge(a.Sym),t.mesh.splice(s,a.Oprev),i.dirty=r.dirty=!0)}else{if(0>bb.edgeSign(s.Dst,a.Org,s.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(s.Sym),t.mesh.splice(a.Oprev,s)}return!0},e.checkForLeftSplice=function(t,i){var r,s=e.regionBelow(i),a=i.eUp,o=s.eUp;if(bx(!bb.vertEq(a.Dst,o.Dst)),bb.vertLeq(a.Dst,o.Dst)){if(0>bb.edgeSign(a.Dst,o.Dst,a.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,r=t.mesh.splitEdge(a),t.mesh.splice(o.Sym,r),r.Lface.inside=i.inside}else{if(bb.edgeSign(o.Dst,a.Dst,o.Org)>0)return!1;i.dirty=s.dirty=!0,r=t.mesh.splitEdge(o),t.mesh.splice(a.Lnext,o.Sym),r.Rface.inside=i.inside}return!0},e.checkForIntersect=function(t,i){var r,s,a=e.regionBelow(i),o=i.eUp,l=a.eUp,h=o.Org,c=l.Org,d=o.Dst,u=l.Dst,p=new b_;if(bx(!bb.vertEq(u,d)),bx(0>=bb.edgeSign(d,t.event,h)),bx(bb.edgeSign(u,t.event,c)>=0),bx(h!==t.event&&c!==t.event),bx(!i.fixUpperEdge&&!a.fixUpperEdge),h===c||Math.min(h.t,d.t)>Math.max(c.t,u.t))return!1;if(bb.vertLeq(h,c)){if(bb.edgeSign(u,h,c)>0)return!1}else if(0>bb.edgeSign(d,c,h))return!1;return e.debugEvent(t),bb.intersect(d,h,u,c,p),bx(Math.min(h.t,d.t)<=p.t),bx(p.t<=Math.max(c.t,u.t)),bx(Math.min(u.s,d.s)<=p.s),bx(p.s<=Math.max(c.s,h.s)),bb.vertLeq(p,t.event)&&(p.s=t.event.s,p.t=t.event.t),r=bb.vertLeq(h,c)?h:c,bb.vertLeq(r,p)&&(p.s=r.s,p.t=r.t),bb.vertEq(p,h)||bb.vertEq(p,c)?(e.checkForRightSplice(t,i),!1):!bb.vertEq(d,t.event)&&bb.edgeSign(d,t.event,p)>=0||!bb.vertEq(u,t.event)&&0>=bb.edgeSign(u,t.event,p)?u===t.event?(t.mesh.splitEdge(o.Sym),t.mesh.splice(l.Sym,o),i=e.topLeftRegion(t,i),o=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),a),e.addRightEdges(t,i,o.Oprev,o,o,!0),!0):d===t.event?(t.mesh.splitEdge(l.Sym),t.mesh.splice(o.Lnext,l.Oprev),a=i,i=e.topRightRegion(i),s=e.regionBelow(i).eUp.Rprev,a.eUp=l.Oprev,l=e.finishLeftRegions(t,a,null),e.addRightEdges(t,i,l.Onext,o.Rprev,s,!0),!0):(bb.edgeSign(d,t.event,p)>=0&&(e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(o.Sym),o.Org.s=t.event.s,o.Org.t=t.event.t),0>=bb.edgeSign(u,t.event,p)&&(i.dirty=a.dirty=!0,t.mesh.splitEdge(l.Sym),l.Org.s=t.event.s,l.Org.t=t.event.t),!1):(t.mesh.splitEdge(o.Sym),t.mesh.splitEdge(l.Sym),t.mesh.splice(l.Oprev,o),o.Org.s=p.s,o.Org.t=p.t,o.Org.pqHandle=t.pq.insert(o.Org),e.getIntersectData(t,o.Org,h,d,c,u),e.regionAbove(i).dirty=i.dirty=a.dirty=!0,!1)}
3139,e.walkDirtyRegions=function(t,i){for(var r,s,a=e.regionBelow(i);;){for(;a.dirty;)i=a,a=e.regionBelow(a);if(!i.dirty&&(a=i,null===(i=e.regionAbove(i))||!i.dirty))return;if(i.dirty=!1,r=i.eUp,s=a.eUp,r.Dst!==s.Dst&&e.checkForLeftSplice(t,i)&&(a.fixUpperEdge?(e.deleteRegion(t,a),t.mesh.delete(s),s=(a=e.regionBelow(i)).eUp):i.fixUpperEdge&&(e.deleteRegion(t,i),t.mesh.delete(r),r=(i=e.regionAbove(a)).eUp)),r.Org!==s.Org){if(r.Dst===s.Dst||i.fixUpperEdge||a.fixUpperEdge||r.Dst!==t.event&&s.Dst!==t.event)e.checkForRightSplice(t,i);else if(e.checkForIntersect(t,i))return}r.Org===s.Org&&r.Dst===s.Dst&&(e.addWinding(s,r),e.deleteRegion(t,i),t.mesh.delete(r),i=e.regionAbove(a))}},e.connectRightVertex=function(t,i,r){var s,a=r.Onext,o=e.regionBelow(i),l=i.eUp,h=o.eUp,c=!1;if(l.Dst!==h.Dst&&e.checkForIntersect(t,i),bb.vertEq(l.Org,t.event)&&(t.mesh.splice(a.Oprev,l),i=e.topLeftRegion(t,i),a=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),o),c=!0),bb.vertEq(h.Org,t.event)&&(t.mesh.splice(r,h.Oprev),r=e.finishLeftRegions(t,o,null),
3139c=!0),c){e.addRightEdges(t,i,r.Onext,a,a,!0);return}s=bb.vertLeq(h.Org,l.Org)?h.Oprev:l,s=t.mesh.connect(r.Lprev,s),e.addRightEdges(t,i,s,s.Onext,s.Onext,!1),s.Sym.activeRegion.fixUpperEdge=!0,e.walkDirtyRegions(t,i)},e.connectLeftDegenerate=function(t,i,r){var s,a,o,l,h;if(s=i.eUp,bb.vertEq(s.Org,r)){bx(!1),e.spliceMergeVertices(t,s,r.anEdge);return}if(!bb.vertEq(s.Dst,r)){t.mesh.splitEdge(s.Sym),i.fixUpperEdge&&(t.mesh.delete(s.Onext),i.fixUpperEdge=!1),t.mesh.splice(r.anEdge,s),e.sweepEvent(t,r);return}bx(!1),i=e.topRightRegion(i),a=l=(o=(h=e.regionBelow(i)).eUp.Sym).Onext,h.fixUpperEdge&&(bx(a!==o),e.deleteRegion(t,h),t.mesh.delete(o),o=a.Oprev),t.mesh.splice(r.anEdge,o),bb.edgeGoesLeft(a)||(a=null),e.addRightEdges(t,i,o.Onext,l,a,!0)},e.connectLeftVertex=function(t,i){var r,s,a,o,l,h,c=new bT;if(c.eUp=i.anEdge.Sym,r=t.dict.search(c).key,s=e.regionBelow(r)){if(o=r.eUp,l=s.eUp,0===bb.edgeSign(o.Dst,i,o.Org)){e.connectLeftDegenerate(t,r,i);return}(a=bb.vertLeq(l.Dst,o.Dst)?r:s,r.inside||a.fixUpperEdge)?(h=a===r?t.mesh.connect(i.anEdge.Sym,o.Lnext):t.mesh.connect(l.Dnext,i.anEdge).Sym,a.fixUpperEdge?e.fixUpperEdge(t,a,h):e.computeWinding(t,e.addRegionBelow(t,r,h)),e.sweepEvent(t,i)):e.addRightEdges(t,r,i.anEdge,i.anEdge,null,!0)}},e.sweepEvent=function(t,i){t.event=i,e.debugEvent(t);for(var r=i.anEdge;null===r.activeRegion;)if((r=r.Onext)===i.anEdge){e.connectLeftVertex(t,i);return}var s=e.topLeftRegion(t,r.activeRegion);bx(null!==s);var a=e.regionBelow(s),o=a.eUp,l=e.finishLeftRegions(t,a,null);l.Onext===o?e.connectRightVertex(t,s,l):e.addRightEdges(t,s,l.Onext,o,o,!0)},e.addSentinel=function(e,t,i,r){var s=new bT,a=e.mesh.makeEdge();a.Org.s=i,a.Org.t=r,a.Dst.s=t,a.Dst.t=r,e.event=a.Dst,s.eUp=a,s.windingNumber=0,s.inside=!1,s.fixUpperEdge=!1,s.sentinel=!0,s.dirty=!1,s.nodeUp=e.dict.insert(s)},e.initEdgeDict=function(t){t.dict=new bD(t,e.edgeLeq);var i=t.bmax[0]-t.bmin[0],r=t.bmax[1]-t.bmin[1],s=t.bmin[0]-i,a=t.bmax[0]+i,o=t.bmin[1]-r,l=t.bmax[1]+r;e.addSentinel(t,s,a,o),e.addSentinel(t,s,a,l)},e.doneEdgeDict=function(t){for(var i,r=0;null!==(i=t.dict.min().key);)i.sentinel||(bx(i.fixUpperEdge),bx(1==++r)),bx(0===i.windingNumber),e.deleteRegion(t,i)},e.removeDegenerateEdges=function(t){var i,r,s,a=t.mesh.eHead;for(i=a.next;i!==a;i=r)r=i.next,s=i.Lnext,bb.vertEq(i.Org,i.Dst)&&i.Lnext.Lnext!==i&&(e.spliceMergeVertices(t,s,i),t.mesh.delete(i),s=(i=s).Lnext),s.Lnext===i&&(s!==i&&((s===r||s===r.Sym)&&(r=r.next),t.mesh.delete(s)),(i===r||i===r.Sym)&&(r=r.next),t.mesh.delete(i))},e.initPriorityQ=function(e){var t,i,r,s=0;for(i=(r=e.mesh.vHead).next;i!==r;i=i.next)s++;for(s+=8,t=e.pq=new bC(s,bb.vertLeq),i=(r=e.mesh.vHead).next;i!==r;i=i.next)i.pqHandle=t.insert(i);return i===r&&(t.init(),!0)},e.donePriorityQ=function(e){e.pq=null},e.removeDegenerateFaces=function(t,i){var r,s,a;for(r=i.fHead.next;r!==i.fHead;r=s)s=r.next,bx((a=r.anEdge).Lnext!==a),a.Lnext.Lnext===a&&(e.addWinding(a.Onext,a),t.mesh.delete(a));return!0},e.computeInterior=function(t,i){var r,s;if(void 0===i&&(i=!0),e.removeDegenerateEdges(t),!e.initPriorityQ(t))return!1;for(e.initEdgeDict(t);null!==(r=t.pq.extractMin());){for(;!(null===(s=t.pq.min())||!bb.vertEq(s,r));)s=t.pq.extractMin(),e.spliceMergeVertices(t,r.anEdge,s.anEdge);e.sweepEvent(t,r)}return t.event=t.dict.min().key.eUp.Org,e.debugEvent(t),e.doneEdgeDict(t),e.donePriorityQ(t),!!e.removeDegenerateFaces(t,t.mesh)&&(i&&t.mesh.check(),!0)},e}(),bO=function(){function e(){this.mesh=new bA,this.normal=[0,0,0],this.sUnit=[0,0,0],this.tUnit=[0,0,0],this.bmin=[0,0],this.bmax=[0,0],this.windingRule=wK.ODD,this.dict=null,this.pq=null,this.event=null,this.vertexIndexCounter=0,this.vertices=[],this.vertexIndices=[],this.vertexCount=0,this.elements=[],this.elementCount=0}return e.prototype.dot_=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},e.prototype.normalize_=function(e){var t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2];if(!t)throw"Zero-size vector!";t=Math.sqrt(t),e[0]/=t,e[1]/=t,e[2]/=t},e.prototype.longAxis_=function(e){var t=0;return Math.abs(e[1])>Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t},e.prototype.computeNormal_=function(e){var t,i,r,s,a,o,l=[0,0,0],h=[0,0,0],c=[0,0,0],d=[0,0,0],u=[0,0,0],p=[null,null,null],f=[null,
3139null,null],m=this.mesh.vHead;t=m.next;for(var g=0;g<3;++g)s=t.coords[g],h[g]=s,f[g]=t,l[g]=s,p[g]=t;for(t=m.next;t!==m;t=t.next)for(var v=0;v<3;++v)(s=t.coords[v])<h[v]&&(h[v]=s,f[v]=t),s>l[v]&&(l[v]=s,p[v]=t);var y=0;if(l[1]-h[1]>l[0]-h[0]&&(y=1),l[2]-h[2]>l[y]-h[y]&&(y=2),h[y]>=l[y]){e[0]=0,e[1]=0,e[2]=1;return}for(o=0,i=f[y],r=p[y],c[0]=i.coords[0]-r.coords[0],c[1]=i.coords[1]-r.coords[1],c[2]=i.coords[2]-r.coords[2],t=m.next;t!==m;t=t.next)d[0]=t.coords[0]-r.coords[0],d[1]=t.coords[1]-r.coords[1],d[2]=t.coords[2]-r.coords[2],u[0]=c[1]*d[2]-c[2]*d[1],u[1]=c[2]*d[0]-c[0]*d[2],u[2]=c[0]*d[1]-c[1]*d[0],(a=u[0]*u[0]+u[1]*u[1]+u[2]*u[2])>o&&(o=a,e[0]=u[0],e[1]=u[1],e[2]=u[2]);o<=0&&(e[0]=e[1]=e[2]=0,e[this.longAxis_(c)]=1)},e.prototype.checkOrientation_=function(){for(var e,t,i=this.mesh.fHead,r=this.mesh.vHead,s=0,a=i.next;a!==i;a=a.next)if(!((t=a.anEdge).winding<=0))do s+=(t.Org.s-t.Dst.s)*(t.Org.t+t.Dst.t),t=t.Lnext;while(t!==a.anEdge);if(s<0){for(e=r.next;e!==r;e=e.next)e.t=-e.t;this.tUnit[0]=-this.tUnit[0],this.tUnit[1]=-this.tUnit[1],this.tUnit[2]=-this.tUnit[2]}},e.prototype.projectPolygon_=function(){var e,t,i=this.mesh.vHead,r=[0,0,0],s=!1;r[0]=this.normal[0],r[1]=this.normal[1],r[2]=this.normal[2],r[0]||r[1]||r[2]||(this.computeNormal_(r),s=!0),e=this.sUnit,t=this.tUnit;var a=this.longAxis_(r);e[a]=0,e[(a+1)%3]=1,e[(a+2)%3]=0,t[a]=0,t[(a+1)%3]=0,t[(a+2)%3]=r[a]>0?1:-1;for(var o=i.next;o!==i;o=o.next)o.s=this.dot_(o.coords,e),o.t=this.dot_(o.coords,t);s&&this.checkOrientation_();for(var l=!0,h=i.next;h!==i;h=h.next)l?(this.bmin[0]=this.bmax[0]=h.s,this.bmin[1]=this.bmax[1]=h.t,l=!1):(h.s<this.bmin[0]&&(this.bmin[0]=h.s),h.s>this.bmax[0]&&(this.bmax[0]=h.s),h.t<this.bmin[1]&&(this.bmin[1]=h.t),h.t>this.bmax[1]&&(this.bmax[1]=h.t))},e.prototype.addWinding_=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.prototype.tessellateMonoRegion_=function(e,t){var i,r;if(!((i=t.anEdge).Lnext!==i&&i.Lnext.Lnext!==i))throw"Mono region invalid";for(;bb.vertLeq(i.Dst,i.Org);i=i.Lprev);for(;bb.vertLeq(i.Org,i.Dst);i=i.Lnext);for(r=i.Lprev;i.Lnext!==r;)if(bb.vertLeq(i.Dst,r.Org)){for(;r.Lnext!==i&&(bb.edgeGoesLeft(r.Lnext)||0>=bb.edgeSign(r.Org,r.Dst,r.Lnext.Dst));)r=e.connect(r.Lnext,r).Sym;r=r.Lprev}else{for(;r.Lnext!==i&&(bb.edgeGoesRight(i.Lprev)||bb.edgeSign(i.Dst,i.Org,i.Lprev.Org)>=0);)i=e.connect(i,i.Lprev).Sym;i=i.Lnext}if(r.Lnext===i)throw"Mono region invalid";for(;r.Lnext.Lnext!==i;)r=e.connect(r.Lnext,r).Sym;return!0},e.prototype.tessellateInterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)if(t=i.next,i.inside&&!this.tessellateMonoRegion_(e,i))return!1;return!0},e.prototype.discardExterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)t=i.next,i.inside||e.zapFace(i)},e.prototype.setWindingNumber_=function(e,t,i){for(var r,s=e.eHead.next;s!==e.eHead;s=r)r=s.next,s.Rface.inside!==s.Lface.inside?s.winding=s.Lface.inside?t:-t:i?e.delete(s):s.winding=0},e.prototype.getNeighbourFace_=function(e){return e.Rface&&e.Rface.inside?e.Rface.n:-1},e.prototype.outputPolymesh_=function(e,t,i,r){var s,a,o=0,l=0;i>3&&e.mergeConvexFaces(i);for(var h=e.vHead.next;h!==e.vHead;h=h.next)h.n=-1;for(var c=e.fHead.next;c!==e.fHead;c=c.next)if(c.n=-1,c.inside){s=c.anEdge,a=0;do{var h=s.Org;-1===h.n&&(h.n=l,l++),a++,s=s.Lnext}while(s!==c.anEdge);if(a>i)throw"Face vertex greater that support polygon";c.n=o,++o}this.elementCount=o,t===wJ.CONNECTED_POLYGONS&&(o*=2),this.elements=[],this.elements.length=o*i,this.vertexCount=l,this.vertices=[],this.vertices.length=l*r,this.vertexIndices=[],this.vertexIndices.length=l;for(var h=e.vHead.next;h!==e.vHead;h=h.next)if(-1!==h.n){var d=h.n*r;this.vertices[d+0]=h.coords[0],this.vertices[d+1]=h.coords[1],r>2&&(this.vertices[d+2]=h.coords[2]),this.vertexIndices[h.n]=h.idx}for(var u=0,c=e.fHead.next;c!==e.fHead;c=c.next)if(c.inside){s=c.anEdge,a=0;do{var h=s.Org;this.elements[u++]=h.n,a++,s=s.Lnext}while(s!==c.anEdge);for(var p=a;p<i;++p)this.elements[u++]=-1;if(t===wJ.CONNECTED_POLYGONS){s=c.anEdge;do this.elements[u++]=this.getNeighbourFace_(s),s=s.Lnext;while(s!==c.anEdge);for(var f=a;f<i;++f)this.elements[u++]=-1}}},e.prototype.outputContours_=function(e,t){var i,r,s=0,a=0;this.vertexCount=0,this.elementCount=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){r=i=o.anEdge;do this.vertexCount++,i=i.Lnext;while(i!==r);this.elementCount++}this.elements=[],this.elements.length=2*this.elementCount,this.vertices=[],this.vertices.length=this.vertexCount*t,this.vertexIndices=[],this.vertexIndices.length=this.vertexCount;var l=0,h=0,c=0;s=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){a=0,r=i=o.anEdge;do this.vertices[l++]=i.Org.coords[0],this.vertices[l++]=i.Org.coords[1],t>2&&(this.vertices[l++]=i.Org.coords[2]),this.vertexIndices[h++]=this.vertexIdCallback?this.vertexIdCallback(i):i.Org.idx,a++,i=i.Lnext;while(i!==r);this.elements[c++]=s,this.elements[c++]=a,s+=a}},e.prototype.addContour=function(e,t){null===this.mesh&&(this.mesh=new bA),e<2&&(e=2),e>3&&(e=3);for(var i=null,r=0;r<t.length;r+=e)null===i?(i=this.mesh.makeEdge(),this.mesh.splice(i,i.Sym)):(this.mesh.splitEdge(i),i=i.Lnext),i.Org.coords[0]=t[r+0],i.Org.coords[1]=t[r+1],e>2?i.Org.coords[2]=t[r+2]:i.Org.coords[2]=0,i.Org.idx=this.vertexIndexCounter++,this.edgeCreateCallback&&this.edgeCreateCallback(i),i.winding=1,i.Sym.winding=-1},e.prototype.tesselate=function(e,t,i,r,s,a){if(void 0===e&&(e=wK.ODD),void 0===t&&(t=wJ.POLYGONS),void 0===a&&(a=!0),this.vertices=[],this.elements=[],this.vertexIndices=[],this.vertexIndexCounter=0,s&&(this.normal[0]=s[0],this.normal[1]=s[1],this.normal[2]=s[2]),this.windingRule=e,r<2&&(r=2),r>3&&(r=3),!this.mesh)return!1;this.projectPolygon_(),bI.computeInterior(this,a);var o=this.mesh;return t===wJ.BOUNDARY_CONTOURS?this.setWindingNumber_(o,1,!0):this.tessellateInterior_(o),a&&o.check(),t===wJ.BOUNDARY_CONTOURS?this.outputContours_(o,r):this.outputPolymesh_(o,t,i,r),!0},e}();function bR(e){var t=e.windingRule,i=void 0===t?wK.ODD:t,r=e.elementType,s=void 0===r?wJ.POLYGONS:r,a=e.polySize,o=e.vertexSize,l=void 0===o?2:o,h=e.normal,c=e.contours,d=void 0===c?[]:c,u=e.strict,p=void 0===u||u,f=e.debug;if(!d&&p)throw Error("Contours can't be empty");if(d){var m=new bO;e.edgeCreateCallback&&(m.edgeCreateCallback=e.edgeCreateCallback),e.vertexIdCallback&&(m.vertexIdCallback=e.vertexIdCallback);for(var g=0;g<d.length;g++)m.addContour(l||2,d[g]);return m.tesselate(i,s,void 0===a?3:a,l,void 0===h?[0,0,1]:h,p),{vertices:m.vertices,vertexIndices:m.vertexIndices,vertexCount:m.vertexCount,elements:m.elements,elementCount:m.elementCount,mesh:void 0!==f&&f?m.mesh:void 0}}}wK.ODD,wK.NONZERO,wK.POSITIVE,wK.NEGATIVE,wK.ABS_GEQ_TWO,wJ.POLYGONS,wJ.CONNECTED_POLYGONS,wJ.BOUNDARY_CONTOURS;var bL=class{constructor(e=256,t=!1){this.capacity=e,this.size=0,this.debug=t,this.debug&&console.log(`allocating with cap ${e}`);let i=e*bL.eSize;this.buffer=new ArrayBuffer(i);let r=Float32Array.BYTES_PER_ELEMENT,s=0;this.positions=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.normals=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.uvs=new Float32Array(this.buffer,s*r,2*e)}realloc(e,t=!1){if(e<this.size)throw Error("cannot shrink buffer");if(e<=this.capacity&&!t)return;this.debug&&console.log(`resizing from ${this.capacity} \u2192 ${e}`);let i=new ArrayBuffer(e*bL.eSize),r=Float32Array.BYTES_PER_ELEMENT,s=0,a=new Float32Array(i,0*r,3*e),o=new Float32Array(i,(s+=3*e)*r,3*e),l=new Float32Array(i,(s+=3*e)*r,2*e);t?(a.set(this.positions.subarray(0,3*this.size)),o.set(this.normals.subarray(0,3*this.size)),l.set(this.uvs.subarray(0,2*this.size))):(a.set(this.positions),o.set(this.normals),l.set(this.uvs)),this.buffer=i,this.positions=a,this.normals=o,this.uvs=l,this.capacity=e}get(e=1){let t=this.size+e;if(t>this.capacity){let e=this.capacity;for(;t>e;)e*=2;this.realloc(e)}let i=this.size;return this.size=t,i}reserve(e){let t=this.size+e;t>this.capacity&&this.realloc(t)}shrink(){this.debug&&console.log(`shrinking ${this.capacity} \u2192 ${this.size}`),this.realloc(this.size,!0)}};bL.eSize=8*Float32Array.BYTES_PER_ELEMENT;var bB=tw(tE()),bz={vertices:[160,160,-160,160,-160,-160,160,-160],vertexIndices:[1,0,3,2],vertexCount:4,elements:[0,4],elementCount:1,mesh:void 0},bF={vertices:[],vertexIndices:[],vertexCount:0,elements:[],elementCount:0,mesh:void 0},bN={vertices:[-160,160,160,-160,160,160,-160,-160],vertexIndices:[1,3,0,2],vertexCount:4,elements:[0,1,2,1,0,3],elementCount:2,mesh:void 0},bU=(e,t)=>([i,r])=>(r<i&&(r+=t),(e>=i?e:e+t)<=r),bk=class extends rN{constructor(e,t,i=0,r=12,s=3,a=wK.ODD,o=!1){let l,h,c;super(),this.forPathBevel=o,this.type="ShapeGeometry",this.vertexCache={},this._shape=e,this._depth=t,this._curveSegments=r,this._bevelSegmentsInput=s;let d=this._shape.extractShapePointsToFlatArray([],r),u=this._shape.shapeHoles.map(e=>{let t=e.extractShapePointsToFlatArray([],r),i=[];for(let e=t.length-1;e>=1;e-=2){let r=t[e-1],s=t[e-0];i.push(r,s)}return i}),p=[],f=[];for(let e=0;e<d.length;e+=2)f.push([d[e],d[e+1]]);p.push(f);for(let e=0;e<u.length;e++){let t=u[e],i=[];for(let e=0;e<t.length;e+=2)i.push([t[e],t[e+1]]);p.push(i)}l=e.isText?.1*new lF().setFromPoints(e.points.map(e=>e.position)).getSize(new tK).length():0===p[0].length?i:(0,bB.default)(p).distance,i<=0?(this._bevel=0,this._bevelSegments=0):(this._bevel=Math.min(i,l,t/2),this._bevelSegments=Math.floor(s));try{h=bR({windingRule:a,elementType:wJ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[d]})}catch{h=bz}try{c=bR({windingRule:wK.ODD,elementType:wJ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...u]})}catch{c=bF}if(!h)throw Error("error generating geometry");let m=h.elementCount;if(c){h.elementCount+=c.elementCount;for(let e=0;e<c.elements.length;e++){let t=c.elements[e],i=e%2==0?h.vertexCount:0;h.elements.push(t+i)}for(let e=0;e<c.vertexIndices.length;e++){let t=c.vertexIndices[e],i=h.vertexCount;h.vertexIndices.push(t+i)}for(let e=0;e<c.vertices.length;e++){let t=c.vertices[e];h.vertices.push(t)}}let g=1/0,v=-1/0,y=1/0,x=-1/0;for(let e=0,t=h.vertexCount;e<t;e++){let t=2*e,i=h.vertices[t+0],r=h.vertices[t+1];i<g&&(g=i),i>v&&(v=i),r<y&&(y=r),r>x&&(x=r)}this._minX=g,this._minY=y,this._width=v-g,this._height=x-y,this._buffer=new bL(this._computeBufferEstimatedSize(h));let b=[],w=[];for(let e=h.elementCount-1;e>=0;e--){let t=e>=m,i=2*e,s=h.elements[i+0],a=h.elements[i+1],c=s+a,d={start:s,count:a,normals:[],continuous:[],concave:[]},p=s,f=c-1,g=s+1,v=this._shape.roundedCurves.length;do{let e=p-s,i=h.vertices[2*f+0],r=h.vertices[2*f+1],o=h.vertices[2*p+0],l=h.vertices[2*p+1],u=h.vertices[2*g+0],m=h.vertices[2*g+1],y=o-i,x=l-r,b=Math.sqrt(y*y+x*x);y/=b,x/=b;let w=o-u,S=l-m,_=Math.sqrt(w*w+S*S);w/=_,S/=_,d.normals[2*e+0]=-S,d.normals[2*e+1]=w,d.concave[e]=y*S-x*w>0;let A=h.vertexIndices[p];if(Array.isArray(A))d.continuous[e]=!1;else{let[t,i]=this._shape.getCurveIndexFromVertexId(A-1,!0);if(i>0&&i<1)d.continuous[e]=!0;else{let r=1===i?t+1:t-1;r=(r+v)%v;let s=1===i?0:1,a=this._shape.roundedCurves[t].getTangent(i),o=this._shape.roundedCurves[r].getTangent(s);d.continuous[e]=a.dot(o)>.95}}t&&(d.normals[2*e+0]*=-1,d.normals[2*e+1]*=-1),[f,p,g]=[p,g,g+1],g>=c&&(g-=a)}while(g!==s+1);let y=[];y.push({bevelI:0,angle:0,size:0,boundary:{vertices:h.vertices.slice(2*s,2*c),vertexCount:a,vertexIndices:Array(a).fill(!0).map((e,t)=>[t,t]),elements:[0,a],elementCount:1,mesh:null},reverseMap:[],insetPoints:h.vertices.slice(2*s,2*c)});let x=0;for(let e=1;e<=this._bevelSegments;e++){let i=e/this._bevelSegments*Math.PI/2,s=(1-Math.cos(i))*this._bevel,o=[],l=[],c=[],u=[],p=0;for(let e=0;e<a;e++){let i=2*e,f=(e-1+a)%a*2,m=h.vertices[2*d.start+i+0],g=h.vertices[2*d.start+i+1],v=-d.normals[f+0]*s,y=-d.normals[f+1]*s,x=-d.normals[i+0]*s,b=-d.normals[i+1]*s;if(d.concave[e]||!d.concave[e]&&t){let i=Math.atan2(y,v),a=Math.atan2(b,x);a>i&&(a-=2*Math.PI);let l=a-i;if(d.continuous[e]||t){let r=i+l/2,a=Math.cos(r)*s,h=Math.sin(r)*s;o[2*p+0]=m+a*(t?-1:1),o[2*p+1]=g+h*(t?-1:1),u[p]=e,p++}else{let t=Math.max(1,Math.floor(r/4*Math.abs(l)/Math.PI));for(let r=0;r<=t;r++){let a=i+r/t*l,h=Math.cos(a)*s,c=Math.sin(a)*s;o[2*p+0]=m+h,o[2*p+1]=g+c,u[p]=e,p++}}}
3139else o[2*p+0]=m+v,o[2*p+1]=g+y,u[p]=e,l[e]=p,o[2*++p+0]=m,o[2*p+1]=g,u[p]=e,o[2*++p+0]=m+x,o[2*p+1]=g+b,u[p]=e,c[e]=p,p++}let f=bR({windingRule:wK.POSITIVE,elementType:wJ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[o],edgeCreateCallback:e=>{let t=e.Org.idx,i=u[t],r=u[(t+1)%u.length];e.idx=[i,r],e.Sym.idx=[r,i]},vertexIdCallback:e=>{let t=e.Lprev.idx;return[t?t[1]:0,e.idx?e.idx[0]:0]}});if(!f)throw console.log("Error"),Error(`error generating bevel geometry for ${e}'th loop`);if(!f.vertexCount){x=(1-Math.sin((e-1)/this._bevelSegments*Math.PI/2))*this._bevel;break}for(let e=0;e<f.vertexIndices.length;e++){let[t,i]=f.vertexIndices[e];if(t===i)continue;let r=i;i<t&&(r+=a);for(let s=t;s<r;s++){let r=s%a,o=(s+1)%a;if(!d.continuous[r]||!d.continuous[o]){f.vertexIndices[e]=[t,r],f.vertexIndices.splice(e+1,0,[o,i]),f.vertices.splice((e+1)*2,0,f.vertices[2*e],f.vertices[2*e+1]);break}}}y.push({bevelI:e,angle:i,size:s,boundary:f,reverseMap:u,insetPoints:o})}let S=(e,t,i)=>{let r=0,s=e.boundary.vertexIndices.length;for(;r<s&&i(e.boundary.vertexIndices[t]);)t=(t+1)%s,r++;return r},_=b.length;for(let e=1;e<y.length;e++){let t=y[e-1],i=y[e],r=t.boundary.vertexIndices.length,s=i.boundary.vertexIndices.length;if(!r||!s)break;let l=d.concave.length,h=0,c=bU(0,a);for(;!t.boundary.vertexIndices.filter(c).length||!i.boundary.vertexIndices.filter(c).length;)c=bU(++h,a);let u=t.boundary.vertexIndices.findIndex(c),p=i.boundary.vertexIndices.findIndex(c);do u=(u+1)%r;while(c(t.boundary.vertexIndices[u]));do p=(p+1)%s;while(c(i.boundary.vertexIndices[p]));let f=h=(h+1)%a,m=0,g=this._buildBevelVert(d,t,(u-1+r)%r,void 0,m),v=this._buildBevelVert(d,i,(p-1+s)%s,void 0,m),x=g,w=v,_,A,M=!1;do{m=(h||l)/l;let e=S(t,u,c=bU(h,a)),f=S(i,p,c),g=M;if(M=!1,e&&!f){for(let i=0;i<e;i++)_=this._buildBevelVert(d,t,(u+i)%r,i/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_;M=!0}else if(!e&&f)for(let e=0;e<f;e++)A=this._buildBevelVert(d,i,(p+e)%s,e/(f-1),m),b.push(w.topN,x.topP,A.topP),!1===o&&b.push(x.bottomP,w.bottomN,A.bottomP),w=A;else if(e&&f){if(_=this._buildBevelVert(d,t,u,0,m),A=this._buildBevelVert(d,i,p,0,m),g?(b.push(x.topN,A.topP,w.topN),b.push(x.topN,_.topP,A.topP),!1===o&&(b.push(A.bottomP,x.bottomN,w.bottomN),b.push(A.bottomP,_.bottomP,x.bottomN))):(b.push(w.topN,x.topN,_.topP),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP))),x=_,w=A,e===f)for(let a=1;a<e;a++)_=this._buildBevelVert(d,t,(u+a)%r,a/(e-1),m),A=this._buildBevelVert(d,i,(p+a)%s,a/(f-1),m),b.push(x.topN,_.topP,w.topN),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP)),x=_,w=A;else if(e>f){let a=e/f,l=0;for(let h=1;h<e;h++)_=this._buildBevelVert(d,t,(u+h)%r,h/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_,h>(l+1)*a&&(l++,A=this._buildBevelVert(d,i,(p+l)%s,l/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A)}else{let a=f/e,l=0;for(let h=1;h<f;h++)A=this._buildBevelVert(d,i,(p+h)%s,h/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A,h>(l+1)*a&&(l++,_=this._buildBevelVert(d,t,(u+l)%r,l/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_)}}u=(u+e)%r,p=(p+f)%s,h=(h+1)%l}while(h!==f)}if(!1===o&&this._depth>2*this._bevel&&this._buildWall(y,d,b),t){let e=[];for(let t=b.length-1;t>=_+2;t-=3){let i=b[t-2],r=b[t-1],s=b[t-0];e.push(s,r,i)}b.splice(_,b.length-_,...e)}if(t){let e=[];for(let t=y[y.length-1].boundary.vertices.length-1;t>=1;t-=2){let i=y[y.length-1].boundary.vertices[t-1],r=y[y.length-1].boundary.vertices[t-0];e.push(i,r)}w.push(e)}if(!t){let e=y[y.length-1],t;try{t=bR({windingRule:y.length>1?wK.POSITIVE:wK.ODD,elementType:wJ.POLYGONS,vertexSize:2,strict:!0,contours:[e.insetPoints,...w]})}catch{t=bN}if(!t)throw Error("Error generating geometry for surface");0===u.length&&this._bevel<l&&Object.assign(this,{useNgonForTopBottomFaceDuringBake:!0});for(let e=0;e<3*t.elementCount;e+=3){let i=this._buildSurfaceVert(t,t.elements[e+0],x),r=this._buildSurfaceVert(t,t.elements[e+1],x),s=this._buildSurfaceVert(t,t.elements[e+2],x);b.push(i.top,r.top,s.top),!1===o&&b.push(s.bottom,r.bottom,i.bottom)}}this.vertexCache={}}this._buffer.shrink();let S=new rC(Uint32Array.from(b),1),_=new rC(this._buffer.positions,3),A=new rC(this._buffer.normals,3),M=new rC(this._buffer.uvs,2);_.needsUpdate=!0,A.needsUpdate=!0,M.needsUpdate=!0,S.needsUpdate=!0,this.setAttribute("position",_),this.setAttribute("normal",A),this.setAttribute("uv",M),this.setIndex(S)}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3139for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}_buildSurfaceVert(e,t,i){let r=t.toString();if(r in this.vertexCache)return this.vertexCache[r];let s=e.vertices[2*t+0],a=e.vertices[2*t+1],o=(s-this._minX)/this._width,l=(a-this._minY)/this._height;this.forPathBevel&&(l=1);let h=this._buffer.get(this.forPathBevel?1:2),c=3*h,d=2*h,u={top:h+0,bottom:h+1};return this._buffer.positions[c+0]=s,this._buffer.positions[c+1]=a,this._buffer.positions[c+2]=this.forPathBevel?this._bevel:this._depth-i,this._buffer.normals[c+0]=0,this._buffer.normals[c+1]=0,this._buffer.normals[c+2]=1,this._buffer.uvs[d+0]=o,this._buffer.uvs[d+1]=l,!1===this.forPathBevel&&(this._buffer.positions[c+3]=s,this._buffer.positions[c+4]=a,this._buffer.positions[c+5]=i,this._buffer.normals[c+3]=0,this._buffer.normals[c+4]=0,this._buffer.normals[c+5]=-1,this._buffer.uvs[d+2]=o,this._buffer.uvs[d+3]=l),this.vertexCache[r]=u,u}_buildBevelVert(e,t,i,r=1,s){let a=`${t.bevelI}:${i}`;if(a in this.vertexCache&&0!==s&&1!==s&&(!s||s===this.vertexCache[a].pathBevelUCoord))return this.vertexCache[a];let[o,l]=t.boundary.vertexIndices[i],h,c,d,u;o!==l?(c=o,h=l,u=!1,d=e.continuous[c]&&e.continuous[h]):(c=((h=o)-1+e.count)%e.count,u=e.concave[h]&&t.bevelI>0,d=e.continuous[h]||u);let p=Math.cos(t.angle),f=Math.sin(t.angle),m=2*i,g=2*h,v=2*c,y=t.boundary.vertices[m+0],x=t.boundary.vertices[m+1],b=(1-f)*this._bevel,w=(y-this._minX)/this._width,S=(x-this._minY)/this._height;this.forPathBevel&&(void 0!==s&&(w=s),S=1);let _=e.normals[g+0],A=e.normals[g+1],M=e.normals[v+0],E=e.normals[v+1];if(u){let e=M-_,t=E-A,i=Math.sqrt((_+=e*(1-r))*_+(A+=t*(1-r))*A);_/=i,A/=i}let C=this.forPathBevel?this._buffer.get(d?1:2):this._buffer.get(d?2:4),T=3*C,P=2*C,D={i,fi:h,topP:C+0,topN:C+0,bottomP:C+1,bottomN:C+1,pathBevelUCoord:s};return this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=_*p,this._buffer.normals[T+1]=A*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=_*p,this._buffer.normals[T+4]=A*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w),d||(this.forPathBevel?(C+=1,T+=3,P+=2):(C+=2,T+=6,P+=4),D.topP=C+0,D.bottomP=C+1,this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=M*p,this._buffer.normals[T+1]=E*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=M*p,this._buffer.normals[T+4]=E*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w)),this.vertexCache[a]=D,D}clone(){let e=new bk(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=ud(this.userData),e}},bV=class extends rN{constructor(e,t=12,i={}){super(),this.type="ShapeGeometry",this.windingRule=wK.ODD,this.elementType=wJ.POLYGONS,this.polySize=3,this.vertexSize=2,this.strict=!0,this._shape=e,this._curveSegments=t,this._triangulationOptions=Object.assign({windingRule:wK.ODD,elementType:wJ.POLYGONS,polySize:3,vertexSize:2,strict:!0},i);let r=this._shape.extractShapePointsToFlatArray([],this._curveSegments),s=this._shape.shapeHoles.map(e=>e.extractShapePointsToFlatArray([],this._curveSegments)),a,o=!0,l=!0,h,c;for(let e=0,t=r.length/2;e<t;e++){let t=2*e,i=r[t+0],s=r[t+1];if(void 0!==h&&i!==h&&(o=!1),void 0!==c&&s!==c&&(l=!1),h=i,c=s,!o&&!l)break}if(!o&&!l)try{a=bR({contours:[r,...s],windingRule:this._triangulationOptions.windingRule,elementType:this._triangulationOptions.elementType,polySize:this._triangulationOptions.polySize,vertexSize:this._triangulationOptions.vertexSize,strict:this._triangulationOptions.strict})}catch{a=bz}let d=a?.vertexCount??1,u=a?.elementCount??1;if(this._positionAttribute=new rC(new Float32Array(3*d),3),this._normalAttribute=new rC(new Float32Array(3*d),3),this._uvAttribute=new rC(new Float32Array(2*d),2),this._indexAttribute=new rC(new Uint32Array(3*u),1),a){let e=1/0,t=-1/0,i=1/0,r=-1/0;for(let s=0;s<d;s++){let o=2*s,l=a.vertices[o+0],h=a.vertices[o+1];l<e&&(e=l),l>t&&(t=l),h<i&&(i=h),h>r&&(r=h)}let s=t-e,o=r-i;for(let t=0;t<d;t++){let r=2*t,l=a.vertices[r+0],h=a.vertices[r+1],c=(l-e)/s,d=(h-i)/o;this._positionAttribute.setXYZ(t,l,h,0),this._normalAttribute.setXYZ(t,0,0,1),this._uvAttribute.setXY(t,c,d)}for(let e=0;e<u;e++){let t=3*e,i=a.elements[t+0],r=a.elements[t+1],s=a.elements[t+2];this._indexAttribute.setX(t+0,i),this._indexAttribute.setX(t+1,r),this._indexAttribute.setX(t+2,s)}}this.setAttribute("position",this._positionAttribute),this.setAttribute("normal",this._normalAttribute),this.setAttribute("uv",this._uvAttribute),this.setIndex(this._indexAttribute),this.setDrawRange(0,(a?.elementCount??1)*3)}clone(){let e=new bV(this._shape,this._curveSegments);return e.userData=ud(this.userData),e}},bj=class extends bk{constructor(e,t,i=0,r=12,s=3,a=wK.ODD){super(e,t,i,r,s,a),this.type="ShapeGeometry"}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3139for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}clone(){let e=new bj(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=ud(this.userData),e}},bG=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,subdivisions:40,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3,windingRule:wK.ODD},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=e.shape??t?.shape,l=o?.roundness??i.roundness;void 0!==o&&(o instanceof bm?(o.width!==r||o.height!==s)&&o.applySize(r,s):o=new bm(r,s).fromJSON(o),e.parameters?.roundness!==void 0&&e.parameters?.roundness>0&&o.update());let h=o??new bm(r,s);return{parameters:Object.assign(i,{width:r,height:s,depth:a,roundness:l}),shape:h}}static build(e){let{depth:t,extrudeBevelSize:i,extrudeBevelSegments:r,subdivisions:s,roundness:a,windingRule:o}=e.parameters;return e.shape.roundness=a,Object.assign(t<=0?new bV(e.shape,s,{windingRule:o}):new bj(e.shape,t,i,s,r,o),{userData:{...e,type:"VectorGeometry"}})}},bH=2*Math.PI,bW=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:64,angle:360,innerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return i.angle=tZ.clamp(i.angle,0,360),{shape:e.shape&&e.shape instanceof bm?e.shape:new bm,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let t,{width:i,height:r,spikes:s,angle:a,innerRadius:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=function(e,t,i,r,s,a){if(r>=bH)return s>30||s%4==0?(function(e,t,i,r=0,s=0,a=0){let o=.5522847498*t,l=.5522847498*i;e.addPoint(bY(s-t,a,s-t,a-l,s-t,a+l)),e.addPoint(bY(s,a+i,s-o,a+i,s+o,a+i)),e.addPoint(bY(s+t,a,s+t,a+l,s+t,a-l)),e.addPoint(bY(s,a-i,s+o,a-i,s-o,a-i)),r>0&&bZ(e,t,i,r)}(e,t,i,a),Math.round(s/4)):bq(e,r,s,t,i,a);let o={x:0,y:i},l=(r=Math.max(r,.001))+.5*Math.PI,h={x:Math.cos(l)*t,y:Math.sin(l)*i},c=function({px:e,py:t,cx:i,cy:r,rx:s,ry:a,largeArcFlag:o,sweepFlag:l}){var h,c;let d,u,p,f,m,g,v,y,x,b,w,S=[];if(0===s||0===a)return[];let _=(e-i)/2,A=(t-r)/2;if(0===_&&0===A)return[];let M=Math.pow(_,2)/Math.pow(s=Math.abs(s),2)+Math.pow(A,2)/Math.pow(a=Math.abs(a),2);M>1&&(s*=Math.sqrt(M),a*=Math.sqrt(M));let E=(h=s,c=a,d=Math.pow(h,2),u=Math.pow(c,2),p=Math.pow(_,2),(m=d*u-d*(f=Math.pow(A,2))-u*p)<0&&(m=0),m/=d*f+u*p,g=(m=Math.sqrt(m)*(o===l?-1:1))*h/c*A,v=-(m*c)/h*_,b=by(1,0,y=(_-g)/h,x=(A-v)/c),w=by(y,x,(-_-g)/h,(-A-v)/c),!l&&w>0&&(w-=bg),l&&w<0&&(w+=bg),{centerx:g+(e+i)/2,centery:v+(t+r)/2,ang1:b,ang2:w}),{ang1:C,ang2:T}=E,{centerx:P,centery:D}=E,I=Math.abs(T)/(bg/4);1e-7>Math.abs(1-I)&&(I=1);let O=Math.max(Math.ceil(I),1);T/=O;for(let e=0;e<O;e++)S.push(function(e,t){let i=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:1.3333333333333333*Math.tan(t/4),r=Math.cos(e),s=Math.sin(e),a=Math.cos(e+t),o=Math.sin(e+t);return[{x:r-s*i,y:s+r*i},{x:a+o*i,y:o-a*i},{x:a,y:o}]}(C,T)),C+=T;return S.map(e=>{let{x:t,y:i}=bv(e[0],s,a,P,D),{x:r,y:o}=bv(e[1],s,a,P,D),{x:l,y:h}=bv(e[2],s,a,P,D);return{x1:t,y1:i,x2:r,y2:o,x:l,y:h}})}({px:o.x,py:o.y,cx:h.x,cy:h.y,rx:t,ry:i,largeArcFlag:r>Math.PI,sweepFlag:!0});return s>30||s%c.length==0?function(e,t,i,r,s,a,o,l){let h=Math.round(s/r.length);e.addPoint(bX(t,i));for(let t=0,i=r.length;t<i;t++){let i=r[t],s=e.points[t],a=bX(i.x,i.y);s.controls[1].position.set(i.x1,i.y1),a.controls[0].position.set(i.x2,i.y2),e.addPoint(a)}return l>0?bQ(e,a,o,l):e.addPoint(bX(0,0)),h}(e,o.x,o.y,c,s,t,i,a):bq(e,r,s,t,i,a)}(d,.5*i,.5*r,a*Math.PI/180,s,o);
3139return d.isClosed=!0,d.update(),0===a?(t=new rN).setAttribute("position",new rD([],3)):t=bG.create({shape:d,parameters:{subdivisions:u,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),Object.assign(t,{userData:{...e,type:"EllipseGeometry"}})}};function bq(e,t,i,r,s,a){let o=-t/i;for(let t=0;t<=i;t++){let i=o*t,a=Math.sin(i)*r,l=Math.cos(i)*s;e.addPoint(bX(a,l))}return t<bH?a>0?bQ(e,r,s,a):e.addPoint(bX(0,0)):(e.removePoint(e.points[e.points.length-1]),a>0&&bZ(e,r,s,a)),1}function bX(e,t){return new x1(tZ.generateUUID(),new tK(e,t))}function bY(e,t,i,r,s,a){let o=bX(e,t);return o.controls[0].position.set(i,r),o.controls[1].position.set(s,a),o}function bQ(e,t,i,r){bK(e,t,i,r).forEach(t=>e.addPoint(t))}function bZ(e,t,i,r){let s=bK(e,t,i,r),a=new bm;s.forEach(e=>a.addPoint(e)),a.isClosed=!0,e.shapeHoles.push(a)}function bK(e,t,i,r){let s=r*t/100,a=Math.abs(i)/Math.abs(t)*s,o=new tK(s/t,a/i),l=e.points.map(e=>{let t=e.clone();return t.uuid=tZ.generateUUID(),t}).reverse();return l.forEach(e=>{e.position.multiply(o);let t=e.controls[0].position.clone().multiply(o),i=e.controls[1].position.clone().multiply(o);e.controls[0].position.copy(i),e.controls[1].position.copy(t)}),l}var bJ=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,revolutions:2,segments:40,pathRadius:10,pathType:0,pathSegments:30,cornerRadius:30,cornerSegments:4},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??r),a=Math.abs(i.depth??r),o=Math.abs(Math.min(r,a))/2;return{parameters:Object.assign(i,{width:r,height:s,depth:a,radius:o,segments:Math.round(i.segments),pathSegments:Math.round(i.pathSegments),cornerSegments:Math.round(i.cornerSegments)})}}static build(e){let{width:t,height:i,depth:r,radius:s,revolutions:a,segments:o,pathRadius:l,pathType:h,pathSegments:c,cornerRadius:d,cornerSegments:u}=e.parameters;return Object.assign(new b0(!1,t,i,r,s,a,o,l,h,c,d,u),{userData:{...e,type:"HelixGeometry"}})}},b$=new rP([0,0,0],1),b0=class extends rN{constructor(e=!0,t=1,i=1,r=1,s=1,a=1,o=1,l=1,h=1,c=1,d=1,u=1){if(super(),0===a)return;let p=e&&1===a;p&&(u=0),d>100&&(d=100),0===d&&(u=0);let f=()=>new ix,m=new ix,g=f(),v=f(),y=f(),x,b,w,S,_,A,M,E,C=f(),T=f(),P=f(),D=f(),I=f(),O=f(),R=f(),L=f(),B=i-2*l+.001,z=B/a,F=Math.ceil(o*a),N=F+1,U=B/F,k=-B/2,V=c+1,j=2*Math.PI/c,G=Math.PI/2/u,H=Math.min((1-d/100)*l,l-.01),W=l-H,q=0,X=2*u+2,Y=V*X/2,Q=Y+V*N,Z=Math.max(0,V*(N+X)),[K,J,$]=[3,3,2].map(e=>Array(Z*e).fill(0)),ee=[],et=s-l;function ei(t,i){let r=Math.PI/2;E=2*Math.PI*((A=i*U)%z)/z+r,A+=k,M=Math.sin(E)*et,_=Math.cos(E)*et,e?t.set(_,M,A):t.set(_,A,M)}ei(m,-.0000000001),ei(g,0),C.copy(m),ei(m,1);let er=m.distanceTo(g),es=p?0:W+H,ea=er*F+2*es,en=ea-es;for(let t=0;t<=F;t++){ei(v,t),L.subVectors(v,C).normalize(),C.copy(v),O.copy(v).setComponent(+e+1,0).normalize(),R.crossVectors(L,O).normalize();let i=0===t,r=t===F,s=i?3*Math.PI/2:G,a=i?H:en,o=i?V:Q,h=i?0:Z-V,d=L.clone().multiplyScalar(i?-W:W).add(v),f=L.clone().multiplyScalar(i?-1:1).normalize();for(let e=0;e<V;e++){let x=e*j;if(T.addVectors(m.copy(O).multiplyScalar(l*Math.cos(x)),g.copy(R).multiplyScalar(l*Math.sin(x))),P.copy(T).normalize(),i||r){p||(q=h+e,[0,1,2].forEach(e=>{K[3*q+e]=d.getComponent(e),J[3*q+e]=f.getComponent(e)}),$[2*q]=+r,$[2*q+1]=e/c),g.copy(P).multiplyScalar(H),y.addVectors(v,g);for(let t=0;t<u;t++){let r=t*G+s;D.addVectors(m.copy(L).multiplyScalar(W*Math.sin(r)),g.copy(P).multiplyScalar(W*Math.cos(r))),I.copy(D).normalize(),g.addVectors(y,D),D.normalize(),q=o+t*V+e,[0,1,2].forEach(e=>{K[3*q+e]=g.getComponent(e),J[3*q+e]=I.getComponent(e)});let l=+i+Math.sin(r);$[2*q]=(a+W*l)/ea,$[2*q+1]=e/c}}g.addVectors(v,T),q=Y+t*V+e,[0,1,2].forEach(e=>{K[3*q+e]=g.getComponent(e),J[3*q+e]=P.getComponent(e)}),$[2*q]=(es+t*er)/ea,$[2*q+1]=e/c}}let eo=N+2*u+2,[el,eh]=[+p,eo-1];for(let e=el;e<=eh-1;e++){let t=p&&e===eh-1;for(let i=0;i<V-1;i++)b=(x=e*V+i)+1,w=(t?i:x)+V,S=(t?i+1:b)+V,0===e?ee.push(b,S,w):e===eo-2?ee.push(x,b,w):ee.push(x,b,w,b,S,w)}this.setIndex(ee),this.setAttribute("position",new rD(K,3)),this.setAttribute("normal",new rD(J,3)),this.setAttribute("uv",new rD($,2))}getClosedTorusIndicesForBooleanOrSubdiv(){let e=this.userData.parameters,t=Math.ceil(e.tubularSegments),i=e.radialSegments+1,r=Array.from(this.getIndex().array),s,a,o,l,h=6*(t-1)*e.radialSegments,c=t==t;for(let d=0;d<e.radialSegments;d++)a=(s=t*i+d)+1,o=(c?d:s)+i,l=(c?d+1:a)+i,r[h++]=s,r[h++]=a,r[h++]=o,r[h++]=a,r[h++]=l,r[h++]=o;return r.length=h,b$.array=r,b$.count=r.length,b$}},b1=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}
3139static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new b2(.5*t,a,o):new oR(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"IcosahedronGeometry"}})}},b2=class extends xZ{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s="IcosahedronGeometry";super([-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[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],s,e,t,i),this.type=s}static fromJSON(e){return new b2(e.radius,e.corner,e.cornerSides)}},b3=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){(e.parameters?.points??[]).forEach(e=>{Array.isArray(e)&&(e.x=e[0],e.y=e[1])});let i=Object.assign({},t?.parameters??{width:100,segments:64,verticalSegments:64,points:[{x:0,y:-50,id:0},{x:50,y:-50,id:1},{x:50,y:50,id:2},{x:0,y:50,id:3}]},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{points:t,segments:i,verticalSegments:r}=e.parameters,s=new op;s.moveTo(t[0].x,t[0].y),s.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);let a=new ol(s.extractPoints(r).shape,i);return a.rotateZ(Math.PI),Object.assign(a,{userData:{...e,type:"LatheGeometry"}})}},b4=new iQ,b5=new rc,b6=new ix,b8=class extends tz{constructor(){super(),this.uuid=tZ.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(e){let t=new tJ().getNormalMatrix(e);for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].applyMatrix4(e);for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];i.normal.applyMatrix3(t).normalize();for(let e=0,r=i.vertexNormals.length;e<r;e++)i.vertexNormals[e].applyMatrix3(t).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(e){return b4.makeRotationX(e),this.applyMatrix4(b4),this}rotateY(e){return b4.makeRotationY(e),this.applyMatrix4(b4),this}rotateZ(e){return b4.makeRotationZ(e),this.applyMatrix4(b4),this}translate(e,t,i){return b4.makeTranslation(e,t,i),this.applyMatrix4(b4),this}scale(e,t,i){return b4.makeScale(e,t,i),this.applyMatrix4(b4),this}lookAt(e){return b5.lookAt(e),b5.updateMatrix(),this.applyMatrix4(b5.matrix),this}fromBufferGeometry(e){let t=this,i=null!==e.index?e.index:void 0,r=e.attributes;if(void 0===r.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;let s=r.position,a=r.normal,o=r.color,l=r.uv,h=r.uv2;void 0!==h&&(this.faceVertexUvs[1]=[]);for(let e=0;e<s.count;e++)t.vertices.push(new ix().fromBufferAttribute(s,e)),void 0!==o&&t.colors.push(new is().fromBufferAttribute(o,e));function c(e,i,r,s){let c=void 0===o?[]:[t.colors[e].clone(),t.colors[i].clone(),t.colors[r].clone()],d=void 0===a?[]:[new ix().fromBufferAttribute(a,e),new ix().fromBufferAttribute(a,i),new ix().fromBufferAttribute(a,r)],u=new b7(e,i,r,d,c,s);t.faces.push(u),void 0!==l&&t.faceVertexUvs[0].push([new tK().fromBufferAttribute(l,e),new tK().fromBufferAttribute(l,i),new tK().fromBufferAttribute(l,r)]),void 0!==h&&t.faceVertexUvs[1].push([new tK().fromBufferAttribute(h,e),new tK().fromBufferAttribute(h,i),new tK().fromBufferAttribute(h,r)])}let d=e.groups;if(d.length>0)for(let e=0;e<d.length;e++){let t=d[e],r=t.start,s=t.count;for(let e=r,a=r+s;e<a;e+=3)void 0!==i?c(i.getX(e),i.getX(e+1),i.getX(e+2),t.materialIndex):c(e,e+1,e+2,t.materialIndex)}else if(void 0!==i)for(let e=0;e<i.count;e+=3)c(i.getX(e),i.getX(e+1),i.getX(e+2));else for(let e=0;e<s.count;e+=3)c(e,e+1,e+2);
3139return this.computeFaceNormals(),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(b6).negate(),this.translate(b6.x,b6.y,b6.z),this}normalize(){this.computeBoundingSphere();let e=this.boundingSphere.center,t=this.boundingSphere.radius,i=0===t?1:1/t,r=new iQ;return r.set(i,0,0,-i*e.x,0,i,0,-i*e.y,0,0,i,-i*e.z,0,0,0,1),this.applyMatrix4(r),this}computeFaceNormals(){let e=new ix,t=new ix;for(let i=0,r=this.faces.length;i<r;i++){let r=this.faces[i],s=this.vertices[r.a],a=this.vertices[r.b],o=this.vertices[r.c];e.subVectors(o,a),t.subVectors(s,a),e.cross(t),e.normalize(),r.normal.copy(e)}}computeVertexNormals(e=!0){let t=Array(this.vertices.length);for(let e=0,i=this.vertices.length;e<i;e++)t[e]=new ix;if(e){let e=new ix,i=new ix;for(let r=0,s=this.faces.length;r<s;r++){let s=this.faces[r],a=this.vertices[s.a],o=this.vertices[s.b],l=this.vertices[s.c];e.subVectors(l,o),i.subVectors(a,o),e.cross(i),t[s.a].add(e),t[s.b].add(e),t[s.c].add(e)}}else{this.computeFaceNormals();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];t[i.a].add(i.normal),t[i.b].add(i.normal),t[i.c].add(i.normal)}}for(let e=0,i=this.vertices.length;e<i;e++)t[e].normalize();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e],r=i.vertexNormals;3===r.length?(r[0].copy(t[i.a]),r[1].copy(t[i.b]),r[2].copy(t[i.c])):(r[0]=t[i.a].clone(),r[1]=t[i.b].clone(),r[2]=t[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],i=t.vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3139t.__originalFaceNormal?t.__originalFaceNormal.copy(t.normal):t.__originalFaceNormal=t.normal.clone(),t.__originalVertexNormals||(t.__originalVertexNormals=[]);for(let e=0,i=t.vertexNormals.length;e<i;e++)t.__originalVertexNormals[e]?t.__originalVertexNormals[e].copy(t.vertexNormals[e]):t.__originalVertexNormals[e]=t.vertexNormals[e].clone()}let e=new b8;e.faces=this.faces;for(let t=0,i=this.morphTargets.length;t<i;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[];let e=this.morphNormals[t].faceNormals,i=this.morphNormals[t].vertexNormals;for(let t=0,r=this.faces.length;t<r;t++){let t=new ix,r={a:new ix,b:new ix,c:new ix};e.push(t),i.push(r)}}let i=this.morphNormals[t];e.vertices=this.morphTargets[t].vertices,e.computeFaceNormals(),e.computeVertexNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],r=i.faceNormals[e],s=i.vertexNormals[e];r.copy(t.normal),s.a.copy(t.vertexNormals[0]),s.b.copy(t.vertexNormals[1]),s.c.copy(t.vertexNormals[2])}}for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3139t.normal=t.__originalFaceNormal,t.vertexNormals=t.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new iS),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new ik),this.boundingSphere.setFromPoints(this.vertices)}merge(e,t,i=0){if(!(e&&e.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e);return}let r,s=this.vertices.length,a=this.vertices,o=e.vertices,l=this.faces,h=e.faces,c=this.colors,d=e.colors;void 0!==t&&(r=new tJ().getNormalMatrix(t));for(let e=0,i=o.length;e<i;e++){let i=o[e].clone();void 0!==t&&i.applyMatrix4(t),a.push(i)}for(let e=0,t=d.length;e<t;e++)c.push(d[e].clone());for(let e=0,t=h.length;e<t;e++){let t=h[e],a,o,c=t.vertexNormals,d=t.vertexColors,u=new b7(t.a+s,t.b+s,t.c+s);u.normal.copy(t.normal),void 0!==r&&u.normal.applyMatrix3(r).normalize();for(let e=0,t=c.length;e<t;e++)a=c[e].clone(),void 0!==r&&a.applyMatrix3(r).normalize(),u.vertexNormals.push(a);u.color.copy(t.color);for(let e=0,t=d.length;e<t;e++)o=d[e],u.vertexColors.push(o.clone());u.materialIndex=t.materialIndex+i,l.push(u)}for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++)s.push(r[e].clone());this.faceVertexUvs[t].push(s)}}}mergeMesh(e){if(!(e&&e.isMesh)){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e);return}e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)}mergeVertices(e=4){let t={},i=[],r=[],s=Math.pow(10,e);for(let e=0,a=this.vertices.length;e<a;e++){let a=this.vertices[e],o=Math.round(a.x*s)+"_"+Math.round(a.y*s)+"_"+Math.round(a.z*s);void 0===t[o]?(t[o]=e,i.push(this.vertices[e]),r[e]=i.length-1):r[e]=r[t[o]]}let a=[];for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];t.a=r[t.a],t.b=r[t.b],t.c=r[t.c];let i=[t.a,t.b,t.c];for(let t=0;t<3;t++)if(i[t]===i[(t+1)%3]){a.push(e);break}}for(let e=a.length-1;e>=0;e--){let t=a[e];this.faces.splice(t,1);for(let e=0,i=this.faceVertexUvs.length;e<i;e++)this.faceVertexUvs[e].splice(t,1)}let o=this.vertices.length-i.length;return this.vertices=i,o}setFromPoints(e){this.vertices=[];for(let t=0,i=e.length;t<i;t++){let i=e[t];this.vertices.push(new ix(i.x,i.y,i.z||0))}return this}sortFacesByMaterialIndex(){let e=this.faces,t=e.length;for(let i=0;i<t;i++)e[i]._id=i;e.sort(function(e,t){return e.materialIndex-t.materialIndex});let i=this.faceVertexUvs[0],r=this.faceVertexUvs[1],s,a;i&&i.length===t&&(s=[]),r&&r.length===t&&(a=[]);for(let o=0;o<t;o++){let t=e[o]._id;s&&s.push(i[t]),a&&a.push(r[t])}s&&(this.faceVertexUvs[0]=s),a&&(this.faceVertexUvs[1]=a)}toJSON(){let e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}let t=[];for(let e=0;e<this.vertices.length;e++){let i=this.vertices[e];t.push(i.x,i.y,i.z)}let i=[],r=[],s={},a=[],o={},l=[],h={};for(let e=0;e<this.faces.length;e++){let t=this.faces[e],r=void 0!==this.faceVertexUvs[0][e],s=t.normal.length()>0,a=t.vertexNormals.length>0,o=1!==t.color.r||1!==t.color.g||1!==t.color.b,l=t.vertexColors.length>0,h=0;if(h=c(0,0,0),h=c(h,1,!0),h=c(h,2,!1),h=c(h,3,r),h=c(h,4,s),h=c(h,5,a),h=c(h,6,o),h=c(h,7,l),i.push(h),i.push(t.a,t.b,t.c),i.push(t.materialIndex),r){let t=this.faceVertexUvs[0][e];i.push(p(t[0]),p(t[1]),p(t[2]))}if(s&&i.push(d(t.normal)),a){let e=t.vertexNormals;i.push(d(e[0]),d(e[1]),d(e[2]))}if(o&&i.push(u(t.color)),l){let e=t.vertexColors;i.push(u(e[0]),u(e[1]),u(e[2]))}}function c(e,t,i){return i?e|1<<t:e&~(1<<t)}function d(e){let t=e.x.toString()+e.y.toString()+e.z.toString();return void 0!==s[t]||(s[t]=r.length/3,r.push(e.x,e.y,e.z)),s[t]}function u(e){let t=e.r.toString()+e.g.toString()+e.b.toString();return void 0!==o[t]||(o[t]=a.length,a.push(e.getHex())),o[t]}function p(e){let t=e.x.toString()+e.y.toString();return void 0!==h[t]||(h[t]=l.length/2,l.push(e.x,e.y)),h[t]}return e.data={},e.data.vertices=t,e.data.normals=r,a.length>0&&(e.data.colors=a),l.length>0&&(e.data.uvs=[l]),e.data.faces=i,e}clone(){return new b8().copy(this)}copy(e){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;let t=e.vertices;for(let e=0,i=t.length;e<i;e++)this.vertices.push(t[e].clone());let i=e.colors;for(let e=0,t=i.length;e<t;e++)this.colors.push(i[e].clone());let r=e.faces;for(let e=0,t=r.length;e<t;e++)this.faces.push(r[e].clone());for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++){let t=r[e];s.push(t.clone())}this.faceVertexUvs[t].push(s)}}let s=e.morphTargets;for(let e=0,t=s.length;e<t;e++){let t={};if(t.name=s[e].name,void 0!==s[e].vertices){t.vertices=[];for(let i=0,r=s[e].vertices.length;i<r;i++)t.vertices.push(s[e].vertices[i].clone())}if(void 0!==s[e].normals){t.normals=[];for(let i=0,r=s[e].normals.length;i<r;i++)t.normals.push(s[e].normals[i].clone())}this.morphTargets.push(t)}let a=e.morphNormals;for(let e=0,t=a.length;e<t;e++){let t={};if(void 0!==a[e].vertexNormals){t.vertexNormals=[];for(let i=0,r=a[e].vertexNormals.length;i<r;i++){let r=a[e].vertexNormals[i],s={};s.a=r.a.clone(),s.b=r.b.clone(),s.c=r.c.clone(),t.vertexNormals.push(s)}}if(void 0!==a[e].faceNormals){t.faceNormals=[];for(let i=0,r=a[e].faceNormals.length;i<r;i++)t.faceNormals.push(a[e].faceNormals[i].clone())}this.morphNormals.push(t)}let o=e.skinWeights;for(let e=0,t=o.length;e<t;e++)this.skinWeights.push(o[e].clone());let l=e.skinIndices;for(let e=0,t=l.length;e<t;e++)this.skinIndices.push(l[e].clone());let h=e.lineDistances;for(let e=0,t=h.length;e<t;e++)this.lineDistances.push(h[e]);let c=e.boundingBox;null!==c&&(this.boundingBox=c.clone());let d=e.boundingSphere;return null!==d&&(this.boundingSphere=d.clone()),this.elementsNeedUpdate=e.elementsNeedUpdate,this.verticesNeedUpdate=e.verticesNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,this}toBufferGeometry(){let e=new b9().fromGeometry(this),t=new rN,i=new Float32Array(3*e.vertices.length);if(t.setAttribute("position",wr.call(new rC(i,3),e.vertices)),e.normals.length>0){let i=new Float32Array(3*e.normals.length);t.setAttribute("normal",wr.call(new rC(i,3),e.normals))}if(e.colors.length>0){let i=new Float32Array(3*e.colors.length);t.setAttribute("color",wt.call(new rC(i,3),e.colors))}if(e.uvs.length>0){let i=new Float32Array(2*e.uvs.length);t.setAttribute("uv",wi.call(new rC(i,2),e.uvs))}if(e.uvs2.length>0){let i=new Float32Array(2*e.uvs2.length);t.setAttribute("uv2",wi.call(new rC(i,2),e.uvs2))}for(let i in t.groups=e.groups,e.morphTargets){let r=[],s=e.morphTargets[i];for(let e=0,t=s.length;e<t;e++){let t=s[e],i=new rD(3*t.data.length,3);i.name=t.name,r.push(wr.call(i,t.data))}t.morphAttributes[i]=r}if(e.skinIndices.length>0){let i=new rD(4*e.skinIndices.length,4);t.setAttribute("skinIndex",ws.call(i,e.skinIndices))}if(e.skinWeights.length>0){let i=new rD(4*e.skinWeights.length,4);t.setAttribute("skinWeight",ws.call(i,e.skinWeights))}
3139return null!==e.boundingSphere&&(t.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(t.boundingBox=e.boundingBox.clone()),t}computeTangents(){console.error("THREE.Geometry: .computeTangents() has been removed.")}computeLineDistances(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}applyMatrix(e){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(e)}dispose(){this.dispatchEvent({type:"dispose"})}static createBufferGeometryFromObject(e){let t=new rN,i=e.geometry;if(e.isPoints||e.isLine){let e=new rD(3*i.vertices.length,3),r=new rD(3*i.colors.length,3);if(t.setAttribute("position",wr.call(e,i.vertices)),t.setAttribute("color",wt.call(r,i.colors)),i.lineDistances&&i.lineDistances.length===i.vertices.length){let e=new rD(i.lineDistances.length,1);t.setAttribute("lineDistance",we.call(e,i.lineDistances))}null!==i.boundingSphere&&(t.boundingSphere=i.boundingSphere.clone()),null!==i.boundingBox&&(t.boundingBox=i.boundingBox.clone())}else e.isMesh&&(t=i.toBufferGeometry());return t}};b8.prototype.isGeometry=!0;var b9=class{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(e){let t=[],i,r,s,a=e.faces;for(r=0;r<a.length;r++){let e=a[r];e.materialIndex!==s&&(s=e.materialIndex,void 0!==i&&(i.count=3*r-i.start,t.push(i)),i={start:3*r,materialIndex:s})}void 0!==i&&(i.count=3*r-i.start,t.push(i)),this.groups=t}fromGeometry(e){let t=e.faces,i=e.vertices,r=e.faceVertexUvs,s=r[0]&&r[0].length>0,a=r[1]&&r[1].length>0,o=e.morphTargets,l=o.length,h;if(l>0){h=[];for(let e=0;e<l;e++)h[e]={name:o[e].name,data:[]};this.morphTargets.position=h}let c=e.morphNormals,d=c.length,u;if(d>0){u=[];for(let e=0;e<d;e++)u[e]={name:c[e].name,data:[]};this.morphTargets.normal=u}let p=e.skinIndices,f=e.skinWeights,m=p.length===i.length,g=f.length===i.length;i.length>0&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let e=0;e<t.length;e++){let v=t[e];this.vertices.push(i[v.a],i[v.b],i[v.c]);let y=v.vertexNormals;if(3===y.length)this.normals.push(y[0],y[1],y[2]);else{let e=v.normal;this.normals.push(e,e,e)}let x=v.vertexColors;if(3===x.length)this.colors.push(x[0],x[1],x[2]);else{let e=v.color;this.colors.push(e,e,e)}if(!0===s){let t=r[0][e];void 0!==t?this.uvs.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",e),this.uvs.push(new tK,new tK,new tK))}if(!0===a){let t=r[1][e];void 0!==t?this.uvs2.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",e),this.uvs2.push(new tK,new tK,new tK))}for(let e=0;e<l;e++){let t=o[e].vertices;h[e].data.push(t[v.a],t[v.b],t[v.c])}for(let t=0;t<d;t++){let i=c[t].vertexNormals[e];u[t].data.push(i.a,i.b,i.c)}m&&this.skinIndices.push(p[v.a],p[v.b],p[v.c]),g&&this.skinWeights.push(f[v.a],f[v.b],f[v.c])}return this.computeGroups(e),this.verticesNeedUpdate=e.verticesNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this}},b7=class{constructor(e,t,i,r,s,a=0){this.a=e,this.b=t,this.c=i,this.normal=r&&r.isVector3?r:new ix,this.vertexNormals=Array.isArray(r)?r:[],this.color=s&&s.isColor?s:new is,this.vertexColors=Array.isArray(s)?s:[],this.materialIndex=a}clone(){return new this.constructor().copy(this)}copy(e){this.a=e.a,this.b=e.b,this.c=e.c,this.normal.copy(e.normal),this.color.copy(e.color),this.materialIndex=e.materialIndex;for(let t=0,i=e.vertexNormals.length;t<i;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();for(let t=0,i=e.vertexColors.length;t<i;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}};function we(e){return this.array.set(e),this}function wt(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",r),s=new is),t[i++]=s.r,t[i++]=s.g,t[i++]=s.b}return this}function wi(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",r),s=new tK),t[i++]=s.x,t[i++]=s.y}return this}function wr(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",r),s=new ix),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z}return this}function ws(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",r),s=new iu),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z,t[i++]=s.w}return this}var wa=["a","b","c"];function wn(e,t,i){let r=Math.min(e,t),s=Math.max(e,t);return i.get(r+"_"+s)}function wo(e,t,i,r,s,a){let o=Math.min(e,t),l=Math.max(e,t),h=o+"_"+l,c;r.has(h)?c=r.get(h):(c={a:i[o],b:i[l],newEdge:null,faces:[]},r.set(h,c)),c.faces.push(s),a[e].edges.push(c),a[t].edges.push(c)}function wl(e,t,i,r,s){e.push(new b7(t,i,r,void 0,void 0,s))}function wh(e,t){return Math.abs(t-e)/2+Math.min(e,t)}function wc(e,t,i,r){e.push([t.clone(),i.clone(),r.clone()])}var wd=class{constructor(e=1){this.subdivisions=e}modify(e){(e=e instanceof rN?new b8().fromBufferGeometry(e):e.clone()).mergeVertices();let t=this.subdivisions;for(;t-- >0;)this._smooth(e);return e.computeFaceNormals(),e.computeVertexNormals(),e}_smooth(e){let t=new ix,i,r,s,a,o,l=e.vertices,h=e.faces,c=e.faceVertexUvs[0],d=void 0!==c&&c.length>0,u=[],p=new Map;!function(e,t,i,r){let s,a,o;for(s=0,a=e.length;s<a;s++)i[s]={edges:[]};for(s=0,a=t.length;s<a;s++)wo((o=t[s]).a,o.b,e,r,o,i),wo(o.b,o.c,e,r,o,i),wo(o.c,o.a,e,r,o,i)}(l,h,u,p);let f=[],m,g,v,y,x,b,w;for(let e of Array.from(p.keys())){for(g=p.get(e),v=new ix,x=3/8,b=1/8,2!=(w=g.faces.length)&&(x=.5,b=0),v.addVectors(g.a,g.b).multiplyScalar(x),t.set(0,0,0),a=0;a<w;a++){for(y=g.faces[a],o=0;o<3&&!((m=l[function(e,t){switch(t){case"c":return e.c;case"b":return e.b;default:return e.a}}(y,wa[o])])!==g.a&&m!==g.b);o++);m&&t.add(m)}t.multiplyScalar(b),v.add(t),g.newEdge=f.length,f.push(v)}let S,_,A,M,E,C,T,P=[];for(r=0,s=l.length;r<s;r++){for(C=l[r],3==(i=(E=u[r].edges).length)?S=3/16:i>3&&(S=3/(8*i)),_=1-i*Number(S),A=S,i<=2&&2==i&&(_=3/4,A=1/8),T=C.clone().multiplyScalar(_),t.set(0,0,0),a=0;a<i;a++)m=(M=E[a]).a!==C?M.a:M.b,t.add(m);t.multiplyScalar(Number(A)),T.add(t),P.push(T)}let D=P.concat(f),I=P.length,O,R,L,B=[],z=[],F,N,U,k,V=new tK,j=new tK,G=new tK;for(r=0,s=h.length;r<s;
3139r++)wl(B,O=Number(wn((y=h[r]).a,y.b,p).newEdge)+I,R=Number(wn(y.b,y.c,p).newEdge)+I,L=Number(wn(y.c,y.a,p).newEdge)+I,y.materialIndex),wl(B,y.a,O,L,y.materialIndex),wl(B,y.b,R,O,y.materialIndex),wl(B,y.c,L,R,y.materialIndex),d&&(N=(F=c[r])[0],U=F[1],k=F[2],V.set(wh(N.x,U.x),wh(N.y,U.y)),j.set(wh(U.x,k.x),wh(U.y,k.y)),G.set(wh(N.x,k.x),wh(N.y,k.y)),wc(z,V,j,G),wc(z,N,V,G),wc(z,U,j,V),wc(z,k,G,j));e.vertices=D,e.faces=B,d&&(e.faceVertexUvs[0]=z)}},wu=new ix,wp=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=e.geometry??t?.geometry??new rN().copy(new r0(100,100,100)),r;void 0===t?(i.computeBoundingBox(),i.boundingBox.getSize(wu),r={width:wu.x,height:wu.y,depth:wu.z,subdivisions:0}):r=t.parameters;let s={...r,...e.parameters};return{parameters:{width:Math.abs(s.width),height:Math.abs(s.height),depth:Math.abs(s.depth),subdivisions:Math.abs(s.subdivisions)},geometry:i}}static build(e){let{width:t,height:i,depth:r,subdivisions:s}=e.parameters,a=e.geometry??new rN().copy(new r0(100,100,100)),o=a.userData.parameters;void 0===o?(a.computeBoundingBox(),a.boundingBox.getSize(wu)):wu.set(o.width,o.height,o.depth),(t!==wu.x||i!==wu.y||r!==wu.z)&&a.scale(0===wu.x?1:t/wu.x,0===wu.y?1:i/wu.y,0===wu.z?1:r/wu.z);let l=a.originalGeometry;try{s>0?(void 0===l||o?.subdivisions!==s)&&(void 0===l&&(l=a),a=new wd(s).modify(l).toBufferGeometry()):(void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals())}catch{void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals()}return void 0!==l&&Object.assign(a,{originalGeometry:l}),delete e.geometry,Object.assign(a,{userData:{...e,type:"NonParametricGeometry"}})}static loadFromUrl(e,t,i){new lg(i).load(e,e=>{let i=this.normalizeInputs({geometry:e});e.boundingBox.getSize(wu);let r=100/wu.x;Object.assign(i.parameters,{width:100,height:wu.y*r,depth:wu.z*r}),t(this.build(i))})}},wf=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters);return{shape:e.shape&&e.shape instanceof bm?e.shape:new bm,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,spikes:r,cornerRadius:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i,u=2*Math.PI/r;for(let e=0;e<r;e++){let t=u*e,i=0+Math.sin(t)*c,r=0+Math.cos(t)*d;h.addPoint(h.createPoint(i,r))}h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=s;return h.roundness=s,h.update(),Object.assign(bG.create({shape:h,parameters:{roundness:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}}),{userData:{...e,type:"PolygonGeometry"}})}},wm=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:4,heightSegments:1,cornerRadius:0,cornerSegments:8,openEnded:!1},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,heightSegments:a,openEnded:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=new wy(.5*t,i,s,a,o,l,h);return c.scale(1,1,r/t),Object.assign(c,{userData:{...e,type:"PyramidGeometry"}})}};function wg(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function wv(e,t,i,r,s,a){let o=t.clone().sub(e),l=i.clone().sub(e),h=o.angleTo(l);if(o.normalize(),l.normalize(),r===s){let t=o.add(l).normalize();a.copy(e).addScaledVector(t,r/Math.sin(h/2))}else{let t=o.angleTo(l);a.copy(e),a.addScaledVector(o,s/Math.sin(t)),a.addScaledVector(l,r/Math.sin(t))}}var wy=class extends rN{constructor(e=.5,t=1,i=4,r=1,s=!1,a=0,o=4){let l;super(),i=Math.floor(Math.max(3,i)),r=Math.floor(r),o=Math.floor(o);let h=[],c=[],d=[],u=[],p=0,f=t/2,m=Math.PI/i,g=e*Math.cos(Math.PI/i),v=2*Math.PI/i,y=Math.PI-(i-2)*Math.PI/i,x=new ix(0,-f,0),b=new ix(0,f,0),w=new tK(e,-f),S=new tK(g,-f),_=new tK(0,b.y).sub(S),A=new tK(0,b.y).sub(w),M=new tK(_.y,-_.x).normalize(),E=new tK(A.y,-A.x).normalize(),C=e*Math.cos(Math.PI/i)*Math.tan((Math.PI-_.angle())/2)-1e-8;a=Math.min(a,C);
vendor: 4,720 bytes, line 3139
3139{let e=new ix(M.x,M.y,0),t=new ix(Math.cos(v)*e.x,e.y,Math.sin(v)*e.x);l=e.angleTo(t)}let T=a/Math.tan((Math.PI-_.angle())/2),P=a/Math.tan((Math.PI-l)/2),D=new ix;if(!s){c.push(x.x,x.y,x.z),d.push(0,-1,0),u.push(0,0);let e=p++,t=[],r=w.clone(),s=T/Math.cos(Math.PI/i);r.x-=s;for(let e=0;e<i;e++){let s=e/i*Math.PI*2+m;wg(r,new tK(Math.sin(s),Math.cos(s)),D),c.push(D.x,D.y,D.z),d.push(0,-1,0),u.push(0,0),t.push(p++)}for(let i=0;i<t.length;i++)h.push(t[i],e,t[(i+1)%t.length])}let I=[];{let e=new ix,t=new ix,r=new ix,s=new ix,f=new ix,g=new ix;for(let v=0;v<i;v++){let S=v/i*Math.PI*2+m,C=(v+.5)/i*Math.PI*2+m,D=(v+1)/i*Math.PI*2+m,R=new tK(Math.sin(S),Math.cos(S)),L=new tK(Math.sin(C),Math.cos(C)),B=new tK(Math.sin(D),Math.cos(D));wg(w,R,t),wg(w,B,r),wg(M,L,e),wv(b,t,r,P,P,s),c.push(s.x,s.y,s.z),wv(t,b,r,P,T,f),c.push(f.x,f.y,f.z),wv(r,t,b,T,P,g),c.push(g.x,g.y,g.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),u.push(0,0),u.push(0,0),u.push(0,0);let z=p++,F=p++,N=p++;if(h.push(z,F,N),a>0){let m,v;{let e=t.clone().add(r).multiplyScalar(.5),i=b.clone().sub(e).normalize(),s=x.clone().sub(e).normalize().add(i).normalize().multiplyScalar(-1);O(e,g.clone().sub(f),s,_.angle())}{let e=new ix;wg(E,B,e);let t=g.clone().add(s).multiplyScalar(.5);t=function(e,t,i){let r=e.clone().sub(t),s=i.clone().sub(t);return r.projectOnVector(s),r.add(t)}(t,r,b);let i=g.clone().sub(s);[m,v]=O(t,i,e,l,s.y)}{let e=m,t=e.clone().setY(0).normalize(),i=new ix(0,-1,0),r=t.clone().cross(i);!function(e,t,i,r){let s=Math.PI/2,l=A.angle()-s,f=[],m=new ix,g=new ix;for(let h=0;h<=o;h++){let v=[],x=h/o;for(let o=0;o<=h;o++){let f=((h?o/h:0)-.5)*y,b=Math.cos(f),w=Math.sin(f),S=(s+Math.atan(Math.tan(l)*b))*x,_=Math.cos(S),A=Math.sin(S);m.set(0,0,0),m.addScaledVector(t,A*b),m.addScaledVector(i,_),m.addScaledVector(r,A*w),g.copy(e).addScaledVector(m,a),c.push(g.x,g.y,g.z),d.push(m.x,m.y,m.z),u.push(0,0),v.push(p++)}f.push(v)}let v=f.length-1;for(let e=0;e<v;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(t[0],i[1],i[0]);for(let e=1;e<=r;e++)h.push(t[e-1],t[e],i[e]),h.push(t[e],i[e+1],i[e])}}(e,t,i,r)}I.concat(v);{let t=_.angle(),r=Math.PI-t,s=b.clone();s.y-=a/Math.sin(t-Math.PI/2);let l=new ix,f=[];for(let t=0;t<o;t++){let h=[],m=Math.PI/2-r*t/o,g=Math.cos(m),v=Math.sin(m),y=C;for(let r=0;r<=t;r++){let r=Math.cos(y),o=Math.sin(y);e.x=g*o,e.y=v,e.z=g*r,l.copy(s).addScaledVector(e,a),c.push(l.x,l.y,l.z),d.push(e.x,e.y,e.z),u.push(0,0),h.push(p++),y+=2*Math.PI/t/i}f.push(h)}v.reverse(),f.push(v);let m=f.length-1;for(let e=0;e<m;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(i[1],t[0],i[0]);for(let e=1;e<=r;e++)h.push(t[e],t[e-1],i[e]),h.push(i[e+1],t[e],i[e])}}}}}function O(e,t,i,r,s){let l=-r/2,f=(Math.PI-r)/2,m=t.clone().normalize().cross(i);e.addScaledVector(i,-a/Math.sin(f));let g=new ix,v=new ix,y=p,x=[];for(let h=0;h<=o;h++){let f=l+h/o*r;v.set(0,0,0),v.addScaledVector(m,Math.sin(f)),v.addScaledVector(i,Math.cos(f));for(let i=0;i<=1;i++){let r=i/1-.5;if(g.copy(e),g.addScaledVector(t,r),g.addScaledVector(v,a),null!=s){let e=Math.max(0,g.y-s);g.addScaledVector(t,-e/t.y)}c.push(g.x,g.y,g.z),d.push(v.x,v.y,v.z),u.push(0,0),0===i&&x.push(p),p++}}for(let e=0;e<o;e++)for(let t=0;t<1;t++){let i=y+t+2*e,r=i+2,s=r+1,a=i+1;h.push(i,r,a),h.push(r,s,a)}return[e.clone().addScaledVector(t,.5),x]}this.setIndex(h),this.setAttribute("position",new rD(c,3)),this.setAttribute("normal",new rD(d,3)),this.setAttribute("uv",new rD(u,2))}},wx=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,cornerRadius:[0,0,0,0],cornerType:1,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters),r=Object.assign(t?.ui??{enabledIndieCorners:!1},e.ui);return{shape:e.shape&&e.shape instanceof bm?e.shape:new bm,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)}),ui:r}}static build(e){let t=e.shape,{width:i,height:r,cornerRadius:s,cornerType:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}=e.parameters,c={x:.5*i,y:.5*r},d={x:-c.x,y:-c.y},u={x:c.x,y:c.y};function p(e,t,s){return t>i&&s>r?Math.min(e*i/t,e*r/s):t>i?e*i/t:s>r?e*r/s:e}let f=[];f[0]=0===s[0]?0:p(s[0],s[0]+s[3],s[0]+s[1]),f[1]=0===s[1]?0:p(s[1],s[1]+s[2],s[1]+s[0]),f[2]=0===s[2]?0:p(s[2],s[2]+s[1],s[2]+s[3]),f[3]=0===s[3]?0:p(s[3],s[3]+s[0],s[3]+s[2]);let m=d.x,g=u.x,v=u.y,y=d.y;t.addPoint(t.createPoint(m,v)),t.addPoint(t.createPoint(g,v)),t.addPoint(t.createPoint(g,y)),t.addPoint(t.createPoint(m,y)),t.isClosed=!0;let x=!0;for(let e=0,i=t.points.length;e<i;e++)t.points[e].roundness=f[e],e>0&&f[e]!==f[e-1]&&(x=!1);return x&&(t.roundness=f[0]),t.useCubicForRoundedCorners=1!==a,t.update(
3139),Object.assign(bG.create({shape:t,parameters:{depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}}),{userData:{...e,type:"RectangleGeometry"}})}},wb=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180},e.parameters);return i.thetaLength=tZ.clamp(i.thetaLength,0,180),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t=100,height:i=t,depth:r=t,widthSegments:s=64,heightSegments:a=64,phiStart:o,phiLength:l,thetaStart:h,thetaLength:c}=e.parameters,d;return 0===c?(d=new rN).setAttribute("position",new rD([],3)):d=new oL(.5*t,s,a,o,l,h,c*tZ.DEG2RAD),d.scale(1,i/t,r/t),Object.assign(d,{userData:{...e,type:"SphereGeometry"}})}},ww=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,widthSegments:8,heightSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:0})}}static build(e){let{width:t=100,height:i=t,widthSegments:r=8,heightSegments:s=8}=e.parameters,a=new su(t,i,r,s);return a.scale(1,1,1),Object.assign(a,{userData:{...e,type:"PlaneGeometry"}})}},wS=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,angle:90,cornerRadius:24,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,angle:s,cornerRadius:a,cornerSegments:o}=e.parameters;return Object.assign(new w_(t,i,r,s,a,o),{userData:{...e,type:"BackdropGeometry"}})}},w_=class extends rN{constructor(e=1,t=1,i=1,r=90,s=10,a=24){super(),this.type="BackdropGeometry";let o=[],l=[],h=[];0==s&&(a=1),a=Math.max(1,Math.floor(a)),s=Math.min(s,100),r=Math.PI/180*Math.min(179.999,r);let c=[],d=Math.PI/2,u=(e=0,t=0,i=0)=>new ix(e,t,i),p=u(),f=u(),[m,g,v]=[t/2,e/2,i/2],y=-g,x=+g,[b,w,S]=[u(y,-m,+v),u(y,-m,-v),u(y,+m,-v)],_=(e,t=!1)=>Math.sin(e-Math.PI/(1+ +t)),A=(e,t=!1)=>Math.cos(e-Math.PI/(1+ +t));S.y=Math.sin(r)*t-m;let M=Math.cos(r)*t-v,E=b.z-.001;r<=d?(S.z=Math.min(M,E),S.z==E&&(S.y-=(M-E)/Math.tan(d-r))):w.z=Math.min(w.z-M-v,b.z-.001),p.subVectors(b,w),f.subVectors(S,w);let C=Math.min(p.length(),f.length())*s/100,T=C*Math.tan(r/2),P=C/Math.cos(r/2),D=p.clone().normalize().add(f.normalize()).setLength(P).add(w);p.set(0,_(r,!0),A(r,!0)),c.push([S,p.clone()]);let I=(Math.PI-r)/a;for(let e=0;e<=a;e++){let t=d+r+e*I;p.set(0,Math.sin(t)*T,Math.cos(t)*T),p.add(D),f.set(0,_(t),A(t)),c.push([p.clone(),f.clone()])}c.push([b,u(0,1,0)]);let O=Math.sin(I/2)*T*2,R=c.length-1,L=c[0][0].distanceTo(c[1][0]),B=L+O*a+c[R-1][0].distanceTo(c[R][0]);c[0].push(1);for(let e=0;e<=a;e++)c[e+1].push(1-(L+e*O)/B);c[R].push(0);let[z,F,N]=c[0],U,k,V;for(let e=1;e<c.length;e++)[U,k,V]=c[e],o.push(y,z.y,z.z,y,U.y,U.z,x,z.y,z.z,x,z.y,z.z,y,U.y,U.z,x,U.y,U.z),l.push(0,F.y,F.z,0,k.y,k.z,0,F.y,F.z,0,F.y,F.z,0,k.y,k.z,0,k.y,k.z),h.push(0,N,0,V,1,N,1,N,0,V,1,V),[z,F,N]=[U,k,V];this.setAttribute("position",new rD(o,3)),this.setAttribute("normal",new rD(l,3)),this.setAttribute("uv",new rD(h,2))}},wA=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,innerRadiusPercent:38.19,spikes:5,cornerRadius:0,angle:360,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return{shape:e.shape&&e.shape instanceof bm?e.shape:new bm,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,innerRadiusPercent:r,spikes:s,cornerRadius:a,angle:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=.5*t,p=.5*i,f=o*Math.PI/360/s,m=-(Math.PI/2*3),g=u*r/100,v=p*r/100;if(3===s&&50===r){f=2*Math.PI/s;for(let e=0;e<s;e++){let t=f*e,i=0+Math.sin(t)*u,r=0+Math.cos(t)*p;d.addPoint(d.createPoint(i,r))}}else for(let e=0;e<s;e++){let e=0+Math.cos(m)*u,t=0+Math.sin(m)*p;d.addPoint(d.createPoint(e,t)),m+=f,e=0+Math.cos(m)*g,t=0+Math.sin(m)*v,d.addPoint(d.createPoint(e,t)),m+=f}d.isClosed=!0;for(let e=0,t=d.points.length;e<t;e++)d.points[e].roundness=a;return d.roundness=a,d.update(),Object.assign(bG.create({shape:d,parameters:{roundness:a,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),{userData:{...e,type:"StarGeometry"}})}},wM=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i}=e.parameters;return Object.assign(new su(t,i),{userData:{...e,type:"TextFrameGeometry"}})}},wE=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,tubularSegments:64,arc:360,cornerRadius:30,cornerSegments:8},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.round(Math.abs(i.depth??.25*i.width));return{parameters:Object.assign(i,{width:r,height:s,depth:a})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,tubularSegments:a,arc:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=function(e,t,i,r,s,a,o,l,h,c,d){[t,i]=[i,t],o=t/2;let u=tZ.clamp(s/360,0,1);if(0===u){let e=new rN;return e.setAttribute("position",new rD([],3)),e}return 1===u&&(c=0),new b0(!0,e,t,i,r,u,a,o,0,h,c,d)}(t,i,r,.5*t,o,a,0,0,s,l,h);return c.scale(1,i/t,1),Object.assign(c,{userData:{...e,type:"TorusGeometry"}})}},wC=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,tubularSegments:64,radialSegments:32,p:2,q:3},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width),tube:i.tube??.125*i.width})}}static build(e){let{width:t,tube:i,tubularSegments:r,radialSegments:s,p:a,q:o}=e.parameters,l=.5*t;return l!==i&&(l-=i),Object.assign(new oz(l,i,r,s,a,o),{userData:{...e,type:"TorusKnotGeometry"}})}},wT=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1,isRect:!1},e.parameters);return{shape:e.shape&&e.shape instanceof bm?e.shape:new bm,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width*(i.isRect?1:Math.sqrt(3)/2)),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t=100,height:i,cornerRadius:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,isRect:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i;l?h.addPoint(h.createPoint(-c,d)):h.addPoint(h.createPoint(0,d)),h.addPoint(h.createPoint(c,-d)),h.addPoint(h.createPoint(-c,-d)),h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=r;return h.roundness=r,h.update(),Object.assign(bG.create({shape:h,parameters:{roundness:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o}}),{userData:{...e,type:"TriangleGeometry"}})}},wP={hexStringToRgb:function(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(e,t,i,r)=>String(t+t+i+i+r+r));let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}},wD=class{add(e,t,i){if("string"!=typeof arguments[0])for(let e in arguments[0])this.add(e,arguments[0][e],arguments[1]);
3139else(Array.isArray(e)?e:[e]).forEach(function(e){this[e]=this[e]||[],t&&this[e][i?"unshift":"push"](t)},this)}run(e,t){this[e]=this[e]||[],this[e].forEach(function(e){e.call(t&&t.context?t.context:t,t)})}},wI=class{constructor(e){this.jsep=e,this.registered={}}register(...e){e.forEach(e=>{if("object"!=typeof e||!e.name||!e.init)throw Error("Invalid JSEP plugin format");this.registered[e.name]||(e.init(this.jsep),this.registered[e.name]=e)})}},wO=class{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+wO.version}static addUnaryOp(e){return wO.max_unop_len=Math.max(e.length,wO.max_unop_len),wO.unary_ops[e]=1,wO}static addBinaryOp(e,t,i){return wO.max_binop_len=Math.max(e.length,wO.max_binop_len),wO.binary_ops[e]=t,i?wO.right_associative.add(e):wO.right_associative.delete(e),wO}static addIdentifierChar(e){return wO.additional_identifier_chars.add(e),wO}static addLiteral(e,t){return wO.literals[e]=t,wO}static removeUnaryOp(e){return delete wO.unary_ops[e],e.length===wO.max_unop_len&&(wO.max_unop_len=wO.getMaxKeyLen(wO.unary_ops)),wO}static removeAllUnaryOps(){return wO.unary_ops={},wO.max_unop_len=0,wO}static removeIdentifierChar(e){return wO.additional_identifier_chars.delete(e),wO}static removeBinaryOp(e){return delete wO.binary_ops[e],e.length===wO.max_binop_len&&(wO.max_binop_len=wO.getMaxKeyLen(wO.binary_ops)),wO.right_associative.delete(e),wO}static removeAllBinaryOps(){return wO.binary_ops={},wO.max_binop_len=0,wO}static removeLiteral(e){return delete wO.literals[e],wO}static removeAllLiterals(){return wO.literals={},wO}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new wO(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(e=>e.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return wO.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!wO.binary_ops[String.fromCharCode(e)]||wO.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return wO.isIdentifierStart(e)||wO.isDecimalDigit(e)}throwError(e){let t=Error(e+" at character "+this.index);throw t.index=this.index,t.description=e,t}runHook(e,t){if(wO.hooks[e]){let i={context:this,node:t};return wO.hooks.run(e,i),i.node}return t}searchHook(e){if(wO.hooks[e]){let t={context:this};return wO.hooks[e].find(function(e){return e.call(t.context,t),t.node}),t.node}}gobbleSpaces(){let e=this.code;for(;e===wO.SPACE_CODE||e===wO.TAB_CODE||e===wO.LF_CODE||e===wO.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),t=1===e.length?e[0]:{type:wO.COMPOUND,body:e};return this.runHook("after-all",t)}gobbleExpressions(e){let t=[],i,r;for(;this.index<this.expr.length;)if((i=this.code)===wO.SEMCOL_CODE||i===wO.COMMA_CODE)this.index++;else if(r=this.gobbleExpression())t.push(r);else if(this.index<this.expr.length){if(i===e)break;this.throwError('Unexpected "'+this.char+'"')}return t}gobbleExpression(){let e=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",e)}gobbleBinaryOp(){this.gobbleSpaces();let e=this.expr.substr(this.index,wO.max_binop_len),t=e.length;for(;t>0;){if(wO.binary_ops.hasOwnProperty(e)&&(!wO.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!wO.isIdentifierPart(this.expr.charCodeAt(this.index+e.length))))return this.index+=t,e;e=e.substr(0,--t)}return!1}gobbleBinaryExpression(){let e,t,i,r,s,a,o,l,h;if(!(a=this.gobbleToken())||!(t=this.gobbleBinaryOp()))return a;for(s={value:t,prec:wO.binaryPrecedence(t),right_a:wO.right_associative.has(t)},(o=this.gobbleToken())||this.throwError("Expected expression after "+t),r=[a,s,o];t=this.gobbleBinaryOp();){if(0===(i=wO.binaryPrecedence(t))){this.index-=t.length;break}s={value:t,prec:i,right_a:wO.right_associative.has(t)},h=t;let l=e=>s.right_a&&e.right_a?i>e.prec:i<=e.prec;for(;r.length>2&&l(r[r.length-2]);)o=r.pop(),t=r.pop().value,a=r.pop(),e={type:wO.BINARY_EXP,operator:t,left:a,right:o},r.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+h),r.push(s,e)}for(l=r.length-1,e=r[l];l>1;)e={type:wO.BINARY_EXP,operator:r[l-1].value,left:r[l-2],right:e},l-=2;return e}gobbleToken(){let e,t,i,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"))return this.runHook("after-token",r);
3139if(e=this.code,wO.isDecimalDigit(e)||e===wO.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===wO.SQUOTE_CODE||e===wO.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(e===wO.OBRACK_CODE)r=this.gobbleArray();else{for(i=(t=this.expr.substr(this.index,wO.max_unop_len)).length;i>0;){if(wO.unary_ops.hasOwnProperty(t)&&(!wO.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!wO.isIdentifierPart(this.expr.charCodeAt(this.index+t.length)))){this.index+=i;let e=this.gobbleToken();return e||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:wO.UNARY_EXP,operator:t,argument:e,prefix:!0})}t=t.substr(0,--i)}wO.isIdentifierStart(e)?(r=this.gobbleIdentifier(),wO.literals.hasOwnProperty(r.name)?r={type:wO.LITERAL,value:wO.literals[r.name],raw:r.name}:r.name===wO.this_str&&(r={type:wO.THIS_EXP})):e===wO.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(e){this.gobbleSpaces();let t=this.code;for(;t===wO.PERIOD_CODE||t===wO.OBRACK_CODE||t===wO.OPAREN_CODE||t===wO.QUMARK_CODE;){let i;if(t===wO.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==wO.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),t=this.code}this.index++,t===wO.OBRACK_CODE?(e={type:wO.MEMBER_EXP,computed:!0,object:e,property:this.gobbleExpression()},this.gobbleSpaces(),(t=this.code)!==wO.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):t===wO.OPAREN_CODE?e={type:wO.CALL_EXP,arguments:this.gobbleArguments(wO.CPAREN_CODE),callee:e}:(t===wO.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),e={type:wO.MEMBER_EXP,computed:!1,object:e,property:this.gobbleIdentifier()}),i&&(e.optional=!0),this.gobbleSpaces(),t=this.code}return e}gobbleNumericLiteral(){let e="",t,i;for(;wO.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if(this.code===wO.PERIOD_CODE)for(e+=this.expr.charAt(this.index++);wO.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if("e"===(t=this.char)||"E"===t){for(e+=this.expr.charAt(this.index++),("+"===(t=this.char)||"-"===t)&&(e+=this.expr.charAt(this.index++));wO.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);wO.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+e+this.char+")")}return i=this.code,wO.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+e+this.char+")"):(i===wO.PERIOD_CODE||1===e.length&&e.charCodeAt(0)===wO.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:wO.LITERAL,value:parseFloat(e),raw:e}}gobbleStringLiteral(){let e="",t=this.index,i=this.expr.charAt(this.index++),r=!1;for(;this.index<this.expr.length;){let t=this.expr.charAt(this.index++);if(t===i){r=!0;break}if("\\"===t)switch(t=this.expr.charAt(this.index++)){case"n":e+=` 3140`;break;case"r":e+="\r";break;case"t":e+=" ";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||this.throwError('Unclosed quote after "'+e+'"'),{type:wO.LITERAL,value:e,raw:this.expr.substring(t,this.index)}}gobbleIdentifier(){let e=this.code,t=this.index;for(wO.isIdentifierStart(e)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(e=this.code,wO.isIdentifierPart(e));)this.index++;return{type:wO.IDENTIFIER,name:this.expr.slice(t,this.index)}}gobbleArguments(e){let t=[],i=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let s=this.code;if(s===e){i=!0,this.index++,e===wO.CPAREN_CODE&&r&&r>=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(s===wO.COMMA_CODE){if(this.index++,++r!==t.length){if(e===wO.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===wO.CBRACK_CODE)for(let e=t.length;e<r;e++)t.push(null)}}else if(t.length!==r&&0!==r)this.throwError("Expected comma");else{let e=this.gobbleExpression();e&&e.type!==wO.COMPOUND||this.throwError("Expected comma"),t.push(e)}}return i||this.throwError("Expected "+String.fromCharCode(e)),t}gobbleGroup(){this.index++;let e=this.gobbleExpressions(wO.CPAREN_CODE);if(this.code===wO.CPAREN_CODE)return this.index++,1===e.length?e[0]:!!e.length&&{type:wO.SEQUENCE_EXP,expressions:e};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:wO.ARRAY_EXP,elements:this.gobbleArguments(wO.CBRACK_CODE)}}};Object.assign(wO,{hooks:new wD,plugins:new wI(wO),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),wO.max_unop_len=wO.getMaxKeyLen(wO.unary_ops),wO.max_binop_len=wO.getMaxKeyLen(wO.binary_ops);var wR=e=>
3140new wO(e).parse();function wL(e){return{all:e=e||new Map,on:function(t,i){var r=e.get(t);r?r.push(i):e.set(t,[i])},off:function(t,i){var r=e.get(t);r&&(i?r.splice(r.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var r=e.get(t);r&&r.slice().map(function(e){e(i)}),(r=e.get("*"))&&r.slice().map(function(e){e(t,i)})}}}Object.getOwnPropertyNames(wO).forEach(e=>{void 0===wR[e]&&"prototype"!==e&&(wR[e]=wO[e])}),wR.Jsep=wO,wR.plugins.register({name:"ternary",init(e){e.hooks.add("after-expression",function(t){if(t.node&&this.code===e.QUMARK_CODE){this.index++;let i=t.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let s=this.gobbleExpression();if(s||this.throwError("Expected expression"),t.node={type:"ConditionalExpression",test:i,consequent:r,alternate:s},i.operator&&e.binary_ops[i.operator]<=.9){let r=i;for(;r.right.operator&&e.binary_ops[r.right.operator]<=.9;)r=r.right;t.node.test=r.right,r.right=t.node,t.node=i}}else this.throwError("Expected :")}})}});var wB=class{constructor(e,t,i){this.id=e,this.userAPI=t,this.result=void 0,this.error="null",this.isPrefetched=!1,this.isLoading=!1,this.isLoaded=!1,this.prefetchPromise=new Promise(e=>e()),this.emitter=wL(),this._innerCallUserAPI=async e=>{this.emitter.emit("start",{userAPIId:this.id}),this.isLoading=!0,this.isLoading=!1;try{this.result=await wz(this.userAPI,e),this.error="null",this.emitter.emit("success",{userAPIId:this.id})}catch(t){let e=t.message?.split("_:_")?.[0]?.replace("status:","")??"null";this.error=e,this.result=null,this.emitter.emit("error",{userAPIId:this.id})}this.isLoading=!1,this.isPrefetched=!0,this.isLoaded=!0},t?.integration?.type==="OpenAI"?this.result={content:""}:"GET"===t.method&&""!==t.url&&(this.prefetchPromise=this.prefetch(i)),this._debouncedCallUserAPI=this._innerCallUserAPI,this._updateDebouncedCallUserAPI(),this._debouncedPrefetch=uO(this.prefetch,1e3,{trailing:!0})}_updateDebouncedCallUserAPI(){this._debouncedCallUserAPI=void 0!==this.userAPI.debounce&&this.userAPI.debounce>0?uO(this._innerCallUserAPI,this.userAPI.debounce,{leading:!0,trailing:!0}):this._innerCallUserAPI}async prefetch(e){await this.callUserAPI(e)}async callUserAPI(e){await this._debouncedCallUserAPI(e)}update(e,t,i=!0){this.userAPI=e,this._updateDebouncedCallUserAPI(),""!==this.userAPI.url&&"GET"===this.userAPI.method&&i&&this._debouncedPrefetch(t)}retrieveValue(e){if(this.result)try{return p2.zoom(this.result,e)}catch(e){console.error(e)}}retrieveZoomedKeyValues(e){if(this.result){let t=e&&e.length?p2.zoom(this.result,e):this.result;if("object"==typeof t&&null!==t)return Object.entries(t);if(Array.isArray(t))return t.map((e,t)=>[t.toString(),e]);throw"string"==typeof t||"number"==typeof t||"boolean"==typeof t||null===t?Error("This path points to a value, use retrieveValue() instead. "+e?.join(".")):Error("Path error"+e?.join("."))}}dispose(){}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}get autostart(){return this.userAPI.autoStart}};async function wz(e,t,i=new AbortController){let r,s,a=e.url,o=e.proxy?.enabled??!1;if(o)a=`https://apis.spline.design/file/${e.proxy.fileId}/external-api/request?uuidexternalapi=${e.proxy.proxyId}`;else if(e.integration?.type==="OpenAI"){let i=wN(""===e.integration.prompt?[]:JSON.parse(e.integration.prompt),t),r=""===e.integration.behavior?[]:wN(JSON.parse(e.integration.behavior),t);s=`{ 3141 "model": "${e.integration.model}", 3142 "messages": [${e.integration.useBehavior?` 3143 { 3144 "role": "system", 3145 "content": "${r}" 3146 },`:""} 3147 { 3148 "role": "user", 3149 "content": "${i}" 3150 } 3151 ] 3152 }`}else"POST"===e.method&&e.body&&(s=wN(JSON.parse(e.body),t));let l=await fetch(a,{method:o?"GET":e.method,headers:o?void 0:(r=new Headers,e.headers.forEach(e=>{""!==e.data.key&&r.append(e.data.key,e.data.value)}),r),signal:i.signal,body:s});if(!l.ok)throw Error("status:"+l.status+"_:_"+l.statusText);if(e.integration?.type==="OpenAI"){let e=await l.json();return o&&(e=e.response),{content:e.choices[0].message.content}}{let e=await l.json();return o&&(e=e.response),e}}var wF=(e,t)=>{if("string"==typeof e){let i=t.getVariable(e);if(i)return wF(i,t)}return yv.isBoolean(e)?yv.getDisplayedValue(e).toLowerCase():yv.getDisplayedValue(e)},wN=(e,t)=>e.map((e,i)=>{if("text"in e)return e.text;if("type"in e){if("paragraph"===e.type)return(i>0?` 3153`:"")+wN(e.children,t);
3153if("variable"===e.type){let i=t.getVariable(e.variableId);if(void 0!==i)return wF(i,t)}}return""}).join(""),wU=["+","-","*","/","(",")","==","!=",">","<",">=","<=","and","or","!","%","^",","],wk=["0","1","2","3","4","5","6","7","8","9","."],wV=["sin","cos","tan","asin","acos","atan","atan2","sqrt","abs","log","exp","floor","ceil","round","min","max","random"];function wj(e,t,i="number"){let r,s,a="";for(let r=0;r<e.length;r++){var o;let s=e[r];if("objType"in s&&"api"===s.objType){let e=JSON.parse(s.id),i=e[0],r=t.getUserAPI(i);if(void 0!==r&&r instanceof wB){let t=r.retrieveValue(e.slice(1));void 0!==t&&(a+=t)}continue}if("objType"in s&&"webhook"===s.objType){let[e,i]=JSON.parse(s.id),r=t.getUserWebhook(e);if(void 0!==r){let e=r.getParameterValue(i);void 0!==e&&(a+=e)}continue}if("objType"in s&&"aiAssistant"===s.objType){let e=t.openAIRealtime;if("objId"in s&&void 0!==s.objId){let i;if(t.scene.data.objects.traverse((e,t)=>{let r=t.events?.find(e=>e.id===s.objId);r&&(i=r)}),void 0!==i&&"AIAssistantListener"===i.data.type){let t=e?.computeAnalysisForListenerEvent(i.data);if(void 0!==t){a+=t;continue}}}a+=e?.voice??0;continue}if("id"in s){let o=e[r-1];if(r>0&&"id"in o){console.error("Two variables in a row",e);return}let l=t.getVariable(s.id),h=yv.getDisplayedValue(l);"number"===i&&yv.isTextValue(l)&&Array.isArray(l.textValue)&&1===l.textValue.length?h=parseFloat(h).toString():"boolean"===i&&yv.isBoolean(l)?h=l?"true":"false":"boolean"===i&&yv.isTextValue(l)&&!Array.isArray(l.textValue)&&(h='"'+h+'"'),a+=h;continue}if("string"===i){'"'!==s.name&&("+"!==s.name||s.escaped)&&(a+=s.name),"+"!==s.name||s.escaped||"\\"!==a[a.length-1]||(a=a.slice(0,-1)+s.name);continue}if("and"===s.name){a+="&&";continue}if("or"===s.name){a+="||";continue}if("True"===s.name){a+="true";continue}if("False"===s.name){a+="false";continue}if("boolean"===i&&!("string"==typeof(o=s.name)&&!isNaN(o)&&!isNaN(parseFloat(o)))&&!wk.includes(s.name)&&!wU.includes(s.name)&&!wV.includes(s.name.replace(/\($/g,""))){a+='"'+s.name+'"';continue}a+=s.name}if("string"===i)return a;if(0===e.length){if("number"===i)return 0;if("boolean"===i)return!1}try{r=wR(a)}catch(e){console.error(a,e);return}try{s=function e(t){switch(t.type){case"BinaryExpression":switch(t.operator){case"==":return Number(e(t.left)===e(t.right));case"!=":return Number(e(t.left)!==e(t.right));case">":return Number(e(t.left)>e(t.right));case">=":return Number(e(t.left)>=e(t.right));case"<":return Number(e(t.left)<e(t.right));case"<=":return Number(e(t.left)<=e(t.right));case"+":return e(t.left)+e(t.right);case"-":return e(t.left)-e(t.right);case"*":return e(t.left)*e(t.right);case"/":return e(t.left)/e(t.right);case"%":return e(t.left)%e(t.right);case"&&":return e(t.left)&&e(t.right);case"||":return e(t.left)||e(t.right);case"^":return Math.pow(e(t.left),e(t.right));default:throw Error("Unknown operator: "+t.operator)}case"UnaryExpression":switch(t.operator){case"-":return-e(t.argument);case"!":return Number(!e(t.argument));default:throw Error("Unknown operator: "+t.operator)}case"Identifier":throw Error("Unknown identifier: "+t.name);case"Literal":return t.value;case"CallExpression":if("Identifier"===t.callee.type){if("random"===t.callee.name){let i=0,r=1;if(t.arguments.length>=1)try{i=e(t.arguments[0])}catch(e){console.warn(e)}if(t.arguments.length>=2)try{r=e(t.arguments[1])}catch(e){console.warn(e)}return i=Math.min(r,i),r=Math.max(r,i),i+Math.random()*(r-i)}return Math[t.callee.name].apply(null,t.arguments.map(e))}throw Error("Unknown node");default:throw Error("Unknown node type: "+t.type)}}(r)}catch(e){console.error(a,r,e)}return s}wR.addBinaryOp("^",11,!0);var wG=new iQ,wH=new iQ,wW=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=t?.shapeData??bW.create({parameters:gP}).userData.shape;return{path:e.path??vj.defaultData(),parameters:Object.assign(i,{width:r,height:s,depth:a,extrusion:{...gD,...i.extrusion}}),shapeData:o}}static build(e){return e.path.points.length>=2?Object.assign(new wq(e),{userData:{...e,type:"PathGeometry"}}):Object.assign(new rN,{userData:{...e,type:"PathGeometry"}})}},wq=class extends rN{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e,t=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===t.depth)||(t.twist%(e=2*Math.PI)+e)%e!=(0%e+e)%e||t.startScale!==t.endScale}build(){let e=this._extractPathPoints();if(e.length<2)return;let t=this._computeBasisMatrices(e),{depth:i,offset:r}=this.inputs.parameters.extrusion;i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let s=this.inputs.path.isClosed?e.length:e.length-1,a=Math.floor(r*s),o=Math.min(Math.max(2,(this.inputs.path.isClosed?Math.ceil((i+r)*s):Math.ceil(Math.min(1,i+r)*s))-a+1),s+2),l=[],h=[];for(let i=0;i<o;i++){let r=this.inputs.path.isClosed?(i+a)%e.length:Math.min(i+a,e.length-1);l.push(e[r].clone()),h.push(t[r].clone())}let c=(e,t,i)=>{var r,s;let a,o;l[e]=l[e].clone().lerp(l[t],i),h[e]=(r=h[e],s=h[t],a=[new ix,new ix,new ix],o=[new ix,new ix,new ix],r.extractBasis(a[0],a[1],a[2]),s.extractBasis(o[0],o[1],o[2]),a.forEach((e,t)=>{let r=o[t],s=tZ.lerp(e.length(),r.length(),i);e.lerp(r,i).setLength(s)}),new iQ().makeBasis(a[0],a[1],a[2]))},d=0,u=r*s%1;(!this.inputs.path.isClosed||i<=1)&&(u||0===r)&&c(0,1,d=u);let p=0,f=(r+i)*s%1;if((this.inputs.path.isClosed&&i<=1||!this.inputs.path.isClosed&&r+i<1)&&f&&(p=f,c(l.length-1,l.length-2,1-p)),0===i){let e=l.length-1;
3153l[e].copy(l[0]),h[e].copy(h[0])}this._applyPathModifiers(h,d,p);let{bevel:m,bevelSides:g}=this.inputs.parameters.extrusion,v=m>0?this.inputs.parameters.extrusion.capType:"flat",y=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(y="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:x,infos:b,vertices:w}=this._computeShapePoints(y),S=0,_;"round"===v&&(S=(_=new bk(this.inputs.shapeData,2*m,m,y,g,void 0,!0)).getAttribute("position").count);let A=0,M=0;b.sort((e,t)=>e.start-t.start),b.forEach(e=>{e.verticesStart=A,e.verticesCount=e.continuous.reduce((e,t,i)=>e+(0!==i&&t?1:2),0),M+=e.verticesCount,A=M});let E=M*o,C,T=0;if(this._isOpenEnded()&&"flat"===v){try{C=bR({windingRule:wK.ODD,elementType:wJ.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:x})}catch{C=bN}T=C.vertexCount}let P=E+2*T+2*S,D=E+2*T,I={positions:new Float32Array(3*P),normals:new Float32Array(3*P),uvs:new Float32Array(2*P)},O=[];if(b.forEach(e=>{this._extrudeRegion(e,w,h,l,I,O,this._isGeometryClosed()&&!this._isOpenEnded())}),C&&(this._closeEnd(C,E,O,I,h[0],l[0],!1),this._closeEnd(C,E+T,O,I,h[h.length-1],l[l.length-1],!0)),_){I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);for(let e=D;e<D+S;e++)I.uvs[2*e+1]=1e-4;let e=O.length;O.push(..._.getIndex().array.map(e=>e+D)),D+=S,I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);let t=O.length;O.push(..._.getIndex().array.map(e=>e+D)),this.setAttribute("position",new rC(I.positions,3)),this.setAttribute("normal",new rC(I.normals,3)),this.setAttribute("uv",new rC(I.uvs,2)),this.setIndex(O),wG.copy(h[h.length-1]).setPosition(l[l.length-1]),this.applyMatrix4OnRange(wG,D,P),wG.copy(h[0]).setPosition(l[0]).multiply(wH.makeScale(1,1,-1)),this.applyMatrix4OnRange(wG,D-S,D),this.reverseIndicesOnRange(e,t)}else this.setAttribute("position",new rC(I.positions,3)),this.setAttribute("normal",new rC(I.normals,3)),this.setAttribute("uv",new rC(I.uvs,2)),this.setIndex(O)}_extractPathPoints(){let e=xB(this.inputs.path).getPoints(this.inputs.path.subdivisions);if(e.length<2)return[];let t=[e[0]];return e.forEach(e=>{t[t.length-1].distanceToSquared(e)>.001&&t.push(e)}),this.inputs.path.isClosed&&.001>t[t.length-1].distanceTo(t[0])&&t.pop(),t}_computeBasisMatrices(e){let t=[],i=e.length,r=this.inputs.path.isClosed,s=new ix,a=new ix,o=new ix,l=new ix,h=new ix(0,1,0);for(let c=0;c<i;c++){let d,u=e[c],p;p=0===c?r?e[e.length-2]:u.clone().multiplyScalar(2).sub(e[1]):e[c-1],d=c===i-1?r?e[1]:u.clone().multiplyScalar(2).sub(e[c-1]):e[c+1];let f=u.clone().sub(p).normalize(),m=d.clone().sub(u).normalize(),g=f.clone().add(m).normalize();o.copy(g),0===c&&(g.equals(h)||g.clone().negate().equals(h))&&h.set(0,0,1);let v=h.clone().cross(g).normalize(),y=g.clone().cross(v).normalize();h.copy(y),l.copy(v),0===c&&(s.copy(y),a.copy(g));let x=new iQ().makeBasis(v,y,g);t.push(x)}let c=r?a:o,d=r?s:new ix(0,1,0),u=c.clone().cross(l).normalize(),p=Math.acos(d.dot(u));if(isNaN(p))return t;let f=d.clone().cross(u);c.dot(f)>0&&(p*=-1);for(let e=1;e<t.length;e++){let i=new iQ().makeRotationZ(p*e/t.length);t[e].multiply(i)}return t}_applyPathModifiers(e,t,i){let r=e.length,{angle:s,twist:a,startScale:o,endScale:l}=this.inputs.parameters.extrusion,h=new iQ,c=new iQ;return e.forEach((e,d)=>{let u=0===d?0:d===r-1?1:(d-t)/(r-(0===i?0:1)-(t+(1-i)));h.makeRotationZ(tZ.lerp(s,s+a,u)*tZ.DEG2RAD);let p=tZ.lerp(o,l,u);c.makeScale(p,p,p),e.multiply(h).multiply(c)}),e}_computeShapePoints(e=12,t=wK.ODD){let i,r=this.inputs.shapeData,s=r.extractShapePointsToFlatArray([],e),a=r.shapeHoles.map(t=>{let i=t.extractShapePointsToFlatArray([],e),r=[];for(let e=i.length-1;e>=1;e-=2){let t=i[e-1],s=i[e-0];r.push(t,s)}return r}),o;try{o=bR({windingRule:t,elementType:wJ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[s]})}catch{o=bz}try{i=bR({windingRule:wK.ODD,elementType:wJ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...a]})}catch{i=bF}if(!o)throw Error("error generating geometry");let l=o.elementCount;if(i){o.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],r=e%2==0?o.vertexCount:0;o.elements.push(t+r)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],r=o.vertexCount;o.vertexIndices.push(t+r)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];o.vertices.push(t)}}let h=1/0,c=-1/0,d=1/0,u=-1/0;for(let e=0,t=o.vertexCount;e<t;e++){let t=2*e,i=o.vertices[t+0],r=o.vertices[t+1];
3153i<h&&(h=i),i>c&&(c=i),r<d&&(d=r),r>u&&(u=r)}let p=[];for(let e=o.elementCount-1;e>=0;e--){let t=e>=l,i=2*e,s=o.elements[i+0],a=o.elements[i+1],h=s+a,c={start:s,count:a,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};p.push(c);let d=s,u=h-1,f=s+1,m=r.roundedCurves.length;do{let e=d-s,i=o.vertices[2*u+0],l=o.vertices[2*u+1],p=o.vertices[2*d+0],g=o.vertices[2*d+1],v=o.vertices[2*f+0],y=o.vertices[2*f+1],x=p-i,b=g-l,w=Math.sqrt(x*x+b*b);x/=w,b/=w;let S=p-v,_=g-y,A=Math.sqrt(S*S+_*_);S/=A,_/=A,c.normals[2*e+0]=-_,c.normals[2*e+1]=S;let M=o.vertexIndices[d];if(Array.isArray(M))c.continuous[e]=!1;else{let[t,i]=r.getCurveIndexFromVertexId(M-1,!0);if(i>0&&i<1)c.continuous[e]=!0;else{let s=1===i?t+1:t-1;s=(s+m)%m;let a=1===i?0:1,o=r.roundedCurves[t].getTangent(i),l=r.roundedCurves[s].getTangent(a);c.continuous[e]=o.dot(l)>.95}}t&&(c.normals[2*e+0]*=-1,c.normals[2*e+1]*=-1),[u,d,f]=[d,f,f+1],f>=h&&(f-=a)}while(f!==s+1)}return{regions:[s,...a],infos:p,vertices:o.vertices}}_insertVertex(e,t,i,r,s){let a=2*t,o=3*t;e.positions[o+0]=i.x,e.positions[o+1]=i.y,e.positions[o+2]=i.z,e.normals[o+0]=r.x,e.normals[o+1]=r.y,e.normals[o+2]=r.z,e.uvs[a+0]=s.x,e.uvs[a+1]=s.y}_extrudeRegion(e,t,i,r,s,a,o){let l=new ix,h=new ix,c=new ix,d=new ix,u=new tK;i.forEach((a,o)=>{let p=r[o],f=e.verticesStart*i.length+e.verticesCount*o;for(let r=0;r<e.count;r++){let m=(e.start+r)*2;if(l.set(t[m+0],t[m+1],0),c.copy(l).applyMatrix4(a).add(p),e.continuous[r])d.set(e.normals[2*r+0],e.normals[2*r+1],0);else{let i=0===r?(e.start+e.count-1)*2:m-2;h.set(t[i+0],t[i+1],0),d.copy(l).sub(h),d.set(-d.y,d.x,0),e.isHole||d.negate()}if(d.applyMatrix4(a).normalize(),u.set(0===r?1:r/e.count,o/(i.length-1)),this._insertVertex(s,f,c,d,u),f++,!e.continuous[r]||0===r){if(0===r)d.set(e.normals[2*r+0],e.normals[2*r+1],0),u.set(0,o/(i.length-1));else{let i=r===e.count-1?2*e.start:m+2;h.set(t[i+0],t[i+1],0),d.copy(h).sub(l),d.set(-d.y,d.x,0),e.isHole||d.negate()}d.applyMatrix4(a).normalize(),this._insertVertex(s,f,c,d,u),f++}}});let p=i.length-1;for(let t=0;t<p;t++){let r=e.verticesStart*i.length+e.verticesCount*t,s=e.verticesStart*i.length+e.verticesCount*(t+1),o=0;for(let t=0;t<e.count;t++){(!e.continuous[t]||0===t)&&o++;let i=t===e.count-1?0:o+1,l=r+o,h=r+i,c=s+i,d=s+o;e.isHole?a.push(l,c,h,l,d,c):a.push(l,h,c,l,c,d),o++}}}_closeEnd(e,t,i,r,s,a,o){let l=e.vertexCount,h=new ix(0,0,o?-1:1).applyMatrix4(s),c=new ix,d=new tK;for(let i=0;i<l;i++){let o=2*i;c.set(e.vertices[o+0],e.vertices[o+1],0).applyMatrix4(s).add(a),this._insertVertex(r,t+i,c,h,d)}let u=e.elements;for(let r=0;r<e.elementCount;r++){let e=3*r,s=u[e+0]+t,a=u[e+(o?1:2)]+t,l=u[e+(o?2:1)]+t;i.push(s,a,l)}}applyMatrix4OnRange(e,t,i){let r=e.elements,s=new tJ().getNormalMatrix(e).elements,a,o,l,h,c=this.attributes.position,d=this.attributes.normal;if(!c||!d)return;let u=c.array,p=d.array,f=c.itemSize;for(let e=t*f,c=i*f;e<c;e+=f)a=u[e+0],o=u[e+1],l=u[e+2],h=1/(r[3]*a+r[7]*o+r[11]*l+r[15]),u[e+0]=(r[0]*a+r[4]*o+r[8]*l+r[12])*h,u[e+1]=(r[1]*a+r[5]*o+r[9]*l+r[13])*h,u[e+2]=(r[2]*a+r[6]*o+r[10]*l+r[14])*h,a=p[e+0],o=p[e+1],l=p[e+2],p[e+0]=s[0]*a+s[3]*o+s[6]*l,p[e+1]=s[1]*a+s[4]*o+s[7]*l,p[e+2]=s[2]*a+s[5]*o+s[8]*l;c.needsUpdate=!0,d.needsUpdate=!0}reverseIndicesOnRange(e,t){let i=this.index;if(i){for(let r=e;r<t;r+=3){let e=i.getX(r),t=i.getX(r+1),s=i.getX(r+2);i.setXYZ(r,s,t,e)}i.needsUpdate=!0}}};function wX(){let e=new rN;return e.setAttribute("position",new rC(new Float32Array([]),3)),e.setIndex(new rC(new Uint16Array([]),1)),e}var wY,wQ,wZ,wK,wJ,w$,w0=wX().attributes,w1=class extends rN{constructor(e,t){super(),this.charWidths=[],this.charCoords=[],this.wrappedText=[],this.isLowResolution=!1,this.vectorShapes=[],Object.assign(this.attributes,w0),this.userData={parameters:e,type:"TextGeometry"};let i=t.getFont(e.font);i?.isLoaded?(this.font=i,this.update(e)):this.updateFont(e.font,t).then(()=>{this.update(e),t?.requestRender()})}async updateFont(e,t){let i=t.getFont(e);i&&(this.font=i,await i.loadingPromise)}update(e){let t=this.font;if(this.userData={parameters:e,type:"TextGeometry"},!t?.isLoaded){console.warn("Cannot update text because its font is not loaded");return}let{width:i,height:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,text:l,textTransform:h}=e,c=yv.getDisplayedValue(l),d=function(e,t,i){let r=[""],s="";for(let a of i)s+=a," "===a||a===` 3154`?(r[r.length-1]+=s,s="",a===` 3155`&&r.push("")):t.getTextWidth(r[r.length-1]+s,e)>e.width&&(r[r.length-1].length&&r.push(""),t.getTextWidth(r[r.length-1]+s,e)>e.width&&(1===s.length?(r[r.length-1]+=s,s=""):(r[r.length-1]+=s.slice(0,-1),s=s[s.length-1],r.push(""))));return r[r.length-1]+=s,r}(e,t,2===h?c.toUpperCase():3===h?c.toLowerCase():c),{shapes:u,charWidths:p,charCoords:f}=t.generateShapes(d,e),m=u.map(e=>new bm().fromShape(e,!0));this.vectorShapes=m;let g=m.map(e=>bG.create({shape:e,parameters:{depth:s,extrudeBevelSegments:o,extrudeBevelSize:a,windingRule:s<=0?wK.NONZERO:wK.ODD,subdivisions:this.isLowResolution&&s>0?1:12}})),v=g.length?gZ(g):wX();v.translate(-(("number"==typeof i?i:1)*.5),("number"==typeof r?r:1)*.5,0),this.dispose(),this.wrappedText=d,this.charCoords=f,this.charWidths=p,this.deleteAttribute("extrudeNormal"),Object.entries(v.attributes).forEac
3155h(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(v.index),this.computeBoundingSphere()}clone(){let e=uW(new rN,w1.prototype);return e.copy(this),console.log("CloneGeometry",this,e),e}copy(e){return Object.entries(e.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(e.index),this.userData={parameters:{...e.userData.parameters},type:"TextGeometry"},this}async setText(e){this.font&&await this.font.loadingPromise,await this.update({...this.userData.parameters,text:{textValue:e}})}get text(){return this.userData.parameters.text??""}},w2=new Promise(e=>{w$=e}),w3=!1,w4=["font"];function w5(e,t,i,r){let s,a,o,l;for(let i of("PathGeometry"===e.type?(a=JSON.parse(JSON.stringify(e)),o=[[],["extrusion"]]):(a={...e},o=[[]]),o)){let e=a;for(let t of i)e=e[t];for(s in e){let a=e[s];mu(a)&&!w4.includes(s)&&(e[s]=t.getVariable(a,[r.uuid,"geometry",...i,s]),mu(e[s])&&(e[s]=1))}}let h={parameters:a,type:a.type};if("PathGeometry"===a.type)h.path=a.path;else if("VectorGeometry"===a.type){let e=bm.createFromState(a.shape,a.width,a.height);h.shape=e}else if("NonParametricGeometry"===a.type){if(a.data.groups&&a.data.groups?.forEach(e=>e.materialIndex=Math.max(e.materialIndex??0,0)),h.geometry=new lg().parse(a),0===h.geometry.groups.length){let e=h.geometry;e.addGroup(0,Math.max(e.getIndex()?.count??0,e.getAttribute("position").count),0)}}else if("SubdivGeometry"===a.type){let t=new Sa(a,i);return t.data=e,t}else{if("TextGeometry"===a.type||"InputGeometry"===a.type)return new w1(a,t);if("UIGeometry"===a.type)return wx.create({parameters:{width:a.width,height:a.height,cornerRadius:a.cornerRadius,cornerType:a.cornerType}})}try{l=S_(h)}catch(e){console.error(e)}if(!l){let e=bm.createFromState(vV.defaultData(),100,100);h.shape=e,l=S_(h)}return l}var w6=new iQ;function w8(e,t,i,r){let s=e.position.array,a=e.normal.array,o=w6.makeScale(t,i,r).invert().elements,l,h,c;for(var d=0,u=s.length;d<u;d+=3)s[d]*=t,s[d+1]*=i,s[d+2]*=r,l=a[d],h=a[d+1],c=a[d+2],a[d]=o[0]*l+o[4]*h+o[8]*c,a[d+1]=o[1]*l+o[5]*h+o[9]*c,a[d+2]=o[2]*l+o[6]*h+o[10]*c;e.position.needsUpdate=!0,e.normal.needsUpdate=!0}var w9,w7,Se=new iS,St=new ix;w2.then(e=>{w7=e});var Si=new Float32Array([10,10,0,-10,10,0,-10,-10,0,10,-10,0]),Sr=new Uint32Array([0,1,2,3]),Ss=new Uint8Array([4]),Sa=class extends rN{constructor(e,t){super(),this.data=e,this.flatShading=t,this.subdivPointer=0,this.rebuild(),this.freeSubdivPointer()}mutateDirectlyScaleBaked(e,t){this.freeSubdivPointer();let i=this.data.scaleBaked,r=gt.div(t,i);this.subdividedGeometry&&w8(this.subdividedGeometry.attributes,...r),this.originalGeometry&&w8(this.originalGeometry.attributes,...r),this.data=e;let s=this.userData.parameters;this.userData.parameters={width:s.width*r[0],height:s.height*r[1],depth:s.depth*r[2]},this.originalGeometry.boundingSphere.center.multiply(St.fromArray(r));let a=St.set(s.width,s.height,s.depth).length();this.originalGeometry.boundingSphere.radius=a/2}ensureSubdivPointer(){return 0===this.subdivPointer&&this.rebuild(),this.subdivPointer}rebuild(){let e,t,i;try{({originalGeometry:e,subdividedGeometry:t,subdivPointer:i}=Sa.build(this.data,void 0,!this.flatShading,void 0))}catch{e=new r0(100,100,100),i=0}this.subdivPointer=i,this.originalGeometry=e,this.subdividedGeometry=t??void 0,Object.assign(this,this.subdividedGeometry??this.originalGeometry),this.calcBoundingBox()}freeSubdivPointer(){this.subdivPointer&&(Sa.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0)}dispose(){super.dispose(),this.freeSubdivPointer()}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new ik,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;Se.setFromBufferAttribute(t),Se.getCenter(i),e.boundingSphere.radius=i.distanceTo(Se.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),Se.getSize(St);let r={width:St.x,height:St.y,depth:St.z};return this.userData.parameters=r,r}static build(e,t,i,r){let s,a,o,l=e?.phongAngle??35;!1===i&&(l=-1),t&&(w7.free_bvh(t),w7.free_subdivision_surface(t));try{s=Sa.allocate(e,r)}catch(t){console.error(t,e),s=Sa.allocate({positionWASM:Si,indexWASM:Sr,verticesPerFaceWASM:Ss},r)}if(w7.set_destination_refinement_level(s,0),a=Sa.buildLevel(s,!0,l),e.subdivisions>0)try{w7.set_destination_refinement_level(s,e.subdivisions),o=Sa.buildLevel(s,!1,l)}catch{try{w7.set_destination_refinement_level(s,e.subdivisions-1),o=Sa.buildLevel(s,!1,l)}catch{o=null}}else o=null;return{subdivPointer:s,originalGeometry:a,subdividedGeometry:o}}static primitiveToQuads(e,t,i){let r,s,a,o,l;e.widthSegments>16&&(e.widthSegments=16),e.heightSegments>16&&(e.heightSegments=16),e.depthSegments>16&&(e.depthSegments=16),e.radialSegments>16&&(e.radialSegments=16),"DodecahedronGeometry"===e.type&&(e.detail=0);let h=void 0!==e.shape||void 0!==e.path?t.geometry:w5(e,i,!1),c;if(c="TorusGeometry"===e.type&&e.arc===2*Math.PI?h.getClosedTorusIndicesForBooleanOrSubdiv():h.getIndex(),{positions:r,triIndices:o}=So(h.getAttribute("position"),c),"CylinderGeometry"===e.type&&0===e.cornerRadius&&0===e.hollow&&!1===e.openEnded){let t=e.radialSegments*e.heightSegments*6,i=t
3155+3*e.radialSegments;l=[t,i]}return{indices:s,verticesPerFace:a}=Su(r,o,h,l),{positions:r,indices:s,verticesPerFace:a}}static allocate(e,t){let i,r,s,a,o=[],l=[];e.positionWASM&&e.positionWASM.length>0?(r=e.positionWASM,s=e.indexWASM,a=e.verticesPerFaceWASM):(r=Si,s=Sr,a=Ss);let h=r.length,c=s.length,d=a.length,u=r.length+o.length+l.length,p=s.length+a.length,f=u*Float32Array.BYTES_PER_ELEMENT+p*Uint32Array.BYTES_PER_ELEMENT,m=u*Float32Array.BYTES_PER_ELEMENT,g=(Uint32Array.BYTES_PER_ELEMENT,w7._malloc(f)),v=new Float32Array(w7.HEAPF32.buffer,g,u),y=new Uint32Array(w7.HEAPU32.buffer,g+m,p);v.set(r,0),v.set(o,r.length),v.set(l,r.length+o.length),y.set(s,0),y.set(a,s.length),e?.scaleBaked?.some(e=>1!==e)&&(i=new iQ().makeScale(...e.scaleBaked)),t&&(i?i.premultiply(t):i=t);let x=i?w7.alloc_subdivision_surface2(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d,i.elements):w7.alloc_subdivision_surface(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d);return w7._free(g),x}static buildLevel(e,t,i,r,s){let a=s?w7.get_mesh_data2(e,t?w7.Level.CONTROL:w7.Level.REFINED,i,s.elements):w7.get_mesh_data(e,t?w7.Level.CONTROL:w7.Level.REFINED,i),o=w7.HEAPU32.subarray(a>>2,(a>>2)+8),l=o.subarray(4,8),h=0,c=w7.HEAPU32[o[h]>>2],d=w7.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=w7.HEAPU32[o[h]>>2],p=w7.HEAPF32.subarray(u>>2,(u>>2)+l[h]);h++;let f=w7.HEAPU32[o[h]>>2],m=w7.HEAPU32.subarray(f>>2,(f>>2)+l[h]);h++;let g=w7.HEAPU32[o[h]>>2],v=w7.HEAPU32.subarray(g>>2,(g>>2)+l[h]);if(h++,void 0===r){let e=new rN;if(e.setIndex(new rP(v,1)),e.setAttribute("position",new rD(d,3)),e.setAttribute("normal",new rD(p,3)),t){e.setAttribute("faceMap",new rP(m,1));let t=new Float32Array(p.length/3*4).fill(0);e.setAttribute("color",new rC(t,4))}return w7.free_mesh_data(a),e.userData.type="SubdivGeometry",e}r.getAttribute("position").copyArray(d),r.getAttribute("normal").copyArray(p),r.attributes.position.needsUpdate=!0,r.attributes.normal.needsUpdate=!0,w7.free_mesh_data(a)}static freeSubdivPointer(e){w7.free_bvh(e),w7.free_subdivision_surface(e)}static buildControlCageWireframe(e,t,i){let r=w7.get_wireframe_data_for_base_level(e),s=w7.HEAPU32.subarray(r>>2,(r>>2)+4),a=s.subarray(2,4),o=0,l=w7.HEAPU32[s[o]>>2],h=w7.HEAPF32.subarray(l>>2,(l>>2)+a[o]);o++;let c=w7.HEAPU32[s[o]>>2],d=w7.HEAPU32.subarray(c>>2,(c>>2)+a[o]);if(void 0===t){let e=new rN;e.setAttribute("position",new rD(h,3));let t=new Float32Array(h.length);for(let e=0,r=h.length;e<r;)t[e++]=i.r,t[e++]=i.g,t[e++]=i.b;return e.setAttribute("color",new rC(t,3)),e.setIndex(new rP(d,1)),w7.free_wireframe_data_for_base_level(r),e}t.getAttribute("position").copyArray(h),t.attributes.position.needsUpdate=!0,w7.free_wireframe_data_for_base_level(r)}static updateCollabMesh(e,t,i){let r=0===t;r||w7.set_destination_refinement_level(e,t);let s=i?w7.get_topological_data2(e,r?w7.Level.CONTROL:w7.Level.REFINED,i.elements):w7.get_topological_data(e,r?w7.Level.CONTROL:w7.Level.REFINED),a=w7.HEAPU32.subarray(s>>2,(s>>2)+6),o=a.subarray(3,6),l=0,h=w7.HEAPU32[a[l]>>2],c=new Float32Array(w7.HEAPF32.subarray(h>>2,(h>>2)+o[l]));l++;let d=w7.HEAPU32[a[l]>>2],u=new Uint32Array(w7.HEAPU32.subarray(d>>2,(d>>2)+o[l]));l++;let p=w7.HEAPU32[a[l]>>2],f=new Uint8Array(w7.HEAPU32.subarray(p>>2,(p>>2)+o[l]));return w7.free_topological_data(s),{positions:c,indices:u,verticesPerFace:f}}},Sn=["getX","getY","getZ"];function So(e,t){let i={},r=t?t.count:e.count,s=0,a=[],o=[];for(let l=0;l<r;l++){let r=t?t.getX(l):l,h="";for(let t=0;t<3;t++)h+=`${~~(1e4*e[Sn[t]](r))},`;if(h in i)a.push(i[h]);else{for(let t=0;t<3;t++)o.push(e[Sn[t]](r));i[h]=s,a.push(s),s++}}let l=[];for(let e=0;e<a.length;e+=3)a[e]===a[e+1]||a[e]===a[e+2]||a[e+1]===a[e+2]||l.push(a[e],a[e+1],a[e+2]);return{positions:o,triIndices:l}}var Sl=new ix,Sh=new ix,Sc=new ix,Sd=new ix;function Su(e,t,i,r){let s=[],a=[];if(void 0!==i.userData.shape&&0===i.userData.parameters.depth&&0===i.userData.shape.shapeHoles.length){let t=i.userData.shape.extractShapePointsToFlatArray([]),r=i.userData.parameters.spikes;if("EllipseGeometry"===i.userData.type&&r<=24&&r%4==0&&i.userData.parameters.angle>=360){let e=t.length/2/r;t=t.filter((t,i)=>Math.floor(i/2)%e==0)}let o=0;for(let e=0;e<t.length;e+=2)o+=(t[e]-t[(0===e?t.length:e)-2])*(t[e+1]+t[(0===e?t.length:e)-1]);e.length=0;let l=0;if(o<0)for(let i=0;i<t.length;i+=2)e.push(t[i],t[i+1],0),s.push(l++);else for(let i=t.length-2;i>=0;i-=2)e.push(t[i],t[i+1],0),s.push(l++);return a.push(l),{indices:s,verticesPerFace:a}}let o=new Float32Array([i.userData.parameters.depth])[0],l=0;for(;l<t.length;){if(i.useNgonForTopBottomFaceDuringBake){let i=0;if((e[3*t[l]+2]===o||0===e[3*t[l]+2])&&i++,(e[3*t[l+1]+2]===o||0===e[3*t[l+1]+2])&&i++,(e[3*t[l+2]+2]===o||0===e[3*t[l+2]+2])&&i++,3===i)break}t[l+1]===t[l+3]&&t[l+2]===t[l+5]||t[l+0]===t[l+3]&&t[l+2]===t[l+4]?(Sl.set(e[3*t[l]],e[3*t[l]+1],e[3*t[l]+2]),Sh.set(e[3*t[l+1]],e[3*t[l+1]+1],e[3*t[l+1]+2]),Sc.set(e[3*t[l+4]],e[3*t[l+4]+1],e[3*t[l+4]+2]),Sd.set(e[3*t[l+5]],e[3*t[l+5]+1],e[3*t[l+5]+2]),Sh.sub(Sl).normalize(),Sc.sub(Sl).normalize(),Sd.sub(Sl).normalize(),Math.abs(Sh.cross(Sc).dot(Sd))>.005||r&&r.some((e,t)=>t%2!=1&&l>
3155=r[t]&&l<r[t+1])?(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3):(s.push(t[l],t[l+1],t[l+4],t[l+5]),a.push(4),l+=6)):(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3)}if(i.useNgonForTopBottomFaceDuringBake){let t=[],r=[],l=0;for(let i=0,s=0;i<e.length;i+=3,s++)0===e[i+2]&&(t.push(s),l++),e[i+2]===o&&r.push(s);if(0===i.userData.parameters.extrudeBevelSize){let e=r[0];r[0]=r[1],r[1]=e}t.reverse(),s.push(...t,...r),a.push(l,l)}return{indices:s,verticesPerFace:a}}var Sp={};function Sf(e){let t=e.length,i=t*Uint32Array.BYTES_PER_ELEMENT,r=t*Float32Array.BYTES_PER_ELEMENT,s=Number.isInteger(e[0])?i:r,a=_H._malloc(s);return(Number.isInteger(e[0])?new Uint32Array(_H.HEAPU32.buffer,a,t):new Float32Array(_H.HEAPF32.buffer,a,t)).set(e,0),a}function Sm(e){switch(e){case 0:return _H.OP.UNION;case 1:return _H.OP.INTERSECTION;case 2:return _H.OP.A_MINUS_B;case 3:return _H.OP.B_MINUS_A;case 4:return _H.OP.SYMMETRIC_DIFFERENCE;case 5:return _H.OP.ALL;default:throw Error("Unknown boolean operation "+e)}}function Sg(e,t){void 0===_W&&(_W=_H.init_csg());let i=Sf(e),r=_H.csg_calc_topological(_W,i,e.length,Sm(t));_H._free(i);let s=_H.HEAPU32.subarray(r>>2,(r>>2)+6),a=s.subarray(3,6),o=0,l=_H.HEAPU32[s[o]>>2],h=new Float32Array(_H.HEAPF32.subarray(l>>2,(l>>2)+a[o]));o++;let c=_H.HEAPU32[s[o]>>2],d=new Uint32Array(_H.HEAPU32.subarray(c>>2,(c>>2)+a[o]));o++;let u=_H.HEAPU32[s[o]>>2],p=new Uint8Array(_H.HEAPU32.subarray(u>>2,(u>>2)+a[o]));return _H.free_mesh_data(r),{positions:h,indices:d,verticesPerFace:p}}function Sv(e,t,i,r){void 0===_W&&(_W=_H.init_csg());let s=Sf(e),a=_H.csg_calc(_W,s,e.length,r,Sm(t));_H._free(s);let o=_H.HEAPU32.subarray(a>>2,(a>>2)+5),l=o.subarray(2,5),h=0,c=_H.HEAPU32[o[h]>>2],d=_H.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=_H.HEAPU32[o[h]>>2],p=_H.HEAPF32.subarray(u>>2,(u>>2)+l[h]),f=l[++h];i.setAttribute("position",new rD(d,3)),i.setAttribute("normal",new rD(p,3));let m=_H.HEAPF32.subarray((a>>2)+5,(a>>2)+5+6);return null===i.boundingSphere&&(i.boundingSphere=new ik),i.boundingSphere.center.set(m[0],m[1],m[2]),i.boundingSphere.radius=(m[3]**2+m[4]**2+m[5]**2)**.5,i.userData.parameters={width:2*m[3],height:2*m[4],depth:2*m[5]},_H.free_mesh_data(a),f}function Sy(e,t,i){let r,s,a;if(void 0===_H)return -1;if(t&&void 0!==e.userData.positions){let t=e.userData;a=t.verticesPerFace.length,r=t.positions,s=Array(t.verticesPerFace.reduce((e,t)=>e+t,0)+a);for(let e=0,i=0,r=0;e<t.verticesPerFace.length;e++){s[r++]=t.verticesPerFace[e];for(let a=0;a<t.verticesPerFace[e];a++)s[r++]=t.indices[i++]}}else({positions:r,faceIndices:s,nFaces:a}=function(e,t,i){let r,s;s="TorusGeometry"===e.userData.parameters.type&&e.userData.parameters.arc===2*Math.PI?e.getClosedTorusIndicesForBooleanOrSubdiv():e.getIndex();let{positions:a,triIndices:o}=So(e.getAttribute("position"),s),l;if(t&&i){let{indices:t,verticesPerFace:i}=Su(a,o,e);l=i.length,r=[];for(let e=0,s=0;e<l;e++){r.push(i[e]);for(let a=0;a<i[e];a++)r.push(t[s++])}}else{let e=o.length;r=Array(e+e/3),l=0;for(let e=0,t=0;t<r.length;)r[t++]=3,l++,r[t++]=o[e++],r[t++]=o[e++],r[t++]=o[e++]}return{positions:a,faceIndices:r,nFaces:l}}(e,t,i));let o=r.length,l=s.length,h=r.length,c=s.length,d=h*Float32Array.BYTES_PER_ELEMENT+c*Uint32Array.BYTES_PER_ELEMENT,u=h*Float32Array.BYTES_PER_ELEMENT,p=(Uint32Array.BYTES_PER_ELEMENT,_H._malloc(d)),f=new Float32Array(_H.HEAPF32.buffer,p,h),m=new Uint32Array(_H.HEAPU32.buffer,p+u,c);f.set(r,0),m.set(s,0);let g=_H.get_csg_mesh(p,o,p+u,l,a);return _H._free(p),g}function Sx(e){return _H.has_open_edges(e)}function Sb(e,t){_H.transform_csg_mesh(e,t.elements)}function Sw(e){_H.free_csg_mesh(e)}((e,t)=>{for(var i in t)tp(e,i,{get:t[i],enumerable:!0})})(Sp,{calcBoolean:()=>Sv,calcBooleanTopological:()=>Sg,freeMeshSet:()=>Sw,getMeshSet:()=>Sy,hasOpenEdges:()=>Sx,transformMeshSet:()=>Sb}),new Promise(e=>{_j=e}).then(e=>_H=e);var SS={ConeGeometry:xq,CubeGeometry:xX,CylinderGeometry:xj,DodecahedronGeometry:xK,EllipseGeometry:bW,HelixGeometry:bJ,IcosahedronGeometry:b1,LatheGeometry:b3,NonParametricGeometry:wp,PolygonGeometry:wf,PyramidGeometry:wm,RectangleGeometry:wx,SphereGeometry:wb,PlaneGeometry:ww,BackdropGeometry:wS,StarGeometry:wA,TextFrameGeometry:wM,TorusGeometry:wE,TorusKnotGeometry:wC,TriangleGeometry:wT,PathGeometry:wW,VectorGeometry:bG},S_=e=>SS[e.type].create(e);function SA(e){return null!==e&&"booleanOp"in e}var SM=class extends xV(rJ){constructor(){super(...arguments),this.booleanMeshSetAddress=-1,this.booleanWasTransformed=!1,this.booleanMatrixInvOld=new iQ}updateVisible(e){super.updateVisible(e),this.visible=!SA(this.parent)&&this.visible,SA(this.parent)&&this.parent.invali
vendor: 4,246 bytes, line 3155
3155dateDownstreamBooleanData()}freeBooleanPointer(){-1!==this.booleanMeshSetAddress&&(Sp.freeMeshSet(this.booleanMeshSetAddress),this.booleanMeshSetAddress=-1)}invalidateDownstreamBooleanData(e=!1){return e?this.booleanWasTransformed=!0:this.freeBooleanPointer(),SA(this.parent)?this.parent.invalidateDownstreamBooleanData():this}invalidateUpstreamBooleanData(){for(let e of(this.freeBooleanPointer(),this.children))e instanceof SM&&(e.freeBooleanPointer(),SA(e)&&e.invalidateUpstreamBooleanData())}updateTransformState(e,t){let i=super.updateTransformState(e,t);return i&&SA(this.parent)&&this.invalidateDownstreamBooleanData(!0),i}onVariableUpdate(e=!1){super.onVariableUpdate(e),SA(this.parent)&&this.invalidateDownstreamBooleanData(!0)}},SE=new iS;function SC(e,t=0,i=e.count,r,s){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0;for(let r=t;r<i;r++){let t=e.getX(r),i=e.getY(r),s=e.getZ(r);t<a&&(a=t),i<o&&(o=i),s<l&&(l=s),t>h&&(h=t),i>c&&(c=i),s>d&&(d=s)}SE.min.set(a,o,l),SE.max.set(h,c,d),SE.getCenter(r),SE.getSize(s).multiplyScalar(.5)}var ST=new rN,SP=new rA,SD=class extends SM{constructor(e,t){super(ST,SP),this.super_Entity(e,t)}updateState(e,t){this.updateState_Entity(e,t)}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SC(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},SI=class{constructor(e){if(this.hashProperties=void 0,this.isNode=!0,this.shortcuts={},null===SI.uuidContext)throw Error("plz startContext");SI.uuidContext===SI.globalContext?this.uuid="_gid"+SI.uuidContext.nodeContextUuid++:this.uuid="_uid"+SI.uuidContext.nodeContextUuid++,this.type=e,this.name=""}static startContext(e){null===this.uuidContext||this.uuidContext===SI.globalContext?this.uuidContext=e:console.error("Can't start context twice")}static endContext(e){this.uuidContext!==e&&console.error("Can't end context twice"),this.uuidContext=null}analyze(e,t){t=t??{},e.analyzing=!0,this.build(e.addFlow(t.slot,t.cache,t.context),"v4"),e.clearVertexNodeCode(),e.clearFragmentNodeCode(),e.removeFlow(),e.analyzing=!1}analyzeAndFlow(e,t,i){return i=i??{},this.analyze(e,i),this.flow(e,t,i)}flow(e,t,i){i=i??{},e.addFlow(i.slot,i.cache,i.context);let r={result:this.build(e,t),code:e.clearNodeCode(),extra:e.context.extra};return e.removeFlow(),r}build(e,t,i){t=t??this.getType(e,t);let r=e.getNodeData(i??this);return e.analyzing&&this.appendDepsNode(e,r,t),-1===e.nodes.indexOf(this)&&e.nodes.push(this),void 0!==this.updateFrame&&-1===e.updaters.indexOf(this)&&e.updaters.push(this),this.generate(e,t,i)}updateFrame(e){}generateReadonly(e,t,i,r,s,a){return""}generate(e,t,i,r,s){return""}parse(e,t,i,r){}appendDepsNode(e,t,i){t.deps=(t.deps||0)+1;let r=e.getTypeLength(i);(r>(t.outputMax||0)||this.getType(e,i))&&(t.outputMax=r,t.output=i)}setName(e){this.name=e}getName(){return this.name}getType(e,t){return"sampler2D"===t||"samplerCube"===t?t:this.type}},SO=SI;SO.globalContext={nodeContextUuid:0},SO.uuidContext=SI.globalContext;var SR=class{constructor(e){e=e??{},this.name=e.name,this.type=e.type,this.node=e.node,this.size=e.size,this.needsUpdate=e.needsUpdate}get value(){return this.node.value}set value(e){this.node.value=e}},SL=new class{constructor(){this.nodes={},this.keywords={}}add(e){this.nodes[e.name]=e}addKeyword(e,t,i){i=void 0===i||i,this.keywords[e]={callback:t,cache:i}}remove(e){delete this.nodes[e.name]}removeKeyword(e){delete this.keywords[e]}get(e){return this.nodes[e]}getKeyword(e,t){return this.keywords[e].callback(t)}getKeywordData(e){return this.keywords[e]}contains(e){return void 0!==this.nodes[e]}containsKeyword(e){return void 0!==this.keywords[e]}},SB=class extends SO{constructor(e,t){super(e),this.scope="",t=t??{},this.shared=void 0===t.shared||t.shared,this.unique=void 0!==t.unique&&t.unique}build(e,t,i,r){if(t=t??this.getType(e),this.getShared(e,t)){let s=this.getUnique(e,t);s&&void 0===this.uuid&&(this.uuid=tZ.generateUUID()),i=e.getUUID(i??this.getUUID(),!s);let a=e.getNodeData(i),o=a.output||this.getType(e);if(e.analyzing)return(a.deps||0)>0||this.getLabel()?(this.appendDepsNode(e,a,t),this.generate(e,t,i)):super.build(e,t,i);if(s)return a.name=a.name||super.build(e,t,i),a.name;
vendor: 5,541 bytes, line 3155
3155if(!this.getLabel()&&(!this.getShared(e,o)||e.context.ignoreCache||1===a.deps))return super.build(e,t,i);i=this.getUUID(!1);let l=this.getTemp(e,i);if(l)return e.format(l,o,t);{l=super.generate(e,t,i,a.output,r);let s=this.generate(e,o,i);return e.addNodeCode(l+" = "+s+";"),e.format(l,o,t)}}return super.build(e,t,i)}getShared(e,t){return"sampler2D"!==t&&"samplerCube"!==t&&this.shared}getUnique(e,t){return this.unique}setLabel(e){return this.label=e,this}getLabel(){return this.label}getUUID(e){let t=this.uuid;return"string"==typeof this.scope&&(t=this.scope+"-"+t),t}getTemp(e,t){t=t||this.uuid;let i=e.getVars()[t];return i?i.name:void 0}generate(e,t,i,r,s){return this.getShared(e,t)||console.error("TempNode is not shared"),i=i??this.uuid,e.getTempVar(i,r??this.getType(e),s,this.getLabel()).name}},Sz=class extends SB{constructor(e,t){(t=t??{}).shared=void 0!==t.shared&&t.shared,super(e,t),this.readonly=!1}setReadonly(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this}getReadonly(){return this.readonly}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i);return this.getReadonly()&&void 0!==this.generateReadonly?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}},SF=class extends Sz{constructor(e=0,t){super("v2"),this.nodeType="Vector2",this.value=e instanceof tK?e:new tK(e,t)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}generateReadonly(e,t,i,r,s,a){return e.format("vec2("+this.value.x+", "+this.value.y+")",r,t)}},SN=class extends Sz{constructor(e=0,t,i){super("v3"),this.nodeType="Vector3",this.value=e instanceof ix?e:new ix(e,t,i)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}get z(){return this.value.z}set z(e){this.value.z=e}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.x+", "+this.value.y+", "+this.value.z+")",r,t)}},SU=class extends is{constructor(e,t,i,r){super(e,t,i),this.isColorA=!0,this.a=r}setRGBA(e,t,i,r){super.setRGB(e,t,i),this.a=r}copy(e){return super.copy(e),this.a="a"in e?e.a:1,this}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}equals(e){return super.equals(e)&&this.a===e.a}setStyle(e,t="srgb"){let i;if("transparent"===e)return this.setRGBA(0,0,0,0),this;if(i=/^((?:rgb|hsl)a?)\(([^)]*)\)/.exec(e)){let r,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="rgba"===s?parseFloat(r[4]):1,super.setStyle(e,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="hsla"===s?parseFloat(r[4]):1,super.setStyle(e,t)}}return super.setStyle(e,t)}get x(){return this.r}get y(){return this.g}get z(){return this.b}get w(){return this.a}set x(e){this.r=e}set y(e){this.g=e}set z(e){this.b=e}set w(e){this.a=e}},Sk=class extends Sz{constructor(e){super("v4"),this.nodeType="Vector4",this.value=e instanceof SU?e:new SU(e.r,e.g,e.b,e.a)}generateReadonly(e,t,i,r,s,a){return e.format("vec4("+this.value.r+", "+this.value.g+", "+this.value.b+", "+this.value.a+")",r,t)}},SV=/^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,Sj=/[a-z_0-9]+/gi,SG=class extends SB{constructor(e,t,i,r,s){super(s),this.src="",this.nodeType="Function",this.useKeywords=!0,this.includes=[],this.extensions={},this.keywords={},this.isMethod=void 0===s,this.isInterface=!1,this.parse(e,t,i,r)}getShared(e,t){return!this.isMethod}getType(e){return e.getTypeByFormat(this.type)}getInputByName(e){if(this.inputs){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}}getIncludeByName(e){if(this.includes){let t=this.includes.length;for(;t--;)if(this.includes[t].name===e)return this.includes[t]}}generate(e,t,i,r,s){let a,o=0,l=this.src;if(this.includes)for(let t=0;t<this.includes.length;t++)e.include(this.includes[t],this);for(let t in this.extensions)e.extensions[t]=!0;let h=[];for(;a=Sj.exec(this.src);)h.push(a);for(let t=0;t<h.length;t++){let i=h[t],r=i[0],s=!this.isMethod||!this.getInputByName(r),a=r;if(this.keywords[r]||this.useKeywords&&s&&SL.containsKeyword(r)){let t=this.keywords[r];if(!t){let i=SL.getKeywordData(r);i.cache&&(t=e.keywords[r]),t=t||SL.getKeyword(r,e),i.cache&&(e.keywords[r]=t)}a=t.build(e)}r!==a&&"."!==l[i.index+o-1]&&(l=l.substring(0,i.index+o)+a+l.substring(i.index+r.length+o),o+=a.length-r.length),void 0===this.getIncludeByName(a)&&SL.contains(a)&&e.include(SL.get(a))}return"source"===t?l:this.isMethod?(this.isInterface||e.include(this,void 0,l),this.name):e.format("( "+l+" )",this.getType(e),t)}parse(e,t,i,r){if(this.src=e||"",this.includes=t??[],this.extensions=i??{},this.keywords=r??{},this.isMethod){let e=SV.exec(this.src);if(this.inputs=[],e&&4==e.length){this.type=e[1],this.name=e[2];let t=e[3].match(Sj);if(t){let e=0;for(;e<t.length;){let i=t[e++],r;"in"===i||"out"===i||"inout"===i?r=t[e++]:(r=i,i="");let s=t[e++];this.inputs.push({name:s,type:r,qualifier:i})}}this.isInterface=-1===this.src.indexOf("{")}else this.type="",this.name=""}}},SH=/^([a-z_0-9]+)\s([a-z_0-9]+)\s?\=?\s?(.*?)(\;|$)/i,SW=class extends SB{constructor(e="",t){super(),this.src="",this.useDefine=!1,this.nodeType="Const",this.parse(e||SW.PI,void 0,void 0,void 0,t)}
vendor: 12,915 bytes, lines 3155-3234
3155getType(e){return e.getTypeByFormat(this.type)}parse(e,t,i,r,s){this.src=e||"";let a,o,l="",h=SH.exec(e);this.useDefine=s??"#"===this.src.charAt(0),h&&h.length>1?(o=h[1],a=h[2],l=h[3]):(a=this.src,o="f"),this.name=a,this.type=o,this.value=l}build(e,t){if("source"===t){if(this.value)return this.useDefine?"#define "+this.name+" "+this.value:"const "+this.type+" "+this.name+" = "+this.value+";";if(this.useDefine)return this.src}return e.include(this),e.format(this.name,this.getType(e),t)}generate(e,t,i,r,s){return e.format(this.name,this.getType(e),t)}};SW.PI="PI",SW.PI2="PI2",SW.RECIPROCAL_PI="RECIPROCAL_PI",SW.RECIPROCAL_PI2="RECIPROCAL_PI2",SW.LOG2="LOG2",SW.EPSILON="EPSILON";var Sq=RegExp(`^structs*([a-z_0-9]+)s*{s*((.| 3156)*?)}`,"gim"),SX=RegExp("s*(w*?)s*(w*?)(=|;)","gim"),SY=class extends SB{constructor(e=""){super(),this.inputs=[],this.src="",this.nodeType="Struct",this.parse(e)}getType(e){return e.getTypeByFormat(this.name)}getInputByName(e){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}generate(e,t,i,r,s){return"source"===t?this.src+";":e.format("( "+this.src+" )",this.getType(e),t)}parse(e=""){this.src=e,this.inputs=[];let t=Sq.exec(e);if(t){let e=t[2],i;for(;i=SX.exec(e);)this.inputs.push({type:i[1],name:i[2]});this.name=t[1]}else this.name="";this.type=this.name}},SQ=class extends SB{constructor(e){super("v2",{shared:!1}),this.nodeType="UV",this.index=e??0}generate(e,t){e.requires.uv[this.index]=!0;let i=this.index>0?this.index+1:"",r=e.isShader("vertex")?"uv"+i:"vUv"+i;return e.format(r,this.getType(e),t)}};SL.addKeyword("uv",function(){return new SQ}),SL.addKeyword("uv2",function(){return new SQ(1)});var SZ=class extends SB{constructor(e,t){super("v4"),this.nodeType="ColorSpace",this.input=e,this.method=t??SZ.LINEAR_TO_LINEAR,this.hashProperties=["method"]}static getEncodingComponents(e){switch(e){case 3e3:return["Linear"];case 3001:return["sRGB"];default:return[]}}generate(e,t){let i=this.input.build(e,"v4"),r=this.getType(e),s=SZ.Nodes[this.method],a=e.include(s);if(a===SZ.LINEAR_TO_LINEAR)return e.format(i,r,t);if(s.inputs?.length!==2)return e.format(a+"( "+i+" )",r,t);{let s=this.factor.build(e,"f");return e.format(a+"( "+i+", "+s+" )",r,t)}}fromEncoding(e){let t=SZ.getEncodingComponents(e);this.method="LinearTo"+t[0],this.factor=t[1]}fromDecoding(e){let t=SZ.getEncodingComponents(e);this.method=t[0]+"ToLinear",this.factor=t[1]}};SZ.Nodes={LinearToLinear:new SG(["vec4 LinearToLinear( in vec4 value ) {"," return value;","}"].join(` 3157`)),sRGBToLinear:new SG(["vec4 sRGBToLinear( in vec4 value ) {"," return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );","}"].join(` 3158`)),LinearTosRGB:new SG(["vec4 LinearTosRGB( in vec4 value ) {"," return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );","}"].join(` 3159`))},SZ.LINEAR_TO_LINEAR="LinearToLinear",SZ.SRGB_TO_LINEAR="sRGBToLinear",SZ.LINEAR_TO_SRGB="LinearTosRGB";var SK=class extends SG{constructor(e="",t,i,r,s){super(e,s,r,i,t),this.nodeType="Expression"}},SJ=class extends Sz{constructor(e=new id,t,i,r){super("v4",{shared:!0}),this.nodeType="Texture",this.value=e,this.uv=t??new SQ,this.bias=i,this.project=void 0!==r&&r}getTexture(e,t){return super.generate(e,t,this.value.uuid,"t")}generate(e,t){let i,r;if("sampler2D"===t)return this.getTexture(e,t);let s=this.getTexture(e,t),a=this.uv.build(e,this.project?"v4":"v2"),o=this.bias?this.bias.build(e,"f"):void 0;void 0===o&&e.context.bias&&(o=e.context.bias.setTexture(this).build(e,"f")),i=this.project?"texture2DProj":o?"tex2DBias":"tex2D",r=o?i+"( "+s+", "+a+", "+o+" )":i+"( "+s+", "+a+" )";let l={include:e.isShader("vertex"),ignoreCache:!0},h=this.getType(e);return e.addContext(l),this.colorSpace=this.colorSpace??new SZ(new SK("",h)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(r),r=this.colorSpace.build(e,h),e.removeContext(),e.format(r,h,t)}},S$=class extends Sz{constructor(e){super("f"),this.nodeType="Float",this.value=e??0}generateReadonly(e,t,i,r,s,a){return e.format(this.value+(this.value%1?"":".0"),r,t)}},S0=class extends SB{constructor(e,t){super(),this.inputs=[],this.nodeType="FunctionCall",this.value=e,this.inputs=t??[]}getFunction(){return this.value}getType(e){return this.value.getType(e)}generate(e,t,i,r,s){r=this.getType(e);let a=this.value,o=a.build(e,t)+"( ",l=[];if(a.inputs){for(let t=0;t<a.inputs.length;t++){let i=a.inputs[t],r=this.inputs[t]||this.inputs[i.name];l.push(r.build(e,e.getTypeByFormat(i.type)))}o+=l.join(", ")+" )"}return e.format(o,r,t)}},S1=class extends SB{constructor(e,t,i=S1.ADD){super(),this.nodeType="Operator",this.type=e.type,this.a=e,this.b=t,this.op=i}getType(e){let t=this.a.getType(e),i=this.b.getType(e);return e.isTypeMatrix(t)?"v4":e.getTypeLength(i)>e.getTypeLength(t)?i:t}generate(e,t){let i=this.getType(e);this.type=i;let r=this.a.build(e,i),s=this.b.build(e,i);return e.format("( "+r+" "+this.op+" "+s+" )",i,t)}};S1.ADD="+",S1.SUB="-",S1.MUL="*",S1.DIV="/";var S2=class extends SB{constructor(e,t=S2.ABS,i,r){super(),this.nodeType="Math",this.a=e,"string"!=typeof t?this.b=t:r=t,"string"!=typeof i?this.c=i:r=i,this.method=r,this.hashProperties=["method"]}getNumInputs(e){switch(this.method){case S2.MIX:case S2.CLAMP:case S2.REFRACT:case S2.SMOOTHSTEP:case S2.FACEFORWARD:return 3;case S2.MIN:case S2.MAX:case S2.MOD:case S2.STEP:case S2.REFLECT:case S2.DISTANCE:case S2.DOT:case S2.CROSS:case S2.POW:return 2;default:return 1}}getInputType(e){let t=e.getTypeLength(this.a.getType(e)),i=this.b?e.getTypeLength(this.b.getType(e)):0,r=this.c?e.getTypeLength(this.c.getType(e)):0;return t>i&&t>r?this.a.getType(e):i>r?this.b.getType(e):this.c.getType(e)}getType(e){switch(this.method){case S2.LENGTH:case S2.DISTANCE:case S2.DOT:return"f";case S2.CROSS:return"v3"}return this.getInputType(e)}generate(e,t){let i,r,s,a=this.a?e.getTypeLength(this.a.getType(e)):0,o=this.b?e.getTypeLength(this.b.getType(e)):0,l=this.c?e.getTypeLength(this.c.getType(e)):0,h=this.getInputType(e),c=this.getType(e);switch(this.type=c,this.method){case S2.NEGATE:return e.format("( -"+this.a.build(e,h)+" )",h,t);case S2.INVERT:return e.format("( 1.0 - "+this.a.build(e,h)+" )",h,t);case S2.CROSS:i=this.a.build(e,"v3"),r=this.b.build(e,"v3");break;case S2.STEP:i=this.a.build(e,1===a?"f":h),r=this.b.build(e,h);break;case S2.MIN:case S2.MAX:case S2.MOD:i=this.a.build(e,h),r=this.b.build(e,1===o?"f":h);break;case S2.REFRACT:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,"f");break;case S2.MIX:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,1===l?"f":h);break;default:i=this.a.build(e,h),this.b&&(r=this.b.build(e,h)),this.c&&(s=this.c.build(e,h))}let d=[];d.push(i),r&&d.push(r),s&&d.push(s);let u=this.getNumInputs(e);if(d.length!==u)throw Error(`Arguments not match used in "${this.method}". Require ${u}, currently ${d.length}.`);return e.format(this.method+"( "+d.join(", ")+" )",c,t)}};S2.RAD="radians",S2.DEG="degrees",S2.EXP="exp",S2.EXP2="exp2",S2.LOG="log",S2.LOG2="log2",S2.SQRT="sqrt",S2.INV_SQRT="inversesqrt",S2.FLOOR="floor",S2.CEIL="ceil",S2.NORMALIZE="normalize",S2.FRACT="fract",S2.SATURATE="saturate",S2.SIN="sin",S2.COS="cos",S2.TAN="tan",S2.ASIN="asin",S2.ACOS="acos",S2.ARCTAN="atan",S2.ABS="abs",S2.SIGN="sign",S2.LENGTH="length",S2.NEGATE="negate",S2.INVERT="invert",S2.MIN="min",S2.MAX="max",S2.MOD="mod",S2.STEP="step",S2.REFLECT="reflect",S2.DISTANCE="distance",S2.DOT="dot",S2.CROSS="cross",S2.POW="pow",S2.MIX="mix",S2.CLAMP="clamp",S2.REFRACT="refract",S2.SMOOTHSTEP="smoothstep",S2.FACEFORWARD="faceforward";var S3=class extends SB{constructor(e,t,i){super("v4"),this.nodeType="TextureCubeUV",this.value=e,this.uv=t,this.bias=i}bilinearCubeUV(e,t,i,r){let s=new S0(S3.Nodes.bilinearCubeUV,[t,i,r]);this.colorSpaceTL=this.colorSpaceTL??new SZ(new SK("","v4")),this.colorSpaceTL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTL.input.parse(s.build(e)+".tl"),this.colorSpaceTR=this.colorSpaceTR??new SZ(new SK("","v4")),this.colorSpaceTR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTR.input.parse(s.build(e)+".tr"),this.colorSpaceBL=this.colorSpaceBL??new SZ(new SK("","v4")),this.colorSpaceBL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBL.input.parse(s.build(e)+".bl"),this.colorSpaceBR=this.colorSpaceBR??new SZ(new SK("","v4")),this.colorSpaceBR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBR.input.parse(s.build(e)+".br");let a={include:e.isShader("vertex"),ignoreCache:!0};e.addContext(a),this.colorSpaceTLExp=new SK(this.colorSpaceTL.build(e,"v4"),"v4"),this.colorSpaceTRExp=new SK(this.colorSpaceTR.build(e,"v4"),"v4"),this.colorSpaceBLExp=new SK(this.colorSpaceBL.build(e,"v4"),"v4"),this.colorSpaceBRExp=new SK(this.colorSpaceBR.build(e,"v4"),"v4"),e.removeContext();let o=new SK("mix( mix( cubeUV_TL, cubeUV_TR, cubeUV.f.x ), mix( cubeUV_BL, cubeUV_BR, cubeUV.f.x ), cubeUV.f.y )","v4");return o.keywords.cubeUV_TL=this.colorSpaceTLExp,o.keywords.cubeUV_TR=this.colorSpaceTRExp,o.keywords.cubeUV_BL=this.colorSpaceBLExp,o.keywords.cubeUV_BR=this.colorSpaceBRExp,o.keywords.cubeUV=s,o}generate(e,t){if(!e.isShader("fragment"))return console.warn("TextureCubeUVNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t);{let i=this.uv,r=this.bias||e.context.roughness,s=new S2(new S0(S3.Nodes.roughnessToMip,[r]),S3.Nodes.m0,S3.Nodes.cubeUV_maxMipLevel,S2.CLAMP),a=new S2(s,S2.FLOOR),o=new S2(s,S2.FRACT),l=new S2(this.bilinearCubeUV(e,this.value,i,a),this.bilinearCubeUV(e,this.value,i,new S1(a,new S$(1).setReadonly(!0),S1.ADD)),o,S2.MIX);return e.format(l.build(e),"v4",t)}}};S3.Nodes=(ep=new SY(`struct TextureCubeUVData { 3160 vec4 tl; 3161 vec4 tr; 3162 vec4 br; 3163 vec4 bl; 3164 vec2 f; 3165 }`),ef=new SW("float cubeUV_maxMipLevel 8.0",!0),em=new SW("float cubeUV_minMipLevel 4.0",!0),eg=new SW("float cubeUV_maxTileSize 256.0",!0),ev=new SW("float cubeUV_minTileSize 16.0",!0),(ey=new SG(`float getFace(vec3 direction) { 3166 vec3 absDirection = abs(direction); 3167 float face = -1.0; 3168 if (absDirection.x > absDirection.z) { 3169 if (absDirection.x > absDirection.y) 3170 face = direction.x > 0.0 ? 0.0 : 3.0; 3171 else 3172 face = direction.y > 0.0 ? 1.0 : 4.0; 3173 } else { 3174 if (absDirection.z > absDirection.y) 3175 face = direction.z > 0.0 ? 2.0 : 5.0; 3176 else 3177 face = direction.y > 0.0 ? 1.0 : 4.0; 3178 } 3179 return face; 3180 }`)).useKeywords=!1,(ex=new SG(`vec2 getUV(vec3 direction, float face) { 3181 vec2 uv; 3182 if (face == 0.0) { 3183 uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x 3184 } else if (face == 1.0) { 3185 uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y 3186 } else if (face == 2.0) { 3187 uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z 3188 } else if (face == 3.0) { 3189 uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x 3190 } else if (face == 4.0) { 3191 uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y 3192 } else { 3193 uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z 3194 } 3195 return 0.5 * (uv + 1.0); 3196 }`)).useKeywords=!1,(eb=new SG(`TextureCubeUVData bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) { 3197 float face = getFace(direction); 3198 float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0); 3199 mipInt = max(mipInt, cubeUV_minMipLevel); 3200 float faceSize = exp2(mipInt); 3201 float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize); 3202 vec2 uv = getUV(direction, face) * (faceSize - 1.0); 3203 vec2 f = fract(uv); 3204 uv += 0.5 - f; 3205 if (face > 2.0) { 3206 uv.y += faceSize; 3207 face -= 3.0; 3208 } 3209 uv.x += face * faceSize; 3210 if(mipInt < cubeUV_maxMipLevel){ 3211 uv.y += 2.0 * cubeUV_maxTileSize; 3212 } 3213 uv.y += filterInt * 2.0 * cubeUV_minTileSize; 3214 uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize); 3215 uv *= texelSize; 3216 vec4 tl = texture2D(envMap, uv); 3217 uv.x += texelSize; 3218 vec4 tr = texture2D(envMap, uv); 3219 uv.y += texelSize; 3220 vec4 br = texture2D(envMap, uv); 3221 uv.x -= texelSize; 3222 vec4 bl = texture2D(envMap, uv); 3223 return TextureCubeUVData( tl, tr, br, bl, f ); 3224 }`,[ep,ey,ex,ef,em,eg,ev])).useKeywords=!1,{bilinearCubeUV:eb,roughnessToMip:new SG(`float roughnessToMip(float roughness) { 3225 float mip = 0.0; 3226 if (roughness >= r1) { 3227 mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0; 3228 } else if (roughness >= r4) { 3229 mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1; 3230 } else if (roughness >= r5) { 3231 mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4; 3232 } else if (roughness >= r6) { 3233 mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5; 3234 } else {
3235 mip = -2.0 * log2(1.16 * roughness);// 1.16 = 1.79^0.25 3236 } 3237 return mip; 3238 }`,[new SW("float r0 1.0",!0),new SW("float v0 0.339",!0),ew=new SW("float m0 -2.0",!0),new SW("float r1 0.8",!0),new SW("float v1 0.276",!0),new SW("float m1 -1.0",!0),new SW("float r4 0.4",!0),new SW("float v4 0.046",!0),new SW("float m4 2.0",!0),new SW("float r5 0.305",!0),new SW("float v5 0.016",!0),new SW("float m5 3.0",!0),new SW("float r6 0.21",!0),new SW("float v6 0.0038",!0),new SW("float m6 4.0",!0)]),m0:ew,cubeUV_maxMipLevel:ef});var S4=class extends SB{constructor(e){super("v3"),this.nodeType="Normal",this.scope=e??S4.VIEW}getShared(){return this.scope===S4.WORLD}build(e,t,i,r){let s=e.context[this.scope+"Normal"];return s?s.build(e,t,i,r):super.build(e,t,i)}generate(e,t,i,r,s){let a;switch(this.scope){case S4.VIEW:a=e.isShader("vertex")?"transformedNormal":"geometryNormal";break;case S4.LOCAL:e.isShader("vertex")?a="objectNormal":(e.requires.normal=!0,a="vObjectNormal");break;case S4.WORLD:e.isShader("vertex")?a="inverseTransformDirection( transformedNormal, viewMatrix ).xyz":(e.requires.worldNormal=!0,a="vWNormal")}return e.format(a,this.getType(e),t)}};S4.LOCAL="local",S4.WORLD="world",S4.VIEW="view",S4.NORMAL="normal",SL.addKeyword("viewNormal",function(){return new S4(S4.VIEW)}),SL.addKeyword("localNormal",function(){return new S4(S4.NORMAL)}),SL.addKeyword("worldNormal",function(){return new S4(S4.WORLD)});var S5=class extends SB{constructor(e){super("v3"),this.nodeType="Position",this.scope=e??S5.LOCAL}getType(){return this.scope===S5.PROJECTION?"v4":this.type}getShader(){switch(this.scope){case S5.LOCAL:case S5.WORLD:return!1}return!0}generate(e,t,i,r,s){let a;switch(this.scope){case S5.LOCAL:e.isShader("vertex")?a="transformed":(e.requires.position=!0,a="vPosition");break;case S5.WORLD:if(e.isShader("vertex"))return"( modelMatrix * vec4( transformed, 1.0 ) ).xyz";e.requires.worldPosition=!0,a="vWPosition";break;case S5.VIEW:a=e.isShader("vertex")?"-mvPosition.xyz":"vViewPosition";break;case S5.PROJECTION:a=e.isShader("vertex")?"( projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) )":"vec4( 0.0 )"}return e.format(a,this.getType(),t)}};S5.LOCAL="local",S5.WORLD="world",S5.VIEW="view",S5.PROJECTION="projection",SL.addKeyword("position",function(){return new S5}),SL.addKeyword("worldPosition",function(){return new S5(S5.WORLD)}),SL.addKeyword("viewPosition",function(){return new S5(S5.VIEW)});var S6=class extends SB{constructor(e){super("v3"),this.nodeType="Reflect",this.scope=e??S6.CUBE}getUnique(e){return!e.context.viewNormal}getType(){return this.scope===S6.SPHERE?"v2":this.type}generate(e,t){let i=this.getUnique(e);if(!e.isShader("fragment"))return console.warn("ReflectNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.type,t);{let r;switch(this.scope){case S6.VECTOR:{let t=new S4(S4.VIEW),s=e.context.roughness,a=t.build(e,"v3"),o=new S5(S5.VIEW).build(e,"v3"),l=s?s.build(e,"f"):void 0,h=`reflect( -normalize( ${o} ), ${a} )`;l&&(h=`normalize( mix( ${h}, ${a}, ${l} * ${l} ) )`);let c=`inverseTransformDirection( ${h}, viewMatrix )`;i?(e.addNodeCode(`vec3 reflectVec = ${c};`),r="reflectVec"):r=c;break}case S6.CUBE:{let t=new S6(S6.VECTOR).build(e,"v3"),s="vec3( -"+t+".x, "+t+".yz )";i?(e.addNodeCode(`vec3 reflectCubeVec = ${s};`),r="reflectCubeVec"):r=s;break}case S6.SPHERE:{let t="normalize( ( viewMatrix * vec4( "+new S6(S6.VECTOR).build(e,"v3")+", 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) ).xy * 0.5 + 0.5";i?(e.addNodeCode(`vec2 reflectSphereVec = ${t};`),r="reflectSphereVec"):r=t}}return e.format(r,this.getType(),t)}}};S6.CUBE="cube",S6.SPHERE="sphere",S6.VECTOR="vector";var S8=class extends SB{constructor(e=new SJ,t,i){super("v4"),this.nodeType="TextureCube",this.value=e,this.radianceNode=new S3(this.value,t??new S6(S6.VECTOR),i),this.irradianceNode=new S3(this.value,new S4(S4.WORLD),new S$(1).setReadonly(!0))}generate(e,t){return e.isShader("fragment")?(e.require("irradiance"),e.context.bias&&e.context.bias.setTexture(this.value),("irradiance"===e.slot?this.irradianceNode:this.radianceNode).build(e,t)):(console.warn("TextureCubeNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t))}},S9=class extends Sz{constructor(e=new st,t,i){super("v4",{shared:!0}),this.nodeType="CubeTexture",this.value=e,this.uv=t??new S6,this.bias=i}getTexture(e,t){return super.generate(e,t,this.value.uuid,"tc")}generate(e,t){let i;if("samplerCube"===t)return this.getTexture(e,t);let r=this.getTexture(e,t),s=this.uv?.build(e,"v3"),a=this.bias?this.bias.build(e,"f"):void 0;void 0===a&&e.context.bias&&(a=e.context.bias.setTexture(this).build(e,"f")),i=a?"texCubeBias( "+r+", "+s+", "+a+" )":"texCube
3238( "+r+", "+s+" )";let o={include:e.isShader("vertex"),ignoreCache:!0},l=this.getType(e);return e.addContext(o),this.colorSpace=this.colorSpace??new SZ(new SK("",l)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(i),i=this.colorSpace.build(e,l),e.removeContext(),e.format(i,l,t)}},S7=` 3239uniform int frameIndex; 3240uniform vec2 resolution; 3241uniform mat4 previousModelViewMatrix; 3242uniform mat4 previousProjectionMatrix; 3243 3244varying vec4 vCurrentPosition; 3245varying vec4 vPreviousPosition; 3246`,_e=` 3247layout(location = 1) out vec4 gVelocity; 3248 3249uniform int frameIndex; 3250uniform vec2 resolution; 3251 3252varying vec4 vCurrentPosition; 3253varying vec4 vPreviousPosition; 3254 3255const vec2 haltonSequence[16] = vec2[16]( 3256vec2( 0.000000,-0.333334), 3257vec2(-0.500000, 0.333334), 3258vec2( 0.500000,-0.777778), 3259vec2(-0.750000,-0.111112), 3260vec2( 0.250000, 0.555556), 3261vec2(-0.250000,-0.555556), 3262vec2( 0.750000, 0.111112), 3263vec2(-0.875000, 0.777778), 3264vec2(0.125000, -0.925926), 3265vec2(-0.375000, -0.259260), 3266vec2(0.625000, 0.407408), 3267vec2(-0.625000, -0.703704), 3268vec2(0.375000, -0.037038), 3269vec2(-0.125000, 0.629630), 3270vec2(0.875000, -0.481482), 3271vec2(-0.937500, 0.185186)); 3272 3273vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) { 3274 const float goldenAngle = 2.399963f; // radians 3275 float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount)); 3276 float theta = float(sampleIndex) * goldenAngle + angle; 3277 float sine = sin(theta); 3278 float cosine = cos(theta); 3279 return vec2(cosine, sine) * r; 3280} 3281 3282// Derived from the interleaved gradient function from Jimenez 2014 http:goo.gl/eomGso 3283float getNoiseInterleavedGradient(vec2 screenPos) { 3284 vec3 magic = vec3(0.06711056f, 0.00583715f, 52.9829189f); 3285 return fract(magic.z * fract(dot(screenPos, magic.xy))); 3286} 3287 3288`,_t=` 3289// TODO: This could be generated CPU side and passed to the shader every frame 3290const vec2 haltonSequence[16] = vec2[16]( 3291vec2( 0.000000,-0.333334), 3292vec2(-0.500000, 0.333334), 3293vec2( 0.500000,-0.777778), 3294vec2(-0.750000,-0.111112), 3295vec2( 0.250000, 0.555556), 3296vec2(-0.250000,-0.555556), 3297vec2( 0.750000, 0.111112), 3298vec2(-0.875000, 0.777778), 3299vec2(0.125000, -0.925926), 3300vec2(-0.375000, -0.259260), 3301vec2(0.625000, 0.407408), 3302vec2(-0.625000, -0.703704), 3303vec2(0.375000, -0.037038), 3304vec2(-0.125000, 0.629630), 3305vec2(0.875000, -0.481482), 3306vec2(-0.937500, 0.185186)); 3307 3308// TODO: Pass correct view size 3309vec2 offset = haltonSequence[frameIndex]; 3310offset.x /= resolution.x; 3311offset.y /= resolution.y; 3312 3313vec4 currentPosition = gl_Position; 3314vec4 currentPositionJittered = currentPosition + (vec4(offset.x, offset.y, 0.0, 0.0) * currentPosition.w); 3315 3316// We want to calculate the velocity with unjittered positions 3317// so that things that are not moving get a velocity = 0 3318vCurrentPosition = currentPosition; 3319vPreviousPosition = previousProjectionMatrix * previousModelViewMatrix * vec4(transformed, 1.0); 3320#ifdef OUTLINE_COMPENSATION 3321vPreviousPosition.xy += OUTLINE_COMPENSATION; 3322#endif 3323gl_Position = currentPositionJittered; 3324 3325`,_i=` 3326vec2 oldPos = vPreviousPosition.xy; 3327 oldPos /= vPreviousPosition.w; 3328 oldPos.xy = (oldPos.xy+1.)/2.0; 3329 3330vec2 newPos = vCurrentPosition.xy; 3331 newPos /= vCurrentPosition.w; 3332 newPos.xy = (newPos.xy+1.)/2.0; 3333 3334vec2 velocity = (newPos - oldPos); 3335 3336// Discard fully transparent pixels 3337if (gl_FragColor.a <= 0.0) discard; 3338 3339gVelocity = vec4(velocity, 0.0, 1.0); 3340`,_r=` 3341layout(location = 1) out vec4 gVelocity; 3342`,_s=` 3343 // Discard fully transparent pixels 3344 if (gl_FragColor.a <= 0.0) discard; 3345 3346 gVelocity = vec4(0.0, 0.0, 0.0, 1.0); 3347`,_a=["x","y","z","w"],_n=["float","vec2","vec3","vec4"],_o={float:"f",vec2:"v2",vec3:"v3",vec4:"v4",mat4:"v4",int:"i",bool:"b","float[]":"f[]","vec4[]":"v4[]"},_l={t:"sampler2D",tc:"samplerCube",b:"bool",i:"int",f:"float",c:"vec3",v2:"vec2",v3:"vec3",v4:"vec4",m3:"mat3",m4:"mat4","f[]":"float[]","v4[]":"vec4[]"},_h=class{constructor(){this.includes={consts:{},functions:{},structs:{}},this.cache="",this.slot="",this.shader="",this.context={},this.needsJitter=!0,this.getIncludesCode=function(){function e(e,t){return e.deps.length-t.deps.length}return function(t,i){let r=this.getIncludes(t,i);if(!r)return"";let s="";r=r.sort(e);for(let e=0;e<r.length;e++)r[e].src&&(s+=r[e].src+` 3348`);return s}}(),this.slots=[],this.caches=[],this.contexts=[],this.keywords={},this.nodeData={},this.fragmentVariables={},this.fragmentParsVariables={},this.vertexParsVariables={},this.requires={uv:[],color:[],transparent:!1,irradiance:!1,position:!1,worldPosition:!1,normal:!1,worldNormal:!1,vWorldViewDir:!1,modelMatrix:!1,viewMatrix:!1,projectionMatrix:!1},this.includes={consts:[],functions:[],structs:[]},this.attributes={}
vendor: 4,654 bytes, lines 3348-3385
3348,this.prefixCode=["#ifdef TEXTURE_LOD_EXT"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)","#else"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCube(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2D(a, b, c)","#endif",` 3349 // NOTE: Include Spline's blending modes. This could be part of BlendNode 3350 #define SPE_BLENDING_NORMAL 0 3351 #define SPE_BLENDING_MULTIPLY 1 3352 #define SPE_BLENDING_SCREEN 2 3353 #define SPE_BLENDING_OVERLAY 3 3354 3355 vec3 spe_normalBlend( vec3 a, vec3 b, float alpha ) { 3356 return mix( a, b, alpha ); 3357 } 3358 3359 vec3 spe_multiplyBlend( vec3 a, vec3 b, float alpha ) { 3360 return mix( a, a * b, alpha ); 3361 } 3362 3363 vec3 spe_screenBlend( vec3 a, vec3 b, float alpha ) { 3364 vec3 tmp = 1.0 - ( 1.0 - a ) * ( 1.0 - b ); 3365 return mix( a, tmp, alpha ); 3366 } 3367 3368 vec3 spe_overlayBlend( vec3 a, vec3 b, float alpha ) { 3369 vec3 tmp = mix( 1. - 2. * (1. - a) * (1. - b), 2. * a * b, step( a, vec3(.5) ) ); 3370 return clamp( mix( a, tmp, alpha ), 0.0, 1.0 ); 3371 } 3372 3373 vec3 spe_blend( vec3 a, vec3 b, float alpha, int mode ) { 3374 if ( mode == SPE_BLENDING_NORMAL ) return spe_normalBlend( a, b, alpha ); 3375 else if ( mode == SPE_BLENDING_MULTIPLY ) return spe_multiplyBlend( a, b, alpha ); 3376 else if ( mode == SPE_BLENDING_SCREEN ) return spe_screenBlend( a, b, alpha ); 3377 else if ( mode == SPE_BLENDING_OVERLAY ) return spe_overlayBlend( a, b, alpha ); 3378 return vec3( 1.0 ); 3379 } 3380 `,"#include <packing>","#include <common>"].join(` 3381`),this.parsCode={vertex:["float neighbor_offset = 0.0001;",""].join(` 3382`),fragment:["float accumAlpha = 0.0;",`void accumulateAlpha(float alpha) { 3383 accumAlpha += (1.0 - accumAlpha) * alpha; 3384 }`,""].join(` 3385`)},this.code={vertex:"",fragment:""},this.nodeCode={vertex:"",fragment:""},this.resultCode={vertex:"",fragment:""},this.finalCode={vertex:"",fragment:""},this.inputs={uniforms:{list:[],vertex:[],fragment:[]},arrayUniforms:{list:[],vertex:[],fragment:[]},vars:{varying:[],vertex:[],fragment:[]}},this.defines={},this.uniforms={},this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.updaters=[],this.nodes=[],this.analyzing=!1}build(e,t){this.addVertexParsCode(S7),this.addFragmentParsCode(_e),this.buildShader("vertex",e),this.buildShader("fragment",t);for(let e=0;e<this.requires.uv.length;e++)if(this.requires.uv[e]){let t=e>0?e+1:"";this.addVaryCode("varying vec2 vUv"+t+";"),e>0&&this.addVertexParsCode("attribute vec2 uv"+t+";"),this.addVertexFinalCode("vUv"+t+" = uv"+t+";")}return this.requires.color[0]&&(this.addVaryCode("varying vec4 vColor;"),this.addVertexParsCode("attribute vec4 color;"),this.addVertexFinalCode("vColor = color;")),this.requires.color[1]&&(this.addVaryCode("varying vec4 vColor2;"),this.addVertexParsCode("attribute vec4 color2;"),this.addVertexFinalCode("vColor2 = color2;")),this.requires.position&&(this.addVaryCode("varying vec3 vPosition;"),this.addVertexFinalCode("vPosition = transformed;")),this.requires.worldPosition,this.requires.normal&&(this.addVaryCode("varying vec3 vObjectNormal;"),this.addVertexFinalCode("vObjectNormal = normal;")),this.requires.modelMatrix&&this.addFragmentParsCode("uniform mat4 modelMatrix;"),this.requires.viewMatrix&&this.addFragmentParsCode("uniform mat4 viewMatrix;"),this.requires.projectionMatrix&&this.addFragmentParsCode("uniform mat4 projectionMatrix;"),this.requires.worldNormal&&(this.addVaryCode("varying vec3 vWNormal;"),this.addVertexFinalCode("vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;")),this.requires.vWorldViewDir&&(this.addVaryCode("varying vec3 vWorldViewDir;"),this.addVertexFinalCode("vWorldViewDir = isPerspectiveMatrix( projectionMatrix ) ? ( (modelMatrix * vec4(position, 1.0)).xyz - cameraPosition ) : vec3( -viewMatrix[0][2], -viewMatrix[1][2], -viewMatrix[2][2] );")),this.needsJitter&&(this.addVertexFinalCode(_t),this.addFragmentFinalCode(_i)),this}buildShader(e,t){this.resultCode[e]=t.build(this.setShader(e),"v4")}setMaterial(e,t){return this.defines={},this}addFlow(e,t,i){return this.addSlot(e).addCache(t).addContext(i)}removeFlow(){return this.removeSlot().removeCache().removeContext()}addCache(e){return this.cache=e??"",this.caches.push(this.cache),this}removeCache(){return this.caches.pop(),this.cache=this.caches[this.caches.length-1]||"",this}addContext(e){return this.context=Object.assign({},this.context,e),this.context.extra=this.context.extra||{},this.contexts.push(this.context),this}
vendor: 4,493 bytes, lines 3385-3392
3385removeContext(){return this.contexts.pop(),this.context=this.contexts[this.contexts.length-1]||{},this}addSlot(e){return this.slot=e||"",this.slots.push(this.slot),this}removeSlot(){return this.slots.pop(),this.slot=this.slots[this.slots.length-1]||"",this}addFragmentVariable(e,t){void 0===this.fragmentVariables[e]&&(this.addFragmentCode(`${t} ${e};`),this.fragmentVariables[e]="")}addFragmentParsVariable(e,t){void 0===this.fragmentParsVariables[e]&&(this.addFragmentParsCode(`${t} ${e};`),this.fragmentParsVariables[e]="")}addVertexParsVariable(e,t){void 0===this.vertexParsVariables[e]&&(this.addVertexParsCode(`${t} ${e};`),this.vertexParsVariables[e]="")}addVertexCode(e){this.addCode(e,"vertex")}addFragmentCode(e){this.addCode(e,"fragment")}addCode(e,t){this.code[t??this.shader]+=e+` 3386`}addVertexNodeCode(e){this.addNodeCode(e,"vertex")}addFragmentNodeCode(e){this.addNodeCode(e,"fragment")}addNodeCode(e,t){this.nodeCode[t??this.shader]+=e+` 3387`}clearNodeCode(e){e=e??this.shader;let t=this.nodeCode[e];return this.nodeCode[e]="",t}clearVertexNodeCode(){return this.clearNodeCode("vertex")}clearFragmentNodeCode(){return this.clearNodeCode("fragment")}addVertexFinalCode(e){this.addFinalCode(e,"vertex")}addFragmentFinalCode(e){this.addFinalCode(e,"fragment")}addFinalCode(e,t){this.finalCode[t??this.shader]+=e+` 3388`}addVertexParsCode(e){this.addParsCode(e,"vertex")}addFragmentParsCode(e){this.addParsCode(e,"fragment")}addParsCode(e,t){this.parsCode[t??this.shader]+=e+` 3389`}addVaryCode(e){this.addVertexParsCode(e),this.addFragmentParsCode(e)}isCache(e){return -1!==this.caches.indexOf(e)}isSlot(e){return -1!==this.slots.indexOf(e)}define(e,t){this.defines[e]=void 0===t?1:t}require(e){this.requires[e]=!0}isDefined(e){return void 0!==this.defines[e]}getVar(e,t,i,r="varying",s="V",a=""){let o=this.getVars(r),l=o[e];if(!l){let r=o.length;l={name:i||"node"+s+r+(a?"_"+a:""),type:t},o.push(l),o[e]=l}return l}getTempVar(e,t,i,r){return this.getVar(e,t,i,this.shader,"T",r)}getAttribute(e,t){if(!this.attributes[e]){let i=this.getVar(e,t);this.addVertexParsCode("attribute "+t+" "+e+";"),this.addVertexFinalCode(i.name+" = "+e+";"),this.attributes[e]={varying:i,name:e,type:t}}return this.attributes[e]}getCode(e){return[this.prefixCode,this.parsCode[e],this.getVarListCode(this.getVars("varying"),"varying"),this.getVarListCode(this.inputs.uniforms[e],"uniform"),this.getVarListCode(this.inputs.arrayUniforms[e],"uniform"),this.getIncludesCode("consts",e),this.getIncludesCode("structs",e),this.getIncludesCode("functions",e),"void main() {",this.getVarListCode(this.getVars(e)),this.code[e],this.resultCode[e],this.finalCode[e],"}"].join(` 3390`)}getVarListCode(e,t){t=t??"";let i="";for(let r=0,s=e.length;r<s;++r){let s=e[r],a=s.type,o=s.name,l=s.size,h=this.getFormatByType(a);if(void 0===h)throw Error("Node pars "+h+" not found.");h.includes("[]")?i+=t+" "+h.substring(0,h.length-2)+" "+o+`[${l}]; 3391`:i+=t+" "+h+" "+o+`; 3392`}return i}getVars(e){return this.inputs.vars[e??this.shader]}getNodeData(e){let t=e instanceof SO?e.uuid:e;return this.nodeData[t]=this.nodeData[t]||{}}createUniform(e,t,i,r,s,a){if(t.includes("[]")){let o=this.inputs.arrayUniforms,l=o.list.length,h=new SR({type:t,size:i.size,name:r||"nodeUA"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}{let o=this.inputs.uniforms,l=o.list.length,h=new SR({type:t,name:r||"nodeU"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}}createVertexUniform(e,t,i,r,s){return this.createUniform("vertex",e,t,i,r,s)}createFragmentUniform(e,t,i,r,s){return this.createUniform("fragment",e,t,i,r,s)}include(e,t,i){let r;if(e="string"==typeof e?SL.get(e):e,!1===this.context.include)return e.name;e instanceof SG?r=this.includes.functions:e instanceof SW?r=this.includes.consts:e instanceof SY&&(r=this.includes.structs);let s=r[this.shader]=r[this.shader]||[];if(e){let r=s[e.name];if(r||(r=s[e.name]={node:e,deps:[]},s.push(r),r.src=e.build(this,"source")),e instanceof SG&&t&&s[t.name]&&-1===s[t.name].deps.indexOf(e)&&(s[t.name].deps.push(e),e.includes?.length)){let i=0;do this.include(e.includes[i++],t);while(i<e.includes.length)}return i&&(r.src=i),e.name}throw Error("Include not found.")}colorToVectorProperties(e){return e.replace("r","x").replace("g","y").replace("b","z").replace("a","w")}colorToVector(e){return e.replace(/c/g,"v3")}getIncludes(e,t){return this.includes[e][t||this.shader]}
3392getConstructorFromLength(e){return _n[e-1]}isTypeMatrix(e){return/^m/.test(e)}getTypeLength(e){return"f"===e?1:parseInt(this.colorToVector(e).substr(1))}getTypeFromLength(e){return 1===e?"f":"v"+e}findNode(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(i?.isNode)return i}}resolve(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(void 0!==i){if(i.isNode)return i;if(i.isTexture)switch(i.mapping){case 301:case 302:return new S9(i);case 306:return new S8(new SJ(i));default:return new SJ(i)}else{if(i.isVector2)return new SF(i);if(i.isVector3)return new SN(i);if(i.isVector4)return new Sk(i)}}}}format(e,t,i){switch(this.colorToVector(i+" <- "+t)){case"f <- v2":case"f <- v3":case"f <- v4":return e+".x";case"f <- i":case"f <- b":return"float( "+e+" )";case"v2 <- f":return"vec2( "+e+" )";case"v2 <- v3":case"v2 <- v4":return e+".xy";case"v2 <- i":case"v2 <- b":case"v3 <- i":case"v3 <- b":return"vec2( float( "+e+" ) )";case"v3 <- f":return"vec3( "+e+" )";case"v3 <- v2":return"vec3( "+e+", 0.0 )";case"v3 <- v4":return e+".xyz";case"v4 <- f":return"vec4( "+e+" )";case"v4 <- v2":return"vec4( "+e+", 0.0, 1.0 )";case"v4 <- v3":return"vec4( "+e+", 1.0 )";case"v4 <- i":case"v4 <- b":return"vec4( float( "+e+" ) )";case"i <- f":case"i <- b":return"int( "+e+" )";case"i <- v2":case"i <- v3":case"i <- v4":return"int( "+e+".x )";case"b <- f":return"( "+e+" != 0.0 )";case"b <- v2":return"( "+e+" != vec2( 0.0 ) )";case"b <- v3":return"( "+e+" != vec3( 0.0 ) )";case"b <- v4":return"( "+e+" != vec4( 0.0 ) )";case"b <- i":return"( "+e+" != 0 )"}return e}getTypeByFormat(e){return _o[e]||e}getFormatByType(e){return _l[e]||e}getUUID(e,t){return(t=void 0===t||t)&&this.cache&&(e=this.cache+"-"+e),e}getElementByIndex(e){return _a[e]}getIndexByElement(e){return _a.indexOf(e)}isShader(e){return this.shader===e}setShader(e){return this.shader=e,this}mergeDefines(e){for(let t in e)this.defines[t]=e[t];return this.defines}mergeUniform(e){for(let t in e)this.uniforms[t]=e[t];return this.uniforms}getTextureEncodingFromMap(e){let t;return e?e.isTexture&&(t=e.encoding):t=3e3,3e3===t&&this.context.gamma&&(t=3001),t}},_c=class extends Sz{constructor(e=0,t,i,r){super("c"),this.nodeType="Color",this.value=e instanceof SU?e:new SU(e||0,t,i,r)}setRGBA(e){this.value.setRGBA(e.r,e.g,e.b,e.a)}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i),l=this.getReadonly()&&void 0!==this.generateReadonly;if(this.alpha){let t=this.alpha.build(e,"f");e.addFragmentNodeCode(`accumAlpha += ( 1.0 - accumAlpha ) * ${t};`)}return l?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.r+", "+this.value.g+", "+this.value.b+")",r,t)}},_d=class extends Sz{constructor(e){super("i"),this.nodeType="Int",this.value=Math.floor(e??0)}generateReadonly(e,t,i,r,s,a){return e.format(this.value.toString(),r,t)}},_u=class extends Sz{constructor(e){super("b"),this.nodeType="Bool",this.value=e??!1}generateReadonly(e,t,i,r){return e.format(this.value?"true":"false",r,t)}},_p=class extends Sz{constructor(e=1,t){super("f[]"),this.nodeType="FloatArray",this.size=e,this.value=Array.isArray(t)?t:"number"==typeof t?Array(e).fill(t):Array(e).fill(0)}},_f=class extends Sz{},_m=class extends _f{constructor(e){super("v3"),this.image=e,this._value=new ix}get value(){return this._value.x=this.image.isVideo?this.image.img.videoWidth??0:this.image.img.width,this._value.y=this.image.isVideo?this.image.img.videoHeight??0:this.image.img.height,this._value}},_g=class extends _f{constructor(e,t,i=1008,r=1006){super("t"),this.image=e,this.wrap=t,this.minFilter=i,this.magFilter=r}get value(){return this.image.getTexture(this.wrap,this.minFilter,this.magFilter)}},_v=class extends Sz{constructor(e){super("m3"),this.nodeType="Matrix3",this.value=e??new tJ}generateReadonly(e,t,i,r,s,a){return e.format("mat3("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}},_y=class extends Sz{constructor(e){super("m4"),this.nodeType="Matrix4",this.value=e??new iQ}generateReadonly(e,t,i,r,s,a){return e.format("mat4("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}};function _x(e,t,i,r=0){e.setUvTransform(i[0],i[1],t[0],t[1],0,0,0).premultiply(new tJ().makeRotation(r*tZ.DEG2RAD))}var _b=class extends _v{constructor(e,t,i=0){super(new tJ),this.repeat=e,this.offset=t,this.rotation=i,_x(this.value,e,t,i)}updateMatrix(){_x(this.value,this.repeat,this.offset,this.rotation)}},_w=class extends Sz{constructor(e=1,t){super("v4[]"),this.nodeType="Vector4Array",this.size=e,this.value=Array.isArray(t)?t:t instanceof iu?Array(e).fill(t):Array(e).fill(new iu(0))}},_S=class extends SB{constructor(e,t,i,r){super("v3"),this.nodeType="Blend",this.a=e,this.b=t,this.alpha=i,this.mode=r}generate(e,t){if(!e.isShader("fragment"))return console.warn("BlendNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=[];return i.push(this.a.build(e,"c")),i.push(this.b.build(e,"c")),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),e.format("spe_blend("
3392+i.join(",")+")",this.getType(e),t)}}},__=class extends SB{constructor(e,t){super("v3"),this.nodeType="CustomColor",this.color=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomColorNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(__.Nodes.customColor);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.color.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.build(e,"v3")})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};__.Nodes={customColor:new SG(`vec3 customColor(vec3 color, float mask, float alpha, out float calpha) { 3393 float lalpha = alpha * mask; 3394 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3395 accumAlpha += (1.0 - accumAlpha) * lalpha; 3396 3397 return color; 3398 }`)};var _A=class extends SB{constructor(e,t){super("v3"),this.nodeType="CustomNormal",this.cnormal=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomNormalNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(_A.Nodes.customNormal);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.cnormal.build(e,"v3")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_A.Nodes={customNormal:new SG(`vec3 customNormal(vec3 cnormal, vec3 norm, float mask, float alpha, out float calpha) { 3399 vec3 normal = packNormalToRGB( norm ).rgb; 3400 normal *= step( vec3(0.5), cnormal ); 3401 3402 float lalpha = alpha * mask; 3403 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3404 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 3405 3406 return normal; 3407 }`)};var _M=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="CustomTexture",this.texture=e,this.textureSize=t,this.crop=i,this.projection=r,this.axis=s,this.side=a,this.size=o,this.blending=l,this.mat=h,this.isMask=u,this.alpha=c,this.mode=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){e.require("position"),e.require("normal"),e.require("uv"),e.requires.uv=[!0],e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0;let i=`g${this.uuid.toString().replace(/-/g,"")}`,r;switch(this.projection.value){case 3:r=e.include(_M.Nodes.cylindrical);break;case 2:r=e.include(_M.Nodes.spherical);break;case 1:let s=["vec3(1.0, 0.0, 0.0)","vec3(0.0, 1.0, 0.0)","vec3(0.0, 0.0, 1.0)"][this.axis.value],a=["zy","xz","xy"][this.axis.value],o=new SG(` 3408 vec3 ${i}_planarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3409 vec2 projected = (1. + (position.${a})) / 2.; 3410 vec2 uvs = ( mat * vec3( (projected * 2. - 1.) / (size * .5), 1. ) / 2. + 0.5 ).xy; 3411 writeUv = uvs; 3412 3413 vec4 tmp = texture2D( tex, uvs ); 3414 3415 vec3 col = tmp.rgb; 3416 float lalpha = alpha * tmp.a; 3417 ${2===this.side.value?"":`lalpha *= step(0.0, ${1===this.side.value?"-1.0 * ":""}dot(vObjectNormal, ${s}));`} 3418 3419 if ( crop > 0.5 ) { 3420 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3421 lalpha = 0.0; 3422 } 3423 } 3424 3425 lalpha *= mask; 3426 3427 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3428 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3429 3430 return col; 3431 }`);r=e.include(o);break;case 4:r=e.include(_M.Nodes.triplanar);break;default:r=e.include(_M.Nodes.uv)}e.addFragmentVariable(this.calpha,"float");let l=[];if(l.push("normal"),l.push(this.texture.generate(e,"t")),l.push(this.textureSize.build(e,"v2")),l.push(this.crop.build(e,"f")),l.push(this.mat.build(e,"mat3")),l.push(this.size.build(e,"v2")),l.push(this.blending.build(e,"f")),l.push(this.isMask.build(e,"b")),l.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),l.push(this.alpha.build(e,"f")),l.push(this.mode.build(e,"i")),l.push(this.calpha),4===this.projection.value){let t=`${i}_writeUvs`,r=t+"0",s=t+"1",a=t+"2",o=`${i}_triplanarWeights`;e.addFragmentVariable(r,"vec2"),e.addFragmentVariable(s,"vec2"),e.addFragmentVariable(a,"vec2"),e.addFragmentVariable(o,"vec3"),l.push(r),l.push(s),l.push(a),l.push(o)}else{let t=`${i}_writeUvs`;e.addFragmentVariable(t,"vec2"),l.push(t)}return e.format(r+"("+l.join(",")+")",this.getType(e),t)}};_M.Nodes={cylindrical:new SG(` 3432vec3 cylindricalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3433 vec3 posN = normalize(position); 3434 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3435 float scaledHeight = position.y / (size.y * 0.5); 3436 float v = (scaledHeight / 2.) + .5; 3437 3438 vec2 calculatedUv = vec2(u,v); 3439 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3440 writeUv = uvs; 3441 3442 vec2 df = fwidth(uvs); 3443 if(df.x > 0.5) df.x = 0.; 3444 3445 #ifdef GL_EXT_shader_texture_lod 3446 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3447 #else 3448 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3449 #endif 3450 3451 vec3 col = tmp.rgb;
3452 float lalpha = alpha * tmp.a; 3453 if ( crop > 0.5 ) { 3454 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3455 lalpha = 0.0; 3456 } 3457 } 3458 3459 lalpha *= mask; 3460 3461 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3462 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3463 3464 return col; 3465 } 3466`),spherical:new SG(` 3467vec3 sphericalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3468 vec3 posN = normalize(vPosition); 3469 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3470 float v = 0.5 + asin(posN.y) / 3.1415; 3471 3472 vec2 calculatedUv = vec2(u,v); 3473 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3474 writeUv = uvs; 3475 3476 vec2 df = fwidth(uvs); 3477 if(df.x > 0.5) df.x = 0.; 3478 #ifdef GL_EXT_shader_texture_lod 3479 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3480 #else 3481 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3482 #endif 3483 3484 vec3 col = tmp.rgb; 3485 float lalpha = alpha * tmp.a; 3486 if ( crop > 0.5 ) { 3487 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3488 lalpha = 0.0; 3489 } 3490 } 3491 3492 lalpha *= mask; 3493 3494 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3495 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3496 3497 return col; 3498 } 3499`),uv:new SG(`vec3 uvTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3500 vec2 uvs = ( mat * vec3( vUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3501 writeUv = uvs; 3502 3503 vec4 tmp = texture2D( tex, uvs ); 3504 3505 vec3 col = tmp.rgb; 3506 3507 float lalpha = alpha * tmp.a; 3508 if ( crop > 0.5 ) { 3509 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3510 lalpha = 0.0; 3511 } 3512 } 3513 3514 lalpha *= mask; 3515 3516 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3517 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3518 3519 return col; 3520 }`),triplanar:new SG(`vec3 triplanarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUvs0, out vec2 writeUvs1, out vec2 writeUvs2, out vec3 writeWeights) { 3521 vec3 p = position; 3522 vec2 uv0 = (1.0 + p.xy) / 2.0; 3523 vec2 uv1 = (1.0 + p.zy) / 2.0; 3524 vec2 uv2 = (1.0 + p.xz) / 2.0; 3525 3526 uv0 = (mat * vec3((uv0 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3527 uv1 = (mat * vec3((uv1 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3528 uv2 = (mat * vec3((uv2 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3529 3530 // Range from 3 to 128 seems to be good 3531 float exponent = (1.0 - blending) * 125.0 + 3.0; 3532 3533 vec3 n = vObjectNormal; 3534 vec3 weights = abs(normalize(n)); 3535 weights = pow(weights, vec3(exponent)); 3536 weights /= dot(weights, vec3(1.0)); 3537 3538 // Write out all sets of UVs that we generated 3539 writeUvs0 = uv0; 3540 writeUvs1 = uv1; 3541 writeUvs2 = uv2; 3542 writeWeights = weights; 3543 3544 // Derivatives for LOD 3545 vec2 df0 = fwidth(uv0); 3546 vec2 df1 = fwidth(uv1); 3547 vec2 df2 = fwidth(uv2); 3548 if (df0.x > 0.5) df0.x = 0.0; 3549 if (df1.x > 0.5) df1.x = 0.0; 3550 if (df2.x > 0.5) df2.x = 0.0; 3551 3552 #ifdef GL_EXT_shader_texture_lod 3553 vec4 tmp = 3554 texture2DLodEXT(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3555 texture2DLodEXT(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3556 texture2DLodEXT(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3557 #else 3558 vec4 tmp = 3559 textureLod(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3560 textureLod(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3561 textureLod(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3562 #endif 3563 3564 vec3 col = tmp.rgb;
3565 float lalpha = alpha * tmp.a; 3566 3567 // Apply cropping across all 3 planes 3568 if ( crop > 0.5 ) { 3569 if ( uv0.x < 0.0 || uv0.x > 1.0 || uv0.y < 0.0 || uv0.y > 1.0 ) { 3570 lalpha = 0.0; 3571 } 3572 if ( uv1.x < 0.0 || uv1.x > 1.0 || uv1.y < 0.0 || uv1.y > 1.0 ) { 3573 lalpha = 0.0; 3574 } 3575 if ( uv2.x < 0.0 || uv2.x > 1.0 || uv2.y < 0.0 || uv2.y > 1.0 ) { 3576 lalpha = 0.0; 3577 } 3578 } 3579 3580 lalpha *= mask; 3581 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3582 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3583 3584 return col;//n * 0.5 + 0.5; 3585 } 3586 `)};var _E=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="Depth",this.gradientType=e,this.smooth=t,this.near=i,this.far=r,this.isVector=s,this.isWorldSpace=a,this.origin=o,this.direction=l,this.colors=h,this.steps=c,this.isMask=u,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`,r=new SG(`vec3 ${i}_sdepth(float near, float far, vec3 origin, vec3 direction, vec4 colors[${i}_MAX_COLORS], float steps[${i}_MAX_COLORS], bool isMask, float mask, float alpha, out float calpha) { 3587 vec4 color = colors[0]; 3588 #ifdef ${i}_IS_VECTOR 3589 #ifdef ${i}_LINEAR 3590 #ifdef ${i}_WORLDSPACE 3591 float depth = vectorLinearWorldSpaceDepth(direction, origin, near, far); 3592 #else 3593 float depth = vectorLinearObjectSpaceDepth(direction, origin, near, far); 3594 #endif 3595 #else 3596 #ifdef ${i}_WORLDSPACE 3597 float depth = vectorSphericalWorldSpaceDepth(origin, near, far); 3598 #else 3599 float depth = vectorSphericalObjectSpaceDepth(origin, near, far); 3600 #endif 3601 #endif 3602 #else 3603 float dist = length(vWPosition - cameraPosition); 3604 float depth = ( dist - near ) / ( far - near ); 3605 #endif 3606 3607 3608 float p; 3609 #ifdef ${i}_SMOOTH 3610 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3611 p = clamp( ( depth - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3612 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3613 } 3614 #else 3615 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3616 p = clamp(( depth - steps[i - 1] ) / ( steps[i] - steps[i - 1] ), 0.0, 1.0); 3617 color = mix(color, colors[i], p); 3618 } 3619 #endif 3620 3621 float lalpha = alpha * color.a * mask; 3622 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3623 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3624 3625 return color.rgb; 3626 }`,[_E.Nodes.vectorLinearWorldSpaceDepth,_E.Nodes.vectorLinearObjectSpaceDepth,_E.Nodes.vectorSphericalObjectSpaceDepth,_E.Nodes.vectorSphericalWorldSpaceDepth]);if(!e.isShader("fragment"))return console.warn("DepthNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define(`${i}_MAX_COLORS`,this.colors.value.length),this.smooth.value&&e.define(`${i}_SMOOTH`),this.isVector.value>.5&&e.define(`${i}_IS_VECTOR`),0===this.gradientType.value&&e.define(`${i}_LINEAR`),this.isWorldSpace.value>.5&&e.define(`${i}_WORLDSPACE`),e.require("worldPosition"),e.addFragmentVariable(this.calpha,"float");let s=e.include(r),a=[];return a.push(this.near.build(e,"f")),a.push(this.far.build(e,"f")),a.push(this.origin.build(e,"v3")),a.push(this.direction.build(e,"v3")),a.push(this.colors.build(e,"v4[]")),a.push(this.steps.build(e,"f[]")),a.push(this.isMask.build(e,"b")),a.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),a.push(this.alpha.build(e,"f")),a.push(this.calpha),e.format(s+"("+a.join(",")+")",this.getType(e),t)}}};_E.Nodes={vectorLinearWorldSpaceDepth:new SG(`float vectorLinearWorldSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3627 vec3 n = normalize(direction); 3628 float dist = (n.x*(vWPosition.x - origin.x) + n.y*(vWPosition.y - origin.y) + n.z*(vWPosition.z - origin.z)); 3629 return ( dist - near ) / ( far - near ); 3630 }`),vectorLinearObjectSpaceDepth:new SG(`float vectorLinearObjectSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3631 vec3 n = normalize(direction); 3632 float dist = (n.x*(position.x - origin.x) + n.y*(position.y - origin.y) + n.z*(position.z - origin.z)); 3633 return ( dist - near ) / ( far - near ); 3634 }`),vectorSphericalWorldSpaceDepth:new SG(`float vectorSphericalWorldSpaceDepth(vec3 origin, float near, float far) { 3635 float dist = length(vWPosition - origin); 3636 return ( dist - near ) / ( far - near ); 3637 }`),vectorSphericalObjectSpaceDepth:new SG(`float vectorSphericalObjectSpaceDepth(vec3 origin, float near, float far) { 3638 float dist = length(position - origin); 3639 return ( dist - near ) / ( far - near ); 3640 }`)};var _C=class extends SB{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Fresnel",this.color=e,this.bias=t,this.scale=i,this.intensity=r,this.factor=s,this.isMask=l,this.alpha=a,this.mode=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("FresnelNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");
3640let i=new SG(`vec3 fresnel(vec3 color, float bias, float scale, float intensity, float factor, bool isMask, float mask, float alpha, int mode, out float calpha) { 3641 float fresnel = bias + scale * pow( abs( factor + dot( normalize( vWorldViewDir ), normalize( vWNormal ) ) ), intensity ); 3642 3643 float lalpha = clamp(fresnel, 0.0, 1.0) * alpha * mask; 3644 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3645 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3646 3647 return color; 3648 }`),r=e.include(i),s=[];return s.push(this.color.build(e,"c")),s.push(this.bias.build(e,"f")),s.push(this.scale.build(e,"f")),s.push(this.intensity.build(e,"f")),s.push(this.factor.build(e,"f")),s.push(this.isMask.build(e,"b")),s.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),s.push(this.alpha.build(e,"f")),s.push(this.mode.build(e,"i")),s.push(this.calpha),e.format(r+"("+s.join(",")+")",this.getType(e),t)}}},_T=class extends SB{constructor(e,t,i,r,s,a,o,l,h){super("v3"),this.nodeType="Gradient",this.gradientType=e,this.smooth=t,this.colors=i,this.steps=r,this.offset=s,this.morph=a,this.angle=o,this.isMask=h,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("GradientNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("GRAD_MAX",10),e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_T.Nodes.gradient),r=[];return r.push(this.gradientType.build(e,"i")),r.push(this.smooth.build(e,"b")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.offset.build(e,"v2")),r.push(this.morph.build(e,"v2")),r.push(this.angle.build(e,"f")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_T.Nodes={gradient:new SG(`vec3 gradient(int gradientType, bool smoothed, vec4 colors[GRAD_MAX], float steps[GRAD_MAX], vec2 offset, vec2 morph, float angle, bool isMask, float mask, float alpha, out float calpha) { 3649 vec4 color = colors[0]; 3650 vec2 m = morph / vUv.xy; 3651 vec2 rot = vec2( 0.5 + m.x, m.y ); 3652 vec2 dt = vec2( 3653 cos( angle ) * rot.x - sin( angle ) * rot.y, 3654 sin( angle ) * rot.x + cos( angle ) * rot.y 3655 ); 3656 vec2 pt = ( vUv - 0.5 + offset ) / 2.0 + dt / 2.0; 3657 float t = dot( pt, dt ) / dot( dt, dt ); 3658 if ( gradientType == 1 ) { 3659 t = distance ( 3660 ( vUv + morph ) * 3.0, 3661 ( vUv + offset ) + 1.0 3662 ) + angle; 3663 } else if ( gradientType == 2 ) { 3664 float polar = atan( 3665 vUv.x + morph.x - 0.5 + offset.x, 3666 vUv.y + morph.y - 0.5 + offset.y 3667 ) * -1.0; 3668 t = fract( ( angle / PI / -2.0 ) + 0.5 * ( polar / PI ) ); 3669 } 3670 3671 float p; 3672 if (smoothed) { 3673 for ( int i = 1; i < GRAD_MAX; i++ ) { 3674 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3675 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3676 } 3677 3678 } else { 3679 for ( int i = 1; i < GRAD_MAX; i++ ) { 3680 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3681 color = mix(color, colors[i], p); 3682 } 3683 } 3684 3685 float lalpha = alpha * color.a * mask; 3686 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3687 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3688 3689 return color.xyz; 3690 }`)};var _P=class extends SB{constructor(e,t,i,r,s){super("v3"),this.nodeType="Matcap",this.texture=e,this.isMask=r,this.alpha=t,this.mode=i,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`,this.rotation=s}generate(e,t){if(!e.isShader("fragment"))return console.warn("MatcapNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");let i=e.include(_P.Nodes.matcap);e.require("normal"),e.requires.normal=!0;let r=[];return r.push(this.texture.generate(e,"t")),r.push("normal"),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.mode.build(e,"i")),r.push(this.calpha),r.push(this.rotation.build(e,"f")),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_P.Nodes={matcap:new SG(`vec3 matcap(sampler2D matcapTex, vec3 normal, bool isMask, float mask, float alpha, int mode, out float calpha, float rotation) { 3691 vec3 viewDir = normalize( vViewPosition ); 3692 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 3693 vec3 y = cross( viewDir, x ); 3694 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ); 3695 uv = mat2( cos(rotation), sin(rotation), -sin(rotation), cos(rotation) ) * uv; 3696 uv = uv * 0.495 + 0.5;
3697 vec4 matcapColor = texture2D( matcapTex, uv ); 3698 3699 float lalpha = alpha * mask; 3700 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3701 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3702 3703 return matcapColor.rgb; 3704 }`)};var _D=((eS=_D||{}).SIMPLEX="simplex3d",eS.SIMPLEX_FRACTAL="simplex3dFractal",eS.ASHIMA="simplexAshima",eS.FBM="fbm",eS.PERLIN="perlin",eS.VORONOI="voronoi",eS),_I=(e_=new SG(`vec3 random3(vec3 c) { 3705 float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0))); 3706 vec3 r; 3707 r.z = fract(512.0*j); 3708 j *= .125; 3709 r.x = fract(512.0*j); 3710 j *= .125; 3711 r.y = fract(512.0*j); 3712 return r-0.5; 3713 }`),(eA=new SG(`float simplex3d(vec3 p) { 3714 vec3 s = floor(p + dot(p, vec3(F3))); 3715 vec3 x = p - s + dot(s, vec3(G3)); 3716 3717 vec3 e = step(vec3(0.0), x - x.yzx); 3718 vec3 i1 = e*(1.0 - e.zxy); 3719 vec3 i2 = 1.0 - e.zxy*(1.0 - e); 3720 3721 vec3 x1 = x - i1 + G3; 3722 vec3 x2 = x - i2 + 2.0*G3; 3723 vec3 x3 = x - 1.0 + 3.0*G3; 3724 3725 vec4 w, d; 3726 3727 w.x = dot(x, x); 3728 w.y = dot(x1, x1); 3729 w.z = dot(x2, x2);
3730 w.w = dot(x3, x3); 3731 3732 w = max(0.6 - w, 0.0); 3733 3734 d.x = dot(random3(s), x); 3735 d.y = dot(random3(s + i1), x1); 3736 d.z = dot(random3(s + i2), x2); 3737 d.w = dot(random3(s + 1.0), x3); 3738 3739 w *= w; 3740 w *= w; 3741 d *= w; 3742 3743 return dot(d, vec4(52.0)); 3744 }`,[e_])).keywords.F3=new SW("float F3 0.3333333"),eA.keywords.G3=new SW("float G3 0.1666667"),eM=new SG(`float simplex3dFractal(vec3 m) { 3745 mat3 rot1 = mat3(-0.37, 0.36, 0.85,-0.14,-0.93, 0.34,0.92, 0.01,0.4); 3746 mat3 rot2 = mat3(-0.55,-0.39, 0.74, 0.33,-0.91,-0.24,0.77, 0.12,0.63); 3747 mat3 rot3 = mat3(-0.71, 0.52,-0.47,-0.08,-0.72,-0.68,-0.7,-0.45,0.56); 3748 return 0.5333333 * simplex3d(m * rot1) 3749 + 0.2666667 * simplex3d(2.0 * m * rot2) 3750 + 0.1333333 * simplex3d(4.0 * m * rot3) 3751 + 0.0666667 * simplex3d(8.0 * m); 3752 }`,[eA]),eE=new SG("vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}"),eC=new SG("vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}"),eT=new SG(`float simplexAshima(vec3 v) { 3753 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 3754 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 3755 vec3 i = floor(v + dot(v, C.yyy) ); 3756 vec3 x0 = v - i + dot(i, C.xxx) ; 3757 vec3 g = step(x0.yzx, x0.xyz); 3758 vec3 l = 1.0 - g; 3759 vec3 i1 = min( g.xyz, l.zxy ); 3760 vec3 i2 = max( g.xyz, l.zxy ); 3761 vec3 x1 = x0 - i1 + 1.0 * C.xxx; 3762 vec3 x2 = x0 - i2 + 2.0 * C.xxx; 3763 vec3 x3 = x0 - 1. + 3.0 * C.xxx; 3764 i = mod(i, 289.0 ); 3765 vec4 p = permute( permute( permute( 3766 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 3767 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 3768 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 3769 float n_ = 1.0/7.0; // N=7 3770 vec3 ns = n_ * D.wyz - D.xzx; 3771 vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N) 3772 vec4 x_ = floor(j * ns.z); 3773 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 3774 vec4 x = x_ *ns.x + ns.yyyy; 3775 vec4 y = y_ *ns.x + ns.yyyy; 3776 vec4 h = 1.0 - abs(x) - abs(y); 3777 vec4 b0 = vec4( x.xy, y.xy ); 3778 vec4 b1 = vec4( x.zw, y.zw ); 3779 vec4 s0 = floor(b0)*2.0 + 1.0; 3780 vec4 s1 = floor(b1)*2.0 + 1.0; 3781 vec4 sh = -step(h, vec4(0.0)); 3782 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 3783 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 3784 vec3 p0 = vec3(a0.xy,h.x); 3785 vec3 p1 = vec3(a0.zw,h.y); 3786 vec3 p2 = vec3(a1.xy,h.z); 3787 vec3 p3 = vec3(a1.zw,h.w); 3788 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 3789 p0 *= norm.x; 3790 p1 *= norm.y; 3791 p2 *= norm.z; 3792 p3 *= norm.w; 3793 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 3794 m = m * m; 3795 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 3796 dot(p2,x2), dot(p3,x3) ) ); 3797 }`,[eE,eC]),eP=new SG("vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;}"),eD=new SG("vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);}",[eP]),eI=new SG(`float noise(vec3 p){ 3798 vec3 a = floor(p); 3799 vec3 d = p - a; 3800 d = d * d * (3.0 - 2.0 * d); 3801 vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); 3802 vec4 k1 = perm(b.xyxy); 3803 vec4 k2 = perm(k1.xyxy + b.zzww); 3804 vec4 c = k2 + a.zzzz; 3805 vec4 k3 = perm(c); 3806 vec4 k4 = perm(c + 1.0); 3807 vec4 o1 = fract(k3 * (1.0 / 41.0)); 3808 vec4 o2 = fract(k4 * (1.0 / 41.0)); 3809 vec4 o3 = o2 * d.z + o1 * (1.0 - d.z); 3810 vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); 3811 return o4.y * d.y + o4.x * (1.0 - d.y); 3812 }`,[eD]),(eO=new SG(`float fbm(vec3 x) { 3813 float v = 0.0; 3814 float a = 0.5; 3815 vec3 shift = vec3(100); 3816 for (int i = 0; i < NUM_OCTAVES; ++i) { 3817 v += a * noise(x); 3818 x = x * 2.0 + shift; 3819 a *= 0.5; 3820 } 3821 return v; 3822 }`,[eI])).keywords.NUM_OCTAVES=new SW("int NUM_OCTAVES 5"),eR=new SG("vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}"),eL=new SG(`float perlin(vec3 P){ 3823 vec3 Pi0 = floor(P); 3824 vec3 Pi1 = Pi0 + vec3(1.0); 3825 Pi0 = mod(Pi0, 289.0); 3826 Pi1 = mod(Pi1, 289.0); 3827 vec3 Pf0 = fract(P); 3828 vec3 Pf1 = Pf0 - vec3(1.0); 3829 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 3830 vec4 iy = vec4(Pi0.yy, Pi1.yy); 3831 vec4 iz0 = Pi0.zzzz; 3832 vec4 iz1 = Pi1.zzzz; 3833 vec4 ixy = permute(permute(ix) + iy); 3834 vec4 ixy0 = permute(ixy + iz0); 3835 vec4 ixy1 = permute(ixy + iz1); 3836 vec4 gx0 = ixy0 / 7.0; 3837 vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5; 3838 gx0 = fract(gx0); 3839 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 3840 vec4 sz0 = step(gz0, vec4(0.0)); 3841 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 3842 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 3843 vec4 gx1 = ixy1 / 7.0; 3844 vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5; 3845 gx1 = fract(gx1); 3846 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 3847 vec4 sz1 = step(gz1, vec4(0.0)); 3848 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 3849 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 3850 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 3851 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 3852 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 3853 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 3854 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 3855 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 3856 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 3857 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 3858 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 3859 g000 *= norm0.x; 3860 g010 *= norm0.y; 3861 g100 *= norm0.z; 3862 g110 *= norm0.w; 3863 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 3864 g001 *= norm1.x; 3865 g011 *= norm1.y; 3866 g101 *= norm1.z; 3867 g111 *= norm1.w; 3868 float n000 = dot(g000, Pf0); 3869 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 3870 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 3871 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 3872 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 3873 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 3874 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 3875 float n111 = dot(g111, Pf1); 3876 vec3 fade_xyz = fade(Pf0); 3877 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 3878 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 3879 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 3880 return 2.2 * n_xyz; 3881 }`,[eE,eC,eR]),eB=new SG(`float hashwithoutsine13(vec3 p3) 3882 { 3883 p3 = fract(p3 * .1031); 3884 p3 += dot(p3, p3.yzx + 33.33); 3885 return fract((p3.x + p3.y) * p3.z); 3886 }`),ez=new SG(`vec3 hashwithoutsine33(vec3 p3) 3887 { 3888 p3 = fract(p3 * vec3(.1031, .1030, .0973)); 3889 p3 += dot(p3, p3.yxz+33.33); 3890 return fract((p3.xxy + p3.yxx)*p3.zyx); 3891 }`),eF=new SG(`float metric(in vec3 p) 3892 { 3893 // L2 3894 return length(p); 3895 3896 // Chebyshev 3897 // vec3 a = abs(p); 3898 // return max(a.x, max(a.y, a.z)); 3899 }`),eN=new SG(`float smin( float a, float b, float k ) 3900 { 3901 float h = smoothstep(0.0, 1.0, 0.5 + 0.5 * (b - a) / k); 3902 float correction = k * h * (1.0 - h); 3903 return mix(b, a, h) - correction; 3904 }`),eU=new SG(`float smax( float a, float b, float k ) 3905 { 3906 float h = smoothstep(1.0, 0.0, 0.5 + 0.5 * (a - b) / k); 3907 float correction = k * h * (1.0 - h); 3908 return mix(a, b, h) + correction; 3909 }`),ek=new SG(`float remap(float value, float input_min, float input_max, float output_min, float output_max) { 3910 // Compute width of each interval 3911 float input_width = input_max - input_min; 3912 float output_width = output_max - output_min; 3913 3914 // Convert input range into a 0-1 range 3915 float scaled = (value - input_min) / input_width; 3916 3917 // Convert the 0-1 range into a value in output range 3918 return output_min + (scaled * output_width); 3919 }
3919`),{simplex:eA,simplexFractal:eM,simplexAshima:eT,fbm:eO,perlin:eL,voronoi:new SG(`float voronoi(in vec3 x, in int style, in float smoothness, in float seed, in int quality) 3920 { 3921 // Integer and fractional parts of this point's coordinates 3922 ivec3 p = ivec3(floor(x)); 3923 vec3 f = fract(x); 3924 3925 // Different variables that we will use to construct noise: 3926 // 3927 // f1: distance to the closest feature point 3928 // f2: distance to the second closest feature point 3929 // e: distance to the closest edge (cell boundary) 3930 // 3931 // We also compute "smooth" versions of all of the above quantites, essentially 3932 // replacing "hard" minimums with "smooth" minimums (described by IQ) 3933 float f1_smooth = 8.0; 3934 float f1 = 8.0; 3935 float f2_smooth = 8.0; 3936 float f2 = 8.0; 3937 float e_smooth = 8.0; 3938 float e = 8.0; 3939 3940 // Variables stored from closest cell 3941 ivec3 mb; 3942 vec3 mr; 3943 3944 int steps = quality; 3945 3946 for (int x = -steps; x <= steps; x++) 3947 for (int y = -steps; y <= steps; y++) 3948 for (int z = -steps; z <= steps; z++) 3949 { 3950 ivec3 b = ivec3(x, y, z); 3951 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 3952 float d = length(r); 3953 3954 f1_smooth = smin(d, f1_smooth, smoothness); 3955 3956 // Store un-smoothed distances too 3957 if (d < f1) 3958 { 3959 f2 = f1; 3960 f1 = d; 3961 3962 mb = ivec3(x, y, z); 3963 mr = r; 3964 } 3965 else if (d < f2) 3966 { 3967 f2 = d; 3968 } 3969 } 3970 3971 float id = hashwithoutsine13(vec3(p + mb) + seed); 3972 3973 // Second pass for edge distance 3974 for (int x = -steps; x <= steps; x++) 3975 for (int y = -steps; y <= steps; y++) 3976 for (int z = -steps; z <= steps; z++) 3977 { 3978 // Start search at the cell that contains the closest point to "x" (found in 1st pass) 3979 ivec3 b = mb + ivec3(x, y, z); 3980 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 3981 float d1 = dot(0.5 * (mr + r), (r - mr)); // IQ normalizes "r - mr" but that breaks things for the smooth version? 3982 float d2 = dot(0.5 * (mr + r), normalize(r - mr)); 3983 3984 e_smooth = smin(d1, e_smooth, smoothness); 3985 3986 e = min(e, d2); 3987 3988 // Also compute a smooth version of F2 in this pass 3989 { 3990 ivec3 b = ivec3(x, y, z); 3991 if (b != mb) 3992 { 3993 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 3994 float d = length(r); 3995 3996 f2_smooth = smin(d, f2_smooth, smoothness); 3997 } 3998 } 3999 } 4000 4001 // Different visualization modes 4002 if (style == 0) 4003 { 4004 return f1_smooth; 4005 } 4006 if (style == 1) 4007 { 4008 return f2_smooth; 4009 } 4010 if (style == 2) 4011 { 4012 return f2_smooth - f1_smooth; 4013 4014 // "Pebbles" also cool 4015 //return step(0.2, f2_smooth - f1_smooth); 4016 } 4017 if (style == 3) 4018 { 4019 // This one is really good for rock / stone effects 4020 float a = f1; 4021 float b = f2; 4022 float k = 3.0; 4023 float h = max(k - abs(a - b), 0.0) / k; 4024 float final = min(a, b) - h * h * k * (1.0 / 4.0); 4025 return final; 4026 } 4027 if (style == 4) 4028 { 4029 // Some random adjustments to make this style stand out more 4030 return exp(5.0 * e_smooth); 4031 } 4032 if (style == 5) 4033 { 4034 return pow(f1_smooth, 3.0); 4035 } 4036 if (style == 6) 4037 { 4038 const float eps = 0.0125; 4039 4040 // Thicker lines as the user increases the smoothness slider 4041 float thickness = smoothness * 0.25 + eps; 4042 4043 // Blurrier lines as the user increases the smoothness slider 4044 float blur = pow(smoothness, 3.0) * 0.25 + eps; 4045 4046 return smoothstep( 4047 thickness - thickness * blur, 4048 thickness + thickness * blur, 4049 e 4050 ); 4051 } 4052 if (style == 7) 4053 { 4054 return hashwithoutsine13(vec3(p + mb) + seed); 4055 } 4056 } 4057 `,[eB,ez,eF,eN,eU,ek])}),_O=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x){super("v3"),this.nodeType="Noise",this.scale=e,this.size=t,this.move=i,this.fA=r,this.fB=s,this.distortion=a,this.colorA=o,this.colorB=l,this.colorC=h,this.colorD=c,this.noiseType=u,this.voronoiStyle=f,this.highCut=m,this.lowCut=g,this.smoothness=v,this.seed=y,this.quality=x,this.isMask=p,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t,i,r,s){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let a=Object.values(_D)[this.noiseType.value],o="voronoi"==a?` 4058 float v = ${a}(st + move, voronoiStyle, smoothness, seed, quality); 4059 4060 // Apply clipping to colors 4061 v = remap(v, lowCut, highCut, 0.0, 1.0); 4062 v = smax(v, 0.0, smoothness * 0.25); 4063 v = smin(v, 1.0, smoothness * 0.25); 4064 4065 // Note that the voronoi mode only uses colors "A" and "C" from the UI 4066 vec4 color = mix(colorA, colorC, v); 4067 `:` 4068 vec3 q = vec3(${a}(st), 4069 ${a}(st + vec3(1.0)), 4070 ${a}(st + vec3(1.0))); 4071 vec3 r = vec3(${a}
4071(st + vec3(distortion, 1.0) * q + vec3(fA, 1.0) + move), 4072 ${a}(st + vec3(distortion, 1.0) * q + vec3(fB, 1.0) + move), 4073 ${a}(st * q)); 4074 float f = ${a}(st + r); 4075 vec4 color; 4076 color = mix(colorA, colorB, clamp((f * f) * 4.0, 0.0, 1.0)); 4077 color = mix(color, colorC, clamp(length(q), 0.0, 1.0)); 4078 color = mix(color, colorD, clamp(length(r.x), 0.0, 1.0)); 4079 `,l=new SG(`vec3 ${a}customNoise(float scale, vec3 size, float move, vec2 fA, vec2 fB, vec2 distortion, vec4 colorA, vec4 colorB, vec4 colorC, vec4 colorD, int voronoiStyle, float highCut, float lowCut, float smoothness, float seed, int quality, bool isMask, float mask, float alpha, out float calpha) 4080 { 4081 // Prevent scale of zero 4082 scale = max(abs(scale), 0.001); 4083 4084 vec3 st = position / size; 4085 st /= scale; 4086 4087 ${o} 4088 4089 float lalpha = alpha * color.a * mask; 4090 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4091 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4092 4093 return clamp(color, 0.0, 1.0).rgb; 4094 }`,[_I.simplex,_I.simplexFractal,_I.simplexAshima,_I.fbm,_I.perlin,_I.voronoi]),h=e.include(l),c=[];return c.push(this.scale.build(e,"f")),c.push(this.size.build(e,"v3")),c.push(this.move.build(e,"f")),c.push(this.fA.build(e,"v2")),c.push(this.fB.build(e,"v2")),c.push(this.distortion.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.colorC.build(e,"v4")),c.push(this.colorD.build(e,"v4")),c.push(this.voronoiStyle.build(e,"i")),c.push(this.highCut.build(e,"f")),c.push(this.lowCut.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.seed.build(e,"f")),c.push(this.quality.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}};_O.numOctaves=5;var _R=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){super("v3"),this.nodeType="Outline",this.firstTime=!0,this.outlineColor=e,this.contourColor=t,this.outlineWidth=i,this.contourWidth=r,this.contourThreshold=s,this.outlineThreshold=a,this.contourFrequency=o,this.outlineSmoothing=l,this.contourDirection=h,this.positionalLines=c,this.compensation=d,this.resolution=u,this.normalMap=p,this.depthMap=f,this.pixelRatio=m,this.alpha=g,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`;if(e.require("vWorldViewDir"),e.require("worldNormal"),e.extensions.derivatives=!0,this.compensation.value&&e.define("OUTLINE_COMPENSATION",`${i}_offset`),this.firstTime){let t=this.outlineWidth.build(e,"f"),r=this.resolution.build(e,"v2"),s=this.compensation.build(e,"b"),a=this.pixelRatio.build(e,"f");e.addVertexParsVariable("randomColor","attribute vec3"),e.addVertexParsVariable("extrudeNormal","attribute vec3"),e.addVertexParsVariable(t,"uniform float"),e.addVertexParsVariable(r,"uniform vec2"),e.addVertexParsVariable(s,"uniform bool"),e.addVertexParsVariable(a,"uniform float"),e.addVertexParsVariable("vID","flat out float"),e.addFragmentParsVariable("vID","flat in float"),e.addVertexFinalCode(` 4095 vID = randomColor.r; 4096 vec2 ${i}_offset = vec2(0.0); 4097 if (${s}) { 4098 vec4 ${i}_clipPosition = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 4099 // NOTE: For certain shapes, like spheres, we get incorrect extrusion when the 4100 // normals face the camera directly. So we hackily fix this by offsetting the normal 4101 // by a tiny amount. 4102 vec3 ${i}_clipNormal = mat3(projectionMatrix) * (mat3(modelViewMatrix) * extrudeNormal) + 0.0000001; 4103 ${i}_offset = normalize(${i}_clipNormal.xy) / ${r} * (${t} / 2.0) * ${i}_clipPosition.w * 2.0 * ${a}; 4104 ${i}_clipPosition.xy += ${i}_offset; 4105 // TODO(MAX): To handle multiple outline layers, we only want to extrude 4106 // if this offset is the biggest of all the potential offsets 4107 gl_Position = ${i}_clipPosition; 4108 } 4109 `)}if(!e.isShader("fragment"))return console.warn("OutlineNode is not compatible with "+e.shader+" shader."),"";{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_R.Nodes.outline),r=[];return r.push(this.outlineColor.build(e,"c")),r.push(this.contourColor.build(e,"c")),r.push(this.outlineWidth.build(e,"f")),r.push(this.contourWidth.build(e,"f")),r.push(this.contourThreshold.build(e,"f")),r.push(this.outlineThreshold.build(e,"f")),r.push(this.contourFrequency.build(e,"f")),r.push(this.outlineSmoothing.build(e,"f")),r.push(this.contourDirection.build(e,"v3")),r.push(this.positionalLines.build(e,"b")),r.push(this.resolution.build(e,"v2")),r.push(this.normalMap.getTexture(e,"t")),r.push(this.depthMap.getTexture(e,"t")),r.push(this.pixelRatio.build(e,"f")),r.push(this.compensation.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),this.firstTime=!this.firstTime,e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_R.Nodes=(eV=new SG(` 4110float sobelSample(sampler2D t, sampler2D d, vec2 uv, vec2 resolution, float outlineWidth, float pixelRatio) 4111{ 4112 vec2 halton = haltonSequence[frameIndex]; 4113 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4114 float temporalAngle = temporalOffset * PI2; 4115 4116 vec2 texelSize = (vec2(1.0) / resolution); 4117 vec2 offsetSize = texelSize * outlineWidth * pixelRatio; 4118 4119 vec2 uvSamples[9]; 4120 vec4 normalSamples[9]; 4121 4122 uvSamples[0] = uv + vec2( -offsetSize.x, -offsetSize.y) + (vogelDiskSample(0, 9, temporalAngle) * texelSize); 4123 uvSamples[1] = uv + vec2(0.0, -offsetSize.y) + (vogelDiskSample(1, 9, temporalAngle) * texelSize); 4124 uvSamples[2] = uv + vec2( offsetSize.x, -offsetSize.y) + (vogelDiskSample(2, 9, temporalAngle) * texelSize);
4125 uvSamples[3] = uv + vec2( -offsetSize.x, 0.0) + (vogelDiskSample(3, 9, temporalAngle) * texelSize); 4126 uvSamples[4] = uv; 4127 uvSamples[5] = uv + vec2( offsetSize.x, 0.0) + (vogelDiskSample(5, 9, temporalAngle) * texelSize); 4128 uvSamples[6] = uv + vec2( -offsetSize.x, offsetSize.y) + (vogelDiskSample(6, 9, temporalAngle) * texelSize); 4129 uvSamples[7] = uv + vec2(0.0, offsetSize.y) + (vogelDiskSample(7, 9, temporalAngle) * texelSize); 4130 uvSamples[8] = uv + vec2( offsetSize.x, offsetSize.y) + (vogelDiskSample(8, 9, temporalAngle) * texelSize); 4131 4132 4133 normalSamples[0] = texture2D(t, uvSamples[0]); 4134 normalSamples[1] = texture2D(t, uvSamples[1]); 4135 normalSamples[2] = texture2D(t, uvSamples[2]); 4136 normalSamples[3] = texture2D(t, uvSamples[3]); 4137 normalSamples[4] = texture2D(t, uvSamples[4]); 4138 normalSamples[5] = texture2D(t, uvSamples[5]); 4139 normalSamples[6] = texture2D(t, uvSamples[6]); 4140 normalSamples[7] = texture2D(t, uvSamples[7]); 4141 normalSamples[8] = texture2D(t, uvSamples[8]); 4142 4143 float depthBias = 0.0001; 4144 // TODO(MAX): Can we somehow reduce the number of conditionals here with MATH?! 4145 if (normalSamples[0].a != vID && normalSamples[0].a != 0.0) { 4146 float depthAtSample = texture2D(d, uvSamples[0]).r + depthBias; 4147 if (gl_FragCoord.z > depthAtSample) { 4148 return 0.0; 4149 } 4150 } 4151 4152 if (normalSamples[1].a != vID && normalSamples[1].a != 0.0) { 4153 float depthAtSample = texture2D(d, uvSamples[1]).r + depthBias; 4154 if (gl_FragCoord.z > depthAtSample) { 4155 return 0.0; 4156 } 4157 } 4158 4159 if (normalSamples[2].a != vID && normalSamples[2].a != 0.0) { 4160 float depthAtSample = texture2D(d, uvSamples[2]).r + depthBias; 4161 if (gl_FragCoord.z > depthAtSample) { 4162 return 0.0; 4163 } 4164 } 4165 4166 if (normalSamples[3].a != vID && normalSamples[3].a != 0.0) { 4167 float depthAtSample = texture2D(d, uvSamples[3]).r + depthBias; 4168 if (gl_FragCoord.z > depthAtSample) { 4169 return 0.0; 4170 } 4171 } 4172 4173 4174 if (normalSamples[4].a != vID && normalSamples[4].a != 0.0) { 4175 float depthAtSample = texture2D(d, uvSamples[4]).r + depthBias; 4176 if (gl_FragCoord.z > depthAtSample) { 4177 return 0.0; 4178 } 4179 } 4180 4181 if (normalSamples[5].a != vID && normalSamples[5].a != 0.0) { 4182 float depthAtSample = texture2D(d, uvSamples[5]).r + depthBias; 4183 if (gl_FragCoord.z > depthAtSample) { 4184 return 0.0; 4185 } 4186 } 4187 4188 if (normalSamples[6].a != vID && normalSamples[6].a != 0.0) { 4189 float depthAtSample = texture2D(d, uvSamples[6]).r + depthBias; 4190 if (gl_FragCoord.z > depthAtSample) { 4191 return 0.0; 4192 } 4193 } 4194 4195 if (normalSamples[7].a != vID && normalSamples[7].a != 0.0) { 4196 float depthAtSample = texture2D(d, uvSamples[7]).r + depthBias; 4197 if (gl_FragCoord.z > depthAtSample) { 4198 return 0.0; 4199 } 4200 } 4201 4202 if (normalSamples[8].a != vID && normalSamples[8].a != 0.0) { 4203 float depthAtSample = texture2D(d, uvSamples[8]).r + depthBias; 4204 if (gl_FragCoord.z > depthAtSample) { 4205 return 0.0; 4206 } 4207 } 4208 4209 vec3 sobel_edge_h = normalSamples[2].rgb + (2.0*normalSamples[5].rgb) + normalSamples[8].rgb - (normalSamples[0].rgb + (2.0*normalSamples[3].rgb) + normalSamples[6].rgb); 4210 vec3 sobel_edge_v = normalSamples[0].rgb + (2.0*normalSamples[1].rgb) + normalSamples[2].rgb - (normalSamples[6].rgb + (2.0*normalSamples[7].rgb) + normalSamples[8].rgb); 4211 4212 float edgeNormal = sqrt(dot(sobel_edge_h, sobel_edge_h) + dot(sobel_edge_v, sobel_edge_v)); 4213 return edgeNormal; 4214} 4215`),{outline:new SG(`vec3 outline(vec3 outlineColor, vec3 contourColor, float outlineWidth, float contourWidth, float outlineThreshold, float contourThreshold, float outlineSmoothing, float contourFrequency, vec3 contourDirection, bool positionalLines, vec2 resolution, sampler2D normalMap, sampler2D depthMap, float pixelRatio, bool compensation, float mask, float alpha, out float calpha) { 4216 vec3 result = outlineColor; 4217 float resultAlpha = 0.0; 4218 4219 vec3 N = normalize(vWNormal); 4220 vec2 nuv = (gl_FragCoord.xy / resolution); 4221 float sobelSample = compensation ? sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth / 2., pixelRatio) : sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth, pixelRatio); 4222 resultAlpha = smoothstep(outlineThreshold - outlineSmoothing, outlineThreshold + outlineSmoothing, sobelSample); 4223 4224 //resultAlpha = 1.0; 4225 //result = vec3(sobelSample); 4226 4227 float t = 1.0 - contourThreshold; 4228 if(positionalLines) { 4229 vec3 NDir = position * contourDirection; 4230 float NT = NDir.x + NDir.y + NDir.z; 4231 float f = fract(NT * contourFrequency * 0.01); 4232 float df = fwidth(NT * contourFrequency); 4233 4234 float g = smoothstep(df * (contourWidth * 0.01), df * (contourWidth * 0.01 * 2.0), f); 4235 if (g < 1.0 && resultAlpha == 0.0) { 4236 result = contourColor; 4237 resultAlpha = 1.0; 4238 } 4239 } 4240 else { 4241 vec3 NDir = N * contourDirection; 4242 float NT = NDir.x + NDir.y + NDir.z; 4243 float df = fwidth(NT * contourThreshold); 4244 float f = sin(NT * 1.0 * contourFrequency); 4245 float g = smoothstep(0.0, df * contourWidth, 1.0 - f); 4246 4247 if (df > (t * 0.5) && g < 1.0 && resultAlpha == 0.0) { 4248 result = contourColor; 4249 resultAlpha = 1.0 - g; 4250 } 4251 } 4252
4253 float lalpha = alpha * resultAlpha * mask; 4254 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4255 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 4256 4257 return result; 4258 }`,[eV])});var _L=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y){super("v3"),this.nodeType="Pattern",this.style=e,this.projection=t,this.axis=i,this.blending=r,this.offset=s,this.colorA=a,this.colorB=o,this.frequency=l,this.size=h,this.variation=c,this.smoothness=d,this.zigzag=u,this.rotation=p,this.vertical=f,this.horizontal=m,this.sides=g,this.isMask=y,this.alpha=v,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("PatterNode is not compatible with "+e.shader+" shader."),e.format("vec3(0.0)",this.getType(e),t);{let i;switch(e.require("position"),e.require("uv"),e.requires.uv=[!0],e.require("normal"),e.requires.normal=!0,e.addFragmentVariable(this.calpha,"float"),this.style.value){case 0:default:i="circle";break;case 1:i="ring";break;case 2:i="polygon";break;case 3:i="xcross";break;case 4:i="diamond";break;case 5:i="checkerboard";break;case 6:i="line";break;case 7:i="wave"}let r=`g${this.uuid.toString().replace(/-/g,"")}`,s=new SG(`float hashwithoutsine12(vec2 p) 4259 { 4260 vec3 p3 = fract(vec3(p.xyx) * .1031); 4261 p3 += dot(p3, p3.yzx + 33.33); 4262 return fract((p3.x + p3.y) * p3.z); 4263 }`),a=new SG(`vec2 rotate_uv(in vec2 uv, float a, bool repeat) 4264 { 4265 const float mid = 0.5; 4266 float radians = a * (PI / 180.0); 4267 vec2 rotated = vec2( 4268 cos(radians) * (uv.x - mid) + sin(radians) * (uv.y - mid) + mid, 4269 cos(radians) * (uv.y - mid) - sin(radians) * (uv.x - mid) + mid 4270 ); 4271 return repeat ? fract(rotated): rotated; 4272 }`),o="";if(4===this.projection.value){let e=2===this.style.value?`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t=2===this.style.value?`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,r=2===this.style.value?`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation)`;o=` 4273 vec3 p = position; 4274 float factor = 0.0125; 4275 vec2 uv0 = fract(p.xy * factor); 4276 vec2 uv1 = fract(p.zy * factor); 4277 vec2 uv2 = fract(p.xz * factor); 4278 4279 uv0 = rotate_uv(uv0 + offset, rotation, true); 4280 uv1 = rotate_uv(uv1 + offset, rotation, true); 4281 uv2 = rotate_uv(uv2 + offset, rotation, true); 4282 4283 float d0 = ${e}; 4284 float d1 = ${t}; 4285 float d2 = ${r}; 4286 4287 // Range from 3 to 128 seems to be good 4288 float exponent = (1.0 - blending) * 125.0 + 3.0; 4289 4290 vec3 n = vObjectNormal; 4291 vec3 weights = abs(normalize(n)); 4292 weights = pow(weights, vec3(exponent)); 4293 weights /= dot(weights, vec3(1.0)); 4294 d0 *= weights.z; 4295 d1 *= weights.x; 4296 d2 *= weights.y; 4297 float draw = d0 + d1 + d2; 4298 4299 vec2 custom_uv = uv0 * weights.z + uv1 * weights.x + uv2 * weights.y; 4300 `}else{let e=2===this.style.value?`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t="";0===this.axis.value?t=`float radius = length(p); 4301 float theta = atan(p.y, p.z); 4302 float phi = acos(p.x / radius);`:1===this.axis.value?t=`float radius = length(p); 4303 float theta = atan(p.x, p.z); 4304 float phi = acos(p.y / radius);`:(this.axis.value,t=`float radius = length(p); 4305 float theta = atan(p.y, p.x); 4306 float phi = acos(p.z / radius);`);let r="";switch(this.projection.value){case 0:r="custom_uv = vUv.st;";break;case 1:case 3:break;case 2:r=` 4307 vec3 p = position; 4308 ${t} 4309 custom_uv = vec2(theta, phi); 4310 custom_uv /= PI; 4311 `}o=` 4312 vec2 custom_uv; 4313 ${r} 4314 4315 custom_uv += offset; 4316 custom_uv = fract(custom_uv); 4317 custom_uv = rotate_uv(custom_uv, rotation, true); 4318 4319 float draw = ${e}; 4320 `}let l=new SG(`vec3 ${r}_pattern(vec3 normal, float blending, int style, vec2 offset, vec4 colorA, vec4 colorB, vec2 frequency, float size, float variation, float smoothness, float zigzag, float rotation, vec2 vertical, vec2 horizontal, int sides, bool isMask, float mask, float alpha, out float calpha) { 4321 const float TWO_PI = PI * 2.0; 4322 float smoothness_remapped = pow(smoothness, 5.0); 4323 4324 ${o} 4325 4326 // Construct final output color 4327 vec4 color = mix(colorA, colorB, draw); 4328 color.a = clamp(color.a, 0.0, 1.0); 4329 4330 // Apply cuts 4331 color.a *= 4332 step(vertical.x, custom_uv.y) * 4333 step(custom_uv.y, vertical.y); 4334 color.a *= 4335 step(horizontal.x, abs(custom_uv.x)) * 4336 step(abs(custom_uv.x), horizontal.y); 4337 4338 // Accumulate alpha
4339 float lalpha = alpha * clamp(color.a, 0.0, 1.0) * mask; 4340 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4341 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4342 4343 return clamp(color, 0.0, 1.0).rgb; 4344 }`,[a,s,_L.DrawFunctions.circle,_L.DrawFunctions.ring,_L.DrawFunctions.polygon,_L.DrawFunctions.cross,_L.DrawFunctions.diamond,_L.DrawFunctions.checkerboard,_L.DrawFunctions.line,_L.DrawFunctions.wave]),h=e.include(l),c=[];return c.push("normal"),c.push(this.blending.build(e,"f")),c.push(this.style.build(e,"i")),c.push(this.offset.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.frequency.build(e,"v2")),c.push(this.size.build(e,"f")),c.push(this.variation.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.zigzag.build(e,"f")),c.push(this.rotation.build(e,"f")),c.push(this.vertical.build(e,"v2")),c.push(this.horizontal.build(e,"v2")),c.push(this.sides.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}}};_L.DrawFunctions=(ej=new SG(`float hashwithoutsine12(vec2 p) { 4345 vec3 p3 = fract(vec3(p.xyx) * 0.1031); 4346 p3 += dot(p3, p3.yzx + 33.33); 4347 return fract((p3.x + p3.y) * p3.z); 4348 }`),eG=new SG(`vec2 tile_and_center(in vec2 uv, in vec2 frequency, in float variation, in float zigzag, in float rotation) { 4349 // Create tiles in UV-space 4350 uv *= frequency; 4351 4352 // Integer coords 4353 vec2 i = floor(uv); 4354 4355 // Offset every other row based on zigzag param, then compute fractional coords 4356 float row_offset = mod(i.y, 2.0); 4357 uv.x += row_offset * zigzag; 4358 vec2 f = fract(uv); 4359 4360 // Rotate the tile itself: 4361 // const float mid = 0.5; 4362 // f = vec2( 4363 // cos(rotation) * (f.x - mid) + sin(rotation) * (f.y - mid) + mid, 4364 // cos(rotation) * (f.y - mid) - sin(rotation) * (f.x - mid) + mid 4365 // ); 4366 // f = fract(f); 4367 4368 f = f * 2.0 - 1.0; 4369 4370 // Recompute integer coords after shifting - then, random value per tile 4371 i = floor(uv); 4372 float rand = (hashwithoutsine12(i) * 5.0 + 1.0); 4373 float jitter = mix(1.0, rand, variation); 4374 f *= jitter; 4375 4376 return f; 4377 }`,[ej]),eH=new SG(`float circle(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4378 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4379 return smoothstep( 4380 -smoothness, 4381 smoothness, 4382 length(f) - size 4383 ); 4384 }`,[eG]),eW=new SG(`float ring(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4385 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4386 4387 float d = length(f); 4388 const float inner_width = 0.5; 4389 4390 float outer = smoothstep(-smoothness, smoothness, d - size); 4391 float inner = smoothstep(-smoothness, smoothness, d - size * inner_width); 4392 return outer + (1.0 - inner); 4393 }`,[eG]),eq=new SG(`float sdf_ngon(in vec2 p, in float r, in int n) { 4394 float an = (PI * 2.0) / float(n); 4395 float he = r * tan(0.5 * an); 4396 4397 // Rotate to first sector 4398 p = -p.yx; 4399 float bn = an * floor((atan(p.y, p.x) + 0.5 * an) / an); 4400 vec2 cs = vec2(cos(bn), sin(bn)); 4401 p = mat2(cs.x, -cs.y, cs.y, cs.x)*p; 4402 4403 // Side of polygon 4404 return length(p - vec2(r, clamp(p.y, -he, he))) * sign(p.x - r); 4405 } 4406 4407 float polygon(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation, in int sides) { 4408 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4409 return smoothstep(-smoothness, smoothness, sdf_ngon(f, size, sides)); 4410 }`,[eG]),eX=new SG(`float sdf_cross(in vec2 p, in vec2 b, float r ) { 4411 p = abs(p);
4412 p = (p.y > p.x) ? p.yx : p.xy; 4413 vec2 q = p - b; 4414 float k = max(q.y, q.x); 4415 vec2 w = (k > 0.0) ? q : vec2(b.y - p.x, -k); 4416 return sign(k) * length(max(w, 0.0)) + r; 4417 } 4418 4419 // Avoid namespace conflicts 4420 float xcross(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4421 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4422 return smoothstep(-smoothness, smoothness, sdf_cross(f, vec2(size, size * 0.25), smoothness)); 4423 }`,[eG]),eY=new SG(`float ndot(vec2 a, vec2 b) { 4424 return a.x*b.x - a.y*b.y; 4425 } 4426 4427 float sdf_diamond(in vec2 p, in vec2 b) { 4428 p = abs(p); 4429 float h = clamp(ndot(b - 2.0 * p, b) / dot(b, b), -1.0, 1.0); 4430 float d = length(p - 0.5 * b * vec2(1.0 - h, 1.0 + h)); 4431 return d * sign(p.x * b.y + p.y * b.x - b.x * b.y); 4432 } 4433 4434 float diamond(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4435 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4436 return smoothstep(-smoothness, smoothness, sdf_diamond(f, vec2(size))); 4437 }`,[eG]),eQ=new SG(`float checkerboard(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4438 uv *= frequency; 4439 vec2 i = floor(uv); 4440 4441 float offset = mod(i.y, 2.0); 4442 4443 uv.x += offset + zigzag * offset; 4444 float x = floor(uv.x); 4445 4446 return mod(x, 2.0); 4447 }`),eZ=new SG(`float line(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4448 vec2 f = tile_and_center(uv, frequency, 0.0, zigzag, rotation); 4449 4450 // Different approach for variation param here 4451 float row = floor(uv * frequency).y; 4452 float rand = hashwithoutsine12(vec2(row)); 4453 float s = mix(size, size * rand, variation); 4454 4455 return smoothstep( 4456 s - smoothness, 4457 s + smoothness, 4458 abs(f.y) 4459 ); 4460 }`,[eG]),{tileAndCenter:eG,circle:eH,ring:eW,polygon:eq,cross:eX,diamond:eY,checkerboard:eQ,line:eZ,wave:new SG(`// Uses bisection 4461 float udf_cos(in vec2 p, in float a, in float b, in float c, in float d) { 4462 // Convert all data to a primitive cosine wave 4463 p = c * (p - vec2(d, a)); 4464 4465 const float TWO_PI = PI * 2.0; 4466 4467 // Reduce to principal half cycle 4468 p.x = mod(p.x, TWO_PI); 4469 if (p.x > PI) { 4470 p.x = TWO_PI - p.x; 4471 } 4472 4473 // Find zero of derivative (minimize distance) 4474 float xa = 0.0; 4475 float xb = TWO_PI; 4476 4477 // 24 bit precision 4478 for (int i = 0; i < 24; i++) { 4479 float x = 0.5 * (xa + xb); 4480 float y = x - p.x + b * c * sin(x) * (p.y - b * c * cos(x)); 4481 if (y < 0.0) xa = x; 4482 else xb = x; 4483 } 4484 float x = 0.5 * (xa + xb); 4485 4486 // Compute distance 4487 vec2 q = vec2(x, b * c * cos(x)); 4488 return length(p - q) / c; 4489 } 4490 4491 float wave(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4492 float repeat = frequency.x; 4493 uv *= repeat; 4494 vec2 i = floor(uv); 4495 float row_offset = mod(i.y, 2.0); 4496 uv.x += row_offset * zigzag; 4497 vec2 f = vec2(uv.x, fract(uv.y)); 4498 4499 // Generalized cosine: y(x) = a + b * cos(cx + d) 4500 const float amplitude = 0.125; 4501 float wave_frequency = frequency.y * 0.1; 4502 float distance_estimate = udf_cos(f, 0.50, amplitude, wave_frequency * (2.0 * PI), 0.0); 4503 4504 // Different approach for variation param here 4505 float rand = hashwithoutsine12(vec2(i.y)); 4506 float s = mix(size, size * rand, variation); 4507 4508 return smoothstep(-smoothness, smoothness, distance_estimate - s * 0.5); 4509 }`)});var _B=class extends SB{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Rainbow",this.filmThickness=e,this.movement=t,this.wavelengths=i,this.noiseStrength=r,this.noiseScale=s,this.offset=a,this.isMask=l,this.alpha=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("RainbowNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_B.Nodes.rainbow),r=[];return r.push(this.filmThickness.build(e,"f")),r.push(this.movement.build(e,"f")),r.push(this.wavelengths.build(e,"v3")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.offset.build(e,"v3")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_B.Nodes=(eK=new SG(`vec3 attenuation(vec3 wavelengths, float filmThickness, float movement, float noiseStrength, float noiseScale, vec3 offset) { 4510 vec3 st = position / noiseScale; 4511 vec3 q = vec3(simplex3d(st), 4512 simplex3d(st + vec3(1.0)), 4513 simplex3d(st + vec3(1.0))); 4514 4515 vec3 r = vec3(simplex3d(st + vec3(1.4, 1.3, 1.0) * q + vec3(1.7, 9.2, 1.0)), 4516 simplex3d(st + vec3(2.0, 1.2, 1.0) * q + vec3(8.3, 2.8, 1.0)), 4517 simplex3d(st * q)); 4518 4519 float noise = simplex3d(st + r); 4520 4521 return .5 + .5 * cos((((filmThickness + (noise * noiseStrength)) / (vec3(wavelengths.r * 1.0, wavelengths.g * 0.8, wavelengths.b * 0.6) + 1.0)) * dot(normalize(vWorldViewDir + (offset * -0.001)), normalize(vWNormal))) + movement); 4522 }
4522`,[_I.simplex]),{rainbow:new SG(`vec3 rainbow(float filmThickness, float movement, vec3 wavelengths, float noiseStrength, float noiseScale, vec3 offset, bool isMask, float mask, float alpha, out float calpha) { 4523 vec3 res = clamp(attenuation(wavelengths, filmThickness, movement, noiseStrength, noiseScale, offset), 0.0, 2.0); 4524 4525 float rainbowContribution = clamp(res.r + res.g + res.b, 0.0, 1.0); 4526 4527 float lalpha = alpha * rainbowContribution * mask; 4528 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4529 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4530 4531 return res; 4532 }`,[eK])});var _z=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c){super("v3"),this.nodeType="Toon",this.positioning=e,this.colors=t,this.steps=i,this.source=r,this.isWorldSpace=s,this.noiseStrength=a,this.noiseScale=o,this.shadowColor=l,this.offset=h,this.alpha=c,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("worldNormal"),e.require("worldPosition"),!e.isShader("fragment"))return console.warn("ToonNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("COLORS_MAX",10),e.addFragmentVariable(this.calpha,"float");let i=e.include(_z.Nodes.toon),r=[];return r.push(this.positioning.build(e,"i")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.source.build(e,"v3")),r.push(this.isWorldSpace.build(e,"b")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.shadowColor.build(e,"v4")),r.push(this.offset.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_z.Nodes=(eJ=new SG(`float rand(float n) { 4533 return fract(sin(n) * 43758.5453123); 4534 }`),e$=new SG(`float hash1(float p) { 4535 p = fract(p * 0.011); 4536 p *= p + 7.5; 4537 p *= p + p; 4538 return fract(p); 4539 }`),e0=new SG(`float valueNoise(vec3 x) { 4540 const vec3 step = vec3(110, 241, 171); 4541 4542 vec3 i = floor(x); 4543 vec3 f = fract(x); 4544 4545 // For performance, compute the base input to a 1D hash from the integer part of the argument and the 4546 // incremental change to the 1D based on the 3D -> 1D wrapping 4547 float n = dot(i, step); 4548 4549 vec3 u = f * f * (3.0 - 2.0 * f); 4550 return mix(mix(mix( hash1(n + dot(step, vec3(0, 0, 0))), hash1(n + dot(step, vec3(1, 0, 0))), u.x), 4551 mix( hash1(n + dot(step, vec3(0, 1, 0))), hash1(n + dot(step, vec3(1, 1, 0))), u.x), u.y), 4552 mix(mix( hash1(n + dot(step, vec3(0, 0, 1))), hash1(n + dot(step, vec3(1, 0, 1))), u.x), 4553 mix( hash1(n + dot(step, vec3(0, 1, 1))), hash1(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z); 4554 }`,[e$]),e1=new SG(`vec3 hash3(vec3 x) { 4555 x = vec3(dot(x,vec3(127.1, 311.7, 74.7)), 4556 dot(x,vec3(269.5, 183.3, 246.1)), 4557 dot(x,vec3(113.5, 271.9, 124.6))); 4558 4559 return fract(sin(x)*43758.5453123); 4560 }`),e2=new SG(`vec3 voronoiNoise(in vec3 x) 4561 { 4562 vec3 p = floor(x); 4563 vec3 f = fract(x); 4564 4565 float id = 0.0; 4566 vec2 res = vec2(100.0); 4567 4568 for(int k=-1; k<=1; k++) 4569 for(int j=-1; j<=1; j++) 4570 for(int i=-1; i<=1; i++) 4571 { 4572 vec3 b = vec3(float(i), float(j), float(k)); 4573 4574 // Comment out the "+ hash(p + b);" part below to get "square" cells 4575 vec3 r = vec3(b) - f + hash3(p + b); 4576 float d = dot(r, r); 4577 4578 if (d < res.x) 4579 { 4580 id = dot(p + b, vec3(1.0, 57.0, 113.0)); 4581 res = vec2(d, res.x); 4582 } 4583 else if (d < res.y) 4584 { 4585 res.y = d; 4586 } 4587 } 4588 4589 return vec3(sqrt(res), abs(id)); 4590 } 4591 `,[e1]),{toon:new SG(`vec3 toon(int positioning, vec4 colors[COLORS_MAX], float steps[COLORS_MAX], vec3 source, bool isWorldSpace, float noiseStrength, float noiseScale, vec4 shadowColor, vec3 offset, float mask, float alpha, out float calpha) { 4592 float t = 0.0; 4593 float shadow = 1.0; 4594 4595 if (positioning == 0) { 4596 4597 // Can't do this mode if lighting is "none" 4598 #if (defined(PHONG) || defined(LAMBERT) || defined(STANDARD)) 4599 4600 // Algorithm from Chapter 10 of Graphics Shaders 4601 const vec3 weights = vec3(0.2125, 0.7154, 0.0721); 4602 vec3 lpos; 4603 vec3 l; 4604 float dproduct; 4605 4606 #if (NUM_POINT_LIGHTS > 0) 4607 4608 #if defined(USE_SHADOWMAP) && (NUM_POINT_LIGHT_SHADOWS > 0) 4609 PointLightShadow pointLightShadow; 4610 #endif 4611 4612 #pragma unroll_loop_start 4613 for (int i = 0; i < NUM_POINT_LIGHTS; i++) { 4614 // Light positions are in view-space for some reason? 4615 lpos = (inverse(viewMatrix) * vec4(pointLights[UNROLLED_LOOP_INDEX].position, 1.0
4615)).xyz; 4616 l = normalize(lpos - worldPosition); 4617 4618 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4619 4620 // TODO: we want to use "intensity" but it isn't available in the shader code 4621 //dproduct += dot(pointLights[UNROLLED_LOOP_INDEX].color, weights); 4622 4623 t = max(t, dproduct); 4624 4625 // Accumulate shadow contribution 4626 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS) 4627 pointLightShadow = pointLightShadows[UNROLLED_LOOP_INDEX]; 4628 shadow *= getPointShadow( 4629 pointShadowMap[UNROLLED_LOOP_INDEX], 4630 pointLightShadow.shadowMapSize, 4631 pointLightShadow.shadowBias, 4632 pointLightShadow.shadowRadius, 4633 vPointShadowCoord[UNROLLED_LOOP_INDEX], 4634 pointLightShadow.shadowCameraNear, 4635 pointLightShadow.shadowCameraFar); 4636 #endif 4637 } 4638 #pragma unroll_loop_end 4639 4640 #endif 4641 4642 #if NUM_DIR_LIGHTS > 0 4643 4644 #if defined(USE_SHADOWMAP) && (NUM_DIR_LIGHT_SHADOWS > 0) 4645 DirectionalLightShadow directionalLightShadow; 4646 #endif 4647 4648 #pragma unroll_loop_start 4649 for (int i = 0; i < NUM_DIR_LIGHTS; i++) { 4650 // Use the direction vector for directional lights instead 4651 l = (inverse(viewMatrix) * vec4(directionalLights[UNROLLED_LOOP_INDEX].direction, 0.0)).xyz; 4652 4653 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4654 t = max(t, dproduct); 4655 4656 // Accumulate shadow contribution 4657 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS) 4658 directionalLightShadow = directionalLightShadows[UNROLLED_LOOP_INDEX]; 4659 shadow *= getShadow( 4660 UNROLLED_LOOP_INDEX, 4661 directionalShadowMap[UNROLLED_LOOP_INDEX], 4662 directionalLightShadow.shadowMapSize, 4663 directionalLightShadow.shadowBias, 4664 directionalLightShadow.shadowRadius, 4665 vDirectionalShadowCoord[UNROLLED_LOOP_INDEX]); 4666 #endif 4667 } 4668 #pragma unroll_loop_end 4669 4670 #endif 4671 4672 #if NUM_SPOT_LIGHTS > 0 4673 4674 #if defined(USE_SHADOWMAP) && (NUM_SPOT_LIGHT_SHADOWS > 0) 4675 SpotLightShadow spotLightShadow; 4676 #endif 4677 4678 #pragma unroll_loop_start 4679 for (int i = 0; i < NUM_SPOT_LIGHTS; i++) { 4680 lpos = (inverse(viewMatrix) * vec4(spotLights[UNROLLED_LOOP_INDEX].position, 1.0)).xyz; 4681 l = normalize(lpos - worldPosition); 4682 4683 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4684 t = max(t, dproduct); 4685 4686 // Accumulate shadow contribution 4687 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS) 4688 spotLightShadow = spotLightShadows[UNROLLED_LOOP_INDEX]; 4689 shadow *= getShadow( 4690 UNROLLED_LOOP_INDEX, 4691 spotShadowMap[UNROLLED_LOOP_INDEX], 4692 spotLightShadow.shadowMapSize, 4693 spotLightShadow.shadowBias, 4694 spotLightShadow.shadowRadius, 4695 vSpotLightCoord[UNROLLED_LOOP_INDEX]); 4696 #endif 4697 } 4698 #pragma unroll_loop_end 4699 4700 #endif 4701 4702 t = clamp(t, 0.0, 1.0); 4703 4704 #endif 4705 4706 } else if (positioning == 1) { 4707 4708 vec3 origin = mix(position, worldPosition, float(isWorldSpace)); 4709 vec3 direction = normalize(source - origin); 4710 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4711 4712 } else { 4713 4714 vec3 origin = worldPosition; 4715 vec3 source = cameraPosition - offset; 4716 vec3 direction = normalize(source - origin); 4717 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4718 4719 } 4720 4721 if (noiseStrength > 0.0) { 4722 // Distort with noise 4723 vec3 st = position / noiseScale; 4724 4725 // Voronoi "smooth" noise 4726 float noise = 1.0 - voronoiNoise(st).x; 4727 4728 // Voronoi cellular noise 4729 //float noise = 1.0 - rand(voronoiNoise(st).z); 4730 4731 // Position warp noise 4732 // vec3 offset = vec3( 4733 // simplex3d(st), 4734 // simplex3d(st + vec3(111.1, 143.89, 217.19)), 4735 // simplex3d(st + vec3(171.1, 247.89, 117.23)) 4736 // ); 4737 // st += offset; 4738 // float noise = valueNoise(st); 4739 4740 t += noise * noiseStrength; 4741 } 4742 4743 t = clamp(t, 0.0, 1.0); 4744 4745 // Compute ramp color 4746 float p; 4747 vec4 color = colors[0]; 4748 for (int i = 1; i < COLORS_MAX; i++) { 4749 p = clamp((t - steps[i-1]) / (steps[i] - steps[i-1]), 0.0, 1.0); 4750 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 4751 } 4752 4753 // Incorporate custom shadow color 4754 if (positioning == 0) { 4755 4756 vec3 blendedShadow = mix(color.rgb, shadowColor.rgb, shadowColor.a); 4757 color.rgb = mix(blendedShadow, color.rgb, shadow); 4758 4759 } 4760 4761 // Accumulate alpha as usual
4762 float lalpha = alpha * color.a * mask; 4763 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 4764 accumAlpha += (1.0 - accumAlpha) * lalpha; 4765 4766 return color.xyz; 4767 4768 }`,[_I.simplex,eJ,e0,e2])});var _F={textureBicubic:new SG(`float w0( float a ) { 4769 return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); 4770 } 4771 4772 float w1( float a ) { 4773 return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); 4774 } 4775 4776 float w2( float a ){ 4777 return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); 4778 } 4779 4780 float w3( float a ) { 4781 return ( 1.0 / 6.0 ) * ( a * a * a ); 4782 } 4783 4784 // g0 and g1 are the two amplitude functions 4785 float g0( float a ) { 4786 return w0( a ) + w1( a ); 4787 } 4788 4789 float g1( float a ) { 4790 return w2( a ) + w3( a ); 4791 } 4792 4793 // h0 and h1 are the two offset functions 4794 float h0( float a ) { 4795 return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); 4796 } 4797 4798 float h1( float a ) { 4799 return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); 4800 } 4801 4802 vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { 4803 uv = uv * texelSize.zw + 0.5; 4804 4805 vec2 iuv = floor( uv ); 4806 vec2 fuv = fract( uv ); 4807 4808 float g0x = g0( fuv.x ); 4809 float g1x = g1( fuv.x ); 4810 float h0x = h0( fuv.x ); 4811 float h1x = h1( fuv.x ); 4812 float h0y = h0( fuv.y ); 4813 float h1y = h1( fuv.y ); 4814 4815 vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4816 vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4817 vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4818 vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4819 4820 return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + 4821 g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); 4822 } 4823 4824 vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { 4825 vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); 4826 vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); 4827 vec2 fLodSizeInv = 1.0 / fLodSize; 4828 vec2 cLodSizeInv = 1.0 / cLodSize; 4829 vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); 4830 vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); 4831 return mix( fSample, cSample, fract( lod ) ); 4832 }`)},_N=class extends SB{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Transmission",this.thickness=e,this.ior=t,this.roughness=i,this.transmissionSamplerSize=r,this.transmissionSamplerMap=s,this.transmissionDepthMap=a,this.aspectRatio=o,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0,!e.isShader("fragment"))return console.warn("TransmissionNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("NUM_SAMPLES",6),e.define("BLUR_SLOD",Math.pow(2,_V.transmissionLod.value)),e.require("worldPosition"),e.requires.worldNormal=!0,e.requires.modelMatrix=!0,e.requires.projectionMatrix=!0,e.addFragmentVariable(this.calpha,"float");let i=e.include(_N.Nodes.transmission),r=[];return r.push(this.thickness.build(e,"f")),r.push(this.ior.build(e,"f")),r.push(this.roughness.build(e,"f")),r.push(this.transmissionSamplerSize.build(e,"v2")),r.push(this.transmissionSamplerMap.getTexture(e,"t")),r.push(this.transmissionDepthMap.getTexture(e,"t")),r.push(this.aspectRatio.build(e,"v2")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_N.Nodes=(e3=new SG(`vec3 blur(sampler2D sp, vec2 U, vec2 scale, float lod, sampler2D dm, vec2 unrefractedU, vec2 aspectRatio) { 4833 // Slightly modified version of this: 4834 // https://www.shadertoy.com/view/ltScRG 4835 4836 // Special case for blur == 0.0 4837 if (lod == 0.0) { 4838 #ifdef TEXTURE_LOD_EXT 4839 return texture2DLodEXT( sp, U, 0.0).rgb; 4840 #else 4841 return textureLod( sp, U, 0.0).rgb; 4842 #endif 4843 } 4844 4845 vec2 texelSize = vec2(1.0) / resolution; 4846 vec2 halton = haltonSequence[frameIndex]; 4847 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4848 float temporalAngle = temporalOffset * PI2; 4849 vec3 res = vec3(0.0); 4850 vec2 uv = vec2(0.0); 4851 vec2 offset = vec2(0.0); 4852 vec2 vogelSample = vec2(0.0); 4853 for (int i = 0; i < NUM_SAMPLES; i++) { 4854 vogelSample = vogelDiskSample(i, NUM_SAMPLES, temporalAngle) * texelSize; 4855 offset = vogelSample * scale * (lod * 10.0); // TODO: used to be hardcoded to 20 4856 uv = U + offset; 4857 float opaqueDepth = unpackRGBAToDepth(textureLod(dm, uv, lod)); 4858 if (opaqueDepth != 0.0 && opaqueDepth < gl_FragCoord.z) { 4859 uv = unrefractedU; 4860 lod = lod > 4.0 ? lod : lod / 2.0; 4861 } 4862 res += textureLod(sp, uv, lod).rgb; 4863 } 4864 return res / float(NUM_SAMPLES); 4865 }`),e4=new SG(`vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) { 4866 // Direction of refracted light. 4867 vec3 refractionVector = refract( -v, n, 1.0 / ior ); 4868 4869 // Compute rotation-independant scaling of the model matrix. 4870 vec3 modelScale; 4871 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 4872 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 4873 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 4874 4875 // The thickness is specified in local space 4876 return normalize( refractionVector ) * thickness * modelScale; 4877 }`),e5=new SG(`float applyIorToRoughness( float roughness, float ior ) { 4878 // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and 4879 // an IOR of 1.5 results in the default amount of microfacet refraction. 4880 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 4881 }`),e6=new SG(`vec3 getTransmissionSample( vec2 fragCoord, float roughness, float ior, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 unrefractedCoords, vec2 aspectRatio) { 4882 // Threejs exports do not pass a depth map to this shader, so we have to fallback to the "Threejs method of blurring" - see 4883 // also the code in convertTransmission.ts, which runs during export 4884 #ifdef IS_THREEJS_EXPORT 4885 float lod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness / 5.0, ior); 4886 return textureBicubic(transmissionSamplerMap, fragCoord.xy, lod).rgb; 4887 #else 4888 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 4889 float lod = applyIorToRoughness(roughness, ior); 4890 return blur(transmissionSamplerMap, fragCoord, vec2(lod), min(framebufferLod / 5.5, 8.5), transmissionDepthMap, unrefractedCoords, aspectRatio); 4891 #endif 4892 }`,[_F.textureBicubic,e5,e3]),e8=new SG(`vec3 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio ) { 4893 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 4894 vec3 refractedRayExit = position + transmissionRay; 4895 4896 // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. 4897 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 4898 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 4899 refractionCoords += 1.0; 4900 refractionCoords /= 2.0; 4901 4902 vec4 ndcPosUnrefracted = projMatrix * viewMatrix * vec4(position, 1.0 ); 4903 vec2 unrefractedCoords = ndcPosUnrefracted.xy / ndcPosUnrefracted.w; 4904 unrefractedCoords += 1.0; 4905 unrefractedCoords /= 2.0; 4906 4907 // Sample framebuffer to get pixel the refracted ray hits. 4908 return getTransmissionSample( refractionCoords, roughness, ior, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, unrefractedCoords, aspectRatio ); 4909 }`,[e6,e4]),{transmission:new SG(`vec3 transmission(float thickness, float ior, float roughness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio, vec3 normal, float mask, float alpha, out float calpha) { 4910 vec3 v = vec3(0.); 4911 if (isOrthographic) { 4912 v = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 4913 } else { 4914 v = normalize(vWPosition - cameraPosition); 4915 } 4916 vec3 transmission = getIBLVolumeRefraction(vWNormal, -v, roughness, vWPosition, modelMatrix, viewMatrix, projectionMatrix, ior, thickness, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, aspectRatio ); 4917
4918 float lalpha = alpha * mask; 4919 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4920 accumAlpha += ( 1.0 - accumAlpha ) * alpha; 4921 4922 return transmission; 4923 }`,[e8])});var _U=((e9=_U||{}).NOISE="noise",e9.MAP="map",e9),_k=class extends SB{constructor(e,t,i,r,s,a,o,l,h,c,d){super("v3"),this.displacementTypeIndex=new _d(0),this.nodeType="VertexDisplacement",this.intensity=e,this.movementOrTexture=t,"map"===Object.values(_U)[this.displacementTypeIndex.value]&&(this.mat=new _v(this.movementOrTexture.value.matrix)),this.cropOrOffset=i,this.scale=c,this.noiseFunctionIndex=d,this.voronoiStyle=r,this.smoothness=s,this.seed=a,this.highCut=o,this.lowCut=l,this.quality=h}generate(e,t){if(!e.isShader("vertex"))return console.warn("VertexDisplacementNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("USE_LAYER_DISPLACE");let i,r=[];switch(r.push("displaced_position"),r.push("displaced_normal"),Object.values(_U)[this.displacementTypeIndex.value]){case"map":i=e.include(_k.Nodes.map),r.push(this.movementOrTexture.getTexture(e,"t")),r.push("uv"),r.push(this.cropOrOffset.build(e,"f")),this.mat&&r.push(this.mat.build(e,"mat3"));break;case"noise":{let t=Object.values(_D)[this.noiseFunctionIndex.value],s=new SG(`vec3 orthogonal(vec3 v) { 4924 return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4925 }`),a="voronoi"==t?` 4926 float v = ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1), voronoiStyle, smoothness, seed, quality); 4927 v = remap(v, lowCut, highCut, 0.0, 1.0); 4928 v = smax(v, 0.0, smoothness * 0.25); 4929 v = smin(v, 1.0, smoothness * 0.25); 4930 4931 return p + n * v * intensity; 4932 `:` 4933 return p + n * ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1)) * intensity; 4934 `,o=new SG(`vec3 distorted(vec3 p, vec3 n, float scale, float intensity, vec3 offset, float neighbour_offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality) { 4935 ${a} 4936 }`,[_I.simplex,_I.simplexFractal,_I.simplexAshima,_I.fbm,_I.perlin,_I.voronoi]),l=new SG(`vec3 vertexDisplacementNoise(vec3 position, vec3 normal, float scale, vec3 offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality, float intensity, out vec3 displaced_normal) { 4937 vec3 displaced_position = distorted(position, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4938 vec3 tangent1 = orthogonal(normal); 4939 vec3 tangent2 = normalize(cross(normal, tangent1)); 4940 4941 // TODO(Max): The distance to the neighbors was originally scaled by 0.1. 4942 // This caused some small oval/circular visual artifacts in the lighting. 4943 // For now, simply using neighbors further away betters the problem, 4944 // but we should figure out the underlying cause when we have some time. 4945 // Maybe its related to how we calculate the tangent and bitangent? 4946 vec3 nearby1 = position + tangent1; 4947 vec3 nearby2 = position + tangent2; 4948 vec3 distorted1 = distorted(nearby1, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4949 vec3 distorted2 = distorted(nearby2, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4950 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 4951 return displaced_position; 4952 }`,[o,s]);i=e.include(l),r.push(this.scale.build(e,"f")),r.push(this.cropOrOffset.build(e,"v3")),r.push(this.movementOrTexture.build(e,"f")),r.push(this.voronoiStyle.build(e,"i")),r.push(this.smoothness.build(e,"f")),r.push(this.seed.build(e,"f")),r.push(this.highCut.build(e,"f")),r.push(this.lowCut.build(e,"f")),r.push(this.quality.build(e,"i"))}}return r.push(this.intensity.build(e,"f")),r.push("displaced_normal"),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_k.Nodes=(e7=new SG(`vec3 orthogonal(vec3 v) { 4953 return normalize(abs(v.x) >
4953 abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4954 }`),te=new SG(`float displacementMapTexture(sampler2D tex, float crop, vec2 uv, mat3 mat, vec2 offset) { 4955 vec2 uvs = (mat * vec3(uv * 2.0 - 1.0, 1.0) / 2.0 + 0.5).xy + offset; 4956 vec4 tmp = texture2D(tex, uvs); 4957 vec3 col = tmp.rgb; 4958 if (crop > 0.5) { 4959 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 4960 return 0.0; 4961 } 4962 } 4963 return col.r; 4964 }`),{map:new SG(`vec3 vertexDisplacementMap(vec3 position, vec3 normal, sampler2D tex, vec2 uv, float crop, mat3 mat, float intensity, out vec3 displaced_normal) { 4965 vec3 displaced_position = position + normal * displacementMapTexture(tex, crop, uv, mat, vec2(0.0)) * intensity; 4966 vec3 tangent1 = normalize(orthogonal(normal)); 4967 vec3 tangent2 = normalize(cross(normal, tangent1)); 4968 vec3 nearby1 = position + tangent1 * 0.1; 4969 vec3 nearby2 = position + tangent2 * 0.1; 4970 vec3 distorted1 = nearby1 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 4971 vec3 distorted2 = nearby2 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 4972 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 4973 return displaced_position; 4974 }`,[e7,te])});var _V={normalRenderTarget:new SJ,normalRenderTargetDepth:new SJ,transmissionRenderTarget:new SJ,aspectRatio:new SF,transmissionSize:new SF(2048,2048),transmissionRenderTargetDepth:new SJ,aoRenderTarget:new SJ,aoEnabled:new _u,pixelRatioNode:new S$(1),resolution:new SF,penumbraSize:new _p(5,.5),frameIndex:new _d(0),transmissionLod:new _d(2)};for(let e of Object.values(_V))e.isRenderGlobal=!0;var _j,_G,_H,_W,_q,_X={skiaWasmUrl:"https://unpkg.com/@splinetool/[email protected]/build/ui.wasm"},_Y=class extends SO{constructor(){super("basic"),this.nodeType="Basic",this.color=new _c(5526619),this.shadingAlpha=new S$(1),this.shadingBlend=new _d(0),this.previousModelViewMatrix=new _y,this.previouseProjectionMatrix=new _y}get category(){return"phong"}generate(e){let t;if(e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({resolution:_V.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r4.merge([sf.fog])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>"].join(` 4975`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 4976 #include <skinbase_vertex> 4977 #include <skinnormal_vertex> 4978 #if !defined( USE_LAYER_DISPLACE ) 4979 #include <defaultnormal_vertex> 4980 #endif 4981 4982 vec3 displaced_position = position; 4983 vec3 displaced_normal = normal; 4984 4985 #if defined( USE_LAYER_DISPLACE ) 4986 vec3 transformed; 4987 vec3 transformedNormal; 4988 #endif 4989 `,"#include <normal_vertex>",` 4990 #if !defined( USE_LAYER_DISPLACE ) 4991 #include <begin_vertex> 4992 #endif /* !USE_LAYER_DISPLACE */ 4993 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
4993":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 4994`)}else{void 0===this.color&&(this.color=new _c(5526619)),this.color.analyze(e,{slot:"color"}),this.alpha&&this.alpha.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"});let i=this.color.flow(e,"c",{slot:"color"}),r=this.alpha?this.alpha.flow(e,"f"):void 0,s=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,a=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0;e.requires.transparent=void 0!==r,e.addParsCode(["varying vec3 vWPosition;","#include <fog_pars_fragment>","#include <dithering_pars_fragment>","varying vec3 vViewPosition;","#include <normal_pars_fragment>"].join(` 4995`));let o=["#include <normal_fragment_begin>",i.code];r&&o.push(r.code,"#ifdef ALPHATEST"," if ( "+r.result+" <= ALPHATEST ) discard;","#endif"),a?o.push(a.code,`vec3 outgoingLight = ${i.result};`,`vec3 finalColor = spe_blend(outgoingLight, ${a.result}, 1.0, SPE_BLENDING_NORMAL);`):o.push(`vec3 finalColor = ${i.result};`);let l="1.0";this.mask&&(this.mask.analyze(e),l=`luminance(${this.mask.flow(e,"v3").result})`),r?o.push(`gl_FragColor = vec4( finalColor, accumAlpha * ${r.result} * ${l} );`):o.push("gl_FragColor = vec4("+i.result+", 1.0 );"),s&&o.push(`gl_FragColor.a *= ${s.result};`),o.push("#include <fog_fragment>","#include <dithering_fragment>"),t=o.join(` 4996`)}return t}},_Q=class extends SO{constructor(){super("lambert"),this.nodeType="Lambert",this.color=new _c(5526619),this.emissive=new _c(0),this.emissiveIntensity=new S$(1),this.previousModelViewMatrix=new _y,this.previouseProjectionMatrix=new _y,this.shadingAlpha=new S$(1),this.shadingBlend=new _d(0),this.occlusion=new _u(!0)}get category(){return"lambert"}build(e){let t;if(e.define("LAMBERT"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({resolution:_V.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r4.merge([sf.fog,sf.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 4997`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 4998 #include <skinbase_vertex> 4999 #include <skinnormal_vertex> 5000 #ifndef USE_LAYER_DISPLACE 5001 #include <defaultnormal_vertex> 5002 #endif 5003 5004 vec3 displaced_position = position; 5005 vec3 displaced_normal = objectNormal; 5006 5007 #ifdef USE_LAYER_DISPLACE 5008 vec3 transformed; 5009 vec3 transformedNormal; 5010 #endif 5011 `,"#include <normal_vertex>",` 5012 #ifndef USE_LAYER_DISPLACE 5013 #include <begin_vertex> 5014 #endif 5015 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5015":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>",` 5016 vec3 diffuse = vec3( 1.0 ); 5017 GeometricContext geometry; 5018 geometry.position = mvPosition.xyz; 5019 geometry.normal = normalize( transformedNormal ); 5020 geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz ); 5021 `),r.push(` 5022 GeometricContext backGeometry; 5023 backGeometry.position = geometry.position; 5024 backGeometry.normal = -geometry.normal; 5025 backGeometry.viewDir = geometry.viewDir; 5026 vLightFront = vec3( 0.0 ); 5027 vIndirectFront = vec3( 0.0 ); 5028 #ifdef DOUBLE_SIDED 5029 vLightBack = vec3( 0.0 ); 5030 vIndirectBack = vec3( 0.0 ); 5031 #endif 5032 IncidentLight directLight; 5033 float dotNL; 5034 vec3 directLightColor_Diffuse; 5035 vIndirectFront += getAmbientLightIrradiance( ambientLightColor ); 5036 vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal ); 5037 #ifdef DOUBLE_SIDED 5038 vIndirectBack += getAmbientLightIrradiance( ambientLightColor ); 5039 vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal ); 5040 #endif 5041 #if NUM_POINT_LIGHTS > 0 5042 #pragma unroll_loop_start 5043 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 5044 getPointLightInfo( pointLights[ i ], geometry, directLight ); 5045 dotNL = dot( geometry.normal, directLight.direction ); 5046 directLightColor_Diffuse = directLight.color; 5047 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5048 #ifdef DOUBLE_SIDED 5049 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5050 #endif 5051 } 5052 #pragma unroll_loop_end 5053 #endif 5054 #if NUM_SPOT_LIGHTS > 0 5055 #pragma unroll_loop_start 5056 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 5057 getSpotLightInfo( spotLights[ i ], geometry, directLight ); 5058 dotNL = dot( geometry.normal, directLight.direction ); 5059 directLightColor_Diffuse = directLight.color; 5060 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5061 #ifdef DOUBLE_SIDED 5062 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5063 #endif 5064 } 5065 #pragma unroll_loop_end 5066 #endif 5067 #if NUM_DIR_LIGHTS > 0 5068 #pragma unroll_loop_start 5069 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 5070 getDirectionalLightInfo( directionalLights[ i ], geometry, directLight ); 5071 dotNL = dot( geometry.normal, directLight.direction ); 5072 directLightColor_Diffuse = directLight.color; 5073 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5074 #ifdef DOUBLE_SIDED 5075 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5076 #endif 5077 } 5078 #pragma unroll_loop_end 5079 #endif 5080 #if NUM_HEMI_LIGHTS > 0 5081 #pragma unroll_loop_start 5082 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 5083 vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 5084 #ifdef DOUBLE_SIDED 5085 vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal ); 5086 #endif 5087 } 5088 #pragma unroll_loop_end 5089 #endif 5090 `," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5091`)}else{e.mergeUniform({penumbraSize:_V.penumbraSize}),e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({aoMap:_V.aoRenderTarget}),e.mergeUniform({aoEnabled:_V.aoEnabled}),void 0===this.color&&(this.color=new _c(5526619)),this.color.analyze(e,{slot:"color"}),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.emissive.flow(e,"c",{slot:"emissive"}),s=this.emissiveIntensity.flow(e,"f",{slot:"emissive"}),a=this.occlusion.flow(e,"b",{slot:"occlusion"}
vendor: 6,231 bytes, lines 5091-5157
5091),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#include <normal_pars_fragment>","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <fog_pars_fragment>","#include <shadowmap_pars_fragment>","#include <shadowmask_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5092`));let u=["#include <normal_fragment_begin>",` 5093 // NOTE: gl_FrontFacing alternative using face normal estimation. 5094 vec3 viewdx = dFdx(vViewPosition); 5095 vec3 viewdy = dFdy(vViewPosition); 5096 vec3 faceNormal = normalize(cross(viewdx, viewdy)); 5097 bool isFrontFacing = (dot(normal, faceNormal) >= 0.0); 5098 `,"#include <clipping_planes_fragment>"];u.push(i.code,"vec3 diffuseColor = "+i.result+";","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("#ifdef DOUBLE_SIDED"," reflectedLight.indirectDiffuse += ( isFrontFacing ) ? vIndirectFront : vIndirectBack;","#else"," reflectedLight.indirectDiffuse += vIndirectFront;","#endif","#include <lightmap_fragment>","reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );","#ifdef DOUBLE_SIDED"," reflectedLight.directDiffuse = ( isFrontFacing ) ? vLightFront : vLightBack;","#else"," reflectedLight.directDiffuse = vLightFront;","#endif","reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();"),r&&u.push(r.code,"reflectedLight.directDiffuse += "+r.result+" * "+s.result+";"),u.push("vec3 ao = aoEnabled && "+a.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = (reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) ;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(` 5099 if (outgoingLight != diffuseColor) { 5100 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5101 accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu; 5102 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} ); 5103 5104 outgoingLight *= ao; 5105 } 5106 `),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result} );`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(` 5107`)}return t}},_Z={dHdxy:new SG(`vec2 dHdxy(sampler2D bumpMap, vec2 bumpMapUv, float bumpScale) { 5108 5109 // Gradient of UVs w.r.t. X coordinate (in screen-space) 5110 vec2 dSTdx = dFdx(bumpMapUv); 5111 5112 // Gradient of UVs w.r.t. Y coordinate (in screen-space) 5113 vec2 dSTdy = dFdy(bumpMapUv); 5114 5115 // Forward differencing 5116 float Hll = bumpScale * luminance(texture(bumpMap, bumpMapUv).rgb); 5117 float dBx = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdx).rgb) - Hll; 5118 float dBy = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdy).rgb) - Hll; 5119 5120 return vec2( dBx, dBy ); 5121 }`),perturbNormalArb:new SG(`vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 5122 vec3 vSigmaX = dFdx( surf_pos.xyz ); 5123 vec3 vSigmaY = dFdy( surf_pos.xyz ); 5124 vec3 vN = surf_norm; // normalized 5125 5126 vN = normalize(vN); 5127 5128 vec3 R1 = cross( vSigmaY, vN ); 5129 vec3 R2 = cross( vN, vSigmaX ); 5130 5131 R1 = normalize(R1); 5132 R2 = normalize(R2); 5133 5134 float fDet = dot( vSigmaX, R1 ) * faceDirection; 5135 5136 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 5137 return normalize( abs( fDet ) * vN - vGrad ); 5138 }`)},_K=class extends SO{constructor(){super("phong"),this.nodeType="Phong",this.color=new _c(5526619),this.specular=new _c(1118481),this.shininess=new S$(30),this.previousModelViewMatrix=new _y,this.previouseProjectionMatrix=new _y,this.shadingAlpha=new S$(1),this.shadingBlend=new _d(0),this.occlusion=new _u(!0)}get category(){return"phong"}build(e){let t;if(e.define("PHONG"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({resolution:_V.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r4.merge([sf.fog,sf.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5139`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5140 #include <skinbase_vertex> 5141 #include <skinnormal_vertex> 5142 #ifndef USE_LAYER_DISPLACE 5143 #include <defaultnormal_vertex> 5144 #endif 5145 5146 vec3 displaced_position = position; 5147 vec3 displaced_normal = objectNormal; 5148 5149 #ifdef USE_LAYER_DISPLACE 5150 vec3 transformed; 5151 vec3 transformedNormal; 5152 #endif 5153 `,"#include <normal_vertex>",` 5154 #ifndef USE_LAYER_DISPLACE 5155 #include <begin_vertex> 5156 #endif 5157 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5157":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5158`)}else{e.mergeUniform({penumbraSize:_V.penumbraSize}),e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({aoMap:_V.aoRenderTarget}),e.mergeUniform({aoEnabled:_V.aoEnabled}),void 0===this.color&&(this.color=new _c(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e);let i=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let r=this.color.flow(e,"c",{slot:"color"}),s=this.specular.flow(e,"c"),a=this.shininess.flow(e,"f"),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["varying vec3 vWPosition;","uniform vec3 emissive;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5159`));let u=["#include <normal_fragment_begin>",` 5160 // NOTE: gl_FrontFacing alternative using face normal estimation. 5161 vec3 viewdx = dFdx(vViewPosition); 5162 vec3 viewdy = dFdy(vViewPosition); 5163 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5164 if (dot(normal, faceNormal) < 0.0) { 5165 normal *= -1.0; 5166 } 5167 `," BlinnPhongMaterial material;"];if(this.bumpMap){e.include(_Z.dHdxy),e.include(_Z.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5168 vec3 bumpNormal = vec3(0.0); 5169 { 5170 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5171 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5172 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5173 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5174 5175 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5176 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5177 5178 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5179 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5180 5181 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5182 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5183 5184 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5185 bumpNormal = normalize(bumpNormal); 5186 } 5187 5188 normal = bumpNormal; 5189 `:` 5190 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5191 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5192 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5193 `,u.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5194 ${i.result}; 5195 ${s} 5196 `)}u.push(r.code," vec3 diffuseColor = "+r.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;",s.code," vec3 specular = "+s.result+";",a.code," float shininess = max( 0.0001, "+a.result+" );"," float specularStrength = 1.0;"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("material.diffuseColor = diffuseColor;"),u.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),u.push("vec3 ao = aoEnabled && "+i.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(` 5197 if (outgoingLight != diffuseColor) { 5198 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5199 accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu; 5200 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} ); 5201 5202 outgoingLight *= ao; 5203 } 5204 `),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result});`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(` 5205`)}return t}},_J=class extends SO{constructor(){super("standard"),this.nodeType="Standard",this.color=new _c(5526619),this.roughness=new S$(.3),this.metalness=new S$(0),this.reflectivity=new S$(.5),this.previousModelViewMatrix=new _y,this.previouseProjectionMatrix=new _y,this.shadingAlp
vendor: 1,586 bytes, lines 5205-5224
5205ha=new S$(1),this.shadingBlend=new _d(0),this.occlusion=new _u(!0)}get category(){return"physical"}build(e){let t;if(e.define("STANDARD"),e.requires.lights=!0,e.extensions.derivatives=!0,e.extensions.shaderTextureLOD=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({resolution:_V.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r4.merge([sf.fog,sf.lights])),sf.LTC_1&&(e.uniforms.ltc_1={value:void 0},e.uniforms.ltc_2={value:void 0}),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5206`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5207 #include <skinbase_vertex> 5208 #include <skinnormal_vertex> 5209 #if !defined( USE_LAYER_DISPLACE ) 5210 #include <defaultnormal_vertex> 5211 #endif 5212 5213 vec3 displaced_position = position; 5214 vec3 displaced_normal = objectNormal; 5215 5216 #if defined( USE_LAYER_DISPLACE ) 5217 vec3 transformed; 5218 vec3 transformedNormal; 5219 #endif 5220 `,"#include <normal_vertex>",` 5221 #if !defined( USE_LAYER_DISPLACE ) 5222 #include <begin_vertex> 5223 #endif /* !USE_LAYER_DISPLACE */ 5224 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5224":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5225`)}else{e.mergeUniform({penumbraSize:_V.penumbraSize}),e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({aoMap:_V.aoRenderTarget}),e.mergeUniform({aoEnabled:_V.aoEnabled});let i={gamma:!0};void 0===this.color&&(this.color=new _c(5526619)),this.color.analyze(e,{slot:"color",context:i}),this.roughness.analyze(e),this.metalness.analyze(e);let r=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e),this.reflectivity&&this.reflectivity.analyze(e);let s=this.color.flow(e,"c",{slot:"color",context:i}),a=this.roughness.flow(e,"f"),o=this.metalness.flow(e,"f"),l=this.shadingAlpha.flow(e,"f"),h=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,d=this.alpha?this.alpha.flow(e,"f"):void 0,u=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,p=this.reflectivity?this.reflectivity.flow(e,"f"):void 0;e.requires.transparent=void 0!==d,e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <dithering_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>"].join(` 5226`));let f=["#include <clipping_planes_fragment>"," #include <normal_fragment_begin>",` 5227 // NOTE: gl_FrontFacing alternative using face normal estimation. 5228 vec3 viewdx = dFdx(vViewPosition); 5229 vec3 viewdy = dFdy(vViewPosition); 5230 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5231 if (dot(normal, faceNormal) < 0.0) { 5232 normal *= -1.0; 5233 } 5234 `," PhysicalMaterial material;"," material.diffuseColor = vec3( 1.0 );"];if(this.bumpMap){e.include(_Z.dHdxy),e.include(_Z.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5235 vec3 bumpNormal = vec3(0.0); 5236 { 5237 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5238 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5239 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5240 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5241 5242 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5243 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5244 5245 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5246 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5247 5248 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5249 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5250 5251 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5252 bumpNormal = normalize(bumpNormal); 5253 } 5254 5255 normal = bumpNormal; 5256 `:` 5257 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5258 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5259 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5260 `,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5261 ${i.result}; 5262 ${s} 5263 `)}if(f.push(s.code," vec3 diffuseColor = "+s.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",o.code," float metalnessFactor = "+o.result+";"),this.roughnessMap){let t=this.roughnessMap.texture.flow(e,"t"),i=this.roughnessMap.flow(e,"v3"),r="";r=4===this.roughnessMap.projection.value?` 5264 float roughnessChange = 1.0; 5265 { 5266 vec2 uv0 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5267 vec2 uv1 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5268 vec2 uv2 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5269 vec3 weights = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5270 5271 float r0 = luminance(texture(${t.result}, uv0).rgb) * roughnessScale; 5272 float r1 = luminance(texture(${t.result}, uv1).rgb) * roughnessScale; 5273 float r2 = luminance(texture(${t.result}, uv2).rgb) * roughnessScale; 5274 5275 roughnessChange = (r0 * weights.z + r1 * weights.x + r2 * weights.y); 5276 } 5277 float roughnessFactor = roughnessChange * ${a.result}; 5278 `:` 5279 vec2 roughnessMapCachedUv = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5280 5281 vec4 vals = texture(${t.result}, roughnessMapCachedUv); 5282 float roughnessFactor = luminance(vals.rgb) * ${a.result}; 5283 `,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5284 ${i.result}; 5285 5286 const float roughnessScale = 1.0; 5287 5288 ${r} 5289 `)}else f.push(a.code," float roughnessFactor = "+a.result+";");d&&f.push(d.code,"#ifdef ALPHATEST"," if ( "+d.result+" <= ALPHATEST ) discard;","#endif"),f.push("vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );"),f.push("material.diffuseColor = diffuseColor * ( 1.0 - metalnessFactor );","material.roughness = max( roughnessFactor, 0.0525 );","material.roughness += geometryRoughness;","material.roughness = min( material.roughness, 1.0 );","material.roughness = clamp( roughnessFactor, 0.04, 1.0 );"),p?f.push(p.code,"material.specularColor = mix( vec3( 0.16 * pow2( "+p.result+" ) ), diffuseColor, metalnessFactor );"):f.push("material.specularColor = mix( vec3( 0.04 ), diffuseColor, metalnessFactor );"),f.push("#include <lights_fragment_begin>"),f.push("#include <lights_fragment_end>"),f.push("vec3 ao = aoEnabled && "+r.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular;");let m="1.0";this.mask&&(this.mask.analyze(e),m=`luminance(${this.mask.flow(e,"v3").result})`),f.push(` 5290 if (outgoingLight != diffuseColor) { 5291 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5292 accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * ${m} * lightAccu; 5293 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result} * ${m}, ${h.result} ); 5294 5295 outgoingLight *= ao; 5296 } 5297 `),c&&f.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),d?f.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${d.result} );`):f.push("gl_FragColor = vec4( outgoingLight, 1.0 );
5297"),u&&f.push(`gl_FragColor.a *= ${u.result};`),f.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=f.join(` 5298`)}return t}},_$=class extends SO{constructor(){super("toon"),this.nodeType="Toon",this.color=new _c(5526619),this.specular=new _c(1118481),this.shininess=new S$(30),this.previousModelViewMatrix=new _y,this.previouseProjectionMatrix=new _y,this.shadingAlpha=new S$(1),this.shadingBlend=new _d(0)}get category(){return"toon"}build(e){let t;if(e.define("TOON"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({resolution:_V.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r4.merge([sf.fog,sf.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5299`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5300 #include <skinbase_vertex> 5301 #include <skinnormal_vertex> 5302 #ifndef USE_LAYER_DISPLACE 5303 #include <defaultnormal_vertex> 5304 #endif 5305 5306 vec3 displaced_position = position; 5307 vec3 displaced_normal = objectNormal; 5308 5309 #ifdef USE_LAYER_DISPLACE 5310 vec3 transformed; 5311 vec3 transformedNormal; 5312 #endif 5313 `,"#include <normal_vertex>",` 5314 #ifndef USE_LAYER_DISPLACE 5315 #include <begin_vertex> 5316 #endif 5317 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5317":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <fog_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5318`)}else{e.mergeUniform({penumbraSize:_V.penumbraSize}),e.mergeUniform({frameIndex:_V.frameIndex}),e.mergeUniform({aoMap:_V.aoRenderTarget}),e.mergeUniform({aoEnabled:_V.aoEnabled}),void 0===this.color&&(this.color=new _c(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.specular.flow(e,"c"),s=this.shininess.flow(e,"f"),a=this.shadingAlpha.flow(e,"f"),o=this.shadingBlend.flow(e,"i"),l=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0,c=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==h,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vWPosition;","#include <normal_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <dithering_pars_fragment>",` 5319 varying vec3 vViewPosition; 5320 struct ToonMaterial { 5321 vec3 diffuseColor; 5322 vec3 specularColor; 5323 float specularShininess; 5324 float specularStrength; 5325 }; 5326 void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5327 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 5328 5329 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5330 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 5331 } 5332 void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5333 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5334 } 5335 #define RE_Direct RE_Direct_Toon 5336 #define RE_IndirectDiffuse RE_IndirectDiffuse_Toon 5337 #define Material_LightProbeLOD( material ) (0) 5338 `,"#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>"].join(` 5339`));let d=["#include <normal_fragment_begin>",` 5340 // NOTE: gl_FrontFacing alternative using face normal estimation. 5341 vec3 viewdx = dFdx(vViewPosition); 5342 vec3 viewdy = dFdy(vViewPosition); 5343 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5344 if (dot(normal, faceNormal) < 0.0) { 5345 normal *= -1.0; 5346 } 5347 `," ToonMaterial material;"];if(this.bumpMap){e.include(_Z.dHdxy),e.include(_Z.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?` 5348 vec3 bumpNormal = vec3(0.0); 5349 { 5350 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5351 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5352 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5353 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5354 5355 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5356 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5357 5358 vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5359 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5360 5361 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5362 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5363 5364 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5365 bumpNormal = normalize(bumpNormal); 5366 } 5367 5368 normal = bumpNormal; 5369 `:` 5370 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5371 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5372 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5373 `,d.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5374 ${i.result}; 5375 ${s} 5376 `)}d.push(i.code," vec3 diffuseColor = "+i.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",r.code," vec3 specular = "+r.result+";",s.code," float shininess = max( 0.0001, "+s.result+" );"," float specularStrength = 1.0;"),h&&d.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),d.push("material.diffuseColor = diffuseColor;"),d.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),d.push("vec3 ao = aoEnabled ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) * ao) + reflectedLight.directSpecular;");let u="1.0";this.mask&&(this.mask.analyze(e),u=`luminance(${this.mask.flow(e,"v3").result})`),d.push(` 5377 if (outgoingLight != diffuseColor) { 5378 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5379 accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * ${u} * lightAccu; 5380 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result} * ${u}, ${o.result} ); 5381 } 5382 `),l&&d.push(l.code,`outgoingLight = spe_blend(outgoingLight, ${l.result}, 1.0, SPE_BLENDING_NORMAL);`),h?d.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):d.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),c&&d.push(`gl_FragColor.a *= ${c.result};`),d.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=d.join(` 5383`)}return t}},_0=class{constructor(e=1e4){this.timeout=e,this.cache=new Map,this.head={data:null,time:0,src:null,next:null,prev:null},this.tail={data:null,time:1/0,src:null,next:null,prev:null},this.hasClean=!1,this.head.next=this.tail,this.tail.prev=this.head}log(...e){}remove(e){let t=this.cache.get(e);t&&(this.dispose(e,t.data),this.cache.delete(e),t.prev.next=t.next,t.next.prev=t.prev)}scheduleCleanup(){this.hasClean||(this.log("scheduled cleanup"),this.hasClean=!0,setTimeout(()=>{this.hasClean=!1,this.log("cleaning");let e=Date.now(),t=this.head.next;for(;t.time<e-this.timeout;)this.dispose(t.src,t.data),this.cache.delete(t.src),(t=t.next).prev=this.head,this.head.next=t;this.head.next!==this.tail?this.scheduleCleanup():this.log("no more cleanup")},this.timeout+1e3))}has(e){return this.cache.get(e)?.data}load(e){let t=Date.now(),i=this.cache.get(e);return void 0===i?(i={data:this.create(e),src:e,time:t,next:null,prev:null},this.cache.set(e,i)):(i.time=t,i.prev.next=i.next,i.next.prev=i.prev),i.prev=this.tail.prev,i.next=this.tail,this.tail.prev.next=i,this.tail.prev=i,this.scheduleCleanup(),i.data}},_1=class extends _0{create(e){return URL.createObjectURL(new Blob([e]))}dispose(e,t){URL.revokeObjectURL(t)}},_2=class{constructor(e,t){this.data=e,this.cache=t,this.refCount=0}deref(){this.refCount,this.refCount-=1,0===this.refCount&&(this.cache.remove(this),this.dispose())}dispose(){this.refCount}},_3=class{constructor(){this.cache=new Map}remove(e){this.cache.delete(e.data)}load(e){let t=this.cache.get(e);return void 0===t&&(t=this.create(e),this.cache.set(e,t)),t.refCount+=1,t}},_4=class extends _2{constructor(e,t){super(e,t.imageHolderCache),this.data=e,this.shared=t,this.loaded=!1,this.isVideo=!1,this.isBuffer=!1,this._cache={1e3:{},1001:{},1002:{}},this.isVideo="video"===e.type,this.isBuffer=!0===e.isWebGLRenderTarget,this.loadPromise=this.updateSrc(this.isBuffer?e:e.data)}async updateSrc(e){if(typeof document>"u")return;this.disposeTextures(),this.loaded=!1;let t=()=>{for(let e of(this.loaded=!0,Object.values(this._cache)))for(let t of Object.values(e))for(let e of Object.values(t))e&&(e.image=this.img,e.needsUpdate=!0);this.shared.requestRender()};if(this.isBuffer)this.img=e,this.loaded=!0;else if(this.isVideo){if(this.img=document.createElement("video"),this.img.preload="auto",this.img.playsInl
5383ine=!0,this.img.currentTime=.01,"string"!=typeof e){let t;var i=new FileReader;i.readAsDataURL(new Blob([e],{type:"video/mp4"})),await new Promise(e=>{i.onloadend=i=>{t=i.target?.result,e(null)}}),this.img.src=t}else this.img.src=e;this.img.onloadeddata=()=>{t()}}else this.img=new Image,this.img.src="string"==typeof e?e:(_q||(_q=new _1),_q.load(e)),this.img.onload=t,await new Promise(e=>{this.img.onload=()=>{t(),e(null)}})}getTexture(e,t=1008,i=1006){let r=this._cache[e]?.[t]?.[i];if(r)return r;{let r;return r=this.isBuffer?this.img.texture:this.isVideo?new nY(this.img,void 0,e,e):new id(this.img,void 0,e,e,i,t),this.loaded&&(r.needsUpdate=!0),void 0===this._cache[e]&&(this._cache[e]={}),void 0===this._cache[e][t]&&(this._cache[e][t]={}),this._cache[e][t][i]=r,r}}setNeedsUpdate(e){for(let t of Object.values(this._cache))for(let i of Object.values(t))for(let t of Object.values(i))t&&(t.needsUpdate=e)}disposeTextures(){for(let[e,t]of Object.entries(this._cache))for(let[i,r]of Object.entries(t))for(let[t,s]of Object.entries(r))s?.dispose(),void 0!==this._cache[e]&&void 0!==this._cache[e][i]&&(this._cache[e][i][t]=void 0)}dispose(){super.dispose(),this.disposeTextures()}},_5=class extends _4{},_6={year:0,month:1,day:2,hour:3,minute:4,second:5},_8={};function _9(e,t,i,r,s,a,o){var l=new Date(0);return l.setUTCFullYear(e,t,i),l.setUTCHours(r,s,a,o),l}var _7={timezoneZ:/^(Z)$/,timezoneHH:/^([+-]\d{2})$/,timezoneHHMM:/^([+-]\d{2}):?(\d{2})$/};function Ae(e,t,i){if(!e||(r=_7.timezoneZ.exec(e)))return 0;if(r=_7.timezoneHH.exec(e))return Ai(a=parseInt(r[1],10))?-(36e5*a):NaN;if(r=_7.timezoneHHMM.exec(e)){a=parseInt(r[1],10);var r,s,a,o=parseInt(r[2],10);return Ai(a,o)?(s=36e5*Math.abs(a)+6e4*o,a>0?-s:s):NaN}if(function(e){if(Ar[e])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),Ar[e]=!0,!0}catch{return!1}}(e)){t=new Date(t||Date.now());var l,h=At(i?t:_9((l=t).getFullYear(),l.getMonth(),l.getDate(),l.getHours(),l.getMinutes(),l.getSeconds(),l.getMilliseconds()),e);return-(i?h:function(e,t,i){var r=e.getTime()-t,s=At(new Date(r),i);if(t===s)return t;var a=At(new Date(r-=s-t),i);return s===a?s:Math.max(s,a)}(t,h,e))}return NaN}function At(e,t){var i,r,s,a=(s=function(e){if(!_8[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z"));_8[e]="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return _8[e]}(t)).formatToParts?function(e,t){try{for(var i=e.formatToParts(t),r=[],s=0;s<i.length;s++){var a=_6[i[s].type];a>=0&&(r[a]=parseInt(i[s].value,10))}return r}catch(e){if(e instanceof RangeError)return[NaN];throw e}}(s,e):(i=s.format(e).replace(/\u200E/g,""),[(r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(i))[3],r[1],r[2],r[4],r[5],r[6]]),o=_9(a[0],a[1]-1,a[2],a[3]%24,a[4],a[5],0).getTime(),l=e.getTime(),h=l%1e3;return o-(l-=h>=0?h:1e3+h)}function Ai(e,t){return -23<=e&&e<=23&&(null==t||0<=t&&t<=59)}var Ar={},As=tw(tC(),1),Aa=tw(tT(),1),An={dateTimePattern:/^([0-9W+-]+)(T| )(.*)/,datePattern:/^([0-9W+-]+)(.*)/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timeZone:/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/};function Ao(e,t,i){t=t||0,i=i||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var s=7*t+i+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+s),r}var Al=[31,28,31,30,31,30,31,31,30,31,30,31],Ah=[31,29,31,30,31,30,31,31,30,31,30,31];function Ac(e){return e%400==0||e%4==0&&e%100!=0}function Ad(e,t,i){if(t<0||t>11)return!1;if(null!=i){if(i<1)return!1;var r=Ac(e);if(r&&i>Ah[t]||!r&&i>Al[t])return!1}return!0}function Au(e,t,i){return!(t<0||t>52||null!=i&&(i<0||i>6))}function Ap(e,t,i){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=i&&(i<0||i>=60))}function Af(e,t){return t.color(e)}function Am(e=new Date,t){var i,r,s,a,o,l;let h,c,d=t.format,u=e.getSeconds(),p=e;t&&null!==t.timeZone&&(i=new Date,r=t.timeZone,s=function(e,t){if(arguments.length<1)throw TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var i=t||{},r=null==i.additionalDigits?2:(0,As.default)(i.additionalDigits);if(2!==r&&1!==r&&0!==r)throw RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if(!("string"==typeof e||"[object String]"===Object.prototype.toString.call(e)))return new Date(NaN);var s=function(e){var t,i={},r=An.dateTimePattern.exec(e);if(r?(i.date=r[1],t=r[3]):(r=An.datePattern.exec(e))?(i.date=r[1],t=r[2]):(i.date=null,t=e),t){var s=An.timeZone.exec(t);s?(i.time=t.replace(s[1],""),i.timeZone=s[1].trim()):i.time=t}return i}(e),a=function(e,t){var i,r=An.YYY[t],s=An.YYYYY[t];if(i=An.YYYY.exec(e)||s.exec(e)){var a=i[1];return{year:parseInt(a,10),restDateString:e.slice(a.length)}}if(i=An.YY.exec(e)||r.exec(e)){var o=i[1];return{year:100*parseInt(o,10),restDateString:e.slice(o.length)}}return{year:null}}(s.date,r),o=a.year,l=function(e,t){if(null===t)return null;
5383if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(i=An.MM.exec(e))return r=new Date(0),Ad(t,s=parseInt(i[1],10)-1)?(r.setUTCFullYear(t,s),r):new Date(NaN);if(i=An.DDD.exec(e)){r=new Date(0);var i,r,s,a,o=parseInt(i[1],10);return!function(e,t){if(t<1)return!1;var i=Ac(e);return!(i&&t>366||!i&&t>365)}(t,o)?new Date(NaN):(r.setUTCFullYear(t,0,o),r)}if(i=An.MMDD.exec(e)){r=new Date(0),s=parseInt(i[1],10)-1;var l=parseInt(i[2],10);return Ad(t,s,l)?(r.setUTCFullYear(t,s,l),r):new Date(NaN)}if(i=An.Www.exec(e))return Au(t,a=parseInt(i[1],10)-1)?Ao(t,a):new Date(NaN);if(i=An.WwwD.exec(e)){a=parseInt(i[1],10)-1;var h=parseInt(i[2],10)-1;return Au(t,a,h)?Ao(t,a,h):new Date(NaN)}return null}(a.restDateString,o);if(isNaN(l)||!l)return new Date(NaN);var h,c=l.getTime(),d=0;if(s.time&&isNaN(d=function(e){var t,i,r;if(t=An.HH.exec(e))return Ap(i=parseFloat(t[1].replace(",",".")))?i%24*36e5:NaN;if(t=An.HHMM.exec(e))return Ap(i=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?i%24*36e5+6e4*r:NaN;if(t=An.HHMMSS.exec(e)){i=parseInt(t[1],10),r=parseInt(t[2],10);var s=parseFloat(t[3].replace(",","."));return Ap(i,r,s)?i%24*36e5+6e4*r+1e3*s:NaN}return null}(s.time)))return new Date(NaN);if(s.timeZone||i.timeZone){if(isNaN(h=Ae(s.timeZone||i.timeZone,new Date(c+d))))return new Date(NaN)}else h=(0,Aa.default)(new Date(c+d)),h=(0,Aa.default)(new Date(c+d+h));return new Date(c+d+h)}(i,void 0),a=Ae(r,s,!0),o=new Date(s.getTime()-a),(l=new Date(0)).setFullYear(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()),l.setHours(o.getUTCHours(),o.getUTCMinutes(),o.getUTCSeconds(),o.getUTCMilliseconds()),p=l);let f=p.getHours(),m=p.getMinutes(),g;"12ampm"===t.format12h24h&&(g=f>=12?"PM":"AM");let v=f;switch("24"!==t.format12h24h&&0==(v=f%12)&&(v=12),d){case"HH:mm:ss":h=[v,m,u];break;case"HH:mm":h=[v,m];break;case"HH":h=[v],g=void 0;break;case"mm":h=[m],g=void 0;break;case"ss":h=[u],g=void 0;break;case"year":c=p.getFullYear();break;case"month":c=p.getMonth()+1;break;case"dayOfYear":c=Math.floor((p.getTime()-new Date(p.getFullYear(),0,0).getTime())/864e5);break;case"dayOfMonth":c=p.getDate();break;case"secondOfDay":c=3600*f+60*m+u;break;default:console.error("Unknown time format",d),c=0}return void 0!==h?{textValue:h,suffix:g}:c}function Ag(e,t){let{alpha:i,mode:r,isMask:s}=e,a="string"==typeof i?(Number(t.getVariable(i))??100)/100:i;return{type:e.type,alpha:a,mode:r,isMask:s}}var Av=class extends SU{},Ay={noise:["noiseType"],texture:["projection","axis","side"],video:["projection","axis","side"],displace:["noiseType"],light:["roughnessMap","bumpMap"],depth:["smooth","isWorldSpace","gradientType","isVector"],pattern:["style","projection","axis"]},Ax={depth:["colors"]};function Ab(e,t,i){let r=i.uniforms[`f${i.id}_texture`];if(!r)return!1;if("image"in e){let i=e.image,s=t.image(i);r.image instanceof _5||r.image.deref(),r.image=s}if("video"in e){let i=e.video,s=t.video(i);r.image instanceof _5||r.image.deref(),r.image=s}if("wrapping"in e&&(r.wrap=e.wrapping),"minFilter"in e&&(r.minFilter=e.minFilter),"magFilter"in e&&(r.magFilter=e.magFilter),"rotation"in e&&i.uniforms[`f${i.id}_rotation`])return i.uniforms[`f${i.id}_rotation`].value=(e.rotation??0)*tZ.DEG2RAD,!1;if("repeat"in e||"offset"in e||"rotation"in e){let t=i.uniforms[`f${i.id}_mat`];"repeat"in e&&(t.repeat=e.repeat),"offset"in e&&(t.offset=e.offset),"rotation"in e&&(t.rotation=e.rotation??0),t.updateMatrix()}return!1}var Aw=(e,t,i)=>Math.max(0,Math.min(1,Number(t.getVariable("number"==typeof e?100*e:e,i)??100)/100))??1,AS=class{constructor(e,t,i,r,s){for(let s in this.id=e,this.uuid=t,this.data=i,this.uniforms={},r)this.uniforms[`f${this.id}_${s}`]=r[s];for(let e in i)AC(e,this,i,s)}get type(){return this.data.type}static create(e,t,i,r){if("light"===i.type)return AM.createLigherLayer(e,t,i,r);if("texture"===i.type||"video"===i.type){let s="texture"===i.type?r.uiBuffer(i.texture.image)??r.image(i.texture.image):r.video(i.texture.video),a=new _g(s,i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),o=new _m(s),l=new _b(i.texture.repeat,i.texture.offset,i.texture.rotation??0),h=new S$(i.crop?1:0),c=new _d(i.projection??0),d=new _d(["x","y","z"].indexOf(i.axis)??0),u=new _d(i.side??0),p=new SF(i.size?new tK(i.size[0],i.size[1]):new tK(100,100)),f=new S$(i.blending??0),m=new S$(Aw(i.alpha,r)),g=new _d(i.mode??0),v=new _u(i.isMask??!1),y=new _M(a,o,h,c,d,u,p,f,l,m,g,v),x=new SK(y.calpha,"f");return new A_(e,t,i,{texture:a,textureSize:o,crop:h,projection:c,axis:d,side:u,size:p,blending:f,mat:l,alpha:m,mode:g,isMask:v},y,g,x,v,r)}if("matcap"===i.type){let s=new _g(r.image(i.texture.image),i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),a=new S$(Aw(i.alpha,r)),o=new _d(i.mode??0),l=new _u(i.isMask??!1),h=new S$((i.texture.rotation??0)*tZ.DEG2RAD),c=new _P(s,a,o,l,h),d=new SK(c.calpha,"f");return new A_(e,t,i,{texture:s,alpha:a,mode:o,isMask:l,rotation:h},c,o,d,l,r)}
5383if("displace"!==i.type){let s;return s=function(e,t){switch(e.type){case"fresnel":return function(e,t){let{bias:i,scale:r,intensity:s,factor:a,color:o}=e;return{...Ag(e,t),color:Af(o,t),bias:i,scale:r,intensity:s,factor:a}}(e,t);case"gradient":return function(e,t){let{gradientType:i,smooth:r,colors:s,steps:a,angle:o,offset:l,morph:h}=e;return{...Ag(e,t),gradientType:i,smooth:r,colors:s.map(e=>new iu(e[0],e[1],e[2],e[3])),num:s.length,steps:a,offset:new tK(...l),morph:new tK(...h),angle:o}}(e,t);case"depth":return function(e,t){let{gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:l,direction:h,colors:c,steps:d,smooth:u}=e;return{...Ag(e,t),gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:new ix(...l),direction:h?new ix(...h):new ix(1,0,0),colors:c.map(e=>void 0!==e?new iu(e[0],e[1],e[2],e[3]):new iu(0,0,0,0)),steps:d.slice(0,c.length),smooth:u}}(e,t);case"normal":return function(e,t){let{cnormal:i}=e;return{...Ag(e,t),cnormal:new ix(i[0],i[1],i[2])}}(e,t);case"noise":return{...Ag(e,t),scale:e.scale,move:e.move,fA:new tK(...e.fA),fB:new tK(...e.fB),size:new ix(...e.size),distortion:new tK(...e.distortion),colorA:Af(e.colorA,t),colorB:Af(e.colorB,t),colorC:Af(e.colorC,t),colorD:Af(e.colorD,t),noiseType:e.noiseType,voronoiStyle:e.voronoiStyle,highCut:e.highCut,lowCut:e.lowCut,smoothness:e.smoothness,seed:e.seed,quality:e.quality};case"rainbow":return{...Ag(e,t),filmThickness:e.filmThickness,movement:e.movement,wavelengths:new ix(...e.wavelengths),noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,offset:new ix(...e.offset)};case"toon":return{...Ag(e,t),positioning:e.positioning,colors:e.colors.map(e=>new iu(e[0],e[1],e[2],e[3])),num:e.colors.length,steps:e.steps,source:new ix(...e.source),isWorldSpace:e.isWorldSpace,noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,shadowColor:Af(e.shadowColor,t),offset:new ix(...e.offset)};case"outline":return{...Ag(e,t),outlineColor:Af(e.outlineColor,t),contourColor:Af(e.contourColor,t),outlineWidth:e.outlineWidth,contourWidth:e.contourWidth,outlineThreshold:e.outlineThreshold,contourThreshold:e.contourThreshold,outlineSmoothing:e.outlineSmoothing,contourFrequency:e.contourFrequency,contourDirection:new ix(...e.contourDirection),positionalLines:e.positionalLines,compensation:e.compensation};case"transmission":return{...Ag(e,t),thickness:e.thickness,ior:e.ior,roughness:e.roughness};case"color":return{...Ag(e,t),color:Af(e.color,t)};case"pattern":return{...Ag(e,t),style:e.style,projection:e.projection,axis:e.axis,blending:e.blending,offset:new tK(...e.offset),colorA:Af(e.colorA,t),colorB:Af(e.colorB,t),frequency:new tK(...e.frequency),size:e.size,variation:e.variation,smoothness:e.smoothness,zigzag:e.zigzag,rotation:e.rotation,vertical:new tK(...e.vertical),horizontal:new tK(...e.horizontal),sides:e.sides}}}(i,r),function(e,t,i,r,s){switch(e.type){case"color":{let a=new _c(r.color??5526619),o=AE(r),l=new __(a,o.alpha),h=new SK(l.calpha,"f");return new A_(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}case"fresnel":{let a=new _c(r.color??16777215),o=new S$(r.bias??.1),l=new S$(r.scale??1),h=new S$(r.intensity??2),c=new S$(r.factor??1),d=AE(r),u=new _C(a,o,l,h,c,d.alpha,d.mode,d.isMask),p=new SK(u.calpha,"f");return new A_(t,i,e,{color:a,bias:o,scale:l,intensity:h,factor:c,...d},u,d.mode,p,d.isMask,s)}case"rainbow":{let a=new S$(r.filmThickness??30),o=new S$(r.movement??0),l=new SN(r.wavelengths??new ix(0,0,0)),h=new S$(r.noiseStrength??0),c=new S$(r.noiseScale??1),d=new SN(r.offset??new ix(0,0,0)),u=AE(r),p=new _B(a,o,l,h,c,d,u.alpha,u.isMask),f=new SK(p.calpha,"f");return new A_(t,i,e,{filmThickness:a,movement:o,wavelengths:l,noiseStrength:h,noiseScale:c,offset:d,...u},p,u.mode,f,u.isMask,s)}case"transmission":{let a=new S$(r.thickness??10),o=new S$(r.ior??1.5),l=new S$(r.roughness??.5),h=_V.transmissionSize,c=_V.transmissionRenderTarget,d=_V.transmissionRenderTargetDepth,u=window.innerWidth,p=window.innerHeight,f=u>=p?new SF(p/u,1):new SF(1,u/p),m=AE(r),g=new _N(a,o,l,h,c,d,f,m.alpha),v=new SK(g.calpha,"f");return new A_(t,i,e,{thickness:a,ior:o,roughness:l,aspectRatio:f,...m},g,m.mode,v,m.isMask,s)}case"toon":{let a,o=new _d(r.positioning??0),l;r.colors?l=new _w(r.colors.length,r.colors):(l=new _w(10,new iu(0,0,0,1))).value[1]=new iu(1,1,1,1),r.steps?a=new _p(r.steps.length,r.steps):(a=new _p(10,1)).value[0]=0;let h=new SN(r.source??new ix(0,0,0)),c=new _u(r.isWorldSpace??!0),d=new S$(r.noiseStrength??0),u=new S$(r.noiseScale??1),p=new Sk(r.shadowColor),f=new SN(r.offset??new ix(0,0,0)),m=AE(r),g=new _z(o,l,a,h,c,d,u,p,f,m.alpha),v=new SK(g.calpha,"f");return new A_(t,i,e,{positioning:o,colors:l,steps:a,source:h,isWorldSpace:c,noiseStrength:d,noiseScale:u,shadowColor:p,offset:f,...m},g,m.mode,v,m.isMask,s)}case"outline":{let a=new _c(r.outlineColor??16777215),o=new _c(r.contourColor??16777215),l=new S$(r.outlineWidth??.1),h=new S$(r.contourWidth??.1),c=new S$(r.outlineThreshold??.1),d=new S$(r.contourThreshold??.1),u=new S$(r.outlineSmoothing??.1),p=new S$(r.contourFrequency??.1),f=new SN(r.contourDirection??new ix(0,1,0)),m=new _u(r.positionalLines??!1),g=new _u(r.compensation??!0),v=_V.normalRenderTarget,y=_V.normalRenderTargetDepth,x=_V.pixelRatioNode,b=_V.resolution,w=AE(r),S=new _R(a,o,l,h,c,d,u,p,f,m,g,b,v,y,x,w.alpha),_=new SK(S.calpha,"f");return new A_(t,i,e,{outlineColor:a,contourColor:o,outlineWidth:l,contourWidth:h,outlineThreshold:c,contourThreshold:d,outlineSmoothing:u,contourFrequency:p,contourDirection:f,positionalLines:m,compensation:g,...w},S,w.mode,_,w.isMask,s)}case"depth":{let a,o=new _d(r.gradientType??0),l=new _u(r.smooth??!1),h=new S$(r.near??50),c=new S$(r.far??200),d=new S$(r.isVector??1),u=new S$(r.isWorldSpace??0),p=new SN(r.origin??new ix),f=new SN(r.direction??new ix),m;
5383r.colors?m=new _w(r.colors.length,r.colors):(m=new _w(2,new iu(0,0,0,1))).value[1]=new iu(1,1,1,1),r.steps?a=new _p(r.steps.length,r.steps):(a=new _p(2,1)).value[0]=0;let g=AE(r),v=new _E(o,l,h,c,d,u,p,f,m,a,g.alpha,g.isMask),y=new SK(v.calpha,"f");return new A_(t,i,e,{gradientType:o,smooth:l,near:h,far:c,isVector:d,isWorldSpace:u,origin:p,direction:f,colors:m,steps:a,...g},v,g.mode,y,g.isMask,s)}case"noise":{let a=new S$(r.scale??1),o=new SN(r.size??new ix(100,100,100)),l=new S$(r.move??1),h=new SF(r.fA??new tK(1.7,9.2)),c=new SF(r.fB??new tK(8.3,2.8)),d=new SF(r.distortion??new tK(1,1)),u=new Sk(r.colorA),p=new Sk(r.colorB),f=new Sk(r.colorC),m=new Sk(r.colorD),g=new _d(r.noiseType??0),v=new _d(r.voronoiStyle??0),y=new S$(r.highCut??1),x=new S$(r.lowCut??0),b=new S$(r.smoothness??.5),w=new S$(r.seed??.5),S=new _d(r.quality??1),_=AE(r),A=new _O(a,o,l,h,c,d,u,p,f,m,_.alpha,g,_.isMask,v,y,x,b,w,S),M=new SK(A.calpha,"f");return new A_(t,i,e,{scale:a,size:o,move:l,fA:h,fB:c,distortion:d,colorA:u,colorB:p,colorC:f,colorD:m,noiseType:g,..._,voronoiStyle:v,highCut:y,lowCut:x,smoothness:b,seed:w,quality:S},A,_.mode,M,_.isMask,s)}case"normal":{let a=new SN(r.cnormal??new ix(1,1,1)),o=AE(r),l=new _A(a,o.alpha),h=new SK(l.calpha,"f");return new A_(t,i,e,{cnormal:a,...o},l,o.mode,h,o.isMask,s)}case"gradient":{let a,o=new _d(r.gradientType??0),l=new _u(r.smooth??!1),h;r.colors?h=new _w(r.colors.length,r.colors):(h=new _w(10,new iu(0,0,0,1))).value[1]=new iu(1,1,1,1),r.steps?a=new _p(r.steps.length,r.steps):(a=new _p(10,1)).value[0]=0;let c=new SF(r.offset??new tK(0,0)),d=new SF(r.morph??new tK(0,0)),u=new S$(r.angle??0),p=AE(r),f=new _T(o,l,h,a,c,d,u,p.alpha,p.isMask),m=new SK(f.calpha,"f");return new A_(t,i,e,{gradientType:o,smooth:l,colors:h,steps:a,offset:c,morph:d,angle:u,...p},f,p.mode,m,p.isMask,s)}case"pattern":{let a=new _d(r.style??0),o=new _d(r.projection??0),l=new _d(["x","y","z"].indexOf(r.axis)??0),h=new S$(r.blending??0),c=new SF(r.offset??new tK(0,0)),d=new Sk(r.colorA),u=new Sk(r.colorB),p=new SF(r.frequency??new tK(10,10)),f=new S$(r.size??.5),m=new S$(r.variation??0),g=new S$(r.smoothness??.5),v=new S$(r.zigzag??0),y=new S$(r.rotation??0),x=new SF(r.vertical??new tK(0,1)),b=new SF(r.horizontal??new tK(0,1)),w=new _d(r.sides??6),S=AE(r),_=new _L(a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S.alpha,S.isMask),A=new SK(_.calpha,"f");return new A_(t,i,e,{style:a,projection:o,axis:l,blending:h,offset:c,colorA:d,colorB:u,frequency:p,size:f,variation:m,smoothness:g,zigzag:v,rotation:y,vertical:x,horizontal:b,sides:w,...S},_,S.mode,A,S.isMask,s)}default:{let a=new _c(1,0,0,1),o=AE(r),l=new __(a,o.alpha),h=new SK(l.calpha,"f");return new A_(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}}}(i,e,t,s,r)}if("noise"===i.displacementType){let s=new SN(new ix(...i.offset)),a=new S$(i.scale??10),o=new S$(i.intensity??8),l=new S$(i.movement??1),h=new _d(i.noiseType??0),c=new _d(i.voronoiStyle??0),d=new S$(i.smoothness??.5),u=new S$(i.seed??0),p=new S$(i.highCut??1),f=new S$(i.lowCut??0),m=new _d(i.quality??1),g=new _k(o,l,s,c,d,u,p,f,m,a,h);return new AA(e,t,i,{offset:s,scale:a,intensity:o,movement:l,noiseType:h,voronoiStyle:c,smoothness:d,seed:u,highCut:p,lowCut:f,quality:m},g,r)}throw Error()}updateByOp(e,t,i){if(void 0===e.path[0]){if(0===e.type)return"type"in e.props||"category"in e.props||"visible"in e.props?(i.scene.markNeedsUpdateRendererDirty(),!0):function(e,t,i,r){let s=!1;for(let[a,o]of Object.entries(e)){if("bumpMap"===a||"roughnessMap"===a){s=!0;continue}if(!a||void 0===o)continue;if(AC(a,i,r,t)){"visible"===a&&"light"===i.type&&(s=!0);continue}i.visible=r.visible;let e=i.uniforms[`f${i.id}_${a}`];if(e&&!(e instanceof _f))switch(s=s||function(e,t,i){if("isMask"===t)return!0;let r=Ay[e.type],s=Ax[e.type];if(void 0!==s){let r=e.color;if(s.includes(t)){let e=r[t]?.value?.length;if(void 0!==e&&e!==i.length)return!0}}return void 0!==r&&r.includes(t)}(i,a,o),e.constructor){case _c:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Av?e.value=new SU(o.r,o.g,o.b,o.a):e.setRGBA(o);break;case Sk:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Av?e.value=new SU(o.r,o.g,o.b,o.a):e.value.setRGBA(o.r,o.g,o.b,o.a);break;case SF:e.value.setX(o[0]),e.value.setY(o[1]);break;case SN:e.value.setX(o[0]),e.value.setY(o[1]),e.value.setZ(o[2]);break;case SJ:Ab(o,t,i);break;case _w:e.value=o.map(e=>new iu(...e));break;default:e.value=o}}return s}(e.props,i.shared,this,t)}else if("texture"===e.path[0])return!("texture"in t)&&!("video"in t)||Ab(e.props,i.shared,this);return!1}dispose(){let e;if("texture"===(e=this instanceof AS?this.type:this)||"video"===e||"displace_map"===e||"matcap"===e){let e=this.uniforms[`f${this.id}_texture`];if(!e)return!1;e.image instanceof _5||e.image.deref()}}hasValueByKey(e){return void 0!==this.uniforms[e]}hasValue(e){return this.hasValueByKey(`f${this.id}_${e}`)}setValue(e,t){let i=`f${this.id}_${e}`;this.hasValueByKey(i)&&void 0!==t&&(this.uniforms[i].value=t)}
5383getNode(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t]}getValue(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t].value}getName(e){let t=/f\d+_(.*)/.exec(e);if(t&&t.length>1)return t[1];console.log(`Layer.getName: error ${e}`)}getNames(){let e=[];for(let t in this.uniforms){let i=this.getName(t);i&&e.push(i)}return e}},A_=class extends AS{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,h),this.params=r,this.color=s,this.mode=a,this.alpha=o,this.isMask=l}},AA=class extends AS{constructor(e,t,i,r,s,a){super(e,t,i,r,a),this.position=s}},AM=class extends AS{constructor(e,t,i,r,s,a){super(e,t,i,s,a),this.node=r}static createLigherLayer(e,t,i,r){let s,a=new S$(Aw(i.alpha,r)),o=new _d(i.mode),l=new S$(i.bumpMapIntensity),h=new S$(Aw(i.alphaOverride,r)),c;if(i.visible){if("lambert"===i.category){s=new _Q;let e=new _c(r.color(i.emissive)??0),t=new _u(i.occlusion??!0);c={emissive:e,occlusion:t},s.emissive=e,s.occlusion=t}else if("toon"===i.category){s=new _$;let e=new S$(i.shininess??30),t=new _c(r.color(i.specular)??1118481);c={shininess:e,specular:t},s.shininess=e,s.specular=t}else if("physical"===i.category){s=new _J;let e=new S$(i.roughness??.3),t=new S$(i.metalness??0),r=new S$(i.reflectivity??.5),a=new _u(i.occlusion??!0);c={roughness:e,metalness:t,reflectivity:r,occlusion:a},s.roughness=e,s.metalness=t,s.reflectivity=r,s.occlusion=a}else{s=new _K;let e=new S$(i.shininess??30),t=new _c(void 0!==i.specular?r.color(i.specular)??1118481:1118481),a=new _u(i.occlusion??!0);c={shininess:e,specular:t,occlusion:a},s.shininess=e,s.specular=t,s.occlusion=a}}else s=new _Y,c={};
5383return s.alpha=new S$(1),s.shadingAlpha=a,s.shadingBlend=o,s.bumpMapIntensity=l,s.alphaOverride=h,c.alpha=s.shadingAlpha,c.mode=s.shadingBlend,c.bumpMapIntensity=s.bumpMapIntensity,c.alphaOverride=s.alphaOverride,new AM(e,t,i,s,c,r)}get category(){return this.node.category}};function AE(e){return{alpha:new S$(e.alpha??1),mode:new _d(e.mode??0),isMask:new _u(e.isMask??!1)}}function AC(e,t,i,r){if("displace"===i.type&&("intensity"===e||"visible"===e)){let e=t.uniforms[`f${t.id}_intensity`];return e?(e.value=i.intensity*(i.visible?1:0),e):void 0}if("displace"!==i.type&&("alpha"===e||"visible"===e)){let s=t.uniforms[`f${t.id}_alpha`];if(!s)return;if(s.value=Aw(i.alpha,r)*(i.visible?1:0),"outline"===i.type&&"visible"===e){let e=t.uniforms[`f${t.id}_compensation`];e&&(e.value=i.compensation&&i.visible)}return s}}function AT(e,t){let i=0,r=e.layers.find(e=>"light"===e.data.type);if(r){let e=r.data,i=Number(t.getVariable(e.alphaOverride));if(("string"==typeof e.alphaOverride?i/100:e.alphaOverride)<1)return!0}for(let r of e.layers){if("displace"!==r.data.type&&r.data.isMask)return!0;if("displace"!==r.data.type&&"alpha"in r.data&&"light"!==r.data.type&&"fresnel"!==r.data.type&&"texture"!==r.data.type&&"matcap"!==r.data.type&&"rainbow"!==r.data.type&&"outline"!==r.data.type&&"pattern"!==r.data.type){let e=r.data.visible?r.data.alpha:0;if("string"==typeof e&&(e=Math.max(0,Math.min(1,Number(t.getVariable(e)??100)/100))),1===e&&"depth"===r.data.type||"gradient"===r.data.type){for(let t of r.data.colors)if(t[3]<1){e=t[3];break}}else if(1===e&&"noise"===r.data.type){let i=Math.min(t.color(r.data.colorA).a,Math.min(t.color(r.data.colorB).a,Math.min(t.color(r.data.colorC).a,t.color(r.data.colorD).a)));i<1&&(e=i)}i+=(1-i)*e}}return i<1}var AP=class extends r8{constructor(){super(void 0),this.flatShading=!1,this.needsJitter=!0,this.nodeContextUuid=0,this.fog=!0,this.dithering=!0,this.vertexColors=!0,this.transparent=!0}customProgramCacheKey(){return""}},AD=class extends AP{constructor(e,t,i,r){super(),this.flatShading=e,this.side=t,this.wireframe=i,this.root=r}updateAfterBuild(){let e=this.root;this.lights=e.lights,this.vertexShader=e.vertexShader,this.fragmentShader=e.fragmentShader,this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.transparent=e.transparent,this.cacheKey=e.customProgramCacheKey()+"flat"+this.flatShading+this.side}onBeforeCompile(e,t){this.root.onBeforeCompile(e)}get data(){return this.root.data}get category(){return this.root.category}get hasAO(){return this.root.hasAO}getFlavor(e,t,i){return this.root.getFlavor(e,t,i)}get layers(){return this.root.layers}get fragment(){return this.root.fragment}getLayersOfType(e){return this.root.getLayersOfType(e)}getLayerByUuid(e){return this.root.getLayerByUuid(e)}updateByOp(e,t,i){this.root.updateByOp(e,t,i)}nodeMaterialDispose(){this.root.nodeMaterialDispose()}},AI=class extends AP{constructor(e,t,i=!0){super(),this.data=e,this.allowVariableSaves=i,this.layerIdGen=0,this.flavors=[],this.masks={},this.type="NodeMaterial",this.updaters=[],this.needsJitter=t.shared.needsJitter,SO.startContext(this),this.reset0(e,t),SO.endContext(this)}get nodeMaterial(){return this}getFlavor(e,t,i){let r=i?6:(e?3:0)+t;if(0===r)return this;void 0===this.flavors&&(this.flavors=[]),r-=1;let s=this.flavors[r];return void 0===s&&((s=new AD(e,t,i,this)).needsJitter=this.needsJitter,this.flavors[r]=s,s.flatShading=e,s.side=t,s.updateAfterBuild()),s}get fragment(){return this.lightLayer.node}get category(){return this.lightLayer.category}get hasAO(){return this.lightLayer.getNode("occlusion")?.value??!1}reset(e,t,i=!1){SO.startContext(this),(this.data!==e||i)&&this.reset0(e,t),SO.endContext(this)}reset0(e,t){this.data=e;let i=e.layers??vk.defaultTwoLayerData("phong").layers;try{this.layers=i.map(e=>AS.create(this.layerIdGen++,e.id,e.data,t.shared))}catch{this.layers=[]}this.layers.reverse(),this.name=e.name??"Untitled Material",this.onUpdate(t.shared),this.transparent=AT(e,t.shared),this.saveVariableLocations(t)}onVariableUpdate(e,t,i){if("alphaOverride"===e[0])this.transparent=AT(this.data,i.shared),this.lightLayer.setValue("alphaOverride",Math.max(0,Math.min(Number(t)/100,1)));else if("layer"===e[0]){let r=e[1],s=e[2];if(r&&s){let e=this.layers.find(e=>e.uuid===r);e?.hasValue(s)&&("alpha"===s?(this.transparent=AT(this.data,i.shared),e.setValue(s,Math.max(0,Math.min(Number(t)/100,1)))):e.setValue(s,t))}}}saveVariableLocations(e){if(!this.allowVariableSaves)return;let t=this.data.layers.find(e=>"light"===e.data.type);t&&e.shared.getVariable(t.data.alphaOverride,["material",this.uuid,"alphaOverride"]),this.data.layers.forEac
vendor: 4,308 bytes, line 5383
5383h(t=>{"alpha"in t.data&&"string"==typeof t.data.alpha&&e.shared.getVariable(t.data.alpha,["material",this.uuid,"layer",t.id,"alpha"])})}getLayersOfType(e){return this.layers.filter(t=>t.type===e)}getLayerByUuid(e){return this.layers.find(t=>t.uuid===e)}onUpdate(e){for(let t of(this.lightLayer=this.layers.find(e=>e instanceof AM),void 0===this.lightLayer&&(this.lightLayer=new AM(0,"",{...gE.defaultData("light","phong"),visible:!1},new _Y,{},e)),this.dispose(),this.flavors))t&&t.dispose();this.applyTextureMaps(),this.applyMasks(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.build(),this.nodeContextUuid=0}applyTextureMaps(){let e=this.layers.find(e=>e instanceof AM);if(!e)return;let t=e.data,i=t.bumpMap,r=t.roughnessMap;e.node.bumpMap=void 0,e.node.roughnessMap=void 0;for(let t=0;t<this.layers.length;++t){let s=this.layers[t];s instanceof A_&&s.color instanceof _M&&(s.uuid===i&&(e.node.bumpMap=s.color),s.uuid===r&&(e.node.roughnessMap=s.color))}}updateByOp(e,t,i){if(SO.startContext(this),void 0!==t?this.data=t:t=this.data,this.transparent=AT(t,i.shared),"layers"===e.path[0]){let r=i.shared,s=e.path[1];if(void 0===s)i.scene.markNeedsUpdateRendererDirty(),this.reset0(t,i);else{0===e.type&&void 0!==e.props.occlusion&&i.scene.markNeedsUpdateRendererDirty();let a=this.layers.find(e=>e.uuid===s);if(a){let o=t.layers.data(s),l;0===e.type&&("alpha"in e.props||"alphaOverride"in e.props)&&(l="alpha"in e.props?{...e.props,alpha:Aw(e.props.alpha,r,["material",this.uuid,"layer",s,"alpha"])}:{...e.props,alphaOverride:Aw(e.props.alphaOverride,r,["material",this.uuid,"alphaOverride"])}),a.updateByOp({...e,...l?{props:l}:{},path:e.path.slice(2)},o,i)&&this.reset0(t,i)}}}else this.reset0(t,i);SO.endContext(this)}applyMasks(){for(let e=0;e<this.layers.length;++e){let t=this.layers[e];t instanceof A_?t.color.mask=void 0:t instanceof AM&&(t.node.mask=void 0)}for(let e=0;e<this.layers.length;++e){let t=this.layers[e];if(t instanceof A_&&t.isMask.value&&t.data.visible&&e>0){let i=e-1,r=this.layers[i];r instanceof AM?r.node.mask=new S1(t.color,t.alpha,S1.MUL):r instanceof A_&&(r.isMask.value||(r.color.mask=new S1(t.color,t.alpha,S1.MUL)))}}}blendColors(){let e=this.layers.findIndex(e=>e instanceof A_),t=this.layers.findIndex(e=>e instanceof AM);if(-1!==e&&e<t){let i=this.layers[e].color;for(let r=e+1;r<t;++r){let e=this.layers[r];if(e instanceof A_){if(e.isMask.value)continue;i=new _S(i,e.color,e.alpha,e.mode)}}this.fragment.color=i}else this.fragment.color=void 0}blendAfterColors(){let e=new SK("outgoingLight","f"),t=this.layers.findIndex(e=>e instanceof AM);if(this.layers.length>t+1){for(let i=t+1;i<this.layers.length;++i){let t=this.layers[i];if(t instanceof A_){if(t.isMask.value)continue;e=new _S(e,t.color,t.alpha,t.mode)}}this.fragment.afterColor=e}else this.fragment.afterColor=void 0}blendPositions(){let e=this.layers.filter(e=>e instanceof AA);if(e.length>0){let t=e[0].position;for(let i=1;i<e.length;++i)e[i]&&(t=new S1(t,e[i].position,S1.ADD),t=new S1(t,new S$(.5).setReadonly(!0),S1.MUL));this.fragment.position=t}else this.fragment.position=void 0}getDefines(){return this.defines}getUniforms(){return this.uniforms}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}onBeforeCompile(e){e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.extensionDerivatives=!0===this.extensions.derivatives,e.extensionFragDepth=!0===this.extensions.fragDepth,e.extensionDrawBuffers=!0===this.extensions.drawBuffers,e.extensionShaderTextureLOD=!0===this.extensions.shaderTextureLOD}clampUniformsForPreview(e,t){let i=(e,t,i)=>Math.min(Math.max(e,t),i);for(let r of this.layers)if("displace"===r.type){let s=i(r.uniforms[`f${r.id}_intensity`].value,e,t);r.uniforms[`f${r.id}_intensity`].value=s}}updateFrame(e){for(let t=0;t<this.updaters.length;++t)e.updateNode(this.updaters[t])}build(){let e=new _h;for(let t of(e.needsJitter=this.needsJitter,this.lights=this.lightLayer.data.visible,e.build(this.fragment,this.fragment),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.updaters=e.updaters,this.flavors))t&&t.updateAfterBuild();return this}
5383nodeMaterialDispose(){for(let e of(this.layers.forEach(e=>e.dispose()),super.dispose(),this.flavors))e&&e.dispose()}assetsLoaded(){for(let e of this.layers)if(e instanceof A_){let t=e.params.texture;if(t instanceof _g&&!t.image.loaded)return!1}return!0}};Object.defineProperties(AP.prototype,{properties:{get:function(){return this.fragment.properties}}});var AO,AR=class extends AI{constructor(e,t,i){super(e,t,!1),this.uuid=i,this.allowVariableSaves=!0,this.saveVariableLocations(t)}},AL=new Map,AB=new Promise(e=>{AO=e}),Az=!1;AB.then(e=>AN=e);var AF,AN,AU,Ak=class{constructor({src:e,volume:t,delay:i,loop:r}){let s;this._volume=1,this.delay=0,this._loop=1,this.loopsRemaining=0,this._status="stopped",this.onEnd=()=>{this.loopsRemaining===1/0?this.replay():this.loopsRemaining>1?(this.replay(),this.loopsRemaining--):(this._status="stopped",this.loopsRemaining=this._loop)},s="string"==typeof e?{src:e}:{src:function(e){if("string"==typeof e)return e;let t=AL.get(e);return t||(t={url:URL.createObjectURL(new Blob([e]))},AL.set(e,t)),t.url}(e),format:"wav"},this.sound=new AN.Howl(s),this.sound.on("end",this.onEnd),this.src=e,void 0!==t&&(this.volume=t),void 0!==i&&(this.delay=i),void 0!==r&&(this.loop=r)}get status(){return this._status}get volume(){return this._volume}set volume(e){this._volume=e,this.sound.volume(e)}get loop(){return this._loop}set loop(e){this._loop=e,this.loopsRemaining=e}replay(){this.clearDelay(),this.delayTimerId=window.setTimeout(()=>{this.sound.play(),this.clearDelay()},this.delay)}fade(e,t=1e3){e?(this.sound.volume(this._volume),this.clearFade(),this.fadeTimerId=window.setTimeout(()=>{this.sound.fade(this._volume,0,t),this.clearFade()},e)):this.sound.fade(this._volume,0,t)}on(e,t,i){this.sound.on(e,t,i)}off(e,t,i){this.sound.off(e,t,i)}play(){"playing"===this._status||this.sound.playing()||("paused"===this._status?(0===this.sound.seek()?this.replay():this.sound.play(),this._status="playing"):"stopped"===this._status&&(this.replay(),this._status="playing"))}pause(){"playing"===this._status&&(this.sound.pause(),this.clearFade(),this.clearDelay(),this._status="paused")}stop(){this.sound.stop(),this.loopsRemaining=this._loop,this.clearFade(),this.clearDelay(),this._status="stopped"}clearFade(){this.fadeTimerId&&(clearTimeout(this.fadeTimerId),delete this.fadeTimerId)}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}dispose(e=!1){this.off(),this.stop(),this.clearFade(),this.clearDelay()}},AV=class{constructor(){this.type="ShapePath",this.color=new is,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new oo,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath?.lineTo(e,t),this}quadraticCurveTo(e,t,i,r){return this.currentPath?.quadraticCurveTo(e,t,i,r),this}bezierCurveTo(e,t,i,r,s,a){return this.currentPath?.bezierCurveTo(e,t,i,r,s,a),this}splineThru(e){return this.currentPath?.splineThru(e),this}toShapes(){let e={ORIGIN:0,DESTINATION:1,BETWEEN:2,LEFT:3,RIGHT:4,BEHIND:5,BEYOND:6},t={loc:e.ORIGIN,t:0};function i(i,r,s){let a,o=s.x-r.x,l=s.y-r.y,h=i.x-r.x,c=i.y-r.y,d=o*c-h*l;if(i.x===r.x&&i.y===r.y){t.loc=e.ORIGIN,t.t=0;return}if(i.x===s.x&&i.y===s.y){t.loc=e.DESTINATION,t.t=1;return}if(d<-Number.EPSILON){t.loc=e.LEFT;return}if(d>Number.EPSILON){t.loc=e.RIGHT;return}if(o*h<0||l*c<0){t.loc=e.BEHIND;return}if(Math.sqrt(o*o+l*l)<Math.sqrt(h*h+c*c)){t.loc=e.BEYOND;return}a=0!==o?h/o:c/l,t.loc=e.BETWEEN,t.t=a}let r=0,s=999999999,a=-999999999,o=[];this.subPaths.forEach(e=>{let t=e.getPoints(),i=-999999999,l=999999999,h=-999999999,c=999999999;for(let e=0;e<t.length;e++){let r=t[e];r.y>i&&(i=r.y),r.y<l&&(l=r.y),r.x>h&&(h=r.x),r.x<c&&(c=r.x)}a<=h&&(a=h+1),s>=c&&(s=c-1),t.length&&o.push({curves:e.curves,points:t,isCW:oD.isClockWise(t),identifier:r++,boundingBox:new lF(new tK(c,l),new tK(h,i))})});let l=o.map(r=>(function(r,s,a,o,l){(null==l||""===l)&&(l="nonzero");let h=new tK;r.boundingBox.getCenter(h);let c=function(r,s,a){let o=new tK;s.getCenter(o);let l=[];return a.forEach(s=>{s.boundingBox.containsPoint(o)&&(function(r,s){let a=[],o=[];for(let l=1;l<r.length;l++){let h=r[l-1],c=r[l];for(let r=1;r<s.length;r++){let l=function(r,s,a,o){let l=r.x,h=s.x,c=a.x,d=o.x,u=r.y,p=s.y,f=a.y,m=o.y,g=(d-c)*(u-f)-(m-f)*(l-c),v=(m-f)*(h-l)-(d-c)*(p-u),y=g/v,x=((h-l)*(u-f)-(p-u)*(l-c))/v;if(0===v&&0!==g||y<=0||y>=1||x<0||x>1)return null;if(0===g&&0===v){for(let c=0;c<2;c++)if(i(0===c?a:o,r,s),t.loc===e.ORIGIN){let e=0===c?a:o;return{x:e.x,y:e.y,t:t.t}}else if(t.loc===e.BETWEEN)return{x:+(l+t.t*(h-l)).toPrecision(10),y:+(u+t.t*(p-u)).toPrecision(10),t:t.t};return null}for(let l=0;l<2;l++)if(i(0===l?a:o,r,s),t.loc===e.ORIGIN){let e=0===l?a:o;return{x:e.x,y:e.y,t:t.t}}return{x:+(l+y*(h-l)).toPrecision(10),y:+(u+y*(p-u)).toPrecision(10),t:y}}(h,c,s[r-1],s[r]);null!==l&&void 0===a.find(e=>e.t<=l.t+Number.EPSILON&&e.t>=l.t-Number.EPSILON)&&(a.push(l),o.push(new tK(l.x,l.y)))}}return o}
5383)(r,s.points).forEach(e=>{l.push({identifier:s.identifier,isCW:s.isCW,point:e})})}),l.sort((e,t)=>e.point.x-t.point.x),l}([new tK(a,h.y),new tK(o,h.y)],r.boundingBox,s);c.sort((e,t)=>e.point.x-t.point.x);let d=[],u=[];c.forEach(e=>{e.identifier===r.identifier?d.push(e):u.push(e)});let p=d[0].point.x,f=[],m=0;for(;m<u.length&&u[m].point.x<p;)f.length>0&&f[f.length-1]===u[m].identifier?f.pop():f.push(u[m].identifier),m++;if(f.push(r.identifier),"evenodd"===l){let e=f.length%2==0,t=f[f.length-2];return{identifier:r.identifier,isHole:e,for:t}}if("nonzero"===l){let e=!0,t=null,i=null;for(let r=0;r<f.length;r++){let a=f[r];s[a]&&(e?(i=s[a].isCW,e=!1,t=a):i!==s[a].isCW&&(i=s[a].isCW,e=!0))}return{identifier:r.identifier,isHole:e,for:t}}console.warn('fill-rule: "'+l+'" is currently not implemented.')})(r,o,s,a,this.userData?.style.fillRule)),h=[];return o.forEach(e=>{let t=l[e.identifier];if(t&&!t.isHole){let t=new op;t.curves=e.curves,l.filter(t=>t?.isHole&&t.for===e.identifier).forEach(e=>{if(e){let i=o[e.identifier],r=new oo;r.curves=i.curves,t.holes.push(r)}}),h.push(t)}}),h}},Aj=!1,AG=new Promise(e=>{AU=e}),AH=!1;async function AW(e){return await (await fetch(e)).arrayBuffer()}var Aq=new class{async load(e,t,i=()=>{}){let{load:r}=await AG;r(e,(e,r)=>{e||!r?i(e??"Something went wrong"):t(r)})}async parse(e){let{parse:t,Bidi:i}=await AG;try{let r=t(e),s=new i;return s.registerModifier("glyphIndex",null,e=>r.charToGlyphIndex(e.char)),s.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:s}}catch(e){console.error(e)}}};async function AX(e){let t,i,r=!1;if(e.url?(t=await AW(e.url),i=e.url,r=e.url.startsWith("/")):e.data&&(t=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength)),t){if(!Aj)return{font:void 0,url:i,intercepted:r,arr:t,bidi:null};{let e=await Aq.parse(t);if(e)return{font:e.font,url:i,intercepted:r,arr:t,bidi:e.bidi}}}}var AY=class{constructor(e){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AX(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}update(e){this._isLoaded=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AX(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(e,t,i){if(!this._bidi)return[];let r=this._bidi;r.getTextGlyphs(t);let s=r.tokenizer.tokens,a=[],o=0,l=i.length===s.length;for(let r=0;r<i.length;r++){let h=i[r].index,c=String.fromCharCode(i[r].unicode),d=s[o];if(d.state.glyphIndex===h||d.state.fina===h||d.state.medi===h||d.state.init===h||l)a.push({char:c,index:h,replacements:[d.state.glyphIndex],replacementChars:[d.char]}),o++;else{let i=d.char,r="",s=[d.state.glyphIndex],l=[],u=!1;for(;!u;)o++,i+=r=t.charAt(o),s.push(e.charToGlyphIndex(r)),1===(l=e.stringToGlyphs(i)).length&&l[0].index===h&&(u=!0),o>t.length&&(u=!0);a.push({char:c,index:h,replacements:s,replacementChars:Array.from(i)}),o++}}return a}generateShapes(e,t){if(!this._isLoaded)return;let i=this.font,r=t.fontSize/this.unitsPerEm,s=t.fontSize*t.lineHeight,a=e.map(e=>this.getTextWidth(e,t)),o=t.width,l=this.getCharWidth(` 5384`,t),h=1===t.horizontalAlign?l:0,c=this.computeSpaceWidthForLine(e,0,t),d=this.getLineInitialOffsetX(a[0],o,t.horizontalAlign,e[0],l),u=this.getLineInitialOffsetY(s,e.length,t.height,r,t.verticalAlign),p=[],f=e.map(e=>[]),m=e.map(e=>[]),g;for(let v=0;v<e.length;v++){let y=e[v],x={features:{liga:!0}},b=[];try{b=i.stringToGlyphs(y,x)}catch(e){console.warn(e)}d=this.getLineInitialOffsetX(a[v],o,t.horizontalAlign,y,l);let w=[];try{w=this.reverseLigaturesTable(i,y,b)}catch(e){console.warn(e)}c=this.computeSpaceWidthForLine(e,v,t);for(let e=0;e<b.length;e++){let s=b[e],a=0===s.index?` 5385`:s.unicode?String.fromCharCode(s.unicode):void 0,o=w[e],l=0,y=0;0===e&&2===t.horizontalAlign&&void 0!==s.leftSideBearing&&(y=-s.leftSideBearing*r),g&&(l=i.getKerningValue(s,g)*r),d+=y+l;let x=0;if(a===` 5386`)x=h;else if(" "===a)x=c;else{let e=this.createPath(s,r,d,u,t);e&&(x=e.offsetX-(l+y),p.push(e.path))}if(1===o.replacements.length)m[v].push([d,u]),f[v].push(x);else{let e=o.replacements.map(e=>(i.glyphs.get(e).advanceWidth??0)*r),t=e.reduce((e,t)=>
5386e+=t,0),s=e.map(e=>e/t),a=d;for(let e=0;e<s.length;e++){let t=x*s[e];m[v].push([a,u]),f[v].push(t),a+=t}}d+=x,g=s}u-=s}let v=[];for(let e=0,t=p.length;e<t;e++)v.push(...p[e].toShapes());return{shapes:v,charWidths:f,lineWidths:a,charCoords:m}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(e,t,i,r,s){return(3===i||2===i)&&r.indexOf(` 5387`)>=0&&(e-=s),3===i?.5*t-.5*e:2===i?t-e:0}getLineInitialOffsetY(e,t,i,r,s){let a=t*e,o=Math.abs(this.ascender-this.descender)*r,l=-this.ascender*r-(e-o)/2;return 3===s?-(i-a-l):2===s?-(.5*i-.5*a-l):l}createPath(e,t,i,r,s){let a=e.getPath(i,-r,s.fontSize,{kerning:!1,letterSpacing:s.letterSpacing});if(!a){console.error('THREE.Font: character "'+e+'" does not exists in font family '+this.familyName+".");return}let o=new AV,l=(e.advanceWidth??1)*t;if(e)for(let e of a.commands){let t=o.currentPath?.currentPoint;if(!(t&&"Z"!==e.type&&t.x===e.x&&-t.y===e.y))switch(e.type){case"M":o.moveTo(e.x,-e.y);break;case"L":o.lineTo(e.x,-e.y);break;case"Q":o.quadraticCurveTo(e.x1,-e.y1,e.x,-e.y);break;case"C":o.bezierCurveTo(e.x1,-e.y1,e.x2,-e.y2,e.x,-e.y)}}return o.subPaths.forEach(e=>{let t=function(e){if(e.length){let t=e[0];if(t instanceof oe)return t.v1;if(t instanceof n9||t instanceof oi)return t.v0}}(e.curves);void 0!==t&&e.currentPoint.distanceTo(t)>0&&e.lineTo(t.x,t.y)}),{offsetX:l+s.fontSize*s.letterSpacing,path:o}}getCharWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}getTextWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}computeSpaceWidthForLine(e,t,i){let r=this.getCharWidth(" ",i),s=e[t];if(s){let a=this.countSpaces(s.trimEnd());if(4===i.horizontalAlign&&t<e.length-1&&a)return(i.width-(this.getTextWidth(s,i)-a*r))/a}return r}countSpaces(e){return(e.match(/ /g)||[]).length}},AQ=class{constructor(){this.objects=new Map,this.unreachable=new Set}getCached(e){return this.objects.get(e)}get size(){return this.objects.size}get(e,t,i){let r=this.objects.get(e);return void 0===r?(r=this.createObject(e,t,i),this.objects.set(e,r)):r.isShared=!0,r}forceDelete(e){let t=this.objects.get(e);t&&(this.disposeObject(t),this.objects.delete(e))}mutateIfUnique(e,t){let i=this.objects.get(e);if(i&&!0!==i.isShared)return this.objects.delete(e),this.objects.set(t,i),i}startGc(){this.unreachable=new Set(this.objects.keys())}markAsReachable(e,t){t===this.objects.get(e)&&this.unreachable.delete(e)}endGc(){this.unreachable.forEach(e=>{this.disposeObject(this.objects.get(e)),this.objects.delete(e)}),this.unreachable.clear()}dispose(){this.objects.forEach(e=>{this.disposeObject(e)}),this.objects.clear()}},AZ=class extends AQ{constructor(e){super(),this.flatShading=e}disposeObject(e){e.dispose()}createObject(e,t,i){let r=w5(e,t,this.flatShading,i);return r.computeBoundingSphere(),r}},AK={markNeedsUpdateRendererDirty:()=>{}},AJ=class{constructor(e,t){this.id=e,this.userWebhook=t,this.result=void 0,this._connected=!1,this.emitter=wL(),this.reconnectWaitFor=1e3,this._onError=e=>{this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this._scheduleReconnect()},this._onConnected=e=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!0},this._onDisconnected=()=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!1},this._onMessage=e=>{let t=e.data,i;try{i=JSON.parse(t)}catch(e){console.error("Error parsing webhook message",e)}if(i){let e=!1;this.userWebhook.parametersSchemas.forEach(({data:t})=>{var r,s;let a;void 0!==i[t.name]&&(r=i[t.name],s=t.type,a=typeof r,("string"===s||"number"===s)&&a===s||"boolean"===s&&("true"===r||"false"===r||!0===r||!1===r)||"image"===s&&"string"===a&&r.startsWith("http"))&&(void 0===this.result&&(this.result={}),this.result[t.name]=i[t.name],e=!0)}),e&&this.emitter.emit("message",{userWebhookId:this.id})}}}connect(){clearTimeout(this.scheduledReconnectHandle),this.userWebhook.url&&(this.eventSource=new EventSource("https://hooks.spline.design/events?hashFile="+this.userWebhook.url),this.eventSource.addEventListener("message",this._onMessage),this.eventSource.addEventListener("error",this._onError),this.eventSource.addEventListener("open",this._onConnected))}disconnect(){this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this.eventSource?.close(),this._onDisconnected(),clearTimeout(this.scheduledReconnectHandle)}_scheduleReconnect(){this.reconnectWaitFor*=2,this.reconnectWaitFor>512e3&&(this.reconnectWaitFor=512e3),clearTimeout(this.scheduledReconnectHandle),this.scheduledReconnectHandle=setTimeout(()=>{this.scheduledReconnectHandle=void 0,this.connect()},this.reconnectWaitFor)}update(e){this.userWebhook=e}dispose(){this._connected&&this.disconnect()}get connected(){return this._connected}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getParametersKeys(){return this.userWebhook.parametersSchemas.map(e=>e.data.name)}getParameterValue(e){if(this.getParametersKeys().includes(e)){if(this.result)return this.result?.[e];for(let t of this.userWebhook.parametersSchemas)if(t.data.name===e)return ym.defaultParameterValueByType(t.data.type)}}},A$=globalThis.atob,A0=globalThis.btoa,A1=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static base64ToArrayBuffer(e){let t=A$(e),i=t.length,r=new Uint8Array(i);for(let e=0;e<i;e++)r[e]=t.charCodeAt(e);return r.buffer}static arrayBufferToBase64(e){e instanceof Float32Array?e=this.floatTo16BitPCM(e):e instanceof Int16Array&&(e=e.buffer);let t="",i=new Uint8Array(e);for(let e=0;e<i.length;e+=32768){let r=i.subarray(e,e+32768);t+=String.fromCharCode.apply(null,r)}return A0(t)}static mergeInt16Arrays(e,t){if(e instanceof ArrayBuffer&&(e=new Int16Array(e)),t instanceof ArrayBuffer&&(t=new Int16Array(t)),!(e instanceof Int16Array)||
5387!(t instanceof Int16Array))throw Error("Both items must be Int16Array");let i=new Int16Array(e.length+t.length);for(let t=0;t<e.length;t++)i[t]=e[t];for(let r=0;r<t.length;r++)i[e.length+r]=t[r];return i}static generateId(e,t=21){let i="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",r=Array(t-e.length).fill(0).map(e=>i[Math.floor(Math.random()*i.length)]).join("");return`${e}${r}`}},A2=e=>new Promise(t=>setTimeout(()=>t(),e)),A3=class{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(e,t){return this.eventHandlers[e]=this.eventHandlers[e]||[],this.eventHandlers[e].push(t),t}onNext(e,t){return this.nextEventHandlers[e]=this.nextEventHandlers[e]||[],this.nextEventHandlers[e].push(t),t}off(e,t){let i=this.eventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.eventHandlers[e];return!0}offNext(e,t){let i=this.nextEventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified next event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.nextEventHandlers[e];return!0}async waitForNext(e,t=null){let i=Date.now(),r;for(this.onNext(e,e=>r=e);!r;){if(t&&Date.now()-i>t)return null;await A2(1)}return r}dispatch(e,t){for(let i of[].concat(this.eventHandlers[e]||[]))i(t);for(let i of[].concat(this.nextEventHandlers[e]||[]))i(t);return delete this.nextEventHandlers[e],!0}},A4=class extends A3{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=e||this.defaultUrl,this.apiKey=t||null,this.debug=!!r,this.ws=null,globalThis.document&&this.apiKey&&!i)throw Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...e){let t=[`[Websocket/${new Date().toISOString()}]`].concat(e).map(e=>"object"==typeof e&&null!==e?JSON.stringify(e,null,2):e);
5387return this.debug&&console.log(...t),!0}async connect({model:e}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(this.apiKey||this.url!==this.defaultUrl||console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw Error("Already connected");if(globalThis.document){this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");let t=new globalThis.WebSocket(`${this.url}${e?`?model=${e}`:""}`,["realtime",`openai-insecure-api-key.${this.apiKey}`,"openai-beta.realtime-v1"]);return t.addEventListener("message",e=>{let t=JSON.parse(e.data);this.receive(t.type,t)}),new Promise((e,i)=>{let r=()=>{this.disconnect(t),i(Error(`Could not connect to "${this.url}"`))};t.addEventListener("error",r),t.addEventListener("open",()=>{this.log(`Connected to "${this.url}"`),t.removeEventListener("error",r),t.addEventListener("error",()=>{this.disconnect(t),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})}),t.addEventListener("close",()=>{this.disconnect(t),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})}),this.ws=t,e(!0)})})}}disconnect(e){if(!e||this.ws===e)return this.ws&&this.ws.close(),this.ws=null,!0}receive(e,t){return this.log("received:",e,t),this.dispatch(`server.${e}`,t),this.dispatch("server.*",t),!0}send(e,t){if(!this.isConnected())throw Error("RealtimeAPI is not connected");if("object"!=typeof(t=t||{}))throw Error("data must be an object");let i={event_id:A1.generateId("evt_"),type:e,...t};return this.dispatch(`client.${e}`,i),this.dispatch("client.*",i),this.log("sent:",e,i),this.ws.send(JSON.stringify(i)),!0}},A5=class{constructor(){tS(this,"defaultFrequency",24e3),tS(this,"EventProcessors",{"conversation.item.created":e=>{let{item:t}=e,i=JSON.parse(JSON.stringify(t));if(this.itemLookup[i.id]||(this.itemLookup[i.id]=i,this.items.push(i)),i.formatted={},i.formatted.audio=new Int16Array(0),i.formatted.text="",i.formatted.transcript="",this.queuedSpeechItems[i.id]&&(i.formatted.audio=this.queuedSpeechItems[i.id].audio,delete this.queuedSpeechItems[i.id]),i.content)for(let e of i.content.filter(e=>["text","input_text"].includes(e.type)))i.formatted.text+=e.text;return this.queuedTranscriptItems[i.id]&&(i.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[i.id]),"message"===i.type?"user"===i.role?(i.status="completed",this.queuedInputAudio&&(i.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):i.status="in_progress":"function_call"===i.type?(i.formatted.tool={type:"function",name:i.name,call_id:i.call_id,arguments:""},i.status="in_progress"):"function_call_output"===i.type&&(i.status="completed",i.formatted.output=i.output),{item:i,delta:null}},"conversation.item.truncated":e=>{let{item_id:t,audio_end_ms:i}=e,r=this.itemLookup[t];if(!r)throw Error(`item.truncated: Item "${t}" not found`);let s=Math.floor(i*this.defaultFrequency/1e3);return r.formatted.transcript="",r.formatted.audio=r.formatted.audio.slice(0,s),{item:r,delta:null}},"conversation.item.deleted":e=>{let{item_id:t}=e,i=this.itemLookup[t];if(!i)throw Error(`item.deleted: Item "${t}" not found`);delete this.itemLookup[i.id];let r=this.items.indexOf(i);return r>-1&&this.items.splice(r,1),{item:i,delta:null}},"conversation.item.input_audio_transcription.completed":e=>{let{item_id:t,content_index:i,transcript:r}=e,s=this.itemLookup[t],a=r||" ";return s?(s.content[i].transcript=r,s.formatted.transcript=a,{item:s,delta:{transcript:r}}):(this.queuedTranscriptItems[t]={transcript:a},{item:null,delta:null})},"input_audio_buffer.speech_started":e=>{let{item_id:t,audio_start_ms:i}=e;return this.queuedSpeechItems[t]={audio_start_ms:i},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(e,t)=>{let{item_id:i,audio_end_ms:r}=e;this.queuedSpeechItems[i]||(this.queuedSpeechItems[i]={audio_start_ms:r});let s=this.queuedSpeechItems[i];if(s.audio_end_ms=r,t){let e=Math.floor(s.audio_start_ms*this.defaultFrequency/1e3),i=Math.floor(s.audio_end_ms*this.defaultFrequency/1e3);s.audio=t.slice(e,i)}return{item:null,delta:null}},"response.created":e=>{let{response:t}=e;return this.responseLookup[t.id]||(this.responseLookup[t.id]=t,this.responses.push(t)),{item:null,delta:null}},"response.output_item.added":e=>{let{response_id:t,item:i}=e,r=this.responseLookup[t];if(!r)throw Error(`response.output_item.added: Response "${t}" not found`);return r.output.push(i.id),{item:null,delta:null}},"response.output_item.done":e=>{let{item:t}=e;if(!t)throw Error('response.output_item.done: Missing "item"');let i=this.itemLookup[t.id];if(!i)throw Error(`response.output_item.done: Item "${t.id}" not found`);return i.status=t.status,{item:i,delta:null}},"response.content_part.added":e=>{let{item_id:t,part:i}
5387=e,r=this.itemLookup[t];if(!r)throw Error(`response.content_part.added: Item "${t}" not found`);return r.content.push(i),{item:r,delta:null}},"response.audio_transcript.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio_transcript.delta: Item "${t}" not found`);return s.content[i].transcript+=r,s.formatted.transcript+=r,{item:s,delta:{transcript:r}}},"response.audio.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio.delta: Item "${t}" not found`);let a=new Int16Array(A1.base64ToArrayBuffer(r));return s.formatted.audio=A1.mergeInt16Arrays(s.formatted.audio,a),{item:s,delta:{audio:a}}},"response.text.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.text.delta: Item "${t}" not found`);return s.content[i].text+=r,s.formatted.text+=r,{item:s,delta:{text:r}}},"response.function_call_arguments.delta":e=>{let{item_id:t,delta:i}=e,r=this.itemLookup[t];if(!r)throw Error(`response.function_call_arguments.delta: Item "${t}" not found`);return r.arguments+=i,r.formatted.tool.arguments+=i,{item:r,delta:{arguments:i}}}}),this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(e){return this.queuedInputAudio=e,e}processEvent(e,...t){if(!e.event_id)throw console.error(e),Error('Missing "event_id" on event');if(!e.type)throw console.error(e),Error('Missing "type" on event');let i=this.EventProcessors[e.type];if(!i)throw Error(`Missing conversation event processor for "${e.type}"`);return i.call(this,e,...t)}getItem(e){return this.itemLookup[e]||null}getItems(){return this.items.slice()}},A6=class extends A3{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new A4({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}),this.conversation=new A5,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",e=>{let t={time:new Date().toISOString(),source:"client",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.*",e=>{let t={time:new Date().toISOString(),source:"server",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.session.created",()=>this.sessionCreated=!0);let e=(e,...t)=>{let{item:i,delta:r}=this.conversation.processEvent(e,...t);return{item:i,delta:r}},t=(t,...i)=>{let{item:r,delta:s}=e(t,...i);return r&&this.dispatch("conversation.updated",{item:r,delta:s}),{item:r,delta:s}},i=async e=>{try{let t=JSON.parse(e.arguments),i=this.tools[e.name];if(!i)throw Error(`Tool "${e.name}" has not been added`);let r=await i.handler(t);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify(r)}})}catch(t){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify({error:t.message})}})}this.createResponse()};return this.realtime.on("server.response.created",e),this.realtime.on("server.response.output_item.added",e),this.realtime.on("server.response.content_part.added",e),this.realtime.on("server.input_audio_buffer.speech_started",t=>{e(t),this.dispatch("conversation.interrupted")}),this.realtime.on("server.input_audio_buffer.speech_stopped",t=>e(t,this.inputAudioBuffer)),this.realtime.on("server.conversation.item.created",e=>{let{item:i}=t(e);this.dispatch("conversation.item.appended",{item:i}),"completed"===i.status&&this.dispatch("conversation.item.completed",{item:i})}),this.realtime.on("server.conversation.item.truncated",t),this.realtime.on("server.conversation.item.deleted",t),this.realtime.on("server.conversation.item.input_audio_transcription.completed",t),this.realtime.on("server.response.audio_transcript.delta",t),this.realtime.on("server.response.audio.delta",t),this.realtime.on("server.response.text.delta",t),this.realtime.on("server.response.function_call_arguments.delta",t),this.realtime.on("server.response.output_item.done",async e=>{let{item:r}=t(e);"completed"===r.status&&this.dispatch("conversation.item.completed",{item:r}),r.formatted.tool&&i(r.formatted.tool)}),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise(e=>setTimeout(()=>e(),1));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(e,t){if(!e?.name)throw Error("Missing tool name in definition");let i=e?.name;if(this.tools[i])throw Error(`Tool "${i}" already added. Please use .removeTool("${i}") before trying to add again.`);if("function"!=typeof t)throw Error(`Tool "${i}" handler must be a function`);return this.tools[i]={definition:e,handler:t},this.updateSession(),this.tools[i]}removeTool(e){if(!this.tools[e])throw Error(`Tool "${e}" does not exist, can not be removed.`);return delete this.tools[e],!0}deleteItem(e){return this.realtime.send("conversation.item.delete",{item_id:e}),!0}updateSession({modalities:e,instructions:t,voice:i,input_audio_format:r,output_audio_format:s,input_audio_transcription:a,turn_detection:o,tools:l,tool_choice:h,temperature:c,max_response_output_tokens:d}={}){void 0!==e&&(this.sessionConfig.modalities=e),void 0!==t&&(this.sessionConfig.instructions=t),void 0!==i&&(this.sessionConfig.voice=i),void 0!==r&&(this.sessionConfig.input_audio_format=r),void 0!==s&&(this.sessionConfig.output_audio_format=s),void 0!==a&&(this.sessionConfig.input_audio_transcription=a),void 0!==o&&(this.sessionConfig.turn_detection=o),void 0!==l&&(this.sessionConfig.tools=l),void 0!==h&&(this.sessionConfig.tool_choice=h),void 0!==c&&(this.sessionConfig.temperature=c),void 0!==d&&(this.sessionConfig.max_response_output_tokens=d);let u=[].concat((l||[]).map(e=>{let t={type:"function",...e};if(this.tools[t?.name])throw Error(`Tool "${t?.name}" has already been defined`);return t}),Object.keys(this.tools).map(e=>({type:"function",...this.tools[e].definition}))),p={...this.sessionConfig};return p.tools=u,this.realtime.isConnected()&&this.realtime.send("session.update",{session:p}),!0}sendUserMessageContent(e=[]){if(e.length){for(let t of e)"input_audio"===t.type&&(t.audio instanceof ArrayBuffer||t.audio instanceof Int16Array)&&(t.audio=A1.arrayBufferToBase64(t.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:e}})}return this.createResponse(),!0}appendInputAudio(e){return e.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:A1.arrayBufferToBase64(e)}),this.inputAudioBuffer=A1.mergeInt16Arrays(this.inputAudioBuffer,e)),!0}createResponse(){return null===this.getTurnDetectionType()&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(e,t=0){if(!e)return this.realtime.send("response.cancel"),{item:null};if(e){let i=this.conversation.getItem(e);if(!i)throw Error(`Could not find item "${e}"`);
5387if("message"!==i.type)throw Error('Can only cancelResponse messages with type "message"');if("assistant"!==i.role)throw Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");let r=i.content.findIndex(e=>"audio"===e.type);if(-1===r)throw Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:e,content_index:r,audio_end_ms:Math.floor(t/this.conversation.defaultFrequency*1e3)}),{item:i}}}async waitForNextItem(){let{item:e}=await this.waitForNext("conversation.item.appended");return{item:e}}async waitForNextCompletedItem(){let{item:e}=await this.waitForNext("conversation.item.completed");return{item:e}}},A8=new Blob([` 5388class AudioProcessor extends AudioWorkletProcessor { 5389 5390 constructor() { 5391 super(); 5392 this.port.onmessage = this.receive.bind(this); 5393 this.initialize(); 5394 } 5395 5396 initialize() { 5397 this.foundAudio = false; 5398 this.recording = false; 5399 this.chunks = []; 5400 } 5401 5402 /** 5403 * Concatenates sampled chunks into channels 5404 * Format is chunk[Left[], Right[]] 5405 */ 5406 readChannelData(chunks, channel = -1, maxChannels = 9) { 5407 let channelLimit; 5408 if (channel !== -1) { 5409 if (chunks[0] && chunks[0].length - 1 < channel) { 5410 throw new Error( 5411 \`Channel \${channel} out of range: max \${chunks[0].length}\` 5412 ); 5413 } 5414 channelLimit = channel + 1; 5415 } else { 5416 channel = 0; 5417 channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels); 5418 } 5419 const channels = []; 5420 for (let n = channel; n < channelLimit; n++) { 5421 const length = chunks.reduce((sum, chunk) => { 5422 return sum + chunk[n].length; 5423 }, 0); 5424 const buffers = chunks.map((chunk) => chunk[n]); 5425 const result = new Float32Array(length); 5426 let offset = 0; 5427 for (let i = 0; i < buffers.length; i++) { 5428 result.set(buffers[i], offset); 5429 offset += buffers[i].length; 5430 } 5431 channels[n] = result; 5432 } 5433 return channels; 5434 } 5435 5436 /** 5437 * Combines parallel audio data into correct format, 5438 * channels[Left[], Right[]] to float32Array[LRLRLRLR...] 5439 */ 5440 formatAudioData(channels) { 5441 if (channels.length === 1) { 5442 // Simple case is only one channel 5443 const float32Array = channels[0].slice(); 5444 const meanValues = channels[0].slice(); 5445 return { float32Array, meanValues }; 5446 } else { 5447 const float32Array = new Float32Array( 5448 channels[0].length * channels.length 5449 ); 5450 const meanValues = new Float32Array(channels[0].length); 5451 for (let i = 0; i < channels[0].length; i++) { 5452 const offset = i * channels.length; 5453 let meanValue = 0; 5454 for (let n = 0; n < channels.length; n++) { 5455 float32Array[offset + n] = channels[n][i]; 5456 meanValue += channels[n][i]; 5457 } 5458 meanValues[i] = meanValue / channels.length; 5459 } 5460 return { float32Array, meanValues }; 5461 } 5462 } 5463 5464 /** 5465 * Converts 32-bit float data to 16-bit integers 5466 */ 5467 floatTo16BitPCM(float32Array) { 5468 const buffer = new ArrayBuffer(float32Array.length * 2); 5469 const view = new DataView(buffer); 5470 let offset = 0; 5471 for (let i = 0; i < float32Array.length; i++, offset += 2) { 5472 let s = Math.max(-1, Math.min(1, float32Array[i])); 5473 view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true); 5474 } 5475 return buffer; 5476 } 5477 5478 /** 5479 * Retrieves the most recent amplitude values from the audio stream 5480 * @param {number} channel 5481 */ 5482 getValues(channel = -1) { 5483 const channels = this.readChannelData(this.chunks, channel); 5484 const { meanValues } = this.formatAudioData(channels); 5485 return { meanValues, channels }; 5486 } 5487 5488 /** 5489 * Exports chunks as an audio/wav file 5490 */ 5491 export() { 5492 const channels = this.readChannelData(this.chunks); 5493 const { float32Array, meanValues } = this.formatAudioData(channels); 5494 const audioData = this.floatTo16BitPCM(float32Array); 5495 return { 5496 meanValues: meanValues, 5497 audio: { 5498 bitsPerSample: 16, 5499 channels: channels, 5500 data: audioData, 5501 }, 5502 }; 5503 } 5504 5505 receive(e) { 5506 const { event, id } = e.data; 5507 let receiptData = {}; 5508 switch (event) { 5509 case 'start': 5510 this.recording = true; 5511 break; 5512 case 'stop': 5513 this.recording = false;
5514 break; 5515 case 'clear': 5516 this.initialize(); 5517 break; 5518 case 'export': 5519 receiptData = this.export(); 5520 break; 5521 case 'read': 5522 receiptData = this.getValues(); 5523 break; 5524 default: 5525 break; 5526 } 5527 // Always send back receipt 5528 this.port.postMessage({ event: 'receipt', id, data: receiptData }); 5529 } 5530 5531 sendChunk(chunk) { 5532 const channels = this.readChannelData([chunk]); 5533 const { float32Array, meanValues } = this.formatAudioData(channels); 5534 const rawAudioData = this.floatTo16BitPCM(float32Array); 5535 const monoAudioData = this.floatTo16BitPCM(meanValues); 5536 this.port.postMessage({ 5537 event: 'chunk', 5538 data: { 5539 mono: monoAudioData, 5540 raw: rawAudioData, 5541 }, 5542 }); 5543 } 5544 5545 process(inputList, outputList, parameters) { 5546 // Copy input to output (e.g. speakers) 5547 // Note that this creates choppy sounds with Mac products 5548 const sourceLimit = Math.min(inputList.length, outputList.length); 5549 for (let inputNum = 0; inputNum < sourceLimit; inputNum++) { 5550 const input = inputList[inputNum]; 5551 const output = outputList[inputNum]; 5552 const channelCount = Math.min(input.length, output.length); 5553 for (let channelNum = 0; channelNum < channelCount; channelNum++) { 5554 input[channelNum].forEach((sample, i) => { 5555 output[channelNum][i] = sample; 5556 }); 5557 } 5558 } 5559 const inputs = inputList[0]; 5560 // There's latency at the beginning of a stream before recording starts 5561 // Make sure we actually receive audio data before we start storing chunks 5562 let sliceIndex = 0; 5563 if (!this.foundAudio) { 5564 for (const channel of inputs) { 5565 sliceIndex = 0; // reset for each channel 5566 if (this.foundAudio) { 5567 break; 5568 } 5569 if (channel) { 5570 for (const value of channel) { 5571 if (value !== 0) { 5572 // find only one non-zero entry in any channel 5573 this.foundAudio = true; 5574 break; 5575 } else { 5576 sliceIndex++; 5577 } 5578 } 5579 } 5580 } 5581 } 5582 if (inputs && inputs[0] && this.foundAudio && this.recording) { 5583 // We need to copy the TypedArray, because the \`process\` 5584 // internals will reuse the same buffer to hold each input 5585 const chunk = inputs.map((input) => input.slice(sliceIndex)); 5586 this.chunks.push(chunk); 5587 this.sendChunk(chunk); 5588 } 5589 return true; 5590 } 5591} 5592 5593registerProcessor('audio_processor', AudioProcessor); 5594`],{type:"application/javascript"}),A9=URL.createObjectURL(A8),A7=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],Me=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],Mt=[],Mi=[];for(let e=1;e<=8;e++)for(let t=0;t<A7.length;t++){let i=A7[t];Mt.push(i/Math.pow(2,8-e)),Mi.push(Me[t]+e)}var Mr=Mt.filter((e,t)=>Mt[t]>32&&Mt[t]<2e3),Ms=Mi.filter((e,t)=>Mt[t]>32&&Mt[t]<2e3),Ma=class{static getFrequencies(e,t,i,r="frequency",s=-100,a=-30){i||(i=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(i));let o=1/i.length*(t/2),l,h,c;if("music"===r||"voice"===r){let e="voice"===r?Mr:Mt,t=Array(e.length).fill(s);for(let r=0;r<i.length;r++){let s=r*o,a=i[r];for(let i=e.length-1;i>=0;i--)if(s>e[i]){t[i]=Math.max(t[i],a);break}}l=t,h="voice"===r?Mr:Mt,c="voice"===r?Ms:Mi}else c=(h=(l=Array.from(i)).map((e,t)=>o*t)).map(e=>`${e.toFixed(2)} Hz`);return{values:new Float32Array(l.map(e=>Math.max(0,Math.min((e-s)/(a-s),1)))),frequencies:h,labels:c}}constructor(e,t=null){if(this.fftResults=[],t){let{length:i,sampleRate:r}=t,s=new OfflineAudioContext({length:i,sampleRate:r}),a=s.createBufferSource();a.buffer=t;let o=s.createAnalyser();o.fftSize=8192,o.smoothingTimeConstant=.1,a.connect(o);let l=1/60,h=i/r,c=e=>{let t=l*e;t<h&&s.suspend(t).then(()=>{let t=new Float32Array(o.frequencyBinCount);o.getFloatFrequencyData(t),this.fftResults.push(t),c(e+1)}),1===e?s.startRendering():s.resume()};a.start(0),c(1),this.audio=e,this.context=s,this.analyser=o,this.sampleRate=r,this.audioBuffer=t}else{let t=new AudioContext,i=t.createMediaElementSource(e),r=t.createAnalyser();r.fftSize=8192,r.smoothingTimeConstant=.1,i.connect(r),r.connect(t.destination),this.audio=e,this.context=t,this.analyser=r,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}
5594getFrequencies(e="frequency",t=-100,i=-30){let r=null;if(this.audioBuffer&&this.fftResults.length){let e=Math.min(this.audio.currentTime/this.audio.duration*this.fftResults.length|0,this.fftResults.length-1);r=this.fftResults[e]}return Ma.getFrequencies(this.analyser,this.sampleRate,r,e,t,i)}async resumeIfSuspended(){return"suspended"===this.context.state&&await this.context.resume(),!0}},Mn=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static mergeBuffers(e,t){let i=new Uint8Array(e.byteLength+t.byteLength);return i.set(new Uint8Array(e),0),i.set(new Uint8Array(t),e.byteLength),i.buffer}_packData(e,t){return[new Uint8Array([t,t>>8]),new Uint8Array([t,t>>8,t>>16,t>>24])][e]}pack(e,t){if(t?.bitsPerSample){if(t?.channels){if(!t?.data)throw Error('Missing "data"')}else throw Error('Missing "channels"')}else throw Error('Missing "bitsPerSample"');let{bitsPerSample:i,channels:r,data:s}=t,a=new Blob(["RIFF",this._packData(1,52),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,r.length),this._packData(1,e),this._packData(1,e*r.length*i/8),this._packData(0,r.length*i/8),this._packData(0,i),"data",this._packData(1,r[0].length*r.length*i/8),s],{type:"audio/mpeg"}),o=URL.createObjectURL(a);return{blob:a,url:o,channelCount:r.length,sampleRate:e,duration:s.byteLength/(r.length*e*2)}}},Mo=class{constructor({sampleRate:e=44100,outputToSpeakers:t=!1,debug:i=!1}={}){this.scriptSrc=A9,this.sampleRate=e,this.outputToSpeakers=t,this.debug=!!i,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=()=>{},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}static async decode(e,t=44100,i=-1){let r=new AudioContext({sampleRate:t}),s,a;if(e instanceof Blob){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from Blob');a=e,s=await a.arrayBuffer()}else if(e instanceof ArrayBuffer){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');a=new Blob([s=e],{type:"audio/wav"})}else{let t,r;if(e instanceof Int16Array){r=e,t=new Float32Array(e.length);for(let i=0;i<e.length;i++)t[i]=e[i]/32768}else if(e instanceof Float32Array)t=e;else if(e instanceof Array)t=new Float32Array(e);else throw Error('"audioData" must be one of: Blob, Float32Arrray, Int16Array, ArrayBuffer, Array<number>');if(-1===i)throw Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(i<3e3)throw Error('Minimum "fromSampleRate" is 3000 (3kHz)');r||(r=Mn.floatTo16BitPCM(t));let o={bitsPerSample:16,channels:[t],data:r};a=new Mn().pack(i,o).blob,s=await a.arrayBuffer()}let o=await r.decodeAudioData(s),l=o.getChannelData(0),h=URL.createObjectURL(a);return{blob:a,url:h,values:l,audioBuffer:o}}log(){return this.debug&&this.log(...arguments),!0}getSampleRate(){return this.sampleRate}getStatus(){return this.processor?this.recording?"recording":"paused":"ended"}async _event(e,t={},i=null){if(!(i=i||this.processor))throw Error("Can not send events without recording first");let r={event:e,id:this._lastEventId++,data:t};i.port.postMessage(r);let s=new Date().valueOf();for(;!this.eventReceipts[r.id];){if(new Date().valueOf()-s>this.eventTimeout)throw Error(`Timeout waiting for "${e}" event`);await new Promise(e=>setTimeout(()=>e(!0),1))}let a=this.eventReceipts[r.id];return delete this.eventReceipts[r.id],a}listenForDeviceChange(e){if(null===e&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(null!==e){let t=0,i=[],r=e=>e.map(e=>e.deviceId).sort().join(","),s=async()=>{let s=++t,a=await this.listDevices();s===t&&r(i)!==r(a)&&(i=a,e(a.slice()))};navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}async requestPermission(){let e=await navigator.permissions.query({name:"microphone"});if("denied"===e.state)window.alert("You must grant microphone access to use this feature.");else if("prompt"===e.state)try{(await navigator.mediaDevices.getUserMedia({audio:!0}
5594)).getTracks().forEach(e=>e.stop())}catch{window.alert("You must grant microphone access to use this feature.")}return!0}async listDevices(){if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw Error("Could not request user devices");await this.requestPermission();let e=(await navigator.mediaDevices.enumerateDevices()).filter(e=>"audioinput"===e.kind),t=e.findIndex(e=>"default"===e.deviceId),i=[];if(-1!==t){let r=e.splice(t,1)[0],s=e.findIndex(e=>e.groupId===r.groupId);-1!==s&&(r=e.splice(s,1)[0]),r.default=!0,i.push(r)}return i.concat(e)}async begin(e){if(this.processor)throw Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw Error("Could not request user media");try{let t={audio:!0};e&&(t.audio={deviceId:{exact:e}}),this.stream=await navigator.mediaDevices.getUserMedia(t)}catch{throw Error("Could not start media stream")}let t=new AudioContext({sampleRate:this.sampleRate}),i=t.createMediaStreamSource(this.stream);try{await t.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let r=new AudioWorkletNode(t,"audio_processor");r.port.onmessage=e=>{let{event:t,id:i,data:r}=e.data;if("receipt"===t)this.eventReceipts[i]=r;else if("chunk"===t){if(this._chunkProcessorSize){let e=this._chunkProcessorBuffer;this._chunkProcessorBuffer={raw:Mn.mergeBuffers(e.raw,r.raw),mono:Mn.mergeBuffers(e.mono,r.mono)},this._chunkProcessorBuffer.mono.byteLength>=this._chunkProcessorSize&&(this._chunkProcessor(this._chunkProcessorBuffer),this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else this._chunkProcessor(r)}};let s=i.connect(r),a=t.createAnalyser();return a.fftSize=8192,a.smoothingTimeConstant=.1,s.connect(a),this.outputToSpeakers&&(console.warn(`Warning: Output to speakers may affect sound quality, 5595especially due to system audio feedback preventative measures. 5596use only for debugging`),a.connect(t.destination)),this.source=i,this.node=s,this.analyser=a,this.processor=r,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.processor)throw Error("Session ended: please call .begin() first");return Ma.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}async pause(){if(this.processor){if(!this.recording)throw Error("Already paused: please call .record() first")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessorBuffer.raw.byteLength&&this._chunkProcessor(this._chunkProcessorBuffer),this.log("Pausing ..."),await this._event("stop"),this.recording=!1,!0}async record(e=()=>{},t=8192){if(this.processor){if(this.recording)throw Error("Already recording: please call .pause() first");if("function"!=typeof e)throw Error("chunkProcessor must be a function")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessor=e,this._chunkProcessorSize=t,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},this.log("Recording ..."),await this._event("start"),this.recording=!0,!0}async clear(){if(!this.processor)throw Error("Session ended: please call .begin() first");return await this._event("clear"),!0}async read(){if(!this.processor)throw Error("Session ended: please call .begin() first");return this.log("Reading ..."),await this._event("read")}async save(e=!1){if(!this.processor)throw Error("Session ended: please call .begin() first");if(!e&&this.recording)throw Error("Currently recording: please call .pause() first, or call .save(true) to force");this.log("Exporting ...");let t=await this._event("export");return new Mn().pack(this.sampleRate,t.audio)}async end(){if(!this.processor)throw Error("Session ended: please call .begin() first");let e=this.processor;this.log("Stopping ..."),await this._event("stop"),this.recording=!1,this.stream.getTracks().forEach(e=>e.stop()),this.log("Exporting ...");let t=await this._event("export",{},e);return this.processor.disconnect(),this.source.disconnect(),this.node.disconnect(),this.analyser.disconnect(),this.stream=null,this.processor=null,this.source=null,this.node=null,new Mn().pack(this.sampleRate,t.audio)}
5596async quit(){return this.listenForDeviceChange(null),this.processor&&await this.end(),!0}},Ml=new Blob([` 5597class StreamProcessor extends AudioWorkletProcessor { 5598 constructor() { 5599 super(); 5600 this.hasStarted = false; 5601 this.hasInterrupted = false; 5602 this.outputBuffers = []; 5603 this.bufferLength = 128; 5604 this.write = { buffer: new Float32Array(this.bufferLength), trackId: null }; 5605 this.writeOffset = 0; 5606 this.trackSampleOffsets = {}; 5607 this.port.onmessage = (event) => { 5608 if (event.data) { 5609 const payload = event.data; 5610 if (payload.event === 'write') { 5611 const int16Array = payload.buffer; 5612 const float32Array = new Float32Array(int16Array.length); 5613 for (let i = 0; i < int16Array.length; i++) { 5614 float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32 5615 } 5616 this.writeData(float32Array, payload.trackId); 5617 } else if ( 5618 payload.event === 'offset' || 5619 payload.event === 'interrupt' 5620 ) { 5621 const requestId = payload.requestId; 5622 const trackId = this.write.trackId; 5623 const offset = this.trackSampleOffsets[trackId] || 0; 5624 this.port.postMessage({ 5625 event: 'offset', 5626 requestId, 5627 trackId, 5628 offset, 5629 }); 5630 if (payload.event === 'interrupt') { 5631 this.hasInterrupted = true; 5632 } 5633 } else { 5634 throw new Error(\`Unhandled event "\${payload.event}"\`); 5635 } 5636 } 5637 }; 5638 } 5639 5640 writeData(float32Array, trackId = null) { 5641 let { buffer } = this.write; 5642 let offset = this.writeOffset; 5643 for (let i = 0; i < float32Array.length; i++) { 5644 buffer[offset++] = float32Array[i]; 5645 if (offset >= buffer.length) { 5646 this.outputBuffers.push(this.write); 5647 this.write = { buffer: new Float32Array(this.bufferLength), trackId }; 5648 buffer = this.write.buffer; 5649 offset = 0; 5650 } 5651 } 5652 this.writeOffset = offset; 5653 return true; 5654 } 5655 5656 process(inputs, outputs, parameters) { 5657 const output = outputs[0]; 5658 const outputChannelData = output[0]; 5659 const outputBuffers = this.outputBuffers; 5660 if (this.hasInterrupted) { 5661 this.port.postMessage({ event: 'stop' }); 5662 return false; 5663 } else if (outputBuffers.length) { 5664 this.hasStarted = true; 5665 const { buffer, trackId } = outputBuffers.shift(); 5666 for (let i = 0; i < outputChannelData.length; i++) { 5667 outputChannelData[i] = buffer[i] || 0; 5668 } 5669 if (trackId) { 5670 this.trackSampleOffsets[trackId] = 5671 this.trackSampleOffsets[trackId] || 0; 5672 this.trackSampleOffsets[trackId] += buffer.length; 5673 } 5674 return true; 5675 } else if (this.hasStarted) { 5676 this.port.postMessage({ event: 'stop' }); 5677 return false; 5678 } else { 5679 return true; 5680 } 5681 } 5682} 5683 5684registerProcessor('stream_processor', StreamProcessor); 5685`],{type:"application/javascript"}),Mh=URL.createObjectURL(Ml),Mc=class{constructor({sampleRate:e=44100}={}){this.scriptSrc=Mh,this.sampleRate=e,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}async connect(){this.context=new AudioContext({sampleRate:this.sampleRate}),"suspended"===this.context.state&&await this.context.resume();try{await this.context.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let e=this.context.createAnalyser();return e.fftSize=8192,e.smoothingTimeConstant=.1,this.analyser=e,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.analyser)throw Error("Not connected, please call .connect() first");return Ma.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}_start(){let e=new AudioWorkletNode(this.context,"stream_processor");return e.connect(this.context.destination),e.port.onmessage=t=>{let{event:i}=t.data;if("stop"===i)e.disconnect(),this.stream=null;else if("offset"===i){let{requestId:e,trackId:i,offset:r}=t.data,s=r/this.sampleRate;this.trackSampleOffsets[e]={trackId:i,offset:r,currentTime:s}}},this.analyser.disconnect(),e.connect(this.analyser),this.stream=e,!0}add16BitPCM(e,t="default"){let i;if("string"!=typeof t)throw Error("trackId must be a string");if(!this.interruptedTrackIds[t]){if(this.stream||this._start(),e instanceof Int16Array)i=e;else if(e instanceof ArrayBuffer)i=new Int16Array(e);else throw Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:i,trackId:t}),i}}async getTrackSampleOffset(e=!1){let t;if(!this.stream)return null;let i=crypto.randomUUID();for(this.stream.port.postMessage({event:e?"interrupt":"offset",requestId:i});!t;)t=this.trackSampleOffsets[i],await new Promise(e=>setTimeout(()=>e(),1));let{trackId:r}=t;return e&&r&&(this.interruptedTrackIds[r]=!0),t}async interrupt(){return this.getTrackSampleOffset(!0)}},Md=()=>"https://relayserver.spline.design/",Mu=class{constructor(e,t,i){this.data=e,this.id=t,this.shared=i,this.items=[],this.isConnected=!1,this.rafId=0,this.emitter=wL(),this.voice=0,this.frequencies=new Float32Array([0]),this.onRealTimeEvent=({time:e,source:t,event:i})=>
5685{"server"===t&&"spline.ready"===i.type?this.onSessionCreated(i):"server"===t&&"session.created"===i.type&&(this.client.createResponse(),this.client.on("realtime.event",this.onRealTimeEvent))},this.onSessionCreated=async e=>{let t=Object.values(this.client.tools).map(e=>({type:"function",...e.definition}));this.client.realtime.send("spline.tools",{tools:t}),this.client.realtime.send("spline.connect",{}),await this.wavRecorder.record(e=>this.client.isConnected()&&this.client.appendInputAudio(e.mono))},this.animate=()=>{if(this.rafId=requestAnimationFrame(this.animate),this.isConnected){let e=this.wavStreamPlayer.analyser?this.wavStreamPlayer.getFrequencies("voice"):{values:new Float32Array([0])},t=e.values.reduce((e,t)=>e+t,0)/e.values.length;this.voice=t,this.frequencies=e.values,this.emitter.emit("voice",{value:t,frequencies:e.values})}},this.client=new A6({url:Md()+"?uuidfile="+e.integration.hash}),this.wavRecorder=new Mo({sampleRate:24e3}),this.wavStreamPlayer=new Mc({sampleRate:24e3})}update(e){this.data=e,this.client=new A6({url:Md()+"?uuidfile="+e.integration.hash})}setColorByName(e,t){let i=this.shared.getColorByName(e);if(i){let{id:e}=i,{r:r,g:s,b:a}=wP.hexStringToRgb(t)??{r:0,g:0,b:0};this.shared.updateColor(e,{r:r/255,g:s/255,b:a/255})}}connect(){if(this.isConnected)return;this.isConnected=!0,this.client.updateSession({turn_detection:{type:"server_vad"}}),this.client.addTool({name:"set_personality_color",description:"returns a color based on the voice personality of the ai assistant. This should be called by the voice assistant each time it is asks to speak differently. If a color cannot be associated to the personality, the color should be a neutral color.",parameters:{type:"object",properties:{color:{type:"string",description:"css hex color string, reflecting the personality"},personality:{type:"string",description:"the personality of the voice assistant"}},required:["color","personality"]}},({color:e})=>{this.setColorByName("Voice Assistant Color",e)});let e=this.shared.getVariablesNames().join(", ");this.client.addTool({name:"set_variable",description:"Sets a Spline variable value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the variable that needs to be set. Here's a list of available variables: ${e}. It the variable does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"The new value for this variable, should always be a string even for number and boolean variables, assume that the value will be cast to the proper type afterwards."}},required:["name","value","type"]}},({name:e,value:t})=>{let i=this.shared.getVariableByName(e);if(i){let e=this.shared.getVariable(i.id),r;r="number"==typeof e?parseFloat(t):"boolean"==typeof e?"true"===t.toLowerCase():{textValue:t},this.shared.updateVariable(i.id,r)}});let t=this.shared.getColorNames().join(", ");this.client.addTool({name:"set_color",description:"Sets a Spline color asset value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the color asset that needs to be set. Here's a list of available color assets: ${t}. It the color asset does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"css hex color string"}},required:["name","value"]}},({name:e,value:t})=>{this.setColorByName(e,t)});let i=this.shared.scene,r=[];i.traverseEntity(e=>{e.data.events.forEach(e=>{if("AIAssistantTrigger"===e.data.type){let{description:t}=e.data;r.push(t)}})}),this.client.addTool({name:"trigger_event",description:"Trigger an event by name, here are the available events, please match what the user is asking for to one of these if it applies, otherwise don't call the function and warn the user.",parameters:{type:"object",properties:{description:{type:"string",description:`The name of the event that needs to be triggered. Here's a list of available events: ${JSON.stringify(r)}.`},direction:{type:"string",description:"default is forward, but can be forward or backward. Always set to forward unless the user ask to reverse or cancel the event, then set to backward."}},required:["description","direction"]}},({description:e,direction:t})=>{this.emitter.emit("trigger_event",{description:e,direction:t})}),this.client.on("error",e=>console.error(e)),this.client.on("conversation.interrupted",async()=>{let e=await this.wavStreamPlayer.interrupt();if(e?.trackId){let{trackId:t,offset:i}=e;await this.client.cancelResponse(t,i)}}),this.client.on("conversation.updated",async({item:e,delta:t})=>{let i=this.client.conversation.getItems();if(t?.audio&&this.wavStreamPlayer.add16BitPCM(t.audio,e.id),"completed"===e.status&&e.formatted.audio?.length){let t=await Mo.decode(e.formatted.audio,24e3,24e3);e.formatted.file=t}this.items=i}),this.animate()}disconnect(){cancelAnimationFrame(this.rafId),this.voice=0,this.isConnected=!1}async start(){try{await this.wavRecorder.end()}catch{}await this.wavRecorder.begin(),this.client.on("realtime.event",this.onRealTimeEvent),await this.wavStreamPlayer.connect(),await this.client.connect()}async stop(){try{this.client.off("realtime.event",this.onRealTimeEvent)}catch(e){console.error(e)}this.client.disconnect(),await this.wavRecorder.end(),await this.wavStreamPlayer.interrupt()}computeAnalysisForListenerEvent(e){if("range"===e.analysis){let t=this.frequencies.slice(...e.analysisRange);return t.reduce((e,t)=>
5685e+t,0)/t.length}return"single"===e.analysis?this.frequencies[e.analysisSingle]:this.voice}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}};function Mp(e){return"variable_"+e}var Mf=class extends _3{constructor(e){super(),this.shared=e}create(e){return new _4(e,this.shared)}},Mm=class{constructor(e,t={},i=!0,r=!1){if(this.data=e,this.needsJitter=i,this.enableLocalStorageForPersistentVariables=r,this.geometryCache=new AZ(!0),this.geometryCache2=new AZ(!1),this.imageHolderCache=new Mf(this),this.thisContext={scene:AK,shared:this},this.deletedMaterial=new AR(vk.defaultTwoLayerData("phong"),this.thisContext,""),this.deletedImage=new _5(yE.emptyImage,this),this.deletedVideo=new _5(g_.defaultVideo,this),this.materials={},this.images={},this.uiBuffers={},this.videos={},this.colors={},this.audios={},this.particles={},this.fonts={},this.variables={},this.userAPIs={},this.userWebhooks={},this.mouseProperty=null,this.raycastProperty=null,this.requestRender=()=>{this._requestRender&&this._requestRender()},t.images)for(let[e,i]of Object.entries(t.images))this.addImage(e,i);if(t.videos)for(let[e,i]of Object.entries(t.videos))this.addVideo(e,i);if(t.audios)for(let[e,i]of Object.entries(t.audios))this.addAudio(e,i);if(t.particles)for(let[e,i]of Object.entries(t.particles))this.addParticle(e,i);this.reset(e)}setRequestRender(e){this._requestRender=e}getImageLoadPromises(){return Object.values(this.images).map(e=>e.loadPromise)}setEntityOpContext(e){this.entityOpContext=e}reset(e,t=!1){for(let{id:i,data:r}of(this.data=e,this.resetLib(e.lib),e.variables))this.addVariableHolder(i,r),t&&this.updateVariableHolder(i,r);for(let[t,i]of Object.entries(e.userAPIs))this.addUserAPI(t,i);for(let[t,i]of Object.entries(e.userWebhooks))this.addUserWebhook(t,i);for(let[t,i]of Object.entries(e.images))this.addImage(t,i);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i);for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i)}addMaterial(e,t){if(this.materials[e]){let i=this.materials[e];i.reset(t,this.thisContext),i.dispose()}else{let i=new AR(t,this.thisContext,e);this.materials[e]=i}}deleteMaterial(e){this.materials[e]&&(this.materials[e].nodeMaterialDispose(),delete this.materials[e])}getMaterial(e){return this.materials[e]}getMaterialOrDeletedPlaceholder(e){return this.materials[e]??this.deletedMaterial}material(e){return"string"==typeof e?this.getMaterialOrDeletedPlaceholder(e):null==e?(console.error("material is undefined or null"),this.deletedMaterial):new AI(e,this.thisContext)}getMaterials(){return this.materials}addImage(e,t){return this.images[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.images[e].updateSrc(t.data),!0):(this.images[e]=new _5(t,this),!1)}deleteImage(e){let t=this.images[e];t&&(t.dispose(),delete this.images[e])}getDefaultImage(){return this.images.image_0}getImage(e){return this.images[e]??this.deletedImage}image(e){return"string"==typeof e?this.getImage(e):this.imageHolderCache.load(e)}addUIBuffer(e,t){return this.uiBuffers[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.uiBuffers[e].updateSrc(t),!0):(this.uiBuffers[e]=new _5(t,this),!1)}uiBuffer(e){return this.uiBuffers[e]}addVideo(e,t){return this.videos[e]?(this.videos[e].updateSrc(t.data),!0):(this.videos[e]=new _5(t,this),!1)}deleteVideo(e){let t=this.videos[e];t&&(t.dispose(),delete this.videos[e])}getVideo(e){return this.videos[e]??this.deletedVideo}video(e){return"string"==typeof e?this.getVideo(e):this.imageHolderCache.load(e)}addColor(e,t){return this.colors[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),"a"in t?this.colors[e].setRGBA(t.r,t.g,t.b,t.a):this.colors[e].setRGBA(t.r,t.g,t.b,1),!0):("a"in t?this.colors[e]=new Av(t.r,t.g,t.b,t.a):this.colors[e]=new Av(t.r,t.g,t.b,1),!1)}updateColor(e,t){if(this.colors[e]){this.onColorOrImageUpdate&&this.onColorOrImageUpdate();let i=this.colors[e];return this.colors[e].r=t.r??i.r,this.colors[e].g=t.g??i.g,this.colors[e].b=t.b??i.b,this.colors[e].a=t.a??i.a,!0}return!1}deleteColor(e){this.colors[e]&&delete this.colors[e]}getColor(e){return this.colors[e]}getColorNames(){return Object.values(this.data.colors).map(e=>e.name)}
vendor: 5,047 bytes, line 5685
5685getColorByName(e){for(let t in this.data.colors)if(this.data.colors[t].name===e)return{color:this.colors[t],id:t}}color(e){let t;if("string"!=typeof e)return"a"in e?new SU(e.r,e.g,e.b,e.a):new SU(e.r,e.g,e.b,1);{let i=this.getColor(e);i?t=i:(console.warn("Tried to create color layer params with a color key that does not exist in the assets manager"),t=new SU(0,0,0,0))}return t}addAudio(e,t){this.audios[e]=t}getAudio(e){let t=this.audios[e];if(t instanceof Ak)return t;{let i=new Ak({src:t.data});return this.audios[e]=i,i}}addParticle(e,t){this.particles[e]=t}getParticle(e){return this.particles[e]}deleteParticle(e){this.particles[e]&&delete this.particles[e]}deleteAudio(e){let t=this.audios[e];t&&(t instanceof Ak&&t.dispose(),delete this.audios[e])}addFont(e,t){this.fonts[e]=new AY(t),this.fonts[e].loadingPromise.then(()=>this.requestRender())}getFont(e){return this.fonts[e]}deleteFont(e){this.fonts[e]&&delete this.fonts[e]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this._requestRender=void 0,Object.values(this.audios).forEach(e=>{e instanceof Ak&&e.dispose()}),this.audios={},this.particles={},this.geometryCache.dispose(),this.geometryCache2.dispose()}addVariableHolder(e,t){if(void 0===this.variables[e]){let i=t.value;if(this.enableLocalStorageForPersistentVariables&&t.persistent){let r=localStorage.getItem(Mp(e));i=null!==r?JSON.parse(r):t.value}return this.variables[e]={value:i,locations:[],persistent:t.persistent},"dynamicVariableType"in t&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0),!0}return this.variables[e].value=t.value,!1}resetDynamicVariablePlayState(){for(let e in this.variables)void 0!==this.variables[e].dynamicVariablePlayState&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0)}updateVariableHolder(e,t){this.updateVariable(e,t.value)}updateVariable(e,t){if(void 0===this.variables[e])return!1;this.variables[e].value=t,this.enableLocalStorageForPersistentVariables&&this.variables[e].persistent&&localStorage.setItem(Mp(e),JSON.stringify(t));let i=t;for(;"string"==typeof i;)i=this.variables[i].value;let r=this.entityOpContext.scene;for(let t=this.variables[e].locations.length-1;t>=0;t--){let s=this.variables[e].locations[t];if("material"===s[0]){let e=s[1],t=i,a={scene:r,shared:this},o=s.slice(2);r.traverseMaterial(i=>{let r=i.root??i;r.uuid===e&&r.onVariableUpdate(o,t,a)});let l=this.materials[e];l&&l.onVariableUpdate(o,t,a)}else{let a=r.find(s[0]);if(void 0===a){this.variables[e].locations.splice(t,1);continue}if("geometry"!==s[1]&&"particles"!==s[1]){for(let e=1;e<s.length-1;e++)a=a[s[e]];"rotation"===s[1]?a[s[s.length-1]]=i*tZ.DEG2RAD:a[s[s.length-1]]=i}if("ParticleEmitter"===(a=r.find(s[0])).type&&a.updateVariableState(i,s),wZ.is(a)){if("position"===s[1]||"rotation"===s[1]||"scale"===s[1])a.onVariableUpdate();else if("geometry"===s[1]){let e=a;a.component&&(e=a.component);let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData(),e.instances.forEach(e=>{let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData()})}else"morphTargetInfluences"===s[1]&&a.updateMorphInfluences(s[2],i)}}}return this.requestRender(),!0}deleteVariable(e){this.variables[e]&&delete this.variables[e]}getVariable(e,t){if(Array.isArray(e)){if("mouse"===e[0])return this.mouseProperty?.[e[1]]??0;if("raycast"===e[0])return this.raycastProperty?.[e[1]]??0;let t=this.entityOpContext.scene.find(e[0]);if("width"===e[1]||"height"===e[1]||"depth"===e[1])return t.geometry.userData.parameters[e[1]];for(let i=1;i<e.length;i++)t=t[e[i]];return"rotation"===e[1]&&(t*=tZ.RAD2DEG),t}for(let e in this.variables){if(void 0===t)break;let i=this.variables[e],r=i.locations?.findIndex(e=>p2.equal(e,t));void 0!==r&&-1!==r&&i.locations.splice(r,1)}if("string"!=typeof e)return e;{let i=e,r=e;do{if(r=i,void 0===this.variables[i])break;let e=this.variables[i].value;t&&void 0!==this.variables[r]&&this.variables[r].locations.push(t),i=e}while("string"==typeof i);return i}}getVariables(){return this.variables}getVariablesNames(){return this.data.variables.map(e=>e.data.name)}getVariableByName(e){for(let t of this.data.variables)if(t.data.name===e)return{variable:t.data,id:t.id}}getDynamicVariablePlayState(e){return this.variables[e]?.dynamicVariablePlayState}setDynamicVariablePlayState(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariablePlayState=t)}getDynamicVariableToggleIsForward(e){return this.variables[e]?.dynamicVariableToggleIsForward}setDynamicVariableToggleIsForward(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariableToggleIsForward=t)}resetLib(e){for(let[t,i]of Object.entries(e.images))this.addImage(t,i.asset);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i.asset);
5685for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i.asset);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i.asset);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i.asset);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i.asset);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i.asset);for(let[t,i]of Object.entries(e.variables))this.addVariableHolder(t,i.asset)}updateLibByOp(e,t){"images"===e.path[0]?1===e.path.length&&1===e.type?this.addImage(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteImage(e.id):"videos"===e.path[0]?1===e.path.length&&1===e.type?this.addVideo(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVideo(e.id):"audios"===e.path[0]?1===e.path.length&&1===e.type?this.addAudio(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteAudio(e.id):"particles"===e.path[0]?1===e.path.length&&1===e.type?this.addParticle(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteParticle(e.id):"colors"===e.path[0]?1===e.path.length&&1===e.type?this.addColor(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteColor(e.id):"materials"===e.path[0]?1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteMaterial(e.id):"fonts"===e.path[0]?1===e.path.length&&1===e.type?this.addFont(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteFont(e.id):"variables"===e.path[0]?1===e.path.length&&1===e.type?this.addVariableHolder(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVariable(e.id):"components"===e.path[0]&&t.updateByLibOp(e,this)}updateByOp(e,t,i){if(this.data=t,"images"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getImage(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addImage(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteImage(e.id);else if("videos"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getVideo(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addVideo(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteVideo(e.id);else if("audios"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addAudio(e.path[1],t.audios[e.path[1]]):1===e.path.length&&1===e.type?this.addAudio(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteAudio(e.id);else if("particles"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addParticle(e.path[1],t.particles[e.path[1]]):1===e.path.length&&1===e.type?this.addParticle(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteParticle(e.id);else if("colors"===e.path[0])2===e.path.length&&0===e.type?this.updateColor(e.path[1],e.props):1===e.path.length&&1===e.type?this.addColor(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteColor(e.id);else if("materials"===e.path[0])1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data):1===e.path.length&&2===e.type?this.deleteMaterial(e.id):e.path.length>1&&this.getMaterial(e.path[1]).updateByOp(p0.drop(e,2),t.materials[e.path[1]],{shared:this,scene:i});else if("fonts"===e.path[0])2===e.path.length&&0===e.type?this.updateFont(e.path[1],e,i):1===e.path.length&&1===e.type?this.addFont(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteFont(e.id);else if("variables"===e.path[0])2===e.path.length&&0===e.type?"value"in e.props?this.updateVariable(e.path[1],e.props.value):"persistent"in e.props&&(this.variables[e.path[1]].persistent=e.props.persistent):1===e.path.length&&4===e.type?this.addVariableHolder(e.id,e.data):1===e.path.length&&5===e.type&&this.deleteVariable(e.id);else if("userAPIs"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserAPI(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserAPI(e.id);else if("string"==typeof e.path[1]){let i=t.userAPIs[e.path[1]];if(i){let t=0===e.type&&void 0===e.props.debounce,r=this.getUserAPI(e.path[1]);r instanceof Mu?r.update(i):r?.update(i,this,t)}}}else if("userWebhooks"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserWebhook(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserWebhook(e.id);else if("string"==typeof e.path[1]){let i=t.userWebhooks[e.path[1]];i&&this.getUserWebhook(e.path[1])?.update(i)}}else"lib"===e.path[0]&&this.updateLibByOp(p0.drop(e,1),i)}updateFont(e,t,i){if(t.props.url){let r=this.getFont(e),s={...this.data.fonts[e],url:t.props.url};r.update(s),r.loadingPromise.then(()=>this.requestRender()),i.updateFont(e,this)}}addUserAPI(e,t){return this.userAPIs[e]?(this.userAPIs[e].update(t,this),!0):this.openAIRealtime?.id===e?(this.openAIRealtime.update(t),!0):(t.integration?.type==="VoiceAssistant"?this.openAIRealtime=new Mu(t,e,this):this.userAPIs[e]=new wB(e,t,this),!1)}getUserAPI(e){return this.openAIRealtime?.id===e?this.openAIRealtime:this.userAPIs[e]}getUserAPIs(){return this.userAPIs}deleteUserAPI(e){let t=this.userAPIs[e];t&&(t.dispose(),delete this.userAPIs[e])}addUserWebhook(e,t){return this.userWebhooks[e]?(this.userWebhooks[e].update(t),!0):(this.userWebhooks[e]=new AJ(e,t),!1)}getUserWebhook(e){return this.userWebhooks[e]}getUserWebhooks(){return this.userWebhooks}deleteUserWebhook(e){let t=this.userWebhooks[e];t&&(t.dispose(),delete this.userWebhooks[e])}get scene(){return this.entityOpContext.scene}};
5685new Mm(yS.emptyData());var Mg=class extends SD{updateByPatchedOp(e,t,i){if(super.updateByPatchedOp(e,t,i),null!==function(e,t){let i=[];if(t.length!==e.length)return null;for(var r=0;r<e.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e.path,["materials"])&&0===e.type&&Array.isArray(this.material))for(let[t,r]of Object.entries(e.props)){let e=i.shared.material(r);this.material[Number(t)]=e}else if(pY(e.path,["material"])&&this.material instanceof AP)"material"in t&&"string"!=typeof t.material&&this.material.updateByOp(p0.drop(e,1),t.material,i);else if(pY(e.path,["materials","*"])&&Array.isArray(this.material)){let r=e.path[1];if("materials"in t&&r<this.material.length){let s=t.materials[r];"string"!=typeof s&&this.material[r].updateByOp(p0.drop(e,2),s,i)}}}get needsAO(){return void 0!==this.material&&(Array.isArray(this.material)?this.material[0]:this.material).hasAO}updateState(e,t){super.updateState(e,t),void 0!==e.castShadow&&(this.castShadow=e.castShadow),void 0!==e.receiveShadow&&(this.receiveShadow=e.receiveShadow);let i=this.dataPatched;if(e.geometry?.type!=="NonParametricGeometry"&&"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=t.shared.material(e.material).getFlavor(i.flatShading,i.side,i.wireframe),t.scene.markNeedsUpdateRendererDirty()),(e.geometry?.type==="NonParametricGeometry"||"materials"in e)&&("materials"in e&&void 0!==e.materials?(this.disposeMaterial(),this.material=e.materials.map(e=>t.shared.material(e).getFlavor(i.flatShading,i.side,i.wireframe)),t.scene.markNeedsUpdateRendererDirty()):"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=[t.shared.material(e.material).getFlavor(i.flatShading,i.side,i.wireframe)],t.scene.markNeedsUpdateRendererDirty())),void 0!==e.flatShading||void 0!==e.wireframe||void 0!==e.side){if(Array.isArray(this.material))for(let e=0;e<this.material.length;e++)this.material[e]=this.material[e].getFlavor(i.flatShading,i.side,i.wireframe);else this.material=this.material.getFlavor(i.flatShading,i.side,i.wireframe)}}disposeMaterial(){this.material&&u$(this.material).forEach(e=>{e instanceof AP&&(e instanceof AR||e.nodeMaterialDispose())})}dispose(){this.disposeMaterial(),super.dispose()}},Mv=new ix,My=new iu,Mx=new iu,Mb=new ix,Mw=new iQ,MS=class extends Mg{constructor(e,t,i){super(e,t),this.data=t,this.isSkinnedMesh=!1,this.localGeometry=void 0,t.bindMode&&t.bindMatrix&&(this.bindMode=t.bindMode,this.bindMatrix=new iQ().fromArray(t.bindMatrix),this.bindMatrixInverse=new iQ)}chooseGeoemtryCache(e){return e.geometryCache}markGeometryAsReachable(e){this.geometryCreateDeleyed instanceof rN&&this.chooseGeoemtryCache(e).markAsReachable(this.dataPatched.geometry,this.geometryCreateDeleyed)}get geometry(){if(void 0!==this.localGeometry)return this.localGeometry;if(this.geometryCreateDeleyed instanceof Mm){let e=this.geometryCreateDeleyed,t=this.chooseGeoemtryCache(e);this.geometryCreateDeleyed=t.get(this.dataPatched.geometry,e,this)}return this.geometryCreateDeleyed}set geometry(e){this.localGeometry=e}get is2DAndNoDepth(){let e=this.dataPatched.geometry;return vH.is2DParametricMesh(e.type)&&0===e.depth}get is2DType(){return vH.is2DParametricMesh(this.geometry.userData.type)}get isNonParametric(){return"NonParametricGeometry"===this.geometry.userData.type}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pY(e.path,["geometry"])&&this.updateByPatchedOpGeometry(p0.drop(e,1),t.geometry,i)}removeInteractionGeometry(e){this.localGeometry?.dispose(),this.localGeometry=void 0}updateGeometryInteractions(e,t){this.invalidateDownstreamBooleanData();let i=this.data.geometry.type;if("NonParametricGeometry"===i||"SubdivGeometry"===i){let i,r,s;if(void 0===this.localGeometry){let i={...this.data.geometry,...e};this.localGeometry=w5(i,t,this.data.flatShading,this)}e.scaleBaked?[i,r,s]=e.scaleBaked:{width:i,height:r,depth:s}=e;let a=this.localGeometry.userData;void 0!==a.sxPrev&&w8(this.localGeometry.attributes,i/a.sxPrev,r/a.syPrev,s/a.szPrev),a.sxPrev=i,a.syPrev=r,a.szPrev=s}else{let i={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=w5(i,t,this.data.flatShading,this)}}refreshAttachedClonersInteractions(){for(let e of this.attachedSurfaceCloners
vendor: 8,360 bytes, line 5685
5685)e.update()}refreshAttachedCloners(e){for(let t of this.attachedSurfaceCloners)e.scene.addPendingUpdateCloner(t.object)}refreshAttachedPaths(e){for(let t of this.attachedPaths)e.scene.addPendingCommand(()=>t.updateShape())}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.refreshAttachedCloners(e),this.refreshAttachedPaths(e)}updateByPatchedOpGeometry(e,t,i){let r=!1;0===e.type&&0===e.path.length&&Object.keys(e.props).includes("scaleBaked")&&this.geometryCreateDeleyed instanceof Sa&&this.chooseGeoemtryCache(i.shared).mutateIfUnique(this.geometryCreateDeleyed.data,t)===this.geometryCreateDeleyed&&(r=!0,this.geometryCreateDeleyed.mutateDirectlyScaleBaked(t,e.props.scaleBaked),this.refreshAttachedCloners(i),this.refreshAttachedPaths(i)),r||(i.scene?.markGeometryCacheDirty(),this.createGeometryDelayed(i)),this.resetBBoxNeedsUpdate(),this.invalidateDownstreamBooleanData()}updateGeometryOnStateUpdate(e,t){this.createGeometryDelayed(t)}updateState(e,t){void 0!==e.geometry&&this.updateGeometryOnStateUpdate(e.geometry,t);let i=e.morphTargetInfluences;if(i)for(let{data:{name:e,value:r}}of(this.updateMorphTargets(),this.geometry.morphTargetsRelative=!0,i))this.updateMorphInfluences(e,t.shared.getVariable(r,[this.uuid,"morphTargetInfluences",e]));super.updateState(e,t)}updateMorphInfluences(e,t){if(void 0===this.morphTargetDictionary)return;let i=this.morphTargetDictionary[e];void 0!==i&&(this.morphTargetInfluences[i]=t)}updateGeometryGroupsIfNeeded(){Array.isArray(this.material)&&0===this.geometry.groups.length&&this.geometry.addGroup(0,Math.max(this.geometry.getIndex()?.count??0,this.geometry.getAttribute("position").count),0)}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;this.is2DType?e.set(0,0,.5*i.depth):this.isNonParametric?(e.setScalar(0),this.geometry.boundingSphere&&e.copy(this.geometry.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)):e.setScalar(0),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}updateMatrixWorld(e){super.updateMatrixWorld(e),"attached"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():"detached"===this.bindMode&&this.bindMatrixInverse.copy(this.bindMatrix).invert()}bind(e,t){this.skeleton=e,this.isSkinnedMesh=!0,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(e){let t=new iu,i=this.geometry.attributes.skinWeight;for(let e=0,r=i.count;e<r;e++){t.fromBufferAttribute(i,e);let r=1/t.manhattanLength();r!==1/0?t.multiplyScalar(r):t.set(1,0,0,0),i.setXYZW(e,t.x,t.y,t.z,t.w)}}boneTransform(e,t){let i=this.skeleton;if(void 0===i)return;let r=this.geometry;My.fromBufferAttribute(r.attributes.skinIndex,e),Mx.fromBufferAttribute(r.attributes.skinWeight,e),Mv.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let e=0;e<4;e++){let r=Mx.getComponent(e);if(0!==r){let s=My.getComponent(e);Mw.multiplyMatrices(i.bones[s].matrixWorld,i.boneInverses[s]),t.addScaledVector(Mb.copy(Mv).applyMatrix4(Mw),r)}}return t.applyMatrix4(this.bindMatrixInverse)}};function M_(e){if(Array.isArray(e.material)){for(let t of e.material)if(0===t.getLayersOfType("outline").length)return}else if(!(e.material instanceof AP)||0===e.material.getLayersOfType("outline").length)return;e instanceof MS&&e.is2DAndNoDepth?function(e){if(e.geometry.attributes.extrudeNormals||!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=new ix;for(let e=0;e<t.length;e+=3)r.set(t[e],t[e+1],t[e+2]).normalize(),i[e]=r.x,i[e+1]=r.y,i[e+2]=r.z;e.geometry.setAttribute("extrudeNormal",new rD(i,3))}(e):function(e){if(e.geometry.attributes.extrudeNormal||!e.geometry.attributes.position||!e.geometry.attributes.normal)return;let t=new Map,i=e.geometry.attributes,r=i.position.array,s=i.normal.array,a=new Float32Array(r.length);for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,a=new ix(s[e],s[e+1],s[e+2]);t.has(i)?t.get(i)?.normals.push(a):t.set(i,{normals:[a],result:new ix})}t.forEach((e,t)=>{for(let t of e.normals)e.result.add(t);e.result.divideScalar(e.normals.length)});for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,s=t.get(i)?.result;s&&(a[e]=s.x,a[e+1]=s.y,a[e+2]=s.z)}e.geometry.setAttribute("extrudeNormal",new rD(a,3))}(e)}function MA(e){if(!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=parseInt(e.uuid.replace(/\D/g,"")),s=[tZ.seededRandom(r),tZ.seededRandom(r+1e4),tZ.seededRandom(r+2e4)];for(let e=0;e<t.length;e++)i[e]=s[e%3];e.geometry.setAttribute("randomColor",new rC(i,3))}var MM=new iS,ME=new ix,MC=class extends MS{constructor(e,t,i){super(e,t,i),this.data=t,this.hiddenMatrixOld=new iQ,this.smoothShading=!0,this.skipReactionUpdate=!1}chooseGeoemtryCache(e){return this.dataPatched.flatShading?e.geometryCache:e.geometryCache2}get subdivPointerNew(){return void 0!==this.localGeometry?this.subdivPointer:this.geometry.ensureSubdivPointer()}get originalGeometryNew(){return void 0!==this.localGeometry?this.originalGeometry:this.geometry.originalGeometry}get phongAngle(){return this.data.geometry.phongAngle??45}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;e.copy(this.originalGeometryNew.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}createGeometryByControls(e){if(!0===this.skipReactionUpdate)return;let t=this.localGeometry?.uuid,{originalGeometry:i,subdividedGeometry:r,subdivPointer:s}=Sa.build(e,this.subdivPointer,this.smoothShading,this.hasNonUniformScale?this.shearScale:void 0);this.subdivPointer=s,void 0!==i&&(this.originalGeometry?.dispose(),this.originalGeometry=i),void 0!==r&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=r??void 0),this.localGeometry=this.subdividedGeometry??this.originalGeometry,M_(this),MA(this),this.calcBoundingBox(),t&&(this.localGeometry.uuid=t)}updateState(e,t){if(super.updateState(e,t),void 0!==e.flatShading){let i=this.material;this.material=Array.isArray(i)?i.map(e=>e.getFlavor(!1,e.side,e.wireframe)):i.getFlavor(!1,i.side,i.wireframe),this.smoothShading=!e.flatShading,this.createGeometryDelayed(t)}}updateMesh(e=!1){Sa.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0),this.subdividedGeometry&&Sa.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=Sa.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=Sa.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.localGeometry=this.subdividedGeometry??this.originalGeometry}raycast(e,t){let i=this.localGeometry;this.localGeometry=this.originalGeometryNew,SD.prototype.raycast.call(this,e,t),this.localGeometry=i}activateSVDCompensation(){this.hasNonUniformScale&&(this.matrix.copy(this.matrixWorldRigid),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){this.hasNonUniformScale&&(this.updateMatrix(),this.hasNonUniformScale=void 0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new ik,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;MM.setFromBufferAttribute(t),MM.getCenter(i),e.boundingSphere.radius=i.distanceTo(MM.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),MM.getSize(ME),this.hasNonUniformScale&&ME.divide(this.scale);let r={width:ME.x,height:ME.y,depth:ME.z};return this.geometry.userData.parameters=r,r}updateBoundingSphere(e){let t=this.originalGeometry;MM.min.set(e[0],e[2],e[4]),MM.max.set(e[1],e[3],e[5]),this.hasNonUniformScale&&(MM.min.applyMatrix4(this.shearScaleInv),MM.max.applyMatrix4(this.shearScaleInv)),null===t.boundingSphere&&(t.boun
5685dingSphere=new ik);let i=t.boundingSphere.center;MM.getCenter(i),t.boundingSphere.radius=i.distanceTo(MM.max)}freeSubdivPointer(){this.subdivPointer&&(Sa.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0),this.localGeometry=void 0,this.originalGeometry?.dispose(),this.subdividedGeometry?.dispose()}dispose(){super.dispose(),this.freeSubdivPointer()}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),this.localGeometry&&this.createGeometryByControls(t)}},MT={x:[1,0,0],"-x":[-1,0,0],y:[0,1,0],"-y":[0,-1,0],z:[0,0,1],"-z":[0,0,-1]},MP={polygon_center:0,edge:1,vertex:2},MD=(e,t)=>(i,r)=>t&&0!==i&&0!==e?e*r/100:0,MI=(e,t)=>{let i=Math.abs(t),r=-1*i;return(e- -1)*(i-r)/2+r},MO=new ix,MR=new ix,ML=new ix,MB=new ix;function Mz(e,t){let i=ML.fromArray(e),r=MB.fromArray(t);MR.copy(r).sub(i);let s=MR.length();return MR.normalize().multiplyScalar(.5*s),MO.copy(i).add(MR).toArray()}var MF=new rw,MN=new ix,MU=new ix,Mk=new ix,MV=e=>.5*(1-Math.cos(e*Math.PI)),Mj=class{constructor(){this.perlin=Array(4096)}noise(e,t=0,i=0){if(null==this.perlin){this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),i<0&&(i=-i);let r=Math.floor(e),s=Math.floor(t),a=Math.floor(i),o=e-r,l=t-s,h=i-a,c,d,u=0,p=.5,f,m,g;for(let e=0;e<4;e++){let e=r+(s<<4)+(a<<8);c=MV(o),d=MV(l),f=this.perlin[4095&e],f+=c*(this.perlin[e+1&4095]-f),m=this.perlin[e+16&4095],m+=c*(this.perlin[e+16+1&4095]-m),f+=d*(m-f),e+=256,m=this.perlin[4095&e],m+=c*(this.perlin[e+1&4095]-m),g=this.perlin[e+16&4095],g+=c*(this.perlin[e+16+1&4095]-g),m+=d*(g-m),f+=MV(h)*(m-f),u+=f*p,p*=.5,r<<=1,s<<=1,l*=2,a<<=1,h*=2,(o*=2)>=1&&(r++,o--),l>=1&&(s++,l--),h>=1&&(a++,h--)}return u}noiseSeed(e){let t,i;let r={setSeed(e){i=t=(e??4294967296*Math.random())>>>0},getSeed:()=>t,rand:()=>(i=(1664525*i+1013904223)%4294967296)/4294967296};r.setSeed(e),this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=r.rand()}},MG=new ix,MH=new iQ,MW=new iY;function Mq(e){let t=!1;return e.scene.objects.traverse((e,i)=>{"Mesh"===i.type&&("TextGeometry"===i.geometry.type||"InputGeometry"===i.geometry.type)&&(t=!0)}),t}var MX,MY,MQ,MZ,MK,MJ=class extends MS{constructor(e,t,i){super(e,t,i),this.data=t}get textGeometry(){return this.geometry}get charWidths(){return this.textGeometry.charWidths}get charCoords(){return this.textGeometry.charCoords}get wrappedText(){return this.textGeometry.wrappedText}get font(){return this.textGeometry.font}get initialOffsetY(){let e=this.dataPatched;return this.font?.getLineInitialOffsetY(this.lineHeight,this.wrappedText.length,e.geometry.height,this.fontScale,e.geometry.verticalAlign)??0}get fontScale(){let e=this.dataPatched;return this.font?e.geometry.fontSize/this.font.unitsPerEm:1}get AD(){return Math.abs(this.ascender-this.descender)}get ascender(){return(this.font?.ascender??1)*this.fontScale}get descender(){return(this.font?.descender??1)*this.fontScale}get lineHeight(){let e=this.dataPatched;return e.geometry.fontSize*e.geometry.lineHeight}raycast(e,t){let{matrixWorld:i}=this;if(!(isNaN(e.ray.origin.x)||0===this.scale.x||0===this.scale.y||0===this.scale.z)&&(MH.copy(i).invert(),MW.copy(e.ray).applyMatrix4(MH),MW.intersectBox(this.singleBBox,MG))){let r=MG.applyMatrix4(i),s=e.ray.origin.distanceTo(r);t.push({distance:s,point:r.clone(),object:this})}}},M$=new ix,M0=new ix;w2.then(e=>{MQ=[(MY=e).get_face_center,MY.get_edge_midpoint,MY.get_vertex_position],MZ=[MY.get_face_normal,MY.get_edge_normal,MY.get_vertex_normal],MK=[MY.face_count,MY.edge_count,MY.vertex_count]});var M1=new iQ,M2=new iQ,M3=new ix,M4=new ix,M5=new ix,M6=new ix,M8=new ix,M9=new ix,M7=new Mj,Ee=class extends xx(rc){constructor(e,t){super(),this.parameters=t,this.objectForSample=void 0,this._pendingMediaLoad=!1,this.object=e}resetOnMove(){this.removeFromParent(),this.parent=null}expandClones(e){if(null===this.parent)this.updateState(this.parameters,e);else for(let e of this.children)e instanceof xS&&e.expand()}invalidateTransform(e){this.matrixWorldNeedsUpdate=!0,this.traverse(t=>{t instanceof xS&&t.object===e&&(t.matrixWorldNeedsUpdate=!0)})}onObjUpdateMatrix(){"toObject"!==this.parameters.type&&(this.matrixWorldNeedsUpdate=!0)}update(){switch(this._updateCount(),this.parameters.type){case"radial":this._updateRadial(this.parameters);break;case"linear":this._updateLinear(this.parameters);break;case"grid":this._updateGrid(this.parameters);break;case"toObject":this._updateToObject(this.parameters)}for(let e of this.children)e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD())}_updateCount(e){let t;if(t=void 0!==e?e:"grid"===this.parameters.type?Math.round(this.parameters.grid.count[0])*Math.round(this.parameters.grid.count[1])*Math.round(this.parameters.grid.count[2]):this.parameters.count,"toObject"!==this.parameters.type||this.parameters.toObject.object||(t=0),"toObject"===this.parameters.type&&this.objectForSample){for(let e=0,t=this.children.length;e<t;++e)this.remove(this.children[0]);let e=this.children;if(e.length===t)return;if(e.length<t)for(let i=0,r=t-e.length;i<r;++i){let e=new xS(this.object);e.expand(),this.add(e)}else for(let i=0,r=e.length-t;i<r;++i)this.remove(e[i])}else{if(this.children.length===t)return;if(this.children.length<t)for(let e=0,i=t-this.children.length;e<i;++e){let e=new xS(this.object);e.expand(),this.add(e)}else for(let e=0,i=this.children.length-t;e<i;++e)this.remove(this.children[0])}}_updateRadial(e){let t=e.radial,i=t.start*tZ.DEG2RAD,r=i-t.end*tZ.DEG2RAD,s=new i5(t.rotation[0],t.rotation[1],t.rotation[2]),a;switch(t.axis){case"z":a=new ix(0,0,1);break;case"y":a=new ix(0,1,0);break;default:a=new ix(1,0,0)}let o=e.randomnessObject??gp.defaultData([1,1,1]).randomnessObject,l="perlin"===o.noiseType;M7.noiseSeed(o.seed);let h=xc((0,xi.default)(o.seed)),c=MD(o.strength,this.parameters.randomness);for(let[d,u]of this.children.entries()){let p=o.freqScale/10*d+o.movement,f=l?M7.noise(p):h(p,p),m=d+1;
5685u.scale.x=t.scale[0]+c(m,MI(f,o.scale[0]))||1e-4,u.scale.y=t.scale[1]+c(m,MI(f,o.scale[1]))||1e-4,u.scale.z=t.scale[2]+c(m,MI(f,o.scale[2]))||1e-4,u.position.setScalar(0);let g=r/e.count*d-i;switch(t.axis){case"x":u.rotation.set(0,g,0);break;case"y":u.rotation.set(0,0,g);break;case"z":u.rotation.set(g,0,0)}u.translateOnAxis(a,t.radius),u.position.x+=t.position[0]+c(m,MI(f,o.position[0])),u.position.y+=t.position[1]+c(m,MI(f,o.position[1])),u.position.z+=t.position[2]+c(m,MI(f,o.position[2]));let v=c(m,MI(f,o.rotation[0])),y=c(m,MI(f,o.rotation[1])),x=c(m,MI(f,o.rotation[2]));!0===t.alignment?(u.rotation.x+=s.x+v,u.rotation.y+=s.y+y,u.rotation.z+=s.z+x):u.rotation.set(s.x+v,s.y+y,s.z+x)}}_updateLinear(e){if("linear"!==e.type)throw Error();let t=e.linear,i=new i5(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gp.defaultData([1,1,1]).randomnessObject,s="perlin"===r.noiseType;M7.noiseSeed(r.seed);let a=xc((0,xi.default)(r.seed)),o=MD(r.strength,this.parameters.randomness);for(let[e,l]of this.children.entries()){let h=r.freqScale/10*e+r.movement,c=s?M7.noise(h):a(h,h),d=e+1,u=o(d,MI(c,r.rotation[0])),p=o(d,MI(c,r.rotation[1])),f=o(d,MI(c,r.rotation[2]));l.scale.x=1+(t.scale[0]-1)*e+o(d,MI(c,r.scale[0]))||1e-4,l.scale.y=1+(t.scale[1]-1)*e+o(d,MI(c,r.scale[1]))||1e-4,l.scale.z=1+(t.scale[2]-1)*e+o(d,MI(c,r.scale[2]))||1e-4,l.rotation.x=i.x*e+u,l.rotation.y=i.y*e+p,l.rotation.z=i.z*e+f,l.position.x=t.position[0]*e+o(d,MI(c,r.position[0])),l.position.y=t.position[1]*e+o(d,MI(c,r.position[1])),l.position.z=t.position[2]*e+o(d,MI(c,r.position[2]))}}_updateGrid(e){let t=0,i=e.grid,r=e.randomnessObject??gp.defaultData([1,1,1]).randomnessObject,s=MD(r.strength,this.parameters.randomness),a="perlin"===r.noiseType;M7.noiseSeed(r.seed);let o=function(e=Math.random){let t=xd(e),i=new Float64Array(t).map(e=>xh[e%12*3]),r=new Float64Array(t).map(e=>xh[e%12*3+1]),s=new Float64Array(t).map(e=>xh[e%12*3+2]);return function(e,a,o){let l,h,c,d,u=(e+a+o)*xa,p=xo(e+u),f=xo(a+u),m=xo(o+u),g=(p+f+m)*xn,v=e-(p-g),y=a-(f-g),x=o-(m-g),b,w,S,_,A,M;v>=y?y>=x?(b=1,w=0,S=0,_=1,A=1,M=0):(v>=x?(b=1,w=0,S=0):(b=0,w=0,S=1),_=1,A=0,M=1):y<x?(b=0,w=0,S=1,_=0,A=1,M=1):v<x?(b=0,w=1,S=0,_=0,A=1,M=1):(b=0,w=1,S=0,_=1,A=1,M=0);let E=v-b+xn,C=y-w+xn,T=x-S+xn,P=v-_+2*xn,D=y-A+2*xn,I=x-M+2*xn,O=v-1+3*xn,R=y-1+3*xn,L=x-1+3*xn,B=255&p,z=255&f,F=255&m,N=.6-v*v-y*y-x*x;if(N<0)l=0;else{let e=B+t[z+t[F]];N*=N,l=N*N*(i[e]*v+r[e]*y+s[e]*x)}let U=.6-E*E-C*C-T*T;if(U<0)h=0;else{let e=B+b+t[z+w+t[F+S]];U*=U,h=U*U*(i[e]*E+r[e]*C+s[e]*T)}let k=.6-P*P-D*D-I*I;if(k<0)c=0;else{let e=B+_+t[z+A+t[F+M]];k*=k,c=k*k*(i[e]*P+r[e]*D+s[e]*I)}let V=.6-O*O-R*R-L*L;if(V<0)d=0;else{let e=B+1+t[z+1+t[F+1]];V*=V,d=V*V*(i[e]*O+r[e]*R+s[e]*L)}return 32*(l+h+c+d)}}((0,xi.default)(r.seed));if(!0===i.useCenter){let e={x:i.count[0]%2==0?2:1,y:i.count[1]%2==0?2:1,z:i.count[2]%2==0?2:1},l=new ix(i.size[0]*(i.count[0]-e.x)*.5,i.size[1]*(i.count[1]-e.y)*.5,i.size[2]*(i.count[2]-e.z)*.5);for(let e=0;e<i.count[0];e++)for(let h=0;h<i.count[1];h++)for(let c=0;c<i.count[2];c++){let d=[r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(h+1)+r.movement,r.freqScale/10*(c+1)+r.movement],u=a?M7.noise(...d):o(...d),p=this.children[t++];p.scale.x=1+s(t,MI(u,r.scale[0]))||1e-4,p.scale.y=1+s(t,MI(u,r.scale[1]))||1e-4,p.scale.z=1+s(t,MI(u,r.scale[2]))||1e-4;let f=s(t,MI(u,r.rotation[0])),m=s(t,MI(u,r.rotation[1])),g=s(t,MI(u,r.rotation[2]));p.rotation.set(f,m,g),p.position.x=i.size[0]*e-l.x+s(t,MI(u,r.position[0])),p.position.y=i.size[1]*h-l.y+s(t,MI(u,r.position[1])),p.position.z=i.size[2]*c-l.z+s(t,MI(u,r.position[2]))}}else for(let e=0;e<i.count[0];e++)for(let l=0;l<i.count[1];l++)for(let h=0;h<i.count[2];h++){let c=[r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(l+1)+r.movement,r.freqScale/10*(h+1)+r.movement],d=a?M7.noise(...c):o(...c),u=this.children[t++];
5685u.scale.x=1+s(t,MI(d,r.scale[0]))||1e-4,u.scale.y=1+s(t,MI(d,r.scale[1]))||1e-4,u.scale.z=1+s(t,MI(d,r.scale[2]))||1e-4;let p=s(t,MI(d,r.rotation[0])),f=s(t,MI(d,r.rotation[1])),m=s(t,MI(d,r.rotation[2]));u.rotation.set(p,f,m),u.position.x=i.size[0]*e+s(t,MI(d,r.position[0])),u.position.y=-i.size[1]*l+s(t,MI(d,r.position[1])),u.position.z=-i.size[2]*h+s(t,MI(d,r.position[2]))}}_updateToObject(e){if("toObject"!==e.type)throw Error();let{toObject:t}=e,i=new i5(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gp.defaultData([1,1,1]).randomnessObject,s="perlin"===r.noiseType;M7.noiseSeed(r.seed);let a=xc((0,xi.default)(r.seed)),o=MD(r.strength,this.parameters.randomness);if(!t.object){for(let[,e]of this.children.entries())e.position.set(0,0,0),e.scale.setScalar(1),e.rotation.set(0,0,0);this.objectForSample=void 0;return}if(!this.objectForSample)return;if(this.objectForSample instanceof MJ){if(this.objectForSample.font?.isLoaded&&void 0!==this.objectForSample.geometry.attributes.position)this._pendingMediaLoad=!1;else{this._pendingMediaLoad=!0;return}}if(void 0===this.objectForSample.geometry&&this.objectForSample.isAncestorOf(this.object.uuid)){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) seem to be a child/descendant of the object it's being cloned to. Please re-parent it so that they are siblings instead.`);return}let l=this.getSubdivData(),h=[],c=e=>{let t=e.length;return[e.map(e=>e[0]).reduce((e,t)=>e+t,0)/t,e.map(e=>e[1]).reduce((e,t)=>e+t,0)/t,e.map(e=>e[2]).reduce((e,t)=>e+t,0)/t]},d=e=>Math.round(1e6*e)/1e6;l.forEach(e=>{let t=l.filter(t=>d(e.pos[0])===d(t.pos[0])&&d(e.pos[1])===d(t.pos[1])&&d(e.pos[2])===d(t.pos[2]));t.length>1?h.push({pos:e.pos,norm:c(t.map(e=>e.norm))}):h.push(e)});let u=function(e){let t=[],i={};for(var r=0,s=e.length;r<s;r++){var a=JSON.stringify(e[r].pos.map(e=>Math.round(1e4*e)/1e4));i[a]||(t.push(e[r]),i[a]=!0)}return t}(h);if(u.length>0){let e=Math.round(u.length*t.count/100);this._updateCount(e)}else{let e=this.objectForSample.geometry.getAttribute("position");if(!e||isNaN(e.count)||0===e.count){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) cannot be cloned on the surface of "${this.objectForSample.name}" (${this.objectForSample.uuid}) because the latter does not have a valid geometry.`);return}}this.objectForSample.updateMatrixWorld();let p=new xf(this.objectForSample).build(),f=MT[t.axis],m=this.children;for(let[e,l]of(p.setRandomGenerator((0,xi.default)(this.object.uuid+t.seed)),m.entries())){let h=r.freqScale/10*e+r.movement,c=s?M7.noise(h):a(h,h),d=e+1,m=o(d,MI(c,r.rotation[0])),g=o(d,MI(c,r.rotation[1])),v=o(d,MI(c,r.rotation[2]));"random"===t.spreadType?p.sample(M5,M6):(u.length&&(M5.fromArray(u[e].pos),M6.fromArray(u[e].norm)),this.objectForSample instanceof MC&&M5.applyMatrix4(M1.copy(this.objectForSample.matrixWorld).invert())),M5.applyMatrix4(this.object.hiddenMatrix.clone().invert()),l.position.copy(M5),M3.fromArray(f);let y="normal"===t.align?M6:this.object.getWorldDirection(M9),x=M4.fromArray(t.position);M4.x+=o(d,MI(c,r.position[0])),M4.y+=o(d,MI(c,r.position[1])),M4.z+=o(d,MI(c,r.position[2]));let b=Math.acos(y.dot(M3)),w=M8.crossVectors(M3,y).normalize(),S=M2.makeRotationAxis(w,b),_=y.clone().cross(this.object.up).normalize(),A=_.clone().cross(y).normalize(),M=new iQ().makeBasis(_,y,A),E=new ix(M3.y,M3.z,M3.x).normalize(),C=E.clone().cross(M3).normalize(),T=new iQ().makeBasis(E,M3,C).invert(),P=new iQ().multiplyMatrices(M,T);l.rotation.setFromRotationMatrix(P),x.applyMatrix4(S),l.position.add(x),l.rotation.x=l.rotation.x+i.x+m,l.rotation.y=l.rotation.y+i.y+g,l.rotation.z=l.rotation.z+i.z+v,l.scale.setScalar(1),l.scale.x=l.scale.x+t.scale[0]+o(d,MI(c,r.scale[0]))||1e-4,l.scale.y=l.scale.y+t.scale[1]+o(d,MI(c,r.scale[1]))||1e-4,l.scale.z=l.scale.z+t.scale[2]+o(d,MI(c,r.scale[2]))||1e-4,l.scale.multiply(this.object.scale),l.hiddenMatrix=this.object.hiddenMatrix}}getSubdivData(){if(!this.objectForSample)return[];let e=this.parameters.toObject.spreadType;if("random"===e)return[];if(!(this.objectForSample instanceof MC))return(this.objectForSample.geometry.index?function(e){let t=[];for(let i=0;i<=e.index.count;i++)if(MN.fromArray(e.index.array,3*i),MF.setFromAttributeAndIndices(e.attributes.position,MN.x,MN.y,MN.z),MF.getNormal(MU),MF.getMidpoint(Mk),!(isNaN(Mk.x)||isNaN(Mk.y)||isNaN(Mk.z))){let{a:e,b:i,c:r}=MF,s=e.toArray(),a=i.toArray(),o=r.toArray(),l=e.distanceTo(i),h=i.distanceTo(r),c=r.distanceTo(e),d=Mz(s,a),u=Mz(a,o),p=Mz(o,s),f=[l,h,c],m=Math.max(...f),g=f.filter(e=>Math.round(e)===Math.round(m)).length>1,v=[],y=MF.getMidpoint(Mk).toArray();m!==l||g||(v=[u,p,p],y=d),m!==h||g||(v=[d,p,p],y=u),m!==c||g||(v=[d,u,u],y=p),g&&(v=[d,u,p]),t.push({vertices:[s,a,o],faceCenters:v,midpoint:y,norm:
5685MF.getNormal(MU).toArray()})}return t}(this.objectForSample.geometry):function(e){let t=[],{position:i}=e.attributes;for(let e=0;e<i.count;e++){MF.setFromAttributeAndIndices(i,3*e,3*e+1,3*e+2),MF.getNormal(MU),MF.getMidpoint(Mk);let r=MF.a.toArray(),s=MF.b.toArray(),a=MF.c.toArray();t.push({vertices:[r,s,a],faceCenters:[Mz(r,s),Mz(s,a),Mz(a,r)],midpoint:Mk.toArray(),norm:MU.toArray()})}return t}(this.objectForSample.geometry)).map((t,i)=>"polygon_center"===e?{pos:t.midpoint,norm:t.norm}:"vertex"===e?[{pos:t.vertices[0],norm:t.norm},{pos:t.vertices[1],norm:t.norm},{pos:t.vertices[2],norm:t.norm}]:"edge"===e?[{pos:t.faceCenters[0],norm:t.norm},{pos:t.faceCenters[1],norm:t.norm},{pos:t.faceCenters[2],norm:t.norm}]:[]).flat();{let t=this.objectForSample,i=MP[e],r=MK[i],s=MQ[i],a=MZ[i],o=[],l=r(t.subdivPointerNew);for(let e=0;e<=l-1;e++){let i=s(t.subdivPointerNew,e),r=a(t.subdivPointerNew,e);M$.fromArray(i).applyMatrix4(t.matrixWorld),M0.fromArray(r),o.push({pos:M$.toArray(),norm:M0.toArray()})}return o}}updateState(e,t){if(this.parameters=ud(e),"toObject"!==this.parameters.type)(null===this.parent||this.parent!==this.object)&&(this.removeFromParent(),this.object.parent?.add(this),this.matrix=this.object.matrix,this.hiddenMatrix=this.object.hiddenMatrix,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1);else if(null===this.parent||this.parent.uuid!==this.parameters.toObject.object){this.removeFromParent();let e=t.find(this.parameters.toObject.object);e instanceof SD?this.objectForSample=e:this.objectForSample=void 0,this.matrix=new iQ,this.hiddenMatrix=new iQ,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1,e&&e.add(this)}this.update()}get pendingMediaLoad(){return this._pendingMediaLoad}},Et=e=>{var t;return(t=class extends e{}).geometryHelper=new r0(30,30,30),t},Ei=new iY,Er=new ik,Es=new iQ,Ea=(e,t,i,r,s=!1,a=e)=>{let o=a.matrixWorld;if(null===t.boundingSphere&&t.computeBoundingSphere(),Er.copy(t.boundingSphere),Er.applyMatrix4(o),!1===i.ray.intersectsSphere(Er)||(Es.copy(o).invert(),Ei.copy(i.ray).applyMatrix4(Es),null!==t.boundingBox&&!1===Ei.intersectsBox(t.boundingBox)))return;let l,h=t.index,c=t.attributes.position,d=t.drawRange,u;if(!1===s){let t=Math.max(0,d.start),s=Math.min(h.count,d.start+d.count);for(u=t;u<s;u+=3)if(l=function(e,t,i,r,s,a,o){let l=new ix,h=new ix,c=new ix,d=new ix,u=new ix;if(l.fromBufferAttribute(r,s),h.fromBufferAttribute(r,a),c.fromBufferAttribute(r,o),null===i.intersectTriangle(l,h,c,!1,d))return null;u.copy(d),u.applyMatrix4(e.matrixWorld);let p=t.ray.origin.distanceTo(u);return p<t.near||p>t.far?null:{faceIndex:1,distance:p,point:u.clone(),object:e}}(e,i,Ei,c,h.getX(u),h.getX(u+1),h.getX(u+2))){l.faceIndex=Math.floor(u/3),r.push(l);return}}else{let s=t.attributes.position,o=new ix,l=new ix,h=new ix,c=new ix,u=1/((a.scale.x+a.scale.y+a.scale.z)/3),p=u*u,f=Math.max(0,d.start),m=Math.min(s.count,d.start+d.count);for(let t=f,d=m-1;t<d;t+=2){if(o.fromBufferAttribute(s,t),l.fromBufferAttribute(s,t+1),Ei.distanceSqToSegment(o,l,c,h)>p)continue;c.applyMatrix4(a.matrixWorld);let d=i.ray.origin.distanceTo(c);d<i.near||d>i.far||r.push({distance:d,point:h.clone().applyMatrix4(a.matrixWorld),object:e})}}},En=new ix,Eo=new r9,El=class extends nX{constructor(e){let t=new rN,i=new nN({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={},o=new is(15711266),l=new is(15711266),h=new is(2857471);function c(e,t,i){d(e,i),d(t,i)}function d(e,t){r.push(0,0,0),s.push(t.r,t.g,t.b),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}c("n1","n2",o),c("n2","n4",o),c("n4","n3",o),c("n3","n1",o),c("f1","f2",o),c("f2","f4",o),c("f4","f3",o),c("f3","f1",o),c("n1","f1",o),c("n2","f2",o),c("n3","f3",o),c("n4","f4",o),c("p","n1",l),c("p","n2",l),c("p","n3",l),c("p","n4",l),c("u1","u2",h),c("u2","u3",h),c("u3","u1",h),t.setAttribute("position",new rD(r,3)),t.setAttribute("color",new rD(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update()}update(){let e=this.geometry,t=this.pointMap;Eo.projectionMatrixInverse.elements=[.5112609807824982,-0,-0,-0,-0,.41421356237309503,-0,-0,-0,-0,-0,-.099999,-0,-0,-1.0000000000000002,.100001],Eh("n1",t,e,Eo,-1,-1,.8),Eh("n2",t,e,Eo,1,-1,.8),Eh("n3",t,e,Eo,-1,1,.8),Eh("n4",t,e,Eo,1,1,.8),Eh("f1",t,e,
5685Eo,-1,-1,.8),Eh("f2",t,e,Eo,1,-1,.8),Eh("f3",t,e,Eo,-1,1,.8),Eh("f4",t,e,Eo,1,1,.8),Eh("u1",t,e,Eo,.35,1.1,.8),Eh("u2",t,e,Eo,-.35,1.1,.8),Eh("u3",t,e,Eo,0,1.55,.8),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function Eh(e,t,i,r,s,a,o){En.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],En.x,En.y,En.z)}}var Ec=class extends Et(El){constructor(e){super(e),this.object=e,this.object=e,this.name=`CombinedCameraHelper: ${e.uuid}`}updateMatrixWorld(e){super.updateMatrixWorld(e),this.updateTarget()}updateTarget(){let e=this.object.getTarget();this.updateWorldMatrix(!0,!1),this.worldToLocal(e)}raycast(e,t){Ea(this.object,this.geometry,e,t,!0)}};(TW||(TW={})).is=e=>"objectHelper"in e;var Ed=(e,t)=>class extends xV(e){constructor(){super(...arguments),this.objectHelper=new t(this),this.gizmos={}}get geometryHelper(){return t.geometryHelper}raycast(e,t){this.objectHelper.raycast(e,t)}showGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lJ&&(t.visible=!0)}}updateEntityBoxSize(e,t){this.objectHelper.visible&&this.geometryHelper instanceof r0?(e.setScalar(0),t.set(this.geometryHelper.parameters.width,this.geometryHelper.parameters.height,this.geometryHelper.parameters.height).multiplyScalar(.5)):super.updateEntityBoxSize(e,t)}hideGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lJ&&(t.visible=!1)}}},Eu=new ix,Ep=new ix,Ef=new iy,Em=new ix,Eg=new ix,Ev=new ix,Ey=class extends Ed(r9,Ec){constructor(e="",t={...ye.defaultData,name:""}){super(),this._cameraType="OrthographicCamera",this.targetOffset=gu.DefaultTargetOffset,this.isUpVectorFlipped=!1,this.angleOffsetFromUp=0,this.wasMovedByUser=!1,this.wasMovedBySwitchCameraAction=!1,this.super_Entity(e,t),this.previousProjectionMatrix=new iQ,this.matrixAutoUpdate=!0,this.width=window.innerWidth,this.height=window.innerHeight;let i=this.width,r=this.height;this.orthoCamera=new s_(-.5*i,.5*i,.5*r,-.5*r,-5e4,1e4),this.perspCamera=new r7(45,i/r,50,1e4),this.left=this.orthoCamera.left,this.right=this.orthoCamera.right,this.top=this.orthoCamera.top,this.bottom=this.orthoCamera.bottom,this.far=this.orthoCamera.far,this.view=this.orthoCamera.view,this.aspect=this.perspCamera.aspect,this.focus=this.perspCamera.focus,this.filmGauge=this.perspCamera.filmGauge,this.filmOffset=this.perspCamera.filmOffset,this.objectHelper.update()}get isPerspectiveCamera(){return"PerspectiveCamera"===this.cameraType}get isOrthographicCamera(){return!this.isPerspectiveCamera}get cameraType(){return this._cameraType}set fov(e){this.perspCamera.fov=e}get fov(){return this.perspCamera.fov}setNear(e,t){"PerspectiveCamera"===e?this.perspCamera.near=t:this.orthoCamera.near=t}setZoom(e,t){t>=0&&("PerspectiveCamera"===e?this.perspCamera.zoom=t:this.orthoCamera.zoom=t)}set cameraType(e){"PerspectiveCamera"===e?this.toPerspective():"OrthographicCamera"===e&&this.toOrthographic()}get near(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.near:this.orthoCamera.near}set near(e){"PerspectiveCamera"===this._cameraType?this.perspCamera.near=e:this.orthoCamera.near=e}get zoom(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.zoom:this.orthoCamera.zoom}set zoom(e){e>=0&&("PerspectiveCamera"===this._cameraType?this.perspCamera.zoom=e:this.orthoCamera.zoom=e)}lookAt(e,t,i){"number"==typeof e&&(e=new ix(e,t,i)),super.lookAt(e),this.getWorldPosition(Eu),this.targetOffset=Eu.distanceTo(e)}getTarget(e=new ix){return this.getWorldDirection(Ep),this.getWorldPosition(Eu),Ep.multiplyScalar(this.targetOffset),e.copy(Eu).add(Ep),e}getDistanceToTarget(){let e=this.getTarget();return this.getWorldPosition(Eu),Eu.distanceTo(e)}updateUp(){this.getWorldQuaternion(Ef),Em.set(0,0,1).applyQuaternion(Ef),Eg.copy(rc.DEFAULT_UP),this.isUpVectorFlipped&&Eg.negate(),Eg.applyQuaternion(Ef),Ev.copy(rc.DEFAULT_UP).projectOnPlane(Em),this.angleOffsetFromUp=Ev.angleTo(Eg),this.angleOffsetFromUp*=Ev.cross(Eg).dot(Em)>=0?1:-1}updateTransformState(e,t){let i=super.updateTransformState(e,t);return void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateUp(),i}getViewFrontToObject(e){let t=e.getWorldPosition(new ix),i=e.getWorldDirection(new ix).multiplyScalar(this.targetOffset);return{position:t.clone().add(i),target:t}}getViewToTarget(e){let t=this.getWorldDirection(new ix).multiplyScalar(this.targetOffset);return{position:e.clone().sub(t),target:e}}getViewToObject(e){let t=new ix;return e.getWorldPosition(t),this.getViewToTarget(t)}setViewplaneSize(e,t,i=!1){if(this.aspect=e/t,i){let i=e>t?this.aspect:1,r=e>t?1:this.aspect;this.left=-395*i,this.right=395*i,this.top=1/r*395,this.bottom=-(1/r*395)}else this.left=-(.5*e),this.right=.5*e,this.top=.5*t,this.bottom=-(.5*t);this.updateProjectionMatrix()}copyViewPlaneSize(e){this.aspect=e.aspect,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.updateProjectionMatrix()}toOrthographic(){this.orthoCamera.left=this.left,this.orthoCamera.right=this.right,this.orthoCamera.top=this.top,this.orthoCamera.bottom=this.bottom,this.orthoCamera.view=this.view,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this._cameraType="Orthogra
5685phicCamera",this.objectHelper&&this.objectHelper.update()}toPerspective(){this.perspCamera.aspect=this.aspect,this.perspCamera.fov=this.fov,this.perspCamera.view=this.view,this.perspCamera.far=this.far,this.perspCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspCamera.projectionMatrix,this.projectionMatrixInverse=this.perspCamera.projectionMatrixInverse,this._cameraType="PerspectiveCamera",this.objectHelper&&this.objectHelper.update()}setFocalLength(e){this.perspCamera.setFocalLength(e),this.toPerspective()}getFocalLength(){return this.perspCamera.getFocalLength()}getEffectiveFOV(){return this.perspCamera.getEffectiveFOV()}getFilmWidth(){return this.perspCamera.getFilmWidth()}getFilmHeight(){return this.perspCamera.getFilmHeight()}setViewOffset(e,t,i,r,s,a){"PerspectiveCamera"===this._cameraType?this.perspCamera.setViewOffset(e,t,i,r,s,a):this.orthoCamera.setViewOffset(e,t,i,r,s,a)}clearViewOffset(){"PerspectiveCamera"===this._cameraType?(this.perspCamera.clearViewOffset(),this.toPerspective()):(this.orthoCamera.clearViewOffset(),this.toOrthographic())}copyHistory(){this.previousProjectionMatrix&&this.previousProjectionMatrix.copy(this.projectionMatrix)}updateProjectionMatrix(){"PerspectiveCamera"===this._cameraType?this.toPerspective():"OrthographicCamera"===this._cameraType&&this.toOrthographic()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}copy(e,t){return super.copy(e,t),this.parent=e.parent,this.orthoCamera.copy(e.orthoCamera),this.perspCamera.copy(e.perspCamera),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.far=e.far,this.view=null===e.view?null:Object.assign({},e.view),this._cameraType=e._cameraType,this.aspect=e.aspect,this.fov=e.fov,this.focus=e.focus,this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this.targetOffset=e.targetOffset,this.updateProjectionMatrix(),this}toCameraState(e=[]){return uU({type:this.cameraType,far:this.far,orthographic:{near:this.orthoCamera.near,zoom:this.orthoCamera.zoom},perspective:{near:this.perspCamera.near,fov:this.perspCamera.fov,zoom:this.perspCamera.zoom},up:this.up.toArray(),targetOffset:this.targetOffset,isUpVectorFlipped:this.isUpVectorFlipped},e)}updateCameraSubtype(e,t){let i="perspective"===e?"PerspectiveCamera":"OrthographicCamera";void 0!==t.zoom&&this.setZoom(i,t.zoom),void 0!==t.near&&this.setNear(i,t.near),void 0!==t.fov&&"PerspectiveCamera"===i&&(this.fov=t.fov)}updateState(e,t){this.updateCameraState(e,t)}updateCameraState(e,t){this.updateState_Entity(e,t),void 0!==e.far&&(this.far=e.far),void 0!==e.orthographic&&this.updateCameraSubtype("orthographic",e.orthographic),void 0!==e.perspective&&this.updateCameraSubtype("perspective",e.perspective),void 0!==e.type&&(this.cameraType=e.type),void 0!==e.up&&this.up.fromArray(e.up),void 0!==e.targetOffset&&(this.targetOffset=e.targetOffset),void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateProjectionMatrix()}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&0===e.type&&this.updateCameraSubtype(e.path[0],e.props)}toState(e){return{...super.toState(e),...this.toCameraState(e),type:this.cameraType}}},Ex=new iQ,Eb=new iQ;function Ew(e){let t=!1;return e.scene.objects.traverse((e,i)=>{i.geometry?.type==="BooleanGeometry"&&(t=!0)}),t}var ES=class extends Mg{constructor(e,t,i){super(e,t),this.data=t,this.meshSetAddresses=[],this.needsTransformForDownstream=!1,this.geometry=new rN,this.onAfterRender=(e,t,i,r,s,a)=>{super.onAfterRender(e,t,i,r,s,a),this.recomputeBoolean()},this.geometry.userData.parameters={width:0,height:0,depth:0}}get booleanOp(){return this.data.geometry.operation}get phongAngle(){return this.data.geometry.phongAngle??45}get isLOD(){return this.recomputeBoolean(),!1}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&void 0!==e.props.operation&&(this.freeBooleanPointer(),this.resetBBoxNeedsUpdate())}freeBooleanPointer(){super.freeBooleanPointer(),this.geometry.dispose()}recomputeBoolean(e,t=!0){if(-1!==this.booleanMeshSetAddress&&!e)return;for(let i=0;i<this.children.length;i++){let r=this.children[i];r instanceof ES&&!0===r.dataPatched.visible&&r.recomputeBoolean(!0===e,t)}this.meshSetAddresses=[];for(let i=0;i<this.children.length;i++){let r=this.children[i];if(r instanceof SD&&!0===r.dataPatched.visible&&r.geometry.attributes.position?.count>0&&r.geometry.drawRange.count>0&&0!==r.booleanMeshSetAddress){Ex.multiplyMatrices(r.hiddenMatrix,r.matrix);try{if(-1===r.booleanMeshSetAddress){if((r.geometry.index??r.geometry.getAttribute("position")).count/3<15e5&&(r.booleanMeshSetAddress=Sp.getMeshSet(r.geometry,!0===e,t)),-1===r.booleanMeshSetAddress)return;Sp.transformMeshSet(r.booleanMeshSetAddress,Ex),r.booleanMatrixInvOld.copy(Ex).invert(),r.booleanWasTransformed=!1}else r instanceof ES&&!0===r.needsTransformForDownstream?(Sp.transformMeshSet(r.booleanMeshSetAddress,Ex),r.needsTransformForDownstream=!1):!0===r.booleanWasTransformed&&(Sp.transformMeshSet(r.booleanMeshSetAddress,Eb.multiplyMatrices(Ex,r.booleanMatrixInvOld)),r.booleanMatrixInvOld.copy(Ex).invert(),r.booleanWasTransformed=!1)}catch(e){console.error(e),r.booleanMeshSetAddress=0,r.geometry.userData.booleanOperationDidFail=!0;continue}!1===Sp.hasOpenEdges(r.booleanMeshSetAddress)||i===this.children.length-1&&2===this.booleanOp?(this.meshSetAddresses.push(r.booleanMeshSetAddress),r.geometry.userData.booleanOperationDidFail=!1):r.geometry.userData.booleanOperationDidFail="openEdges"}}if(0===this.meshSetAddresses.length){this.geometry.setAttribute("position",new rD([],0)),this.geometry.setDrawRange(0,0);return}if(!0===e)return Sp.calcBooleanTopological(this.meshSetAddresses,this.booleanOp);let i=this.geometry;i.dispose(),this.geometry=new rN,this.geometry.userData=i.userData,this.geometry.boundingSphere=i.boundingSphere;try{this.booleanMeshSetAddress=Sp.calcBoolean(this.meshSetAddresses,this.booleanOp,this.geometry,this.phongAngle)}catch(e){this.booleanMeshSetAddress=0,this.geometry.userData.booleanOperationDidFail=!0,console.error(e)}
vendor: 16,384 bytes, lines 5685-5804
5685this.booleanMatrixInvOld.copy(this.matrix).invert(),this.needsTransformForDownstream=!0,M_(this),MA(this)}dispose(){super.dispose(),this.geometry.dispose()}};(Tq||(Tq={})).is=function(e){return wZ.is(e)&&e instanceof le};var E_=(e,t)=>class extends Ed(e,t){updateState_Light(e,t){this.updateState_Entity(e,t),void 0!==e.color&&(this.color=t.shared.color(e.color)),void 0!==e.intensity&&(this.intensity=e.intensity),void 0!==e.depth&&(this.shadow.camera.far=e.depth,this.shadow.needsUpdate=!0),void 0!==e.shadows&&(this.castShadow=e.shadows)}},EA=e=>e instanceof SD,EM=e=>null!==e&&e instanceof ES,EE=e=>e instanceof Ey,EC=e=>Tq.is(e),ET=e=>TW.is(e),EP=new ix(1,1,1),ED=new ix,EI=new ix,EO=new iy,ER=class extends Et(l$){constructor(e,t=15){super(t),this.object=e,this.dummy=new np,this.object.updateMatrixWorld(),this.name=`EmptyObjectHelper: ${e.uuid}`,this.matrix=this.dummy.matrixWorld,this.matrixAutoUpdate=!1,this.object.isBone&&(this.visible=!1)}raycast(e,t){Ea(this.object,ER.geometryHelper,e,t,!1,this.dummy)}update(){}updateMatrix(){}updateMatrixWorld(e){this.object.matrixWorld.decompose(ED,EO,EI),this.matrix.compose(ED,EO,EP),super.updateMatrixWorld(e)}updateWorldMatrix(e,t){}},EL=class extends Ed(np,ER){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t),"buffer"in e&&1===Object.keys(e).length&&t.scene.reloadSplats()}},EB=class extends Ed(np,ER){constructor(e,t,i){super(),this.super_Entity(e,t),this.context=i,this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t)}},Ez="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",EF=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5686uniform mediump sampler2D inputBuffer; 5687#else 5688uniform lowp sampler2D inputBuffer; 5689#endif 5690uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;uniform vec4 kernel64[32];varying vec2 vUv;void main(){ 5691#ifdef FOREGROUND 5692vec2 CoCNearFar=texture2D(cocBuffer,vUv).rg;float CoC=CoCNearFar.r*scale; 5693#else 5694float CoC=texture2D(cocBuffer,vUv).g*scale; 5695#endif 5696if(CoC==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{ 5697#ifdef FOREGROUND 5698vec2 step=texelSize*max(CoC,CoCNearFar.g*scale); 5699#else 5700vec2 step=texelSize*CoC; 5701#endif 5702vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0;}}`,EN=class extends r8{constructor(e=!1,t=!1){super({name:"BokehMaterial",defines:{PASS:e?"2":"1"},uniforms:{kernel64:new lI(null),kernel16:new lI(null),inputBuffer:new lI(null),cocBuffer:new lI(null),texelSize:new lI(new tK),scale:new lI(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EF,vertexShader:Ez}),this.toneMapped=!1,t&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.uniforms.scale.value=e}setScale(e){this.uniforms.scale.value=e}generateKernel(){let e=new Float32Array(128),t=new Float32Array(32),i=0,r=0;for(let s=0;s<80;++s){let a=2.39996323*s,o=Math.sqrt(s)/Math.sqrt(80),l=o*Math.cos(a),h=o*Math.sin(a);s%5==0?(t[r++]=l,t[r++]=h):(e[i++]=l,e[i++]=h)}let s=[],a=[];for(let t=0;t<128;)s.push(new iu(e[t++],e[t++],e[t++],e[t++]));for(let e=0;e<32;)a.push(new iu(t[e++],t[e++],t[e++],t[e++]));this.uniforms.kernel64.value=s,this.uniforms.kernel16.value=a}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}};function EU(e,t,i){return Math.min(Math.max((e+t)/(t-i),0),1)}var Ek=`#include <common> 5703#include <packing> 5704#ifdef GL_FRAGMENT_PRECISION_HIGH 5705uniform highp sampler2D depthBuffer; 5706#else 5707uniform mediump sampler2D depthBuffer; 5708#endif 5709uniform float focusDistance;uniform float focusRange;uniform float cameraNear;uniform float cameraFar;varying vec2 vUv;float readDepth(const in vec2 uv){ 5710#if DEPTH_PACKING == 3201 5711return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5712#else 5713return texture2D(depthBuffer,uv).r; 5714#endif 5715}void main(){float depth=readDepth(vUv); 5716#ifdef PERSPECTIVE_CAMERA 5717float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); 5718#else 5719float linearDepth=depth; 5720#endif 5721float signedDistance=linearDepth-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,EV=class extends r8{constructor(e){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new lI(null),focusDistance:new lI(0),focusRange:new lI(0),cameraNear:new lI(.3),cameraFar:new lI(1e3)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ek,vertexShader:Ez}),this.toneMapped=!1,this.uniforms.focalLength=this.uniforms.focusRange,this.adoptCameraSettings(e)}get near(){return this.uniforms.cameraNear.value}get far(){return this.uniforms.cameraFar.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){var e;return-(this.focusDistance*((e=this.near)-this.far)-e)}set worldFocusDistance(e){this.focusDistance=EU(-e,this.near,this.far)}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){var e;return-(this.focusRange*((e=this.near)-this.far)-e)}set worldFocusRange(e){this.focusRange=EU(-e,this.near,this.far)}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r7?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},Ej=`#include <common> 5722#include <dithering_pars_fragment> 5723#ifdef FRAMEBUFFER_PRECISION_HIGH 5724uniform mediump sampler2D inputBuffer; 5725#else 5726uniform lowp sampler2D inputBuffer; 5727#endif 5728varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25; 5729#include <encodings_fragment> 5730#include <dithering_fragment> 5731}`,EG=class extends r8{constructor(e=new tK){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new lI(null),texelSize:new lI(new tK),halfTexelSize:new lI(new tK),kernel:new lI(0),scale:new lI(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ej,vertexShader:"uniform vec2 texelSize;uniform vec2 halfTexelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize*vec2(kernel)+halfTexelSize)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1,this.setTexelSize(e.x,e.y)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.halfTexelSize.value.copy(i.texelSize.value).multiplyScalar(.5)}},EH=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5732uniform mediump sampler2D inputBuffer; 5733#else 5734uniform lowp sampler2D inputBuffer; 5735#endif 5736uniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel; 5737#include <encodings_fragment> 5738}`,EW=class extends r8{constructor(){super({name:"CopyMaterial",uniforms:{inputBuffer:new lI(null),opacity:new lI(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EH,vertexShader:Ez}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},Eq=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5739#if THREE_REVISION < 143 5740#define luminance(v) linearToRelativeLuminance(v) 5741#endif 5742#if EDGE_DETECTION_MODE != 0 5743varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5744#endif 5745#if EDGE_DETECTION_MODE == 1 5746#include <common> 5747#endif 5748#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1 5749#ifdef GL_FRAGMENT_PRECISION_HIGH 5750uniform highp sampler2D depthBuffer; 5751#else 5752uniform mediump sampler2D depthBuffer; 5753#endif 5754float readDepth(const in vec2 uv){ 5755#if DEPTH_PACKING == 3201 5756return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5757#else 5758return texture2D(depthBuffer,uv).r; 5759#endif 5760}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);} 5761#elif PREDICATION_MODE == 2 5762uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);} 5763#endif 5764#if PREDICATION_MODE != 0 5765vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);} 5766#endif 5767#if EDGE_DETECTION_MODE != 0 5768uniform sampler2D inputBuffer; 5769#endif 5770void main(){ 5771#if EDGE_DETECTION_MODE == 0 5772const vec2 threshold=vec2(DEPTH_THRESHOLD); 5773#elif PREDICATION_MODE != 0 5774vec2 threshold=calculatePredicatedThreshold(); 5775#else 5776const vec2 threshold=vec2(EDGE_THRESHOLD); 5777#endif 5778#if EDGE_DETECTION_MODE == 0 5779vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0); 5780#elif EDGE_DETECTION_MODE == 1 5781float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5782#elif EDGE_DETECTION_MODE == 2 5783vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5784#endif 5785}`,EX=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5786#if EDGE_DETECTION_MODE != 0 5787varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5788#endif 5789void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0); 5790#if EDGE_DETECTION_MODE != 0 5791vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0); 5792#endif 5793gl_Position=vec4(position.xy,1.0,1.0);}`,EY=class extends r8{constructor(e=new tK,t=2){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new lI(null),depthBuffer:new lI(null),predicationBuffer:new lI(null),texelSize:new lI(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Eq,vertexShader:EX}),this.toneMapped=!1,this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed("6"),this.defines.DEPTH_THRESHOLD=(.1*e).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},EQ=`#include <common> 5794#include <packing> 5795#include <dithering_pars_fragment> 5796#define packFloatToRGBA(v) packDepthToRGBA(v) 5797#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) 5798#ifdef FRAMEBUFFER_PRECISION_HIGH 5799uniform mediump sampler2D inputBuffer; 5800#else 5801uniform lowp sampler2D inputBuffer; 5802#endif 5803#ifdef GL_FRAGMENT_PRECISION_HIGH 5804uniform
5804 highp sampler2D depthBuffer; 5805#else 5806uniform mediump sampler2D depthBuffer; 5807#endif 5808uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv; 5809#if THREE_REVISION < 143 5810#define luminance(v) linearToRelativeLuminance(v) 5811#endif 5812#if THREE_REVISION >= 137 5813vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);} 5814#endif 5815float readDepth(const in vec2 uv){ 5816#if DEPTH_PACKING == 3201 5817return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5818#else 5819return texture2D(depthBuffer,uv).r; 5820#endif 5821}float getViewZ(const in float depth){ 5822#ifdef PERSPECTIVE_CAMERA 5823return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); 5824#else 5825return orthographicDepthToViewZ(depth,cameraNear,cameraFar); 5826#endif 5827}FRAGMENT_HEADvoid main(){FRAGMENT_MAIN_UVvec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGEgl_FragColor=color0; 5828#ifdef ENCODE_OUTPUT 5829#include <encodings_fragment> 5830#endif 5831#include <dithering_fragment> 5832}`,EZ={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUPPORT:"VERTEX_MAIN_SUPPORT"},EK=class extends r8{constructor(e,t,i,r,s=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new lI(null),depthBuffer:new lI(null),resolution:new lI(new tK),texelSize:new lI(new tK),cameraNear:new lI(.3),cameraFar:new lI(1e3),aspect:new lI(1),time:new lI(0)},blending:0,depthWrite:!1,depthTest:!1,dithering:s}),this.toneMapped=!1,e&&this.setShaderParts(e),t&&this.setDefines(t),i&&this.setUniforms(i),this.adoptCameraSettings(r)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}setShaderParts(e){return this.fragmentShader=EQ.replace(EZ.FRAGMENT_HEAD,e.get(EZ.FRAGMENT_HEAD)).replace(EZ.FRAGMENT_MAIN_UV,e.get(EZ.FRAGMENT_MAIN_UV)).replace(EZ.FRAGMENT_MAIN_IMAGE,e.get(EZ.FRAGMENT_MAIN_IMAGE)),this.vertexShader="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEADvoid main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORTgl_Position=vec4(position.xy,1.0,1.0);}".replace(EZ.VERTEX_HEAD,e.get(EZ.VERTEX_HEAD)).replace(EZ.VERTEX_MAIN_SUPPORT,e.get(EZ.VERTEX_MAIN_SUPPORT)),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){for(let t of(this.extensions={},e))this.extensions[t]=!0;return this}get encodeOutput(){return void 0!==this.defines.ENCODE_OUTPUT}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r7?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let i=this.uniforms;i.resolution.value.set(e,t),i.texelSize.value.set(1/e,1/t),i.aspect.value=e/t}static get Section(){return EZ}},EJ=`#include <common> 5833#if THREE_REVISION < 143 5834#define luminance(v) linearToRelativeLuminance(v) 5835#endif 5836#ifdef FRAMEBUFFER_PRECISION_HIGH 5837uniform mediump sampler2D inputBuffer; 5838#else 5839uniform lowp sampler2D inputBuffer; 5840#endif 5841#ifdef RANGE 5842uniform vec2 range; 5843#elif defined(THRESHOLD) 5844uniform float threshold;uniform float smoothing; 5845#endif 5846varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb); 5847#ifdef RANGE 5848float low=step(range.x,l);float high=step(l,range.y);l*=low*high; 5849#elif defined(THRESHOLD) 5850l=smoothstep(threshold,threshold+smoothing,l); 5851#endif 5852#ifdef COLOR 5853gl_FragColor=vec4(texel.rgb*l,l); 5854#else 5855gl_FragColor=vec4(l); 5856#endif 5857}`,E$=class extends r8{constructor(e=!1,t=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,"")},uniforms:{inputBuffer:new lI(null),threshold:new lI(0),smoothing:new lI(1),range:new lI(null)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EJ,vertexShader:Ez}),this.toneMapped=!1,this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return void 0!==this.defines.COLOR}set colorOutput(e){e?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return null!==this.luminanceRange}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){null!==e?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},E0=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5858uniform mediump sampler2D inputBuffer; 5859#else 5860uniform lowp sampler2D inputBuffer; 5861#endif 5862#ifdef MASK_PRECISION_HIGH 5863uniform mediump sampler2D maskTexture; 5864#else 5865uniform lowp sampler2D maskTexture; 5866#endif 5867#if MASK_FUNCTION != 0 5868uniform float strength; 5869#endif 5870varying vec2 vUv;void main(){ 5871#if COLOR_CHANNEL == 0 5872float mask=texture2D(maskTexture,vUv).r; 5873#elif COLOR_CHANNEL == 1 5874float mask=texture2D(maskTexture,vUv).g; 5875#elif COLOR_CHANNEL == 2 5876float mask=texture2D(maskTexture,vUv).b; 5877#else 5878float mask=texture2D(maskTexture,vUv).a; 5879#endif 5880#if MASK_FUNCTION == 0 5881#ifdef INVERTED 5882mask=step(mask,0.0); 5883#else 5884mask=1.0-step(mask,0.0); 5885#endif 5886#else 5887mask=clamp(mask*strength,0.0,1.0); 5888#ifdef INVERTED 5889mask=1.0-mask; 5890#endif 5891#endif 5892#if MASK_FUNCTION == 2 5893gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask); 5894#else 5895gl_FragColor=mask*texture2D(inputBuffer,vUv); 5896#endif 5897}`,E1=class extends r8{constructor(e=null){super({name:"MaskMaterial",uniforms:{maskTexture:new lI(e),inputBuffer:new lI(null),strength:new lI(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E0,vertexShader:Ez}),this.toneMapped=!1,this.setColorChannel(0),this.setMaskFunction(0)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,1009!==e.type&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return void 0!==this.defines.INVERTED}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},E2
vendor: 7,736 bytes, lines 5897-5922
5897=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize) 5898#if __VERSION__ < 300 5899#define round(v) floor(v + 0.5) 5900#endif 5901#ifdef FRAMEBUFFER_PRECISION_HIGH 5902uniform mediump sampler2D inputBuffer; 5903#else 5904uniform lowp sampler2D inputBuffer; 5905#endif 5906uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x>end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x<end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.y>end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;i++){if(!(texCoord.y<end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5907#if !defined(DISABLE_CORNER_DETECTION) 5908vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0); 5909#endif 5910}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5911#if !defined(DISABLE_CORNER_DETECTION) 5912vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0); 5913#endif 5914}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){ 5915#if !defined(DISABLE_DIAG_DETECTION) 5916weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){ 5917#endif 5918vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d); 5919#if !defined(DISABLE_DIAG_DETECTION) 5920}else{e.r=0.0;} 5921#endif 5922}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,
vendor: 4,345 bytes, line 5922
5922E3=class extends r8{constructor(e=new tK,t=new tK){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new lI(null),searchTexture:new lI(null),areaTexture:new lI(null),resolution:new lI(t),texelSize:new lI(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E2,vertexShader:"uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return void 0===this.defines.DISABLE_DIAG_DETECTION}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return void 0===this.defines.DISABLE_CORNER_DETECTION}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.resolution.value.set(e,t)}},E4=new r9,E5=null,E6=class{constructor(e="Pass",t=new nS,i=E4){this.name=e,this.renderer=null,this.scene=t,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.getFullscreenMaterial();null!==t&&(t.needsUpdate=!0),this.rtt=!e}}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return null!==this.screen?this.screen.material:null}set fullscreenMaterial(e){let t=this.screen;null!==t?t.material=e:((t=new rJ(function(){if(null===E5){let e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]);void 0!==(E5=new rN).setAttribute?(E5.setAttribute("position",new rC(e,3)),E5.setAttribute("uv",new rC(t,2))):(E5.addAttribute("position",new rC(e,3)),E5.addAttribute("uv",new rC(t,2)))}return E5}(),e)).frustumCulled=!1,null===this.scene&&(this.scene=new nS),this.scene.add(t),this.screen=t)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}
5922setDepthTexture(e,t=3200){}render(e,t,i,r,s){throw Error("Render method not implemented!")}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nS||t===this.renderer)continue;this[e].dispose()}}}},E8=class extends E6{constructor(e,t=!0){super("CopyPass"),this.fullscreenMaterial=new EW,this.needsSwap=!1,this.renderTarget=e,void 0===e&&(this.renderTarget=new ip(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,i){void 0!==i&&(this.renderTarget.texture.type=i,1009!==i?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},E9=class extends E6{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,i,r,s){let a=e.state.buffers.stencil;a.setLocked(!1),a.setTest(!1)}},E7=new is,Ce=class extends E6{constructor(e=!0,t=!0,i=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=i,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,i){this.color=e,this.depth=t,this.stencil=i}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,i,r,s){let a=this.overrideClearColor,o=this.overrideClearAlpha,l=e.getClearAlpha(),h=null!==a,c=o>=0;h?(E7.copy(e.getClearColor(E7)),e.setClearColor(a,c?o:l)):c&&e.setClearAlpha(o),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),h?e.setClearColor(E7,l):c&&e.setClearAlpha(l)}},Ct=class extends tz{constructor(e,t=-1,i=-1,r=1){super(),this.resizable=e,this.base=new tK(1,1),this.preferred=new tK(t,i),this.target=this.preferred,this.s=r}get width(){let{base:e,preferred:t,scale:i}=this;return -1!==t.width?t.width:-1!==t.height?Math.round(t.height*(e.width/Math.max(e.height,1))):Math.round(e.width*i)}set width(e){this.preferredWidth=e}get height(){let{base:e,preferred:t,scale:i}=this;return -1!==t.height?t.height:-1!==t.width?Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):Math.round(e.height*i)}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferred.setScalar(-1),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.base.width}set baseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseWidth(){return this.base.width}setBaseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get baseHeight(){return this.base.height}set baseHeight(e){this.base.height!==e&&(this.base.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.base.width!==e||this.base.height!==t)&&(this.base.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get preferredWidth(){return this.preferred.width}set preferredWidth(e){this.preferred.width!==e&&(this.preferred.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferred.height}set preferredHeight(e){this.preferred.height!==e&&(this.preferred.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferred.width!==e||this.preferred.height!==t)&&(this.preferred.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}copy(e){this.base.set(e.getBaseWidth(),e.getBaseHeight()),this.preferred.set(e.getPreferredWidth(),e.getPreferredHeight()),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height)}static get AUTO_SIZE(){return -1}},Ci=!1,Cr=class{constructor(e=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(e),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case 2:t=this.materialsFlatShadedDoubleSide;break;case 1:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded}else switch(e.material.side){case 2:t=this.materialsDoubleSide;break;case 1:t=this.materialsBackSide;break;default:t=this.materials}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}setMaterial(e){if(this.disposeMaterials(),this.material=e,null!==e){let t=this.materials=[e.clone(),e.clone(),e.clone()];for(let i of t)i.uniforms=Object.assign({},e.uniforms),i.side=0;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=1,i}),this.materialsDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=2,i}),this.materialsFlatShaded=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i}),this.materialsFlatShadedBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=1,i}),this.materialsFlatShadedDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=2,i})}}render(e,t,i){let r=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,Ci){let r=this.originalMaterials;for(let s of(this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,i),r))s[0].material=s[1];this.meshCount!==r.size&&r.clear()}else{let r=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,i),t.overrideMaterial=r}e.shadowMap.enabled=r}disposeMaterials(){if(null!==this.material)for(let e of this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide))e.dispose()}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return Ci}static set workaroundEnabled(e){Ci=e}}
vendor: 5,250 bytes, line 5922
5922,Cs=class extends E6{constructor(e,t,i=null){super("RenderPass",e,t),this.needsSwap=!1,this.clearPass=new Ce,this.overrideMaterialManager=null===i?null:new Cr(i),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return null!==e?e.material:null}set overrideMaterial(e){let t=this.overrideMaterialManager;null!==e?null!==t?t.setMaterial(e):this.overrideMaterialManager=new Cr(e):null!==t&&(t.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.selection,h=o.layers.mask,c=a.background,d=e.shadowMap.autoUpdate,u=this.renderToScreen?null:t;null!==l&&o.layers.set(l.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||null!==this.clearPass.overrideClearColor)&&(a.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(u),null!==this.overrideMaterialManager?this.overrideMaterialManager.render(e,a,o):e.render(a,o),o.layers.mask=h,a.background=c,e.shadowMap.autoUpdate=d}},Ca=class extends E6{constructor(e,t,{resolutionScale:i=1,width:r=Ct.AUTO_SIZE,height:s=Ct.AUTO_SIZE,renderTarget:a}={}){super("DepthPass"),this.needsSwap=!1,this.renderPass=new Cs(e,t,new ns({depthPacking:3201}));let o=this.renderPass;o.skipShadowMapUpdate=!0,o.ignoreBackground=!0;let l=o.getClearPass();l.overrideClearColor=new is(16777215),l.overrideClearAlpha=1,this.renderTarget=a,void 0===this.renderTarget&&(this.renderTarget=new ip(1,1,{minFilter:1003,magFilter:1003,stencilBuffer:!1}),this.renderTarget.texture.name="DepthPass.Target");let h=this.resolution=new Ct(this,r,s,i);h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,a)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}};new Float32Array([255/256/16777216,255/256/65536,255/256/256,255/256]);var Cn={SKIP:0,ADD:1,ALPHA:2,AVERAGE:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,EXCLUSION:8,LIGHTEN:9,MULTIPLY:10,DIVIDE:11,NEGATION:12,NORMAL:13,OVERLAY:14,REFLECT:15,SCREEN:16,SOFT_LIGHT:17,SUBTRACT:18},Co=new Map([[Cn.SKIP,null],[Cn.ADD,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[Cn.ALPHA,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[Cn.AVERAGE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[Cn.COLOR_BURN,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.COLOR_DODGE,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.DARKEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[Cn.DIFFERENCE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[Cn.EXCLUSION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[Cn.LIGHTEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[Cn.MULTIPLY,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[Cn.DIVIDE,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.NEGATION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[Cn.NORMAL,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*
5922opacity+x*(1.0-opacity);}"],[Cn.OVERLAY,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.REFLECT,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.SCREEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[Cn.SOFT_LIGHT,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cn.SUBTRACT,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),Cl=class extends tz{constructor(e,t=1){super(),this.f=e,this.opacity=new lI(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this.f}set blendFunction(e){this.f=e,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return Co.get(this.blendFunction)}},Ch={NONE:0,DEPTH:1,CONVOLUTION:2},Cc=class extends tz{constructor(e,t,{attributes:i=Ch.NONE,blendFunction:r=Cn.SCREEN,defines:s=new Map,uniforms:a=new Map,extensions:o=null,vertexShader:l=null}={}){super(),this.name=e,this.renderer=null,this.attributes=i,this.fragmentShader=t,this.vertexShader=l,this.defines=s,this.uniforms=a,this.extensions=o,this.blendMode=new Cl(r),this.blendMode.addEventListener("change",e=>this.setChanged())}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(e,t=3200){}update(e,t,i){}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nS||t===this.renderer)continue;this[e].dispose()}}}};function Cd(e,t,i){for(let r of t){let t="$1"+e+r.charAt(0).toUpperCase()+r.slice(1),s=RegExp("([^\\.])(\\b"+r+"\\b)","g");for(let e of i.entries())null!==e[1]&&i.set(e[0],e[1].replace(s,t))}}var Cu=class extends E6{constructor(e,...t){super("EffectPass"),this.fullscreenMaterial=new EK(null,null,null,e),this.effects=t.sort((e,t)=>t.attributes-e.attributes),this.skipRendering=!1,this.uniformCount=0,this.varyingCount=0,this.minTime=1,this.maxTime=Number.POSITIVE_INFINITY}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}verifyResources(){let e=this.renderer.capabilities,t=Math.min(e.maxFragmentUniforms,e.maxVertexUniforms);this.uniformCount>t&&console.warn("The current rendering context doesn't support more than "+t+" uniforms, but "+this.uniformCount+" were defined"),t=e.maxVaryings,this.varyingCount>t&&console.warn("The current rendering context doesn't support more than "+t+" varyings, but "+this.varyingCount+" were defined")}updateMaterial(){let e=EK.Section,t=new Map([[e.FRAGMENT_HEAD,""],[e.FRAGMENT_MAIN_UV,""],[e.FRAGMENT_MAIN_IMAGE,""],[e.VERTEX_HEAD,""],[e.VERTEX_MAIN_SUPPORT,""]]),i=new Map,r=new Map,s=new Map,a=new Set,o=0,l=0,h=0,c=!1,d=!1;for(let e of this.effects)if(e.blendMode.blendFunction===Cn.SKIP)h|=e.getAttributes()&Ch.DEPTH;
5922else if((h&e.getAttributes()&Ch.CONVOLUTION)!=0)console.error("Convolution effects cannot be merged",e);else{h|=e.getAttributes();let u=function(e,t,i,r,s,a,o){let l=new Map([["fragment",t.getFragmentShader()],["vertex",t.getVertexShader()]]),h=void 0!==l.get("fragment")&&/mainImage/.test(l.get("fragment")),c=void 0!==l.get("fragment")&&/mainUv/.test(l.get("fragment")),d=[],u=[],p=!1,f=!1;if(void 0===l.get("fragment"))console.error("Missing fragment shader",t);else if(c&&(o&Ch.CONVOLUTION)!=0)console.error("Effects that transform UV coordinates are incompatible with convolution effects",t);else if(h||c){let m=/(?:\w+\s+(\w+)\([\w\s,]*\)\s*{[^}]+})/g,g=EK.Section;if(c){let t=` ${e}MainUv(UV); 5923`;i.set(g.FRAGMENT_MAIN_UV,i.get(g.FRAGMENT_MAIN_UV)+t),p=!0}if(null!==l.get("vertex")&&/mainSupport/.test(l.get("vertex"))){let t=` ${e}MainSupport(`;t+=/mainSupport *\([\w\s]*?uv\s*?\)/.test(l.get("vertex"))?`vUv); 5924`:`); 5925`,i.set(g.VERTEX_MAIN_SUPPORT,i.get(g.VERTEX_MAIN_SUPPORT)+t),d=d.concat([...l.get("vertex").matchAll(/(?:varying\s+\w+\s+(\w*))/g)].map(e=>e[1])),u=u.concat(d).concat([...l.get("vertex").matchAll(m)].map(e=>e[1]))}u=(u=(u=u.concat([...l.get("fragment").matchAll(m)].map(e=>e[1]))).concat([...t.defines.keys()].map(e=>e.replace(/\([\w\s,]*\)/g,"")))).concat([...t.uniforms.keys()]),t.uniforms.forEac
5925h((t,i)=>a.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),t.defines.forEach((t,i)=>s.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),Cd(e,u,s),Cd(e,u,l);let v=t.blendMode;if(r.set(v.blendFunction,v),h){let t=`${e}MainImage(color0, UV, `;(o&Ch.DEPTH)!=0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(l.get("fragment"))&&(t+="depth, ",f=!0),t+=`color1); 5926 `;let r=e+"BlendOpacity";a.set(r,v.opacity),t+=`color0 = blend${v.blendFunction}(color0, color1, ${r}); 5927 5928 `,i.set(g.FRAGMENT_MAIN_IMAGE,i.get(g.FRAGMENT_MAIN_IMAGE)+t),t=`uniform float ${r}; 5929 5930`,i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+t)}i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+l.get("fragment")+` 5931`),null!==l.get("vertex")&&i.set(g.VERTEX_HEAD,i.get(g.VERTEX_HEAD)+l.get("vertex")+` 5932`)}else console.error("The fragment shader contains neither a mainImage nor a mainUv function",t);return{varyings:d,transformedUv:p,readDepth:f}}("e"+o++,e,t,i,r,s,h);if(l+=u.varyings.length,c=c||u.transformedUv,d=d||u.readDepth,null!==e.extensions)for(let t of e.extensions)a.add(t)}let u=/\bblend\b/g;for(let r of i.values()){let i=r.getShaderCode().replace(u,`blend${r.blendFunction}`);t.set(e.FRAGMENT_HEAD,t.get(e.FRAGMENT_HEAD)+i+` 5933`)}if((h&Ch.DEPTH)!=0){if(d){let i=`float depth = readDepth(UV); 5934 5935 `;t.set(e.FRAGMENT_MAIN_IMAGE,i+t.get(e.FRAGMENT_MAIN_IMAGE))}this.needsDepthTexture=null===this.getDepthTexture()}else this.needsDepthTexture=!1;if(c){let i=`vec2 transformedUv = vUv; 5936`;t.set(e.FRAGMENT_MAIN_UV,i+t.get(e.FRAGMENT_MAIN_UV)),r.set("UV","transformedUv")}else r.set("UV","vUv");t.forEach((e,t,i)=>i.set(t,e.trim().replace(/^#/,` 5937#`))),this.uniformCount=s.size,this.varyingCount=l,this.skipRendering=0===o,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderParts(t).setExtensions(a).setUniforms(s).setDefines(r)}recompile(){this.updateMaterial(),this.verifyResources()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=3200){for(let i of(this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t,this.effects))i.setDepthTexture(e,t)}render(e,t,i,r,s){for(let i of this.effects)i.update(e,t,r);if(!this.skipRendering||this.renderToScreen){let s=this.fullscreenMaterial;s.inputBuffer=t.texture,s.time+=r,e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}}setSize(e,t){for(let i of(this.fullscreenMaterial.setSize(e,t),this.effects))i.setSize(e,t)}initialize(e,t,i){for(let r of(this.renderer=e,this.effects))r.initialize(e,t,i),r.addEventListener("change",e=>this.handleEvent(e));this.updateMaterial(),this.verifyResources(),void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){for(let e of(super.dispose(),this.effects))e.dispose()}handleEvent(e){"change"===e.type&&this.recompile()}},Cp=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],Cf=class extends E6{constructor({resolutionScale:e=.5,width:t=Ct.AUTO_SIZE,height:i=Ct.AUTO_SIZE,kernelSize:r=Cx.LARGE}={}){super("KawaseBlurPass"),this.renderTargetA=new ip(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";let s=this.resolution=new Ct(this,t,i,e);s.addEventListener("change",e=>this.setSize(s.baseWidth,s.baseHeight)),this.blurMaterial=new EG,this.ditheredBlurMaterial=new EG,this.ditheredBlurMaterial.uniforms.scale=this.blurMaterial.uniforms.scale,this.ditheredBlurMaterial.dithering=!0,this.dithering=!1,this.kernelSize=r}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.renderTargetA,h=this.renderTargetB,c=Cp[this.kernelSize],d=this.blurMaterial,u=t,p,f;for(this.fullscreenMaterial=d,p=0,f=c.length-1;p<f;++p){let t=(1&p)==0?l:h;d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(t),e.render(a,o),u=t}this.dithering&&(d=this.ditheredBlurMaterial,this.fullscreenMaterial=d),d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(this.renderToScreen?null:i),e.render(a,o)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height;this.renderTargetA.setSize(r,s),this.renderTargetB.setSize(r,s),this.blurMaterial.setSize(r,s),this.ditheredBlurMaterial.setSize(r,s)}initialize(e,t,i){void 0!==i&&(this.renderTargetA.texture.type=i,this.renderTargetB.texture.type=i,1009!==i?(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.ditheredBlurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1"):3001===e.outputEncoding&&(this.renderTargetA.texture.encoding=3001,this.renderTargetB.texture.encoding=3001))}static get AUTO_SIZE(){return Ct.AUTO_SIZE}}
5937,Cm=class extends E6{constructor({width:e=Ct.AUTO_SIZE,height:t=Ct.AUTO_SIZE,renderTarget:i,luminanceRange:r,colorOutput:s}={}){super("LuminancePass"),this.fullscreenMaterial=new E$(s,r),this.needsSwap=!1,this.renderTarget=i,void 0===this.renderTarget&&(this.renderTarget=new ip(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="LuminancePass.Target",this.renderTarget.texture.generateMipmaps=!1);let a=this.resolution=new Ct(this,e,t);a.addEventListener("change",e=>this.setSize(a.baseWidth,a.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cg=class extends E6{constructor(e,t){super("MaskPass",e,t),this.needsSwap=!1,this.clearPass=new Ce(!1,!1,!0),this.inverse=!1}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,i,r,s){let a=e.getContext(),o=e.state.buffers,l=this.scene,h=this.camera,c=this.clearPass,d=this.inverted?0:1;o.color.setMask(!1),o.depth.setMask(!1),o.color.setLocked(!0),o.depth.setLocked(!0),o.stencil.setTest(!0),o.stencil.setOp(a.REPLACE,a.REPLACE,a.REPLACE),o.stencil.setFunc(a.ALWAYS,d,4294967295),o.stencil.setClear(1-d),o.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?c.render(e,null):(c.render(e,t),c.render(e,i))),this.renderToScreen?e.setRenderTarget(null):(e.setRenderTarget(t),e.render(l,h),e.setRenderTarget(i)),e.render(l,h),o.color.setLocked(!1),o.depth.setLocked(!1),o.stencil.setLocked(!1),o.stencil.setFunc(a.EQUAL,1,4294967295),o.stencil.setOp(a.KEEP,a.KEEP,a.KEEP),o.stencil.setLocked(!0)}},Cv=class extends E6{constructor(e,t="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=e,this.inputBufferUniform=null,this.setInput(t)}setInput(e){if(this.inputBufferUniform=null,null!==this.fullscreenMaterial){let t=this.fullscreenMaterial.uniforms;void 0!==t&&void 0!==t[e]&&(this.inputBufferUniform=t[e])}}render(e,t,i,r,s){null!==this.inputBufferUniform&&null!==t&&(this.inputBufferUniform.value=t.texture),e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cy=class{constructor(){this.previousTime=0,this.currentTime=0,this.delta=0,this.fixedDelta=1e3/60,this.elapsed=0,this.timescale=1,this.fixedDeltaEnabled=!1,this.autoReset=!1}setFixedDeltaEnabled(e){return this.fixedDeltaEnabled=e,this}isAutoResetEnabled(e){return this.autoReset}setAutoResetEnabled(e){return"u">typeof document&&void 0!==document.hidden&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this.autoReset=e),this}getDelta(){return .001*this.delta}getFixedDelta(){return .001*this.fixedDelta}setFixedDelta(e){return this.fixedDelta=1e3*e,this}getElapsed(){return .001*this.elapsed}getTimescale(){return this.timescale}setTimescale(e){return this.timescale=e,this}update(e){return this.fixedDeltaEnabled?this.delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=void 0!==e?e:performance.now(),this.delta=this.currentTime-this.previousTime),this.delta*=this.timescale,this.elapsed+=this.delta,this}reset(){return this.delta=0,this.elapsed=0,this.currentTime=performance.now(),this}handleEvent(e){document.hidden||(this.currentTime=performance.now())}dispose(){this.setAutoResetEnabled(!1)}},Cx={MEDIUM:2,LARGE:3,HUGE:5},Cb=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5938uniform mediump sampler2D map; 5939#else 5940uniform lowp sampler2D map; 5941#endif 5942uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=clamp(texture2D(map,uv)*intensity,0.0,1.0);}`,Cw=class extends Cc{constructor({blendFunction:e=Cn.SCREEN,luminanceThreshold:t=.9,luminanceSmoothing:i=.025,resolutionScale:r=.5,intensity:s=1,width:a=Ct.AUTO_SIZE,height:o=Ct.AUTO_SIZE,kernelSize:l=Cx.LARGE}={}){super("BloomEffect",Cb,{blendFunction:e,uniforms:new Map([["map",new lI(null)],["intensity",new lI(s)]])}),this.renderTarget=new ip(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.renderTarget.texture.generateMipmaps=!1,this.uniforms.get("map").value=this.renderTarget.texture,this.luminancePass=new Cm({renderTarget:this.renderTarget,colorOutput:!0}),this.luminanceMaterial.threshold=t,this.luminanceMaterial.smoothingFactor=i,this.blurPass=new Cf({resolutionScale:r,width:a,height:o,kernelSize:l});let h=this.blurPass.getResolution();h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return console.warn(this.name,"distinction was removed"),1}set distinction(e){console.warn(this.name,"distinction was removed")}get intensity(){return this.uniforms.get("intensity").value}set intensity(e){this.uniforms.get("intensity").value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,i){let r=this.renderTarget;this.luminancePass.enabled?(this.luminancePass.render(e,t,r),this.blurPass.render(e,r,r)):this.blurPass.render(e,t,r)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height),this.luminancePass.resolution.copy(i)}initialize(e,t,i){this.blurPass.initialize(e,t,i),void 0!==i&&(this.renderTarget.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},CS=class extends Cc{constructor({blendFunction:e=Cn.NORMAL,brightness:t=0,contrast:i=0}={}){super("BrightnessContrastEffect","uniform float brightness;uniform float contrast;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=inputColor.rgb+vec3(brightness-0.5);if(contrast>0.0){color/=vec3(1.0-contrast);}else{color*=vec3(1.0+contrast);}outputColor=vec4(min(color+vec3(0.5),1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["brightness",new lI(t)],["contrast",new lI(i)]])})}get brightness(){return this.uniforms.get("brightness").value}set brightness(e){this.uniforms.get("brightness").value=e}getBrightness(e){return this.brightness}setBrightness(e){this.brightness=e}get contrast(){return this.uniforms.get("contrast").value}set contrast(e){this.uniforms.get("contrast").value=e}getContrast(e){return this.contrast}setContrast(e){this.contrast=e}},C_=class extends Cc{constructor(e=Cn.NORMAL){super("ColorAverageEffe
5942ct","void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}",{blendFunction:e})}},CA=class extends Cc{constructor({blendFunction:e=Cn.NORMAL,offset:t=new tK(.001,5e-4)}={}){super("ChromaticAberrationEffect","varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=texture2D(inputBuffer,vUvR).ra;vec2 ba=texture2D(inputBuffer,vUvB).ba;outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}",{vertexShader:"uniform vec2 offset;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vUvR=uv+shift;vUvB=uv-shift;}",blendFunction:e,attributes:Ch.CONVOLUTION,uniforms:new Map([["offset",new lI(t)]])})}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}},CM=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5943uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer; 5944#else 5945uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer; 5946#endif 5947uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);float CoCNear=texture2D(nearCoCBuffer,uv).r;CoCNear=min(CoCNear*scale,1.0);vec4 result=inputColor*(1.0-colorFar.a)+colorFar;result=mix(result,colorNear,CoCNear);outputColor=result;}`,CE=class extends Cc{constructor(e,{blendFunction:t=Cn.NORMAL,worldFocusDistance:i,worldFocusRange:r,focusDistance:s=0,focalLength:a=.1,focusRange:o=a,bokehScale:l=1,width:h=Ct.AUTO_SIZE,height:c=Ct.AUTO_SIZE}={}){super("DepthOfFieldEffect",CM,{blendFunction:t,attributes:Ch.DEPTH,uniforms:new Map([["nearColorBuffer",new lI(null)],["farColorBuffer",new lI(null)],["nearCoCBuffer",new lI(null)],["scale",new lI(1)]])}),this.camera=e,this.renderTarget=new ip(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTarget.texture.generateMipmaps=!1,this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new Cv(new EV(e));let d=this.cocMaterial;d.focusDistance=s,d.focusRange=o,void 0!==i&&(d.worldFocusDistance=i),void 0!==r&&(d.worldFocusRange=r),this.blurPass=new Cf({kernelSize:Cx.MEDIUM,width:h,height:c});let u=this.blurPass.getResolution();u.addEventListener("change",e=>this.setSize(u.getBaseWidth(),u.getBaseHeight())),this.maskPass=new Cv(new E1(this.renderTargetCoC.texture));let p=this.maskPass.fullscreenMaterial;p.maskFunction=1,p.colorChannel=1,this.bokehNearBasePass=new Cv(new EN(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new Cv(new EN(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new Cv(new EN(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new Cv(new EN(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null,this.bokehScale=l}get cocTexture(){return this.renderTargetCoC.texture}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.circleOfConfusionMaterial}getBlurPass(){return this.blurPass}get resolution(){return this.blurPass.getResolution()}getResolution(){return this.blurPass.getResolution()}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(e){for(let t of[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass])t.fullscreenMaterial.setScale(e);this.maskPass.fullscreenMaterial.setStrength(e),this.uniforms.get("scale").value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){let t=this.camera;return EU(-t.position.distanceTo(e),t.near,t.far)}
5947setDepthTexture(e,t=3200){this.circleOfConfusionMaterial.depthBuffer=e,this.circleOfConfusionMaterial.depthPacking=t}update(e,t,i){let r=this.renderTarget,s=this.renderTargetCoC,a=this.renderTargetCoCBlurred,o=this.renderTargetMasked;if(null!==this.target){let e=this.calculateFocusDistance(this.target);this.circleOfConfusionMaterial.focusDistance=e}this.cocPass.render(e,null,s),this.blurPass.render(e,s,a),this.maskPass.render(e,t,o),this.bokehFarBasePass.render(e,o,r),this.bokehFarFillPass.render(e,r,this.renderTargetFar),this.bokehNearBasePass.render(e,t,r),this.bokehNearFillPass.render(e,r,this.renderTargetNear)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height,a=[this.cocPass,this.blurPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass];a.push(this.renderTargetCoC,this.renderTargetMasked),a.forEach(i=>i.setSize(e,t)),(a=[this.renderTarget,this.renderTargetNear,this.renderTargetFar,this.renderTargetCoCBlurred]).forEach(e=>e.setSize(r,s)),[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(e=>e.fullscreenMaterial.setSize(r,s))}initialize(e,t,i){[this.cocPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(r=>r.initialize(e,t,i)),this.blurPass.initialize(e,t,1009),void 0!==i&&(this.renderTarget.texture.type=i,this.renderTargetNear.texture.type=i,this.renderTargetFar.texture.type=i,this.renderTargetMasked.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001,this.renderTargetNear.texture.encoding=3001,this.renderTargetFar.texture.encoding=3001,this.renderTargetMasked.texture.encoding=3001))}};new ix,new iQ;var CC=class extends Cc{constructor({blendFunction:e=Cn.NORMAL,hue:t=0,saturation:i=0}={}){super("HueSaturationEffect","uniform vec3 hue;uniform float saturation;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,hue.xyz),dot(inputColor.rgb,hue.zxy),dot(inputColor.rgb,hue.yzx));float average=(color.r+color.g+color.b)/3.0;vec3 diff=average-color;if(saturation>0.0){color+=diff*(1.0-1.0/(1.001-saturation));}else{color+=diff*-saturation;}outputColor=vec4(min(color,1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["hue",new lI(new ix)],["saturation",new lI(i)]])}),this.hue=t}get saturation(){return this.uniforms.get("saturation").value}set saturation(e){this.uniforms.get("saturation").value=e}getSaturation(){return this.saturation}setSaturation(e){this.saturation=e}get hue(){return Math.acos((3*this.uniforms.get("hue").value.x-1)/2)}set hue(e){let t=Math.sin(e),i=Math.cos(e);this.uniforms.get("hue").value.set((2*i+1)/3,(-Math.sqrt(3)*t-i+1)/3,(Math.sqrt(3)*t-i+1)/3)}getHue(){return this.hue}setHue(e){this.hue=e}};new is;var CT=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*time)); 5948#ifdef PREMULTIPLY 5949outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a); 5950#else 5951outputColor=vec4(noise,inputColor.a); 5952#endif 5953}`,CP=class extends Cc{constructor({blendFunction:e=Cn.SCREEN,premultiply:t=!1}={}){super("NoiseEffect",CT,{blendFunction:e}),this.premultiply=t}get premultiply(){return this.defines.has("PREMULTIPLY")}set premultiply(e){this.premultiply!==e&&(e?this.defines.set("PREMULTIPLY","1"):this.defines.delete("PREMULTIPLY"),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(e){this.premultiply=e}},CD=class extends Cc{constructor(e=30){super("PixelationEffect","uniform bool active;uniform vec2 d;void mainUv(inout vec2 uv){if(active){uv=vec2(d.x*(floor(uv.x/d.x)+0.5),d.y*(floor(uv.y/d.y)+0.5));}}",{uniforms:new Map([["active",new lI(!1)],["d",new lI(new tK)]])}),this.resolution=new tK,this.d=0,this.granularity=e}get granularity(){return this.d}set granularity(e){let t=Math.floor(e);t%2>0&&(t+=1),this.d=t,this.uniforms.get("active").value=t>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(e){this.granularity=e}setSize(e,t){this.resolution.set(e,t),this.uniforms.get("d").value.setScalar(this.d).divide(this.resolution)}};new ix,new ix;var CI="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",CO
vendor: 6,469 bytes, line 5953
5953="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAYAAAABNmBHAAAgAElEQVR4Xuy9CbhlV1ktOvbpq09DkiIkUBI6kxASIH0DlAQiIK1wRfSJTx+i4JX7vKIigs8HXpXvqVcvrcC9agQ7IDTSSWgqCQQliDRBJKkkhDSkqVPNqVOnP+8b//rH3P+eZ+199tlznVTlvVrft7+1T7OaueZY42/m37QALKNk2wHg1pITlB17mC+Pp11W3X/LHyT32vhg48/5SOv+PnwpsHA70JoGlueB1iKApeqzvOzn44GatTB76Xzhd7suBR7+WWADgDEAwwCG/L54b/poDLrHuvvm70Z2Avhsc+PVcxscBU8F8C8ADg5+ipIjD/PlGwfgju8B924E5seARUfLsiNmqQW0IjL8+7L2NYD/7COBzfcCm+aB8SVgdAkYIRCXKyDax4EdAanL5PuNPllNvXDlAHwFgP8AcC2AhRIoDXbsYb48dl5WkVFTE3LGDcC9m4CZCWBuFFgeAZaGAYJQQCRqDHT+McJrVb8zwATUXH02MHYfMHEIGFsAxgjApQqACYQORjtd/B7Axt/z79sC0+cMPgjjlwPwVwHcA+DfAHzTxcVgWBroqMN8+cYBeM71wH0TwKExYHYUWCIAHYRLTlkCYgcIBcAgU/n3qy8GRu4HRgnAOWBkERhddPAJhGJDBxkvw7cqimr+zFM/ZLnZF64cgL8BYD+AWwB8x/dlWuWagHiYL984AJ/0RWBy1AE4AizyM1yxYAcTigW55xMbAkxEiwEdkJ/ZCQxPAiOHgBECcKEC4TBZcKkSv+mTieNcNPNC26mLNsj45QD8LQDTAO4GcJt/7iw2bfoG4WG+vAGwm9ExiEg69zpg/wgwPQLMjgALzn4E4aIzoJjQ9g4024uygkj+pyuAoX0VAIfngOH5NgCHMhAm8Sv2y3XDZeBhNIp8OzJE8OsBzAKYBHAXgDt8/4O+MVT0j4f58o0D8Pxrgf3DwMwIMEPQEYRkNwfgsuuDZLskip0No0gWMD/9HGDoADAkAC4Aw/wsAgZAgs2Z0ABI0GU6IVmKv+f28KDnHxkA/G0A8y6G73N9kOCjXnh/Ebb6OvgwX75xAF5wLTA1VIHPADgMLDj4yIA5AAm6aCUnv4oz46eeDwxNAUMzwJAz4BABSNDFTwSfg7DDKHE23MG5PqIY8A1u/dINs9dBdy8AgnGPM2NfUBrsnw7z5RsH4IXXAAcJviFgluAbygBINnSLWOAjGxJ4pgOKDV0v/OSLKp8iGXBovhLBBOCQM2ACoTOhnYrAdItYbCij5JFzRyIAqRccAnDAQUjg6UNQ7hsMXP0cRQAexss3DsCLCECCLwCQzMcPwUi2MwAScAKbfnY/YRLFQ8DHX+IAJAMSfDkAF13kLvleIjhjQQHxUVS3jjgGpKeeNzYVQEjgUS8k+PghONdhIwAP4+XXBYCHKIJbwJyDTgaIAdCBJx3Q2M8tYAHP9m4df/ylQOsQ0JqtRLCx30K1wtLBggScQOgsKBGcWHAJeOwRC0BSM1mQIKRbhh+Bj98JQP6t4U0APEyXXxcAEnxkQAFwoVUxID9kvQg+c1C7vidRbIDkc24B//hTQGumDcCWA5DgMxASdNIFBUI5pCML8v8API5zfEQx4BudgqiczviSnJhQwCP4BMCGl+wO8+U7AJi/W4O4YS6+pmK/2ciADsAOBhTIIiAJnPB7AvNjP+0AnANaYkAHX2JBAc+tYaJXOqBZv24Vc386XW5dtkHGW+4HFAJonpOe+YYQZAShgKjv3PNvPQaxVoI8zJdfFwASfPzMUwS3Kt1v0UFIlos6oDFdAGFcliMAP/ryAEAGNwQRnDOgLbdlIEwrIs6AZ/QgkMMHQF6ZAKQcJAsSYPwIeAIk9wJgoPK1gi7+PwF4GC/fOAAvIQPSs0URTPBJ/Pp3GSEGRHfBCIQ0xowBtUbcAj7ys5X4Jfu1HIAGQrIgQRXEsAFQIORDFhiDY/rMHmrU4QUgR08AkgUjCAW6CD6CkwBsAIQC4GG6fPMA3OXiNzCg2I9gNCMksmAAoemDzoimFwL48M85AKkiuQVMAAp8CYRRDAt8GQiJ67N6GJODAXAHlsGguscA2AJg1IPGYmxOpBxFWkRN9LsATgIwXnNs/v/5z/9XCf8BO3YAtxbc/46/KDt+5+ea1Yku2VUxHz/z0v24FwMGK1gWsK2OUUxHHdCBeRUB6OxHABr4ZICIBd0QWSF+XRdMTAjgCdTrG9cBNwE4F8CpDkICyYLGsuhFt6zs+gISwUen8zEAjgMw4cfx2H6O/90yAFo84Cbg4ID3/9TfLTt+5+ebnRABkODjx0SwPi5ec/FrYpmqSAxM8Dn60CsqAFI6GfhqAMiDE/gokmvEr0C4PgDkBQm40wE8zMFEUDKEVoxIMLl/KS73mE7H9d+vcKHQQcjwW0Yu9nP8m8sAmOIBuWY6wP2/4s0ezjjg8TuvaR6ABJ70vxUApGrm7EbGE+i472BAB+WHfqHS/eoAaEwY2E9+wLSXTqhI7CXgnB6LCoOJ4BiST+hTnG0HcCwAglCx3ARoZEVFXnBPp/O/A/hXACc7CPs9/i1lAOyIB+RDX+P9/+pbQjjjAMfv/PL6AFDs1wFAgs/9fgKfgdE/ZEpuiQlbwAde6QAMBgiRmsSwA9BY0JfjovGRDBMH4TlcXGhcBOc6HkF0gjPhZgchxTLZMAci/04W/B6Ab3t09EPXcPyflgFwRTwgJ2MN9/8bf5qFM67x+B/aW4XQz42FeL0YrRyikztUFw0704mf9kXgxhOAqc3AAsPyRxxQCs/PdXOFY0W1KHy3QIUGtx+6vdnx1vsB+dsTncm2AogglFgVEAlUWrOMB2RyEmMCGQ/Y7/HvKns6tfGAnJQ+r/9b76oJZ1zD8WdyQjYBh8aBhVEHjELouQ8ukQ7VRSCJAALwkr+sALhnGzDD3JAJYJHg9uhoi4bx8ytkWUtvHT/7+Zc4dw1uZ3612fH2dkQf7yxIEEockwkJQn4IQoq8unhAhmPRKKFx0uv4K8ueTs94wD7u//VX9ghn7OP4c+4G7h8HpseB+dF2AKlFLwuAIZ8jD6NPrOhAffmfA9/ZBuzZCkyRWSeqBCWyoYGQ5yQrBpDbum/ME1HoPo0XEkSD2zlfbna8q6+EUJcTCxKEtHL5EQjP6BEPyIgYAZBvYt3xHyx7OqvGA65y/7/9wVXCGVc5/sl7qxD66dEqiYgRzAqhN1A4CBNAAlDyAFI+iZ9/N3DLJuC+jcDUBmCWyUnOrmTYCMIOkNclLg0B8/RsNLg9+UvNjnd1APLmmQpFHyEBROuWACQT8nN+H/GAvY7/VNnT6SsesMf13/CpahGnZzhjj+PPmwX2MYdDIfQexWyBAwEUOQDrRDN/98p3A7dvAO6fAA5sqHJDBEAyoUVGkwEd6HR12XU4kwzfl6fCXTZzjy57vvnR513X7Hj7AyDvggAUi9EyFgiZqNxPQF6345nOWbD1HQ/Y5fpvuLa/2+82/vNHgAPDFQDnhoF5j2C2qBWCI8bw1eRw5CL5l94L3DEOTI4DB8Y9OWmsEu/zBJ3rgsaybqBob/7A4C7jtWcooRrczr+u2fH2D0AOQgAUCxKEP7aGgLy64+m6KdjWFA9Yc/03/Osa4glrjr+AupqHz1sEs0cxG0BC9HIePLoit9eNkVf9L+DuUWByDJgaq4ybGYLPAWgiXmLedUE7dwC7saL7CqfPKXi4NYdaykCD410bAHlDEsNiwZ9wAPYbkJcfz6T2gm3N8YDZ9d/wHxUA+739fPwXPrSKYGb+BuP3jAFDElFH9HIWwbzCIGkBr/or4J4RYO8oMOW6ZVcAuvi1Cgoha04BCwT5gfMKHm7NoRde2+x41w5A3hQZkADk5+cGiAeMx3+/7AENFA8Yrv/G71cAXFM4Yzj+otOAaQLQA0gZxaIIZtMDFTigKJV8H9Iq6aZ59ZXAvSPAvpEKgBTtBODcSCWCZeRYtpzrmLyeGNCAyFl1v+Hei8qeb370Rdc2O97BAMi7EgB/2QG41nhAHU9LuWAbOB7Qr//GPRUA13r7Gv9FZwIMoVcEswEwfDoimEP0shKKtIphaZQAXv1+YM+wA3DEdcvRKkGJADQQEsQuhi1Tjt95vBsh5nx2IO59SsHDrTmUOStNjndwAAqEry0IyCMICkOyiuIBNwBvPFQQT7gBuPjc9oRYAIHyOEL4vIFEYVNaOou5vCGE/tV/A0wOVcnpzI47NOri3QFIBpSeaSDUdYLOSWvYImSGgftpJDa4MWJbAGxivGUA5MAOc0Be6eVLj7/4Mk+hzCOYPYpZDBiNkLh+G/M3yFyv/ltgL3W3YQfgcFUhgRY2PwY+Z7/EhAR1SFyXCOb57r28QfQBsJQBMn5D4y0HYLPje9Cd7RIC0PM3EiMofF4gVCBp1P840ix/gyz56r+vAMjk9Gl375iB4+CzveuZdLkkEPJ8ZEfX/6R73vOjzT5Si9hucLxHAVg4PwJgRwh9CKOXK8YA4ZEqKZXSQWh5P+5AftXfA/uGKvYjCKn72cctbFrZNECka5L5CPwIPtMH3TVz17MLB5gdLgA2Nd6jACycHwLQxFEUSR5ASvARDB0h9AQb9bXIgCGk6lUfAPYTgEPAITKgg1BObk58srTJgG58WMkWMaAbQQT1nc8rHGANAJsc71EAFs4PAagQestgC1lsBJ4BMCSOK6dDUcwqqaFiQr/0QeAAAdjy+jBiQQeeMSBZT3nCPUDIa9z+/MIB1gCwyfEeBWDh/BCAeQSzgkjFfGLBBD5nxQ4DxN0wv3hVxX5TBGDwL5obxvVA5YqYL5BeMLd66YYxJpRB0gK+96LCAdYAsMnxHgVg4fwIgMrhUPKQ2C+Bz0PmBTqBMQehAbDlIjj4F80KJguSVZ0FuXpjoCOgXawLjALhbT9eOMAuAGxqvEcBWDg/l1IE05Ed0ygZnyHdz0VwCqEPIfNyx0QQvvLDFQCp+8nfZk5und8tXwIgWcHSNX0N2CJmnAl3v6RwgNnhl17T7HiPArBwfghAS7mV/hey2JS9FvM3BLpUUi1YwDRMXvkRYJoAlAh2l0dcZ04s6JUTDIjyBcrl4yDc/dLCAdYAsMnxHgVg4fxwKVwJgGEJNmWtxpQMpX9on2eRhVA+O56AjMfnP+e3Xvf3NwG4xIPTleiY55bpGh6UbafNU0l0z0p+5Jh5HqYJ6b51nP6XP8cx12XNHQVgIQB/bFPVg2OC7Q+WgVFWng/FvtWLI06uWh5oguKEcXVS/9sEAF//VGD7t4ETDgJbF4CNi8CGZWBs2fPL/H6Vwp2KEtVk4fJ+v/EIYPN9wKa5qu+IncfPwXHVZe/aOL3EbwS7xv8A1rQvnO0j8PArTgTGZ4BxFv9mIxhOCGsv+0OPYDRghcLfkWkEuq0+G00x4OtfDGz+d2DbHmDLjL8si8AYP/7CGIAiEEMTG92zXqSbH+d9R2aA0XnvO+JjthiIrOVDHHPOkBrzUQAWAPsZp3oPDpa/Xag6EVkLBK+5rAnJC3/nYk/APD704WiEAV8OTHwX2LQH2DgFbJgFNrBhjd8r79deGoEwsllgNBOzy8CdjweG9wBj08AIAci2D6HafmyAk4/Z7SJ72hGYRwFYAMDLTwOGp4FRFgD3HhzqRGQiyeurqOdG6r0Rm8IEZjzRlkiqCWoEgK8Axm4BJu4HJhyAbFhDxmbDGnZO4j0SgLGDkpibgEq66TJw/1nA0F5gdLpq+zDqFfd5LMeWqu5HNST0uJOIllg+qgMWgI+HPv0xwLA3gWHpW2sC441gCECbmKziaGrnUdMO4aHeh6MxAP4SMHI7ML4HGD8AjHvHJGNAgpDgY/ck3stipRemvVhc+uASMPUEYGh/9dIRgGx8Y+MNbR/00uVtH0wEx94j/v0oAxaA8Ed+GBieAYZZg5kADC0QWGOFzGJlcGPzl1BxNLXD8sk4xftwNAbA/wwM3wGMUmxOOQBnHXzetIYvibonmSiuYTNjriVg7glAiwBk0fNZH6+PmX9P6kfNmCXGpftJ7TgKwBIAnln14BAAYxMYm5C6RjCyCoOyr0qkD/c+HI0B8DXA8N3AyCQwesD1VQKH7EcASm1Q+y4CkN9pUKiVF5nLvy+fBbTUd8QBaH1HvNBROiZvfsNnrF4kcvPwpdsBLBeU18Nf7AB23Dp4ecHC8oBgUlJJecLS+7+WOpE3gbE+HKw+yoevCYkMGKqPJrdEKARutaFYRs1fiEZ0wP8CDN8LDO8FRqYq3W10pgKgfYLaYCzootgA6KXaTA90y374TKB1sBozy77xHFZ536utRgAmEaw6g5kUSFZwSXnA330qsOlfgHMPDlZesLA8IOjoLypPWHj/11EnCiVwkz7kAExtsGraYUWdSDX5TmsagL8KDBGA7Bd30JsW0oWivnEOQNP7yGTSB
vendor: 60,312 bytes, line 5953
5953R101AlZSUtGyfgZDkCWY1HnJdcBVe6325hTvelg2CQjZNDygG/2An0j1wKnL6y9vGBheUC8prQ8YeH9X39OVQSc7Mc6fCaKvAeHdCIVf4yMYCynTpX+nb97NJmlSQb8r8DQHm9YOFUZTKOzoXGhs6AxF0HIexcLBvWBuiHN8s2ne98R3qc6L4Vyb2oBVjfm9MIFHbjDCh6kPOBbQoG+oW8CO5bWVl6wsDwgfr20PGHh/X/1iaEIuDcCTIW/1Q4rFv8OnYiW3c+W2iKwUjKbyjQNwL1uuR6sAEgDgq1brXOmV81PxhNB6DUDBSYzQJwFtz623XcktX1Q1VWKaTF/zZhVazBVYA1tX5MazsGvobwe/jQr0Ne6BTh5uf/ygoXlAfG60vKEhff/rSe1i4DnTWDUACY1guFTDqLYdCBvf6DJYSMYATBfOx1kLfj1v1axH10nQ3Sd0GUkBnTfpemtBJgseIKQAHLQcVxa2TnuMW0Aqui5es8xBIegVdVVE8VhzHnLh65WMB9An+X18K6aAn2tO4ETl6vqbKuVFywsDwhevqg8YeH93/Rk70JE90nowxZbIJjvS3WYNSGUwGHJTpPxwwcbBuBrgRYBeKACn7VtpdUu/c0NJxO9BIxcKu4TTODzbkonPLoaL0vyUQRb2y8HsL1ckfWzMeuFi40Qezqi+yiPhyt7FOjr6/gCFwgP7Xb5vssTFt7/nQRg6MGRWmDRoeyTlpgw68GRTwgZgo1gGmXAX6/8dtaylSKY/koyID9BhzML3q1gAos2AcOrZYSoq/pJp1VtODRm9Z3LS/7WjVkvXOzEtOpKyGrlAT+4SoG+VY8vBGCvy/dVnrDw/vee65NBJiAjBIVcAJQjOm+DkCZEeiGAMw6sAwDZsJrAdhFM9rPGhd4904Co5oVuCZPV6kD40Ec6+9W8dBTBsfdc3nkpvnB82fp2RPcs79dHgb51LA9ofsDV6vut5/3PnxcAmLVBiDqgevDaJLkYrpuQxzcNwN8AWgIgRbB8loEBzXDwl4cGiDGft58SCOWGedgjvOJ+bPvgRkiuA+ZjzhnQQOiFNVbloa7l/fos0LdO5QENgEXlCfs8Qbf7HyMA3QVjYihYhLENgjX9y/qwxQmRU/asfd0ZcLU2CHVGyusJQLKfVi98CS12T5f7iECkHpsMkAhCF8+nshWH2I/jXsOYO144GV/9ApAIrS3vt4YCfetQHtAA2G+/4PW4/2PPbzMgmUMi2NoeSCRxIt2/FvuxWURIWCXg357gfTjEDNIHnTRXRCpH5ugKwGl3HpMBXQc0v6WLYVm/5limj04rG762K2uYY9jBkr9+rI03NL5ZbczS/dJ+LQyoga4o77fGAn0NlwdMAOy3vl/T938KAcj121z8Bn+Y9eWQJRz8Y6kNagDh2ey5EvxjxQD8TWdAuneCCO4An1vw5vdzQMmdktwq7pLZQR+dM34+ZumAxvY1Y04uqOAJ6FsExzeto7zfAAX6GiwPaLWR1lrfr8n7f/Rl3QGzmsis+/uO71V9OFgP2gpPhgr7TGRqRUT6dyvr4aIs/pm/2zVUNbBSv6G8e5pEv0Cvec7Po7+bTtjlBRlkvAMBkDeQyvsNWKCvofKACYBrre/X1P0/oWEAnnFD1YdjhtXxR73mX10FfCHHE9pVWcGAI/S0gKsfA2y+twrFZw6Hxf/F0Pk8Ri/kpGSnMuDx5T0iACgQHioo0NdAecBUHW6QdsV2/cL7v/Cyqr5gnc42CCOcfX1VIZ/V8We9IDmTzVXwPDJiXuKXPxtDBma8+lzP4WAgKkPxCUAPE4v5GzEuMX0PYJPLhB6FJsc7MAMmkVxaYC/K9gG+F1++8AQ7Gwbgk78I7GFpXgIwFiRXOwaJZPUbiR0yCUDRk+cHf+YpwMj9HgfI8ClGPyvsSiH0WSKRuYlitLb/zHM/JOSs5C/YIC9cMQDZr/dwxgOW9gtGYUBi0wA8l304vDQvAchilFbpIBQhZ7Ejq6ZQ0/Yhil8y4j89Axie9DAsD6FX9HOK3QtROTFkviN83kG4felIY8DCeLrSeMDSfsEovAECUFsTjHD+tcB+tkFgcXKvBRir7qtFl9owmO4Xy/1G3bAFfPrZHorFNWBFwHjQAFctIghj2kBarw06If/+MM9ZqTN6DgsDojCerjQesLRfMApvoGkAWh8Ob/tgAPSKWCp8ngNQtadjmTdltvNvn3peFYhgQQgh+iUmEaUAUoXM1yRLmWuFLaE9Z+XIAWBhPF1pPGBpv2AU3kDTALzwmqo6qtVh9kJErAudABia38TC5wJgS2xIhAwBn3yhByL4EhzXfRXxYsDTJ4IvrNN2JFMxZcBzVo4cABbG05XGA5b2C0bhDTQNQLZBYH1AVsQSAAU+imI1obHyblnjG/kJk3U8BHz8xVUQAhnQIl5CyNgKAGp5LKSSCoAySh5Jj79vTagcxUaIBeRNe79g9gq+DXig4wGzy+PONfT7RWFA4noAkGXZVAhcBckJQgNgrLiaNb3paIDo1vHHX+oA9LQBi4DxJcOUPJUnTgU2NJUyROs8irGARxQAC+PpCtsFd40H/AEf0gMQkLgeACT41PiGoLOKqyrJq3K/Ya9mNyr5FusN/uPLPIeDa8Bc+w3rtyl4VFHaMZc3i9RWBM9jjzgAFsbTFbYLRmm/YBTeQNMAtD4cBKDXBTQGdAB2MGBo8SCLmEuS1AFVAJ3A/NhPt0PoCcA8bSDG76XI7aySg6JYuGfKwJHFgH0E5B3ueMCe/Y4L+xVHAOZ+9EHcEgQgwbeiEYx6jwTdz4qfu7EhEJqxGqruf/RnHIAEnxgwBM0aC8aUAYWNBRCmoIll4HTqO122QcZbrgMWxtMVtgvuOx6wa7/jwhtoGoDWh4MBJ16WN4lfr8AqI0TVV1O1fa9BbQzovkAy4Ed+NgCQUSxZCFWvCOaOFREXyUwZOPIA2GdA3uGOB6wPaOz+QPv5S+MA3OXiN9aclghW+d3IgupBF2pPqxcxGenDPxfSRh2ASiKKiVP2PaZScvAKoA0VDc6cOlIB2GdA3uGOB1zR77iwX/F6AFB9ONSOQW0frA50sILVcckWJyIDSgwPAVcJgFbYuZ3FJvAlEHbJ3IsgJLGedeBIA+AAAXmHOx6wo99xYb/i9QKg2iAIfDJEJHqj4SExbEty0gkdhB/6P9oZbBZIGiKYVb9GKaN50lRHBLOvhDxh/5EKwDUG5B3ueMB2QGM/grb7/6wHAPNGMAY+GSGUjC52VX2f2CD4+HO0gqkZfegXKgBaHkcWtS0AWii9xG1ImrLlN5XR8L8fmQD05BVrmEENmpYSP9QX+KHiqj2/82+HqqDWwnbBRfGATdzAegGwru2DpRq7Mzq2fpAf0Nq0Rl2wBXzglZ4yUAPAmDSVWDBPHQjLcgTqOZ6zUvdKHh4ruDCerox/Dnu7YqwXAC1NI/QcEQuK6WK/kdgCTGC0PYAP/KIDMBgglq+hIkrOfsaCviLSofcJgJ5AdM7kkSaCj/HqQKVIGvD4swF8bcBjmzjsaQ2H5D/6acBd9wALB4DFWWB5AVherMp4GKIYEOp7+26UF0aSfT/xYuDG7wDjrIpAERytXf2vajj7ueryQXSFl10K/ON3gIWDwCLvjfGB8Z54O+Ee4ve6513uB2R1yzsqC+twbC8HcNVhfAeaBuDP/TvwtS3A/ePAIfYFVlPq2HHTuyulZCTlhbjhETF5yxTQGgPGhoHhIWC4VSXGD3n0tLkMHXHxu+YyB+MlPwDuZs5K6FlsbCzdVO9DuKfkHM8AEkP7B8fOkwDcD+B7np42+JkGOvKdAL4E4K8P0zvQdET0b14D3DgB3D0B7B8HZka9WzrD88N6sFm+YcUjrn7E1ZDvMtF9DBgeAYaHgSGB0PNHCD4BLwLRsByAyX/ij0/dDUxuqlIG5hix7eFhvLcOVUAtyPSydAFmOQNe6EYGV/9ZESiKgIEgtbaD/gHALQC4ovY5r5KwtjOU/XfTAHzzLuCmIeDuMWDvKHBwpMoN0WQzNtAaYSs0K4ZlOSAjGG9kPjCBRwZ0ABKEBJexYAZEAU3A7Oi1BeDym4EDnjQ1TwCGWMW8MXcKks0YOyZNlQOQjcgYIUHllEzYQ0ktm+r6oz8G4F4AXwXwRd8/kO9A0wB8y65KmPxgGJgcqYJTKYpTv2CCzyddQJRDOjKivn+Deh8BF8BnwBtaCUA+YYEyAU8h+c6Az9gNHHRmrgOgmDA3jHQ+iWupCeUAvNSrA9HNwqx+muk9nJVNg/CTfrmbAPwbgK8D+PcHkIibjob5o13A3XypWsAkG1cPA9PDFQDZM1id0i1KxsWfOrKnAFXlifCFFMMRcASigOcs2MGAIfE9iWXplS6On7UbmPaUUTXQrgsVMzcRj5Folg2V5ayUA5BWYKwOxKUafnosWjcJwk+7W5F2EKvlE3xcXaNYfiCYsGkA/smuqug6hcleAnAImPbO6YwRpMgjCAVAm/yQmKTv5hNsAf/i7SyNBSl2a8Qv/4/M1yF+BZSYlNQCnnVrpbC+mToAACAASURBVJcaI7sOSEY2NpaDXLqpR+vE/OVksDgImgGgghHoYJbTWc7oJtFWc65/cg2AYvh2ALsB3AzgVv95nS/f4QdsIkT9T3cBrGtITWZfC5hqtQHInsEGQn3UDDvEDEY/ICf7SxMOrAg8T+c00JGkvHGd2DABUYZIAONzCUDppCFhSukCBsLQrFtZe/IixYQpSyEoJoqnuPWrVRAubQh83HNlZB23z7j1ywmj6CIIqUPxw2Xeu9bx2jx10wz4Z7sqTYZaDD8EIDuoE3hMVEphWg66JIp90k0sBxBcy+iPIIaT1RtEsHS/yIAqw+VSNPWQfe5tlVEk8auXgVa5BUsEJuT5uoliAbE5AGotmIAjCPnR9xDG3TQernYAUupTdBGEFMf83OkApHG+XlvTAPwfuyrgSZOhas3u6cwTsUBVn2gTwyFMi8wjHZAA1M9fYGHDULJD1m8Cpa8fRxDad+l+Ykf/3XNvd11U+qiL39SxXevSsshdDFvgbI1O2AwAtRZMZzTBRuDFjxe1Xg8QEIB8yyj5yYIUxfQIkfkIRnmHCM712JoG4FsdgHHp3ACoMH2G6jM4lWzoQarSvwQ6MSB/vporVaFkh+mCLlpVR8Z+dqDZLoDOpHSiQeAFDkBjPrlgCHgCUaFifg67H/9uYjn4Ai1vpTERTAASBaoQJBAKeNqHlL6mwPDZYAOROag/EYRkPX34MwHIvzW9rQcA+TLpI22G7EcQKlJGsYIJhC6ClUMiXfBTbFUQAej6nPS/OuAl9pOOqIc2BLzg++3VmWgIEUz82cRuCAtLIHQQm0gO52uOAb22sC3JEWgRfPpZf2sQBQIgLydPEIFGwPEj8MlF2bSbsulghLftqsCXq9HGgHysznrGgi5qzTUTFH8FLhAUn3hIJwCN0HLncw37qaF2zoYvuKNivmQIuUNc7GvWt6sHNs26twA6vhyq8NEMAHlyntFrDCcQehyaPTl+FwAbXDcmAKMRThakEk8Q8kPg8SPL0qzLBl+A9QCgR6uZGs3vfHz8TtBZvkgGQrEPBVAUg2Sij50QAOjiVKI3saADJRm7dSLYWfSFDkCem/dhZeMy9pPY5QvSDYQyUJoDIK8qMezh3wY6fSL49PcGgCAA8pScJLIgAUYQEmz8RPA17StvGoBv39W24eREiBoNQSgWNI1HBkdgxJSw1AI+dFIbgOYmkjimQ1r6XXC3rAbCHycAgytohf8vsB/r2KRaRq7zpZ+D37HMX0s3DDcCUGLYaw53MJ4YUODzusqlGCQAOQCejuxA8UULUkxIwAmMAp8Wa3qkN/R9W+sBwOhIEPjk5SLr8HeKFbTQfb77csPIMHGl/4MPbReslPhNe4+MiTpi9AFGV4nI7MfvagNQLh/pfrYnDAS8aJQ42A2w4em2cAyWQUuJVQTGWLs1uL7DG9J1RjhA+jvYk4t3KXeMqijpzrud4At9z3XtP16yGfjKZmCGooYh1tZzvv8xXPFl4PoJYC97k9FlwZWD+Azi/deMZWeP13eQCGEyoERudChIjbb3mJYwH7V0QIKuCwj/gfMj0asn2I0FXRSHXfL/iRkNgLyeVj8ccMY//J1fyxzTAXT2+xoQViKYD/1hDqLxPiYxTgSvQrphphG97tz4Slqafnj7uk1kIQDZrvWTw8B3jwEW+RLxPgSiCERdPwPR7+wCPg/gulFgfruDkOMQkFc5x84e708JAMmCuRNBXi4TIg5CGRzGiBGE/D4E/C2r2vcAYJoify62i0aJSMhB+2IHoNwu0fkcjQ85pu3ack5nIBREqneYFyWLkAXIJHESe00Cyx5QyeL6F/tyEcDcrOW2n7fX8df0mME+/vQ/PQjhoy3gzo3AISYf80MQaQx1peH9wb7v2mrtmCBkIMMejp3jIJD1MsaxaMZ8v5N/67INAsB3BAYU4JL4DSo1J15AFPAEwuQHZJzkKfUAtOHLJSOQRWndBYQvCQA01cfnNopfsaCJaD2baBn79QjSTiOEP1EcawIpkq2kegBTNgHWEpOKF8Uwq2NRFPM4AqCf46/rA2U9/uVDvurB01zvAJpiiwOl3fEeciCGF+Ij11f+QkbSfMPfIzqw57mEFZ9Dl3Ps5HXWAYByHJAJKV7N+s0cCQQhwSlfm4lGZ0KB8C/rABgZUS6ZHITBSEhCowUYAAksF7cStWREyxRwtuPpOlgw+5s9sq6OaIJIIlUgEhA1edoTgHxa9HVw5jibZNF+j/9yGQA/7pbujZ4bwv2+cWB6tFo0NzYnkxFA+cvEAo43VBoEo2e+48EMXEOmD9F6xhCE8RwZEJ80VblKvDlmzwicfqy93/o+8K8TwB2jVSgW138FrJQTXBNlnJgmrjZwanow9CBP/rL9wF0jwAGWDtFyoN9PHutnIHT05mPXz93dMGQAPniJsjiBXiTbxDZFMF9NLUPQxKR5qezz1Y6/YZDH0D6GkdAkYJIvRalAdHAMmPZoYhb6NhDWvEyf/ma737CXN7R1ZC7hUbPgcFgqt/ZZjADnM1xqEVhYBpb4CUk5UsL7jQvj///5buDrLeCOEeD+YQchYwG9VIfyg1NaZszFiCH6DkRGLze5/dgk8IMWcMCjdCiCzR8od1B8OTwvJM8JEShFut1fzMhi+eRJr6LI7hYP2M/xVLwKNoZjUTwRMAQQmYyhWGQxsSADOflZ4kukj7PhZ75bETjBpkAGahMkcrGgwhsXeCyBHBj1wmOBQwvAwqKzoFeRV8ZaerjKYAuirmPY/o9X7q5Cyr7fAvYMAftCPGAEoYlBiVtFwLjtp2U4irj7yOANbi+crHyrfCbTquJV44O0F1FrwQGIMZFqdQDyP/gGSZ8TC0ZRRsOlVzzgasd/u+zpMByLehAfCgMQCDyGZJHFCCgLZ2f8mgI5qauEcVx9e5vACTgCTwEMWr5TdIpWKJb5MvrnoocDswvAPAG4VLGg6UKeqmi4iuDz4er30oX0FP7u5moMvIf7W8B+jwlUNAzFnlZCIhvGFRCeWzrgXSSIBreXTFZSgVLHAp4UHOFuociEEsn2PJwl/XEk0dzfSojeerFg1IOo5BKAveIBex1P67lgUzgWQaJwLAKRH04i14ItgDKEtGsRnWx49b2Vkk9wUefTGrKCF7R0JxZMqxN8cmPAxWcAcxGABKEAKPA5u9lEaAbCmKMI+sDN1X3z+ro24wEZFc0VEE64ABgT180PF9ZdBcDb6JpqcPtPk+1ACbmKjJnllwyuILunEAWjZHkBsrsRUnfD0qEiC5IJfyisgMhzWhcP2O14Ro4WbASgAMQJ48SJwchmBCDFa8qpyBbSP7OvU4PQ0p2W7+LSnSJUFOrI4V7w5IoBTQQTfJ6oTSYk2mQcpGRyH2syGjIF6EM3V/fM++C1CfwUExhCsmzCaQT43lZC3e1hBpEHh36XEqrB7Scmq5dV0XZxmV8WuDFzAF9iwhow9seAGoBcGtKjqAc+1l9rLb/1igesO55ysmCrC8ei6IxRMAKTWNBi6Xw98xNTFUi0jEcmpYgRAPhddpVi9OIEPP5cYD4CcLkCooHPwaW9kV+iwWrQHT8uA1fd3F7DFvgUHUP2k8jTiogAqLoxFpDgbMj9jXSuN7i9dLIdaxzBp5XVBMIMgFEnFAPKT9qPd6A9BIGI7MfPmf4U+40HzI8nWgq2PBxL4FEkjKJixGRRFyQQPzzd1iAUzCAQas1YOmAEoFjwkecDC/PAwhKw6CxIkCXwOdVJLxTobMjBdyIgfvimNvNJ7Evf4jWtdnRYD1YNGVuG93VWuWs4Jf+mlZCCZxwP/cnJ6mXVKk2+tK8lQQVHRTGc64SDAZB3Ey3JcxyACkToJx4wHl+YwqloGDICmYmTFgMQFBET8yyYzyAG/AfWX8mCGQg0BTRoHwt9KVaPE/HQ890AIfgWK+CRAaMRYnVdxHbhdY8Wslw1V93UDsmPIj9GxgiAioRRMIJNvoti+SW/Ikd0gwAU8+XxJcbGITJPDvI6XdCFREFSknTB83xka40H1PGF9dnycCxFwygkK0bASJQSVAbAYeD98xUAe5U3jKIwBosSgNsuABYogl3/IwgFPrOIg1Xc4ZrpAsSrvruykl2ucykapkMMh4CExD5DwJfWAYAxwk4MKPAJgOIjGSEGwuCakRhemw6Yv0UUwRf7L00L9pnsNx6Qx4feY4O8pDEcixOjsoTKKpMYjSFYYjOC8Eq3Wnnr0YYS+0Tmi2HysrPGLqwASNYzBnT2Mz2QD91laxLB0gs12GAh81cf/o/OcHyJ+qj0S/zxnhUZbSyYWaL8+Rq2S29wowiWkJPan4MvgrDDGAlRe7KIywDIgR3meEDWg9HbJgApNTkXo8o0i7oVgxnEgFr8F7jEdnU5GvqfJQKQKyEOPlsNIQvyvupAGHS/Okv4qv9oh+PHxMLk8ggBCRxvAmEN+AiEzz2iQfQBeNmkh4K52hJBKOaNe/FSLobLRXCz43rQnu2yi9oMSMDxs2jo8303ERz1wsCGZECF4kd3DwEYYwJjhoNlQrgIjlYodbBPrwMAZfEmyzcIv27gs6XDzC/IR1DOgA9a6DRz4wZAsZ+LYXvQYsHoD4ziOFklna6YD3+nnU6dZ7bGDAcBUImIAmEUw/zbJ1i/scGNDJiLXmle3RhQ+l/aq57gUQCWzwwBKPeLsZ/LFrGg/ShRXAe64Ajkv30kALAjF8R11Dy3K7KRwJcsUTaqWScARou3w/INVnCH+A36n8RvM3nB5XP4oD6DATBYwGb5ajlOLOh6X8JaBKRG77+7ygGYp1bn+V25/01AzBnwQ1ypanD7KWfA1QDYC3zJIj7KgOUzc9nFbetX/r+O5biwNhyX5uSEDr5o0xsJwLp8/m4A7GaJUv/j3/5+HQFYJ3oFPPkho/hNeqBcMkcB2BAA6XrxmMBkfFAci/m0JpwzXw0TXvXtzrz+PKc/Ml/ugzM9MDqCAbz/keVjjGcQA/YLvjoguo1mRslRI6RwfsiA5nqhL5D6nscF8gfTdfxpS+/hLzvWfzMQCoB1Fq/8b3VWaPIDZqsRV64DALsZHVHs1gEvsqFAeBSApQC8pHK90Oql4UEAyvCwNeGcBXNLOPMLftgZsI75ouUr9ousp2TEyIJ/sU4AzC1e+WIFshyAHPZREVwItrrD3wGAhibTYBhxVpe/xePyrNBuWaoNp3DgFwC81O+RAepK/a5Lfe51jxr7JwA83nPXYgq1asl0yX5N48+f4VEGLATlK1vAo5YB1gBSRmsM+NFE57lcfPD5pPFWCJImtyvGgGfOAacBYO59zFglgHgPefZsXV6/gPXBYeC0RVgyJNOGYuJjPka9eHWgjL9bWzhWk0/n/wPn+k8bgFNmgYcsVflZnBRmIShtJM/m7JGibGBoOIIez9wKPP4AcNpylfbNlGfdI+9NjBjz8JVzppckZuJ+dBw4aQ44drk6j1LIY9JkPD7P4s2lwVEGLHwJnncscNIh4Nh5YMsSsHm5ndOu1BGFThJ8/K6JrZtoslST2+XHA6ftB05ZAE5crgAups5TfaL6EF+UyIif3gAcOwtsXep82eIYY9JkXpMgMp/AeZQBC2b8OduBYw8C2+aALQvARgJwGZhY7swEzbNa88IRvAVO1qkF91J36DNOBE7eD2yfB45fqphLnevzdGeBKBfL8UX5/CZgyyyweRHYsFwxYHzRNK6oetSBMDLjUQAWTPqPngpsnQK2zgKbCMAlYMMSME4ALrcnR6JYQIwsoUnjpDRstOLy7cBJB4CHUGwuAtuW2nUDVH1EFUhycSwWjGD64mZg0xywcaECoI0z5P3X5P6nWlHdgHgUgAUAfOYOYMtBYNMssHEe2LgITBCADkIzSJZXpCOnIg25uPrhgnupO/TyhwLHHwSOmwW2LVSik2pCrDsQskzNIBGIpBdGI+VfNgMb5oENCxX4yPRjPj4xaJ0+WGeEHRXBDUz2Mx4FbDoIbJypADixUAFwzAFI8KUJChMV2SUaAGc1cE/xFJef3FYRti64nkqWDrqqEhbrsm5zvZCdPCd8nHzJOLZuABRz9hTHZwPL7LnLnoNMIY2VyaKcjtZLHOAbNgNPngKe4BacfGF1pnydD+hphQ/8XV5UiEueLGnDN1tWXj/3/4cTwAUzwGPcRcFJiDpPt3FLmf5vjwE2HAQ2zPrEzDv7OQg5OSM+ScYQy5Xbo8465u/ZfLTJ7fKHAdumKxVh8wKwealSE6inEoSy2MWCdbUHIghv3AqMzwHji9VLZuDzD8cXxxWZs5c7apmW0fMBnIHKn5X7d6I5npvRz94O7LgXuGIReJSb+Xl1tzqflybwRwqf9i97BQRWomWJQ7oZVFtJoqDX/b/oGODsvcBTATB9gsfGqmzdjtVz+G+PAyamgYmZCoDjFE2anCVg1CeJwOMnTRB/DmUINVkkgia3y08BtkwDW+YqAFJFMD1VAAw6XG61R31O9/fdrcDYPDDmY0zjc1UjivBuAMx1QdMB+WAYXU8dhEU16dOSkppbcHFSrng8MHwnsGMPcN5ypURHp2xMIa7zDz2z8Gn/kVe0YomO0wEwBYKujL7v/zHA6C3AxfOVh58g5AsZxx4fZM7sf3h6BcDxWWeGBZ+cMEFiwGEHHRnDzun7ONHs/djkRgBunql0VDOSHIDU3cxSD4aEajhFXS4H4S1bgVGN0V8we7E0Fh9jVDG6Obr1LJMRwn+kOCaTEYT0dsfqZHXl/p7PrLi9wIY7gO0H2yAgCAWCWCowKrYE8nMLn/a7PQn9X7zIJPPkCcK+758y7x7guNsB6l98gZjLLYet3Ay5n0sv4R+fCYxPA2MOwLEAQLIDPyP8uBg2cRYmzFweAYilKkn+OC8/Fdh0CNhEA4nGA40kd6FES13WLO8v1qHKAfh9B+DoYjU2Ak/js/8NAIwg7OUb7LCC+WAfB4CpBJoIiTRNRmS1l13kqWh3Adv2A8cdqqp1MB+aIOSxWv6pq5D2kkIAvt8rF7BLJksN/jMqfa7v+7/Ak4B3A6ceqpasKMq5akAmlLWY37t8ZW97PDB2qALg2BxgAFwANEGcnI5JcrDZRPlkaXL4u1KJUAfAjbTQ59x6dSvdLPXAgGYshZWR6JIRaXB/NwFI8C1WwLMXzMeSwLfcXuKrA2G+wrLCDcN/IIg4ERRn0qvyySAQX6mG1XuA4fuAbTOVwktRRr2MLCoQyvEZ/UY/WwjAj3jtFJZkU79g1ghkgEBf98+0Umb/3A2M3lkBl/fOcdMok2EjkZyv8773LAfgHDDKjwNwxEUw9yailpwdxBAEYhBbAuGzG3aKkQEJwAkCkOCjlb7Y6SYyf2UwlAS+vKYnAXjfNmDEX7DEfA5CjUcsnzvbu1nDtUMmCDkRZEEyGdlAk6G6lQTSa6m0MP6HuY73AxNTlcJLZ6WOJYC5/CNxLpHMgdKIKNl69Qvu6/75AjHOiTU87gKOOViJb748BKCWrnK/maTA+58AjM0Ao7PA6Lx/xBAupoYDC9okBRAmPdBZ47lNA/DhwMRsxX7mPgl+SrmK5EaRNRslXFQ9CKB9DkADn79cZtkHFkysJ103eBbqlh97DpmTQTYgk9VNxu+xYbXKU3lhFoJPOgdFGY+lPkgQxokkgF9Xgj4AvfoFs84eX4Ke9x9fIC+tRfDxvvniif358sSir2LCj5wNjBKAc8CIi2AxxLCzIAGY9L7AhGIKgpATw4l8wToB0JjPrfTkp+SLQbHrOqm5jNyajS6VCMIpApDAWwQ4LrGgXqzIfnq5cv0vN0ZXHTInME5GBNLb1DGdOYQsI7AfGKFjlgqve8wJwG4T+fuFAFytXzCLb+VgWnH/fIGYfc46Hs7iHC8ZkPcdXx4VfVXJw8+cA4wIgM6AHSLKWZCTESfLfg7WsIyRF3ckiRQ+HACXkwHptyP4KHrpJvKVGnOhRF9eBF9wE0mUEogz2wC+WGI/vVxiQQIxAs9+rmHA6E1YFYB8DJwQMZl0OrLZ++i7sfT8zroYHLS9df4RACWKxSZvLXzG/fQLZqk2gqn2/vUCUQ9UZaM9wDaPeSPrC4A5C1KV+NITKwCS/SiCR/jRBDlLmP7nHynsxno1IPwJSyRpbiMADXzuPDYfZfBTEoAmcuVQdiaW0zwXwQsCYDYmMaDA1wG8TBSvaoR0G77EcGSET6hjOvVApfRPAUN0zjr45JzVcSqiTxD+VeGzXku/4Nr7JwDJOkxFIwt6j6+RqUrlkO4bXzp1gCAAv04AzgLDDsBhKugLFUvQUhTwCEKbnKCw14HwJ9cDgGQ9WegRgDI8XEcVEDvAl7lVlglAgi+I4CR+Zf1mLGgMmDFhBGFfDCicRJFERviSABjLS7FC0MFKMU+07wOPE0kGvaoQgGvtF9z1/iODkwn3VWoEXxres5ib9xx1wZufBAwLgAQexbAD0JiQwJOuJBA68/H3Zhk6+3CifqqwWNMKN8wjKgbk6gWJgC+FMaBb5vJVmsUbV2vCqo3cRWZcCIACoax53+ulkqNd7iqOcU1WcC9cxEm5kQBUdZ+sTnSL/jEtTWngi21jhJNJBivZBukXvOL+yYBkcOqxKjJ4AGgxzMrBVwdAMmHrZOAYF2l6y/mwV6xD17zmWo6MbRyeWtOHwxJ91IIhr6rqZS70DPPLXDVUrfBwzHKr1EUp6/h0T/6L/GcCqslt4IhoTcwdAqDSs7I60WQH6R329pHuFyuXDJmEjuOSbdB+wSvuP5bGUjmsA5XoUvcvBXKKAQnApUdXwah0b8jXR2YzJTsC0ZHB33FL+2yiX3h/1YeD1fFZGT81g/H6yqkVa9YEpqMhTADle8erHA6t7Mh6j4ZBXdBGjFyO4CSIm9wGBiBvgqxwIAJQlXIyEJLyI/i0SkAG/FbhaEr6BXfcv+5dLKhCg4z1C1HEBJ8+BODQGZXfk/quAZC6ketAZEQCTWAU8PIJt0fgwHzZvVWNaKqi7JLOmtDWFy42g1FxH/XfqGkII0C+a0tnDkfsGxQjn3VPsk7tXmuy+Xp0JhtoJosAaFcUAJUYKiYJxcqHqKAH9rPlG2cMrmCUbMX9guMLpGTcCMKDlZGhMK8IPnPIn1X5PA2AwegwEEYmDGBMjOI5whGQP3NPBT7VJlRNaKvF4t2IWHbDErtDlSk1p4lJ7/zd246tglGZryIfrFhQ7pU8WCAX0ZENG+57U14Z4YrCeLrSxXdev6TfLwrbxT7znMrfKQXfHLQCnyvmRIv0Q3430ezMmL98P393G3wqz6am1NYzzoGn+svqRmTAU2citctqAX/2EI8F9ACEmLHXLZGoFxtSl2xyK2bAYwrj6Xr12+1noL/jUTCD9vvFrn6u0v1/nvGkaoVBAQi0eummMAuXQHMWJAA7gCixG8U0gFfcXdlBKk4Z6zELgAJfZEKrxpC1xOIl/+Sk7jkcdYlSco90y9+gK6vJrRiADD0piad7RuFo3udNCgft94vCdrGXn+tujgV3QAcHLcFnroelivHkchEL8ue0uQ74S3eubAITS3IQhKkMRjBMokgWG3L//2z3VSnP4VDgQWxUEEUxAZFHL0eR3HDfm3IRbDHkBfF0zy4EIKNhSvr9goGEBdvTz/MIYQLQdVsTwRTFDj5jQmdArRDYJQNDSs961R3tPhx5NXoVgoxleHnarjohgLec3D2HI492yQNvIwvqO9fJm9zKGbAwnu6FhaP5pFuMg/b7tTbpBdvTz68cz/zI8azVj8iAHTqgmFHXDUB89R2dtaC7tUGw4kDOgFb0R2wYRDGZ8g9O8aU4XwPOczhiwGlMjqqLWiFYGu570wADFsbTvaxg8nkow7E8nM/atfKzln6/1mS4YHv6BQ4+Z0BbqHcd0NwwYbVD3+1yWhXJxPBrbq8AqE/XApSqAxiBV2MZ/54DMOZwKE00rnDUWcR5KiV/brjtSAMALIyn+/mCyeehjIYp6fdrvVELth8RAClyHXxmhPi6r1m8FM0ucgk8+y4RHC1kAK/5XgW+2hZYofafWcPq1B5AqDqEYsQ3nepR2gqhV2yiol1COkD0C+aOaoGx4aL7DQCwMJ7uVwomn4fm7VrX2u/XAlELth+5sHPtN+l/Ap6sX2dCsZ/phZkIJgv9l++1wbcq+2WFv2NXIjNKAPzuw7MUAV8DTuynFIEsQy83RgTAhiv+NgBABaQOGE/3mwWTLwAqHnaQfr9GnwUbARgDNBUlkpzQboyYCyYDYdILdf0l4NduW9kGoa4geNdazLElKoA3Prx7DofiETtC6XvE7hGEzJlpcis3Qgrj6d5UOJoYDcMglrX2+y0NPtl5UZUjkfx/Hqbecoe0OZzdF1gHQrln9Bhee4s3f3Zxm4MvAk9VSFdUIw0i+Q2PaBtISiBSSFgCYMjMW00MP7pwvvLDmwFgQTzdHxcOSGvBg/b7ZRZByWYAlOERluKM3Ra9CKWc0q73dTBhMFT4ZwIw9l5Lrpes+HjeBiGCUOKXeuBvPcKTiEIOR0f+RhDBMYi0Lhea4GTaa5NbOQAVDzhgPB1La5RssV3rIP1+7yy5OAADoAchEHBkFbKfGRpiweAPtMs5IFNokyOGk/7rAYC9OhBFwNXVY1at5tftCBHaWVS2AJdEcEinrDNC+Lumiyc1B8AB4+muLARAXTDCWvr93lR4/Z0Xt6ODFQkj8WtumEwHTKDLQejAfN3uds/dfjoQdatGLxb8jQBAYz6/boxiFgAVudzNIc2/s3xLk1szAORoB4yn+2DhaATAGJCtbpkCYq9+v4V+aBgAQ4i66XtaC85YkDog/zdZvzUgfN1N7a633Xqv6fe9msDIHfNaB6Ay2JRE1AHAEDIfI5nzZCLeN4Nbm9yaA+CA8XSsul6yqV0rJ2WQfr+splCyCYBR/HJyKX4phs0PKBZ0lqOYTpvniAiUAmAd+HKjo1cvDjHgr+3wPJQsVCymUZrPMuRsRBDG4AQCsunyJtFGHwAAIABJREFUcc0BUJlxQoH62q8ST8cggpKNAFRGwCD9fkuvbwAkyGgJE3C+Nz1P1q9/T3F1EZBxvZh50s6AEYC5yyUHXt5/Q8zI5/KrAmAIkkipkyGPYwXz1aRT8v5ZO6jJrRyAvKOvNXlLazsXs9bo/ztc29Pohgotp5J49Rcj/pzfIwGS//3OM4CNd1dpntQpFUmjEH4LYIgnyn/OLjL8FeDGhwJbNgFjI8DIEDA8BAy1PFK7FSKf43cNKrvHx+8C/vmxwMgmYHgEaA35J0StpvvzL/nP8RbLAfhyT207TChgDRiu/ZL9DsfWNABvYzbhCDBKoBAk/pEobGWTqp819hzQ1/0k0PoaMDEJbJjxVZFgDad0SaUO5LksWVj+XScDmw5UEUDJ6U4d0nVbC91S3ovfVHp5al64cgC+k7mZAP768KCA0WD3A/ieLz090CDceVmlAuhBljLgrfcAw6PAyDAwPFwBkCAbItM4a/FiNtERjBl76W9ffD2AbwJDdwFj+6syImRXrd5Y2FjIYcnzWPLEqnsfC0zsr6qBMQmfIDR/pyJ6xMhKyMrSDiKD2xja6TADTt0/AGAs1KcAUCFrOLF6tbtiRVFavT/wuMCa7MfVTlH098YBeBcwNAIMEYAUlS4uBULOmK3LCnwOPANlEIOSoF9+C4DvVoWXhvdWZVOYqWgi3vOXDUQhgieB0EElViMYJ08HxqeqnG8D4IIDkAzo51DKQQJvBKUmKACzbM4+5hUivwrgiwC4LzvjmgCh6nBcgiMTcv9Abo0D8E6g5eCjfpUA6AxoQIzgi8ALmWwC4z//DxcPPwBak8DQFDB8yJPpPZHeGCyC0KN5DFCByfh9/+OAsekKgEzCTwD047X0SCPM1IYQjCv2E/MJoGVwUUQoPboq0MdqkWVn7RtDDMahB4g+P6qhXFpjVtkDtRGA2nKjos7IyOyHFUbIrXe0FXsTuzIYfNb4O2M3ATGIYQOmPn6hG6gi3eUkQQAeAIYOAUOzALMVh2pAlESqGFBAXAYOMQVjxll03iO/yYKRAT0FQXkwZkjp1pz51LO2XAT3KtD3AIAwj4Wg05kfiuUHYlsXAJLVnP0INLM0OYFx78AzcRySeTsw2AJueI+Dj2Fne4EWKz5MA0MzDkCCkAByUWqsJzarEanzj2zXwjEGFHuGY+pYsMojzZL1G9EBexXou339IRBrC3lJGmNDuSHX+w7WC4Cm6wWxm8DngLTImgC8pBcGBuTXf/1fXnyTugnFwxTQOgi0CECyIFlsvvJfEnh0mhsYI/s5uxFYi1xZof7oOqSAawwYjRGBzYGXbtWXaCIrlvHUagX6SP/ruMVYCEbEqECXAMjfree2HgA0ESur1/0vtnNwGSsG0RsZME20/+/XWH6Mugk/yngPAGy5GDYALjiIHIgRUIrsZjM7Ax+BSx1S4pfffQVIep8dL7dMDsTGjJB+CvQxTHmdtrw4l0CovFruC2NOe975egDQsCXRK/eK634JhBK90q2C7I1i+Gt0jxF40k1cPJAB7UP2m3MGJAAFQrGei9iUTH9yBUDTHfU3B5+BOIKQ43BWtNtPcWIOzEZE8FoK9K0DCGNxLi3FqaKA9gTgeoFwPQAoI0OulWT11oEwiFz7cwbErzNxWtEYBB+VY76Vh4DWrH8IOoGQ7Ocg1CqMRLPltmxvs1/SHaP4dcAJePYyyUCRIzrTB8tE8FoL9DUMwl61kQQ87Rmy2PS2rgB0a1ci18RudEJH57OsY02y/+83/sZdBKr4FXQTApBvprGgQCg9UEAM+h9F6ugJDkC3gJPBEvRGrYoYCBX9IxEcS5K4i6cZAHIw8oXQ4mLBb35YH5d7OekadtTV1UZSjaEIPH4nQzYNwgjAHNwDuWGYpZc7lzPfX1cQur5oBorfzDf+zi0yVTuSkuxBI2Q+PhQDIUEnMLo1TBCZLufGw/ixbQa0KB8CTODjPohdY78IQmfDjmW7Yo/doAX6GqIiAtDHaYswSmeMubV81kp11L6hy2PdAcgblfslOKC1IiKRmyRxZgV/8++DS8BFrxXi5Hd/U6MeSKdqEsEKhpBRsgRMbAtuG4KU/+9ry5brzP/lPVMv1EPOQegharrVcgZUhVHFxNPcp9VFtlOWkL437C0WABWypFRGsV0sb5Hn2zYBwvUGoKl10v1knDgo0y7XA8Pfv0UACnjaK33Co9gJQAOe64FkNvtZAHQdjz9v2Nz2GSa3jYej2W3KGuZ9ixGdIVSoKT13B2s5AHkGheST6qn0erHv5AIgAAU+LVfw/wq3CEAV7clBKDDGZG9/5oVXx/oyYARczcqH5GyH8eFplTawFvAtrtXLGpNrQDGbejupB3omlIHQGc/ErzOcGSRs8zrhAbbuL1Tco/JfbLlNwHOmi2kIcs3owbdwNpYtynDQhsFcgvuG9/YapGFvYX22zZcAU0/GwA2LJ/4AmGF9mwEbBu98Y3cMF+uAGQCj2HVp3BbPuo3IlqxAy5wHAq4OfARmEBXGfNIBa0BIsG0ecwC67merHgRpZLwocrWaovuTxew/V0txJQ2DWeae3WAGbdhb2DB4+wRw7w5g8Qpv88liyGtoWHzMi4C9fAEHbBi8kwUKu2xNAdBxaGBLbJdZux1LwAGECYAEm6wyfpelJrEgFnRDxESwgyUxIUsVMwjVy5AYO0bG89Auu1/5BF38KqjBHlUAYXsteNCGwTeWNuwtk4JMkrlzGNizA1hm69g1Nix+zDOBW0aBeRZZGqBh8M4emfWNADDT+zqMjQyESdQFHfDbZECCLRgdHeCTe8CBaKJY1rDnBRCIAuGW4TYAZeFG8ZuMkGiQ1IEwGCJtHZBmy1obBsvVMnDD3jIAerti3LEBOMjGcOpa3WfD4ic9t6oveDtLfw7QMHjnH6wPAybW6yaG4+8D4HIQfvtDIVtLejpBFsVvUI7NIBHw3DUjRzL3rDVtsYPOkAScuX3coNDynT2VYJCkn+PjqvUD8hVbS8NgjphGxcANe8sAGNoVY/824BCBtIaGxRe8pLKZdpMkTvXiJ2toGHzSNHDPScAyq3er4qPyGaNc7JCRXWLT2TjwGmCOeQashq6+qSpZmp8vojQpheF58ncdZVjLnjWPHr4VWKTKxrHGUqq97qXu3jp0wPy+eEC/DYNZsZAO6IEb9pY9lNCuGPcNV830ZmkM9dmw+OKfbdcXvJMPdY0Ng0/7GnDXKcDMccBS7MwdKz8KCAKQIgY0MWGCtr4TOHAasMwOkTqf6unyuLykfd254nkb7qsw/iVg7jhgmSX31Vpd9yRHeLx+zRhjEGRbB6wDYT8NdymyubzDzCCGfpMJWfSRYfr9HP/aMgBm7YoxNQHMbQHm+ID6aFh8yS93tAvGQb7da2gYfPoXgbtPAqaPA+a3AEubgGU1RM6B060fgkRoCzj+TcD+04CFE4BldZdRc4/YxlxgjJMewSiwN1zWfsOngdljq3EmY08vm5i/7j5yIMqpvupKyGoNg9lngYosl9wY/0dZdrMzYl8Ne8sAWNOu2MA3zw/F2CoNiy99XbvftrcLriz6PhsGn3U9cM9xMODObQYWCMANwPJ49UliuW6SaqqBn/gGYP8pwPyJwNIxwDK76ahDeN6uXYCuYyABkEza4LbpY5WEWdSLxjF26/dQB0SJ6r4ByAN6NQxmkWcqrnQ00x1DEDJFjR8CcNWGvWVPp6ZdMQ6OVOCb3wAscPJ6NCy+7PerkP5Q3tBY1PrT9tEw+JwbgPu2AlNbgVkCcCOwtAFYcgAuiwWlM/XqDjMEbP9t4MB2YO54YJFMo/5gHIcALV1TRZ17FXOhPtvgtvkqf9H4kvHDlyKK4l6VzvVSBF22uwjOb7pbw+CfcwBSkyeFEHAUx/yw9JTyEbo27C17Ol3aFWNuAlgIn9QxO2tYfNlbK6MvaxeMRYquvL9rTcPgJ30TuH8LcHAzMOugX3QALo21WXBZLEHwRF1OgHS2eOgbgIPHA7PHAezNu7QFWFZ7JnXJ5rnqxHEulvlzwyVNN3+wern5Yovl7SXLGwvn4riLWO4fgMRJXcPd/+pmOymELEhRzBxJAo9gVL4kwVnbsLccgHEpWi3epocCAMeBRU5eTcPiy/6qtl0wpvhA+2gYfO7NwOQm4OBGYGaDs+5ExYDGgqP+ccAkINaVpB8GTv4d4OBxwNw2YGFrxYCmV0YxLNYheCXau7EhV3ga3Lb8g4+R45uoGLADgHWqhsBXA8K1AZADyRvuvtkBSArh+i9DsQhCOtf0UUgW/7aiYW/Z0+nRrhizoxXwFhyAi5y4rGHxU66qAFhT3rDSIVdpGHzencDejcDBDcDsBDBP1uX1CMJRwFiQIBzxieL3KIY1YW5MPOxNwLRb8gs0aghAss1GZ1O+SFHsdRPt0i/PLHu++dFb/x4mXfhcbWxhfCtYMFr/uWvKxfDaAcg7ipPCvFOVpuo3HrCjYW/ZA+rRrti6TS6MVQ+L4NPH2nx698GnXF0BsKa8Iab4dFZpGHz+JLBvApieqAA4J8CPOQuOBBAOV0CUYbIskRkAecrvAdNbXc/aDCxSpyT4CEIyTgRgneiLIp3nP6fs+a4A4N8B8/48CUC+ZGJA29fpuLmxJW+5h5kNFg2jiWHSi0r0Uv4pCoZsxw8DUfnhd4Vk0XGdGvaWPaBV2hVjdjgA0BlpkQ/K9bmn/HOVqtClvKEBqlfD4AtmgP3jDsBxB6DA7tdbcvYzJvQJkii2n4NOeMpbgJktbYPGACiF3wFoEx1ZMNe/4jnPLXu+KwD4t/5SO/iMBcXuesHylyACMBPDgzGg7opM8mEHIGdwrfGA1rC37AH10a64Yr4APvvOSdwEPOVbKxu+K2pdKRTmdI3dqkPPVgbSTBGAY8AsATjWniBdx0QxJylOFCcr6HBiw1P/CDgU3EgEIMW52M8YkLolQRddIN1AyKWiBretf9MJQN6HsaCPxe4rvgDdHOcOxDIAcmDFDXvLnk4f7Yqt63gEIB/Yoj+4p9xaAbBHeUPM8qF2aRh84QQwNQYcGgdmx4C50WqCFngNsgSvQ+Dxu4MuiawhwIAXVk1O+e/A7CZgThY1dcno1nHL2oDIyZULpBsAFTBZ9pjT0QQgn2V6ufRicS8QRgbs5ZYpEsENDejBfpoLrwAOjgIzZMBRZ0AHoUC+SOA56xJwNlEyTFw5FxBPeWvlzpnbANCdQ1eSGTRybMuydgMggVBsKmtYoC6Mt8znZxsZMLzAxoAOvsh+ydDqtXx4FIDl8L/omQ7A0QqA82S/ERdTI22mNfaTuBIIxR4BhKe+y61punQC+MytI/Zz/c9EuvyBeetLAfGZ5WOMZ9j2/gqABB1fMLsHAVBqhfTcyH5d9MByEdzs+B50Z7voGZX+NzNSsd8cwUcG5ASRKYbdHRNYwhhDIHRgGmO0gFP+HJh15jOXjnyKblVT5Cbfoq+yJOszF8P8+VnNPlICkMAzds/YLxlYznrJwIpO6egTPMqA5ZNDAB6iCCYAyYBcBqTRQ0e4630SxZyQJQIvMJ8mSeLrYe+p/GzGfnTpEIBy6US/out+K1wg+brs88rHmDOgAVCMnrEfxxMte1Mt6j7u9zzKgIXzczEBOJIB0BnCJoqgIfDEhM58SWzJEPGJe9hfVH42un/Mfxl9bgSiBySIBWnAJBDGEDAB8QWFA8wO3/a+wH4+rg4RLPYLul8tCI8CsJmJMQAOuwFC9qMI9g9Z0CxhZz65K0wfFBPqu7PEyVdWAOTHVlTcpxhXHZLz1w0ZA6EDLhkCskRf0sw4dRYC0PQ/vVSRAYPo7QCdj7GqVOSMeBSAzUzMxZcDMwLgcKX/zbv45SQlHXDIgagJc+bjZBqAWhUoH/Y+B2D0J7rFa6LYDRmzomsAaOeKqxEvbWacHQB08JkRIteSXiSBLYJOLB+X4xrzAzY7vgfd2S4RAKkDDgPzNEAIxMASSWF38WsgkuXLyXTRSRCe/DduSZMBMwe6ObTd8JBj24Aot07uDObPP9XsIzUGFPs5+JJ/M6oT4buxHv9X7BeY8KgOWDg/Z58GTC9Xq5FxTXOw9c3Cm6k5fPcjgbHbgAlvVG2tH1T3Oavoq6BlniZ+12n5u/2sDbOvasqoFg8x2Lnbcd1GdhSAhXN+7qMrAC4sA8sORJ6yHwD28z+Ft4fdv8UyqUDrDmCEBcpZ39kLS6aq9l4D2rLb/KYsFTPWdfbvh86vQu2s1K/K+zIjTsXIVQ9a59Egs4Y6sZfIA/EcSp/jEXv8BWcAhxaA+SVgSQAkGAMICcwVlNLlqTc9Gbv/HAA7MrL4+f1VlXwrUq7SvCoyGcrrWpGhuur2fNGYwM8YT67hT3s1LaZvqn5MLM0bzmHMmIFSgdFNj/mIBct63NhFZwEzDsBFgpDPeanNgATfCtGsX9TIKwNrg9tuVkhlng7TI/YArX1VkXKrEe1l2SynN1RCsFJsqnQv3UIMxhwIRjU5AGN9QUteVz3BUAvahuNgjC3HxLAND7nBp/cgONXF5wCz8xUDGgCjKPbvevlzcKUHH2ag6cnYzepYBB9Zi2FxDJdjoXJv1WDFiLJ6MKqKZUzoQFTfj2HmwTKcTpVWvcxHKm6kKgoORAEvVclPD6NdzLXpMT8IYNPcLV7yJGB2AVhYrAC4SNA5AxKM9ryDPE5fs6eeVKWGZ2M3S3MQfEyJUKV8L1ZpJXpVJ9pLilmlAxWkVJHKwIhjjD9TtVXVm1HdOy/pJiaMFRWM+bo0rWl4yM1N7oPhTJecC8wRgAttBjQWdBBGESwgSiV0Pb9DRgu0TY19N+M1mRKh8niqFx3rRDsLqjgl9yaGXT80vcL1wnE252PAZCzAHQCoiqoW3yYWFIt664fUpKaREr1NPakH6XkuOQ+YDwy4FMSwgU8GSRSz0UJx3Vx/5vFNbrs/EiLRY+v4ACITww6iJEodQKwBIyBRv9vwhKzUW6z66TUGEwhDS3ezqusAyNxnJn8xa1KRPSFts9YfFB/QDZcAm78CnDBT5U8rCqjfc3yh8Gn/hGd/MsKf1+QzYJ4891Jye13iy1cAE9cDJ+6FpYrEkidxDN3OtXR+FwBGMezoMmxJLOumAuD4J4rxJrfdH/XCoLGFVKiUbw+LAPQqWWaMMLrd6/+JycSIm85w9lOpt1j1MwAwFTiqAWEUxeYH5ENn/jInUVHeMXQ/f/jRePvCa4DhTwLHfBc4frGqqaNJzLPw6iZxV+HTplFGvZrXZT45N39+HW3TujlZv8D6fp8HRq8Dts9XIOR5YtakgBgdrrrt5Qsq8Ssd0BhQ4HMwmVitAWHAY/LbLDQNQDaTVJ8Q6W4qVB51OOqDZDPVB3TLOBepW5jmqaLbec3jGgBGMSxvvemDYkQ9GoKF1ShUCSKCqBeQrvmfVZPC1keBjXcCmw911tTJ8q5XgOLaQgA+x/OdWA2EGZ98gbjleTHdQHQN+2iwls3nK3/Zhj3VeQhovYzdxmArSwQgDRA3QiSCJUrTnjfl4KozRCSCCeYmt90EoJJbVCk/1+FiCwFZxLk4dRfLFia6x8LbYkD9v9cXtLG6+O4AYQRfrgPygVIcqyhTXcWFOJH8fh3rz7EKwnUArq8mcGwK2MCC1i7WY7Zenh56feHT/jE3yliE4TZncd636gPFCKWavGhcRx2J+cvs9MlSw0Ty3cCm+c7n0G0MExdW4BMIbTXE9UCynvyCCX+Ovm4gbByA/xisVgJPpXrzLj4EoRJjJIZrWHArS9iprK+KcefgiyB0XVKGjOmCmW9xhRVMUSyRFnNeFGEdI2q+/HFXclkp9WsAbgTG9wGj08CI64WxRk/OTDcUAvBHXSLQxcVCDMQSWbzv+1e7WVbz+k5w2tJtsbcCYV6WJY7hmAsDA7r1Sz3OgOgoM+KTOJbcjSI5yGIaNE1uuwlAAU/MF+tF5/0sIghVLdVdM2S0bSzHx2Mi+FTxXf8X925NC4BycK8QwfmgVX1LlcFiykEMcL2BndJJ7aQfijKfxLGDwAhByM7aC5U4qwPzNwufNnNuOH4VZaCPlPo2AahqFqoPVFc14ga2m+WEEL0cAz9kdPrOmMu8r1o/rTsXz7f9oswFs+jO6LAqkvC3Ggg5Fg6mwW03CUI6X12h8lyfcz3QHqr3DIl64DbqaQKc9mI87QXACD6vpJqY0EVxz2CEyCI5eMSGX2e7VtI5J4yTRyZhscrvt1nQuivOAaNLlYESwcySgiVbr37Bfd0/u31yEgg2FVaiPCeVOguqAfGov0iR0R9JABJ0bnwk9nMxw+fOh55EbgRhzozrBUA1polN9CLwok5HEEUQBjFMQB7D+j656PW+IrJ8O/bBCo4sGFdGejqiyYCx3mKe9/JtTiBvmI5OFiTisg9LtJFF7gZGDrUbHKs79+hyu5hSaUvh1foFr3r/6vZJCiXgCDwVVFJ7MVmRLsrGltuFCc68yFdACMDAflwR4QM3HPoKgIExt4gz42SuaQb8hBOE2oZmlu+KFlKR3QSssMJxDPWbbjpfLoJrxG8CYT8MKGZSVTCxYFTIb84nkCxCIPLDiby30gXFghaF4c2ReR466Uu2fvoFr3r/fKAEFxvpqMcd9yonIrkuK5LLV7MVCM+/uDJCyIC2J8a0z1iwqyESgMl15Sa33QKgmtPEBnp11mwuXgO70Ud4DHWzfgDYC3zBEOk7HlA6XKyHQzb8HgGoCSQLqsxorIy1Bxie7Wx0rFaf+wr9Xv32C+56/7HbJ5VHtRYT+GJrsehHcya57PyKAQk6+vBkBZPpjPEExlwU59awg3C24W6KBsC6tqHR+MidyVG3i3rdAnAsH2T093XT+zLr197MTA80h3SfsZP2UqpCrPQ46oF317VrpeiKXTJ9MhMLkgGdCacKG/mupV9w1/vnwyGgCDCKWzJe3lqsyzLWZWe6/kc/oKzgKH4jC7oolhdC4jiuzM0WPo+cPQ2AsX1obFCTO5Jzn566PwbReiwnfTWjI4KvDoh1juh+aT+WKSYD3i8Aql2rJk+VsVQly5kkddv2FvHT61icqO7Fr71/IkLNXOi0FQjV0046oBy6wZ922Q95ICqDEaL4XWw3COcf9Mw73DFB9AqE6wZAAS8XuzGQIDKf+oVkqxt00ttAc+YT0PJ9qRFSB8xoye5Xu1ZVeCSgCLbYLVNswoncHxoeLwCzBGjBNki/4BX3z9lXgUCyIIGmhova83cRgO5Te9yLgP3MfmsBS8xs8/U67ePQOqy9umBUruDchqo8sHSd3PMfT5ifo+ack8eFHI6QEcnT5GvdOnVdXof+ptJ+BVPWceiaRHA8Us/nkACo8mzqlqmWrbFDppT5A5UIZm7CPA2Vgm3QfsEd909kKIqB1qJAKCBG8ZstZz3xHOAAiwmpDIdng1maZQAkZzsHZ537YfQrwNyxoQ+HakrnS0h1mUA1C96TdJTmORyhC3oeqdwROi+GDhkFI6bYNrcNDEDeAkXwQizPRpmnIs3OdqZPSaRFUcbchHlgie6agq2kX7Dd/+d8lUJVXuUzk8ERmS+2vfd4uvN2VOV5rSwb0y3JhgIh9wJeN3YMQCIgR78Q+nDEVYBYZUrUpbXFnM7COSdf7N4IPvtDnT2BY/h8Chh10MXQeYGS+7GGjaQiABpuNIFiECnzdWJMIUHcazLptC7YivsF8/7FgLFMqpiQL5TuNbKfA/DC46rqqAbAwIKWK+timRUBEiNGsOQsyQm+Gpjd4n046hbT84KPuYjOmHHyp92gcgDS2OoIuVIeh/xyUkaVwyEWdLrewHE3uBUDcKIwnq40HpDXL+n3CzbaKdguel5VnFJl2awaghLQBTzteZ0cjLq2A2n0M6EPh2pC57Wg41poLzZsAZNso0Hw6eVR/J8bF9YjWGmVCpGKwQLBRCcrbiSxNLgVAxCF8XSl8YDHHFPW7xeFBRwv/rGqOKUBkODzqgdWPYAM53vTASMQu4Bx9J+69OHIF+N71F1O1gUB+AsBfFqKC+4Wi4BWX+CYgOTAU36wdMVNVKka3MoBWBhPxyiuko3xkSX9fvGMkqsDlzzHC1N6SQ4DoINOe7KelWWTheziObeKCdARApD1AdVnRH048gKUAmAEYi6Oh4DJV4VoGDWqjq4XLbO5o1jBoimEPhPJmwu9FvnTLgdgYTwd2wyXbMyRKen3i2eXXB245FlVYUpVxUpGiLtmGBlrTEhVUwV8dEkVKAq3MHJ1uzRbRx+OOgDWFX6MsXJU/36lJoEoA2AKvw8+uwTEDIBbStdOs8ddDsDCeDom7ZdszBIs6fcL9ror2C75US9IxJJsEsHdGFBil4yYuUwknofJgF4XcEUfjrz+X7fKo4EJJ//PkMORO6FrVjQMeL5kJhZMMXzLwNZCt1nzDFgYT8cQwpLt4hDON0i/X7ys5OrAJVe0S/ISgFY7j9ZvnQ7I3+lyqpYaL98CWp/N+nDkZdhi6bW8An1kP3fRTLKVWlwF6RZCH2L4zDDR0k1IqeTNb2OQSYNbOQMWxtMxeqtkY6I+ny9VEz6btfb7xc+XXB249AoXv85+tIBVgJJ6n4lf6oV+mfjdDJNMH0wAVFX90GMk1f5TxlS3Fggh92DyN0IORy5665KIfCktsl+K3VsGtpVOWOMiuDCerlSnjQ2rB+n3C+pIBdulz8wqonrNPLKgwKaC5B3s53qhXVq6oDNg6sOhqvqhEr3V2VNLBjmnSSNdrOLJ1zkAu6VPRjFcFz4fXDJ8i45hG94Gt3IGjOFYA8TTlQZ/qGH1oP1+8ZtlT1MAtHK8mQg25zOZUSCLIliWcbw8wfW5Ln04ssqnHX04euiCk6/3de66MPpuAQVZAEFkw2MKFw6a1wEL4+lSBvmAOMhD8vkOkFX77feLNw14YT/ssmc4A6oOdHBEkwXlgjH2k4Nal6wB4fIuX9LzZjAmorNeHMo5Tc0OewHwDTUh9HXxfGJsYkAbAAAgAElEQVS/uvCpoAcew6zBBrdyBlQwwoDxdLZWXLDFkHyF8xGE/fb7xR8XXByAAVC1oB18HQYIT+8uGfP75SCUs1o64he8v4j6cIQ+IqkPhxrBCHjdjBH6AblQkAeY1ondukSiELmsUPpjbyp7XuvDgAXxdNZVvWCLIfmKg6Bbhrjup98v3lVwcQLw8gqA5v9zC9jErutltg8gMxDWWMBaMVkmANWFyEV6R0uH2I1IzW7ypbkQOTP5f2ch9KsFkwp0kQlDAOmxzHpscGuGAQvi6VD4RgmAg/b7xZVlT5MATNXwqQc6KGwf2U2uGV2uzg3D4ua7fDnPwZcKgIdq9GaIBPZb0YdD7hgyIFWMXiH0eQ5vXS5HcMkc++9lz2t9GLAgns7KxxZsCkgdtN8vWD+vYDMAUpcja7lOR9eLVcIP4tcuob/3AOHCdW02VTX62ApB4Mv1v24gnPy9HiH03fJ366KYHYTHsgBBg1s5AxbG0+HLZaOp65i+ln6/YM5EwdYBwGj1cmUkE7+8THLNdAHhwrUOXtcrO/pwhF4cct2oN68BMDCfmsJM/n6PEPoYPp8bH3kCkbtjji2tJJA962YAWBBPZ0WBCrbYsFoOf9pDAiENk179fkuvf9nTXewKcBSjsn7ldonWbgQpx+26otaLIwAlfi2QQSJY3Yjy5i9dmsFM/oEDMM/Z7Uf0RiYUA7J+ToNbOQC3e0WBBm9qLad6HICG1ZK1XB5PoxnuOOIcxSXe/Of8xHV/P+FpwN47gKUpYHmuSve0pKZgCKSq5wqniWE1WZz/xouBm74KTMwBI17lVBXwtWSs+8/vL45Ff3vhpcAnvwos8d48DZX3M2hx9XIAnu0IIO0chu35AOgLL0yuG/jOmwbg028G/mNz1YWdETbm4I5BrFlov+EtD2wIo7l+Atg8D2xY7iw3V5diEqO54mnj6XdMAYcU+6gon7A3NSO2qFjlyZYDkAX6uD5Iam44YaUfVNDNxaJcLIPXcGGpfi6PnZdVD1wPspQBX/wl4OaNwN6Jqg+xwrxslcVFuYJblehkcYYZGPS3L20BxueBcS8nwg5H5kZkx6TQSbXFZcCQKadx5Cz5mPurAFxrRaa17pAR2PFC+ElSHKQ/0QjQcgCyGyM9v3SnsDBRJgL6msWCf6IfWeUJac8UFlpY8500DcCfvgb43hiwZwyYVhd2D/VSrKGAmIDnBkiafEcN9cprHgKMzgNjS1V7rRjRlceyrqif6KAkMgXIM+6tAnDl+zSL36O9+U8p9jGHQo285/2XA/AnXeNnKAorDXH/AILwbSvLEz6Ql2+cAf/3XcCdw8DkKHBwpOpFbE2wadzIdyh3jjNQirYWEwYq+/zJwMh8pf+xKNSwM6DZMmzNRRbM2K+2Ii6TlFrAWfd5V3i/F7IgT2LBF5LbIdkqxLPWvtzlAGQ3RpU3Y7AiixMxLOUB2t7pKQ8M0qCTnp8HkojJgNqaMEJesQv4AR3Iw8DB4QqAs+6SWRiqgJgY0HVDAdBA4Ba4xN7ndlSFAAjAYX4IPO5dBDMAdS2i+Jx7XTf1eEdTDfgAQnR34p/wQkRmjNAoByDT/ugFphXAmjAEn8qaPQAgZCs0lSckCNmVigEbFMsPBBE3DcBX7gLuawH7hoAD7EM8DMw48AhATrjtQwiXoqkTEwWd7LOneXNCbz6Tiq/TInb2M8ZzIFrTQbGiy92oGz7pXl/7jvdAJnb2470IbB3T77Sai+hyAP5voTqW6sKwFAc/TAdc5+3dvcsTrvPVYSK4SQb8xV3+6IaAqSHg0FDVh3iOIFTIFxtit9orL5Z/LD1Q4s+B8OnHVuXwhhdd5DoLGsgCCJ04q66X/Ju/vSaeAxDPvbdtmdtKDV90gVEPIl/xySkviOhmAEjrlzSkwj40SlQZYZ39I+8JBMx8mZryhOsKwqYB+KpdVSDFvhYwPVR9BD7uyX4SwRS59nNI+bRck/DzJ05v12M0nY8fAk8iWL5BB5qASPGRCi8EVjzv3mqpkC9ACrrwhKukB67GhpqRRowQMqCiYbj8oOoHeUWpdYIBAUj8c8WjrjyhNIJ1unzjDPjqXdUjJAAP8TMEzLYq9uOHICQALe/EwWe+QgddAqCzzD8+vgIgg0qp+5nYjaDzCgjmnCYone0klqP4JSgvvK+6LoFPoFMlkPGh+0rPWta4RHTNJJQz4M8EAGoNTPVU8opS64CC9zoAWTFChcq7lCdch6s3L4J/2QFIEBKA1P9mHIBmhPh3Ai354RyAAmWsR/PRs6vOR8Z8FMPS97yxtIlYgVB/I7jC0rIKSfLXF1EEB+BFFjQ3jCLA49OWsRTTEPzvzQEwry7VrZ5KwzAQAPssT9jw1dcHgCrORQCS/bgn+1HsCYQSveaHkzvGv1scgU/6R55Y1YIxhvOm1EZekQWl8wVDxJgwc88QiJc6AKX/meHDawX9z16M/Em7bO8Q08GBP/jEkAEVjMBoAFWXUjRA3KtNwOBXW3EkAZhrALktpC6lKtTV4OU7RHB+3kHWgv/zrnYZl2kCkF4uF8MGQGc+MqEYUCA0n1tkwxbw4ScHAHr71Q7W4++c8czwcBAmHVB/c7Bcek9b3FuwbdD/kjGWgzJjQ3thGmVA3jhfOyU+RxB6FamOFp8NrhsTgLy8Cpzm5QlVptAU+6CiNgXCaIQ0BcDYV8b0P4pi30vfIxD5+w72C9aliegW8MHzqrmh/meuFhYi0pKbs6D9fsh/n1XFMrYMbPgUByCZz6J+uEknDA9AornWFRb01WZEsACoHhOqyC7wdetT0QAK2KqOb5MCUvPyhLE0oQxzqaYNXL5xBvyVXe12vByLADjXAvgxBvSPGFGMIjCmJbEW8HfntxtQmxT0cmxp9UPAdKAZ1upA6EB7qgDo6oCUxXRtPVSpAwJpnUhuxAqWCCYK1MBExZljY5S8SYr+pxAFAuBayhNG26jw8usCQLX0SAAkwwcAEngyQizaXoziIli+Oe7/9kJvNk1LmBMe9ECO3XRB7aPeF0EYHNVPdT8gj016YBcWtBfBVYJuz7mF7VgGY/pO8f5WdQ1/7U67nIKNS7j0wIbDPFZsyNHHY7od/xdlEHj8CcC3TgCWHgGAPSxiSdt4312u/8SPAl8/Dlh4pDeZW2PD4J1c9+uyDaIDkgEJQKnTfG/N8nUAmu5HUnMW5ARbPfEuIHy/ACjRK7FL5pOR4RaxgTHofKl8r/S1ZWBnAGDKefbn3AFIPRPXB7sFiVQimKVgGdl5ooNwLQ1/1U+DQGSXQ9r5Evy1q9rZbP1lGQDZsPpzI8APHgXgod7qUx11YtBbFzC+/C+BL7SAWwhgdoLkONSLqy5oLogYft3ZI1F7EAC+phsAnekokhP4HIzml/PvthQWmPB9LJ7jxkcSr14jWj4/0wFlgJD5eoDw6fe4DzAYPHokWhHJZ3TFSkn4h7YOSOBwEtiMTv1aY0uktFYTmI2/43EMQmCuAJmUE0gmVD8EFdPpdnxhVhqzDr8F4NMtYM9Jfg98EVTeNu9Q2OFZBX7vr9vtgm/lcezczZ61ZNN8DCvilYCdPXqNDQpAlfGTKm0M6AA0PTAyoMSx64cRfPQHXsniOTI+fEWDFGp+Qb9BeySRBV2kpl0QxxGAlHDmkI56X6z+EP7UDYSdRgh/IouwIZ36lHabBE0GJ0r10Rgb/xA/tt/j/6aMAf+7R4CxzuBXWRGULwBfIrY6UNfpvLae7n0I+LO/reoLMqiVMbW38oUhkNkQIzZO7tIweGePcmWlAFTjAYHPVGwXxWoLYblEDkLuTT8MDPhXLJ4jALpaJB+ggU6xfgJknT7IKXIQXh4Y0FZCog+wxiUTwSkXUbSMV1rB/A31OXWuFpPUda/mRHKi1e6U+hA7Zq7l+A+UAfDtHg/LrptkQpZ727cRWOL9542Pa3rOvuOqagUltgtmJM08j4/PILbIDKz6w5PAHsbraTnMGdZWIwIzxIfeK0rn578J3LAVuH8CODRahV/FFQ/1IumIvXP1QudNfyNT8oVqcHviPcBd48A0g2RDuoDqHdb2SalZAdG9dnfDkAE0gXnH5ijWCDbKCq5/MRiV0QD8HgHQ63jG0hdsLGxA3x9Bw1Asli7hO3BwApgng/Gjvq01IHrXJ7q3Cz7E++YziF2rs1ZLZ+8H9jJsSoECWXj6igmR87aLgfbGq4GvbgLu2gjsHwdmCEIPSI1h+SkCRjpfUC3iNWcpoRrcnrYbuGsUOMBo7QBCxSTG/igxVcBIVGPWM1h1JYQPnyKNExGZMDIJ9b66eEBGxPDY1Y5nv+GCjfGAxD+DDpiawphABWZPjwNzNLAEIH4XCH0M7/5c93bBfI8Yk2cgVAdvdT10ifDkBWC/r9lGH51NhIsnsWHOfPmEUKT94WeAG8eAO8aAfWPAwVEHISNQlKQUglJjJExqC+H6Nq93kOpUg9szbwLuHa66QzFWkaFieXxi6hgVHOMCYGRuJ+5V4jYJIDKI9KlsAvFDq8QDrnb8NWVPh9EwdFkQ79TlSMIsN0Mi5s9MoOGno4U6f3YAvefL7Y7rvdoFLxOANSA8f7xSgWmd0kCQbmZ6mTLEnJ0UqWLhUkxlrBn6n3wWuGkYuGukCsufGq2iojnRFpafsU7MDxErJuZhYCsJosHtWTcBe1oeq+hxigJgXBrMmTBPnJKLrr+VED54ibHYvZos8sO+DNcrHrDX8YVVyglAKud0LtMjFPtNMz6QLDY7VomLJd671AEH4Xu+3g7nWq28ISvX58/hguOBg8vtFQvV/hEzxfqOevuTfpjri8vAWz8L3NYCfjBc6ZYHmBcitnFd06pxyb8W4gPlgonBqffTtdTg9pybqiVNBssyUsdUD7eGO9amnf3sXtxQipl7Wg/sD4A8AwHIyZMYky50Tp/xgN2OL8y051qw2hXzwRCEdT2nmck1RxHG+w5jeO9NFQBpR6ldMIMXlFWgVndqF2dVFsJzuOgRwMElB6DcI6rznemD0RnbwQiSRS3g7Z+tVIl7PC9kahiYZm6IizuLigliT/VoUog+p8P9l3wJ7qGEanB77k3VczroUToWLCsABud4ypaLCUoxf9i/9w9ADiICULrQRWuIB6w7nuZrwaZwLBGwClSqSyz3AhHbaRGEFGOmC44D72UVgjW2C2Z4lIF4ArjodODQcqUGqAxfcpG4mJVuVqcL5tbs2z/veV0tYK/nhTAqesYNHdO5PCJZos+WuzxHJIViuXFyJxupNLg976ZK2lizUKodilGUgzyGhokF8yw5Mf+qRkjdjfuDtwkkm7DTkNaBaQ2ox1q3eMD8+B6O3H6em8Kx1Ccx9ptWl9iYIUAAWrI3I3nHgPdOtsO5eOuxXXBdj0V1vOL/so3Cxef60tlSpYwveKf0pAu6ohfdJ8k4CUqgvr5jV6VGTBKALeCAh+VbZLTnh5gu6D44A6H8cVlkNK95O1WkBrfn31R5HSy+JCwPplAxRegE/2T+AloGncNmbQyogUQx/KwB4gHj8YWNTwRAOW0FIIIndoqNkTAxz/bd09XDGLBdMM6/pLKi5whAX60gCK2ujxzEAqGL2pQ1Jis5AJEAFHvTujYAKjRf+SEugm1d2COQLU/DAwQ44caEw8AtZzSIPgAvuKkdrWMM6M7xCMBoiBn4YpCE2NCfxWAA5MEuwvCCEICwlnhAHV+YORfDsWJGgPpMKwg1b9QpFnzHbD2BK2JGul9s8KkYW17vLALQRTCBpzXZpS4gtCXXMAkduuAy8E7PijPWprXJ5CR38ygw1fJDohh2BlRAgq2OeN7uTWc1D0AFNtmL54ESBsCaJcLkDajxj5ZXRiCIGA0waDwgjy8sk5+HY+X9ppUbJSCp6TnFCMXwny1WAFQ8rUAc2wUrRL6mXTAefWnFfnz3FpbagQKLAqAzoZjAKkkpXkNO5GCEvOMLFXOnnC4xIKOjnQGNdWSM+GqHQGd7JSsxUf+JzQLwhTdV4je1nQvr1MkPGtlf9yP2Dy+gAqZ6rQytfvdHSDxgLwBF8AmAYjHWluEDiKGMiqOVvtejXTBOuRSYJwDJAARgZAGWL9Nk+IM3SzgTydE4eec1nZHbtDaNAf1Dpd/SMx2END6kD0oXtFhBXmcY+OY6AFChnKnzl7NfdMR3qCAae2B+VVMYXASvDs3/X/zHJZcB84vuiqABEo0QPnhnwqQLyRURmZBPytnwHde0M1vN2lR6picoKULaxHDIEdHkW2iWg4/7b5zb7DSQAVd0/griV2JYojfpwRGEYsGBrOBmx/OgP5sAKANkcbFzNWTRnX/GSGImMYH/LYlk+gGvdT+bW+SWH+Ig1GqL5QeTtR2EYj5LVHfjw/ZDwL8yJ6TB7UU3VVoTjTYxYDK+Ivv7dzNAZIxpZSiU8jjKgIWTcykZkBawDBBnQdMr5QeTKI5iWCB09AmEb7+ucnOQ/aTPWn6wuzyS4u+R0Ob6CUGqJpIDA97AdqINbgRgBJ69CG4Jp6q/ckjXqB/RKla4WpkO2ODgHoynigA0JiLwaNiEt95YQKJ4FRC+7brKzRH9jZbN6iJYuSHm9I5iOAOhHNJfZkh+gxsBKPbLu3+JgaWDdojhMO5kkDWSlNTg4B6MpyIAjf3IggJgMD4MCARjFMU9QCgAykhSKnUCYHB9JB0wy5aTRUxmup4h+Q1uAmDs+hpXgFLnB6ULONOn5xACNJqxghsc3IPxVBGAiQG9aLeilWUJW1FvVXEN0TKp1C6At19TMSCBpz1dHtT/JH7N9yaxp6QkF73KBxYIr10nAMproB44qQGTj6sjUrtOFPtLeFQHLES9AdDFrq1E6M13MaxVCTNAXNFThIylLcor40zxtgDAPKuVwDMrOKw+SBTbtR2MND7sZwC7Qvm4wqHa4T/uIrhb+7n0EgbQdTijoyg+agWXT8llDsAFWr/B8qP1K7bT0pvtVwHhW6+t2C/m8svvZlawi2CKe37nhFtapkDnILRqBQA+v04AjMyn79EIkXO/DnzyCBwVweX4wxs9B4rRZgyPVFqykgDd+5JSpBU5r0vHyHz+jsc3ub0KABsZMCyQgeExKyFPVIz3lmcM6OfPAGCADYPE67Jfs6h7G0o+xvi7oyK4cLZfOgpsXwC2Lq9MwuuVERonKn4nSJrcXnQKcM7dwMMXgYcsVxkSebJgzOWPqdB1ad2f3gpsnwK2LXWeR9m3danUIV1lBSCPArBwtp+7DThuBti6UDWDmWA/DvXk8LRptfPtNUlihYZTOPCi04GH3wFsnwGOW6iAs5n3GeJJ+KLoE+9VDClQ8R6vOQHYegDYwuY3S6H/iJ8jb11ck0q9Qhoc9QMWgPBZJwFbpoFN88DGRWBiqQIgWyJY3lPozaGJ1KTEPh36zpTkJrcXPRE44S7g+Cng2DlgyyKwaclfFoIwvCwx9Zn3Q1DmIPx/2/sSaMuusszvjfXq1ZRUElJkKsBEGQyYhJCBSkUqAW1tsBdpuxEVaBzowXZqe1g90G2LotjQdmMjKqtBxQERdAWUAkUlZNBGkQRNyIAEMAkxpFKpqjfUG3t9//m/c/+737njPq9uVeqcte66b7jnnn32/s6///3v//++Tz0dmD0KzC4DM6vAFpd/0L3Gh6yTDgnvLwKzAWDGiH/ThcC2OWDrErB1pRgQisIQhAa+AED+HEEY6uNLyrRnZLSl6tSbrgLOeBQ44yiw8ziwfaV4UGbdegmA5QMTLFlqsfn7XecDW+eAmePAltXiXnkuZSBkRcm4UGXtU2uo3xsAZgz6y54JzMwDWzkgBOAqMMVBCSAUObh8QuN/CiTgcWAuyWhL1amvvBbY+VgxbW477paa7gIBqCnUrbUBiQuhAKDUot13IbBlDtiyBEyvtO5VDxvvVfxW/JkWNFrCeK8NAGsY7BsvKQC4hQCkJNaKy2LRIsg6SJ3IQSe1onKKC2CsOYMeN+0Dtj0ObDsGbFsEZmWp5S74g2Ir2uA22BScAJGA+dJFwPQ8ML0ETAUAkgDTPq9zdK/+sMWpPF19NxYwA4g3PtsHxAE4SQC6FdSgmGWRRIJLZJll8EGKjHiX1jwaN10HzD4BbD0GzC4WrsKMW2pNobZoCu6CLCDfCTqzgg6sr+wFphaAKQfgZHKvpRSYg7HN5XCL2AbAZwPrZGaj6ippXhgn0kqmU1woxnHedg5AATuWHig2FE1uVRwoxoX+Wcbg89S3AqCKPONcCi8oPtVP+9++G3j+oSK2xRBFDElUxbTS+3nvc4FpDsjxllXQoJg8FgdCQoGJJTTicLcQ6vPL6wbg9cDM4cJv27oAzFA5ky9/UOSvmg8oP86n0dICBn25JwjARWDSAUgBHN6vfdbv10AbARh8X91vDM2ss+NvAECKPVLCsHoyUgRqrlbnRwB933OBc+4DXrIC0IEmiLnE75di8HsyAcjzWUVGUi6uICMpVwwJVMXdeOk3XAxc+Hng+vV2esAYw+sWoP31r3eLcLwQBeQUrEHh4Jo2h4vDmJPuAyMLGAeEn7uqbgB+I7DlSWBGCwe31Gb9aL20kGDb/EGRxY6WTz8f2wtM8l4pgL1SgM8esHCvsuylME4nn9cfQLtldg6TZ0kUKorAfij23vAPCmqp3fcCl60XFINid1PlZrf41/dnApB6wSQjutUfIDJR8CGIQOwWEH7DywpKrWc8CFzqRLHkVYrB2jS2FQH5vkuBycXCAlIUUAAkCM2iRBA6+ARCe7DjYmQduLYTleiQ/XTTS4DpI+6nLhZW2nzVCEBaMLd+soIGqjD1ampdugiYWCpeBKA9bBJC9ActAk8LES26SqsftInLZ44dQif4Igdhym5WLrPDyuYH/7HTCNwDnPko8LXrBccjQaioe6BiKad3+QY/MGTH6rS3OBvCnQDuAIyqhiDkQ9RX+29yE3on8IwjxQPI8zkTiApGU3oVkD/4fGDieAuAdMw5MFQjEgg1DYsUku+a3uI0TGBfV7PotwHwaOEmbHEATvuDIutni6UAQoFRIFRYhfe/dhEw7tbe9Of0Si1g8HkrwRcevDajz07gIJ7n05rYyWIpb4ya/7vv8PRdFpj/LXDmkQLAnA4jCCOlTBRN/rFMAJKgkkVHpGUjySSBSFeg7/azqk8EgbSEq8UDRACLKDXSyaQ7Br//DcA4LSCtwnKhTEkQcmAIQhtM+Uaajl0uS9NatITXWzpzfcdNB4DpY+6nBgDaCtanYLN6fCj4u1ay0QIqtML/EYC61wSA9tAJeP6eWsAoDysFpg1eB0HIQRCIIkVeCqQf/05P3WCB+UPA+CPAzvmCaFWDKEuYcl1yMN+Y2dckqGTeHPEvvWDSNhOAfbefX0A6rS8CUw8X9066bFIfdqMHJID++DJgLACQumyc3gyAEYRRKFCLD1eu5ODLF6QvXedx0w3A1BwwxdAJLTXjd8seQnGrZ9bPFxLyA7WIKON63tYtCQBN/sv9QPm6BkLp0vl9t/m6ietR6fbyBA4gnXtORwRRpNnTtPpW6gWLH83lKqcOFTEnDiKtoHwy8RNFhrefyeztbnrBfbWfgttsP+kIyO32ELD1cHHvInrlvWs6TsnB7qAUlg/suFtAWkE55zYQ0QpqcALoNCXTEt7A3KoaDwGQfqoAOEUBa7fUbKctltwCajVbxvSiyvoasM0BaBKwwdKb9fN7NfcqBWGiSWykWXER0umeacUEonQgCKRfIgDFjya5yq8Wfsfs8dYgiuMxgpAg/vnMzu6mF0z6Zj5APdvPQec0TEosnvQosGOhaLuIYvnwEYSithE52F1XFAA0p5yigD4otCqygFKnpHUpLYP0OcKURYv6Mj4MNR433QhM0gL6QongawOg+6rl9CswKoSkEIxPyTsuAPigCYBmAXVfYcVf+n0SRYw6dP1YwNgHsgSajiJP429RrpWOM6cxDiJB6NINM4w7LbUGMQUwB/M9mZ3dSy+YVG0EoBiDBST5ddZ+PkCsAiIlQZDa3LVatJ0WXG2PbL98AB+4omB3oP/HgTUhmGgBfRqWf2TTrUSjExDSP/qWzQDgfAFAWyzR8rkFtDAKX75jo6nUguZxZ8NByHbvvqBQ36T1swcsBaBAGGRg40Ir+rt9WUDhQ5ZAU7Es2e9LLzglqHRxNkbeuW+oQRRls5jaMjnK0a9ecNf2R4LAwO829kQB3LTtEYQPUwzQAWgW0AGo8AQH0ljp/V17pm0KRcEifGuNOnocO1rACQbKPXhs8TtNwVr5uh+n6Zf3wDgu29g2FdMtOc8B6PdpFj08ZFrplw+ZA5FTvAQQ0/BT36FPDkRqBT9Jag7xYlQItY0f88j78sZzCcKPZlrAQfSCK9uvB4h577SCotUiEJ8opq8IQFl/PUBPEoBLxbRE62LSqG4dFB8r5bHcOtiOQSqT5T7RKzYDgJx+BUCCTxZQCwhaQc9oKcEnEBKknj5FsJ1LAPo9xoWWPWDy+6IIoqbeaO0VA+zHB0zxIQDKkn1GgtXiRxMIAx0Vn0Db+lkuFjLRCt5WEwD71Qvu2H5OfekD5FaciQay/GIbFgBXriwAyGmJADR1ck3DwTE3TQ4B0LetzBJErTYAr2BBSI3HTS8tLKBZPo/fWQDZp197Z3scjGb5BDp/L3+njMweB6B83Gj9wj3atOsPWin9WgXCFlVO/3ctf4iD8XkBkH5USlAZlNPZAQqARr5vxu1yjmH0givbX0UQKI63o0Wun/xHuR8E4VnPK5JQLd4VNttTBvK2uoiKOUf/f+GjwMNBh0NMV6J0c0NpcRv7mrYv3kh8/uHxYp+bVpwLp3R7sts2YzouSq3KGa+q7+x7Co4nazAerRKsVlV1QitF59dyyFZaYY0HMu9mWL3gtvZXMbymBIFMZ1ov2h0B+LTLisxgW+Eq5uU92iZ72ud9vvR+4JFp4NjkRh2ONi0OB1/UBCkvEYRhfuNs4OmhhiPKnFQlx6aAjMnSXJUAACAASURBVPjmz1w41nnwO4cCIBvBwZgTAOUHRq3gyDExD4zRGVYEnpm5LqmQc0M5esFt7acFl0SlHiBxuTkYxxdaihUC4QVXFu5FCUD5QtJl85sjGA0ziQxqeu/fem+hw0F2fLLQGxFlYMRvo7v1WmIVtpt1DFkXvOR7LwJ2HSkyoZmEypoVVe8p7b6qEMnidGG/Vl/L2aPOIwuA1pAIQE3DAmFa4j9f7CPaFpCHKujr5xzZesGdHqAqKz5X+FLRAl58le+jui+kTBALMcgZ73CDBkpN2/7+bfcWOhwUyCEAjQTcAVhKdjkPc2RajewKyu/n1//qJcA2uhBMRGXQOcn9U6JIOjXHQqSYOsVoQp1HNgAvz8yny80H5PVz9H6RqVd849WtXQ/zA0Ow2ayGLJ474L0G79vvbulwkJi8BGCg4S01SKqofoNvSIC+5zkhFUupV8rUTpJN06KpaBkFQm5M1HlkA3AyM5/u9Zl38zrk6f0iU6/4hmscgK5ISUtCTowyDqb7UxwsqFJW3fo/vbuIBJEZ1YRgyHwQKNi0KEl1OKTCZJdxtPDn//v8ooaDaVgqFyiTD2IKfcjZS4Fo+7g+HXOPv84jG4DIzKfLzQf8KVfI/FNKrQ6h94tfz+vOA9cGAAbrpylY2SDlVTTt+uCnV3/V3a7DQQAysJAwobZJgUXi78Qayhd812WeiOAZzEyUiAkHMeu5BF5FwZQAWLPwknkLQy9CrPMy8+lIHZFzvN3T+YbV+8X7c64OHHix74V6zIxB+RJ0wQ+UU992tYoFy3fcXcTDxQkoPsCUhFIczKVCegSg5B8A/PILN9ZwxBSxtiKiUAOi7JW0dLTustF8AGbm0/1o3vjjnSGdj+lYlGwdRO8XN+c1wABIoHk6k61yuSCJITq3jDY9Vx0BqK++uwAfX6JkI/hME0SC1EGguiQ+isqcQRLrF6/0jO2w+6FMnZhyZYsQ1W50qOHgPX1NXndtODsfgMwHzMin+0+ZN0S9YOllMzWfLwKQSS396P3iY3kNOLDPM1y065H4gOW3p4uTDkB8zWdb7FgbdDhEgJkCUDRvogTmd/vPv3BVAUBuvylNzAAYi4hisVQnEHoIqWblrxqm4Mx8ujfljT+YjsWBYgIOc0oJPsq1slCpH71fKybJOEoAuuVTRSCnYlmU6P/Z4iSJEcbLv+Yu9/1EAh7JKEXDKxq4ChUiKymRbwjgHdcUWTARgLYXHSr2LOU+BV7MVwzxwOfkOWybYAGZD5iRT0edjpxD6VhcOQ6j94tP51wdOHBdMeXa9OqWRcmWXA1XLUIUH6zyCwlAs3z+YBkfs1u+VIejJEF3ckrjI9T0y/aMA2+/tgAg08VURKT8vbKMUgAMIGzzAcOi5HknHQAz8+l+MW/829KxhtH7tTz+jIMAJPCYMULAWd6fvi+EY9ouoZBM/Kx/4LUBgFLgNC5o16FrE8JJVJgkiFhaQQBv3+dVbMrWVsC8UxFRkjjaVsW2DtRdOJ/vAyohVYK7A+bTvTdj8HlqTMcaRu/XxHkzjgNkIOWuDr8jnYYDKDutgpUhra0uAlAyCCUAK8BXcjBXgLCk/h0D/hcByDxFAdAzoFUqUBYRJTUcMWdPP7ONL6i5bLQeALJRQ+bT/W7G4AuAOXq/lsGdcRgAY+glLkYclJVTsa6ptCX3uQjAKINQstFrAZKIwWxQIhIJuovB/Nx+r2LzFCwlj8Y0evl/MYk0kieVtcvrwGUnHQCVjjVkPl3mItQsIPuElx9G79dOzDgMgGkAWlNyBJn8xKprBRC+zgEo4LWRgcdVcOCjjlNvmx84DrzNAahaFZWLygKWxUNibIhTcPD9BMLLa65bzreAMSGVoXvJ/Cgh1WUfO+XTZS5CDYDs9GH1fnOrIDcAkABTTDCCLYK0Cwi/586WcKJUiEpC8CCBYDsiiSplqUIUmOjf+o2tIiKVUJbgU5uSWl4DWwX4+PcXnrQATBNS+8yny1yEopdcay+930y5YhgAg+9n2OoUeI5TdQer+32fdhmGoOBZanBo+g1yEKU4dYgFSvqB//vZBIBt9RshkTbW8ZZZ2hUgvDL3iU3uux4LSBM0ZD7dPRnTH08VAIfV+2XAOucQAMuVcKfFSD/+IAABsEoGwYAoHZIKEEYxRIHwLS8pUuhjFVs6/ZZhIVWyxVKBBIRXnbQATBNS+8ynI4tBzkEACv+chlUVIKE/5cRGsWmlKfIzudc3APLQSlg3E2OCyVRc1kpU3DgBmKoQsWtlBcswjPu+nfTYtBL+GQdgOf16GCZW6pXlBCqWSgqJypoOAFfXXDifbwFJLvi5HAjlnUsiIe6AjOp4iQNQHRlT2PlgJCUbbc2s+v/hFwFb/q7gm6HlYpBbmTV2sscQyy/qFBj2v0/cAdz/HGD7NDA1AUyOOU+1CwWOewNjKj6/O03F1/WuugW4/XJgfBoYmwDGdH7IxB5kLPIB+I8AfNwZgga5ck2fJbEm8V9zNWPfrasbgMuPAcuseJ8Exsb9FdBhA+7gaQNKB6TfcgCYug+YJT+g89aoBDMmIMScP12uTKj13uDv8zsKig/uJ1uQOsnojm3qB5P5ACRBH3OhPuzzRN9DV88HqQLEWPJnvTy5nm/t/1s4BcuSpRZtGAu4fi+wtBVYEyccrYwn6hF8/FkJp9bKxAKVFsn/d8urgbHPA9NPOEOWl4+2cfoFHhfVrJTZPKHSj5daOtup6JyCpPx8rHWRVQ7WOlrYCMx8AHIzlxkALPD9c0VB+x/A3E/+E2fUYHXdF7KTGwdvTd0AHP9r4PgWYG0KWBdfsBdsMPfPrKKsoL9XAVLAvO2fFylCE4cKliyrDVZNcGS1CqEYhWFiAZV+XntaURdTLmpCEbpchTYLqi6NrkMCzLzt5Xc4HwyJmmkJ+Z73jQOh4NWeDUZiK1K08f0EXt7CMHVawIk7gaVpYJUA9LI1Ao8bzKX1cytoFtFfpdCIWz7rgzHgth8u0oPGDwETc8CEMySUzFaikgtlpW1Ta8JqNba7lVljSRgW+Q6ZP/57WQvj6fydBjXfAjKbgEvMLwWCvhNoipgNpnQshlS4IGFWzIk6ylWwAz93ETLxGWB5ClidLABoIOS7pmGfG+33YAG5mND0G8F4678vkiPJczNOAC4UyQm2N8w94kirFlfIAl7i402d6dbPWWAtrsjOFiuCvAJZOQE0pHTFsckHYDeCvhNgipQNxoAz8/8IPr5nbvH2jd+6AThJAE4AqwTdZKEBLDoDgU4+YVkPHIBoPwareOt/BkDexsMFAFnbzNJYm0IDnVwbt4uyur1kwL7Tp+iZM/08WT9Rc7DHUmuYTr/x+6o4ovvu9fjBbgR9JyA+omwwxvZI5ULg6ZW7y9FPf9QNwKm/CgCcKABovh8ByVy/UCtJq2f+X1yYJPGU27lIZLbuEWDsWBHesZeDz4iURLUWa1TE47LqK12fZmd3OXidFctqm92KatVs1jAEsNv6sdymaa2g8+xUL4I+Pn2beCgbLGWHI/h8G3oTr45iK86POlbBU9yKI/AcfLR+ouQwH9BfmmbLlTHboOnZ/T9+5vaf8FUaAThXsFOQ45mUcgZCWTAxe0UQ+urYMO1/37GtxQmoLCBtRSp30LrDp2SFdzYMgk/R+VNwvwR9mwQDsaspGSfJgYDYNTbp8psCQFJxEIBkQjDrxt8dXCUIY+COH5MVFPi8SOn2n/QYLZ9Gp0cxANIP5IvAkzVzxivRydnKNzBa8fddM84b6AFyAriMF2pajk9kYIeoClXmA3AQgr5NQEHMBqMVFMNaIOayNRL/vhlH3RZwmhbQQUcAasrVVGz4EtjCu/3dfb/ID3PbT7uKAZ/MhcIC0vqRTo4W0IBIEAmEtFwCYqjW03bcmdwBYeoWgetUbrR8snrloiR2drpACf+rD4D9EvTVjIJu7HBV+781X752Czj9lwUZkTEgcPoNPp5Nv4oBRhCG6dd+1DkMz1JIhR1BAHJ7zwqO3fIRRM5tmDK5CoQKsSgOeBYBKFZULTqcB9r6Ni5KYmd3WKDUA0BlhNLM8EbT1QBXBU72aI5ZjUcVOxz7WLkQ8d37vsart/uA6RcPsxNSAtAXHDYNC1AEpf9s01kKwuBwGU7HgVt/1jtD1e60fgQigSe/j5bQp+KYpGB+H62jT7P8/ZypBIC8Dhcx8eY9wF015abhmnoAyJ5WSrKeNgKO9SHxnT/LSasJBim5lRjWBEIVeROInKL1qunybRawLgASdEy74qjaNNzJCgqEEYzBGvK0297mAFSHEIB6ebKDgc8J1ksmV8t29f1en6L5v6cxIK5iK6Xne/5jCTiFcTqVn/r/tWDPWwXnEPTVgIKUHU7ljASawKefIwDpMdRxRB+wFgD+RREDJABpwSzz2c0LfxczVjkVKwaYgtBBezu3SvX08d39P5uO3QKahXMQciourZRAGKZWar/YZ1xXRPe8wQr2AUK7TvbOVTZBXx4MBECRnConUBSFEXT6mf/TK+/qmzAF/0UBOPqBZYF52HrTFCw2LH5G8UCzJEko5nZqmRnPh/uCXmpnVpDTsIPPwKApOaSA2QLDLSHf97iPx0tpISLfz7bl4iFfsUsnj+HZWEeOYDCDnDmCvZkEgedcCjxGseIhBYt3vx049HwMLRh8gA9gh2MoH9ABqKJzxf0McO7XlSAU4HzhYYFq+5D7hwBu/98OQLlIBCKnW39SlXNY+nqeiq2dkQg+gnGPb9/ZpT0lq6MV5D96gLCwgDmCwbdnCvZmCgY/dxy47xxg5SWuUjigYPHFbwA+fyGwfr2rXrMvPB+vp3L3GHCgi9JOHQCkRVPppeUBigXLFymyejYTB4YsgfA20ofRAlYB0FfAlvQqP0/TsX5PLOB5DNu471cmIwiBaRww/F01J+mz2pqChxUMZvpJlmBv3iTocsW4dzewfhkGFix+2febXDAeJO/YEILBB7pU1g8LQFo98QASVGYNQ6DZfEG3fnEqrgLhbf/HV15anbkFNCvohWSl9XPQ2XTM/2s3I4DwPIZwBEDfgitH0Ek6N6x+u/iD7T4g/YdBBYPpWHEaHlqwNw+AQa4Yj54JrJO+aQDB4pt+oCAyYvOPEIQDCgYfeF/9U3AbAMX7ItAlVtAspKZdz5SOlvA2pstxjES3wJ+92NgAGK2gwi78QoVfEhBeQACqNNP1RdoA18kKdgDhxkUI/zKIYDCnqyzB3jwAJnLFOEIW7QEEi1/1Y21ywVglCAcQDD5/Efj7M4CVrZ5AKlkhxeQUaxBI4nvFzxf8IfCVC4HV7cC6ZEX5nen3VX1vAGLZq8ysrvHY+QBwbGfI2E6JpLvdX+ksthpUvQrmX/sVDGZVUJZgb17vJHLFeGQcmCdVb5+Cxd/5xjZ6QzzMLOQBBIOfTV2Ps4HFHQ7CLQUQmUrV0rgKJMsCjsxGAqTn/hzw0EXA4tnAyg5gbTYBorKkUyLnkB9YVhTxu+kT13iccwtwdBewPAus+b2ar9xJAafqfgMQO4dh+J9+BHe5gqZZZzYok1JJUcpaR6bp93P+W/N6p0KuGIemgEWKgPQhWPxdP7NBLhiHKYHUp2DwpZ8rLOD8tmJQVplOLxAqmbRKC6EDYC7/CeCRPcCx3cDSrsISrs04CPm9ArZk55UvKAspYLqPaPdR4/H0g8DRHcDyVr/X6VabLHk2PhjpPVZY7d5xwF6CwS9y/4LbbVyQsEKIufGiKe0p2JvXOx3kinF0GjhOQY+oNRtljji9TQPf/fOV9IZY4Gq4D8Hgy/4W+Oo2YG5bUUy04vUcLCqSJVRWszJbNgxSmMau+q/Ao2cBR88EjtOqbgNWWaTkIFz3YiWrF4nAjtN0nBZrJnU+/8PA3CxwfMYB6LUra3oglL0tps6wlVha5rLiqd9AdDfB4Je6U0s/0BXTDYh80Sr2FOzNA2AXuWIszABL1JaKWq1R+nwGeM17OsoFY5XTVw/B4Cv+Djg0C8xvLYqJCECzgsxmZlq9T8e0XGUyaUizavPtxoFr/zvw2BnA0Z3A8e2FVV3x6c4sqwObckeyhiXAowUSADhD1XhceDMwx37lvU4XxVN2n3rJIocygkr/Vbs7fe+EdBLcfaXXQ3IPWIrpBB6XlnwpR76jYG9e7/SQKzarxM7qJFj8mg8UarMV9IZ4gvNDD8HgKx8HDs8A8zMFAFnPYQPDl0Co2g4fpDZLqKCxT0/7fhJ4fCdwbFvhRiwRgJruCOwUgCpeCvUjZmEFxhfk9W969kW/B8xvKQqnVgg+B6CB0MsI7P70AHgmd2n1NQ0rv7FvALIlVYK73MnQCDLThSGZoDpuP7uCeuX5n8zroB5yxThGnQ0CgyBMxY63Aq/5aBHG6EBviDlOLV0Eg1+0AByZLgbl+HRxnZXJoqqttA4ODovlJZVuSjTQFtq+NwNPbHMAzramdVpVs6wEoPtdNg37wJfvsYiJP9NFqvHY+7vAwjSwxAeNxVO8T6aNVRRRlT6hHrJ0Ovaw0WDJCKng7g86APvNB9wg2JvXO33IFWOBgn8EIf2nRLD4tbe1+AU7yAWbZeskGHwVdd2mgAUCcNKnJgLQrZ/V9/Jnn5JUYmnAE3hCmv3+t8AWQfSzyPK/POOgJgDdsgqA5nfJAvLdLV+bz0kK4RqPZ3wQWJxyAPqDVhZQyQr7gyaXI9axWCFVAGLvRUhV46PgLnUWBs0HbBPszeudPuWKsTRZAJDTo8l8ui/42juL5veQC7ZpsEow+OrZQlqVVuH4FLA8WVyDAOTAmHUQCAWQkOlsQAwDt/9/AE8SgPQpNa07+AhAA6HLXbb5Xr4IaAMfv/eGvP5NzyYA7UGjBWTWjh40v9fSyscHLtaxhJWxFVsNNAXH1khw983+DYPmA5aCvXkdNIBccemfceooAfhAAcA+6A2xLuAGucxrzgKOMexDfV9OwbS2BB/BEoqLSrBoYGgJ3E8qLcIEsP/ngCPuUy7S13L3wb6PU56/m/Xj4Ps0TKCXQA6AXuNeZY3HMz5QANAeND1kwcKXlj6wOZQ+b7R+Pi0PD0DeFAfk590CKg8qncfoFzIRVWVqfFfBhgn25vXOAHLFWCDbvPstBsJZ4LUPt+jdesgFg+qVptWq11bg2gtgfuLiRAAgQeg+oEmsOujsXb5SsAoCIN/3vx04OlNM6Yv0tdx1MKvK7/TFjVmeCD4HQQQhf159eV7/pmc/kwCcKABoeYvR0oept7SEoZQ0Tr1lPuPQFlAtO0nyAcWhpzw/FSjFzGjLx+RGvxzoSeC1hwsA9klvaFN5FAy+9mJgnhaQ0qqagglADo4c9AhCDpJPl5ZommQ8738HcGw6AJBW1VecZv0cePwOY0/wl1lAD/WUCx0mMlDLr8bjmb+Dwp3x4nkDYbD0thIO5aNtfmDi/xGEeRawxhs7Vb/q2huABQJwAlhyy2cC0xoggjAAUCWWAkksOiIY978TmOOqeqqwqAx3WGhHK06n7TDwOcAV/iipPAKjwgrZm2o8nkUA0gKmAHTrp+o9MTrEYvq44o9pZIOtgmu8mafCV72YAKT/RwAy5OPOuVlAAk9Oule6xQRTWUKlWtkU/IvAHAHti5oIwDK841ZPFtCmdr0U8PaC9hVultd4CIC8P2Ztt/m5/qC11TJXlJDGGpfGAmYODgFoCxACkLpuWh3KCgqE8gNVZK4KtxgjJAB/2X1Krao1rfN7CWZf3LSBT4uAEIyWBVpipL7GgwA0AW25GbGENBTRx3rm1M2w39mmrFVwjTd1Kn+VAZALEE5LtIDyMWUBvbLNLGHgd5H/V07BDp7r3uU+Jadgn3ptxekA5MBri0/Wp4wzBjDbCnkMWMqVpE8GJwLQqvfc0pqbkVj5aNk7gbCxgJno30cAjntowtXNaZ1suvSKNhsYTcVKmw9F5xGE+94dfEoP+JYhD/8OC8eIPUsUHokVVKB78XszbzAF4Pvd//PCKVGIpOAr78mn4DZOm8YC1jco+w6EFTDDPJqeCEBZBa5GffVbhmQ8DtZW5TYOvPhXip0GTuu22lTMLSw+aAVl9QhEWjurI/aQiLJkTMLsX9R3r/ymZ73fp1+37OU9hunXSkdl7T3QrhKCtlCM59k2i5CMMSIAGdqxEIwrmptzTsCEut5yilKoJLAcxCq3fe8tLCDBFwO+tKjyuxSCMdYEXoeDrHcHvu0tTwLzmwHA4N/Gh6zNCqqeOSxC2lb8tQSiMwbuqXIqAcjFh2JjBKGJyShQG6ygVbfJegULWBYcMR3rvb6oCRaQwFPgl1M5rR7/JtBZOIZWx/0+s4QeY5z/1/X2tFnAxPpFELaVkdLN8MWGVr4pCBsfMHN8bmTKfCjZ0Ncp456/x58zLzfw6Qf3ABd8pUgEYmqk5bGyek06IQl1bkXScnlN/u8L24Gdx1qVq91KQvrpgwaAAw9p+wnXPw1YjyWMGtDo2ASOFGMU7SIEUzdYD34vMPmXwLbHgdkFYAtlGiim6DpxJtvq9LtlVr/aWKEB8pUXAOOPAFPzwBTZ9r04vdQ9Ts4pAZ3cd+yHxgfMAOH+vcA69/9Uxijmz/AerYpdar1lNSMYzV+vWY/34I8DY58Gph8Bpo8A04vAFEFIknIHohGVR62QhFRSYjQE6qFri2z3iaPAhHNNlxKwArI0Q1IAxwfReacbC5gBPp66/5ICgLKCtqnsrKKlrFZUFPKOr7osMTtdsxzqQRZ93Q1MPARMPllohUxRqkEK6gShOP0S+dY2hlRv99y+ovRi7IiTnTvLqmg6xDPYpqAUgRgsoR7MxgJmgHD/c4E1FXu7FRRbvEgd7evXWlbPpp9EgUjiJpwe6zwOMlvpAWCMVusJYPIYMOlSDZRpoGiNxKzbdIQlXONMWJbGtw4svdgz3El47nzTRvPrrKptAJT6ZrzfintvAJgx4vsvdQvIXK5VYF3sUZxmJUvgA1FOvwF8spKyBtM1y6EepI4LqVMedbEaTp0EIKdPKh5FqYYqSxgo2jgFr13j6XXHnOiSZOeBVSvyC8qC2r05FVvVw9cAMAOA178AWPMp2LJaaekiCPXExwHw660n1oB/niGQazwOkkSepbJ/72I1x4CJ+cJ6lYI1riccrVicUuVSmIW82pkwnHHVOKbFsOozQGkFkwewnBES37ABYMaAX39ZAUCCb82nIlo+40p2gNnvsoKunxH1xGwA/LOzdQOQJPIuHzV2GBg7Cow7AI0l33XfjOsv6oVodes6ISbBsAZMX+kJxU56KY7pkmFVhOciuvTzSt05v0+ryuT/9gDrZNe4wPMsI7VJP3GcP7gUOOdvgL1rRYJ0ZI5IV3hV4/wrGYPPU3/AiRhYusy2K7mU999P+z90ObD7LuBZK0Xdkeq9NSX2+o4HLwfWlopFCC0fgciBMtAFC8CGrYXVoVjnU2G7rTXrzh4kfRzLY1kyGwBoeiGcPiXb5eAzdXWnazPCSScb4j3xfmav8Cx2p50lAMW0VXINitCogl2r9H2dcctWwQxQsn6ZTBbMNtcgdKIbiZj51VcBk38CXPxoQcfCUg8pjcYgZScw/momACnXyr4leBhs5QaBTHpf7X8dMPYJYO8XgAv9e8QJlAZZq8D4xSuANYKPJQn0AR2AHKy1MACKe9nfFI6IEqduEWoHIJ9wlsVKLekoMCa9EAegSTYQeM4TXco2SEMkAHEbBZoj4bbYtdyCVrFqGXgTSxgXYTZeHLi9AMjEQRCVUXP/n4KUaaT8vVTi+Rtg7GPAuYcAWlMCgUVkQfJ2Q12yBvPXMwHImhDWwf81imsTiLSEvHZkr+jY/p9CQRD4p8DOBwteItai05qn31FFdfLlFxYWgCDUIkRkj/TxbCEi/89jfPZ3X2VqYSJQbmUNQY3HQT7hbv2sLoerVwKQHNEEoCsm8R4MhPRjXUGzVEIKIoY7yaEYuY4dgGb5RXruoSgtSCLLarkICQ9f6QNykGjFdjsIBaI4kGlt8W+Rg5g0HJ8qAp47nihAzFpuWtPIMBZJlASILvR6fQ0DCVbJCkJOJCqnk4pGpb99tZ8MopyiKDX7WWDiwYKXiEQOehCrgKh+eJQ+EQHo1Lby/zRlyf8TIbf9XS5ftIb8I92YugH4ay2pLusorl7dAoonWtMwQSTdOFuQSLTGHyIC8kxSIQuA4hwU2WUAoO4/grBcDbsfWElSzg+JCoYDoEGM1ixSkHzgF/wG7y8sIa3J7JPAGWuFJSQIaU01iJHUiYP4e33BrPOHmG/JMaOfTZVYRhwGav87vWKPJ9/rSH4IOGO5sITqg/ggxXs4TOaBAECbeoOsgfl+DrQShFqcEIhyyt0MbMusEkx76iAZXKM8BvXiZAGlF+KaIbaadYpem4aDgpJZQz6YJABV5VcHAJZ0v4FxX6KG5UpYs0KnqjhRuagEVgPglYAl9ciHf8mdUrJh0Qx9vkDBzBywfbkYQIGwahA/kglATsHsDzKA0BATiPyZ4NEDwIeoa/uFYKKXL2f24nQoIgd9R3yQCMTFqwIAfdBWI7+yB5ZLECYLETd85YJl+2YAUNosLIel/xYlu4Jsl6bhNhD6it4WJCvA2Zc4Gxo73RcgJeOqFmGR6rcChLYACyGojmEYdj59KnZ+tIQRhH9IvWA2hiREjDeRI9Cly7fMF3EtWRFawhQIf5IJwE56wdTIYdt7tp9ys1K8JnoJvod9Wn682PNkP4hUy1ndWgstAtBDMLYN5/6PAc5DGNoF4SrZfN+4+IhT8jqwg2Cp8ThIJ5vfSWBXAVCrWN9SMxDK+skaOvhoAc8me654pmUB3f0wyt+E8FyRAGmPlOEoiSD2qgvmAKoOm52fAuiTDHSyIRxx+lI0QxxADubfF5vffMmSajrWlP7nmZ3dSy+4r/ZzAUEHnQ8R70HsXlK+PgJsW68G4XYGZj0EY2EYATCAT6tAhmE0DXcC4faapcwMgAIfLb0kuzT9Qmw5uwAAIABJREFUSi+EfeALkSrpBovbrQDnkm8wAo8/E3i+CCsZ98NCpAp8cUekZyBavI4ET/TnaAk/RQCyAXy6uNSPA0i+wMeB6ePA5HFgZq2wpNGK3FUDAHmv3fSCe7afX8CB4UNEEOolVi/3obastNwJ9cO5BOBKEQMsAcifHWzRAigWWAlCn5K2bQYAOe1KMjTIR2kRUhKVS7IrLia0v+3xwHMZMCbYNP0KfG79zAqK5DxOvyEuWu6VD5KSHy2YAEQAfpaRdl5UkuUctIpBnCIIl4psD03FtIIP1ADAlBuJM47EqqUX3LX9kSBQcuuyftK78xUkHyQ+RLqHZ3Fv1KcgLj5kAQ1s0Qo6IA1nHhNLQzA8ZxvBXuNx8DcS5UYpNnoYxsCnUIqvZo0F3wPTMa7Hv53HOJVbS/l+5bumX7d+5WLE44hxIRJB2NMCqj9ixwuE90svWCaIA6bAp959EKeWChAyA0PTOV2unGMQveCO7bfqHbcS4rJR7Ewqnw5AWhLuImg2uFQAXAVs8RGmntW4+g2hB3P79L/EJ9zGvqrxOPibiVihAOgrWQOf/EBfBcsPNBBqW9Hv6zzGqFzmoXz3B9AePgXiq6bgiv4YOB9QHS8AfpkAFMMjrWAcQA0iO9XJiQyAnos2vV7ESHOOQfWCO7Zf7F40mZFQScRKAYBaSU6vAVcTgN7xXHiUFpDTMK2dFh56912BTiDcvpkATIXzCL4g3WXTZ4jpGfjoF/oihL+fx+0yWUABLwIwtYKKIabgCzHQvi2ggBKn0McEQDaKT5cGkIOo6SuyYzEfjQB0EM5nZgAPoxe8of3sgSqCQM3jkdFLvpRvR13+7UVRuhUFSavNO6otwp88ZZ3+t4M6HLtch6OT9AG/q9cmtf//gV1JDYcnQ2zY6/YakfSrU+Pg1M45NqPt3IEtoM7WFHokyrWKkooglCMWLYjiUXMtK3g8Uzd1WL3gDe3vRRCoUEYCwGtYFxxqgA2E/jI20F5hhmQod98BHNnlxOTig1aGiDanO21yV4DygWuB8YeB6fnC9WEtiKVVKeE0ZGiXWczeJoWMIig5a9V5DA1ANoKDeDylZ9NSXxyAsiKawrQqmCv2HVf5e8aRoxfc1n7xs+khItAUvojvyWryxVcWJZksVSyZoQRA3dcAoHzax4Gj2wtu6FVKM7gMgti02jbV476oUJJs1j/AbA1mQ3Pm8eTRsoZDtR+xZKCiEKmMXTIeXHPGdhYArX8FwG4DGMEnAHIK4yvT58nWC2b73cexaZgWWaEKgU1gjNbPP7PvOYGsUSBkv3hBtmRWNzxjTk9RWktvxp6POj0vARjY9sWkFel8RWxegjIF4RjwAOnZWMPBTGjqvHmszxJOBUD3xyznL2bqROvoP3N3q84jG4C7M/PpcvMBef0cvV9k6hXv+2Yno5QfGArRbaCC0mWv2YtF3ecerNDhkNZIIsXQRv5dlTtGADJSz2gEE1EJQM//026HdIEZLC8B6A0tk0g1Ja8DuzJdphS82QBEZj5dbj7gxZN5er/IZI+67pscgE7QaDOUMyC0Wb8+gXjuR4F5J6YsaXnFhBoAGEVvUhb60jISgCQnoh/OLBgvIrL8v7DdFkEYM5dtNg97tvz5zJqzdfIBmJlPl5sP+DJP5xtW7xffnzeh7H+Z+3+RpkyWT1YxuURJYVtx6T0fCTocouQV85VkHRIGegEuEv/YKpkA/JceVmL8kv6t5/9pu62tfiPWcFQVEa0DZ9WcLJEPwMx8uvfnjT9IgZyj94t/ldeA/S9tMaGa9SNdmsIxbvVscVJ1GScoMt4UPwhAsmMZ0aXzQBsvdGRBjQz0FUpEJRAJQOq4KAnBdz+sfiPJ3bOYn8fsykyVWMfiN3BOzckS+QDMzKe7OW/88aqQzsfE5kH1fvGjeQ0wADodmVGwOeiMsUqHrGOnS4UFy9P/wAEojkEnI+IqOIJQNLgpCXhcmLAtD/D+kgQE235L93tj+YBqgTX9BiCeW/NedT4AmQ+YkU/3sbzxBymQuZhm8g1T+QbV+wWFdjKO/Te2mEFNlCb6gPF708VJ1TXHgKd91GnZpDfi1k/gM2vqU3DUnCuBmNQe3P9vw6pe229KOvB0K1k+ZS+rnrfM2AlA3JMZtah/EZKZT3drxuDz1O/yxAwu9JgJxr3lQfR+8aa8Buy/wdWQZAVl+ZzCrG3q9c/YrkmHy3IRYryAAqAkEBIlopJxNNUbER+fA/H+/+AAdP9PmS9dazicJybm7mlB8nR2dI1HvgVkOlZGPt2nM29GCamcGZjAwlQ+vvrV+8X/zGsAAUiLVPp/wd+zaTMFWw+/kAA0GQQnpCw5mDsAMIrcRB5mC/+MAffTwgfwKY2KfmCZ6ZIkUShrxXxBX4yYaV8Hzmcn13jUA8CMfDqWYeQcSkhVOl8U6uxH7xekrsg49h8oiCENgC5TUG5vKxxT8f2aRtOtcAKQ1s8soPuOVUIwpchNlEEIOyNSIrrvv3hwnckWIZPZsnbcDyzTpvg3lU8mpZQqozyfK74aj3wAKh1LgrsD5tMxiz/nkGD1sHq/YNFOxkEAcuW7oqmXlisuQOT7VV2jwi/kTgj1RkoZhBje8Z83SCAEEJZW0C3gff8tADCt4VASaWIBK0HI9q8BF5yUAMzIp8tNx5Jg9bB6v/jdDPSRns0BWIZeUitIo9IhHmhXTvzCPQddccnZ76U1V/IvC4SBCFyg26DFNg7c++Mhhb6qiCikT7WVUmr6lYn2nRKyrdZ51GMBlZIc07GUBdMjny6XCiUmpA6j94vMZbgBMFo552pu27PXAqXTyAUQcitOQjAm9xX0N9pIwIPmSCmH5QuPqER0L4kDYgp9zOUL6fYxkbZcFceyAreAF3GlV+NRDwAz8uksnT3jiILVSmpWNlhMze+k94vMZfgGAPJeHDjpCrgM01Tdry9OzvmYAzAqLVWIwEShwzbRwwSEn+MqP6bQK5tZlWyhjCCCsC19Xv7gOnBRbgp7cu/5AOyVjqVMmA75dJZ9nHF0yohWNlhMxKnS+0XmMtwAmFq4imnYbrEqNJPc+9kfd62RKh0On8qV9hXZ9askEPgAfI56ziocUgVbzGT28lEtRMoKtg7lBHtznfZNA+CQ+XQWM8k4uglWK/NLYKzS+8U9GReXD0g/Tyvh4Ne17Yb4Zbr6g6y7/aNWcoPpjKRTsJIags5IJwkEAv6en05S6GUBfRWsUExZyVZVQCQwrgN7Wfdd41GPBczIp8ODeXfTSbBa6YYxlY8/p3q/udc3C+jTbtvqt2oadnB2m4oNgMn0W0p+hYWHWbwg9yU/0Kb9EIy+5y2hiCit4UgKyTeAkN8Valk4Le/ldlONRz4AWWBRM6fdIPfHstw/G+SE5rMnVQ/kA5AkLHS0ak7V7reXfhgACaBqDtD3e/nmc5k9kA/A80JReq+U38zGVp3ObJo/BvAOD3dtwiWar9zEHsgHIGlFubqSx7+Jja36anLLcDvvgwA+NDpDfILv+qlzuXwAXuSjrkKemlO2e3U1uWUYnL8dwB/5e2apca9LNv+vsQfyAUheX4VguB+mzIsaG9ntqxhF4Xbe3QD+n7/uHLAW9wQ1tblMRQ/UA0CaHC7plXEh+q4T0OWcfhleYTSHBK0EH/mi+fcRuKQn4I6fWpeoB4AevCz3HOOm9yb3F5mBlZBNclYCj1aRfyfrbgPCTR6AzK+vD4CyglX7jpmN7HY66d1E0ctdIrEEE4wEIMlam+Pk7YF6AMj7EwAVbU82vTerCwhAXopJN9zVI+AYrOeULLZgErY2x8nZA/kAJGWr0naUWdFpy2cT+oCWjpdjLFxE5UzYIBBpEUX5nLnlvAktb76SPVAfAOUHpiAMm96bsVtCAMaKALICMyxDq6cXfycA+b/mOLl6oF4AiqBRIEzBp7/X2Af0+fi1XIioMIlAI+AIPIGPmeROWV3j1Zuvyu2B+gHoFfZiDS2lC0LiY52WUADkQoTTMH1BFSYRdHoRfKSu5v9qrizMHYPT+vx6ARhSuDcAzzmDo5ZGHT1PAKYMwQxME2jiSo/gEwBrrq+u41ZOy++oD4BaCcsXTPiSI3ey8s4KGoG8QwCMFM+0ggQhLR0BF19SXuD/ayakz7uR0/TsMcxg3SjfqWNA0hsrga/ojaq/8WPcC+YIk4Ke4CMSuB2XVht1Oj8zIfXlU8BtU8DhmYRXWdfrdF1fgr3+S8At48CD04DVjXQSDO70PTUnaJ5uOCwsIIFHSSFy1pKPWCDsZxCpw8UVgKSPxLXM937OzxxAljzcPAbcswU4Qh4V3UN8mKoeKm/bu78IfKJQa8VD48CylHQiL3O3/qg5Rf30BKACMtJXjXKQcfBSK8Dfqc3KVCwuN2VFGRnm/yKZtq4Re5ifyQQgM2A+BeB3GHaZBo5MAIue0l7Kt3cC4xhw+5eL7TuCkJk1jBtyerbUfYG5ExjZ/pqrxE5fAOrOq5SmowVIrRp1IyT2R6+fg0bgVYG4CsyZe2UsaiOGKXr4Sfp9k8CxCYAFSKyvXeY1o1BxQux91yMtfsHPutgnnyUuUvhc0ZsgUXib+nVkq6+ZKaABIHsgVZnuwD9sVo66rrR4ImdhLGSQ8zPL/JgBQxeU1ouWkO9PTgDzbgmXxrzMkatl3keivfG5x4r4IRcz5BfkO5vEZ0kgpIfBZ8yKjlL17syy0tMNcOn9dl4Fy6dLFabj1Mpvow9Ify+I4Nlo9Xt+ZqU9VdJpqZh4QDDyxUyYOYJwHDg+DhgI/WUVZl7aSEt93+GO9Ia2iuZKOfA7lhp9JpvAVy61w2mOwO5hmCgMHC1H9O24gu6UD9jP+ZmbtLRaSsei9SL4XDPbAEh/kGQ/pSUcc0lbApFWb67lQUhpVnLBsoKqqZclFMmUtrxPcwxl3X7vOCAtYLSCcugFQmqhdssH7HU+RznjiOlYXA8wqkOfkItTAom+oKygca4ES8jY+N3z7fSG4hfUtp3ihUHruVSsFy1iRvNP+1N7A5BdJACmVpAgZPhGOyCigEjlPLudn7kvFtOxuB4g6OjD8UWLRkCZFRwrLCEXJQQhp2K+37lQeBCRX1A7KPQto1prFEmSYn2mB9EAsO+kYfk8KQhZF8yjVz5gp/MztyOUjiW9bCUhEBhKRCCgSis45uQ/PhX/xfFWMgOnWu2gxB0TF/o0kEZ/kCDM1Ts+3RHYnwVUL6XhDFrAswfIB6w6P1MrTulY0sum1VICglKwCEACqvQFCUK3gHcsFQCM/ILayqP1k9JshVqrncMalOYYvgcGAyCvIwuod8YBJQmZpmGJeyRwkGw4n8jJOJQNw3idLFhMRNB0SgASTJyKoy/4ieXCeFfJBUeV2SoAclFyR0bbm1OHTUiN0/DTAwD7zQeM52dqj8VsGEkVE2jKetG7AEhQ0frJAv6RC0trC1skl+IWlNinGLbSaZg7Mc0xfA8MbgF1LQV1z08A2G8+oM7PVF9Ms2GUE0gQyp+Lwu2yagLgR9ZaYpkSypQ6a6Q2DCqzpkvietXIFdoZfuieGmcOD0DeP0HEbBhNwYPmA/L8zJQsATAKnguEqS+XTqkE4YfWWwCUFZTksYAYwZfIBeN9Tw0cjOwu8gDIZqsoSSvhEeQDiiGYFoyWiSDRypWgi69UP5sc5fIcquSCNeXqe2X9ZAHfM7Khe2pcOB+AT41+aO5iRD3QAHBEHd9ctuiBBoANEkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cvAFgg4GR9kADwJF2f3PxBoANBkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cfOxqYJ2au9RdPtdp/khoEOlglDYT39V1PzQFXLsMXAlgt9PCxJKPbufyf8/KHIPfBPAZABf79Xc5XQ0ZQ1Q7360NbxoHrlsDvs5ZRsgo0une06by6X1mZvtP99PNAp4F4LsBXA5gjw8EGTeqaGF4QhzQF80CX7cAvGIdeDYAfhdZ2sTKUcVrpE7nd31N5gj8e2dIo2osk7NZpMdK0Z19tv+bJ4F9K8D1ACj8yfNSikHeg+5Z969m57Y/8/ZP+dPLKZhP/rcA+AYAF7g1oRUhEMUzFMt6eSJfX78b2DkPfM0i8GIAX+uWlAMppreUUErn8p2gzTl+2flg/sDbTkvIOik+CP20//mzwAXzwDcCuNTPJeFXpEpM6QEjIHm/zTF8D7T5gATYNQCe69aAloRTGulfBESBSYNyxR5g/Bhw7hKwZwl4vk9LnM5JmsBzUyDGAX3B8G23Mz/g9BuUa/0IiutfMkj7zwKmngAuXSvOpUvAWYBtF4BTnspIj/O8zPaf7qdvWITw6eZA0JLQEhKEGgxZhUj/dz3NzSKwbR44exnYvVKcy+mM5Km0JhxInUtrGkmzCPicg3W5LMGkQiZZTm9xS9Z3+4m2o8C5c4X15pTKW2Lb+fCx7WLtjYxzqiql29Icw/dA5SqYf6RTTilg+lYCIXmICKQ4IK9wxfSJY8AZK8CuFWDnanEua9ZTAMsaCog3Dt92O/MvnRGBtGwkqKRmMEkqCaa+2k+0LQDTh4rP88UHj74kF1WaATo9QHQ7mmP4HugYhtEKj4PB6ZQ+FS0hQahpldPya1kXTOqNY8DscgG+HavAttUCvBxInitrkgL4lcO33c7spBdM3kAuSnq2nx9gQfAh4JyVwvrxwel2z3p4aMlzH6DM2z/lT+8aB+Q/OT4EEqckWQSBkGD6EQKQnDCLwBSnYgcf32fXioGUFawC4esyu7CXXnDP9tOCsyD4KLB1rmgvX7zfbu2WG/Jtme0/3U/vKxBNAMoi0KcjkATCN3HOEr3UAjDrwOP71rXixYEkeKMFlSX8ocwR6KUXTJ7AaNE2tF8WfA4Ye7Kw1mwvX/yZn+eKnvcrfzC6IK/ObP/pfnpfAGQnySoISBqUXyAASS1AK0JfagWYcRDOrAF66TxZQU7jBOEbM0egH71gcgXSFZAV54NQtj9YcNIpbONCyh8Ygi8CVospApDuB63g92W2/3Q/vW8AsqM4gLIKBBIH8bcJwMCNMX68BTqBb8s6sGWtsIA6jwDk662ZI9CvXjA5A6NVa2t/IAicnC/aGV+8T74IQPm/AmGuBc+8/VP+9IEAyLslAKMV/LgAyIUInfnjwPQqMOOgI/DstQ5Mr7UAqMF8V2YXDqoXXNl+EQQ6N9v29aKdesUpWJZbAPyPme0/3U8fGIDssDid/pUASCvCaXgJmFguAEfgEXT27gDkuwaUg/nbmSMwjF7whvbLhSDL5TwwvdRqo9oqHzACkCB8U2b7T/fThwIgO01T1IMCoAZxGRhbKoAXQUcQTjkI+a4B5e5FzjGsXvCG9gdqrLGFYrpVG/UuHzBOw2/LaXxzbh43DKeoJwlAHqLndSs4udoCoIBHQE45EPk3DuitmYOQoxdctp8+rFwIWsGFYiFFoLGNchcEQC6e+OJC5J2Z7T/dTx/aApYdJ37AyJK/DIwvFxYvWr0IwEn/H1Opco5sveDUhSAAF4HJpQJkWixp6k2n4IYfMGf0amDHev2I8+l4/UbvNw8Eozw72wJePOJ8und7EkKj9ztKGA1/7WwATo44n45pWI3e7/AAGPWZ2QBkYHCU+XTMfGGQmYIxjd7vqOE0+PXzATjifDrKtTZ6v4MP/MlyRj4AR5xPF+VaqZLJF1UzKdPV6P2eLDDr3I58AI44n07ZMARbo/d78gMubWE+AEecT8e9YOn2Uheu0fs9tUCYD8AR59MpG6bR+z21gKfW1gNAz4geRT5dTEZo9H5PPRDmAzBmRM8BJzqfLiYjSKKr0fs9dYBYDwBHmE9XtRfMsIz04aQZ1+j9npygrA+Akqs8wfl0BCCTWRq935MTYL1aVQ8Ao1zlAnAi8+kEQGZTNXq/vYb75Pt/fQAcUT5dBGCj93vyAaxXi+oDoFLyT3A+3Rcavd9eY3xS/z8fgCQX/LPR3SOzkon55jg1eyAfgD8M4NcAPD6aDmBtB1e4NMDNcer1QD4AbwbwxwDe4UvRE9wHZG1gNSXDLlwLNcep1QP5APxzzwj9IIAPnXhT5ORc5EYCA9HNcWr1QD4AmRH6FQBMTSZZH98ZmD5Bh5g1FopiNns1x6nTA/kAvAfAEwDudnI+EvQxPfkEzYfaCXRSBluQMB7YHKdGD+QDsBNBH/9+AkAobqTADGK7Inw1x8nfA/kA7EXQt8kgrGAGMfBxZ5Cv5ji5eyAfgL0I+r68uR0QmUFoBQU8vfNvzXHy9kA9AORoMw7CdGQCjoUZDwL4kv/+8OZ1gJhBIjGDgMh3vTavBc035/RAPgD7JegjODfhiMwgoqeJwNPPTaB6Ezq/hq+sB4AcXeXEP+ZhGVo9vRimIQD5v5oPAZCupgDI9wg8/qz/1Xz55usyeyAfgMMQ9GU2Op4eAchpOIJQQEz/VuPlm6/K7IH6AMjgGzdl6QtyX5jWjpQFevF3lq3xf6yhrOlIAUgQCojR8gmE+l9Nl2++JrMH6gEgR5UA5KYsc+AZmCbQCDi+IvgEQMob1XBEAHIajgBMLV+0kCdws6aGu3zqfkV9AGTwjftg3JRVVRAtHQEXX/wbAcoXP5d5CID8GoJKvqDAloKOoIz/y7x8c3pmD4zhaqwjRzCYyQg5gr2ZgsFTLweWr8XQgsXjbwLWrnNtMlKgNoLBmZAa7PTCAuYIBlMvlWQswwr2UlUw45jdDSx8HbD+Ctd+HVCwePKbgJV9aASDM8Yg59TWFDysYPBtmYK91IbNOHaPA/M7gUXKXA4hWDz79cA8+W0aweCMURj+1HYfcBjBYO54MMY3tGDv8I3nmWSHOzYOLJ0LLPGXAQWLz3oB8MQUsEa16kYwOG8whjh74yJkUMFgbsNlCfYO0epwissVY34bsHw2sEIRkAEEi/dcU0SP5qhF1ggG5w3GEGdXr4L5134Fg4kAjuDQgr1DtDqcUmZETwArZwAru4BVqsv0KVh8/o3F4v0QXZBGMDhvMIY4u3MYhv95Zh+Cu1xBcxuOU/HfeDIq5cv7FuwdotXhlCBXjOXZAnyrO4BV6in0IVh8wStLuWCsUAyvEQzOG5ABz+4eB+R/ewnu/kOP/3G/l4kJTERlljQtIot2e53/IwO2OPl4FLtcnCqAp9cahT56CBZf+LpSLhhz1N5qBIPzBmTAs/sLRHcTDKbiNHdBGGymOC/3hglEvgjAnoK9A7Y4+XgiV4zVWYDAs/etxaubYPFFP1QkLtCIP8neaASD8wZkwLP7AyC/tJNg8L/xLNBu+YBdBXsHbHEFAINcMVamgdWZAoRrfPdXm8KitLdmgYveWAq+2y7iMqfuRjA4b1AGOLt/APJLqwSD3+y5T1yI0AoSbAxMMzGV1o8/My2ro2DvAK2t+GgiV4zj4+3AIwDXtwBrVJeuECze+9aW4Dut4PxkIhYsdetGMDhvoDqcPRgA+SWp4O4veQ5Uv/mAGwR78+6rQq4Yq9PAOi2fA4/vBkKudKVU7VZw77uKvWFuZbtcMNb5v0YwOG9g+jx7cADyi6Pg7gccgIxlcA5TKhaD01yYKBmVFpBZMfx/m2Bvny3t8LGqoqTliZbVI+gMgHwnMAnCIFi897cLAAZ6QyzFzzSCwXkD1OPs4QDIL5XgLmk5JHk/SD5gKdibd38VcsVYGmuBTaAzEHLHgyCcaokB7/1IkUET5IKxwF5pBIPzBqbPs4cHIC/AaeqvPL9pmHxAE+zts6VdLCD/lcgVY3UyWD0Bj1ZwqgCggXA7sPfWAoAJvaEtZBrB4Lyx6efsPADyCtmCvf00s/NnOsgVY3m8BTRZPZuGBUACdArY+5lWDqGmYbIrLHEx0ggG5w1OH2fnA7CPizQfaXqgUw80AGywMdIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0BxoAjrT7m4s3AGwwMNIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0B8ZYNMbkX+ZekpuIiOQrPar+xs889HJg6jZg5jAwvVZ8B+ll9PlO5/Fc/o+ECjnHfi8zYfkvM5ulmp4qJXVqx5deD4zfAkw/CGxdAZgoHfuh131QkaI5hu8Bs4Ds8B0AWLnIRGCBsFfn87JffDMwdjOw5R5g8giwZa34jnQQUwDo99wBfJ4TM7COiNdlaj2rA/jeV/vfDeATAP4UGH8I2Lrc6gc+SHqY4oMZ74VSKM0xfA+UUzB/oBUUCKMl6zSQ/PsXqZD5KQC/A0w/DEwcAcYXgYnVwppwADuBkefnCim90FmBWXwnK87Uen53BI8sbuwqaz9p5UgnQhBS+ZN1zE8Ak0utviCwq8DI8/nx5hi+Bzb4gJzKZE1SEFZZgS9/2pWR/gTAJ4HJQ8DEMWB8ARhfBsaWCwDquwQKvvNgHXvOcYVbPFJPkw+dDxC/W1Y4tWDpw/Rlgo4lo1T4/KxTihDNpJwj3/UiMLXemprjffC7eWpzDN8DlYsQDiKtVxzEqoHkyX9HRizW+nIgaQnvAiaeBCbmC0s4tgSMu2rMePAR9X252jXklaTFU108K0MHav/nvJ6ZxVVk9OI7GR2IZoGQNc/HgbHgIwqILIVujuF7oOMqWFawCoRxkfEIB5CWgkREBCNf9wMTc8A4QciBWyoGz16rwNgaML5eWKpctYZL3N+TWLX0gvtuP0HHk2n16JDyxXmVhfU0qywbJbr5GSuXKxA/sV5Y9UYWdnjwyS3qKKgarWA69Wg6fjQOIK0HadnIjPVFB+AiME4AuiUkCFnESyCSkmAuU7Cjm15wX+2X2ifBRn9A8mKcW2UFjULVQcgVDl80u40SYh763FfvquhLCxitoBYUsoJfjXKttByMq9CKcHn4sPuCbgXNJwyWkECcz5Q376UX3LNncZyQAAADEklEQVT9fFgIJs6lBBwtn3Tt6FpIz4RWnuQxPh2XIGzm4CwQ9hWIFgBTK0gQHiIAJddKq0ELQh+KL1qUR4MvSEsoENIKrgALHNiMox+94K7tl9qnnMio8MSf6SNwGpYVjCDk/Ju7isq496fCqX0BkDeqlWwKwic1gAQSpzGREnFgREz01eALLvvq2Kfi45m6cf3qBXdsfxRbJMho8dimqOhEK8cXQRr9QVpvPoDNMXQP9A3ACELFxPh+jACkP0fLIKFCCRRqKuPUdqjlC9o07JZwKVNHeBC94DQcZO0XAAkmgotAk9QYrR9f/BvByYfMSATDVMzwTXMM3QMDAVAgVHCZ7/MaQK4QZUHiNCbBQlqUw74YCb7gcmYkelC9YFlwvVv7RRAorTuBkECU9asCID9/x9B935zYzyKkqpfiNHxcA0gLQgvBAaPVkCqm3h2AtC5m/RyEqzw/4xhGL3hD++MmslgqCbgUfLKAcRrmTlBzDN0DA1tAXUlWcDm1IOIIJAjlT/Fd05lbFQFwjdtgGcewesFt7Rc/Gx8iWjUCjGCT1YvWT1MwgUqrf3NG45tTbcu0aximWx9xENcEQHGbcYAEwtSXSqY0gnCdgeuMI0cvuGx/FUGgFhwEYrR80QckWN+X0fjm1DwAWv8RgJFilJZBznz0pQg+AZAAlVWh1GvGka0XzB0cCQi30aSGVa9AF62fLOB7MhrfnJoPwPER59Px+o3e76mL5Kwp2G57xPl0kxc3er+nLvyKtLmhfUC78RHn081ONnq/pzcAR5xPR9mRRu/31IVgvgUccT4dNaobvd/TGYAjzqejumqj93s6A3DE+XRUg2VSCjdaGr3fUw+I+VPwiPPpqJjO8J1Nw43e7ymHwHoAKMFd7QErAeEE5NNJMb3R+z3lsGcNzgfgiPPpomJ6o/d76oGwPgCOKJ8uKqY3er+nKwBHmE+noqRG7/fUA199U/AI8+kEwEbv93QHoEhZTnA+nYqSGr3fBoAtaiqBUImdm5hPJwA2er+nKwBHnE+X1gUzSbnR+z11wPj/AeCpPDD3t7rvAAAAAElFTkSuQmCC"
vendor: 3,122 bytes, line 5953
5953,CR={LOW:0,MEDIUM:1,HIGH:2,ULTRA:3},CL=class extends Cc{constructor({preset:e=CR.MEDIUM,edgeDetectionMode:t=2,predicationMode:i=0}={}){let r,s;super("SMAAEffect","uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",{vertexShader:"varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",blendFunction:Cn.NORMAL,attributes:Ch.CONVOLUTION|Ch.DEPTH,uniforms:new Map([["weightMap",new lI(null)]])}),arguments.length>1&&(r=arguments[0],s=arguments[1],arguments.length>2&&(e=arguments[2]),arguments.length>3&&(t=arguments[3])),this.renderTargetEdges=new ip(1,1,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new Ce(!0,!1,!1),this.clearPass.overrideClearColor=new is(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new Cv(new EY),this.edgeDetectionMaterial.edgeDetectionMode=t,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new Cv(new E3);let a=new o2;a.onLoad=()=>{let e=new id(r);e.name="SMAA.Search",e.magFilter=1003,e.minFilter=1003,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new id(s);t.name="SMAA.Area",t.magFilter=1006,t.minFilter=1006,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:"load"})},a.itemStart("search"),a.itemStart("area"),void 0!==r&&void 0!==s?(a.itemEnd("search"),a.itemEnd("area")):"u">typeof Image&&(r=new Image,s=new Image,r.addEventListener("load",()=>a.itemEnd("search")),s.addEventListener("load",()=>a.itemEnd("area")),r.src=CI,s.src=CO),this.applyPreset(e)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}
5953get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,i=this.weightsMaterial;switch(e){case CR.LOW:t.edgeDetectionThreshold=.15,i.orthogonalSearchSteps=4,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CR.MEDIUM:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=8,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CR.HIGH:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=16,i.diagonalSearchSteps=8,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0;break;case CR.ULTRA:t.edgeDetectionThreshold=.05,i.orthogonalSearchSteps=32,i.diagonalSearchSteps=16,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0}}setDepthTexture(e,t=3200){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,i){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;null!==e&&null!==t&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return CI}static get areaImageDataURL(){return CO}},CB=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb; 5954#if VIGNETTE_TECHNIQUE == 0 5955float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset)); 5956#else 5957vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord)); 5958#endif 5959outputColor=vec4(color,inputColor.a);}`,Cz={DEFAULT:0,ESKIL:1},CF=class extends Cc{constructor({blendFunction:e=Cn.NORMAL,technique:t=Cz.DEFAULT,eskil:i=!1,offset:r=.5,darkness:s=.5}={}){super("VignetteEffect",CB,{blendFunction:e,defines:new Map([["VIGNETTE_TECHNIQUE",t.toFixed(0)]]),uniforms:new Map([["offset",new lI(r)],["darkness",new lI(s)]])})}get technique(){return Number(this.defines.get("VIGNETTE_TECHNIQUE"))}set technique(e){this.technique!==e&&(this.defines.set("VIGNETTE_TECHNIQUE",e.toFixed(0)),this.setChanged())}get eskil(){return this.technique===Cz.ESKIL}set eskil(e){this.technique=e?Cz.ESKIL:Cz.DEFAULT}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get("darkness").value}set darkness(e){this.uniforms.get("darkness").value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}};function CN(e,t,i,r){var s;return(s=e+(t-e)*.75)+(i+(r-i)*.75-s)*.875}new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),CN(0,0,0,0),new Float32Array([0,0,0,0]),CN(0,
59590,0,1),new Float32Array([0,0,0,1]),CN(0,0,1,0),new Float32Array([0,0,1,0]),CN(0,0,1,1),new Float32Array([0,0,1,1]),CN(0,1,0,0),new Float32Array([0,1,0,0]),CN(0,1,0,1),new Float32Array([0,1,0,1]),CN(0,1,1,0),new Float32Array([0,1,1,0]),CN(0,1,1,1),new Float32Array([0,1,1,1]),CN(1,0,0,0),new Float32Array([1,0,0,0]),CN(1,0,0,1),new Float32Array([1,0,0,1]),CN(1,0,1,0),new Float32Array([1,0,1,0]),CN(1,0,1,1),new Float32Array([1,0,1,1]),CN(1,1,0,0),new Float32Array([1,1,0,0]),CN(1,1,0,1),new Float32Array([1,1,0,1]),CN(1,1,1,0),new Float32Array([1,1,1,0]),CN(1,1,1,1),new Float32Array([1,1,1,1]);var CU=class{constructor(e,t){this.enabled=!1,this.effect=new e(t),Object.defineProperty(this,"opacity",{enumerable:!0,set(e){this.effect.blendMode.opacity.value=e},get(){return this.effect.blendMode.opacity.value}}),Object.defineProperty(this,"blendFunction",{enumerable:!0,set(e){this.effect.blendMode.setBlendFunction(Number(e))},get(){return this.effect.blendMode.blendFunction}}),this.blendFunction=Cn.NORMAL}},Ck=class extends CU{constructor(){super(Cw),this.blendFunction=Cn.SCREEN}set intensity(e){this.effect.intensity=e}get intensity(){return this.effect.intensity}set luminanceThreshold(e){this.effect.luminanceMaterial.threshold=e}get luminanceThreshold(){return this.effect.luminanceMaterial.threshold}set luminanceSmoothing(e){this.effect.luminanceMaterial.smoothing=e}get luminanceSmoothing(){return this.effect.luminanceMaterial.smoothing}set blurScale(e){this.effect.blurPass.scale=e}get blurScale(){return this.effect.blurPass.scale}set kernelSize(e){this.effect.blurPass.kernelSize=e}get kernelSize(){return this.effect.blurPass.kernelSize}},CV=class extends CU{constructor(){super(CS)}set contrast(e){this.effect.uniforms.get("contrast").value=e}get contrast(){return this.effect.uniforms.get("contrast").value}set brightness(e){this.effect.uniforms.get("brightness").value=e}get brightness(){return this.effect.uniforms.get("brightness").value}},Cj=class extends CU{constructor(){super(CA),this.effect.offset=new tK(.01,.01)}set offset(e){this.effect.offset.set(e[0]/1e3,e[1]/1e3)}get offset(){return[1e3*this.effect.offset.x,1e3*this.effect.offset.y]}},CG=class extends CU{constructor(){super(C_)}},CH=class extends CU{constructor(){super(CC),this._hue=0}set hue(e){this._hue=e,this.effect.setHue(e)}get hue(){return this._hue}set saturation(e){this.effect.uniforms.get("saturation").value=e}get saturation(){return this.effect.uniforms.get("saturation").value}},CW=class extends CU{constructor(){super(CP),this.blendFunction=Cn.OVERLAY}},Cq=class extends CU{constructor(){super(CF)}get eskil(){return this.effect.eskil}set eskil(e){this.effect.eskil=e}get darkness(){return this.effect.uniforms.get("darkness").value}set darkness(e){this.effect.uniforms.get("darkness").value=e}get offset(){return this.effect.uniforms.get("offset").value}set offset(e){this.effect.uniforms.get("offset").value=e}},CX=class extends CU{constructor(e){super(CE)}set focalLength(e){this.effect.circleOfConfusionMaterial.uniforms.focalLength.value=e/2e3}get focalLength(){return this.effect.circleOfConfusionMaterial.uniforms.focalLength.value}set focusDistance(e){this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value=this.isPerspectiveCamera?e/2e3:(e+992)/2e3}get focusDistance(){return this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value}get bokehScale(){return this.effect.bokehScale}set bokehScale(e){this.effect.bokehScale=e}setCamera(e){let t=!1;(e.isPerspectiveCamera&&!1===this.isPerspectiveCamera||!e.isPerspectiveCamera&&!0===this.isPerspectiveCamera)&&(t=!0),e.isPerspectiveCamera?(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e.perspCamera),this.isPerspectiveCamera=!0):(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e),this.isPerspectiveCamera=!1),t&&this.effect.setChanged()}},CY=class extends CU{constructor(){super(CD)}get granularity(){return this.effect.getGranularity()}set granularity(e){this.effect.setGranularity(e)}},CQ=`#define GLSLIFY 1 5960varying vec2 vUv;varying vec2 vTexCoords[9];uniform vec2 resolution;void main(){vUv=position.xy*0.5+0.5;vec2 texelSize=vec2(1.0)/resolution;vTexCoords[0]=vUv+vec2(-texelSize.x,-texelSize.y);vTexCoords[1]=vUv+vec2(0.0,-texelSize.y);vTexCoords[2]=vUv+vec2(texelSize.x,-texelSize.y);vTexCoords[3]=vUv+vec2(-texelSize.x,0.0);vTexCoords[4]=vUv+vec2(0.0,0.0);vTexCoords[5]=vUv+vec2(texelSize.x,0.0);vTexCoords[6]=vUv+vec2(-texelSize.x,texelSize.y);vTexCoords[7]=vUv+vec2(0.0,texelSize.y);vTexCoords[8]=vUv+vec2(texelSize.x,texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}`,CZ=`#define GLSLIFY 1 5961#include <common> 5962varying vec2 vUv;varying vec2 vTexCoords[9];uniform sampler2D inputBuffer;uniform sampler2D historyBuffer;uniform sampler2D velocityBuffer;uniform sampler2D depthBuffer;uniform vec2 resolution; 5963#define USE_YCOCG 5964#define USE_CATMULL_ROM 5965const float feedback_min=0.5;const float feedback_max=0.95;
5965vec3 RGB_YCoCg(vec3 c){return vec3(c.x/4.0+c.y/2.0+c.z/4.0,c.x/2.0-c.z/2.0,-c.x/4.0+c.y/2.0-c.z/4.0);}vec3 YCoCg_RGB(vec3 c){return clamp(vec3(c.x+c.y-c.z,c.x+c.z,c.x-c.y-c.z),vec3(0.0),vec3(1.0));}vec4 sample_color(sampler2D tex,vec2 uv){ 5966#ifdef USE_YCOCG 5967vec4 c=texture(tex,uv);return vec4(RGB_YCoCg(c.rgb),c.a); 5968#else 5969return texture(tex,uv); 5970#endif 5971}vec4 sample_catmull_rom(sampler2D tex,vec2 uv,vec2 texSize){vec2 samplePos=uv*texSize;vec2 texPos1=floor(samplePos-0.5)+0.5;vec2 f=samplePos-texPos1;vec2 w0=f*(-0.5+f*(1.0-0.5*f));vec2 w1=1.0+f*f*(-2.5+1.5*f);vec2 w2=f*(0.5+f*(2.0-1.5*f));vec2 w3=f*f*(-0.5+0.5*f);vec2 w12=w1+w2;vec2 offset12=w2/(w1+w2);vec2 texPos0=texPos1-1.0;vec2 texPos3=texPos1+2.0;vec2 texPos12=texPos1+offset12;texPos0/=texSize;texPos3/=texSize;texPos12/=texSize;vec4 result=vec4(0.0);result+=texture2D(tex,vec2(texPos12.x,texPos0.y))*w12.x*w0.y;result+=texture2D(tex,vec2(texPos0.x,texPos12.y))*w0.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos12.y))*w12.x*w12.y;result+=texture2D(tex,vec2(texPos3.x,texPos12.y))*w3.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos3.y))*w12.x*w3.y;return result;}vec3 choose_motion_vector(){ 5972#ifdef CHOOSE_LONGEST_MOTION_VECTOR 5973float longest=-1.0;vec3 v_choose=vec3(-1.0);for(int i=0;i<9;i++){vec3 v=texture2D(velocityBuffer,vTexCoords[i]).rgb;float l=length(v.xy);if(l>longest){longest=l;v_choose=v;}}return v_choose; 5974#else 5975float closest_depth=1000.0;vec2 closest_uv_offset=vec2(0.0);for(int i=0;i<9;i++){float neighbor_depth=texture2D(depthBuffer,vTexCoords[i]).r;if(neighbor_depth<closest_depth){closest_uv_offset=vTexCoords[i];closest_depth=neighbor_depth;}}return texture2D(velocityBuffer,closest_uv_offset).rgb; 5976#endif 5977}vec4 clipAabb(vec3 aabb_min,vec3 aabb_max,vec4 avg,vec4 input_texel){const float FLT_EPS=0.00000001;vec3 p_clip=0.5*(aabb_max+aabb_min);vec3 e_clip=0.5*(aabb_max-aabb_min)+FLT_EPS;vec4 v_clip=input_texel-vec4(p_clip,avg.w);vec3 v_unit=v_clip.xyz/e_clip;vec3 a_unit=abs(v_unit);float ma_unit=max(a_unit.x,max(a_unit.y,a_unit.z));if(ma_unit>1.0){return vec4(p_clip,avg.w)+v_clip/ma_unit;}else{return input_texel;}}vec3 clip_aabb_variance(in vec3 cOld,in vec3 cNew,in vec3 centre,in vec3 halfSize){if(all(lessThanEqual(abs(cOld-centre),halfSize))){return cOld;}vec3 dir=(cNew-cOld);vec3 near=centre-sign(dir)*halfSize;vec3 tAll=(near-cOld)/dir;float t=0.0001;for(int i=0;i<3;i++){if(tAll[i]>=0.0&&tAll[i]<t){t=tAll[i];}}if(t>=0.0001){return cOld;}return cOld+dir*t;}void main(){vec3 v=choose_motion_vector();vec2 velocity=v.rg;vec2 previousPixelPos=vUv-velocity;vec4 currentColor=sample_color(inputBuffer,vUv); 5978#ifdef USE_CATMULL_ROM 5979vec4 previousColor=sample_catmull_rom(historyBuffer,previousPixelPos,resolution); 5980#else 5981vec4 previousColor=sample_color(historyBuffer,previousPixelPos); 5982#endif 5983#ifdef USE_YCOCG 5984previousColor=vec4(RGB_YCoCg(previousColor.rgb),previousColor.a); 5985#endif 5986vec4 ctl=sample_color(inputBuffer,vTexCoords[0]);vec4 ctc=sample_color(inputBuffer,vTexCoords[1]);vec4 ctr=sample_color(inputBuffer,vTexCoords[2]);vec4 cml=sample_color(inputBuffer,vTexCoords[3]);vec4 cmc=sample_color(inputBuffer,vTexCoords[4]);vec4 cmr=sample_color(inputBuffer,vTexCoords[5]);vec4 cbl=sample_color(inputBuffer,vTexCoords[6]);vec4 cbc=sample_color(inputBuffer,vTexCoords[7]);vec4 cbr=sample_color(inputBuffer,vTexCoords[8]);vec4 cmin=min(ctl,min(ctc,min(ctr,min(cml,min(cmc,min(cmr,min(cbl,min(cbc,cbr))))))));vec4 cmax=max(ctl,max(ctc,max(ctr,max(cml,max(cmc,max(cmr,max(cbl,max(cbc,cbr))))))));vec4 cavg=(ctl+ctc+ctr+cml+cmc+cmr+cbl+cbc+cbr)/9.0;vec4 cmin5=min(ctc,min(cml,min(cmc,min(cmr,cbc))));vec4 cmax5=max(ctc,max(cml,max(cmc,max(cmr,cbc))));vec4 cavg5=(ctc+cml+cmc+cmr+cbc)/5.0;cmin=0.5*(cmin+cmin5);cmax=0.5*(cmax+cmax5);cavg=0.5*(cavg+cavg5); 5987#ifdef USE_YCOCG 5988vec2 chroma_extent=vec2(0.25*0.5*(cmax.r-cmin.r));vec2 chroma_center=currentColor.gb;cmin.yz=chroma_center-chroma_extent;cmax.yz=chroma_center+chroma_extent;cavg.yz=chroma_center; 5989#endif 5990vec4 previousColorClipped=clamp(previousColor,cmin,cmax); 5991#ifdef LUMINANCE_DIFFERENCES 5992#ifdef USE_YCOCG 5993float lum0=currentColor.r;float lum1=previousColorClipped.r; 5994#else 5995float lum0=luminance(currentColor.rgb);float lum1=luminance(previousColorClipped.rgb); 5996#endif 5997float unbiased_diff=abs(lum0-lum1)/max(lum0,max(lum1,0.2));float unbiased_weight=1.0-unbiased_diff;float unbiased_weight_sqr=unbiased_weight*unbiased_weight;float k_feedback=mix(feedback_min,feedback_max,unbiased_weight_sqr);vec4 result=mix(currentColor,previousColorClipped,vec4(k_feedback)); 5998#else 5999const float alpha=0.1;vec4 result=mix(currentColor,previousColorClipped,1.0-alpha); 6000#endif 6001#ifdef USE_YCOCG 6002gl_FragColor=vec4(YCoCg_RGB(result.rgb).rgb,result.a); 6003#else 6004gl_FragColor=result; 6005#endif 6006}`,CK=`#define GLSLIFY 1 6007varying vec2 vUv;void main(){gl_Position=vec4(position.xy,1.0,1.0);vUv=position.xy*0.5+0.5;}`,CJ=`#define GLSLIFY 1 6008layout(location=1)out vec4 gVelocity;varying vec2 vUv;uniform sampler2D inputBuffer;void main(){gl_FragColor=texture2D(inputBuffer,vUv);gVelocity=vec4(0.0);}`,C$=class extends r8{constructor(){super({name:"PassthroughMaterial",uniforms:{inputBuffer:new lI(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CK,fragmentShader:CJ})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}}
6008,C0=class extends E6{constructor(){super("TAAResolvePass"),this.MRTCompatible=!0,this.needsSwap=!1,this.passThroughMaterial=new C$,this.resolutionVector=new tK,this.resolveMaterial=new r8({name:"TAAResolveMaterial",uniforms:{inputBuffer:new lI(null),historyBuffer:new lI(null),velocityBuffer:new lI(null),depthBuffer:new lI(null),resolution:new lI(new tK)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CQ,fragmentShader:CZ}),this.historyRenderTarget=new ip(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.historyRenderTarget.texture.name="TAA.History",this.resultRenderTarget=new ip(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.resultRenderTarget.texture.name="TAA.Output"}setSize(e,t){this.historyRenderTarget.setSize(e,t),this.resultRenderTarget.setSize(e,t)}render(e,t){this.fullscreenMaterial=this.resolveMaterial,this.resolveMaterial.uniforms.inputBuffer.value=t.texture[0],this.resolveMaterial.uniforms.velocityBuffer.value=t.texture[1],this.resolveMaterial.uniforms.depthBuffer.value=t.depthTexture,this.resolveMaterial.uniforms.historyBuffer.value=this.historyRenderTarget.texture,this.resolveMaterial.uniforms.resolution.value.set(t.width,t.height),e.setRenderTarget(this.resultRenderTarget),e.render(this.scene,this.camera),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(this.historyRenderTarget),e.render(this.scene,this.camera);let i=this.renderToScreen?null:t;this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(i),e.render(this.scene,this.camera)}dispose(){this.resultRenderTarget.dispose(),this.historyRenderTarget.dispose(),this.resolveMaterial.dispose(),this.passThroughMaterial.dispose()}},C1=class extends E6{constructor(e,t,i){super("TransmissionPass",void 0,t),this.MRTCompatible=!0,this.depthPass=new Ca(e,t,{renderTarget:i.transmissionDepthTarget}),this.passThroughMaterial=new C$,this.splineScene=e,this.needsSwap=!1}updatePasses(e){this.passThroughMaterial=new C$,this.depthPass=new Ca(this.splineScene,this.camera,{renderTarget:e.transmissionDepthTarget})}setCamera(e){this.camera=e}setScene(e){this.splineScene=e}render(e,t,i){let r=this.camera.layers.mask;e.setRenderTarget(e.transmissionRenderTarget),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=t.texture[0],e.clear(),e.render(this.scene,this.camera),this.camera.layers.disable(3),this.depthPass.render(e,t,i),e.shadowMap.needsUpdate=!1,e.shadowMap.autoUpdate=!1;let s=this.renderToScreen?null:t;this.camera.layers.set(3),e.setRenderTarget(s),e.render(this.splineScene,this.camera),this.camera.layers.mask=r}},C2=new nS,C3=new r8({transparent:!0,vertexShader:` 6009 void main() { 6010 gl_Position = vec4(0.0); 6011 } 6012 `,fragmentShader:` 6013 layout(location = 1) out vec4 gVelocity; 6014 6015 void main() { 6016 gl_FragColor = vec4(0.0); 6017 gVelocity = vec4(0.0); 6018 } 6019 `}),C4=class extends E6{constructor(e,t,i){super("OpaquePass",t??C2,i),this.MRTCompatible=!0,this.hasTransmissionPass=!1,this.clear=!0,this.clearColorOnly=!1,this.clearDepth=!1,this.needsSwap=!1,this.originalMaterials=new Map,this.MRTCompatible=e}setCamera(e){this.camera=e}setScene(e){this.scene=e??C2}getScene(){return this.scene}render(e,t){this.camera.layers.enable(3),this.hasTransmissionPass&&(this.originalMaterials.clear(),this.scene.traverse(e=>{e.layers.isEnabled(3)&&e instanceof SD&&(this.originalMaterials.set(e.id,e.material),e.material=C3)}),e.shadowMap.needsUpdate=!0,e.shadowMap.autoUpdate=!0),this.camera.layers.enable(8);let i=this.renderToScreen?null:t;e.setRenderTarget(i),this.clearColorOnly&&e.clear(!0,!1,!0),this.clear&&e.clear(),e.render(this.scene,this.camera),this.clearDepth&&e.clear(!1,!0,!1),this.hasTransmissionPass&&this.originalMaterials.forEach((e,t)=>{let i=this.scene.getObjectById(t);i&&(i.material=e)})}},C5=class{constructor(e,{depthBuffer:t=!0,stencilBuffer:i=!1,multisampling:r=0,frameBufferType:s=0}={}){this.renderer=e,this.helperStartIndex=0,this.copyPass=new E8,this.depthTexture=null,this.timer=new Cy,this._width=1,this._height=1,this.passes=[],this.helperPasses=[],this.autoRenderToScreen=!0,this.inputBuffer=this.createBuffer(t,i,s,r,!0,"input buffer mrt"),this.inputBufferSingle=this.createBuffer(t,i,s,r,!1," input buffer single"),this.inputBufferSingle.texture.dispose(),this.inputBufferSingle.depthTexture.dispose(),this.inputBufferSingle.texture=this.inputBuffer.texture[0],this.inputBufferSingle.depthTexture=this.inputBuffer.depthTexture,this.outputBuffer=this.inputBuffer.clone(),this.outputBuffer.name="output buffer mrt",this.outputBufferSingle=this.createBuffer(t,i,s,r,!1,"output buffer single"),this.outputBufferSingle.texture.dispose(),this.outputBufferSingle.depthTexture.dispose(),this.outputBufferSingle.texture=this.outputBuffer.texture[0],this.outputBufferSingle.depthTexture=this.outputBuffer.depthTexture,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples||0}set multisampling(e){let t=this.inputBuffer,i=this.multisampling;i>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):i!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("creating new input buffer"),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e,!0,"new input buffer"),this.inputBuffer.depthTexture=this.depthTexture,this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,null!==e){let t=e.getSize(new tK),i=e.getContext().getContextAttributes()?.alpha??!1,r=this.inputBuffer.texture[0].type;for(let s of(1009===r&&3001===e.outputEncoding&&(this.inputBuffer.texture[0].encoding=3001,this.outputBuffer.texture[0].encoding=3001,this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("doing some kinda dispose??")),e.autoClear=!1,this.setSize(t.width,t.height,!1),this.passes))s.initialize(e,i,r)}}replaceRenderer(e,t=!0){let i=this.renderer,r=i.domElement.parentNode;return this.setRenderer(e),t&&null!==r&&(r.removeChild(i.domElement),r.appendChild(e.domElement)),i}createDepthTexture(){let e=this.depthTexture=new ng(this._width,this._height);return this.inputBuffer.depthTexture=e,this.inputBuffer.stencilBuffer?(e.format=1027,e.type=1020):e.type=1014,e}deleteDepthTexture(){if(null!==this.depthTexture)for(let e of(this.depthTexture.dispose(),this.depthTexture=null,this.inputBuffer.depthTexture=null,this.inputBuffer.dispose(),this.passes))e.setDepthTexture(null)}createBuffer(e,t,i,r,s,a){let o=this.renderer,l=null===o?new tK:o.getDrawingBufferSize(new tK),h={minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,stencilBuffer:t,depthBuffer:e},c;return r>0?(c=new ip(l.width,l.height,h)).samples=r:(s?(c=new iv(l.width,l.height,2,h)).texture[1].type=1016:c=new ip(l.width,l.height,h),c.depthTexture=new ng(2048,2048),c.depthTexture.type=1015),1009===i&&null!==o&&3001===o.outputEncoding&&(Array.isArray(c.texture)?c.texture.forEach(e
6019=>e.encoding=3001):c.texture.encoding=3001),Array.isArray(c.texture)?c.texture.forEach((e,t)=>{e.name=`EffectComposer.Buffer ${s} ${t}`,e.generateMipmaps=!1}):(c.texture.name=`EffectComposer.Buffer ${s}`,c.texture.generateMipmaps=!1),c.name=a,c}addPass(e,t){let i=this.passes,r=this.renderer,s=r.getDrawingBufferSize(new tK),a=r.getContext().getContextAttributes()?.alpha??!1,o;if(e.MRTCompatible&&(o=this.inputBuffer.texture[0].type),e.MRTCompatible||(o=this.inputBuffer.texture.type),e.setRenderer(r),e.setSize(s.width,s.height),e.initialize(r,a,o),this.autoRenderToScreen&&(i.length>0&&(i[i.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),void 0!==t?i.splice(t,0,e):i.push(e),this.autoRenderToScreen&&(i[i.length-1].renderToScreen=!0),e.needsDepthTexture||null!==this.depthTexture){if(null===this.depthTexture){let t=this.createDepthTexture();for(e of i)e.setDepthTexture(t)}else e.setDepthTexture(this.depthTexture)}}setHelperStartIndex(e){this.helperStartIndex=e}removePass(e){let t=this.passes,i=t.indexOf(e);-1!==i&&t.splice(i,1).length>0&&(null!==this.depthTexture&&(t.reduce((e,t)=>e||t.needsDepthTexture,!1)||e.getDepthTexture()===this.depthTexture&&e.setDepthTexture(null)),this.autoRenderToScreen&&i===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0)))}removeAllPasses(){let e=this.passes;e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t=this.renderer,i=this.copyPass,r=this.inputBuffer,s=this.outputBuffer,a=this.inputBufferSingle,o=this.outputBufferSingle,l=!1,h,c,d,u;
6019for(let p of(void 0===e&&(e=this.timer.update().getDelta()),this.passes))p.enabled&&(p.MRTCompatible?p.render(t,r,s,e,l):p.render(t,a,o,e,l),p.needsSwap&&(l&&(i.renderToScreen=p.renderToScreen,h=t.getContext(),(c=t.state.buffers.stencil).setFunc(h.NOTEQUAL,1,4294967295),i.render(t,r,s,e,l),c.setFunc(h.EQUAL,1,4294967295)),d=r,u=a,r=s,a=o,s=d,o=u),p instanceof Cg?l=!0:p instanceof E9&&(l=!1))}setSize(e,t,i){let r=this.renderer;if(this._width=e,this._height=t,void 0===e||void 0===t){let i=r.getSize(new tK);e=i.width,t=i.height}r.setSize(e,t,i);let s=r.getDrawingBufferSize(new tK);for(let e of(this.inputBuffer.setSize(s.width,s.height),this.outputBuffer.setSize(s.width,s.height),this.inputBufferSingle.setSize(s.width,s.height),this.outputBufferSingle.setSize(s.width,s.height),this.passes))e.setSize(s.width,s.height)}reset(){let e=this.timer.isAutoResetEnabled();this.dispose(),this.autoRenderToScreen=!0,this.timer.setAutoResetEnabled(e)}dispose(){for(let e of this.passes)e.dispose();this.passes=[],null!==this.inputBuffer&&this.inputBuffer.dispose(),null!==this.outputBuffer&&this.outputBuffer.dispose(),null!==this.inputBufferSingle&&this.inputBufferSingle.dispose(),null!==this.outputBufferSingle&&this.outputBufferSingle.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose()}},C6=new r8({name:"CombineMaterial",uniforms:{inputBufferA:new lI(null),inputBufferB:new lI(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:` 6020varying vec2 vUv; 6021void main() { 6022 gl_Position = vec4(position.xy, 1.0, 1.0); 6023 vUv = position.xy * 0.5 + 0.5; 6024} 6025`,fragmentShader:` 6026 varying vec2 vUv; 6027 uniform sampler2D inputBufferA; 6028 uniform sampler2D inputBufferB; 6029 6030 // TODO: Why do we need these when postpro of framemode is enabled??? 6031 layout(location = 1) out vec4 gVelocity; 6032 6033 void main() { 6034 vec4 resA = texture2D(inputBufferA, vUv); 6035 vec4 resB = texture2D(inputBufferB, vUv); 6036 float a = resA.a + resB.a * ( 1.0 - resA.a ); 6037 6038 vec4 res; 6039 res.rgb = resA.rgb + (resB.rgb * (1.0 - resA.a)); 6040 res.a = resA.a + resB.a * (1.0 - resA.a); 6041 gl_FragColor = res; 6042 gVelocity = vec4(0.0); 6043 } 6044`}),C8=class extends E6{constructor(e){super("HelperPass",void 0,e),this.MRTCompatible=!1,this.fullscreenMaterial=C6,this.helperPass=new C4(!1,void 0,this.camera),this.helperPass.hasTransmissionPass=!1,this.helperPass.clear=!1,this.helperPass.renderToScreen=!1,this.helperPassOnTop=new C4(!1,void 0,this.camera),this.helperPassOnTop.hasTransmissionPass=!1,this.helperPassOnTop.clear=!1,this.helperPassOnTop.renderToScreen=!1;let t=new CL({preset:CR.LOW,edgeDetectionMode:2});this.effectPass=new Cu(this.camera,t),this.rt=new ip(10,10,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!0})}setSize(e,t){this.rt.setSize(e,t),this.effectPass.setSize(e,t)}set sceneHelpers(e){this.helperPass.setScene(e)}get sceneHelpers(){return this.helperPass.getScene()}set sceneHelpersOnTop(e){this.helperPassOnTop.setScene(e)}get sceneHelpersOnTop(){return this.helperPassOnTop.getScene()}setCamera(e){this.helperPass.setCamera(e),this.helperPassOnTop.setCamera(e)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}dispose(){super.dispose(),this.rt.dispose(),this.effectPass.dispose()}render(e,t,i){this.rt.depthTexture=t.depthTexture;let r=e.getClearAlpha();e.setClearAlpha(0),this.helperPass.clearDepth=!0,this.helperPass.clearColorOnly=!0,this.helperPass.render(e,this.rt),this.helperPassOnTop.render(e,this.rt),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.rt,i),this.fullscreenMaterial.uniforms.inputBufferA.value=i.texture,this.fullscreenMaterial.uniforms.inputBufferB.value=t.texture,e.setClearAlpha(r),e.setRenderTarget(null),e.clear(),e.render(this.scene,this.camera)}},C9=`#define GLSLIFY 1 6045out vec2 v_uv;void main(){v_uv=uv;gl_Position=vec4(position.xy,1.0,1.0);}`,C7=`#define GLSLIFY 1 6046in vec2 v_uv;const float pi=3.14159265;const float num_steps=4.0;const float num_directions=4.0;uniform float near;uniform float far;uniform float fov;uniform vec4 proj_info;uniform bool is_ortho;uniform vec2 resolution;uniform float radius_of_influence;uniform float radius_in_screen_space;uniform float exponent;uniform vec3 ao_color;uniform float bias;uniform sampler2D texture_depth;uniform sampler2D texture_normals;uniform sampler2D texture_blue_noise;uniform sampler2D texture_blue_noise_in_disk;uniform sampler2D texture_color_pass;uniform int frame_index;uniform bool fog_enabled;uniform float fog_near;uniform float fog_far;vec3 uv_to_view_space(vec2 uv,float eye_z){return vec3((uv*proj_info.xy+proj_info.zw)*(is_ortho ? 1.0 : eye_z),eye_z);}float linearize_depth(float depth_sampled){float z=is_ortho ? depth_sampled : depth_sampled*2.0-1.0;return mix((2.0*near*far)/(far+near-z*(far-near)),near+z*(far-near),float(is_ortho));}vec3 get_view_position(vec2 uv_coords){float linear_depth=linearize_depth(texture(texture_depth,uv_coords).x);return uv_to_view_space(uv_coords,linear_depth);}vec3 min_difference(vec3 p,vec3 right,vec3 left){vec3 v1=right-p;vec3 v2=p-left;return(dot(v1,v1)<dot(v2,v2))? v1 : v2;}vec3 rebuild_normal(in vec2 uv,in vec3 p){vec2 one_over_resolution=1.0/resolution;vec3 r=get_view_position(uv+vec2(one_over_resolution.x,0));vec3 l=get_view_position(uv+vec2(-one_over_resolution.x,0));vec3 t=get_view_position(uv+vec2(0,one_over_resolution.y));vec3 b=get_view_position(uv+vec2(0,-one_over_resolution.y));return normalize(cross(min_difference(p,r,l),min_difference(p,t,b)));}float falloff(float distance_squared){float neg_inv_r2=-1.0/(radius_of_influence*radius_of_influence);return distance_squared*neg_inv_r2+1.0;}float ao_contribution(vec3 P,vec3 N,vec3 S){vec3 to_sample=S-P;float norm_squared=dot(to_sample,to_sample);float norm=sqrt(norm_squared);float cos_theta=dot(N,to_sample)/norm;return clamp(cos_theta-bias,0.0,1.0)*clamp(falloff(norm_squared),0.0,1.0);}float compute_ambient_occlusion(vec2 uv,float radius_in_screen_space,vec3 pc,vec3 view_space_n){vec2 one_over_resolution=1.0/resolution;ivec2 noise_uv=ivec2(int(mod(gl_FragCoord.x,128.0)),int(mod(gl_FragCoord.y,128.0)));float noise=texelFetch(texture_blue_noise,noise_uv,0).r;noise=fract(noise+0.61803398875*float(frame_index));float theta=noise*2.0*3.1415;float ct=cos(theta);float st=sin(theta);float step_size=radius_in_screen_space/(num_steps+1.0);const float angle_step=2.0*pi/num_directions;float contribution=0.0;for(int i=0;i<int(num_directions);++i){float current_pixel=step_size+1.0;for(int j=0;j<int(num_steps);++j){int index=i*int(num_steps)+j;vec2 blue_noise_sample=texelFetch(texture_blue_noise_in_disk,ivec2(index,0),0).rg;vec2 disk_point;disk_point.x=blue_noise_sample.x*ct-blue_noise_sample.y*st;disk_point.y=blue_noise_sample.x*st+blue_noise_sample.y*ct;vec2 sample_direction=disk_point;vec2 snapped_uv=round(current_pixel*sample_direction)*one_over_resolution+uv;vec3 ps=get_view_position(snapped_uv);current_pixel+=step_size;contribution+=ao_contribution(pc,view_space_n,ps);}}float mult=1.0/(1.0-bias);contribution*=mult/(num_directions*num_steps);return clamp(1.0-contribution*2.0,0.0,1.0);} 6047#define USE_GBUFFER_NORMALS 6048void main(){vec3 view_space_p=get_view_position(v_uv); 6049#ifdef USE_GBUFFER_NORMALS 6050vec3 view_space_n=texture(texture_normals,v_uv).rgb;view_space_n.z*=-1.0; 6051#else 6052vec3 view_space_n=-rebuild_normal(v_uv,view_space_p); 6053#endif 6054float radius_ss=radius_in_screen_space/(is_ortho ? 1.0 : view_space_p.z);float ao=compute_ambient_occlusion(v_uv,radius_ss,view_space_p,view_space_n);float final=pow(ao,exponent);if(view_space_p.z>
6054=far){final=1.0;}vec3 color=mix(ao_color,vec3(1.0),final);if(fog_enabled){float fog_factor=smoothstep(fog_near,fog_far,view_space_p.z);color=mix(color,vec3(1.0),fog_factor);}gl_FragColor=vec4(color,1.0);}`,Te=`#define GLSLIFY 1 6055out vec2 v_uv;void main(){gl_Position=vec4(position.xy,1.0,1.0);v_uv=uv;}`,Tt=`#define GLSLIFY 1 6056in vec2 v_uv;uniform sampler2D texture_ao_lrez;uniform sampler2D texture_depth_lrez;uniform sampler2D texture_depth_hrez;uniform float near;uniform float far;float linearize_depth(float depth_sampled){float z=depth_sampled*2.0-1.0;return(2.0*near*far)/(far+near-z*(far-near));}vec2 nearest_depth_filter(in vec2 uv){vec2 resolution=vec2(textureSize(texture_depth_lrez,0));vec2 texel_size=1.0/resolution;vec2 offset=uv-0.5*texel_size;float d_hrez=texture(texture_depth_hrez,uv).r;float a=abs(d_hrez-texture(texture_depth_lrez,offset).r);float b=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,0.0)).r);float c=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(0.0,texel_size.y)).r);float d=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,texel_size.y)).r);float min_diff=min(a,min(b,min(c,d)));if(min_diff==a)return offset;if(min_diff==b)return offset+vec2(texel_size.x,0.0);if(min_diff==c)return offset+vec2(0.0,texel_size.y);if(min_diff==d)return offset+vec2(texel_size.x,texel_size.y);}void main(){ 6057#ifdef DEBUG 6058float d_lrez=texture(texture_depth_lrez,v_uv).r;float d_hrez=texture(texture_depth_hrez,v_uv).r;float output_d=mix(linearize_depth(d_lrez)/far,linearize_depth(d_hrez)/far,step(0.5,v_uv.x));gl_FragColor=vec4(vec3(output_d),1.0); 6059#else 6060vec2 filtered_uv=nearest_depth_filter(v_uv);vec4 ao=texture(texture_ao_lrez,filtered_uv);gl_FragColor=vec4(ao.rgb,1.0);gl_FragColor=ao; 6061#endif 6062}`,Ti=[[.478712,.875764],[-.337956,-.793959],[-.955259,-.028164],[.864527,.325689],[.209342,-.395657],[-.106779,.672585],[.156213,.235113],[-.413644,-.082856],[-.415667,.323909],[.141896,-.93998],[.954932,-.182516],[-.766184,.410799],[-.434912,-.458845],[.415242,-.078724],[.728335,-.491777],[-.058086,-.066401],[.20299,.686837],[-.808362,-.556402],[.507386,-.640839],[-.723494,-.22924],[.48974,.317826],[-.622663,.765301],[-.01064,.929347],[.663146,.647618],[-.096674,-.413835],[.525945,-.321063],[-.122533,.366019],[.195235,-.687983],[-.563203,.098748],[.418563,.561335],[-.378595,.800367],[.826922,.001024],[-.085372,-.766651],[-.92192,.183673],[-.590008,-.721799],[.167751,-.164393],[.032961,-.56253],[.6329,-.107059],[-.46408,.569669],[-.173676,-.958758],[-.242648,-.234303],[-.275362,.157163],[.382295,-.795131],[.562955,.115562],[.190586,.470121],[.770764,-.297576],[.237281,.93105],[-.666642,-.455871],[-.905649,-.298379],[.33952,.157829],[.701438,-.7041],[-.062758,.160346],[-.220674,.957141],[.642692,.432706],[-.77339,-.015272],[-.671467,.24688],[.158051,.062859],[.806009,.527232],[-.05762,-.247071],[.333436,-.51671],[-.550658,-.315773],[-.652078,.589846],[.008818,.530556],[-.210004,.519896]],Tr=new r8({vertexShader:`#define GLSLIFY 1 6063#include <skinning_pars_vertex> 6064#include <morphtarget_pars_vertex> 6065out vec3 n;void main(){ 6066#include <beginnormal_vertex> 6067#include <morphnormal_vertex> 6068#include <skinbase_vertex> 6069#include <skinnormal_vertex> 6070#include <defaultnormal_vertex> 6071#include <begin_vertex> 6072#include <morphtarget_vertex> 6073#include <skinning_vertex> 6074vec4 view_space=viewMatrix*modelMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*view_space;n=normalize(transformedNormal);}`,fragmentShader:`#define GLSLIFY 1 6075in vec3 n;void main(){gl_FragColor=vec4(n,1.0);}`}),Ts=new r8({vertexShader:Te,fragmentShader:Tt,uniforms:{texture_ao_lrez:new lI(null),texture_depth_lrez:new lI(null),texture_depth_hrez:new lI(null),near:new lI(null),far:new lI(null)}}),Ta=class extends E6{constructor(e,t){super("AmbientOcclusionPass",void 0,t),this.fogEnabled=!1,this.fogNear=1,this.fogFar=1e3,this.frameIndex=0,this._runHalfRes=!0,this._width=1,this._height=1,this.gBuffer=new ip(1024,1024,{type:uY?1016:1015,depthTexture:new ng(1024,1024),minFilter:1006,magFilter:1006}),this.depthBufferHighRes=new ip(1024,1024,{depthTexture:new ng(1024,1024)}),this.aoBuffer=new ip(1024,1024,{minFilter:1006,magFilter:1006}
6075),this.splineScene=e,this.splineCamera=t;let i=new Float32Array(2*Ti.length);for(let e=0;e<Ti.length;e++){let t=2*e;i[t+0]=Ti[e][0],i[t+1]=Ti[e][1]}this.blueNoiseInDiskTexture=new nC(i,Ti.length,1,1030,1015),this.blueNoiseInDiskTexture.wrapS=1e3,this.blueNoiseInDiskTexture.wrapT=1e3,this.blueNoiseInDiskTexture.needsUpdate=!0,this.hbaoMaterial=new r8({vertexShader:C9,fragmentShader:C7,uniforms:{near:new lI(null),far:new lI(null),fov:new lI(null),proj_info:new lI(new iu),is_ortho:new lI(!1),resolution:new lI(new tK),radius_of_influence:new lI(8),radius_in_screen_space:new lI(1),exponent:new lI(1),ao_color:new lI(new ix),bias:new lI(.5),texture_depth:new lI(null),texture_normals:new lI(null),texture_blue_noise:new lI(null),texture_blue_noise_in_disk:new lI(this.blueNoiseInDiskTexture),frame_index:new lI(0),fog_enabled:new lI(!1),fog_near:new lI(1),fog_far:new lI(1e3)}}),this.radius=128,this.aoColor={r:0,g:0,b:0},this.bias=.5,this.hbaoMaterial.uniforms.texture_depth.value=this.gBuffer.depthTexture,this.hbaoMaterial.uniforms.texture_normals.value=this.gBuffer.texture,this.needsSwap=!0,this.aaBuffer=new ip(1024,1024,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1,type:1015});let r=new CL({preset:CR.ULTRA,edgeDetectionMode:2});this.effectPass=new Cu(this.camera,r)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}setBlueNoiseTexture(e){this.hbaoMaterial.uniforms.texture_blue_noise.value=e}setSize(e,t){this._width=e,this._height=t,this.depthBufferHighRes.setSize(e,t);let i=this._runHalfRes?.5:1,r=e*i,s=t*i;this.gBuffer.setSize(r,s),this.aoBuffer.setSize(r,s),this.hbaoMaterial.uniforms.resolution.value.set(r,s),this.aaBuffer.setSize(r,s),this.effectPass.setSize(r,s)}get runHalfRes(){return this._runHalfRes}set runHalfRes(e){this._runHalfRes=e,this.setSize(this._width,this._height)}setCamera(e){this.splineCamera=e}setScene(e){this.splineScene=e}setDepthTexture(e){this.depthBufferHighRes.depthTexture=e,Ts.uniforms.texture_depth_hrez.value=e,Ts.needsUpdate=!0}render(e,t,i){this.splineScene.overrideMaterial=Tr;let r=this.splineCamera.layers.mask;if(this.splineCamera.layers.set(5),e.setRenderTarget(this.gBuffer),e.clear(),e.render(this.splineScene,this.splineCamera),e.setRenderTarget(this.depthBufferHighRes),e.clear(),e.render(this.splineScene,this.splineCamera),this.splineScene.overrideMaterial=null,this.splineCamera.layers.mask=r,this.hbaoMaterial.uniforms.radius_of_influence.value=this.radius,this.hbaoMaterial.uniforms.ao_color.value.set(this.aoColor.r,this.aoColor.g,this.aoColor.b),this.hbaoMaterial.uniforms.bias.value=this.bias,this.hbaoMaterial.uniforms.fog_enabled.value=this.fogEnabled,this.hbaoMaterial.uniforms.fog_near.value=this.fogNear,this.hbaoMaterial.uniforms.fog_far.value=this.fogFar,this.hbaoMaterial.uniforms.frame_index.value=this.frameIndex,this.frameIndex++,this.splineCamera.isPerspectiveCamera){this.hbaoMaterial.uniforms.near.value=this.splineCamera.perspCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.perspCamera.far;let e=this.splineCamera.perspCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1-e[8])/e[0],s=-(1+e[9])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.splineCamera.perspCamera.fov*(Math.PI/180),o=this.hbaoMaterial.uniforms.resolution.value.y/(2*Math.tan(.5*a)),l=.5*this.hbaoMaterial.uniforms.radius_of_influence.value*o;this.hbaoMaterial.uniforms.radius_in_screen_space.value=l,this.hbaoMaterial.uniforms.is_ortho.value=!1}else{this.hbaoMaterial.uniforms.near.value=this.splineCamera.orthoCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.orthoCamera.far;let e=this.splineCamera.orthoCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1+e[12])/e[0],s=-(1-e[13])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.hbaoMaterial.uniforms.resolution.value.y/i*.5,o=this.hbaoMaterial.uniforms.radius_of_influence.value*a;this.hbaoMaterial.uniforms.radius_in_screen_space.value=o,this.hbaoMaterial.uniforms.is_ortho.value=!0}this.runHalfRes?(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aoBuffer),e.clear(),e.render(this.scene,this.camera),this.fullscreenMaterial=Ts,Ts.uniforms.texture_ao_lrez.value=this.aoBuffer.texture,Ts.uniforms.texture_depth_lrez.value=this.gBuffer.depthTexture,Ts.uniforms.texture_depth_hrez.value=this.depthBufferHighRes.depthTexture,e.setRenderTarget(e.aoRenderTarget),e.clear(),e.render(this.scene,this.camera)):(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aaBuffer),e.clear(),e.render(this.scene,this.camera),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.aaBuffer,e.aoRenderTarget))}dispose(){this.gBuffer.dispose(),this.depthBufferHighRes.dispose(),this.aoBuffer.dispose()}},Tn=` 6076varying vec2 vUv; 6077void main() { 6078 vUv = uv; 6079 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6080}`,To=` 6081uniform sampler2D tInput; 6082uniform sampler2D tMap; 6083uniform vec2 resolution; 6084varying vec2 vUv; 6085 6086uniform vec2 uResolution; 6087uniform vec2 uCoords; 6088 6089// Draws a rectangle at center <st> with size <size> 6090float rectangle(vec2 st, vec2 size) { 6091 size = vec2(0.5) - size * 0.5; 6092 vec2 uv = vec2(step(size.x, st.x), step(size.y, st.y)); 6093 uv *= vec2(step(size.x, 1.0 - st.x), step(size.y, 1.0 - st.y)); 6094 6095 return uv.x * uv.y; 6096} 6097 6098uniform vec2 uSize; 6099uniform float uScale; 6100uniform float uDPR; 6101uniform float uCurrent; 6102uniform vec3 uSceneColor; 6103 6104void main() { 6105 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6106 screenUv *= 1.0 / uDPR; 6107 6108 vec2 center = vec2(0.5, -0.5); 6109 vec2 outsideUv = screenUv; 6110 outsideUv += center; 6111 outsideUv -= uCoords.xy / uResolution.xy; 6112 outsideUv = (outsideUv - 0.5) + 0.5; 6113 outsideUv -= center; 6114 vec2 s = (uSize / uResolution) * uScale; 6115 float isOutside = 1.0 - rectangle(outsideUv, s); 6116 6117 vec2 mid = vec2(0.5); 6118 vec2 insideUv = (screenUv - mid + s * mid) / s; 6119 vec4 background = texture2D(tInput, screenUv); 6120 vec4 image = texture2D(tMap, insideUv); 6121 gl_FragColor = mix(image, background, isOutside); 6122} 6123`,Tl=class extends Cv{constructor(){super(new r8({vertexShader:Tn,fragmentShader:To,uniforms:{tInput:new lI(null),tMap:new lI(null),uResolution:new lI(new tK),uSize:new lI(new tK),u
6123Coords:new lI(new tK),uScale:new lI(1),uSceneColor:new lI(new is(16711680)),uDPR:new lI(1),uCurrent:new lI(0)}}),"tInput"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tMap.value}set texture(e){this.uniforms.tMap.value=e}},Th=` 6124void main() { 6125 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6126}`,Tc=` 6127uniform sampler2D toScene; 6128uniform sampler2D fromScene; 6129uniform vec2 resolution; 6130 6131uniform vec2 uResolution; 6132uniform float uDPR; 6133 6134uniform float mixRatio; 6135uniform sampler2D tMixTexture; 6136uniform int useTexture; 6137uniform float threshold; 6138 6139void main() { 6140 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6141 screenUv *= 1.0 / uDPR; 6142 6143 vec4 texel1 = texture2D( fromScene, screenUv ); 6144 vec4 texel2 = texture2D( toScene, screenUv ); 6145 6146 if (useTexture==1) { 6147 6148 vec4 transitionTexel = texture2D( tMixTexture, screenUv ); 6149 float r = mixRatio * (1.0 + threshold * 2.0) - threshold; 6150 float mixf=clamp((transitionTexel.r - r)*(1.0/threshold), 0.0, 1.0); 6151 6152 gl_FragColor = mix( texel1, texel2, mixf ); 6153 } else { 6154 6155 gl_FragColor = mix( texel1, texel2, mixRatio ); 6156 6157 } 6158} 6159`,Td=class extends Cv{constructor(){super(new r8({vertexShader:Th,fragmentShader:Tc,uniforms:{toScene:new lI(null),fromScene:new lI(null),uResolution:new lI(new tK),uDPR:new lI(1),mixRatio:new lI(0),threshold:new lI(.1),useTexture:new lI(0),tMixTexture:{value:[][0]}}}),"toScene"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.fromScene.value}set texture(e){this.uniforms.fromScene.value=e}},Tu=` 6160void main() { 6161 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6162}`,Tp=` 6163uniform sampler2D inputBuffer; 6164uniform sampler2D blurredInputBuffer; 6165uniform sampler2D overlay; 6166uniform float blurIntensity; 6167 6168uniform vec2 uResolution; 6169uniform float uDPR; 6170 6171void main() { 6172 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 6173 screenUv *= 1.0 / uDPR; 6174 6175 vec4 texel1 = texture2D( overlay, screenUv ); 6176 vec4 texel2 = texture2D( inputBuffer, screenUv ); 6177 vec4 texel3 = texture2D( blurredInputBuffer, screenUv ); 6178 6179 float blurMask2 = max(sign(texel1.a), 0.0) * blurIntensity; 6180 gl_FragColor = mix( mix(texel2, texel3, blurMask2), texel1, texel1.a ); 6181} 6182`,Tf=class extends Cv{constructor(){super(new r8({vertexShader:Tu,fragmentShader:Tp,uniforms:{inputBuffer:new lI(null),blurredInputBuffer:new lI(null),overlay:new lI(null),uResolution:new lI(new tK),uDPR:new lI(1),blurIntensity:new lI(0)}})),this._blurEnabled=!1,this.blurTarget=new ip(1,1,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001}),this.blurPass=new Cf({width:window.innerWidth,height:window.innerHeight,kernelSize:Cx.HUGE,resolutionScale:.25}),this.blurPass.renderToScreen=!1,this.uniforms.blurredInputBuffer.value=this.blurTarget.texture}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.overlay.value}set texture(e){this.uniforms.overlay.value=e}setResolution(e,t,i=1){this.uniforms.uResolution.value.set(e,t),this.uniforms.uDPR.value=i,this.blurPass.setSize(e,t),this.blurTarget.setSize(e,t),this.blurPass.setSize(e,t)}get uiCanvas(){return this._uiCanvas}set uiCanvas(e){this._uiCanvas=e,e.texture&&(this.uniforms.overlay.value=e.texture);let t=e.frame;if(t){let e=t.data.backgroundBlur,i=e.radius;this._blurEnabled=e.enabled,this.uniforms.blurIntensity.value=this._blurEnabled?1:0,this.blurPass.scale=i/3}}render(e,t,i,r,s){this._blurEnabled&&(this.blurPass.setDepthTexture(this.getDepthTexture()),this.blurPass.render(e,t,this.blurTarget,r,s)),super.render(e,t,i,r,s)}},Tm=` 6183varying vec2 vUv; 6184void main() { 6185 vUv = uv; 6186 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6187}`,Tg=` 6188uniform sampler2D tInput; 6189uniform sampler2D tOverlayImage; 6190varying vec2 vUv; 6191uniform vec2 uResolution; 6192uniform vec2 uRightBottom; 6193uniform vec2 uImageSize; 6194uniform float uScale; 6195uniform float uDPR; 6196 6197vec3 blendNormal(vec3 base, vec3 blend) { 6198 return blend; 6199} 6200 6201vec3 blendNormal(vec3 base, vec3 blend, float opacity) { 6202 return (blendNormal(base, blend) * opacity + base * (1.0 - opacity)); 6203} 6204 6205vec4 drawFixedSizeImage(sampler2D image, vec2 screenUV, vec2 imageSize, vec2 imageCoords, vec2 screenSize, float dpr) { 6206 vec2 uv = (screenUV * screenSize * dpr - imageCoords) / (imageSize * dpr); 6207 if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { 6208 return vec4(0.0); 6209 } 6210 return texture2D(image, uv); 6211} 6212 6213void main() { 6214 vec2 screenUV = gl_FragCoord.xy / (uResolution.xy * uDPR); 6215 vec2 imageCoords = vec2(uResolution.x * uDPR - uImageSize.x * uScale * uDPR - uRightBottom.x * uDPR, uRightBottom.y * uDPR); 6216 vec4 background = texture2D(tInput, screenUV); 6217 vec4 image = drawFixedSizeImage(tOverlayImage, screenUV, uImageSize * uScale, imageCoords, uResolution, uDPR); 6218 gl_FragColor = vec4(blendNormal(background.rgb, image.rgb, image.a), max(background.a, image.a)); 6219} 6220`,Tv=class extends Cv{constructor(){super(new r8({vertexShader:Tm,fragmentShader:Tg,uniforms:{tInput:new lI(null),tOverlayImage:new lI(null),uResolution:new lI(new tK),uImageSize:new lI(new tK),uRightBottom:new lI(new tK(20,20)),uScale:new lI(.25),uDPR:new lI(1)}}),"tInput")}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tOverlayImage.value}set texture(e){this.uniforms.tOverlayImage.value=e,this.uniforms.uImageSize.value.set(e.image.width,e.image.height)}};function Ty(e,t){return t&&t.enabled&&e.push(t.effect),e}var Tx=e=>Object.values(Cn).includes(e)?e:Cn.NORMAL,Tb=class extends tz{constructor(e,t){super(),this._needsDOFResize=t,this.postprocessingState=vY.defaultData,this._scene=new nS,this._camera=new Ey,this.effects=new Map,this.blueNoiseTexture=new nC,this._renderToScreen=!0,this._isUIOverlayEnabled=!1,this.clock=new lv,this.renderer=e,this.debug=!1,this.effects.set("bloom",new Ck),this.effects.set("chromaticAberration",new Cj),this.effects.set("vignette",new Cq),this.effects.set("noise",new CW),this.effects.set("colorAverage",new CG),this.effects.set("hueSaturation",new CH),this.effects.set("brightnessContrast",new CV),this.effects.set("depthOfField",new CX),this.effects.set("pixelation",new CY),this.effectComposer=new C5(this.renderer),this.effectComposer.autoRenderToScreen=!1,this.opaquePass=new C4(!0,this.scene,this.camera),this.opaquePass.clear=!0,this.transmissionPass=new C1(this.scene,this.camera,this.renderer),this.aoPass=new Ta(this.scene,this.camera),this.taaPass=new C0,this.taaPass.renderToScreen=!1,this.helperPass=new C8(this.camera),this.helperPass.renderToScreen=!1,this.stylesOverlayPass=new Tl,this.stylesOverlayPass.enabled=!1,this.uiOverlayPass=new Tf,this.uiOverlayPass.enabled=!1,this.logoOverlayPass=new Tv,this.logoOverlayPass.enabled=!1,this.sceneTransitionPass=new Td,this.sceneTransitionPass.enabled=!1,this._initCopyPass(),this._initPasses()}set overlayTexture(e){void 0!==e?(this.stylesOverlayPass.texture=e,this.stylesOverlayPass.enabled=!0):this.stylesOverlayPass.enabled=!1}get overlayTexture(){return this.stylesOverlayPass.texture}set sceneHelpers(e){this.helperPass.sceneHelpers=e}get sceneHelpers(){return this.helperPass.sceneHelpers}set sceneHelpersOnTop(e){this.helperPass.sceneHelpersOnTop=e}get sceneHelpersOnTop(){return this.helperPass.sceneHelpersOnTop}get scene(){return this._scene}set scene(e){this._scene=e,this.opaquePass.setScene(e),this.transmissionPass.setScene(e),this.aoPass.setScene(e)}get camera(){return this._camera}set camera(e){let t=this._camera!==e;this._camera=e,this.opaquePass.setCamera(e),this.transmissionPass.setCamera(e),t&&this.transmissionPass.updatePasses(this.renderer),this.aoPass.setCamera(e),this.helperPass.setCamera(e),this.effects.get("depthOfField").setCamera(e)}updateRenderToScreen(){let e=!1;for(let t=this.effectComposer.passes.length-1;t>=0;t--){let i=this.effectComposer.passes[t];if(!0===i.enabled&&!e&&this._renderToScreen){i.renderToScreen=!0,e=!0;continue}i.renderToScreen=!1}}get isUIOverlayEnabled(){return this._isUIOverlayEnabled}disableUIOverlay(){this._isUIOverlayEnabled=!1}enableUIOverlay(){this._isUIOverlayEnabled=!0}disableHelpers(){this.helperPass.enabled=!1,this.updateRenderToScreen()}enableHelpers(){this.helperPass.enabled=!0,this.updateRenderToScreen()}updateBlueNoiseTexture(e){this.blueNoiseTexture=new nC(e,128,128),this.blueNoiseTexture.wrapS=1e3,this.blueNoiseTexture.wrapT=1e3,this.blueNoiseTexture.minFilter=1003,this.blueNoiseTexture.magFilter=1003,this.blueNoiseTexture.needsUpdate=!0}setAmbientOcclusionParams(e,t,i,r,s,a,o,l){this.aoPass.enabled=e,this.aoPass.radius=t,this.aoPass.bias=i,this.aoPass.aoColor=r,this.aoPass.fogEnabled=s,this.aoPass.fogNear=a,this.aoPass.fogFar=o,!l!==this.aoPass.runHalfRes&&(this.aoPass.runHalfRes=!l)}setTransmissionPassEnabled(e){this.transmissionPass.enabled=e,this.opaquePass.hasTransmissionPass=e}
6220_initPasses(){if(this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.removeAllPasses(),this.transmissionPass.updatePasses(this.renderer),this.effectComposer.addPass(this.aoPass),this.effectComposer.addPass(this.opaquePass),this.effectComposer.addPass(this.transmissionPass),this.effectComposer.addPass(this.taaPass),this.postprocessingState.enabled){let e=[this.effects.get("pixelation")].reduce(Ty,[]);e.length>0&&(this.uvEffectPass=new Cu(this.camera,...e),this.uvEffectPass.renderToScreen=!1,this.effectComposer.addPass(this.uvEffectPass));let t=[this.effects.get("chromaticAberration"),this.effects.get("bloom"),this.effects.get("depthOfField"),this.effects.get("colorAverage"),this.effects.get("hueSaturation"),this.effects.get("brightnessContrast"),this.effects.get("vignette"),this.effects.get("noise")].reduce(Ty,[]);if(t.length>0&&(this.effectPass=new Cu(this.camera,...t),this.effectPass.renderToScreen=!1,this.effectComposer.addPass(this.effectPass),this._needsDOFResize&&this.effects.get("depthOfField")?.enabled&&void 0!==window)){let e=this.renderer.viewportWidth,t=this.renderer.viewportHeight;this.renderer.setSize(e-1,t-1),this.renderer.setSize(e,t)}}this.effectComposer.addPass(this.stylesOverlayPass),this.effectComposer.addPass(this.uiOverlayPass),this.effectComposer.addPass(this.sceneTransitionPass),this.effectComposer.addPass(this.helperPass),this.effectComposer.addPass(this.logoOverlayPass)}_initCopyPass(){if(this._savePass)return;let e=new tK;this.renderer.getDrawingBufferSize(e),this._rt=new ip(e.x,e.y,{depthBuffer:!1,stencilBuffer:!1,wrapS:1e3,wrapT:1e3}),this._rt.samples=0,this._savePass=new E8(this._rt,!1),this._savePass.renderToScreen=!1}setCopyPass(e){this._rt=e,this._savePass=new E8(this._rt,!1),this.renderToScreen=!1}get renderToScreen(){return this._renderToScreen}set renderToScreen(e){if(this._renderToScreen===e)return;let t=this.effectComposer;t&&(!0===e?t.removePass(this._savePass):t.addPass(this._savePass),this._renderToScreen=e,this.updateRenderToScreen())}set sceneTransitionFromTexture(e){e!==this.sceneTransitionPass.texture&&(null!==e?this.sceneTransitionPass.enabled=!0:(this.sceneTransitionPass.enabled=!1,this.updateRenderToScreen()),this.sceneTransitionPass.texture=e)}setWatermark(e){this.logoOverlayPass.enabled=null!==e,e&&(this.logoOverlayPass.texture=e)}get texture(){return this._rt&&this._rt.texture}get renderTarget(){return this._rt}updatePostprocessing(e){let{enabled:t,...i}=e,r=!1;for(let e of(t!==this.postprocessingState.enabled&&(r=!0),Object.entries(i))){let t=e[1],i=this.effects.get(e[0]);if(i)for(let[e,s]of(i.enabled!==t.enabled&&(r=!0),i.enabled=t.enabled,Object.entries(t)))"blendFunction"===e?i.blendFunction=Tx(s):i[e]=s}this.postprocessingState=e,r&&this._initPasses()}render(){this.effectComposer.render(this.clock.getDelta())}setScissor(e,t,i,r){e instanceof iu?(this.effectComposer.inputBuffer.scissor.set(e.x,e.y,e.z,e.w),this.effectComposer.outputBuffer.scissor.set(e.x,e.y,e.z,e.w)):(this.effectComposer.inputBuffer.scissor.set(e,t,i,r),this.effectComposer.outputBuffer.scissor.set(e,t,i,r));let s=this.renderer.getPixelRatio();this.effectComposer.inputBuffer.scissor.multiplyScalar(s),this.effectComposer.outputBuffer.scissor.multiplyScalar(s),this.renderer.setScissor(e,t,i,r)}setScissorTest(e){this.effectComposer.inputBuffer.scissorTest=e,this.effectComposer.outputBuffer.scissorTest=e,this.renderer.setScissorTest(e)}setViewport(e,t,i,r){e instanceof iu?(this.effectComposer.inputBuffer.viewport.copy(e),this.effectComposer.outputBuffer.viewport.copy(e)):(this.effectComposer.inputBuffer.viewport.set(e,t,i,r),this.effectComposer.outputBuffer.viewport.set(e,t,i,r))}resize(e,t,i){if(this.effectComposer.setSize(e,t,i),this._rt){let i=this.renderer.getPixelRatio();this._rt.setSize(e*i,t*i)}}dispose(){this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.dispose()}},Tw=e=>` 6221 6222// PCSS implementation based on: 6223// https://www.gamedev.net/articles/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/ 6224// NOTE: This number affects how big the shadow blur can 6225// possibly get. Bigger number == bigger blur, but less precise results 6226 6227const float gPenumbraFilterSize = 80.0; 6228const int gPenumbraSamples = ${e}; 6229const int gShadowSamples = ${e}; 6230const float gShadowSamplesRpc = 1.0f / float(gShadowSamples); 6231 6232#ifdef USE_SHADOWMAP 6233 #if NUM_DIR_LIGHT_SHADOWS > 0 6234 6235 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 6236 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 6237 6238 struct DirectionalLightShadow { 6239 float shadowBias; 6240 float shadowNormalBias; 6241 float shadowRadius; 6242 vec2 shadowMapSize; 6243 }; 6244 6245 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 6246 6247 #endif 6248
6249 #if NUM_SPOT_LIGHT_SHADOWS > 0 6250 6251 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 6252 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_SHADOWS ]; 6253 6254 struct SpotLightShadow { 6255 float shadowBias; 6256 float shadowNormalBias; 6257 float shadowRadius; 6258 vec2 shadowMapSize; 6259 }; 6260 6261 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 6262 6263 #endif 6264 6265 #if NUM_POINT_LIGHT_SHADOWS > 0 6266 6267 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 6268 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 6269 6270 struct PointLightShadow { 6271 float shadowBias; 6272 float shadowNormalBias; 6273 float shadowRadius; 6274 vec2 shadowMapSize; 6275 float shadowCameraNear; 6276 float shadowCameraFar; 6277 }; 6278 6279 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 6280 6281 #endif 6282 6283 /* 6284 #if NUM_RECT_AREA_LIGHTS > 0 6285 6286 // TODO (abelnation): create uniforms for area light shadows 6287 6288 #endif 6289 */ 6290 6291float computePenumbra(int index, sampler2D shadowMap, float temporalAngle, float texelSize, vec2 uv, float compare, float texelScalar, float shadowRadius) 6292{ 6293 float penumbra = 1.0; 6294 float blockerDepthAvg = 0.0; 6295 float blockerCount = 0.0; 6296 6297 #pragma unroll_loop_start 6298 for(int i = 0; i < gPenumbraSamples; i ++) 6299 { 6300 vec2 offset = (vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize) * texelScalar; 6301 float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ); 6302 6303 if(depth < compare + 0.0001) 6304 { 6305 blockerDepthAvg += depth; 6306 blockerCount++; 6307 } 6308 } 6309 #pragma unroll_loop_end 6310 6311 if (blockerCount > 0.0) 6312 { 6313 blockerDepthAvg /= blockerCount; 6314 6315 // Compute penumbra 6316 penumbra = (compare - blockerDepthAvg) / (blockerDepthAvg); 6317 penumbra *= penumbra; 6318 penumbra *= 200.0 * penumbraSize[min(index, 5 - 1)]; // Magic number that affects how quickly the penumbra grows 6319 6320 return clamp(penumbra, 0.00, 1.0); 6321 } 6322 return 0.0; 6323} 6324 6325float vogelShadow(int index, sampler2D shadowMap, vec2 uv, float texelSize, float compare, float shadowRadius) 6326{ 6327 float shadow = 0.0f; 6328 6329 // NOTE: When using TAA, we should use screen space interleaved gradient noise 6330 vec2 halton = haltonSequence[frameIndex]; 6331 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6332 float temporalAngle = temporalOffset * PI2; 6333 6334 float texelScalar = (gPenumbraFilterSize) / (texelSize * 1024.); 6335 float penumbra = computePenumbra(index, shadowMap, temporalAngle, texelSize, uv, compare, texelScalar, shadowRadius); 6336 if (penumbra == -1.0) { 6337 return 1.0; 6338 } 6339 6340 #pragma unroll_loop_start 6341 for (int i = 0; i < gShadowSamples; i++) 6342 { 6343 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6344 // Overall blurring offset 6345 vec2 offset = vogelSample * (shadowRadius * 2.); 6346 6347 // Penumbra offset 6348 offset += vogelSample * (penumbra * texelScalar); 6349 6350 shadow += step( compare, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) ); 6351 } 6352 #pragma unroll_loop_end 6353 6354 return shadow * gShadowSamplesRpc; 6355} 6356 6357 6358 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 6359 6360 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 6361 6362 } 6363 6364 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 6365 6366 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 6367 6368 } 6369 6370 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 6371 6372 float occlusion = 1.0; 6373 6374 vec2 distribution = texture2DDistribution( shadow, uv ); 6375 6376 float hard_shadow = step( compare , distribution.x ); // Hard Shadow 6377 6378 if (hard_shadow != 1.0 ) { 6379 6380 float distance = compare - distribution.x ; 6381 float variance = max( 0.00000, distribution.y * distribution.y ); 6382 float softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality 6383 softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed 6384 occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 6385 6386 } 6387 return occlusion; 6388 6389 } 6390 6391 float getShadow( int i, sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 6392 6393 float shadow = 1.0; 6394 6395 shadowCoord.xyz /= shadowCoord.w; 6396 shadowCoord.z += shadowBias; 6397 6398 // if ( something && something ) breaks ATI OpenGL shader compiler 6399 // if ( all( something, something ) ) using this instead 6400 6401 bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 ); 6402 bool inFrustum = all( inFrustumVec ); 6403 6404 bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 ); 6405 6406 bool frustumTest = all( frustumTestVec ); 6407 6408 if ( frustumTest ) { 6409 6410 #if defined( SHADOWMAP_TYPE_PCF ) 6411 6412 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6413 return vogelShadow(i, shadowMap, shadowCoord.xy, texelSize.x, shadowCoord.z, shadowRadius ); 6414 6415 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6416 6417 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6418 float dx = texelSize.x; 6419 float dy = texelSize.y; 6420 6421 vec2 uv = shadowCoord.xy;
6422 vec2 f = fract( uv * shadowMapSize + 0.5 ); 6423 uv -= f * texelSize; 6424 6425 shadow = ( 6426 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 6427 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 6428 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 6429 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 6430 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 6431 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 6432 f.x ) + 6433 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 6434 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 6435 f.x ) + 6436 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 6437 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 6438 f.y ) + 6439 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 6440 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 6441 f.y ) + 6442 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 6443 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 6444 f.x ), 6445 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 6446 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 6447 f.x ), 6448 f.y ) 6449 ) * ( 1.0 / 9.0 ); 6450 6451 #elif defined( SHADOWMAP_TYPE_VSM ) 6452 6453 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 6454 6455 #else // no percentage-closer filtering: 6456 6457 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 6458 6459 #endif 6460 6461 } 6462 6463 return shadow; 6464 6465 } 6466 6467 // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D 6468 // vector suitable for 2D texture mapping. This code uses the following layout for the 6469 // 2D texture: 6470 // 6471 // xzXZ 6472 // y Y 6473 // 6474 // Y - Positive y direction 6475 // y - Negative y direction 6476 // X - Positive x direction 6477 // x - Negative x direction 6478 // Z - Positive z direction 6479 // z - Negative z direction 6480 // 6481 // Source and test bed: 6482 // https://gist.github.com/tschw/da10c43c467ce8afd0c4 6483 6484 vec2 cubeToUV( vec3 v, float texelSizeY ) { 6485 6486 // Number of texels to avoid at the edge of each square 6487 6488 vec3 absV = abs( v ); 6489 6490 // Intersect unit cube 6491 6492 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 6493 absV *= scaleToCube; 6494 6495 // Apply scale to avoid seams 6496 6497 // two texels less per square (one texel will do for NEAREST) 6498 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 6499 6500 // Unwrap 6501 6502 // space: -1 ... 1 range for each square 6503 // 6504 // #X## dim := ( 4 , 2 ) 6505 // # # center := ( 1 , 1 ) 6506 6507 vec2 planar = v.xy; 6508 6509 float almostATexel = 1.5 * texelSizeY; 6510 float almostOne = 1.0 - almostATexel; 6511 6512 if ( absV.z >= almostOne ) { 6513 6514 if ( v.z > 0.0 ) 6515 planar.x = 4.0 - v.x; 6516 6517 } else if ( absV.x >= almostOne ) { 6518 6519 float signX = sign( v.x ); 6520 planar.x = v.z * signX + 2.0 * signX; 6521 6522 } else if ( absV.y >= almostOne ) { 6523 6524 float signY = sign( v.y ); 6525 planar.x = v.x + 2.0 * signY + 2.0; 6526 planar.y = v.z * signY - 2.0; 6527 6528 } 6529 6530 // Transform to UV space 6531 6532 // scale := 0.5 / dim 6533 // translate := ( center + 0.5 ) / dim 6534 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 6535 6536 } 6537 6538 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 6539 6540 float shadow = 1.0; 6541 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 6542 6543 // for point lights, the uniform @vShadowCoord is re-purposed to hold 6544 // the vector from the light to the world-space position of the fragment. 6545 vec3 lightToPosition = shadowCoord.xyz; 6546 6547 // dp = normalized distance from light to fragment position 6548 float compare = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp? 6549 compare += shadowBias; 6550 6551 // bd3D = base direction 3D 6552 vec3 bd3D = normalize( lightToPosition ); 6553 6554 vec2 halton = haltonSequence[frameIndex]; 6555 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6556 float temporalAngle = temporalOffset * PI2; 6557 6558 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_VSM ) 6559 for (int i = 0; i < gShadowSamples; i++) { 6560 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6561 6562 // Overall blurring offset 6563 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6564 6565 // NOTE: Removed for now 6566 // Penumbra offset 6567 //offset += vec3(vogelSample.x, vogelSample.y, vogelSample.y) * (penumbra * gPenumbraFilterSize); 6568 6569 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6570 6571 } 6572 return shadow * gShadowSamplesRpc; 6573 6574 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6575 for (int i = 0; i < 16; i++) { 6576 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6577 6578 // Overall blurring offset 6579 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6580 6581 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6582 6583 } 6584 return shadow * (1.0 / 16.0); 6585 #else // no percentage-closer filtering 6586 6587 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), compare ); 6588 6589 #endif 6590 6591 } 6592 6593#endif 6594`,TS=sp.lights_fragment_begin,T_=sp.shadowmask_pars_fragment,TA=null,TM=e=>{switch(e){case"low":return 8;case"medium":default:return 16;case"high":return 32}},TE=(e="medium")=>{if(TA===e)return!1;TA=e;let t=TM(e);sp.shadowmap_pars_fragment=Tw(t);let i=TS.slice();i=(i=i.replace("getShadow( spotShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX + 3, spotShadowMap[ i ]")).replace("getShadow( directionalShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX, directionalShadowMap[ i ]"),sp.lights_fragment_begin=i;let r=T_.slice();return r=r.replaceAll("getShadow(","getShadow( UNROLLED_LOOP_INDEX, "),sp.shadowmask_pars_fragment=r,!0},TC=new r8({vertexShader:` 6595attribute vec3 randomColor; 6596varying vec3 vNormal; 6597flat out vec3 vColor; 6598#include <skinning_pars_vertex> 6599#include <morphtarget_pars_vertex> 6600 6601void main() 6602{ 6603#include <beginnormal_vertex> 6604#include <morphnormal_vertex> 6605#include <skinbase_vertex> 6606#include <skinnormal_vertex> 6607vec3 transformed = vec3(position); 6608#include <morphtarget_vertex> 6609#include <skinning_vertex> 6610 6611vNormal = normal; 6612vColor = randomColor; 6613gl_Position = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 6614} 6615`,fragmentShader:` 6616uniform float depthContrast; 6617varying vec3 vNormal; 6618flat in vec3 vColor; 6619void main() 6620{ 6621vec3 normal = (normalize(vNormal)).rgb; 6622 6623float contrastDepth = (gl_FragCoord.z - 0.5) * depthContrast + 0.5; 6624 6625vec3 resultColor = mix(mix(vColor, normal, 0.2), vec3(contrastDepth), 0.4); 6626gl_FragColor = vec4(resultColor, vColor.r); 6627gl_FragColor = vec4(resultColor, vColor.r); 6628} 6629`,uniforms:{depthContrast:{value:1}}}),TT=new id,TP=new tK,TD=class extends nb{constructor(e){super(e),this._pixelRatio=this.getPixelRatio(),this.viewportWidth=1,this.viewportHe
6629ight=1,this.resolution=new tK,this.dummyCamera=new Ey,this.sceneTransitionDuration=0,this.sceneTransitionTimeRemaining=-1,this.isXRCopyPassSet=!1,this.clear=(e=!0,t=!0,i=!0)=>{let r=this.getContext(),s=0;e&&(s|=r.COLOR_BUFFER_BIT),t&&(s|=r.DEPTH_BUFFER_BIT),i&&(s|=r.STENCIL_BUFFER_BIT),r.clear(s),r.clearBufferfv(r.COLOR,1,[0,0,0,1])},this.pipeline=new Tb(this,e?.needsDOFResize??!1),this.autoClear=!1;let t=this.setPixelRatio.bind(this),i=this.setSize.bind(this);this.shadowMap.enabled=!0,this.shadowMap.type=1,this.dummyCamera.matrixAutoUpdate=!1,this.domElement.removeAttribute("data-engine");let r=this.getContext();if(r&&"drawingBufferColorSpace"in r)try{r.drawingBufferColorSpace="display-p3"}catch(e){console.warn(e)}this.setPixelRatio=e=>{this._pixelRatio!==e&&(this._pixelRatio=e,t(e))},this.setSize=(e,t,r=!0)=>{(this.viewportWidth!==e||this.viewportHeight!==t)&&(this.viewportWidth=e,this.viewportHeight=t,i(e,t,r),this.normalRenderTarget?.setSize(e*this._pixelRatio,t*this._pixelRatio),this._resizeTransmission(e,t),this.transmissionDepthTarget?.setSize(e*this._pixelRatio/2,t*this._pixelRatio/2),this.pipeline.resize(e,t,r))},this._superDispose=this.dispose,this.dispose=this._currentDispose}createAORenderTarget(){void 0===this.aoRenderTarget&&(this.aoRenderTarget=new ip(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}))}_resizeTransmission(e,t){this.transmissionRenderTarget?.setSize(e*this._pixelRatio/(this.hdTransmission?1:2),t*this._pixelRatio/(this.hdTransmission?1:2)),this.aoRenderTarget?.setSize(e*this._pixelRatio/1,t*this._pixelRatio/1)}get hdTransmission(){return 1===_V.transmissionLod.value}set hdTransmission(e){_V.transmissionLod.value=!0===e?1:2,this._resizeTransmission(this.viewportWidth,this.viewportHeight)}createTransmissionRenderTarget(){void 0===this.transmissionRenderTarget&&(this.transmissionRenderTarget=new ip(this.viewportWidth*this._pixelRatio/(this.hdTransmission?1:2),this.viewportHeight*this._pixelRatio/(this.hdTransmission?1:2),{generateMipmaps:!0,minFilter:1008,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}),this.transmissionDepthTarget=new ip(this.viewportWidth*this._pixelRatio/2,this.viewportHeight*this._pixelRatio/2,{minFilter:1003,magFilter:1003,depthBuffer:!1}))}createNormalRenderTarget(){void 0===this.normalRenderTarget&&(this.normalRenderTarget=new ip(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1003,magFilter:1003,type:1015,depthTexture:new ng(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio)}))}renderNormal(e,t,i){this.normalRenderTarget&&(this.setClearColor(0),i.layers.enable(8),i.layers.disable(0),i.layers.disable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!1)}),this.setRenderTarget(this.normalRenderTarget),this.clear(),i instanceof Ey?TC.uniforms.depthContrast.value=(i.far-i.near)/1e4:TC.uniforms.depthContrast.value=1,t.overrideMaterial=TC,this.render(t,i),this.setClearColor(t.bgColor,t.bgColor.a),this.setRenderTarget(null),t.overrideMaterial=e.wireframeState?DA:null,i.layers.enable(0),i.layers.enable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!0)}))}renderSplineSceneWithDummyCamera(e,t,i=1){this.dummyCamera.updateCameraState(t.dataPatched),this.dummyCamera.matrix.copy(t.matrixWorld);let r=t.height,s=t.width,a=this.viewportWidth/this.viewportHeight;s<r?s=r*a:r=s/a,this.dummyCamera.setViewplaneSize(s,r);for(let t=0;t<i;t++)this.renderSplineScene(e,this.dummyCamera)}renderSplineScene(e,t,{sceneHelpers:i=this.sceneHelpers,sceneHelpersOnTop:r=this.sceneHelpersOnTop,overrideTransmission:s,overrideNormal:a}={}){let o=e instanceof DE?e.activePage:e,l=o.visible;o.visible=!0;let h=o.scene;this.xr.enabled&&(!1===this.isXRCopyPassSet&&null!==this.getRenderTarget()&&(this.pipeline.setCopyPass(this.getRenderTarget()),this.isXRCopyPassSet=!0),this.xr.updateCamera(t)),this.setClearColor(o.bgColor,o.bgColor.a),o.penumbraSizeArray.forEach((e,t)=>{_V.penumbraSize.value[t]=e}),_V.pixelRatioNode.value=this.getPixelRatio(),0!==this.resolution.x&&0!==this.resolution.y?_V.resolution.value.set(this.resolution.x,this.resolution.y):_V.resolution.value.set(this.viewportWidth*this._pixelRatio,this.viewportHe
6629ight*this._pixelRatio),void 0!==a?(_V.normalRenderTarget.value=a,_V.normalRenderTargetDepth.value=TT):h.needsNormal()&&(this.createNormalRenderTarget(),_V.normalRenderTarget.value=this.normalRenderTarget.texture,_V.normalRenderTargetDepth.value=this.normalRenderTarget.depthTexture,this.renderNormal(h,o,t));let c=o.data.ao,d=c.occlusion;if(d&&(this.createAORenderTarget(),_V.aoRenderTarget.value=this.aoRenderTarget.texture),_V.aoEnabled.value=d,this.pipeline.setAmbientOcclusionParams(c.occlusion,c.radius,c.bias,o.aoColor,null!==o.fog,o.backupFog.near,o.backupFog.far,c.aoFullRes&&!uY),this.pipeline.aoPass.setBlueNoiseTexture(this.pipeline.blueNoiseTexture),this.pipeline.isUIOverlayEnabled&&o.uiCanvas?.enabled&&o.uiCanvas.texture&&o.uiCanvas.texture.image.width>0){let e=this.getSize(TP),t=this.getPixelRatio();(o.uiCanvas.width!==this.viewportWidth||o.uiCanvas.height!==this.viewportHeight||o.uiCanvas.dpr!==t)&&o.uiCanvas.applySize({width:this.viewportWidth,height:this.viewportHeight},t),o.uiCanvas.render(this),this.pipeline.uiOverlayPass.uiCanvas=o.uiCanvas,this.pipeline.uiOverlayPass.enabled=!0,this.pipeline.uiOverlayPass.setResolution(e.x,e.y,t),this.pipeline.updateRenderToScreen()}else this.pipeline.uiOverlayPass.enabled=!1,this.pipeline.updateRenderToScreen();if(this.pipeline.logoOverlayPass.enabled){let e=this.getSize(TP),t=this.getPixelRatio();this.pipeline.logoOverlayPass.uniforms.uResolution.value.set(e.x,e.y),this.pipeline.logoOverlayPass.uniforms.uDPR.value=t}let u=!1;if(void 0!==s)_V.transmissionRenderTarget.value=s,_V.transmissionRenderTargetDepth.value=TT,this.pipeline.setTransmissionPassEnabled(!1);else{var p,f;let e=h.needsTransmission();e&&(void 0===this.transmissionRenderTarget&&(u=!0),this.createTransmissionRenderTarget(),_V.transmissionRenderTarget.value=this.transmissionRenderTarget.texture,_V.aspectRatio.value=(p=this.viewportWidth)>=(f=this.viewportHeight)?new tK(f/p,1):new tK(1,p/f),_V.transmissionRenderTargetDepth.value=this.transmissionDepthTarget.texture),this.pipeline.setTransmissionPassEnabled(e)}t.layers.enable(3),t.layers.enable(8),this.pipeline.sceneHelpers=i,this.pipeline.sceneHelpersOnTop=r,this.pipeline.scene=o,this.pipeline.camera=t,u&&this.pipeline.transmissionPass.updatePasses(this),this.pipeline.postprocessingState===o.postprocessing||(this.pipeline.updatePostprocessing(o.postprocessing),i||r||this.pipeline.disableHelpers()),void 0!==this.clearAlphaOverride&&this.setClearAlpha(this.clearAlphaOverride),o.overrideMaterial=h.wireframeState?DA:null,this.pipeline.render(),_V.frameIndex.value=(_V.frameIndex.value+1)%16,t instanceof Ey&&t.copyHistory(),o.visible=l}renderFromSceneForSceneTransitionPass(e,t,i){this.pipeline.renderToScreen=!1,this.pipeline.renderTarget,this.renderSplineScene(e,t),this.pipeline.sceneTransitionFromTexture=this.pipeline.renderTarget.texture,this.sceneTransitionDuration=i,this.sceneTransitionTimeRemaining=i,this.pipeline.renderToScreen=!0;let r=this.pipeline.sceneTransitionPass.uniforms;r.uDPR.value=window.devicePixelRatio,r.uResolution.value.set(this.domElement.width,this.domElement.height).divideScalar(window.devicePixelRatio)}_currentDispose(){this._superDispose(),this.pipeline.dispose(),this.aoRenderTarget?.dispose(),this.transmissionRenderTarget?.dispose(),this.transmissionDepthTarget?.dispose(),this.normalRenderTarget?.dispose(),this.normalRenderTarget?.depthTexture?.dispose()}},TI=class extends Et(lX){constructor(e,t=15,i=10066329){super(e,t,i),this.object=e,this.added=!1,this.name=`DirectionalLightHelper: ${e.uuid}`}raycast(e,t){Ea(this.object,TI.geometryHelper,e,t)}},TO=class extends Et(lG){constructor(e,t=15,i=6710886){super(e,t,i),this.object=e,this.name=`PointLightHelper: ${e.uuid}`}raycast(e,t){Ea(this.object,TO.geometryHelper,e,t)}},TR=class extends Et(lj){constructor(e,t=6710886){super(e,t),this.object=e,this.name=`SpotLightHelper: ${e.uuid}`}raycast(e,t){Ea(this.object,TR.geometryHelper,e,t)}update(){if(void 0!==this.object){let e=TR._vector,t=this.object.distance?this.object.distance:1e3,i=t*Math.tan(this.object.angle);this.cone.scale.set(i,i,t),e.setFromMatrixPosition(this.object.target.matrixWorld),this.cone.lookAt(e);let r=void 0!==this.color?this.color:this.light.color;if(this.cone.material instanceof Array)for(let e=0,t=this.cone.material.length;e<t;e++)this.cone.material[e].color.set(r);else this.cone.material.color.set(r)}}},TL=TR;TL._vector=new ix;var TB=class extends np{constructor(){super(),this.caretIndex=0,this._caretVisibleAlpha=1,this._selectionVisibleAlpha=.3,this.current={start:0,end:void 0},this.matrixAutoUpdate=!1,this.caretMesh=new rJ(new su(1,1),new rA({transparent:!0,opacity:0,side:2})),this.add(this.caretMesh),this.selectionMesh=new rJ(new su(1,1),new rA({color:2857471,transparent:!0,depthTest:!1,depthWrite:!1,opacity:0,side:2})),this.add(this.selectionMesh),this.hide()}get caretHeight(){return this.object?.AD??0}show(e){this.visible=!0,this.object=e,this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.y=-(.5*this.caretHeight),this.setCaretPosition(this.caretIndex),this.update()}hide(){this.visible=!1}update(){if(void 0===this.object)return;this.updateHelperMatrix();let{depth:e}=this.object.geometry.userData.parameters;this.caretMesh.position.z=e,this.selectionMesh.position.z=e}updateHelperMatrix(){if(void 0===this.object)return;let e=this.object,t=e.parent;for(let i of(null!==t&&t.updateWorldMatrix(!0,!1),e.matrixAutoUpdate&&e.updateMatrix(),null!==t?(this.matrixWorld.multiplyMatrices(t.matrixWorld,e.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,e.matrix)):this.matrixWorld.multiplyMatrices(e.hiddenMatrix,e.matrix),this.matrix.copy(this.matrixWorld),this.children))i.matrixWorld.copy(this.matrixWorld);e.updateWorldMatrix(!0,!0)}setCaretColor(e){let t=this.caretMesh.material;t.color.setRGB(e.r,e.g,e.b);let i=this._caretVisibleAlpha===t.opacity;this._caretVisibleAlpha=e.a,i&&(t.opacity=this._caretVisibleAlpha)}setSelectionColor(e){this.selectionMesh.material.color.setRGB(e.r,e.g,e.b)}setCaretPosition(e,t={}){if(void 0===this.object)return;this.caretIndex=e;let i=this.object.wrappedText,[r,s]=TF(i,e),[a,o]=e>0?TF(i,e-1):[null,null];(e>0&&i.length?i[a].charAt(o):null)===` 6630`&&(r++,s=0),this.current.start=e,this.current.end=void 0;let[l,h]=Tz(this.object,r,s),{AD:c,descender:d}=this.object,{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.set(l-.5*("string"==typeof u?0:u),h+(d+.5*c)+.5*("string"==typeof p?0:p),f),this.hideSelectionMesh(),this.showCaretMesh()}setSelection(e,t){if(void 0===this.object)return;let i=this.object.wrappedText;this.current.start=e,this.current.end=t;let r=[],s=[],a=function(e,t,i){let[r,s]=TF(e,t),[a,o]=TF(e,i),l=[];s>=e[r].length&&(r++,s=0);for(let t=r;t<=a;t++){let i=e[t],h=t===r?s:0,c=t===a?o:i.length;l.push([t,h,c])}return l}(i,e,t),{lineHeight:o,AD:l,descender:h}=this.object,c=h+.5*l-.5*o;for(let[e,t,i]of a)if(t!==i){let[a,l]=Tz(this.object,e,t),[h,d]=Tz(this.object,e,i);l+=c,d+=c+o;let u=r.length/3;r.push(a,l,0),r.push(h,l,0),r.push(h,d,0),r.push(a,d,0),s.push(u+0,u+1,u+2),s.push(u+2,u+3,u+0)}let d=new rN;d.setIndex(s),d.setAttribute("position",new rD(r,3));let{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.selectionMesh.geometry.dispose(),this.selectionMesh.geometry=d,this.selectionMesh.position.x=-(.5*("string"==typeof u?0:u)),this.selectionMesh.position.y=.5*("string"==typeof p?0:p),this.selectionMesh.position.z=f,this.showSelectionMesh(),this.hideCaretMesh()}getSelectionFromPosition(e,t,i="previous"){if(void 0===this.object||void 0===this.object.font)return;let r=this.object.wrappedText,s=r.length,a=this.object.lineHeight,o=s*a,{height:l,verticalAlign:h}=this.object.geometry.userData.parameters,c="string"==typeof l?0:l,d=0;
66303===h?d=c-o:2===h&&(d=.5*c-.5*o);let u=Math.min(Math.floor(Math.max(Math.min(-t-d,o),0)/a),s-1),p=this.object.charCoords[u],f=this.object.charWidths[u],m=0,g=!1;if("previous"===i){for(let t=0;t<p.length;t++)if(p[t][0]+.5*f[t]-e>0){m=t,g=!0;break}}else if("closest"===i){let t=1/0;for(let i=0;i<p.length;i++){let r=Math.abs(p[i][0]+.5*f[i]-e);r<t&&(t=r,m=i,g=!0)}}else for(let t=0;t<p.length;t++){let i=p[t][0],r=p[t][0]+f[t];if(e>=i&&e<r){m=t,g=!0;break}}return g||(m=p.length),{index:this.getGlobalIndexFromLineAndCharIndexes(r,u,m),lineIndex:u,characterIndex:m}}getGlobalIndexFromLineAndCharIndexes(e,t,i){return e.slice(0,t).reduce((e,t)=>e+=t.length,0)+i}showSelectionMesh(){this.selectionMesh.material.opacity=this._selectionVisibleAlpha}hideSelectionMesh(){this.selectionMesh.material.opacity=0}showCaretMesh(){this.caretMesh.material.opacity=this._caretVisibleAlpha}hideCaretMesh(){this.caretMesh.material.opacity=0}};function Tz(e,t,i){let{charCoords:r,charWidths:s,initialOffsetY:a,lineHeight:o}=e;if(r[t]&&0===r[t].length||0===r.length){let i=0,{horizontalAlign:r}=e.data.geometry,s=e.wrappedText,{width:l}=e.geometry.userData.parameters;return 1===s.length&&0===s[0].length&&(3===r?i=.5*l:2===r&&(i=l)),[i,a-o*t]}let l=r[t];if(void 0===l||0===l.length)return[0,0];let[h,c]=l[Math.min(i,l.length-1)];return i>=l.length&&(h+=s[t][i-1]),[h,c]}function TF(e,t){let i=0;for(let r=0;r<e.length;r++){let s=e[r],a=t-i;if(a<=s.length)return[r,a];i+=s.length}return[Math.max(0,e.length-1),e[e.length-1]?.length??0]}var TN=class extends E_(lf,TI){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=2048,this.shadow.mapSize.height=2048,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.top=1250,r.bottom=-1250,r.right=1250,r.left=-1250,r.near=-1e4,r.far=2500;let s=new lZ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lZ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update()}updateState(e,t){var i;this.updateState_Light(e,t);let r=void 0!==e.depth&&e.depth!==this.shadow.camera.far||void 0!==e.size&&e.size/2!==this.shadow.camera.right;void 0!==e.size&&(i=e.size,this.shadow.camera.right=i/2,this.shadow.camera.left=-i/2,this.shadow.camera.top=i/2,this.shadow.camera.bottom=-i/2,this.shadow.needsUpdate=!0),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),r&&this.update()}},TU=new ix,Tk=new ix,TV=new iy,Tj=class extends E_(lo,TL){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=2*tZ.RAD2DEG*this.angle,r.aspect=1,r.near=100,r.far=2500;let s=new lZ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lZ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),Tk.setFromMatrixPosition(this.matrixWorld),TV.setFromRotationMatrix(this.matrixWorld),TU.copy(this.up).applyQuaternion(TV).negate().multiplyScalar(this.distance),this.target.position.copy(Tk).add(TU),this.target.updateMatrixWorld(),this.objectHelper&&this.objectHelper.update()}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.angle&&(this.angle=e.angle),void 0!==e.penumbra&&(this.penumbra=e.penumbra),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}};function TG(e,t){return[[e[0][0]*t[0][0]+e[0][1]*t[1][0],e[0][0]
6630*t[0][1]+e[0][1]*t[1][1]],[e[1][0]*t[0][0]+e[1][1]*t[1][0],e[1][0]*t[0][1]+e[1][1]*t[1][1]]]}function TH(e){return[[e[0][0],e[1][0]],[e[0][1],e[1][1]]]}(e=>{function t(e){return[e[0],e[3],e[1],e[4],e[2],e[5]]}e.identity=function(){return[1,0,0,0,1,0,0,0,1]},e.copy=function(t,i=e.identity()){for(let e=0,r=t.length;e<r;e++)i[e]=t[e];return i},e.create=function(t,i,r,s,a,o){return e.setAbcdef(e.identity(),t,i,r,s,a,o)},e.setAbcdef=function(e,t,i,r,s,a,o){return e[0]=t,e[1]=r,e[2]=a,e[3]=i,e[4]=s,e[5]=o,e},e.append=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r);return e.create(d*s+u*o,d*a+u*l,p*s+f*o,p*a+f*l,m*s+g*o+h,m*a+g*l+c)},e.prepend=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r),v=s,y=a,x=o,b=l;return(1!==d||0!==u||0!==p||1!==f)&&(v=s*d+a*p,y=s*u+a*f,x=o*d+l*p,b=o*u+l*f),e.create(v,y,x,b,h*d+c*p+m,h*u+c*f+g)},e.getAbcdef=t,e.invert=function(t){let[i,r,s,a,o,l]=e.getAbcdef(t),h=i*a-r*s;return e.create(a/h,-r/h,-s/h,i/h,(s*l-a*o)/h,-(i*l-r*o)/h)},e.apply=function([t,i],r){let[s,a,o,l,h,c]=e.getAbcdef(r);return[s*t+o*i+h,a*t+l*i+c]},e.applyInverse=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(i),c=1/(r*o+-(a*s)),[d,u]=t;return[o*c*d+-a*c*u+(h*a-l*o)*c,r*c*u+-s*c*d+(-h*r+l*s)*c]},e.scale=function(t,i,r=i){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s*i,a*r,o*i,l*r,h*i,c*r),t},e.rotate=function(t,i){let r=Math.cos(i),s=Math.sin(i),[a,o,l,h,c,d]=e.getAbcdef(t);return e.setAbcdef(t,a*r-o*s,a*s+o*r,l*r-h*s,l*s+h*r,c*r-d*s,c*s+d*r),t},e.rotateAround=function(t,i,r){let[s,a]=r,o=e.translate(t,-s,-a);return o=e.rotate(o,i),o=e.translate(o,s,a)},e.translate=function(t,i,r){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,h+i,c+r),t},e.setTranslate=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.setPosition=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.getScale=function(t){let[i,r,s,a]=e.getAbcdef(t);return[Math.sqrt(i*i+r*r),Math.sqrt(s*s+a*a)]},e.getPosition=function(t){let[,,,,i,r]=e.getAbcdef(t);return[i,r]},e.getRotation=function(t,i){return e.decompose(t,i).rotation},e.decompose=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(t),{rotation:c,scale:d,shear:u}=function(e){let t,i,r,s,a,o,l,h,c,d,u,p;let[f,m,g]=(t=(e[0][0]+e[1][1])/2,i=(e[0][0]-e[1][1])/2,r=(e[1][0]+e[0][1])/2,a=Math.sqrt(t*t+(s=(e[1][0]-e[0][1])/2)*s),o=Math.sqrt(i*i+r*r),l=Math.atan2(r,i),c=((h=Math.atan2(s,t))-l)/2,u=[[Math.cos(d=(h+l)/2),Math.sin(d)],[-Math.sin(d),Math.cos(d)]],p=[[Math.cos(c),Math.sin(c)],[-Math.sin(c),Math.cos(c)]],u[0][0]*=-1,u[0][1]*=-1,p[0][0]*=-1,p[1][0]*=-1,[u,[[a+o,0],[0,a-o]],p]),v=TG(f,TH(g)),y=TG(TG(g,m),TH(g));return{rotation:Math.atan2(v[1][0],v[0][0]),scale:[y[0][0],y[1][1]],shear:[y[0][1]/y[1][1],y[1][0]/y[0][0]]}}([[r,a],[s,o]]);return{position:[l+(i[0]*r+i[1]*a)-i[0],h+(i[0]*s+i[1]*o)-i[1]],scale:d,rotation:c,shear:u,pivot:i}},e.compose=function(t,i,r,s,a=[0,0]){let[o,l]=t,[h,c]=s,[d,u,p,f]=function({rotation:e,scale:t,shear:i}){let r=Math.cos(e),s=Math.sin(e),a=TG([[r,-s],[s,r]],[[t[0],i[0]*t[1]],[i[1]*t[0],t[1]]]);return[a[0][0],a[1][0],a[0][1],a[1][1]]}({rotation:r,scale:i,shear:a});return e.create(d,u,p,f,o-(h*d+c*p)+h,l-(h*u+c*f)+c)}})(TX||(TX={}));var TW,Tq,TX,TY,TQ=Math.PI/180,TZ=class{constructor(e,t,i){this.uuid=e,this.data=t,this.localMatrix=TX.identity(),this.worldMatrix=TX.identity(),this.ignoreCameraZoom=!1,this.visible=!0,this._singleBBox=new T1,this._recursiveBBox=new T1,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this.stateSelection=null,this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this.name="",this.position=[0,0],this.scale=[1,1],this.rotation=0,this.shear=[0,0],this.emitter=wL(),this.dpr=i.dpr??1,this.dataPatched=t}project(e,t){let i=this.worldMatrix;return t&&(i=TX.append(t.worldMatrix,i)),TX.applyInverse(e,i)}intersects(e,t,i,r=!1){return this.visible&&!this.data.raycastLock&&this.intersectsInLocalSpace(...this.project([e,t],i),r)}intersectsInLocalSpace(e,t,i=!1){let{min:r,max:s}=i?this.recursiveBBox:this.singleBBox;return e>=r[0]&&e<=s[0]&&t>=r[1]&&t<=s[1]}applyTransforms(e){e.setTransform(this.worldMatrix,this.ignoreCameraZoom)}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges()),this._recursiveBBox}updateLocalMatrix(){this.localMatrix=TX.compose(this.position,this.scale,this.rotation*TQ,yG.getPivot(this.dataPatched),this.shear)}updateWorldMatrix(e,t,i){let r=this.parent;t&&null!=r&&r.updateWorldMatrix(e,!0,!1),e&&this.updateLocalMatrix(),this.parent?this.worldMatrix=TX.append(this.parent.worldMatrix,this.localMatrix):this.worldMatrix=TX.copy(this.localMatrix),this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}get pivot(){return yG.getPivot(this.data)}getCenter(){return[0,0]}getHalfSize(){return[0,0]}get id(){return this.uuid}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{e.resetBBoxNeedsUpdateSelf()})}updateTransformState(e){let t=!1;void 0!==e.position&&(t=!0,this.position=e.position),void 0!==e.rotation&&(t=!0,this.rotation=e.rotation),void 0!==e.scale&&(t=!0,this.scale=e.scale),void 0!==e.shear&&(t=!0,this.shear=e.shear),t&&(this.updateWorldMatrix(!0,!1,!0),this.resetBBoxNeedsUpdate())}updateByOp(e,t,i){0===e.type&&void 0!==e.props.visible&&(this.visible=e.props.visible),this.data=t,this.data=t;let r=e,s=pY(e.path,["states","*"]);if(null!==s){if(0===e.type){let[t]=s;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p2.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}r={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}let i=p2.removeOverridden(e.path,e.props,t);r={...e,props:i}}}this.updateByPatchedOpBase(r,yO.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i)}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)yO.toOps(this.data,e.data).forEac
vendor: 4,150 bytes, line 6630
6630h(e=>{let i=p$.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=yO.patch(this.data,i),yO.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched),this.stateSelection=e}}updateState(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.visible&&(this.visible=e.visible),this.updateTransformState(e)}updateByPatchedOpBase(e,t,i){this.dataPatched=t,this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){0===e.path.length&&0===e.type&&this.updateState(e.props,i),this.requestRender()}traverseFrameAncestors(e){this.traverseAncestors(t=>{"frame2d"===t.data.type&&e(t)})}traverseAncestors(e){let t=this.parent;for(;t;)e(t),t=t.parent}requestRender(){this.traverseFrameAncestors(e=>{e.requestRender()})}clone(e){let t=new TZ(this.uuid,this.data,e);return t.parent=void 0,t}addEventListener(e,t){this.emitter.on(e,t)}removeEventListener(e,t){this.emitter.off(e,t)}dispatchEvent(e){this.emitter.emit(e.type,{...e,target:e.target??this})}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children;if(t){let i=t.indexOf(this)+1;return t[i]?t[i]:e.traverseSortNextHelper()}}}sortNext(){let e=this.children;return e&&e.length>0&&e[0]?e[0]:this.traverseSortNextHelper()}isDescendantOf(e){e instanceof TZ&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}},TK=class extends TZ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.context=i,this.children=[]}add(e){e.parent&&e.parent instanceof TK&&e.parent.remove(e),this.children.push(e),e.parent=this}remove(e){let t=this.children.indexOf(e);t>=0&&(this.children.splice(t,1),e.parent=void 0)}traverse(e){let t=e(this);if(!0!==t)for(let i of this.children)i instanceof TK?i.traverse(e):t=e(i)}intersectsChildrenHelper(e,t,i,r,s){for(let a of this.children)if(a.intersects(e,t,i,!1)&&(s.push(a),r)||a instanceof TK&&a.intersectsChildrenHelper(e,t,i,r,s))return!0;return!1}intersectsChildren(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelper(e,t,i,r,s),s}intersectsChildrenHelperReverse(e,t,i,r,s){for(let a of this.children)if(a instanceof TK&&a.intersectsChildrenHelperReverse(e,t,i,r,s)||a.intersects(e,t,i,!1)&&(s.push(a),r))return!0;return!1}intersectsChildrenReverse(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelperReverse(e,t,i,r,s),s}updateWorldMatrix(e,t,i){if(super.updateWorldMatrix(e,t,i),i&&this.children)for(let t of this.children)t.updateWorldMatrix(e,!1,!0)}find(e){let t;return this.traverse(i=>{i.uuid===e&&(t=i)}),t}innerDrawChildren(e){for(let t=this.children.length-1;t>=0;t--)this.children[t].draw(e)}resetBBoxNeedsUpdate(){super.resetBBoxNeedsUpdate(),this.traverse(e=>{e.resetBBoxNeedsUpdateSelf()})}clone(e){let t=new TK(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},TJ=class extends TK{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.updateState(t,i)}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.innerDrawChildren(e),e.restore())}clone(e){let t=new TJ(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},T$=[[-1,1],[-1,-1],[1,-1],[1,1]],T0=(e,t,i)=>{let r=e.getCenter(),s=e.getHalfSize(),a=TX.append(t,e.worldMatrix);0===s[0]&&0===s[1]?i.push(TX.apply(r,a)):T$.forEach(e=>{let t=[e[0]*s[0]+r[0],e[1]*s[1]+r[1]];i.push(TX.apply(t,a))})},T1=class{constructor(){this.matrix=TX.identity(),this.min=[1/0,1/0],this.max=[-1/0,-1/0],this.vertices=[],this.edges=[]}setFromObjectSize(e,t=!1){e.updateWorldMatrix(),this.makeEmpty(),TX.copy(e.worldMatrix,this.matrix);let i=TX.invert(e.worldMatrix);this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];!0===i&&e instanceof TK?e.traverse(e=>{e.visible&&T0(e,t,r)}):T0(e,t,r),this.setFromPoints(r)}setFromSize(e,t,i){this.makeEmpty(),TX.copy(i,this.matrix),this.expandBySize(e,t,i)}expandBySize(e,t,i){[TX.apply([0,0],i),TX.apply([0,t],i),TX.apply([e,t],i),TX.apply([e,0],i)].forEach(e=>this.expandByPoint(e))}getCenter(){let[e,t]=this.min,[i,r]=this.getHalfSize();
6630return TX.apply([e+i,t+r],this.matrix)}getSize(){return[this.max[0]-this.min[0],this.max[1]-this.min[1]]}getHalfSize(){return[(this.max[0]-this.min[0])*.5,(this.max[1]-this.min[1])*.5]}makeEmpty(){this.min=[1/0,1/0],this.max=[-1/0,-1/0]}setFromPoints(e){for(let t of(this.makeEmpty(),e))this.expandByPoint(t)}expandByPoint(e){this.min=[Math.min(this.min[0],e[0]),Math.min(this.min[1],e[1])],this.max=[Math.max(this.max[0],e[0]),Math.max(this.max[1],e[1])]}computeVertices(){let[e,t]=this.getHalfSize(),i=this.getCenter(),[r,s,a,o]=TX.getAbcdef(this.matrix),l=TX.create(r,s,a,o,i[0],i[1]);this.vertices=T$.map(([i,r])=>TX.apply([i*e,r*t],l))}computeEdges(){this.edges=[];for(let e=0,t=this.vertices.length;e<t;++e)this.edges.push([this.vertices[e],this.vertices[(e+1)%t]])}project(e,t){let i=this.matrix;return t&&(i=TX.append(t.worldMatrix,i)),TX.applyInverse(e,i)}intersects(e,t,i){return this.intersectsInLocalSpace(...this.project([e,t],i))}intersectsInLocalSpace(e,t){let{min:i,max:r}=this;return e>=i[0]&&e<=r[0]&&t>=i[1]&&t<=r[1]}containsPoint(e){let[t,i]=e,[r,s]=this.min,[a,o]=this.max;return t>=r&&t<=a&&i>=s&&i<=o}intersectsBBox2D(e){for(let t=0,i=this.edges.length;t<i;t++){let i=this.edges[t];for(let t=0,r=e.edges.length;t<r;t++)if(function(e,t){let[[i,r],[s,a]]=e,[[o,l],[h,c]]=t,d=(i-s)*(l-c)-(r-a)*(o-h);if(0===d)return!1;let u=((i-o)*(l-c)-(r-l)*(o-h))/d,p=-((i-s)*(r-l)-(r-a)*(i-o))/d;return u>=0&&u<=1&&p>=0&&p<=1}(i,e.edges[t]))return!0}for(let t=0,i=e.vertices.length;t<i;t++){let i=e.vertices[t];if(this.containsPoint(i))return!0}return!1}ensureMinMax(){let e=this.min,t=this.max;this.min=[Math.min(e[0],t[0]),Math.min(e[1],t[1])],this.max=[Math.max(e[0],t[0]),Math.max(e[1],t[1])]}copy(e){this.min=[...e.min],this.max=[...e.max],TX.copy(e.matrix,this.matrix),this.computeVertices(),this.computeEdges()}clone(){let e=new T1;return e.copy(this),e}},T2=new Promise(e=>{TY=e}),T3=!1;function T4(e){let t=!1;return e.scene.objects.traverse((e,i)=>{("Mesh"===i.type&&"UIGeometry"===i.geometry.type||"Page"===i.type&&void 0!==i.uiFrame)&&(t=!0)}),t}async function T5(e){let t=await T2;Pt||(Pi||(Pi=t({locateFile:()=>e})),Pt=await Pi)}var T6=TX.identity(),T8=class{constructor(e,t=1){this.canvas=e,this._dpr=t,this._width=0,this._height=0,this._strokeMode="inside",this._layerBlur=0,this._backgroundBlur=0,this._dropShadowBlur=0,this._dropShadowOffsetX=0,this._dropShadowOffsetY=0,this._dropShadowColor=gn.transparent,this._innerShadowBlur=0,this._innerShadowOffsetX=0,this._innerShadowOffsetY=0,this._innerShadowSpread=0,this._innerShadowColor=gn.transparent,this._fonts=new Map,this._isSizeDirty=!1;try{let i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}catch{console.log(e.width,t)}this._currentM3Transform=T6,this._currentTransform=new Float32Array(T6)}get dpr(){return this._dpr}set dpr(e){this._dpr=e,this._isSizeDirty=!0}
6630async init(){if(!this.wasmURL)throw Error("Your must set the wasm binary url with renderer.wasmURL = ... before you can call renderer.init");await T5(this.wasmURL),this._surface=Pt.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas(),this._paint=new Pt.Paint,this._paint.setAntiAlias(!0),this._paintFill=this._paint.copy(),this._paintFill.setStyle(Pt.PaintStyle.Fill),this._paintStroke=this._paint.copy(),this._paintStroke.setStyle(Pt.PaintStyle.Stroke),this.ctx?.scale(this.dpr,this.dpr)}get currentTransform(){return this._currentM3Transform}get currentTransformBuffer(){return this._currentTransform}set currentTransform(e){this._currentM3Transform=e,this._currentTransform.set(e)}async loadFont(e,t){let i=await (await fetch(e)).arrayBuffer();this.registerFont(i,t)}registerFont(e,t){if(this._fonts.has(t))return;let i=Pt.FontMgr.FromData(e);if(i)this._fonts.set(t,i);else throw Error("Invalid font data for "+t)}get width(){return this._width}get height(){return this._height}set strokeColor(e){this._paintStroke&&this._paintStroke.setColor(T7(e),Pt.ColorSpace.DISPLAY_P3)}set fillColor(e){this._paintFill&&this._paintFill.setColor(T7(e),Pt.ColorSpace.DISPLAY_P3)}set lineWidth(e){this._paintStroke&&this._paintStroke.setStrokeWidth("center"===this._strokeMode?e:2*e)}set strokeMode(e){this._strokeMode=e}set dropShadowBlur(e){this._dropShadowBlur=e}set dropShadowColor(e){this._dropShadowColor=e}set dropShadowOffsetX(e){this._dropShadowOffsetX=e}set dropShadowOffsetY(e){this._dropShadowOffsetY=e}set innerShadowBlur(e){this._innerShadowBlur=e}set innerShadowColor(e){this._innerShadowColor=e}set innerShadowOffsetX(e){this._innerShadowOffsetX=e}set innerShadowOffsetY(e){this._innerShadowOffsetY=e}set innerShadowSpread(e){this._innerShadowSpread=e}set layerBlur(e){this._layerBlur=e}set backgroundBlur(e){this._backgroundBlur=e}clear(){this.ctx?.clear(Pt.TRANSPARENT)}save(){this.ctx?.save()}restore(){this.ctx?.restore()}beginPath(){this._currentPath?.delete(),this._currentPath=new Pt.Path}closePath(){let e=this._currentPath;if(e){if(e.isEmpty())return;let t=e.getBounds();(t[3]-t[1]||t[2]-t[0])&&e.close()}}fill(){this._paintInner(this._paintFill,!0)}stroke(){this._paintInner(this._paintStroke,!1)}clipRect(e,t,i,r,s=0,a=0,o=0,l=0){let h=Pt.XYWHRect(e,t,i,r);if(0===s&&0===a&&0===l&&0===o)this.ctx?.clipRect(h,Pt.ClipOp.Intersect,!0);else{let e=Pt.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this.ctx?.clipRRect(e,Pt.ClipOp.Intersect,!0)}}_applyShadowOffsetMatrix(){if(this.ctx){let e=TX.invert(this.currentTransform);this.ctx.concat(e);let t=TX.translate(TX.identity(),this._dropShadowOffsetX,this._dropShadowOffsetY);this.ctx.concat(t),this.ctx.concat(this._currentTransform)}}_applyEffectsToPaint(e,t,i=!0){if(this.ctx&&this._currentPath){let r,s=!1;if(i&&this._hasDropShadow()){let i,r=e.copy();r.setColor(T7(this._dropShadowColor)),this._dropShadowBlur>0&&(i=Pt.MaskFilter.MakeBlur(Pt.BlurStyle.Normal,this._dropShadowBlur*this.dpr*(this.camera?.scale??1),!1),r.setMaskFilter(i)),this.ctx.save(),this.ctx.clipPath(this._currentPath,Pt.ClipOp.Difference,!0),this._applyShadowOffsetMatrix(),t(r),this.ctx.restore(),r.delete(),i?.delete()}if(this._backgroundBlur>0&&i){this.ctx.save(),this.ctx.clipPath(this._currentPath,Pt.ClipOp.Intersect,!0);let t=Pt.ImageFilter.MakeBlur(this._backgroundBlur,this._backgroundBlur,Pt.TileMode.Clamp,null),i=e.copy();i.setImageFilter(t),i.setAlphaf(1);let r=this._currentPath.computeTightBounds();this.ctx.saveLayer(i,r,null,Pt.SaveLayerInitWithPrevious),this.ctx.drawColor(e.getColor()),this.ctx.restore(),this.ctx.restore(),i.delete(),t.delete(),s=!0}if(this._layerBlur>0){let i=e.copy();r=Pt.MaskFilter.MakeBlur(Pt.BlurStyle.Normal,this._layerBlur*this.dpr*(this.camera?.scale??1),!1),i.setMaskFilter(r),t(i),i.delete(),r.delete(),s=!0}if(s||t(e),i&&this._hasInnerShadow()){let e,t=new Pt.Paint;t.setAntiAlias(!0),t.setStyle(Pt.PaintStyle.Fill),t.setColor(T7(this._innerShadowColor)),this._innerShadowBlur>0&&(e=Pt.MaskFilter.MakeBlur(Pt.BlurStyle.Normal,this._innerShadowBlur*this.dpr*(this.camera?.scale??1),!1),t.setMaskFilter(e));let i=this._currentPath.computeTightBounds(),[r,s,a,o]=i;this.ctx.save(),this.ctx.clipPath(this._currentPath,Pt.ClipOp.Intersect,!0),this.ctx.saveLayer(t,i,null,Pt.SaveLayerInitWithPrevious),this.ctx?.translate(this._innerShadowOffsetX,this._innerShadowOffsetY),this.ctx.drawRect(Pt.XYWHRect(-1e3-this._innerShadowOffsetX,-1e3-this._innerShadowOffsetY,2e3+(a-r)+Math.abs(2*this._innerShadowOffsetX),2e3+(o-s)+Math.abs(2*this._innerShadowOffsetY)),t),t.setBlendMode(Pt.BlendM
6630ode.Clear),this.ctx.drawPath(this._currentPath,t),this.ctx.restore(),this.ctx.restore(),t.delete(),e?.delete()}}}_paintInner(e,t=!0){if(this.ctx&&this._currentPath&&e){let i=this.ctx,r=this._currentPath;this._applyEffectsToPaint(e,e=>{let s=!1;t||"center"===this._strokeMode||(i.save(),i.clipPath(r,"outside"===this._strokeMode?Pt.ClipOp.Difference:Pt.ClipOp.Intersect,!0),s=!0),i.drawPath(r,e),s&&i.restore()},t)}}_hasDropShadow(){return this._dropShadowColor?.a>0}_hasInnerShadow(){return this._innerShadowColor?.a>0}path(e){this._currentPath?.addPath(Pt.Path.MakeFromSVGString(e))}ellipse(e,t,i,r,s,a,o,l){if(!T9([e,t,i,r])||!this._currentPath)return;if(i<0||r<0)throw Error("radii cannot be negative");let h=Pt.XYWHRect(e-i,t-r,2*i,2*r);this._currentPath?.addOval(h)}rect(e,t,i,r,s=0,a=0,o=0,l=0){let h=Pt.XYWHRect(e,t,i,r);if(T9(h)){if(0===s&&0===a&&0===l&&0===o)this._currentPath?.addRect(h);else{let e=Pt.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this._currentPath?.addRRect(e)}}}getHorizontalAlign(e){switch(e){case 2:return Pt.TextAlign.Right;case 3:return Pt.TextAlign.Center;case 4:return Pt.TextAlign.Justify;default:return Pt.TextAlign.Left}}drawTextInner(e,t,i,[r,s,a,o],l,h,c=!0){let d=0,{ctx:u}=this;if(!u)return d;let p=h.copy(),f=h.copy();return f.setAlphaf(0),this._applyEffectsToPaint(p,h=>{t.pushPaintStyle(i,h,f),t.addText(e);let c=t.build();c.layout(a);let p=s;2===l?p+=(o-c.getHeight())/2:3===l&&(p+=o-c.getHeight()),u.drawParagraph(c,r,p),d=c.getHeight(),t.reset(),c.delete()},c),p.delete(),f.delete(),d}drawText(e,t){let i=0,r=this._fonts.get(t.font),{ctx:s,_paintFill:a,_paintStroke:o}=this;if(r&&s){let s=new Pt.TextStyle({fontFamilies:[t.font],fontSize:t.fontSize,heightMultiplier:t.lineHeight,letterSpacing:t.letterSpacing}),l=new Pt.ParagraphStyle({textStyle:s,textAlign:this.getHorizontalAlign(t.horizontalAlign)}),h=Pt.XYWHRect(t.x,t.y,t.width,t.height),c=Pt.ParagraphBuilder.Make(l,r);a&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,a,!0)),o&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,o,!1)),c.delete()}return{height:i}}render(){this._surface?.flush()}moveTo(e,t){this._currentPath?.moveTo(e,t)}lineTo(e,t){this._currentPath?.lineTo(e,t)}bezierCurveTo(e,t,i,r,s,a){this._currentPath?.cubicTo(e,t,i,r,s,a)}quadraticCurveTo(e,t,i,r){this._currentPath?.quadTo(e,t,i,r)}setTransform(e,t=!1){if(!this.ctx)return;let i=this.ctx.getTotalMatrix(),r=TX.invert(i);if(r&&this.ctx.concat(r),this.ctx?.scale(this.dpr,this.dpr),this.camera?.enabled&&(this.ctx?.concat(this.camera.worldMatrix),t)){let e=TX.getScale(this.camera.worldMatrix);this.ctx?.scale(1/e[0],1/e[1])}this.ctx?.concat(e),this.currentTransform=e}transform(e){this.ctx?.concat(e)}setSize(e,t){!this._isSizeDirty&&e===this._width&&t===this._height||(this._isSizeDirty=!1,this._width=e,this._height=t,this.canvas.style.width=e+"px",this.canvas.style.height=t+"px",this.canvas.width=e*this.dpr,this.canvas.height=t*this.dpr,this._surface&&(this._surface=Pt.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas()))}};function T9(e){for(let t=0;t<e.length;t++)if(void 0!==e[t]&&!Number.isFinite(e[t]))return!1;return!0}function T7({r:e,g:t,b:i,a:r}){return Pt.Color4f(e,t,i,r)}var Pe,Pt,Pi,Pr,Ps=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gn.transparent,this.blurRadius=0,this.offset=[0,0],this.spread=0,this.update(t)}update(e){void 0!==e.color&&(this.color=e.color),void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.blurRadius&&(this.blurRadius=e.blurRadius),void 0!==e.offset&&(this.offset=e.offset),void 0!==e.spread&&(this.spread=e.spread)}},Pa=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.radius=0,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.radius&&(this.radius=e.radius)}},Pn=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gn.transparent,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color)}},Po=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gn.transparent,this.thickness=0,this.mode="inside",this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color),void 0!==e.thickness&&(this.thickness=e.thickness),void 0!==e.mode&&(this.mode=e.mode)}},Pl=class extends TZ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.autoClose=!0,this.fill=new Pn(e+"-fill",t.fill,i),this.stroke=new Po(e+"-stroke",t.stroke,i),this.dropShadow=new Ps(e+"-dropShadow",t.dropShadow,i),this.innerShadow=new Ps(e+"-innerShadow",t.innerShadow,i),this.backgroundBlur=new Pa(e+"-backgroundBlur",t.backgroundBlur,i),this.layerBlur=new Pa(e+"-layerBlur",t.layerBlur,i)}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:gn.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:gn.transparent,e.strokeMode=this.stroke.mode,e.lineWidth=this.stroke.thickness}applyFilters(e){this.layerBlur.enabled?e.layerBlur=5*this.layerBlur.radius:e.layerBlur=0,this.backgroundBlur.enabled?e.backgroundBlur=5*this.backgroundBlur.radius:e.backgroundBlur=0,this.dropShadow.enabled?(e.dropShadowBlur=5*this.dropShadow.blurRadius,e.dropShadowColor=this.dropShadow.color,e.dropShadowOffsetX=this.dropShadow.offset[0],e.dropShadowOffsetY=this.dropShadow.offset[1]):e.dropShadowColor=gn.transparent,this.innerShadow.enabled?(e.innerShadowSpread=this.innerShadow.spread,e.innerShadowBlur=5*this.innerShadow.blurRadius,e.innerShadowColor=this.innerShadow.color,e.innerShadowOffsetX=this.innerShadow.offset[0],e.innerShadowOffsetY=this.innerShadow.offset[1]):e.innerShadowColor=gn.transparent}innerDraw(e){}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.applyFilters(e),this.applyFillStroke(e),e.beginPath(),this.innerDraw(e),this.autoClose&&e.closePath(),this.fill.enabled&&e.fill(),this.stroke.enabled&&e.stroke(),e.restore(
vendor: 5,368 bytes, line 6630
6630))}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pY(e.path,["fill"])?this.fill.update(e.props):pY(e.path,["stroke"])?this.stroke.update(e.props):pY(e.path,["dropShadow"])?this.dropShadow.update(e.props):pY(e.path,["innerShadow"])?this.innerShadow.update(e.props):pY(e.path,["layerBlur"])?this.layerBlur.update(e.props):pY(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}updateState(e,t){super.updateState(e,t),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur)}clone(e){let t=new Pl(this.uuid,this.data,e);return t.parent=void 0,t}},Ph=class extends Pl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.updateState(t,i)}innerDraw(e){e.ellipse(.5*this.width,.5*this.height,.5*this.width,.5*this.height,0,0,2*Math.PI)}intersectsInLocalSpace(e,t){var i,r,s,a;let o,l;return i=.5*this.width,r=.5*this.height,s=.5*this.width,a=.5*this.height,(o=e-i)*o/(s*s)+(l=t-r)*l/(a*a)<=1}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e)}clone(e){let t=new Ph(this.uuid,this.data,e);return t.parent=void 0,t}},Pc=class extends Pl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.cornerRadius=[0,0,0,0],this.updateState(t,i)}innerDraw(e){e.rect(0,0,this.width,this.height,...this.cornerRadius)}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e)}clone(e){let t=new Pc(this.uuid,this.data,e);return t.parent=void 0,t}},Pd=class extends Pl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._textHeight=0,this._textHeightDirty=!0,this.width=0,this.height=0,this.updateState(t,i)}get textHeight(){return this._textHeight}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:gn.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:gn.transparent,e.strokeMode="center",e.lineWidth=this.stroke.thickness}innerDraw(e){this._fontHolder?.arrayBuffer&&this._fontHolder.arrayBuffer.byteLength>1&&this.data.font&&e.registerFont(this._fontHolder.arrayBuffer,this.data.font);let t=this.data.textTransform,i=this.data.text.textValue.toString(),r=2===t?i.toUpperCase():3===t?i.toLowerCase():i,{height:s}=e.drawText(r,{x:0,y:0,width:this.width,height:this.height,fontSize:this.data.fontSize,lineHeight:this.data.lineHeight??1,letterSpacing:this.data.letterSpacing??0,horizontalAlign:this.data.horizontalAlign,verticalAlign:this.data.verticalAlign,font:this.data.font});this._textHeight=s}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateFontState(e,{shared:t}){void 0!==e.font&&(this._fontHolder=t.getFont(e.font),this._fontHolder&&!this._fontHolder.isLoaded&&this._fontHolder.loadingPromise.then(()=>{this.requestRender()}))}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateFontState(e,t)}clone(e){let t=new Pd(this.uuid,this.data,e);return t.parent=void 0,t}},Pu=class extends Pl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.curves=[],this.extremasBBox={min:[0,0],max:[0,0]},this.updateState(t,i)}computeExtremas(){0===this.curves.length&&this.computeCurves();let e=this.curves.map(e=>Pr.extremas(e)),t=[1/0,1/0],i=[-1/0,-1/0];for(let r=0,s=e.length;r<s;r++){let s=e[r];s[0][0]<t[0]&&(t[0]=s[0][0]),s[0][1]<t[1]&&(t[1]=s[0][1]),s[1][0]>i[0]&&(i[0]=s[1][0]),s[1][1]>i[1]&&(i[1]=s[1][1])}return this.extremasBBox.min=[t[0],t[1]],this.extremasBBox.max=[i[0],i[1]],this.extremasBBox}computeCurves(){this.curves=[];for(let e=1,t=this.data.points.length;e<t;e++){let t=this.data.points[e].data,i=this.data.points[e-1].data,r={start:i.position,cp1:i.controlNext.position,cp2:t.controlPrevious.position,end:t.position};this.curves.push(r)}let e=this.data.points[0].data,t=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let i={start:t.position,cp1:t.controlNext.position,cp2:e.controlPrevious.position,end:e.position};this.curves.push(i)}}getCenter(){let[e,t]=this.extremasBBox.min,[i,r]=this.getHalfSize();return[e+i,t+r]}getHalfSize(){let{min:e,max:t}=this.extremasBBox;
vendor: 6,526 bytes, line 6630
6630return[(t[0]-e[0])*.5,(t[1]-e[1])*.5]}innerDraw(e){for(let t=0,i=this.data.points.length;t<i;t++){let i=this.data.points[t].data;if(0===t){let[t,r]=i.position;e.moveTo(t,r)}else{let r=this.data.points[t-1].data,[s,a]=r.controlNext.position,[o,l]=i.controlPrevious.position,[h,c]=i.position,d={start:r.position,cp1:r.controlNext.position,cp2:i.controlPrevious.position,end:i.position};Pr.derive(d),e.bezierCurveTo(s,a,o,l,h,c)}}let t=this.data.points[0].data,i=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let[r,s]=i.controlNext.position,[a,o]=t.controlPrevious.position,[l,h]=t.position;e.bezierCurveTo(r,s,a,o,l,h)}}updateState(e,t){super.updateState(e,t),this.computeExtremas()}clone(e){let t=new Pu(this.uuid,this.data,e);return t.parent=void 0,t}};(e=>{function t(e,t,i,r=!1){let s=e-2*t+i;if(0!==s){let r=-Math.sqrt(Math.abs(t*t-e*i)),a=-e+t;return[-(r+a)/s,-(-r+a)/s]}return t!==i&&0===s?[(2*t-i)/(2*(t-i))]:[]}e.derive=function(e){let t=e.start,i=e.cp1,r=e.cp2,s=e.end,a={start:[3*(i[0]-t[0]),3*(i[1]-t[1])],cp:[3*(r[0]-i[0]),3*(r[1]-i[1])],end:[3*(s[0]-r[0]),3*(s[1]-r[1])]};return e.derivative=a,a.derivative=Dv.derive(a),a},e.droot=function(i){let r=i.derivative??e.derive(i),s=r.start,a=r.cp,o=r.end;return[t(s[0],a[0],o[0]),t(s[1],a[1],o[1])]},e.extremas=function(t){let[i,r]=e.droot(t),s=[t.start[0],t.end[0]],a=[t.start[1],t.end[1]];for(let r of i)s.push(e.compute(t,Math.min(1,Math.max(0,r)))[0]);for(let i of r)a.push(e.compute(t,Math.min(1,Math.max(0,i)))[1]);return s.sort((e,t)=>e-t),a.sort((e,t)=>e-t),[[s[0],a[0]],[s[s.length-1],a[a.length-1]]]},e.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=t*t,a=r*i,o=r*t*3,l=i*s*3,h=t*s;return[a*e.start[0]+o*e.cp1[0]+l*e.cp2[0]+h*e.end[0],a*e.start[1]+o*e.cp1[1]+l*e.cp2[1]+h*e.end[1]]}})(Pr||(Pr={})),(Dm=Dv||(Dv={})).derive=function(e){let t=e.start,i=e.cp,r=e.end,s={start:[2*(i[0]-t[0]),2*(i[1]-t[1])],end:[2*(r[0]-i[0]),2*(r[1]-i[1])]};return s.derivative=Dy.derive(s),e.derivative=s,s},Dm.droot=function(e){let t=e.derivative??Dm.derive(e),i=t.start,r=t.end;return[i[0]!==r[0]?i[0]/(i[0]-r[0]):0,i[1]!==r[1]?i[1]/(i[1]-r[1]):0]},Dm.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=i*t*2,a=t*t;return[r*e.start[0]+s*e.cp[0]+a*e.end[0],r*e.start[1]+s*e.cp[1]+a*e.end[1]]},(Dg=Dy||(Dy={})).derive=function(e){let t=e.start,i=e.end,r=[i[0]-t[0],i[1]-t[1]];return e.derivative=r,e.derivative},Dg.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=e.start,r=e.end;return[i[0]+(r[0]-i[0])*t,i[1]+(r[1]-i[1])*t]};var Pp=class extends TK{constructor(e,t,i){super(e,t,i),this.uuid=e,this.width=0,this.height=0,this.clipped=!0,this.background=new Pc(e+"-background",yF.defaultData,i),this.background.parent=this,this.updateState(t,i)}get fill(){return this.background.fill}get stroke(){return this.background.stroke}get backgroundBlur(){return this.background.backgroundBlur}get layerBlur(){return this.background.layerBlur}get dropShadow(){return this.background.dropShadow}get innerShadow(){return this.background.innerShadow}get cornerRadius(){return this.background.cornerRadius}set cornerRadius(e){this.background.cornerRadius=e}updateLocalMatrix(){super.updateLocalMatrix(),this.background?.updateLocalMatrix()}updateWorldMatrix(e,t,i){super.updateWorldMatrix(e,t,i),this.background?.updateWorldMatrix(e,t,i)}draw(e){if(!this.visible)return;e.save();let t=this.width,i=this.height;this.applyTransforms(e),this.background.width=t,this.background.height=i,this.background.draw(e),this.clipped&&e.clipRect(0,0,t,i,...this.cornerRadius),this.innerDrawChildren(e),e.restore()}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur),void 0!==e.clipped&&(this.clipped=e.clipped)}requestRender(){super.requestRender(),this.dispatchEvent({type:"render"})}dispose(){this.removeEventListener("render")}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pY(e.path,["fill"])?this.fill.update(e.props):pY(e.path,["stroke"])?this.stroke.update(e.props):pY(e.path,["dropShadow"])?this.dropShadow.update(e.props):pY(e.path,["innerShadow"])?this.innerShadow.update(e.props):pY(e.path,["layerBlur"])?this.layerBlur.update(e.props):pY(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}clone(e){let t=new Pp(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},Pf=tw(tD(),1),Pm=class extends Pl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._pathBBox=new DOMRect,this.path="",this.updateState(t,i),this.autoClose=!1,this.computeSVGBBox()}computeSVGBBox(){let e=document.createElementNS("http://www.w3.org/2000/svg","svg"),t=document.createElementNS("http://www.w3.org/2000/svg","path");document.body.appendChild(e),t.setAttribute("d",this.path),e.appendChild(t),this._pathBBox=t.getBBox(),e.remove()}innerDraw(e){e.path(this.path)}intersectsInLocalSpace(e,t){return e>=this._pathBBox.x&&e<=this._pathBBox.x+this._pathBBox.width&&t>=this._pathBBox.y&&t<=this._pathBBox.y+this._pathBBox.height}getCenter(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}getHalfSize(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}updateState(e,t){super.updateState(e,t),void 0!==e.path&&(this.path=e.path,this.computeSVGBBox())}clone(e){let t=new Pm(this.uuid,this.data,e);return t.parent=void 0,t}},Pg=class{constructor(e,t,i){this.uuid=e,this.data=t,this.group=new TJ(Pg.GROUP_ID,{...yV.defaultData},i),this.createChildrenObjects(t.objects,this.group,i)}createObject(e,t,i,r,s,a){let o=function(e,t,i){switch(t.type){case"ellipse2d":return new Ph(e,t,i);
6630case"rectangle2d":return new Pc(e,t,i);case"text2d":return new Pd(e,t,i);case"vector2d":return new Pu(e,t,i);case"path2d":return new Pm(e,t,i);case"frame2d":return new Pp(e,t,i);default:return new TJ(e,t,i)}}(e,t,a);o&&(r.add(o),r.children.splice(s,0,r.children.pop()),o.updateWorldMatrix(),i.length>0&&(o instanceof TJ||o instanceof Pp)&&this.createChildrenObjects(i,o,a))}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}draw(e){this.group.draw(e)}updateEntityByOp(e,t,i,r){let s=this.find(e);if(s)try{s.updateByOp(t,i,{shared:r})}catch(e){console.error(e)}}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this.group:this.find(e.parent);void 0!==i&&i instanceof TK&&(this.createObject(e.id,e.data,e.children,i,e.localIndex,t),i.requestRender())}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0!==t&&void 0!==t.parent&&t.parent instanceof TK){let e=t.parent;t.resetBBoxNeedsUpdate(),e?.remove(t),e?.requestRender()}}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0!==t){let i=t.parent,r=null===e.parent?this:this.find(e.parent);if(r instanceof TK||r===this){r.add(t);let s=e.localIndex;r.children.splice(s,0,r.children.pop()),t.updateWorldMatrix(!0,!1,!0),i?.requestRender(),t.requestRender()}t.resetBBoxNeedsUpdate()}}}add(e){this.group.add(e)}remove(e){this.group.remove(e)}traverse(e){this.group.traverse(t=>{t!==this.group&&e(t)})}intersectsChildren(e,t,i,r=!1,s=[]){return this.group.intersectsChildren(e,t,i,r,s,!0)}intersectsChildrenReverse(e,t,i,r=!1,s=[]){return this.group.intersectsChildrenReverse(e,t,i,r,s,!0)}find(e){return this.group.find(e)}get children(){return this.group.children}project(e,t){return this.group.project(e,t)}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this.group;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u0(e.sortKey,t.sortKey)),t.map(e=>e.entity)}};function Pv({constraints:e,newParentWidth:t,newParentHeight:i,initialParentWidth:r,initialParentHeight:s,objectInitialWidth:a,objectInitialHeight:o,objectInitialPosition:l}){let{horizontalConstraint:h,verticalConstraint:c}=e,d=t-r,u=i-s,p=a,f=o,m=l[0],g=l[1];if(0!==h){if(1===h)m+=d;else if(3===h)m+=d/2;else if(2===h)p=Math.max(1,p+d);else if(4===h){let e=t/r;p*=e,m*=e}}if(0!==c){if(1===c)g+=u;else if(3===c)g+=u/2;else if(2===c)f=Math.max(1,f+u);else if(4===c){let e=i/s;f*=e,g*=e}}return{width:p,height:f,position:[m,g]}}Pg.GROUP_ID="scene2d",tw(tD(),1);var Py=` 6631 varying vec2 vUv; 6632 void main() { 6633 vUv = uv; 6634 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6635 }`,Px=` 6636 uniform sampler2D tDiffuse; 6637 varying vec2 vUv; 6638 void main() { 6639 vec4 texel = texture2D( tDiffuse, vUv ); 6640 gl_FragColor = texel; 6641 }`,Pb=new s_(-1,1,1,-1,0,1),Pw=new class extends rN{constructor(){super(),this.setAttribute("position",new rD([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new rD([0,2,0,0,2,0],2))}},PS=class{constructor(e){this._mesh=new rJ(Pw,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,Pb)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}},P_=new r8({defines:{},uniforms:{tDiffuse:new lI(null)},vertexShader:Py,fragmentShader:Px}),PA=new PS(P_),PM=null,PE=null,PC=()=>(null===PM&&(PM=document.createElement("canvas")),PM),PT=e=>(null===PE&&(PE=new T8(e)),PE),PP=TX.identity(),PD=class{constructor(e,t,i,r){this.uuid=e,this.width=t,this.height=i,this.context=r,this.enabled=!0,this.isScreenSpace=!1,this.dpr=window.devicePixelRatio,this.isFrameDirty=!1,this.onRenderRequestedDownstream=()=>{this.isFrameDirty=!0,this.context.shared.requestRender()},this._innerApplySize=()=>{let e=this.width,t=this.height,i=this.dpr;this.renderer.dpr=this.isScreenSpace?i:Math.floor(2048/Math.max(e,t)),this.renderer.setSize(e,t)},this.onFrameOverrideObjectEvent=e=>{if(e.target?.uuid!==void 0){let t=this.frameRoot?.find(e.target.uuid);t&&t.dispatchEvent({...e,target:t})}},this.scene2d=new Pg(tZ.generateUUID(),yH.defaultData,{dpr:window.devicePixelRatio,shared:r.shared}),this.canvas=PC(),this.renderer=PT(this.canvas),this.promise=this.init(),this.renderTarget=new ip(1,1,{type:1016,stencilBuffer:!1,depthBuffer:!1}),r.shared.addUIBuffer(this.uuid,this.renderTarget),this.textureHolder=r.shared.uiBuffer(this.uuid)}get canvasTexture(){return this._canvasTexture||(this._canvasTexture=new nQ(this.canvas)),this._canvasTexture}
6641async init(){this.renderer instanceof T8&&(this.renderer.wasmURL=_X.skiaWasmUrl),await this.renderer.init()}render(e){if(this.isFrameDirty){this.isFrameDirty=!1,this._innerApplySize(),this.renderer.clear(),this.frameOverride?.draw(this.renderer),this.renderer.render(),P_.uniforms.tDiffuse.value=this.canvasTexture,this.canvasTexture.needsUpdate=!0;let t=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.clear(),PA.render(e),e.setRenderTarget(t),this.textureHolder?.setNeedsUpdate(!0)}}updateEntity2DByOp(e,t,i,r){this.scene2d.updateEntityByOp(e,t,i,r),this.applySize()}updateTreeByOp(e,t){this.scene2d.updateTreeByOp(e,t),this.applySize()}applyOverrides(e){if(this.frameOverride&&this.frameRoot){this.frameOverride.position=[0,0],this.frameOverride.rotation=0;let t=e?.width??this.width,i=e?.height??this.height;this.frameOverride.width=t,this.frameOverride.height=i,this.frameOverride.localMatrix=PP,this.isScreenSpace&&(this.frameOverride.fill.color=gn.from0to1([0,0,0,0])),this.frameOverride.data={...this.frameOverride.data,width:t,height:i},function e({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){if(t instanceof Pp&&i instanceof Pp||t instanceof TJ&&i instanceof TJ)for(let l=0,h=t.children.length;l<h;l++){let h=t.children[l],c=i.children[l];h&&c&&h.uuid===c.uuid&&function({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let[l,h]=function(e){if(PI(e))return[e.width,e.height];if(e instanceof Pm){let[t,i]=e.getHalfSize();return[2*t,2*i]}if(e instanceof TJ){let[t,i]=e.recursiveBBox.getHalfSize();return[2*t,2*i]}return[0,0]}(i),{width:c,height:d,position:u}=Pv({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:l,objectInitialHeight:h,objectInitialPosition:i.position});if(t.position=u,t.data={...t.data,position:u},t.states)for(let e in t.states)!function({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let l=t.states?.[e],h=i.states?.[e];if(l&&h){let{width:i,height:c,position:d}=Pv({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:yG.isResizeable(h)?h.width:0,objectInitialHeight:yG.isResizeable(h)?h.height:0,objectInitialPosition:h.position});Object.assign(t.states[e],{position:d}),yG.isResizeable(l)&&Object.assign(t.states[e],{width:i,height:c})}}({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o});if(PI(t)||t instanceof TJ)PI(t)&&(t.width=c,t.height=d,t.data={...t.data,width:c,height:d}),e({objectOverride:t,objectRoot:i,newParentWidth:c,newParentHeight:d,initialParentWidth:l,initialParentHeight:h});else if(t instanceof Pm){let e=0!==l?c/l:1,r=0!==h?d/h:1;t.path=function(e,t=1,i=1){return t<=0||i<=0?e:function(e){let t=["rx","ry","xAxisRotation","largeArc","sweep","x1","y1","x2","y2","x","y"],i;return e.map(e=>{let r=[];t.forEach(t=>{if(t in e){let i=1*e[t];r.length&&i>=0&&r.push(","),r.push(i)}});let s=(i===e.code?r[0]<0?"":",":e.code)+r.join("");return i=e.code,s}).join("")}((0,Pf.parseSVG)(e).map(e=>{let r={...e};return"x"in r&&(r.x=r.x*t),"y"in r&&(r.y=r.y*i),"x1"in r&&(r.x1=r.x1*t),"x2"in r&&(r.x2=r.x2*t),"y1"in r&&(r.y1=r.y1*i),"y2"in r&&(r.y2=r.y2*i),"rx"in r&&(r.rx=r.rx*t),"ry"in r&&(r.ry=r.ry*i),r}))}(i.path,e,r),t.data={...t.data,path:t.path}}}({objectOverride:h,objectRoot:c,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o})}}({objectOverride:this.frameOverride,objectRoot:this.frameRoot,newParentWidth:this.frameOverride.width,newParentHeight:this.frameOverride.height,initialParentWidth:this.frameRoot.width,initialParentHeight:this.frameRoot.height}),this.frameOverride.updateWorldMatrix(!0,!1,!0)}}applySize(e,t=window.devicePixelRatio){let i=Math.max(1,e?.width??this.width),r=Math.max(1,e?.height??this.height);this.dpr=t,this.width=i,this.height=r,this._innerApplySize();let s=1;(i*t<512||r*t<512)&&(s=Math.max(512/(i*t),512/(r*t))),this.renderTarget.setSize(i*t*s,r*t*s),this._canvasTexture?.dispose(),this._canvasTexture=void 0,this.applyOverrides(e),this.frameOverride?.requestRender()}applyFrame(e){let t=this.context.scene.find2D(e);if(!(!t||!(t instanceof Pp)))return this.disposeFrameOverride(),this.frameRoot=t,this.frameOverride=t.clone({dpr:this.renderer.dpr,shared:this.context.shared}),this.scene2d.add(this.frameOverride),this.applySize(),this.frame?.addEventListener("render",this.onRenderRequestedDownstream),this.frameOverride.traverse(e=>{e.addEventListener("beginState",this.onFrameOverrideObjectEvent)}),this.frameOverride.traverse(e=>{e.addEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frame?.requestRender(),t}get frame(){return this.frameOverride}get frameId(){return this.frame?.uuid}find(e){return this.scene2d.find(e)}get texture(){return this.textureHolder?.getTexture(1001)}disposeFrameOverride(){this.frameOverride?.removeEventListener("render",this.onRenderRequestedDownstream),this.frameOverride?.traverse(e=>{e.removeEventListener("beginStateChange",this.onFrameOverrideObjectEvent)}),this.frameOverride?.traverse(e=>{e.removeEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frameOverride&&this.scene2d.remove(this.frameOverride)}};function PI(e){return e instanceof Pc||e instanceof Pp||e instanceof Ph||e instanceof Pd}var PO=class extends xV(nS){constructor(e,t,i){super(),this.data=t,this.bgColor=new SU(1,1,1,1),this.fog=null,this.backupFog=new nw(16777215,.1,2e3),this.fogUseBGColor=!1,this.isActive=!1,this.aoColor=new is,this.penumbraSizeArrayCache=null,this.super_Entity(e,t),this.personalCamera=new Ey(mc,{...ye.defaultData,...t.camera,name:"Personal Camera"}),this.personalCamera.objectHelper.visible=!1,this.add(this.personalCamera),this.activeCamera=this.personalCamera,this.ambientLight=new lt(13882323,8553090,.75),this.ambientLight.name="Default Ambient Light",this.ambientLight.layers.enable(3),this.ambientLight.removeFromParent(),this.add(this.ambientLight),t.uiScene?this.uiScene=new Pg((Array.isArray(e)?e[0]:e)+"-ui",t.uiScene,{dpr:window.devicePixelRatio,shared:i.shared}):t.uiFrame&&this.createUICanvas(t.uiFrame,i)}get scene(){return this.parent}get postprocessing(){return this.data.postprocessing}get frameId(){return this.data.uiFrame}get frame(){return this.uiCanvas?.frame}createUICanvas(e,t){this.uiCanvas=new PD(this.uuid+"-uiscreen",window.innerWidth,window.innerHeight,t),this.uiCanvas.isScreenSpace=!0,this.uiCanvas.promise.then(()=>{this.uiCanvas?.applyFrame(e),this.uiCanvas?.applySize()})}updateVisible(){}
6641setBackgroundColor(e){this.bgColor=e,!0===this.fogUseBGColor&&(this.backupFog.color=e)}entityChildrenCount(){return this.uiScene?this.uiScene.children.length:super.entityChildrenCount()}updateAmbientLight(e,t){void 0!==e.color&&(this.ambientLight.color=Af(e.color,t)),void 0!==e.intensity&&(this.ambientLight.intensity=e.intensity),void 0!==e.enabled&&(e.enabled?this.add(this.ambientLight):this.remove(this.ambientLight))}onDeactive(){this.isActive=!1}onActive(e){this.isActive=!0,e.fog=this.fog,this.traverseEntity(e=>{e instanceof ES&&e.recomputeBoolean()}),this.updateShadow(this.data.shadow)}forceMaterialsUpdate(){this.traverseEntity(e=>{if(e instanceof Mg){if(Array.isArray(e.material))for(let t of e.material)t.needsUpdate=!0;else e.material.needsUpdate=!0,e.material.dispose()}})}updateShadow(e){void 0!==e.softShadowQuality&&this.isActive&&TE(e.softShadowQuality)&&this.forceMaterialsUpdate()}updateFog(e,t){e.enabled?this.fog=this.backupFog:this.fog=null,this.isActive&&(this.scene.fog=this.fog),this.fogUseBGColor=e.useBackgroundColor,e.useBackgroundColor?this.backupFog.color.set(this.bgColor):this.backupFog.color=Af(e.color,t),this.backupFog.near=e.near,this.backupFog.far=e.far}updateAo(e,t){void 0!==e.aoColor&&(this.aoColor=Af(e.aoColor,t))}updateByOp(e,t,i,r){let s=this.data.uiFrame;super.updateByOp(e,t,i,r),pY(e.path,["fog"])?this.updateFog(t.fog,i.shared):pY(e.path,["ao"])?this.updateAo(t.ao,i.shared):pY(e.path,["ambient"])?this.updateAmbientLight(t.ambient,i.shared):pY(e.path,["shadow"])?this.updateShadow(t.shadow):0===e.type&&0===e.path.length&&(void 0!==e.props.uiFrame||s!==t.uiFrame)&&this.updateUIFrame(e.props.uiFrame,i)}updateUIFrame(e,t){e?(this.uiCanvas||this.createUICanvas(e,t),this.uiCanvas.enabled=!0,this.uiCanvas.applyFrame(e)):this.uiCanvas&&(this.uiCanvas.enabled=!1)}updateState(e,t){this.updateState_Entity(e,t),void 0!==e.backgroundColor&&this.setBackgroundColor(Af(e.backgroundColor,t.shared)),void 0!==e.fog&&this.updateFog(e.fog,t.shared),void 0!==e.ambient&&this.updateAmbientLight(e.ambient,t.shared),void 0!==e.ao&&this.updateAo(e.ao,t.shared),void 0!==e.shadow&&this.updateShadow(e.shadow)}createFrame(e,t){}raycast(e,t){super.raycast(e,t)}switchActiveCamera(e){e&&e.isDescendantOf(this)&&(this.activeCamera!==this.personalCamera&&(this.activeCamera.objectHelper.visible=!0),this.activeCamera=e,e.objectHelper.visible=!1)}get playCamera(){return this.scene?.find(this.data.publish.playCamera)??this.personalCamera}switchToPlayCamera(){this.switchActiveCamera(this.playCamera)}get penumbraSizeArray(){return null===this.penumbraSizeArrayCache&&this.updatePenumbraSizeArray(),this.penumbraSizeArrayCache}updatePenumbraSizeArray(){this.penumbraSizeArrayCache=[,,,,,].fill(.5);let e=0,t=0;this.traverseEntity(i=>{if(!i.visible)return!0;i instanceof TN&&i.visible&&e<3&&(this.penumbraSizeArrayCache[e]=i.data.penumbraSize??.5,e+=1),i instanceof Tj&&i.visible&&e<2&&(this.penumbraSizeArrayCache[3+t]=i.data.penumbraSize??.5,t+=1)})}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wZ.is(s)&&(s.visible||r?.object.data.visible)&&((EA(s)||ET(s)&&this.scene.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),Dl(s,e,t,!0)),i(s))}};return i(this),t}updateEntity2DByOp(e,t,i,r){this.uiCanvas?.updateEntity2DByOp(e,t,i,r)}},PR=class extends E_(lu,TO){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=90,r.aspect=1,r.near=100,r.far=2500;let s=new lJ(new iS(new ix(-r.far+this.position.x,-r.far+this.position.y,-r.far+this.position.z),new ix(r.far+this.position.x,r.far+this.position.y,r.far+this.position.z)),new is(16755200));s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){if(this.shadow&&(this.shadow.camera.updateProjectionMatrix(),this.gizmos))for(let e in this.gizmos){let t=this.gizmos[e];if(t instanceof lJ){let e=this.shadow.camera,i=new ix(-e.far+this.position.x,-e.far+this.position.y,-e.far+this.position.z),r=new ix(e.far+this.position.x,e.far+this.position.y,e.far+this.position.z);t.box.set(i,r),t.updateMatrixWorld(!0)}}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update(
6641)}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}},PL=class extends MS{get forceComputeSize(){return!0}get shape(){return this.geometry.userData.shape}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SC(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},PB=class extends MS{constructor(e,t,i){super(e,t,i),this._shapeId=null,this._context=i}updateState(e,t){super.updateState(e,t),this.updateShape()}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let i=t.shapeId;if(i!==this._shapeId&&this.detachShape(),i){this._shapeId=i;let t=this._context.scene.find(i);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else{let i;switch(t.type){case"Rectangle":i=wx;break;case"Ellipse":i=bW;break;case"Polygon":i=wf;break;case"Star":i=wA;break;default:throw Error(`Unknown shape type: ${t.type}`)}e=i.create({parameters:t}).userData.shape}let i=this.geometry;e&&i.inputs&&(i.inputs.shapeData=e,i.build(),this.attachedSurfaceCloners.forEach(e=>e.update()))}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SC(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},Pz=class extends MJ{constructor(e,t,i){super(e,t,i),this.data=t}},PF=class extends Ed(np,ER){constructor(e,t,i){super(),"Instance"===t.type&&"string"==typeof e&&(t=this.transformAssignData(t,i)),this.super_Entity(e,t),this.objectHelper.update()}get isComponentRoot(){return"Component"===this.data.type&&"string"==typeof this.identity}get isInstanceRoot(){return"Instance"===this.data.type&&"string"==typeof this.identity}transformAssignData(e,t){let i=yM.getComponentData({scene:t.scene.data,shared:t.shared.data},e.component);if(!i)return{...v4.defaultData,...e,...uj(v4.defaultData,yr.rootOverrideProps)};{let t,r;for(let s of yr.rootOverrideProps)void 0===e[s]?(void 0===t&&(t={...e}),t[s]=i.data[s]):(void 0===r&&(r={}),r[s]=e[s],void 0===t&&(t={...e}),t[s]=pA.apply(i.data[s],e[s]));return this.overrideData=r,t}}updateByOp(e,t,i,r){let s;if(this.isInstanceRoot&&!r){if(t=this.transformAssignData(t,i),0===e.type&&0===e.path.length&&this.component)for(let t of yr.rootOverrideProps)t in e.props&&void 0===e.props[t]&&(void 0===s&&(s={...e,props:{...e.props}}),s.props[t]=this.component.data[t]);else if(0===e.type&&e.path.length>0&&yr.rootOverrideProps.includes(e.path[0])){let i=e.path[0];void 0===s&&(s={...e,path:[],props:{[i]:t[i]}})}}super.updateByOp(s??e,t,i,r)}updateState(e,t){this.updateState_Entity(e,t)}expandInstanceChildren(e){let t=this.data;if(void 0===this.component){let i=e.scene.find(t.component)??null,r=!1;if(i!==this.oldComponent){if(this.oldComponent){let t=0;for(let i of this.children)if(wZ.is(i))e.scene.disposeAndUnregisterEntityRecursivelyIfNotReregistered(i),PN(i),t+=1;else break;this.children.splice(0,t)}r=!0}if(i){let s={};for(let a of(function e(t,i,r,s,a,o,l,h,c){if(l>50)return!1;if(s.component!==a){if(s.component){let e=s.component.instances.indexOf(s);e>=0&&s.component.instances.splice(e,1)}a.instances.find(e=>e===s)||a.instances.push(s),s.component=a}a instanceof PF&&a.isInstanceRoot&&a.expandInstanceChildren(t);let d=0;for(let u of a.children)if(wZ.is(u)){let a=[...i,..."string"==typeof u.identity?[u.identity]:u.identity],p=yi.resolve(r,a,1);null==p||p instanceof pM||(Object.setPrototypeOf(p,pM.prototype),console.error("wrong prototype"));let f=null,m;if(!h){let e=s.children[d];if(null!==(f=wZ.is(e)?e:null)){let e=PU(f,u,p,a);m=e>=1?f.stateSelection:void 0,2!==e&&(f=null)}if(null===f&&null!==(f=t.scene.findInstance(a)??null)){let e=PU(f,u,p,a);if(m=e>=1?f.stateSelection:void 0,2!==e)f=null;else{let e=f.parent.children.indexOf(f);f.parent.children.splice(e,1),s.children.splice(d,0,f),f.parent===s?e<=d&&console.error("not possible"):(f.parent=s,f.matrixWorldNeedsUpdate=!0,f.resetBBoxNeedsUpdate(),f.updateVisible(),t.pendingDeletes.delete(f))}}}if(null===f){let e=p?pA.apply(u.data,p):u.data;gd.is(e.type)&&(e={...e,type:"Empty"}),(f=xI.createEntity(a,e,t)).overrideData=p,s.add(f),s.children.splice(s.children.length-1,1),s.children.splice(d,0,f),f.updateState(f.data,t),m&&f.changeSelectedState(m,t),t.scene.registerInstanceAndSetUuid(f)}f.isBone&&(c[f.identity[f.identity.length-1]]=f.uuid),d+=1,e(t,i,r,f,u,o,l+1,h,c)}if(!h){let e=d;for(;;){let e=s.children[d];if(wZ.is(e))t.pendingDeletes.add(e);else break;d+=1}s.children.splice(e,d-e)}return!0}
6641(e,[this.uuid],t.overrides,this,i,i,0,r,s),this.children))if(wZ.is(a)){let t=a.data;"Empty"===t.type&&t.animations&&a.traverseEntity(t=>{let i=t.dataPatched;if(t instanceof MS&&i.bones&&i.boneInverses){let i=t.dataPatched;if(i.bones&&i.boneInverses){let r=new nD(i.bones.map(t=>e.scene.find(s[t])),i.boneInverses.map(e=>new iQ().fromArray(e)));t.bind(r,t.bindMatrix)}}else t.matrixAutoUpdate=!0})}}this.oldComponent=this.component}}};function PN(e){if(e.component){let t=e.component.instances.indexOf(e);for(let i of(t>=0&&e.component.instances.splice(t,1),e.children))wZ.is(i)&&PN(i)}}function PU(e,t,i,r){return e.component===t&&uB(e.identity,r)?e.overrideData===i?2:1:0}var Pk=class extends Ed(nE,ER){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(),this.matrixAutoUpdate=!0}updateState(e,t){this.updateState_Entity(e,t)}},PV=class extends MS{constructor(e,t,i){super(e,t,i),this.onBeforeRender=e=>{this.uiCanvas.render(e)},this.uiCanvas=new PD(e+"-canvas",t.geometry.width,t.geometry.height,i),this.uiCanvas.promise.then(()=>{this.applyFrame(this.dataPatched.geometry.frame,i.shared)})}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),0===e.type&&(void 0!==e.props.frame&&this.applyFrame(e.props.frame,i.shared),(void 0!==e.props.width||void 0!==e.props.height)&&this.applySize(e.props,i.shared))}applySize(e,t){let i=e?.width??this.dataPatched.geometry.width,r=e?.height??this.dataPatched.geometry.height;this.uiCanvas.applySize({width:i,height:r}),this.applyGeometryParametersFromFrame(t)}applyFrame(e,t){this.uiCanvas.applyFrame(e),this.applyGeometryParametersFromFrame(t),this.applyMaterialParametersFromFrame({shared:t})}applyGeometryParametersFromFrame(e){let t=this.frame;t&&(Object.assign(this.data,{geometry:Object.assign(this.data.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),Object.assign(this.dataPatched,{geometry:Object.assign(this.dataPatched.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),this.localGeometry?.dispose(),this.localGeometry=w5(this.dataPatched.geometry,e,this.data.flatShading,this))}applyMaterialParametersFromFrame(e){let t=this.frame;if(t){let i=t.data.backgroundBlur;Object.assign(this.data.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.data.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),Object.assign(this.dataPatched.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.dataPatched.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),this.material.reset(this.dataPatched.material,e,!0)}}updateEntity2DByOp(e,t,i,r){this.uiCanvas.updateEntity2DByOp(e,t,i,r),e===this.frameId&&0===t.type&&(void 0!==t.props.cornerRadius?this.applyGeometryParametersFromFrame(r):pY(t.path,["backgroundBlur"])&&this.applyMaterialParametersFromFrame({shared:r}))}get frame(){return this.uiCanvas.frame}get frameId(){return this.frame?.uuid}removeInteractionGeometry(e){super.removeInteractionGeometry(e),this.applySize({},e)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.applySize({width:e.width,height:e.height},t)}},Pj=class{constructor(e,t,i){this.variables=[],this.currentTextureIndex=0;let r=1015,s=new nS,a=new r9;a.position.z=1;let o={passThruTexture:{value:null}},l=d(`uniform sampler2D passThruTexture; 6642 6643void main() { 6644 6645 vec2 uv = gl_FragCoord.xy / resolution.xy; 6646 6647 gl_FragColor = texture2D( passThruTexture, uv ); 6648 6649} 6650`,o),h=new rJ(new su(2,2),l);
6650function c(i){i.defines.resolution="vec2( "+e.toFixed(1)+", "+t.toFixed(1)+" )"}function d(e,t){let i=new r8({uniforms:t=t||{},vertexShader:`void main() { 6651 6652 gl_Position = vec4( position, 1.0 ); 6653 6654} 6655`,fragmentShader:e});return c(i),i}s.add(h),this.setDataType=function(e){return r=e,this},this.addVariable=function(e,t,i){let r={name:e,initialValueTexture:i,material:this.createShaderMaterial(t),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:1003,magFilter:1003};return this.variables.push(r),r},this.setVariableDependencies=function(e,t){e.dependencies=t},this.init=function(){if(!1===i.capabilities.isWebGL2&&!1===i.extensions.has("OES_texture_float"))return"No OES_texture_float support for float textures.";if(0===i.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(let i=0;i<this.variables.length;i++){let r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);let s=r.material,a=s.uniforms;if(null!==r.dependencies)for(let e=0;e<r.dependencies.length;e++){let t=r.dependencies[e];if(t.name!==r.name){let e=!1;for(let i=0;i<this.variables.length;i++)if(t.name===this.variables[i].name){e=!0;break}if(!e)return"Variable dependency not found. Variable="+r.name+", dependency="+t.name}a[t.name]={value:null},s.fragmentShader=` 6656uniform sampler2D `+t.name+`; 6657`+s.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){let e=this.currentTextureIndex,t=0===this.currentTextureIndex?1:0;for(let i=0,r=this.variables.length;i<r;i++){let r=this.variables[i];if(null!==r.dependencies){let t=r.material.uniforms;for(let i=0,s=r.dependencies.length;i<s;i++){let s=r.dependencies[i];t[s.name].value=s.renderTargets[e].texture}}this.doRenderTarget(r.material,r.renderTargets[t])}this.currentTextureIndex=t},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.dispose=function(){h.geometry.dispose(),h.material.dispose();let e=this.variables;for(let t=0;t<e.length;t++){let i=e[t];i.initialValueTexture&&i.initialValueTexture.dispose();let r=i.renderTargets;for(let e=0;e<r.length;e++)r[e].dispose()}},this.addResolutionDefine=c,this.createShaderMaterial=d,this.createRenderTarget=function(i,s,a,o,l,h){return a=a||1001,o=o||1001,l=l||1003,h=h||1003,new ip(i=i||e,s=s||t,{wrapS:a,wrapT:o,minFilter:l,magFilter:h,format:1023,type:r,depthBuffer:!1})},this.createTexture=function(){let i=new nC(new Float32Array(e*t*4),e,t,1023,1015);return i.needsUpdate=!0,i},this.renderTexture=function(e,t){o.passThruTexture.value=e,this.doRenderTarget(l,t),o.passThruTexture.value=null},this.doRenderTarget=function(e,t){let r=i.getRenderTarget(),o=i.xr.enabled,c=i.shadowMap.autoUpdate,d=i.outputEncoding,u=i.toneMapping;i.xr.enabled=!1,i.shadowMap.autoUpdate=!1,i.outputEncoding=3e3,i.toneMapping=0,h.material=e,i.setRenderTarget(t),i.render(s,a),h.material=l,i.xr.enabled=o,i.shadowMap.autoUpdate=c,i.outputEncoding=d,i.toneMapping=u,i.setRenderTarget(r)}}},PG=new rw,PH=new ix,PW=class{constructor(e){let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry."),t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.colorAttribute=this.geometry.getAttribute("color"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.positionAttribute,t=this.weightAttribute,i=new Float32Array(e.count/3);for(let r=0;r<e.count;r+=3){let s=1;t&&(s=t.getX(r)+t.getX(r+1)+t.getX(r+2)),PG.a.fromBufferAttribute(e,r),PG.b.fromBufferAttribute(e,r+1),PG.c.fromBufferAttribute(e,r+2),s*=PG.getArea(),i[r/3]=s}this.distribution=new Float32Array(e.count/3);let r=0;for(let e=0;e<i.length;e++)r+=i[e],this.distribution[e]=r;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i){let r=this.distribution[this.distribution.length-1],s=this.binarySearch(this.randomFunction()*r);return this.sampleFace(s,e,t,i)}binarySearch(e){let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i,r){let s=this.randomFunction(),a=this.randomFunction();return s+a>1&&(s=1-s,a=1-a),PG.a.fromBufferAttribute(this.positionAttribute,3*e),PG.b.fromBufferAttribute(this.positionAttribute,3*e+1),PG.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(PG.a,s).addScaledVector(PG.b,a).addScaledVector(PG.c,1-(s+a)),void 0!==i&&PG.getNormal(i),void 0!==r&&void 0!==this.colorAttribute&&(PG.a.fromBufferAttribute(this.colorAttribute,3*e),PG.b.fromBufferAttribute(this.colorAttribute,3*e+1),PG.c.fromBufferAttribute(this.colorAttribute,3*e+2),PH.set(0,0,0).addScaledVector(PG.a,s).addScaledVector(PG.b,a).addScaledVector(PG.c,1-(s+a)),r.r=PH.x,r.g=PH.y,r.b=PH.z),this}};function Pq(e,t){let i=new Float32Array(4*t*t);for(let r=0;r<t*t;r++)i[4*r]=e[3*r],i[4*r+1]=e[3*r+1],i[4*r+2]=e[3*r+2],i[4*r+3]=0;let r=new nC(i,t,t,1023,1015);return r.needsUpdate=!0,r}var PX=` 6658// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6659// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6660// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6661uniform sampler2D uOriginalPosition; 6662uniform float uTime; 6663uniform float uSpeed; // update speed of the particles 6664uniform vec3 uWorldOffset; 6665uniform vec4 uWorldQuaternion; 6666uniform float uMaxLifeTime; 6667uniform vec3 uEmitterSize; 6668uniform float uFPSRatio; // 1 for 60 FPS 6669 6670float random (vec2 st) { 6671 return fract(sin(dot(st.xy, 6672 vec2(12.9898,78.233)))* 6673 43758.5453123); 6674} 6675vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 6676 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 6677} 6678 6679vec3 applyForce(vec3 force, float mass) { 6680 vec3 acceleration = force / mass; 6681 6682 return acceleration; 6683 } 6684 6685 6686void main() { 6687 vec2 vUv = gl_FragCoord.xy / resolution.xy; 6688 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 6689 float currentLife = texture2D( uCurrentPosition, vUv ).w; // from 1 to 0
6690 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r; // 1. = spawning, 0. = not spawning 6691 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 6692 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; // timeStart in seconds when the particle was emitted 6693 vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize); 6694 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 6695 float collisionFlag = texture2D( uCurrentVelocity, vUv ).w; // 1. = collided, 0. = not collided 6696 float lifeTime = uMaxLifeTime; 6697 6698 // Calculate the position adjustment based on collision 6699 // if (collisionFlag > .5) { 6700 float isColliding = step(0.5, collisionFlag); // 1.0 if collisionFlag > 0.5, otherwise 0.0 6701 float bounceOffset = 3.0 * isColliding; // Becomes 3.0 if colliding, 0.0 otherwise 6702 vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset); 6703 6704 // Update position based on collision or normal movement 6705 vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0); 6706 position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding); 6707 6708 // EMISSION RATE - BIRTH 6709 // if (isSpawning == 1.0) { 6710 // Better Approach to avoid If statement 6711 vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset; 6712 originalPosition = mix(originalPosition, newPosition, isSpawning); 6713 position = mix(position, originalPosition, isSpawning);; 6714 timeStart = mix(timeStart, uTime, isSpawning); 6715 6716 // Calculate timeLeft for life normalization
6717 float timeLeft = max(lifeTime - (uTime - timeStart), 0.0); 6718 float life_Normalize = timeLeft / lifeTime; 6719 6720 // Use isActive to blend between the calculated color and black 6721 vec4 activeColor = vec4(position, life_Normalize); 6722 // if (isActive == 1.0) { 6723 gl_FragColor = mix(vec4(0.0), activeColor, isActive); 6724 6725} 6726`,PY=` 6727 #ifdef USE_COLLIDER 6728 float restitution = max(uBounce * 2., .01); // Energy Loss 6729 // SPHERE COLLIDER 6730 // ************************************************************** 6731 #ifdef USE_SPHERE_COLLIDER 6732 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6733 vec3 radii = uColliderSize; 6734 // Adjust position relative to collider 6735 vec3 relPos = position - uColliderPos; 6736 // Apply rotation of the collider to the relative position 6737 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6738 // Scale relative position by radii (for ellipsoid collision detection) 6739 vec3 scaledPos = relPos / radii; 6740 // Calculate ellipsoidal distance 6741 float dist = length(scaledPos); // Distance in terms of ellipsoid 6742
6743 // Check for collision 6744 if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) { 6745 // Compute the normal at the collision point, accounting for particle size 6746 vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii)); 6747 // Compute the normal at the collision point 6748 vec3 normal = ellipsoidNormal(adjustedPos, radii); 6749 // Rotate the normal back to world space 6750 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6751 // Reflect the velocity vector off the normal 6752 velocity = reflect(velocity, normal) * restitution; 6753 6754 collisionFlag = 1.0; 6755 } else { 6756 collisionFlag = 0.0; 6757 } 6758 #endif 6759 6760 // BOX COLLIDER or PLANE COLLIDER 6761 // ************************************************************** 6762 #ifdef USE_BOX_COLLIDER 6763 // Box dimensions and repulsion variables 6764 vec3 boxHalfSize = uColliderSize / 2.0; 6765 // Convert world position to box's local space 6766 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6767 // Collision detection 6768 vec3 localDistance = abs(localPos) - boxHalfSize; 6769 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6770 6771 // Collision Detected 6772 if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) { 6773 // Find the nearest face normal for bounce direction 6774 vec3 normal; 6775 if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) { 6776 normal = vec3(sign(localPos.x), 0.0, 0.0); 6777 } else if (localDistance.y > localDistance.z) { 6778 normal = vec3(0.0, sign(localPos.y), 0.0); 6779 } else { 6780 normal = vec3(0.0, 0.0, sign(localPos.z)); 6781 } 6782 // Rotate normal back to world space 6783 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6784 // Reflect velocity and apply repulsion force 6785 velocity = reflect(velocity, normal) * restitution; 6786 6787 collisionFlag = 1.0; 6788 } else { 6789 collisionFlag = 0.0; 6790 } 6791 #endif 6792 #endif 6793 // END COLLIDER 6794`,PQ=` 6795 #ifdef USE_ATTRACTOR 6796 6797 #ifdef USE_SPHERE_COLLIDER 6798 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6799 vec3 radii = uColliderSize; 6800 // Adjust position relative to collider 6801 vec3 relPos = position - uColliderPos; 6802 // Apply rotation of the collider to the relative position 6803 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6804 // Scale relative position by radii (for ellipsoid collision detection) 6805 vec3 scaledPos = relPos / radii; 6806 // Calculate ellipsoidal distance 6807 float distToSurface = length(scaledPos); // Distance in terms of ellipsoid 6808 float insideCheck = 1.0; 6809 6810 #endif 6811 6812 6813 #ifdef USE_BOX_COLLIDER 6814 // Box dimensions 6815 vec3 boxHalfSize = uColliderSize / 2.0; 6816 // Convert world position to box's local space 6817 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6818 vec3 localDistance = abs(localPos) - boxHalfSize; 6819 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6820 float insideCheck = particleSize; 6821 #endif 6822 6823 // Apply vortex force inside the Helper 6824 #ifdef USE_FORCE_LOCAL_SPACE 6825 if (distToSurface <= insideCheck ) { 6826 // Define parameters for the attractor field 6827 #ifdef USE_SPHERE_COLLIDER 6828 float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; // Adjust as needed 6829 #endif 6830 6831 #ifdef USE_BOX_COLLIDER 6832 float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; // Adjust as needed 6833 #endif 6834 6835 float attractorDamping = uForceDamping; // Adjust as needed (higher values will attenuate velocity more) 6836 6837 // Use the same radii calculation code as for the collider 6838 vec3 attractorRadii = uColliderSize; 6839 // Adjust position relative to attractor center 6840 vec3 relPos = position - uColliderPos; 6841 // Apply rotation of the collider to the relative position 6842 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6843 // Scale relative position by radii (for ellipsoid attraction) 6844 vec3 scaledPos = relPos / attractorRadii; 6845 6846 // Calculate ellipsoidal distance as attractor radius 6847 float attractorRadius = length(scaledPos); 6848 // Calculate the distance from the attractor center 6849 vec3 relativePosition = position - uColliderPos; 6850 // Calculate the force vector towards the attractor center 6851 vec3 attractorForce = normalize(relativePosition) * attractorStrength; 6852 // Apply the attractor force to the particle 6853 velocity -= attractorForce; 6854 // Attenuate the particle's velocity 6855 velocity *= attractorDamping; 6856 } 6857 #else 6858 // Calculate the distance from the attractor center 6859 vec3 relativePosition = position - uColliderPos; 6860 // Calculate the force vector towards the attractor center 6861 vec3 attractorForce = normalize(relativePosition) * uForceIntensity; 6862 // Apply the attractor force to the particle 6863 velocity -= attractorForce; 6864 // Attenuate the particle's velocity 6865 velocity *= uForceDamping; 6866 #endif 6867 #endif 6868`,PZ=` 6869 #ifdef USE_VORTEX 6870 // Box dimensions 6871 vec3 boxHalfSize = uColliderSize / 2.0; 6872 // Convert world position to box's local space 6873 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6874 vec3 localDistance = abs(localPos) - boxHalfSize; 6875 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6876 6877 // Apply vortex force inside the box 6878 if (distToSurface <= particleSize) { 6879 float vortexStrength = uForceIntensity; 6880 vec3 localTopCenter = vec3(0.0, 0., 0.0); 6881 6882 // Transform the local top center to the world space 6883 vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter); 6884 // Calculate the vector from particle to vortex center 6885 vec3 vortexVector = vortexCenter - position; 6886 6887 // Calculate the rotation axis from the inverse of the collider's quaternion and the fixed up vector 6888 // Note: important to add a tiny z component to the up vector to avoid instability 6889 vec3 upVector = vec3(0.0, 1.0, 0.01); 6890 vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector)); 6891 rotationAxis = normalize(rotationAxis); 6892 6893 // Add rotational component to velocity 6894 float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; 6895 6896 vec3 rotationVelocity = rotationAxis * rotationSpeed; 6897 // velocity += rotationVelocity * 0.005 ; 6898 velocity = rotationVelocity * 0.005 ; 6899 6900 // Calculate vortex force 6901 // vec3 vortexForce = normalize(vortexVector) * uSpeed * .1 ; 6902 // Apply the vortex force to the particle 6903 vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions); 6904 velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5); 6905 } 6906 #endif 6907`,PK=` 6908// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6909// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6910// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6911uniform sampler2D uOriginalPosition; 6912uniform sampler2D uDirections; 6913uniform vec3 uDirectionsAxis; 6914uniform vec4 uWorldQuaternion; 6915uniform vec3 uGravity; 6916uniform float uNoiseStrength; // Variation of the noise 6917uniform float uNoiseScale; // Scale of the noise 6918uniform float uNoiseSeed; // Seed of the noise 6919uniform float particleSize; 6920uniform float uSpeed; // update speed of the particles
6921uniform float uRandomMassFactor; 6922 6923// COLLIDER 6924uniform vec3 uColliderPos; // Collider Position 6925uniform vec3 uColliderSize; // Collider Dimension 6926uniform vec4 uColliderQuaternion; // Collider Rotation 6927uniform vec4 uColliderQuaternionInvert; // Collider Rotation 6928uniform float uBounce; // Bounce factor 6929uniform float uForceDamping; 6930uniform float uForceIntensity; 6931 6932 6933 6934 6935 vec3 mod289(vec3 x) { 6936 return x - floor(x * (1.0 / 289.0)) * 289.0; 6937 } 6938 6939 vec4 mod289(vec4 x) { 6940 return x - floor(x * (1.0 / 289.0)) * 289.0; 6941 } 6942 6943 vec4 permute(vec4 x) { 6944 return mod289(((x*34.0)+1.0)*x); 6945 } 6946 6947 vec4 taylorInvSqrt(vec4 r) 6948 { 6949 return 1.79284291400159 - 0.85373472095314 * r; 6950 } 6951 6952 vec3 fade(vec3 t) { 6953 return t*t*t*(t*(t*6.0-15.0)+10.0); 6954} 6955 6956 float snoise(vec3 v) 6957 { 6958 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 6959 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 6960 vec3 i = floor(v + dot(v, C.yyy) ); 6961 vec3 x0 = v - i + dot(i, C.xxx) ; 6962 vec3 g = step(x0.yzx, x0.xyz); 6963 vec3 l = 1.0 - g; 6964 vec3 i1 = min( g.xyz, l.zxy ); 6965 vec3 i2 = max( g.xyz, l.zxy ); 6966 vec3 x1 = x0 - i1 + C.xxx; 6967 vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y 6968 vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y 6969 6970 // Permutations 6971 i = mod289(i); 6972 vec4 p = permute( permute( permute( 6973 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 6974 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 6975 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 6976 6977 // Gradients: 7x7 points over a square, mapped onto an octahedron. 6978 // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) 6979 float n_ = 0.142857142857; // 1.0/7.0 6980 vec3 ns = n_ * D.wyz - D.xzx; 6981 6982 vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) 6983 6984 vec4 x_ = floor(j * ns.z); 6985 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 6986 6987 vec4 x = x_ *ns.x + ns.yyyy; 6988 vec4 y = y_ *ns.x + ns.yyyy; 6989 vec4 h = 1.0 - abs(x) - abs(y); 6990 6991 vec4 b0 = vec4( x.xy, y.xy ); 6992 vec4 b1 = vec4( x.zw, y.zw ); 6993 6994 vec4 s0 = floor(b0)*2.0 + 1.0; 6995 vec4 s1 = floor(b1)*2.0 + 1.0; 6996 vec4 sh = -step(h, vec4(0.0)); 6997 6998 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 6999 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 7000 7001 vec3 p0 = vec3(a0.xy,h.x); 7002 vec3 p1 = vec3(a0.zw,h.y); 7003 vec3 p2 = vec3(a1.xy,h.z); 7004 vec3 p3 = vec3(a1.zw,h.w); 7005 7006 //Normalise gradients 7007 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 7008 p0 *= norm.x; 7009 p1 *= norm.y; 7010 p2 *= norm.z; 7011 p3 *= norm.w; 7012 7013 // Mix final noise value 7014 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 7015 m = m * m; 7016 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 7017 dot(p2,x2), dot(p3,x3) ) ); 7018 } 7019 7020 vec3 snoiseVec3( vec3 x ){ 7021 7022 float s = snoise(vec3( x )); 7023 float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 )); 7024 float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 )); 7025 vec3 c = vec3( s , s1 , s2 ); 7026 return c; 7027 7028 } 7029 7030 7031 vec3 curlNoise( vec3 p, float seed){ 7032 p += seed; 7033 const float e = .1; 7034 vec3 dx = vec3( e , 0.0 , 0.0 ); 7035 vec3 dy = vec3( 0.0 , e , 0.0 ); 7036 vec3 dz = vec3( 0.0 , 0.0 , e ); 7037 7038 vec3 p_x0 = snoiseVec3( p - dx ); 7039 vec3 p_x1 = snoiseVec3( p + dx ); 7040 vec3 p_y0 = snoiseVec3( p - dy ); 7041 vec3 p_y1 = snoiseVec3( p + dy ); 7042 vec3 p_z0 = snoiseVec3( p - dz ); 7043 vec3 p_z1 = snoiseVec3( p + dz ); 7044 7045 float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y; 7046 float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z; 7047 float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x; 7048 7049 const float divisor = 1.0 / ( 2.0 * e ); 7050 return normalize( vec3( x , y , z ) * divisor ); 7051 7052 } 7053 7054 7055// Classic Perlin noise 7056float cnoise(vec3 P) 7057{ 7058 vec3 Pi0 = floor(P); // Integer part for indexing 7059 vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1 7060 Pi0 = mod289(Pi0); 7061 Pi1 = mod289(Pi1); 7062 vec3 Pf0 = fract(P); // Fractional part for interpolation 7063 vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 7064 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 7065 vec4 iy = vec4(Pi0.yy, Pi1.yy); 7066 vec4 iz0 = Pi0.zzzz; 7067 vec4 iz1 = Pi1.zzzz; 7068 7069 vec4 ixy = permute(permute(ix) + iy); 7070 vec4 ixy0 = permute(ixy + iz0); 7071 vec4 ixy1 = permute(ixy + iz1); 7072 7073 vec4 gx0 = ixy0 * (1.0 / 7.0); 7074 vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; 7075 gx0 = fract(gx0); 7076 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 7077 vec4 sz0 = step(gz0, vec4(0.0)); 7078 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 7079 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 7080 7081 vec4 gx1 = ixy1 * (1.0 / 7.0); 7082 vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; 7083 gx1 = fract(gx1); 7084 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 7085 vec4 sz1 = step(gz1, vec4(0.0)); 7086 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 7087 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 7088 7089 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 7090 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 7091 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 7092 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 7093 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 7094 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 7095 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 7096 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 7097 7098 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 7099 g000 *= norm0.x; 7100 g010 *= norm0.y; 7101 g100 *= norm0.z; 7102 g110 *= norm0.w; 7103 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 7104 g001 *= norm1.x; 7105 g011 *= norm1.y; 7106 g101 *= norm1.z; 7107 g111 *= norm1.w; 7108 7109 float n000 = dot(g000, Pf0); 7110 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 7111 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 7112 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 7113 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 7114 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 7115 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 7116 float n111 = dot(g111, Pf1); 7117 7118 vec3 fade_xyz = fade(Pf0); 7119 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 7120 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 7121 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 7122 return 2.2 * n_xyz; 7123} 7124 7125 7126vec3 fbm_vec3(vec3 p, float frequency, float offset) 7127{ 7128 return vec3( 7129 cnoise((p+vec3(offset))*frequency), 7130 cnoise((p+vec3(offset+20.0))*frequency), 7131 cnoise((p+vec3(offset-30.0))*frequency) 7132 ); 7133} 7134 7135 7136float rand(vec2 co){ 7137 return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); 7138} 7139vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 7140 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 7141 } 7142vec3 applyForce(vec3 force, float mass) { 7143 vec3 acceleration = force / mass; 7144 7145 return acceleration; 7146} 7147 7148vec4 conjugate(vec4 q) { 7149 return vec4(q.w, -q.x, -q.y, -q.z); 7150} 7151 7152// Function to compute the normal of the ellipsoid at a given point 7153vec3 ellipsoidNormal(vec3 p, vec3 radii) { 7154 return normalize(p / (radii * radii)); 7155} 7156 7157float friction = .3; 7158 7159void main() { 7160 vec2 vUv = gl_FragCoord.xy / resolution.xy; 7161 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 7162 vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz; 7163 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 7164 vec3 directions = texture2D( uDirections, vUv ).xyz; 7165 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 7166 float mass = rand(originalPosition.xy) * 0.5 + 0.5;
7167 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x; // 1. = spawning, 0. = not spawning 7168 float isActive = texture2D( uCurrentEmissionRate, vUv ).y; // 1. = active, 0. = not active 7169 float collisionFlag =texture2D( uCurrentVelocity, vUv ).w; // Indicate collision 7170 7171 // Randomness Mass 7172 mass = (1.0 - (uRandomMassFactor * mass)); 7173 7174 if (isActive == 1.0) { 7175 // ************************************************************** 7176 // FORCES NOISES 7177 // ************************************************************** 7178 #ifdef USE_CURL_NOISE 7179 if (uNoiseScale > 0.0 ) { 7180 velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed; 7181 } 7182 // Variation of the noise Over Time 7183 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 7184 velocity += curlNoise( position, uNoiseSeed) * uNoiseStrength * 0.05 * uSpeed; 7185 } 7186 #endif 7187 // ************************************************************** 7188 #ifdef USE_SIMPLEX_NOISE 7189 if (uNoiseScale > 0.0 ) { 7190 velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1); 7191 velocity *= uSpeed; 7192 } 7193 // Variation of the noise Over Time 7194 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) { 7195 velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed); 7196 } 7197 #endif 7198 // ************************************************************** 7199 #ifdef USE_FBM_NOISE 7200 if (uNoiseScale > 0.0 ) { 7201 velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed); 7202 velocity *= uSpeed; 7203 } 7204 // Variation of the noise Over Time 7205 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 7206 velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed; 7207 } 7208 #endif 7209 7210 // COLLIDER 7211 ${PY} 7212 // ATTRACTION 7213 ${PQ} 7214 // VORTEX 7215 ${PZ} 7216 } 7217 // End isActive 7218 7219 // SPAWN BIRTH 7220 // ************************************************************** 7221 // if (isSpawning == 1.) 7222 #ifdef USE_NORMALS 7223 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning); 7224 #else 7225 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning); 7226 #endif 7227 7228 // if (collisionFlag == 0.0) 7229 velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag); 7230 7231 gl_FragColor = vec4(velocity, collisionFlag); 7232} 7233`,PJ=` 7234 7235 // Linear Fade In 7236 float linearFadeIn(float t) { 7237 return t; 7238 } 7239 7240 7241 // linear fade out 7242 float linearFadeOut(float t) { 7243 return 1.0 - t; 7244 } 7245 7246 float linearInOut(float t) { 7247 return t < 0.5 ? t : (1.0 - t); 7248 } 7249 7250 // lerp 7251 float lerp(float a, float b, float t) { 7252 return a + (b - a) * t; 7253 } 7254 7255 // Ease In Out Quart 7256 float exponentialInOut(float t) { 7257 return t < 0.4 ? lerp(0.0, 1.0, t / 0.4) : 7258 t > 0.6 ? lerp(1.0, 0.0, (t - 0.6) / 0.4) : 7259 1.0; 7260 } 7261 7262 // constant 7263 float constant(float t) { 7264 return 1.0; 7265 } 7266`,P$=` 7267 7268float rand(vec3 co){ 7269 return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); 7270} 7271 7272vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 7273 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 7274} 7275 7276vec3 applyForce(vec3 force, float mass) { 7277 vec3 acceleration = force / mass; 7278 7279 return acceleration; 7280} 7281`,P0=` 7282vec3 rgb2xyz (in vec3 rgb) { 7283 float r = rgb.r; 7284 float g = rgb.g; 7285 float b = rgb.b; 7286 7287 r = r > 0.04045 ? pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); 7288 g = g > 0.04045 ? pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); 7289 b = b > 0.04045 ? pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); 7290 7291 float x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); 7292 float y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 7293 float z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); 7294 7295 vec3 xyz = vec3( 7296 (r * 0.4124) + (g * 0.3576) + (b * 0.1805) * 100.0, 7297 (r * 0.2126) + (g * 0.7152) + (b * 0.0722) * 100.0, 7298 (r * 0.0193) + (g * 0.1192) + (b * 0.9505) * 100.0 7299 ); 7300 return(xyz); 7301} 7302 7303vec3 xyz2lab (in vec3 xyz) { 7304 float x = xyz.x / 95.047; 7305 float y = xyz.y / 100.0; 7306 float z = xyz.z / 108.883; 7307 7308 x = x > 0.008856 ? pow(x, 1.0 / 3.0) : (7.787 * x) + (16.0 / 116.0);
7309 y = y > 0.008856 ? pow(y, 1.0 / 3.0) : (7.787 * y) + (16.0 / 116.0); 7310 z = z > 0.008856 ? pow(z, 1.0 / 3.0) : (7.787 * z) + (16.0 / 116.0); 7311 7312 vec3 lab = vec3((116.0 * y) - 16.0, 500.0 * (x - y), 200.0 * (y - z)); 7313 return(lab); 7314} 7315 7316vec3 rgb2lab(in vec3 rgb) { 7317 vec3 xyz = rgb2xyz(rgb); 7318 vec3 lab = xyz2lab(xyz); 7319 return(lab); 7320} 7321 7322vec3 xyz2rgb (in vec3 xyz) { 7323 float x = xyz.x / 100.0; 7324 float y = xyz.y / 100.0; 7325 float z = xyz.z / 100.0; 7326 7327 7328 float r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); 7329 float g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); 7330 float b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); 7331 7332 r = r > 0.0031308 ? ((1.055 * pow(r, 1.0 / 2.4)) - 0.055) : r * 12.92; 7333 g = g > 0.0031308 ? ((1.055 * pow(g, 1.0 / 2.4)) - 0.055) : g * 12.92; 7334 b = b > 0.0031308 ? ((1.055 * pow(b, 1.0 / 2.4)) - 0.055) : b * 12.92; 7335 7336 r = min(max(0.0, r), 1.0); 7337 g = min(max(0.0, g), 1.0); 7338 b = min(max(0.0, b), 1.0); 7339 7340 return(vec3(r, g, b)); 7341} 7342 7343vec3 lab2xyz (in vec3 lab) { 7344 float l = lab.x; 7345 float a = lab.y; 7346 float b = lab.z; 7347 7348 float y = (l + 16.0) / 116.0; 7349 float x = a / 500.0 + y; 7350 float z = y - b / 200.0; 7351 7352 float y2 = pow(y, 3.0); 7353 float x2 = pow(x, 3.0); 7354 float z2 = pow(z, 3.0); 7355 7356 y = y2 > 0.008856 ? y2 : (y - 16.0 / 116.0) / 7.787; 7357 x = x2 > 0.008856 ? x2 : (x - 16.0 / 116.0) / 7.787; 7358 z = z2 > 0.008856 ? z2 : (z - 16.0 / 116.0) / 7.787; 7359 7360 x *= 95.047; 7361 y *= 100.0; 7362 z *= 108.883; 7363 7364 return(vec3(x, y, z)); 7365} 7366vec3 lab2rgb (in vec3 lab) { 7367 vec3 xyz = lab2xyz(lab); 7368 vec3 rgb = xyz2rgb(xyz); 7369 return(rgb); 7370} 7371 7372`,P1=` 7373 uniform sampler2D uPosition; 7374 uniform float uSize; 7375 uniform float uSizeEnd; 7376 uniform vec3 uWorldOffset; 7377 uniform vec4 uWorldQuaternion; 7378 // Billboard Behavior - Currently at Zero, but we can change that 7379 uniform float uRotation; 7380 uniform float uRotationEnd; 7381 uniform vec2 center; 7382 7383 // Randomness 7384 uniform float uRandScaleFactor; 7385 uniform float uRandRotationFactor; 7386 7387 attribute vec2 ref; 7388 7389 varying float v_LifeLeft; // normalized lifetime 1 to 0 7390 varying vec2 vUv; 7391 varying vec2 vRef; 7392 7393 ${P$} 7394 ${PJ} 7395`,P2=({easeSize:e="linearFadeOut"})=>` 7396 vUv = uv; 7397 vRef = ref; 7398 // Normalized LifeTime 1 to 0 7399 float lifeLeft = texture2D(uPosition, ref).w; 7400 v_LifeLeft = lifeLeft; 7401 // Position From DataTexture Simulation 7402 vec3 pos = texture2D(uPosition, ref).rgb - uWorldOffset; 7403 // Apply World Quaternion 7404 pos = applyQuaternionToVector(uWorldQuaternion, pos); 7405 7406 #ifdef USE_SIZE_END 7407 // Scaled Over Time 7408 float t = 1. - lifeLeft; 7409 float currentSize = mix(uSize, uSizeEnd, t); // Linearly interpolate between uSize and uSizeEnd 7410 vec3 scaledPosition = position * vec3(currentSize); 7411 #else 7412 // Change Size Behavior over LifeTime 7413 float easeSize = ${e}(1. - lifeLeft); 7414 // Scaled Over Time 7415 vec3 scaledPosition = position * vec3(uSize * easeSize); 7416 #endif 7417 7418 // Billboard Behavior 7419 vec2 scale; 7420 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 7421 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 7422 // Randomness 7423 float randRef = rand(ref); 7424 scale *= (1.0 - (uRandScaleFactor * randRef)); 7425 // Rotation 7426 float randRotation = 2.0 * PI * ( uRandRotationFactor * randRef); 7427 float originalRotation = (1.0 - uRotation) * 2.0 * PI; 7428 float originalRotationEnd = (1.0 - uRotationEnd) * 2.0 * PI; 7429 // OverTime 7430 float finalRotation = mix(originalRotation + randRotation, originalRotationEnd + randRotation, lifeLeft); 7431 7432 vec2 alignedPosition = ( scaledPosition.xy - ( center - vec2( 0.5 ) ) ) * scale; 7433 vec2 rotatedPosition; 7434 rotatedPosition.x = cos( finalRotation ) * alignedPosition.x - sin( finalRotation ) * alignedPosition.y; 7435 rotatedPosition.y = sin( finalRotation ) * alignedPosition.x + cos( finalRotation ) * alignedPosition.y; 7436 7437 mat4 instanceMatrix = mat4( 7438 vec4(1.0, 0.0, 0.0, 0.0), 7439 vec4(0.0, 1.0, 0.0, 0.0), 7440 vec4(0.0, 0.0, 1.0, 0.0), 7441 vec4(pos.x, pos.y, pos.z, 1.0) 7442 ); 7443 7444 mvPosition = modelViewMatrix * instanceMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 7445 mvPosition.xy += rotatedPosition; 7446 gl_Position = projectionMatrix * mvPosition; 7447`,P3=` 7448 uniform vec4 uColor; // start color 7449 uniform vec4 uColor2; // end color 7450 uniform sampler2D uTexture; // texture 7451 varying float v_LifeLeft; // normalized lifetime 1 to 0 7452 varying vec2 vUv; 7453 varying vec2 vRef; 7454 7455 float random(vec2 co) { 7456 return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); 7457 } 7458 `+PJ+` 7459 ${P0} 7460 7461`,P4=({easeOpacity:e="linearFadeOut"})=>` 7462 // if Particle is dead, hide it 7463 if (v_LifeLeft <= 0.005 ) { 7464 discard; 7465 } 7466 7467 #ifdef USE_RANDOM_COLORING 7468 float randVal = random(vRef); // Generate a random value based on the reference 7469 vec4 color = mix(uColor, uColor2, randVal); // Interpolate between the two colors 7470 #else 7471 vec4 color = mix(uColor, uColor2, 1. - v_LifeLeft); 7472 #endif 7473 7474 // Opacity over Life Time 7475 float finalAlpha = ${e}(1. - v_LifeLeft); 7476 vec4 textureColor = texture2D(uTexture, vUv).rgba; 7477 finalColor = textureColor.rgb * color.rgb; 7478 finalAlpha = color.a * textureColor.a * finalAlpha; 7479 7480 gl_FragColor = vec4(finalColor, finalAlpha); 7481 7482`,P5=class extends r8{constructor(e,t){super(),this.needsJitter=!0,this.type="ParticleMaterial",this.easeOpacity="linearFadeIn",this.easeSize="linearFadeIn",this.useSizeEnd=!1,this.isColoringRandom=!1,this.init(e,t),this.context=t}reset(){}init(e,t){this.transparent=!0,this.depthTest=!0,this.depthWrite=!1,this.easeOpacity=e.ease,this.easeSize=e.easeSize,this.layers=[],SO.startContext(SO.globalContext),this.lightLayer=new AM(0,"",{...gE.defaultData("light","phong"),visible:!1},new _Y,{},t.shared),SO.endContext(SO.globalContext),this.build()}updateState(e){void 0!==e.coloring&&(this.isColoringRandom="random"===e.coloring),void 0!==e.color&&(e.color instanceof Array?this.uniforms.uColor.value=e.color:this.uniforms.uColor.value=this.context.shared.color(e.color)),void 0!==e.color2&&(e.color2 instanceof Array?this.uniforms.uColor2.value=e.color2:this.uniforms.uColor2.value=this.context.shared.color(e.color2)),void 0!==e.size&&(this.uniforms.uSize.value=e.size[0],this.uniforms.uSizeEnd.value=e.size[1],e.size[0]!==e.size[1]?this.useSizeEnd=!0:this.useSizeEnd=!1),void 0!==e.ease&&(this.easeOpacity=e.ease,this.build()),void 0!==e.easeSize&&(this.easeSize=e.easeSize,this.build()),this.needsUpdate=!0}onBeforeCompile(e){this.build(),e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader}build(){let e=new _h;return e.needsJitter=this.needsJitter,e.addFragmentParsCode(_r),e.buildShader("vertex",this.fragment),e.buildShader("fragment",this.fragment),e.addFragmentFinalCode(_s),this.isColoringRandom&&e.define("USE_RANDOM_COLORING"),this.useSizeEnd&&e.define("USE_SIZE_END"),e.addVertexParsCode(P1),e.addFragmentParsCode(P3),e.addVertexFinalCode(P2({easeSize:this.easeSize})),e.addFragmentFinalCode(P4({easeOpacity:this.easeOpacity})),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms={...e.uniforms,...this.uniforms},this.extensions=e.extensions,this}get nodeMaterial(){return this}get fragment(){return this.lightLayer.node}getDefines(){return this.defines}
7482nodeMaterialDispose(){this.layers.forEach(e=>e.dispose()),super.dispose()}},P6=class{constructor(e,t,i,r){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=Math.max(Math.ceil(Math.sqrt(t)),1),this.targetMesh=r?.type==="Mesh"&&r?r:this.getMesh(i,1);let{positions:s,dataTexture:a,dataTextureNormals:o}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=a,this.positionsAttribute=s,this.directionsTexture=o}createPositions(e,t){let{positions:i,normals:r}=function(e,t){let i=new rJ(e.geometry,e.material),r=[],s=[],a=new ix,o=new ix;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let l=new PW(i).build();for(let e=0;e<t;e++)l.sample(a,o),r.push(a.x,a.y,a.z),s.push(o.x,o.y,o.z);return{positions:new Float32Array(r),normals:new Float32Array(s)}}(t,e*e);return{dataTexture:Pq(i,e),positions:i,dataTextureNormals:Pq(r,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new oL(.5*t,32,32);break;case"TorusEmitterShape":i=new oB(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new oc(t,t,15);break;case"BoxEmitterShape":i=new r0(t,t,t);break;case"PlaneEmitterShape":(i=new su(t,t)).rotateX(-Math.PI/2);break;default:i=new oL(t,32,32)}return new rJ(i,new rA({color:16711680}))}applyToShader(e,t){this.size=new ix().fromArray(t.size),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function P8(e){let t={...e},i=gv.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let r={...i.shape,...t.shape},s={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:r,renderMaterial:s}}var P9=` 7483// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 7484// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 7485// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 7486 7487uniform sampler2D uIndex; // Texture with corresponding index 7488uniform float uLastIndexEmitted; // Last emitted index 7489uniform float uParticlesToEmit; // Number of particles to emit on that frame 7490uniform float uTime; 7491 7492void main() { 7493 vec2 vUv = gl_FragCoord.xy / resolution.xy; 7494 float particleIndex = texture(uIndex, vUv).x; 7495 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 7496 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 7497 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; 7498 7499 7500 // ********** Detect Colision to Create a flag and use it in position ********** 7501 // We are doing this here, so 7502 7503 // ********** Emit Particles ********** 7504 // X = isSpawning 0.0 or 1.0 7505 // Y = isActive 0.0 or 1.0 7506 // Check if the vertex index is between the first value and the last value 7507 // if (particleIndex >= uLastIndexEmitted && particleIndex < uLastIndexEmitted + uParticlesToEmit) { 7508 // // Emit a particle by writing 1 to the red channel of the color output 7509 // // r: 1. == emit the particle 7510 // // g: 1. == particle is now active 7511 // timeStart = uTime; 7512 // gl_FragColor = vec4(1.0, 1.0, timeStart, 1.0); 7513 // } else { 7514 // // The Particle is either already emitted or not in the range of the particles to emit 7515 // // Do not emit a particle by writing 0 to the red channel of the color output 7516 // gl_FragColor = vec4(0.0, isActive, timeStart, 1.0); 7517 // } 7518 // Determine if the particle is within the emission range 7519 float emitLowerBound = step(uLastIndexEmitted, particleIndex); 7520 float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0); 7521 float emitParticle = emitLowerBound * emitUpperBound; // 1.0 if in range, 0.0 otherwise 7522 7523 // Set timeStart and color 7524 timeStart = mix(timeStart, uTime, emitParticle); 7525 gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0); 7526 7527 7528} 7529`,P7=class extends rc{constructor(e,t){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldSpace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new o7,this.currentWorldPosition=new ix,this.systemQuaternion=new iy,this.worldGravity=new ix(0,0,0),this.directionAxis=new ix(0,0,0),this.colliderV3=new ix(0,0,0),this.colliderQuaternion=new iy(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=e,this.system=t,this.shared=t.context.shared;let i=t.data;this.material=new P5(i.renderMaterial,t.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:i.renderMaterial.color},uColor2:{value:i.renderMaterial.color2},uPosition:{value:new ix(0,0,0)},uEmissionData:{value:new ix(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new ix(0,0,0)},uWorldQuaternion:{value:new iu(0,0,0,1)},uRandScaleFactor:{value:i.randomScale??0},uRandRotationFactor:{value:i.randomRotation??0},uRotation:{value:i.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:i.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,i.renderMaterial.texture),this.init(i)}setTexture(e,t){let i=t.data;if("string"==typeof t){let i=new id(this.shared.image(t).img);i.needsUpdate=!0,e.uTexture.value=i;return}if("string"!=typeof i){let t=new Image;t.onload=()=>{let i=new id(t);i.needsUpdate=!0,e.uTexture.value=i};let r=new Blob([i],{type:"image/*"}),s=URL.createObjectURL(r);t.src=s}}updateGeometryAttributes(e,t){let i=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let r=0;r<e;r++){let s=i*e+r;t[2*s+0]=i/(e-1),t[2*s+1]=r/(e-1)}return t}(t);this.emitterShape?.positionsAttribute&&e.geometry.setAttribute("ref",new nI(i,2))}
vendor: 5,390 bytes, line 7529
7529applyWorldSpace(){if(!this.system.started||!this.worldSpace||!this.positionSimRT||!this.velocitySimRT)return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset){this.reset();return}this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=this.targetFPS/(1e3/t),r=this.previousRatio+(i-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=r,this.previousRatio=r;let s=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=s,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(P8({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){this.velocitySimRT&&this.positionSimRT&&(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"noiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(!(!this.positionSimRT||!this.velocitySimRT)){if(this.shouldReInitGPUCompute(e)&&this.init(P8(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassF
7529actor.value=e.randomMass),e.renderMaterial?.size!==void 0){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(e.renderMaterial?.spriteRotation!==void 0&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],r={...P8(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,r)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){this.velocitySimRT&&(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0===e.forceDambing||(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*tZ.DEG2RAD,Number(e[1])*tZ.DEG2RAD,Number(e[2])*tZ.DEG2RAD],i=new i5(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:r,shape:s,emitTimeDuration:a,emitTimeCycle:o,life:l,directionMode:h,noiseType:c}=e;return void 0!==t||void 0!==i||r||null===r||void 0!==o||void 0!==s||void 0!==l||void 0!==a||void 0!==h||void 0!==c}init(e){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:e.birthRatePerSec,particleMaxLifeTime:e.life,loopDuration:"infinity"===e.emitTimeCycle?0:e.emitTimeDuration}),this.particlesAmount>1e5&&(console.warn("The maximum number of particles is limited to 100000."),this.particlesAmount=1e5),this.emitterShape=this.createShape(e.shape,this.particlesAmount);let t=setInterval(()=>{if(this.emitterShape){if(isNaN(this.emitterShape.positionsTexture.source.data.data[0])){this.init(e);return}clearInterval(t)}},100);if(!this.emitterShape)return;let i=new Pj(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),r=this.updateSimulationDefinition(e),s=i.addVariable("uCurrentPosition",r+PX,this.emitterShape.positionsTexture),a=i.addVariable("uCurrentVelocity",r+PK,this.emitterShape.directionsTexture),o=i.addVariable("uCurrentEmissionRate",P9,function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nC(t,e,e,1023,1015);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));i.setVariableDependencies(s,[s,a,o]),i.setVariableDependencies(a,[s,a,o]),i.setVariableDependencies(o,[s,a,o]);let l=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nC(t,e,e,1023,1015);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),h={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new ix(0,0,0)},uWorldQuaternion:{value:new iu(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:e.life},uEmitterSize:{value:new ix(Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};s.material.uniforms=h;let c=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(c),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"]));let d=e.colliderEntityId&&this.system.getColliderData(e.colliderEntityId),u={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new iu(0,0,0,1)},uColliderPos:{value:new ix(0,0,0)},uColliderSize:{value:new ix(0,0,0)},uForceIntensity:{value:d?d.forceIntensity:0},uForceDamping:{value:d?d.forceDambing:0},uColliderQuaternion:{value:new iu(0,0,0,1)},uColliderQuaternionInvert:{value:new iu(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:e.noiseSeed}
vendor: 5,499 bytes, lines 7529-7530
7529,uRandomMassFactor:{value:e.randomMass},uBounce:{value:e.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10}};a.material.uniforms=u,o.material.uniforms={uIndex:{value:l},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};let p=[Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"]))],f={...P8(this.system.data).shape,size:p};this.emitterShape.applyToShader(s.material.uniforms,f),i.init(),this.gpuCompute=i,this.positionSimRT=s,this.velocitySimRT=a,this.emissionRateSimRT=o,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),t?.forceRange==="helper"&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.noiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e} 7530`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new ix(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"!==e.type)return new P6(i,t,e.type);{let r=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(r=t)}),r?new P6(i,t,e.type,r):new P6(i,t,"SphereEmitterShape")}}createPrimaryEmitter(e){let t;return t=new nF(new su(1,1,1),this.material,e*e),this.updateGeometryAttributes(t,e),this.material.needsUpdate=!0,t.onBeforeRender=()=>{this.applyWorldSpace()},t}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){this.gpuCompute&&(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,r=1/t;if(i>=r){let t=Math.max(1,Math.floor(i/r));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(P8(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},De=class extends SD{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.geometry=new rN,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...P8(t)},this.geometry.setAttribute("position",new rD([],3)),this.material=new rA({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new P7(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>
7530t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pY(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...p0.drop(e,1).props}}),pY(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...p0.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){this.emitter&&(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){if(this.currentLoopTime=0,e){this.timeoutId=window.setTimeout(()=>{this.start(0)},e);return}this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3)}froze(){this.isFrozen=!0}unFroze(){this.isFrozen=!1}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId)}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},Dt=function(){try{let e=window.location.href;if(e.includes("reducesubdiv=")){let t=e.indexOf("reducesubdiv=")+13;return parseInt(e.slice(t,t+1))}}catch{}}();function Di(e,t,i){return console.assert(void 0!==t.type),"Mesh"===t.type?(void 0!==Dt&&(t?.geometry?.subdivisions??0)>Dt&&(console.log("reducing subdivisions",t.name,t.geometry.subdivisions),t.geometry.subdivisions=Dt),"TextGeometry"===t.geometry.type?new MJ(e,t,i):"InputGeometry"===t.geometry.type?new Pz(e,t,i):"SubdivGeometry"===t.geometry.type?new MC(e,t,i):"PathGeometry"===t.geometry.type?new PB(e,t,i):"VectorGeometry"===t.geometry.type?new PL(e,t,i):"BooleanGeometry"===t.geometry.type?new ES(e,t,i):"UIGeometry"===t.geometry.type?new PV(e,t,i):new MS(e,t,i)):"Empty"===t.type?new EL(e,t):"Particle"===t.type?new De(e,t,i):"ParticleCollider"===t.type?new EB(e,t,i):"Splat"===t.type?new EL(e,t):"Bone"===t.type?new Pk(e,t):"Page"===t.type?new PO(e,t,i):"PointLight"===t.type?new PR(e,t,i):"SpotLight"===t.type?new Tj(e,t,i):"DirectionalLight"===t.type?new TN(e,t,i):"Component"===t.type||"Instance"===t.type?new PF(e,t,i):gd.is(t.type)?new Ey(e,t):(console.error(t),new EL(e,t))}function Dr(e,t){let i=!1,r=t.getLayersOfType("transmission"),s=t.getLayersOfType("outline");return s.length>0&&(e.layers.set(8),r.length>0&&e.layers.enable(3),i=!0,MA(e),M_(e)),0===r.length&&0===s.length&&e.layers.set(0),e instanceof Mg&&e.needsAO&&e.layers.enable(5),i}function Ds(e,t){if(!t.layers)return!1;let i=!1,r=t.getLayersOfType("transmission").filter(e=>e.data.visible),s=t.getLayersOfType("outline").filter(e=>e.data.visible);return r.length>0&&(e.layers.set(3),s.length>0&&e.layers.enable(8),i=!0),0===r.length&&0===s.length&&e.layers.set(0),e.needsAO&&e.layers.enable(5),i}xI.createEntity=Di,xI.changeEntityProptotype=function(e,t,i){let r=Di(e.identity,t,i),s=e.children,a=e.attachedPaths,o=e.parent,l=e.component,h=e.instances,c=e.overrideData,d=e.uuid,u=e.stateSelection;for(let t of(e.dispose(),Object.keys(e)))delete e[t];for(let t of(Object.setPrototypeOf(e,Object.getPrototypeOf(r)),Object.keys(r)))e[t]=r[t];e.children=[...e.children,...s],e.attachedPaths=a,e.parent=o,e.component=l,e.instances=h,e.uuid=d,e.overrideData=c,e.updateState(e.data,i),u&&e.changeSelectedState(u,i),e.resetBBoxNeedsUpdate()},xI.Cloner=Ee;var Da=new lO,Dn=new iQ,Do=new iY;function Dl(e,t,i,r=!1){let s=e.cloner;if(s)for(let a of s.children){let s=Dn.copy(a.matrixWorld).invert(),o=Do.copy(t.ray).applyMatrix4(s),l=e.matrixWorld;o.applyMatrix4(l),Da.set(o.origin,o.direction),Da.near=t.near,Da.far=t.far;let h=Da.intersectObject(e,!1);h.length>0&&i.push({...h[0],object:r?a:e})}}var Dh=class{constructor(){this._constraints=new Map}setConstraint(e,t){null===t?this._constraints.delete(e):this._constraints.set(e,t)}removeDependencies(e){this._constraints.delete(e)}
7530applyConstraints(e){let t=new Set;this._constraints.forEach((i,r)=>{let s=[r,i],a=i;for(;this._constraints.has(a);){if(a=this._constraints.get(a),s.includes(a)){console.warn(`circular dependency detected: ${s.join(" -> ")}`);break}t.has(a)||s.push(a)}for(let i=s.length-2;i>=0;i--)if(!t.has(s[i])){let r=e.find(s[i]);r?r.applyPathSnapping(e):console.warn(`missing entity ${s[i]}`),t.add(s[i])}})}findDependency(e,t){let i=e;for(;this._constraints.has(i);)if((i=this._constraints.get(i))===t)return!0;return!1}},Dc=class{};function Dd(e){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g;function v(e,t,o){let l=new Float32Array(d,a,3*i);r=0;let h=new Uint32Array(d,s,i);for(let i=0;i<o.length-1;i++){let s=t[i],a=e[i].elements,c=s.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),d=s.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e));for(let e=o[i];e<o[i+1];e++){let t=p[3*e],i=p[3*e+1],s=p[3*e+2];if((0===c.length||y(t,i,s,c))&&(0===d.length||!y(t,i,s,d))){let o=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);l[3*r]=(a[0]*t+a[4]*i+a[8]*s+a[12])*o,l[3*r+1]=(a[1]*t+a[5]*i+a[9]*s+a[13])*o,l[3*r+2]=(a[2]*t+a[6]*i+a[10]*s+a[14])*o,h[r]=e,r++}}}}function y(e,t,i,r,s){return r["Intersect"===s?"every":"some"](r=>{var s,a,o,l,h,c,d,u;let p,f,m,g,v,y,x;let b=(s=r.invRotationMatrix,p=e-(a=r.cropCenter)[0],f=t-a[1],m=i-a[2],g=1/(s[3]*p+s[7]*f+s[11]*m+s[15]),{x:(s[0]*p+s[4]*f+s[8]*m+s[12])*g+a[0],y:(s[1]*p+s[5]*f+s[9]*m+s[13])*g+a[1],z:(s[2]*p+s[6]*f+s[10]*m+s[14])*g+a[2]});return Array.isArray(r)?(o=b.x,l=b.y,h=b.z,o>=r[0]&&o<=r[3]&&l>=r[1]&&l<=r[4]&&h>=r[2]&&h<=r[5]):(c=b.x,d=b.y,u=b.z,v=(c-r.cropCenter[0])*r.invRadiusX,v*v+(y=(d-r.cropCenter[1])*r.invRadiusY)*y+(x=(u-r.cropCenter[2])*r.invRadiusZ)*x<=1)})}function x(e){let t=e.cropSize[0]/2,i=e.cropSize[1]/2,r=e.cropSize[2]/2;return Object.assign([e.cropCenter[0]-t,e.cropCenter[1]-i,e.cropCenter[2]-r,e.cropCenter[0]+t,e.cropCenter[1]+i,e.cropCenter[2]+r],{invRotationMatrix:b(e.cropRotation),cropCenter:e.cropCenter})}function b(e){let t=[],i=e[0]*Math.PI/180,r=e[1]*Math.PI/180,s=e[2]*Math.PI/180,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s),u=a*c,p=a*d,f=o*c,m=o*d;return t[0]=l*c,t[1]=-l*d,t[2]=h,t[4]=p+f*h,t[5]=u-m*h,t[6]=-o*l,t[8]=m-u*h,t[9]=f+p*h,t[10]=a*l,t[12]=0,t[13]=0,t[14]=0,t[3]=0,t[7]=0,t[11]=0,t[15]=1,t}function w(e){let t=2/e.cropSize[0],i=2/e.cropSize[1],r=2/e.cropSize[2],s=b(e.cropRotation);return{invRadiusX:t,invRadiusY:i,invRadiusZ:r,cropCenter:e.cropCenter,invRotationMatrix:s}}e.onmessage=b=>{if(b.data.getCroppedIndexes){let t=new Uint32Array(function(e,t){let i=[],r=t.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),s=t.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),a=e.length;for(let t=0;t<a;t+=3){let a=e[t],o=e[t+1],l=e[t+2];(0===r.length||y(a,o,l,r))&&(0===s.length||!y(a,o,l,s))||i.push(t/3)}return i}(new Float32Array(b.data.positions),b.data.crops)).buffer;e.postMessage({outOfBoundsIndexes:t},[t])}else if(b.data.positions)p=new Float32Array(b.data.positions),m=b.data.meshMatrixWorlds,g=b.data.cropsArray,f=b.data.meshIndexIntervals,v(m,g,f),e.postMessage({sortSetupComplete:!0});else if(b.data.sort||b.data.newMatrixWorlds||b.data.newCropsArray)(b.data.newMatrixWorlds||b.data.newCropsArray)&&(g=b.data.newCropsArray||g,v(m=b.data.newMatrixWorlds||m,g,f)),function(p){let f,m=new Float64Array(d,o,16);for(let e=0;e<16;e++)m[e]=p[e];if(r>1){t.exports.sortIndexes(s,a,c,o,l,h,u.DepthMapRange,r);let e=new Uint32Array(r);f=e.buffer,e.set(new Uint32Array(d,h,r))}else if(1===r){let e=new Uint32Array(r);e[0]=new Uint32Array(d,s,i)[0],f=e.buffer}else f=new ArrayBuffer(0);e.postMessage({sortDone:!0,indexesBuffer:f},[f])}(b.data.sort.view,b.data.sort.cameraPosition);else if(b.data.init){u=b.data.init.Constants,i=b.data.init.splatCount;let r=u.BytesPerInt,p=3*u.BytesPerFloat,f=new Uint8Array(b.data.init.sorterWasmBytes),m=Math.floor((i*(r+p)+(i*u.BytesPerInt*2+u.DepthMapRange*u.BytesPerInt*2)+32*u.MemoryPageSize)/u.MemoryPageSize)+1,g={module:{},env:{memory:new WebAssembly.Memory({initial:2*m,maximum:3*m,shared:!0})}};WebAssembly.compile(f).then(e=>WebAssembly.instantiate(e,g)).then(f=>{t=f,s=0,h=(l=(c=(o=(a=i*r)+i*p)+16*u.BytesPerFloat*2)+i*u.BytesPerInt)+u.DepthMapRange*u.BytesPerInt,d=g.env.memory.buffer,e.postMessage({sortSetupPhase1Complete:!0})})}}}tS(Dc,"DepthMapRange",65536),tS(Dc,"MemoryPageSize",65536),tS(Dc,"BytesPerFloat",4),tS(Dc,"BytesPerInt",4);var Du=(ti=new Int32Array((tt=new Float32Array(1)).buffer),function(e){return tt[0]=e,ti[0]}),Dp=new tK;function Df(e){let t=!1;
vendor: 5,910 bytes, lines 7530-7636
7530return e.scene.objects.traverse((e,i)=>{if(!1===i.visible)return!0;"Splat"===i.type&&(t=!0)}),t}var Dm,Dg,Dv,Dy,Dx,Db=class extends rJ{constructor(e,t,i,r,s=!1,a=1,o,l){super(i,r),this.splatCount=t,this.meshIndexIntervals=o,this.meshMatrixWorlds=l,this.splatBuffers=e,this.geometry=i,this.material=r,this.splatDataTextures=null,this.halfPrecisionCovariancesOnGPU=s,this.devicePixelRatio=a,this.resetLocalSplatDataAndTexturesFromSplatBuffer()}static buildMesh(e,t,i=!1,r=1,s,a){let o=Db.buildGeomtery(t),l=Db.buildMaterial(s);return new Db(e,t,o,l,i,r,s,a)}static buildMaterial(e){let t=` 7531 precision highp float; 7532 #include <common> 7533 7534 attribute uint splatIndex; 7535 7536 uniform highp sampler2D covariancesTexture; 7537 uniform highp usampler2D centersColorsTexture; 7538 uniform vec2 focal; 7539 uniform vec2 viewport; 7540 uniform vec2 basisViewport; 7541 uniform vec2 covariancesTextureSize; 7542 uniform vec2 centersColorsTextureSize; 7543 uniform highp sampler2D meshMatrixWorldsTexture; 7544 uniform uint meshIndexIntervals[257]; 7545 uniform float orthoZoom; 7546 7547 varying vec4 vColor; 7548 varying vec2 vUv; 7549 7550 varying vec2 vPosition; 7551 7552 const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0); 7553 const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000)); 7554 const uvec4 shift4 = uvec4(0, 8, 16, 24); 7555 vec4 uintToRGBAVec (uint u) { 7556 uvec4 urgba = mask4 & u; 7557 urgba = urgba >> shift4; 7558 vec4 rgba = vec4(urgba) * encodeNorm4; 7559 return rgba; 7560 } 7561 7562 vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) { 7563 vec2 samplerUV = vec2(0.0, 0.0); 7564 float d = float(splatIndex * uint(stride) + uint(offset)) / dimensions.x; 7565 samplerUV.y = float(floor(d)) / dimensions.y; 7566 samplerUV.x = fract(d); 7567 return samplerUV; 7568 } 7569 7570 void main () { 7571 uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize)); 7572 vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba)); 7573 vColor = uintToRGBAVec(sampledCenterColor.r); 7574 7575 vPosition = position.xy * 2.0; 7576 7577 uint meshIndex; 7578 for (int i = 1; i < 257; i++) { 7579 if (splatIndex < meshIndexIntervals[i]) { 7580 meshIndex = uint(i - 1); 7581 break; 7582 } 7583 } 7584 7585 float strideMulmeshIndex = float(4u*meshIndex); 7586 float meshMatrixWorldsTextureLength = float(256*4); 7587 7588 mat4 modelMat = mat4( 7589 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+0.0)/meshMatrixWorldsTextureLength, 0)), 7590 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+1.0)/meshMatrixWorldsTextureLength, 0)), 7591 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+2.0)/meshMatrixWorldsTextureLength, 0)), 7592 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+3.0)/meshMatrixWorldsTextureLength, 0)) 7593 ); 7594 mat4 modelViewMat = viewMatrix * modelMat; 7595 vec4 viewCenter = modelViewMat * vec4(splatCenter, 1.0); 7596 vec4 clipCenter = projectionMatrix * viewCenter; 7597 7598 vec2 sampledCovarianceA = texture(covariancesTexture, getDataUV(3, 0, covariancesTextureSize)).rg; 7599 vec2 sampledCovarianceB = texture(covariancesTexture, getDataUV(3, 1, covariancesTextureSize)).rg; 7600 vec2 sampledCovarianceC = texture(covariancesTexture, getDataUV(3, 2, covariancesTextureSize)).rg; 7601 7602 vec3 cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rg, sampledCovarianceB.r); 7603 vec3 cov3D_M22_M23_M33 = vec3(sampledCovarianceB.g, sampledCovarianceC.rg); 7604 7605 // Compute the 2D covariance matrix from the upper-right portion of the 3D covariance matrix 7606 mat3 Vrk = mat3( 7607 cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z, 7608 cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y, 7609 cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z 7610 ); 7611 float s = 1.0 / (viewCenter.z * viewCenter.z); 7612 7613 mat3 W = transpose(mat3(modelViewMat)); 7614 mat3 T = orthoZoom > 0.0 ? W : W * mat3( 7615 focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s, 7616 0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s, 7617 0., 0., 0. 7618 ); 7619 mat3 cov2Dm = transpose(T) * Vrk * T; 7620 cov2Dm[0][0] += 0.3; 7621 cov2Dm[1][1] += 0.3; 7622 7623 // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because 7624 // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0], 7625 // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't 7626 // need cov2Dm[1][0] because it is a symetric matrix. 7627 vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]); 7628 7629 vec3 ndcCenter = clipCenter.xyz / clipCenter.w; 7630 7631 // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix 7632 // so that we can determine the 2D basis for the splat. This is done using the method described 7633 // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html 7634 // 7635 // This is a different approach than in the original work at INRIA. In that work they compute the 7636 // max extents of the 2D covariance matrix in screen space to form an axis aligned boun
7636ding rectangle 7637 // which forms the geometry that is actually rasterized. They then use the inverse 2D covariance 7638 // matrix (called 'conic') to determine fragment opacity. 7639 float a = cov2Dv.x; 7640 float d = cov2Dv.z; 7641 float b = cov2Dv.y; 7642 float D = a * d - b * b; 7643 float trace = a + d; 7644 float traceOver2 = 0.5 * trace; 7645 float term2 = sqrt(trace * trace / 4.0 - D); 7646 float eigenValue1 = traceOver2 + term2; 7647 float eigenValue2 = max(traceOver2 - term2, 0.00); // prevent negative eigen value 7648 7649 const float maxSplatSize = 1024.0; 7650 vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a)); 7651 // since the eigen vectors are orthogonal, we derive the second one from the first 7652 vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x); 7653 vec2 basisVector1 = eigenVector1 * min(sqrt(2.0 * eigenValue1), maxSplatSize); 7654 vec2 basisVector2 = eigenVector2 * min(sqrt(2.0 * eigenValue2), maxSplatSize); 7655 7656 vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) * basisViewport; 7657 7658 if (orthoZoom > 0.0) { 7659 ndcOffset *= orthoZoom; 7660 } 7661 7662 gl_Position = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0); 7663 }`,i=` 7664 precision highp float; 7665 #include <common> 7666 7667 uniform vec3 debugColor; 7668 7669 varying vec4 vColor; 7670 varying vec2 vUv; 7671 7672 varying vec2 vPosition; 7673 layout(location = 1) out vec4 gVelocity; 7674 7675 void main () { 7676 // compute the negative squared distance from the center of the splat to the 7677 // current fragment in the splat's local space. 7678 float A = -dot(vPosition, vPosition); 7679 if (A < -4.0) discard; 7680 vec3 color = vColor.rgb; 7681 A = exp(A) * vColor.a; 7682 gl_FragColor = vec4(color.rgb, A); 7683 gVelocity = vec4(0.0); // so it is ignored by TAA 7684 }`;return new r8({uniforms:{covariancesTexture:{type:"t",value:null},centersColorsTexture:{type:"t",value:null},meshIndexIntervals:{value:e},meshMatrixWorldsTexture:{type:"t",value:null},focal:{type:"v2",value:new tK},viewport:{type:"v2",value:new tK},basisViewport:{type:"v2",value:new tK},debugColor:{type:"v3",value:new is},covariancesTextureSize:{type:"v2",value:new tK(1024,1024)},centersColorsTextureSize:{type:"v2",value:new tK(1024,1024)},orthoZoom:{type:"f",value:-1}},vertexShader:t,fragmentShader:i,transparent:!0,alphaTest:1,blending:1,depthTest:!0,depthWrite:!1,side:2})}static buildGeomtery(e){let t=new rN;t.setIndex([0,1,2,0,2,3]);let i=new rC(new Float32Array(12),3);t.setAttribute("position",i),i.setXYZ(0,-1,-1,0),i.setXYZ(1,-1,1,0),i.setXYZ(2,1,1,0),i.setXYZ(3,1,-1,0),i.needsUpdate=!0;let r=new lm().copy(t),s=new nI(new Uint32Array(e),1,!1);return s.setUsage(35048),r.setAttribute("splatIndex",s),r.instanceCount=e,r}resetLocalSplatDataAndTexturesFromSplatBuffer(){this.updateLocalSplatDataFromSplatBuffer(),this.allocateAndStoreLocalSplatDataInTextures()}updateLocalSplatDataFromSplatBuffer(){this.splatBuffers.forEach(e=>e.buildPreComputedBuffers()),this.covariances=new Float32Array(6*this.splatCount),this.colors=new Uint8Array(4*this.splatCount),this.centers=new Float32Array(3*this.splatCount);let e=0,t=0,i=0;for(let r of this.splatBuffers){let s=r.nsplats;this.colors.subarray(e,e+4*s).set(r.colorsA),e+=4*s,this.centers.subarray(t,t+3*s).set(r.decoded.xyz.denormDequant().data),t+=3*s,this.covariances.subarray(i,i+6*s).set(new Float32Array(r.precomputedCovarianceBufferData)),i+=6*s}}allocateAndStoreLocalSplatDataInTextures(){let e,t,i=this.splatCount,r=new tK(4096,1024);for(;r.x*r.y*2<6*i;)r.y*=2;let s=new tK(4096,1024);for(;s.x*s.y*4<4*i;)s.y*=2;if(this.halfPrecisionCovariancesOnGPU){t=new Uint16Array(r.x*r.y*2);for(let e=0;e<this.covariances.length;e++)t[e]=l1.toHalfFloat(this.covariances[e]);e=new nC(t,r.x,r.y,1030,1016)}
7684else(t=new Float32Array(r.x*r.y*2)).set(this.covariances),e=new nC(t,r.x,r.y,1030,1015);e.needsUpdate=!0,this.material.uniforms.covariancesTexture.value=e,this.material.uniforms.covariancesTextureSize.value.copy(r);let a=new Uint32Array(s.x*s.y*4);for(let e=0;e<i;e++){var o;let t=4*e,i=3*e,r=4*e;a[r]=(o=this.colors[t],o+(this.colors[t+1]<<8)+(this.colors[t+2]<<16)+(this.colors[t+3]<<24)),a[r+1]=Du(this.centers[i]),a[r+2]=Du(this.centers[i+1]),a[r+3]=Du(this.centers[i+2])}let l=new nC(a,s.x,s.y,1033,1014);l.internalFormat="RGBA32UI",l.needsUpdate=!0,this.material.uniforms.centersColorsTexture.value=l,this.material.uniforms.centersColorsTextureSize.value.copy(s);let h=new Float32Array(4096);for(let e=0;e<this.meshMatrixWorlds.length;e++)h.set(this.meshMatrixWorlds[e].elements,16*e);let c=new nC(h,1024,1,1023,1015);c.needsUpdate=!0,this.material.uniforms.meshMatrixWorldsTexture.value=c,this.material.uniformsNeedUpdate=!0,this.splatDataTextures={covariances:{data:t,texture:e,size:r},centerColors:{data:a,texture:l,size:s},meshMatrixWorlds:{data:h,texture:c}}}updateIndexes(e){let t=this.geometry;t.attributes.splatIndex.set(e),t.attributes.splatIndex.needsUpdate=!0,t.instanceCount=e.length}updateUniforms(e,t,i,r){this.splatCount>0&&(Dp.set(e.x*this.devicePixelRatio,e.y*this.devicePixelRatio),this.material.uniforms.viewport.value.copy(Dp),this.material.uniforms.basisViewport.value.set(2/Dp.x,2/Dp.y),this.material.uniforms.focal.value.set(t,i),this.material.uniforms.orthoZoom.value=r,this.material.uniformsNeedUpdate=!0)}getSplatDataTextures(){return this.splatDataTextures}getSplatCount(){return this.splatCount}getCenters(){return this.centers}getColors(){return this.colors}getCovariances(){return this.covariances}dispose(){this.geometry.dispose(),this.material.dispose(),this.splatDataTextures&&(this.splatDataTextures.covariances.texture.dispose(),this.splatDataTextures.centerColors.texture.dispose(),this.splatDataTextures.meshMatrixWorlds.texture.dispose()),this.removeFromParent()}},Dw=new Promise(e=>{Dx=e}),DS=!1;Dw.then(e=>DY=e);var D_=class{constructor(e={}){let t,i,r,s,a,o;tS(this,"updateView",(t=new iQ,i=[],r=new ix(0,0,-1),s=new ix(0,0,-1),a=new ix,o=new ix,function(e=!1,l){let h=this.updateMatrixWorldsInWorkerIfNeeded(),c=this.cropsChanged();if(!e){s.set(0,0,-1).applyQuaternion(l.quaternion);let e=!1,t=!1;if(.95>=s.dot(r)&&(e=!0),o.copy(l.position).sub(a).length()>=1&&(t=!0),!e&&!t&&!h&&!c&&!this.needsInitialRender)return}this.needsInitialRender=!1,a.copy(l.position),r.copy(s),t.copy(l.matrixWorld).invert(),t.premultiply(this.dummyPerspectiveMatrix),i[0]=l.position.x,i[1]=l.position.y,i[2]=l.position.z;let d={sort:{view:t.elements,cameraPosition:i,splatRenderCount:this.splatRenderCount,splatSortCount:this.splatRenderCount},...h?{newMatrixWorlds:this.meshMatrixWorlds}:{},...c?{newCropsArray:this.cropsArray}:{}};this.sortRunning?this.queuedMessage=d:(this.queuedMessage=null,this.sortRunning=!0,this.sortWorker.postMessage(d))})),this.scene=e.scene,this.currentPage=null,this.devicePixelRatio=window.devicePixelRatio,this.sortWorker=null,this.splatRenderCount=0,this.splatSortCount=0,this.splatMesh=null,this.sortRunning=!1,this.meshMatrixWorlds=null,this.meshMatrixWorldsOld=null,this.cropsArray=null,this.splatEntries=null,this.queuedMessage=null,this.needsInitialRender=!0,this.dummyPerspectiveMatrix=new iQ().makePerspective(-1,1,-1,1,.1,1e3)}updateSplatMeshUniforms(e,t){let i=new tK;null!==this.splatMesh&&this.splatMesh.getSplatCount()>0&&(e.getSize(i),this.cameraFocalLengthX=t.projectionMatrix.elements[0]*this.devicePixelRatio*i.x*.45,this.cameraFocalLengthY=t.projectionMatrix.elements[5]*this.devicePixelRatio*i.y*.45,this.splatMesh.updateUniforms(i,this.cameraFocalLengthX,this.cameraFocalLengthY,t.isPerspectiveCamera?-1:t.zoom*this.devicePixelRatio))}loadSplat(e={}){this.activePage=this.scene.activePage,e.position&&(e.position=new ix().fromArray(e.position)),e.orientation&&(e.orientation=new iy().fromArray(e.orientation)),e.halfPrecisionCovariances=!!e.halfPrecisionCovariances;let t=[];if(this.splatEntries=t,this.activePage.traverseVisibleEntity(e=>{"Splat"===e.data.type&&t.push(e)}),this.splatMesh&&this.splatMesh.dispose(),0===t.length)return this.splatMesh=null,!1;this.meshMatrixWorlds=t.map(e=>e.matrixWorld),this.meshMatrixWorldsOld=t.map(e=>e.matrixWorld.clone()),this.cropsArray=t.map(e=>e.data.crops.map(e=>e.data));let i=t.map(e=>new DY.GSplineBuffer(new Uint8Array(e.data.buffer).buffer)),r=0,s=[0];for(let e of i)r+=e.getSplatCount(),s.push(r);return this.setupSplatMesh(i,r,e.position,e.orientation,e.halfPrecisionCovariances,this.devicePixelRatio,s,this.meshMatrixWorlds),this.setupSortWorker(r),!0}updateMatrixWorldsInWorkerIfNeeded(){let e=this.splatDataTextures.meshMatrixWorlds.data;for(let t=0;t<this.meshMatrixWorlds.length;t++)e.set(this.meshMatrixWorlds[t].elements,16*t);return this.splatDataTextures.meshMatrixWorlds.texture.needsUpdate=!0,!this.meshMatrixWorlds.every((e,t)=>e.equals(this.meshMatrixWorldsOld[t]))&&(this.meshMatrixWorldsOld=this.meshMatrixWorlds.map(e=>e.clone()),!0)}cropsChanged(){let e=!1;
7684return this.splatEntries.forEach((t,i)=>{t.data.crops.forEach((t,r)=>{void 0===this.cropsArray[i][r]?(e=!0,this.cropsArray[i][r]=t.data):Object.entries(t.data).forEach(([t,s])=>{Array.isArray(s)&&s.some((e,s)=>e!==this.cropsArray[i][r][t][s])?(e=!0,this.cropsArray[i][r][t]=s):s!==this.cropsArray[i][r]?.[t]&&(e=!0,this.cropsArray[i][r][t]=s)})}),t.data.crops.length!==this.cropsArray[i]?.length&&(this.cropsArray[i].length=t.data.crops.length,e=!0)}),e}setupSplatMesh(e,t,i=new ix,r=new iy,s=!1,a=1,o,l){this.splatMesh=Db.buildMesh(e,t,s,a,o,l),this.splatMesh.position.copy(i),this.splatMesh.quaternion.copy(r),this.splatMesh.frustumCulled=!1,this.splatMesh.renderOrder=99999,this.splatRenderCount=t,this.splatMesh.onBeforeRender=(e,t,i)=>this.update(e,i)}setupSortWorker(e){this.sortWorker=function(e){let t=new Worker(URL.createObjectURL(new Blob(["(",Dd.toString(),")(self)"],{type:"application/javascript"}))),i=atob("AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AAAGAIf39/f39/f38AYAABfwISAQNlbnYGbWVtb3J5AgMAgIAEAwQDAAECBzkDEV9fd2FzbV9jYWxsX2N0b3JzAAALc29ydEluZGV4ZXMAARNlbXNjcmlwdGVuX3Rsc19pbml0AAIK3gMDAwABC9IDAwF/BnwBfgJAIAdFDQAgAysDUCEMIAMrAzAhDSADKwMQIQ5BACEDRP///////+9/IQtEAAAAAAAAEAAhCgNAIAIgA0ECdGoCfyAOIAEgA0EMbGoiCCoCALuiIA0gCCoCBLuioCAMIAgqAgi7oqBEAAAAAAAAsECiIgmZRAAAAAAAAOBBYwRAIAmqDAELQYCAgIB4CzYCACAJIAsgCSALYxshCyAJIAogCSAKZBshCiADQQFqIgMgB0cNAAsgB0UNACAGuCAKIAuhoyEJQQAhAwNAAn8gCSACIANBAnRqIgEoAgC3IAuhoiIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAshCCABIAg2AgAgBCAIQQJ0aiIBIAEoAgBBAWo2AgAgA0EBaiIDIAdHDQALCyAGQQJPBEAgBCgCACEIQQEhAwNAIAQgA0ECdGoiASABKAIAIAhqIgg2AgAgA0EBaiIDIAZHDQALCyAHQQFrIgGtIQ8DQCAEIAIgD6dBAnQiA2ooAgBBAnRqIgcgBygCAEEBayIHNgIAIAUgASAHa0ECdGogACADaigCADYCACAPUCEDIA9CAX0hDyADRQ0ACyAGBEAgBEEAIAZBAnT8CwALCwQAQQAL"),r=new Uint8Array(i.length);for(let e=0;e<i.length;e++)r[e]=i.charCodeAt(e);return t.postMessage({init:{sorterWasmBytes:r.buffer,splatCount:e,Constants:{BytesPerFloat:Dc.BytesPerFloat,BytesPerInt:Dc.BytesPerInt,DepthMapRange:Dc.DepthMapRange,MemoryPageSize:Dc.MemoryPageSize}}}),t}(e),this.sortWorker.onmessage=e=>{e.data.sortDone?(this.sortRunning=!1,this.splatMesh?.updateIndexes(new Uint32Array(e.data.indexesBuffer)),this.lastSortTime=e.data.sortTime,this.queuedMessage&&(this.sortWorker.postMessage(this.queuedMessage),this.queuedMessage=null)):e.data.sortCanceled?this.sortRunning=!1:e.data.sortSetupPhase1Complete?this.sortWorker.postMessage({positions:this.splatMesh.getCenters().buffer,meshMatrixWorlds:this.splatMesh.meshMatrixWorlds,meshIndexIntervals:this.splatMesh.meshIndexIntervals,cropsArray:this.cropsArray}):e.data.sortSetupComplete&&(this.splatDataTextures=this.splatMesh.getSplatDataTextures(),this.scene.activePage.add(this.splatMesh),this.needsInitialRender=!0)}}update(e,t){null!==this.splatMesh&&(this.updateSplatMeshUniforms(e,t),this.updateView(!1,t))}getSplatMesh(){return this.splatMesh}},DA=new rA;DA.wireframe=!0;var DM=new ix,DE=class extends nS{constructor(e,t){super(),this.data=e,this.sharedAssets=t,this.enableHelpers=!1,this.wireframeState=!1,this.needsTransmissionDirty=!0,this.needsNormalDirty=!0,this._needsTransmission=!1,this._needsNormal=!1,this.geometryCacheChanged=!1,this.splatViewer=null,this.entityByUuid={},this.entityIdentityToEntity={},this.toExpandCloner=new Set,this.toUpdateCloner=new Set,this.pendingCommands=[],this.pathConstraints=new Dh,this.invisibleObjects=new EL("jflkdsafjasdifjaslk",{...v5.defaultData,visible:!1,name:"buildin invisible"}),this.needsRecomputeInstances=!1,this.init(e,t),this.matrixAutoUpdate=!1,this.errorPage=new PO("fdasfa",{...ys.defaultData,name:""},{shared:t,scene:this})}markGeometryCacheDirty(){this.geometryCacheChanged=!0}markNeedsUpdateRendererDirty(){this.needsTransmissionDirty=!0,this.needsNormalDirty=!0}needsTransmission(){let e;return this.needsTransmissionDirty&&(this._needsTransmission=(e=!1,this.traverseEntity(t=>{if(t instanceof Mg){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)Ds(t,t.material[i])&&(e=!0);else Ds(t,t.material)&&(e=!0)}}),e),this.needsTransmissionDirty=!1),this._needsTransmission}needsNormal(){let e;return this.needsNormalDirty&&(this._needsNormal=(e=!1,this.traverseEntity(t=>{if(t instanceof Mg){if(Array.isArray(t.material))for(let i=0;i<t.material.length;
7684i++)Dr(t,t.material[i])&&(e=!0);else Dr(t,t.material)&&(e=!0)}}),e),this.needsNormalDirty=!1),this._needsNormal}registerInstanceAndSetUuid(e){let t=e.identity.join("-"),i=this.entityIdentityToEntity[t];i&&(e.uuid=i.uuid),this.entityIdentityToEntity[t]=e,this.entityByUuid[e.uuid]=e}markPenumbraSizeDirty(){for(let e of this.children)e instanceof PO&&(e.penumbraSizeArrayCache=null)}findInstance(e){return this.entityIdentityToEntity[e.join("-")]}get bgColor(){return this.activePage.bgColor}get postprocessing(){return this.activePage.data.postprocessing}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u0(e.sortKey,t.sortKey)),t.map(e=>e.entity)}nonExistOrDescendantOf(e,t){let i=this.find(e);if(void 0===i)return!0;for(;i;){if(i.uuid===t)return!0;i=i.parent}return!1}find(e){if(this.activePage&&this.activePage.personalCamera.parent&&("f23858d0-4a3b-4bd8-8173-66ed0af7f6fb-personalCamera"===e||e===mc))return this.activePage.personalCamera;if(""===e||void 0===e)return;let t=this.entityByUuid[e];return void 0===t?this.getObjectByProperty("uuid",e):t}find2D(e){for(let t of this.children)if(t instanceof PO&&t.uiScene){let i=t.uiScene.find(e);if(i)return i}}findScene2DfromObject2D(e){for(let t of this.children)if(t instanceof PO&&t.uiScene&&t.uiScene.find(e))return t.uiScene}find2DInUIObjects(e){let t;return this.traverseEntity(i=>{void 0===t&&i instanceof PV&&(t=i.uiCanvas.find(e))}),t}traverse2D(e){for(let t of this.children)t instanceof PO&&t.uiScene&&t.uiScene.traverse(e)}debugEnsureEntity(e){let t=this.find(e);t?Array.isArray(t.identity)&&void 0===this.findInstance(t.identity)&&console.error("not found instance"):console.error("not found")}addPendingExpandCloner(e){this.toExpandCloner.add(e)}addPendingUpdateCloner(e){this.toUpdateCloner.add(e)}markToExpandCloner(e){this.toExpandCloner.add(e),e.traverseEntityAncestors(e=>{this.toExpandCloner.add(e)})}doPendingExpandCloner(){this.toExpandCloner.forEach(e=>{e.expandCloner(this)}),this.toExpandCloner.clear()}doPendingUpdateCloner(){this.toUpdateCloner.forEach(e=>{e.cloner?.update()}),this.toUpdateCloner.clear()}doPendingUpdates(){this.doPendingExpandCloner(),this.doPendingUpdateCloner(),this.applyPendingCommands()}addPendingCommand(e){this.pendingCommands.push(e)}applyPendingCommands(){this.pendingCommands.forEach(e=>e()),this.pendingCommands.length=0}updateByLibOp(e,t){1===e.path.length&&"components"===e.path[0]&&1===e.type&&this.createChildrenObjects([{...e.data.asset,id:e.id}],this.invisibleObjects,t)}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this:this.find(e.parent);if(void 0===i)throw Error("unexpected");let r=this.createObject(e.id,e.data,e.children,i,e.localIndex,t);r.updateVisible(this),r.resetBBoxNeedsUpdate(),EA(r)&&EM(r.parent)&&(r.invali
vendor: 9,552 bytes, line 7684
7684dateUpstreamBooleanData(),r.parent.invalidateDownstreamBooleanData().recomputeBoolean()),this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(r),this.markToExpandCloner(r),this.markPenumbraSizeDirty(),r.updatePathSnapping()}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");this.markToExpandCloner(t),t.resetBBoxNeedsUpdate(),this.unregisterObject(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(t),this.markPenumbraSizeDirty(),t.parent.remove(t),EM(t.parent)&&(t.parent.invalidateUpstreamBooleanData(),t.parent.invalidateDownstreamBooleanData().recomputeBoolean()),EA(t)&&(t.freeBooleanPointer(),i instanceof ES&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t instanceof PB&&t.detachShape(),this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(t),this.pathConstraints.removeDependencies(t.uuid),t.updatePathSnapping()}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");this.markNeedsRecomputeInstancesForChildren(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),t.cloner?.resetOnMove(),this.markToExpandCloner(t);let r=null===e.parent?this:this.find(e.parent);if(void 0===r)throw Error("unexpected");r.add(t),this.markNeedsRecomputeInstancesForAncessors(r),this.markToExpandCloner(t),t.invalidateClonerTransform(t),t.updateVisible(this),t.resetBBoxNeedsUpdate(),this.markPenumbraSizeDirty();let s=e.localIndex;r.children.splice(s,0,r.children.pop()),EA(t)&&(t.invalidateUpstreamBooleanData(),EM(t.parent)?t.parent.invalidateDownstreamBooleanData().recomputeBoolean():i instanceof ES&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t.updatePathSnapping()}this.markNeedsUpdateRendererDirty(),this.markGeometryCacheDirty()}get playPage(){return this.find(this.data.publish.playPage)??this.errorPage}updatePage(e){for(let t of(this.activePage&&this.activePage.onDeactive(),this.activePage=this.errorPage,this.children))t instanceof PO&&(t.visible=t.uuid===e,t.visible&&(this.activePage=t,this.activePage.onActive(this)));this.activePage!==this.splatViewer?.activePage&&this.reloadSplats()}updateEntityByOp(e,t,i,r){if(0===t.type){if(("overrides"in t.props||"component"in t.props)&&this.markNeedsRecomputeInstances(),"visible"in t.props&&this.markPenumbraSizeDirty(),t.path.includes("overrides")&&"states"in t.props){let{rest:e}=t.props;t={...t,props:e},this.markNeedsRecomputeInstances()}"pathSnapping"===t.path[0]&&void 0!==t.props.pathId&&this.pathConstraints.setConstraint(e,t.props.pathId)}let s=this.find(e);if(s)try{(function(e,t,i,r){e.updateByOp(t,i,r,!1)})(s,t,i,{scene:this,shared:r}),s instanceof MS&&s.updateGeometryGroupsIfNeeded()}catch(e){console.error(e)}}updateEntity2DByOp(e,t,i,r,s,a=[]){e.updateEntityByOp(t,i,r,s),this.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&(a.includes(e.frameId??"")||e.frameId===t)&&e.updateEntity2DByOp(t,i,r,s)})}get activeCamera(){return this.activePage.activeCamera}switchActiveCamera(e){this.activePage.switchActiveCamera(e)}isInvisibleObjects(e){return e===this.invisibleObjects||e.hasAnccestor(this.invisibleObjects)}init(e,t){let i=Object.entries(t.data.lib.components).map((e,t)=>({data:e[1].asset.data,children:e[1].asset.children,id:e[0],fi:t}));this.invisibleObjects.updateState(this.invisibleObjects.data,{scene:this,shared:t}),this.add(this.invisibleObjects),this.createChildrenObjects(i,this.invisibleObjects,t),this.createChildrenObjects(e.objects,this,t),this.updatePage(e.publish.playPage),this.activePage.switchToPlayCamera(),this.expandInstances(t,!0),this.traverseEntity(e=>{e instanceof Ey&&e.updateUp()}),this.doPendingExpandCloner(),this.applyPendingCommands()}markNeedsRecomputeInstances(){this.needsRecomputeInstances=!0}markNeedsRecomputeInstancesForChildren(e){e.traverseEntity(e=>{("Component"===e.data.type||"Instance"===e.data.type)&&this.markNeedsRecomputeInstances()})}markNeedsRecomputeInstancesForAncessors(e){wZ.is(e)&&("Component"===e.data.type&&this.markNeedsRecomputeInstances(),e.traverseAncestors(e=>{wZ.is(e)&&"Component"===e.data.type&&this.markNeedsRecomputeInstances()}))}relativeizeInner(e,t,i,r,s,a,o){if(e){let l=r.find(e);l&&l!==r&&s.forInstancesRec(r=>{r.data=pq(r.data,s=>{let l=s.events.data(o.id),h=r.goUp(a);if(h){let r=[...u$(h.identity),e].join("-"),s=this.entityIdentityToEntity[r];if(s){let e=s.uuid;p2.zoom(l,t)[i]=e}else console.warn("cannot find instance")}}).data})}}rewriteActions(e,t,i,r,s,a){e.forEach(e=>{"Transition"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Animation"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Conditional"===e.data.type&&(this.rewriteActions(e.data.ifActions,[...t,e.id,"ifActions"],i,r,s,a),this.rewriteActions(e.data.elseActions,[...t,e.id,"elseActions"],i,r,s,a))})}rewriteEventsBeforeGoToPlayMode(){this.traverseEntity(e=>{if(e instanceof PF&&"string"==typeof e.identity&&"Component"===e.data.type)return e.traverseEntity((t,i)=>{t.data.events.forEach(r=>{if("GameControl"===r.data.type){let s=!1;if(t.forInstancesRec(e=>{e.data=pq(e.data,t=>{e.isInstanceRoot||(t.events.delete(r.id),s=!0)}).data}),!1===s)for(let s of y_.list)this.rewriteActions(r.data.gameActions[s],["gameActions",s],e,t,i,r)}else"Conditional"===r.data.type?("Distance"===r.data.condition.type?(this.relativeizeInner(r.data.condition.fromObject,["condition"],"fromObject",e,t,i,r),this.relativeizeInner(r.data.condition.toObject,["condition"],"toObject",e,t,i,r)):"State"===r.data.condition.type?this.relativeizeInner(r.data.condition.object,["condition"],"object",e,t,i,r):"Comparison"===r.data.condition.type&&("Property"===r.data.condition.lOperand.type&&this.relativeizeInner(r.data.condition.lOperand.value[0],["condition","lOperand","value"],0,e,t,i,r),"Property"===r.data.condition.rOperand.type&&this.relativeizeInner(r.data.condition.rOperand.value[0],["condition","rOperand","value"],0,e,t,i,r)),this.rewriteActions(r.data.inActions,["inActions"],e,t,i,r),this.rewriteActions(r.data.outActions,["outActions"],e,t,i,r)):"actions"in r.data&&this.rewriteActions(r.data.actions,["actions"],e,t,i,r)})}),!0})}expandInstances(e,t,i){let r=new Set;for(let s of(this.traverseEntity(s=>{if(s instanceof PF&&s.isInstanceRoot)return s.expandInstanceChildren({scene:this,shared:e,pendingDeletes:r}),t||s.resetBBoxNeedsUpdate(),i&&s.traverseEntity(e=>{i.addClip(e)}),!0}),r))this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(s),PN(s)}recomputeInstances(e,t){this.needsRecomputeInstances&&(this.needsRecomputeInstances=!1,this.traverseEntity(e=>{e instanceof PF&&e.isInstanceRoot&&(e.component=void 0)}),this.expandInstances(e,!1,t))}disposeAndUnregisterEntityRecursivelyIfNotReregistered(e){e.traverseEntity(e=>{let t="string"==typeof e.identity?e.identity:e.identity.join("-");this.entityIdentityToEntity[t]===e&&(delete this.entityByUuid[e.uuid],delete this.entityIdentityToEntity[t]),e.dispose()})}clearScene(){for(let e of this.children)wZ.is(e)&&e.disposeRecursively();this.children.length=0}resetAfterClear(e,t){this.init(e,t)}raycast(e){return this.raycast1(e,!1)}raycast1(e,t){let i=[],r=s=>{for(let a of s.children){let s=a.cloner;if(wZ.is(a)&&!a.raycastLock&&(a.visible||s?.object.data.visible)){if(!0===t&&a.isInstanceRoot){let t=[];if(e.intersectObject(a,!0,t),t.length){let e=t[0];e.object=a,e.point.applyMatrix4(e.object.matrixWorld);let r=a.matrixWorld.clone().invert();e.point.applyMatrix4(r),i.push(e)}}else(EA(a)||ET(a)&&this.enableHelpers&&a.objectHelper.visible)&&(e.intersectObject(a,!1,i),Dl(a,e,i)),r(a)}}};return r(this.activePage),i}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wZ.is(s)&&(s.visible||r?.object.data.visible)&&((EA(s)||ET(s)&&this.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),Dl(s,e,t,!0)),i(s))}};return i(this),t}forEachEntity(e){for(let t of this.children)wZ.is(t)&&e(t)}traverseConcreteEntity(e){for(let t of this.children)wZ.is(t)&&t.isConcreteEntity&&t.traverseEntity(e)}traverseEntity(e){for(let t of this.children)wZ.is(t)&&t.traverseEntity(e)}updateFont(e,t){this.traverseEntity(i=>{if(i instanceof MS&&"Mesh"===i.data.type&&("TextGeometry"===i.data.geometry.type||"InputGeometry"===i.data.geometry.type)&&i.data.geometry.font===e){let r=i.geometry,s=i.data.geometry;r.updateFont(e,t).then(()=>{r.update(s);let e=i.invalidateDownstreamBooleanData();EM(e)&&e.recomputeBoolean()})}})}traverseObject(e){for(let t of this.children)xu.is(t)&&t.traverseObject(e)}traverseVisibleEntity(e){for(let t of this.children)wZ.is(t)&&t.visible&&t.traverseVisibleEntity(e)}dispose(){this.clearScene()}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}registerObjectCreatedInLegacy(e){this.entityByUuid[e.uuid]=e}unregisterObject(e){for(let t of(delete this.entityByUuid[e.uuid],e.children))this.unregisterObject(t)}createObject(e,t,i,r,s,a){let o={scene:this,shared:a},l=Di(e,t,o);return l&&(this.entityByUuid[e]=l,r.add(l),r.children.splice(s,0,r.children.pop()),i.length>0&&(l.isInstanceRoot?console.error("instance should not have children!"):this.createChildrenObjects(i,l,a)),l.updateState(t,o),l instanceof MS&&l.updateGeometryGroupsIfNeeded(),l.updateVisible(this),l.cloner&&this.toExpandCloner.add(l),t.pathSnapping?.pathId&&this.pathConstraints.setConstraint(e,t.pathSnapping.pathId)),"Empty"===t.type&&t.animations&&l.traverseEntity(e=>{let t=e.dataPatched;
7684if(e instanceof MS&&t.bones&&t.boneInverses){let i=new nD(t.bones.map(e=>this.find(e)),t.boneInverses.map(e=>new iQ().fromArray(e)));e.bind(i,e.bindMatrix)}else e.matrixAutoUpdate=!0}),l}getCenter(e){let t=[];for(let i=0,r=e.length;i<r;++i){let{id:r,recursive:s}=e[i],a=this.find(r),o=s?a.recursiveBBox:a.singleBBox;t.push(...o.vertices)}let i=new iS;return i.setFromPoints(t),i.getCenter(DM),DM}copyMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e);i?t.copy(i.matrixWorld):t.identity()}copyParentMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e)?.parent;i?t.copy(i.matrixWorld):t.identity()}traverseMaterial(e){this.traverseEntity(t=>{if(t instanceof SD){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)t.material[i]instanceof AP&&e(t.material[i]);else t.material instanceof AP&&e(t.material)}})}updateViewPlaneSize(e,t,i=!1){this.traverseConcreteEntity(r=>{r instanceof Ey&&r.setViewplaneSize(e,t,i)})}initializeSplatViewer(){this.splatViewer=new D_({scene:this}),this.reloadSplats()}reloadSplats(){this.splatViewer?.loadSplat()}},DC=(e,t)=>{let i=t.x-e.x,r=t.y-e.y;return Math.sqrt(i*i+r*r)},DT=(e,t)=>{let i=t.x-e.x;return DI(Math.atan2(t.y-e.y,i))},DP=(e,t,i)=>{let r={x:0,y:0};return i=DD(i),r.x=e.x-t*Math.cos(i),r.y=e.y-t*Math.sin(i),r},DD=e=>Math.PI/180*e,DI=e=>180/Math.PI*e,DO=e=>isNaN(e.buttons)?0!==e.pressure:0!==e.buttons,DR=new Map,DL=e=>{DR.has(e)&&clearTimeout(DR.get(e)),DR.set(e,setTimeout(e,100))},DB=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.addEventListener?e.addEventListener(s,i,!1):e.attachEvent&&e.attachEvent(s,i)},Dz=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.removeEventListener?e.removeEventListener(s,i):e.detachEvent&&e.detachEvent(s,i)},DF=e=>(e.preventDefault(),e.type.match(/^touch/)?e.changedTouches:e),DN=()=>{if(!(typeof window>"u"))return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},DU=(e,t)=>{t.top||t.right||t.bottom||t.left?(e.style.top=t.top,e.style.right=t.right,e.style.bottom=t.bottom,e.style.left=t.left):(e.style.left=t.x+"px",e.style.top=t.y+"px")},Dk=(e,t,i)=>{let r=Dj(e);for(let e in r)if(r.hasOwnProperty(e)){if("string"==typeof t)r[e]=t+" "+i;else{let s="";for(let e=0,r=t.length;e<r;e+=1)s+=t[e]+" "+i+", ";r[e]=s.slice(0,-2)}}return r},DV=(e,t)=>{let i=Dj(e);for(let e in i)i.hasOwnProperty(e)&&(i[e]=t);return i},Dj=e=>{let t={};return t[e]="",["webkit","Moz","o"].forEach(function(i){t[i+e.charAt(0).toUpperCase()+e.slice(1)]=""}),t},DG=(e,t)=>{for(let i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},DH=(e,t)=>{let i={};for(let r in e)e.hasOwnProperty(r)&&t.hasOwnProperty(r)?i[r]=t[r]:e.hasOwnProperty(r)&&(i[r]=e[r]);return i},DW=(e,t)=>{if(e.length)for(let i=0,r=e.length;i<r;i+=1)t(e[i]);else t(e)},Dq=(e,t,i)=>({x:Math.min(Math.max(e.x,t.x-i),t.x+i),y:Math.min(Math.max(e.y,t.y-i),t.y+i)});"u">typeof window&&(DQ="ontouchstart"in window,DZ=!!window.PointerEvent,DK=!!window.MSPointerEvent);var DX,DY,DQ,DZ,DK,DJ,D$={touch:{start:"touchstart",move:"touchmove",end:"touchend, touchcancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup, pointercancel"},MSPointer:{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}},D0={};function D1(){}function D2(e,t){return this.identifier=t.identifier,this.position=t.position,this.frontPosition=t.frontPosition,this.collection=e,this.defaults={size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,mode:"dynamic",zone:document.body,lockX:!1,lockY:!1,shape:"circle"},this.config(t),"dynamic"===this.options.mode&&(this.options.restOpacity=0),this.id=D2.id,D2.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}function D3(e,t){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=e,this.id=D3.id,D3.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(t),("static"===this.options.mode||"semi"===this.options.mode)&&(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);let i=getComputedStyle(this.options.zone.parentElement);return i&&"flex"===i.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}function D4(e){var t=this;t.ids={},t.index=0,t.collections=[],t.scroll=DN(),t.config(e),t.prepareCollections();var i=function(){var e;
7684t.collections.forEach(function(i){i.forEach(function(i){e=i.el.getBoundingClientRect(),i.position={x:t.scroll.x+e.left,y:t.scroll.y+e.top}})})};if(typeof window>"u")return t.collections;DB(window,"resize",function(){DL(i)});var r=function(){t.scroll=DN()};return DB(window,"scroll",function(){DL(r)}),t.collections}DZ?DJ=D$.pointer:DK?DJ=D$.MSPointer:DQ?(DJ=D$.touch,D0=D$.mouse):DJ=D$.mouse,D1.prototype.on=function(e,t){var i,r=e.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var s=0;s<r.length;s+=1)i=r[s],this._handlers_[i]=this._handlers_[i]||[],this._handlers_[i].push(t);return this},D1.prototype.off=function(e,t){return this._handlers_=this._handlers_||{},void 0===e?this._handlers_={}:void 0===t?this._handlers_[e]=null:this._handlers_[e]&&this._handlers_[e].indexOf(t)>=0&&this._handlers_[e].splice(this._handlers_[e].indexOf(t),1),this},D1.prototype.trigger=function(e,t){var i,r=this,s=e.split(/[ ,]+/g);r._handlers_=r._handlers_||{};for(var a=0;a<s.length;a+=1)i=s[a],r._handlers_[i]&&r._handlers_[i].length&&r._handlers_[i].forEach(function(e){e.call(r,{type:i,target:r},t)})},D1.prototype.config=function(e){this.options=this.defaults||{},e&&(this.options=DH(this.options,e))},D1.prototype.bindEvt=function(e,t){var i=this;return i._domHandlers_=i._domHandlers_||{}
7684,i._domHandlers_[t]=function(){"function"==typeof i["on"+t]?i["on"+t].apply(i,arguments):console.warn('[WARNING] : Missing "on'+t+'" handler.')},DB(e,DJ[t],i._domHandlers_[t]),D0[t]&&DB(e,D0[t],i._domHandlers_[t]),i},D1.prototype.unbindEvt=function(e,t){return this._domHandlers_=this._domHandlers_||{},Dz(e,DJ[t],this._domHandlers_[t]),D0[t]&&Dz(e,D0[t],this._domHandlers_[t]),delete this._domHandlers_[t],this},D2.prototype=new D1,D2.constructor=D2,D2.id=0,D2.prototype.buildEl=function(e){return this.ui={},this.options.dataOnly||(this.ui.el=document.createElement("div"),this.ui.back=document.createElement("div"),this.ui.front=document.createElement("div"),this.ui.el.className="nipple collection_"+this.collection.id,this.ui.back.className="back",this.ui.front.className="front",this.ui.el.setAttribute("id","nipple_"+this.collection.id+"_"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front)),this},D2.prototype.stylize=function(){if(this.options.dataOnly)return this;var e=this.options.fadeTime+"ms",t=DV("borderRadius","50%"),i=Dk("transition","opacity",e),r={};return r.el={position:"absolute",opacity:this.options.restOpacity,display:"block",zIndex:999},r.back={position:"absolute",display:"block",width:this.options.size+"px",height:this.options.size+"px",marginLeft:-this.options.size/2+"px",marginTop:-this.options.size/2+"px",background:"rgba(255, 255, 255, .4)",border:"solid 2px rgba(0, 0, 0, .1)"},r.front={width:this.options.size/2+"px",height:this.options.size/2+"px",position:"absolute",display:"block",marginLeft:-this.options.size/4+"px",marginTop:-this.options.size/4+"px",background:"rgba(255, 255, 255, .8)",border:"solid 2px rgba(0, 0, 0, .1)"},DG(r.el,i),"circle"===this.options.shape&&DG(r.back,t),DG(r.front,t),this.applyStyles(r),this},D2.prototype.applyStyles=function(e){for(var t in this.ui)if(this.ui.hasOwnProperty(t))for(var i in e[t])this.ui[t].style[i]=e[t][i];return this},D2.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)||this.options.zone.appendChild(this.ui.el),this},D2.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)||this.options.zone.removeChild(this.ui.el),this},D2.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger("destroyed",this.instance),this.removeFromDom(),this.off()},D2.prototype.show=function(e){var t=this;return t.options.dataOnly||(clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.addToDom(),t.restCallback(),setTimeout(function(){t.ui.el.style.opacity=1},0),t.showTimeout=setTimeout(function(){t.trigger("shown",t.instance),"function"==typeof e&&e.call(this)},t.options.fadeTime)),t},D2.prototype.hide=function(e){var t=this;if(t.options.dataOnly)return t;if(t.ui.el.style.opacity=t.options.restOpacity,clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.removeTimeout=setTimeout(function(){var i="dynamic"===t.options.mode?"none":"block";t.ui.el.style.display=i,"function"==typeof e&&e.call(t),t.trigger("hidden",t.instance)},t.options.fadeTime),t.options.restJoystick){let i=t.options.restJoystick,r={};r.x=!0===i||!1!==i.x?0:t.instance.frontPosition.x,r.y=!0===i||!1!==i.y?0:t.instance.frontPosition.y,t.setPosition(e,r)}return t},D2.prototype.setPosition=function(e,t){var i=this;i.frontPosition={x:t.x,y:t.y};var r=i.options.fadeTime+"ms",s={};s.front=Dk("transition",["top","left"],r);var a={front:{}};a.front={left:i.frontPosition.x+"px",top:i.frontPosition.y+"px"},i.applyStyles(s),i.applyStyles(a),i.restTimeout=setTimeout(function(){"function"==typeof e&&e.call(i),i.restCallback()},i.options.fadeTime)},D2.prototype.restCallback=function(){var e={};e.front=Dk("transition","none",""),this.applyStyles(e),this.trigger("rested",this.instance)},D2.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},D2.prototype.computeDirection=function(e){var t,i,r,s=e.angle.radian,a=Math.PI/4,o=Math.PI/2;if(s>a&&s<3*a&&!e.lockX?t="up":s>-a&&s<=a&&!e.lockY?t="left":s>-(3*a)&&s<=-a&&!e.lockX?t="down":e.lockY||(t="right"),e.lockY||(i=s>-o&&s<o?"left":"right"),e.lockX||(r=s>0?"up":"down"),e.force>this.options.threshold){var l,h={};for(l in this.direction)this.direction.hasOwnProperty(l)&&(h[l]=this.direction[l]);var c={};for(l in this.direction={x:i,y:r,angle:t},e.direction=this.direction,h)h[l]===this.direction[l]&&(c[l]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+i,e),
7684c.y||this.trigger("plain:"+r,e),c.angle||this.trigger("dir dir:"+t,e)}else this.resetDirection();return e},D3.prototype=new D1,D3.constructor=D3,D3.id=0,D3.prototype.prepareNipples=function(){var e=this.nipples;e.on=this.on.bind(this),e.off=this.off.bind(this),e.options=this.options,e.destroy=this.destroy.bind(this),e.ids=this.ids,e.id=this.id,e.processOnMove=this.processOnMove.bind(this),e.processOnEnd=this.processOnEnd.bind(this),e.get=function(t){if(void 0===t)return e[0];for(var i=0,r=e.length;i<r;i+=1)if(e[i].identifier===t)return e[i];return!1}},D3.prototype.bindings=function(){this.bindEvt(this.options.zone,"start"),this.options.zone.style.touchAction="none",this.options.zone.style.msTouchAction="none"},D3.prototype.begin=function(){var e=this.options;if("static"===e.mode){var t=this.createNipple(e.position,this.manager.getIdentifier());t.add(),this.idles.push(t)}},D3.prototype.createNipple=function(e,t){var i=this.manager.scroll,r={},s=this.options,a={x:this.parentIsFlex?i.x:i.x+this.box.left,y:this.parentIsFlex?i.y:i.y+this.box.top};if(e.x&&e.y)r={x:e.x-a.x,y:e.y-a.y};else if(e.top||e.right||e.bottom||e.left){var o=document.createElement("DIV");o.style.display="hidden",o.style.top=e.top,o.style.right=e.right,o.style.bottom=e.bottom,o.style.left=e.left,o.style.position="absolute",s.zone.appendChild(o);var l=o.getBoundingClientRect();s.zone.removeChild(o),r=e,e={x:l.left+i.x,y:l.top+i.y}}var h=new D2(this,{color:s.color,size:s.size,threshold:s.threshold,fadeTime:s.fadeTime,dataOnly:s.dataOnly,restJoystick:s.restJoystick,restOpacity:s.restOpacity,mode:s.mode,identifier:t,position:e,zone:s.zone,frontPosition:{x:0,y:0},shape:s.shape});return s.dataOnly||(DU(h.ui.el,r),DU(h.ui.front,h.frontPosition)),this.nipples.push(h),this.trigger("added "+h.identifier+":added",h),this.manager.trigger("added "+h.identifier+":added",h),this.bindNipple(h),h},D3.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},D3.prototype.bindNipple=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},D3.prototype.pressureFn=function(e,t,i){var r=this,s=0;clearInterval(r.pressureIntervals[i]),r.pressureIntervals[i]=setInterval((function(){var i=e.force||e.pressure||e.webkitForce||0;i!==s&&(t.trigger("pressure",i),r.trigger("pressure "+t.identifier+":pressure",i),s=i)}).bind(r),100)},D3.prototype.onstart=function(e){var t=this,i=t.options,r=e;return e=DF(e),t.updateBox(),DW(e,function(s){t.actives.length<i.maxNumberOfNipples?t.processOnStart(s):r.type.match(/^touch/)&&(Object.keys(t.manager.ids).forEach(function(i){if(0>Object.values(r.touches).findIndex(function(e){return e.identifier===i})){var s=[e[0]];s.identifier=i,t.processOnEnd(s)}}),t.actives.length<i.maxNumberOfNipples&&t.processOnStart(s))}),t.manager.bindDocument(),!1},D3.prototype.processOnStart=function(e){var t,i=this,r=i.options,s=i.manager.getIdentifier(e),a=e.force||e.pressure||e.webkitForce||0,o={x:e.pageX,y:e.pageY},l=i.getOrCreate(s,o);l.identifier!==s&&i.manager.removeIdentifier(l.identifier),l.identifier=s;var h=function(t){t.trigger("start",t),i.trigger("start "+t.id+":start",t),t.show(),a>0&&i.pressureFn(e,t,t.identifier),i.processOnMove(e)};if((t=i.idles.indexOf(l))>=0&&i.idles.splice(t,1),i.actives.push(l),i.ids.push(l.identifier),"semi"!==r.mode)h(l);else if(DC(o,l.position)<=r.catchDistance)h(l);else{l.destroy(),i.processOnStart(e);return}return l},D3.prototype.getOrCreate=function(e,t){var i,r=this.options;return/(semi|static)/.test(r.mode)?(i=this.idles[0])?(this.idles.splice(0,1),i):"semi"===r.mode?this.createNipple(t,e):(console.warn("Coudln't find the needed nipple."),!1):i=this.createNipple(t,e)},D3.prototype.processOnMove=function(e){var t=this.options,i=this.manager.getIdentifier(e),r=this.nipples.get(i),s=this.manager.scroll;if(!DO(e)){this.processOnEnd(e);return}if(!r){console.error("Found zombie joystick with ID "+i),this.manager.removeIdentifier(i);return}if(t.dynamicPage){var a=r.el.getBoundingClientRect();r.position={x:s.x+a.left,y:s.y+a.top}}r.identifier=i;var o=r.options.size/2,l={x:e.pageX,y:e.pageY};t.lockX&&(l.y=r.position.y),t.lockY&&(l.x=r.position.x);var h,c,d=DC(l,r.position),u=DT(l,r.position),p=DD(u),f=d/o,m={distance:d,position:l};if("circle"===r.options.shape?(h=Math.min(d,o),c=DP(r.position,h,u)):h=DC(c=Dq(l,r.position,o),r.position),t.follow){if(d>o){let e=l.x-c.x,t=l.y-c.y;r.position.x+=e,r.position.y+=t,r.el.style.top=r.position.y-(this.box.top+s.y)+"px",r.el.style.left=r.position.x-(this.box.left+s.x)+"px",d=DC(l,r.position)}}else l=c,d=h;var g=l.x-r.position.x,v=l.y-r.position.y;r.frontPosition={x:g,y:v},t.dataOnly||DU(r.ui.front,r.frontPosition);var y={identifier:r.identifier,position:l,force:f,pressure:e.force||e.pressure||e.webkitForce||0,distance:d,angle:{radian:p,degree:u},vector:{x:g/o,y:-v/o},raw:m,instance:r,lockX:t.lockX,lockY:t.lockY};(y=r.computeDirection(y)).angle={radian:DD(180-u),degree:180-u}
7684,r.trigger("move",y),this.trigger("move "+r.id+":move",y)},D3.prototype.processOnEnd=function(e){var t=this,i=t.options,r=t.manager.getIdentifier(e),s=t.nipples.get(r),a=t.manager.removeIdentifier(s.identifier);!s||(i.dataOnly||s.hide(function(){"dynamic"===i.mode&&(s.trigger("removed",s),t.trigger("removed "+s.id+":removed",s),t.manager.trigger("removed "+s.id+":removed",s),s.destroy())}),clearInterval(t.pressureIntervals[s.identifier]),s.resetDirection(),s.trigger("end",s),t.trigger("end "+s.id+":end",s),t.ids.indexOf(s.identifier)>=0&&t.ids.splice(t.ids.indexOf(s.identifier),1),t.actives.indexOf(s)>=0&&t.actives.splice(t.actives.indexOf(s),1),/(semi|static)/.test(i.mode)?t.idles.push(s):t.nipples.indexOf(s)>=0&&t.nipples.splice(t.nipples.indexOf(s),1),t.manager.unbindDocument(),/(semi|static)/.test(i.mode)&&(t.manager.ids[a.id]=a.identifier))},D3.prototype.onDestroyed=function(e,t){this.nipples.indexOf(t)>=0&&this.nipples.splice(this.nipples.indexOf(t),1),this.actives.indexOf(t)>=0&&this.actives.splice(this.actives.indexOf(t),1),this.idles.indexOf(t)>=0&&this.idles.splice(this.idles.indexOf(t),1),this.ids.indexOf(t.identifier)>=0&&this.ids.splice(this.ids.indexOf(t.identifier),1),this.manager.removeIdentifier(t.identifier),this.manager.unbindDocument()},D3.prototype.destroy=function(){for(var e in this.unbindEvt(this.options.zone,"start"),this.nipples.forEach(function(e){e.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(e)&&clearInterval(this.pressureIntervals[e]);this.trigger("destroyed",this.nipples),this.manager.unbindDocument(),this.off()},D4.prototype=new D1,D4.constructor=D4,D4.prototype.prepareCollections=function(){var e=this;e.collections.create=e.create.bind(e),e.collections.on=e.on.bind(e),e.collections.off=e.off.bind(e),e.collections.destroy=e.destroy.bind(e),e.collections.get=function(t){var i;return e.collections.every(function(e){return!(i=e.get(t))}),i}},D4.prototype.create=function(e){return this.createCollection(e)},D4.prototype.createCollection=function(e){var t=new D3(this,e);return this.bindCollection(t),this.collections.push(t),t},D4.prototype.bindCollection=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},D4.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,"move").bindEvt(document,"end"),this.binded=!0)},D4.prototype.unbindDocument=function(e){Object.keys(this.ids).length&&!0!==e||(this.unbindEvt(document,"move").unbindEvt(document,"end"),this.binded=!1)},D4.prototype.getIdentifier=function(e){var t;return e?void 0===(t=void 0===e.identifier?e.pointerId:e.identifier)&&(t=this.latest||0):t=this.index,void 0===this.ids[t]&&(this.ids[t]=this.index,this.index+=1),this.latest=t,this.ids[t]},D4.prototype.removeIdentifier=function(e){var t={};for(var i in this.ids)if(this.ids[i]===e){t.id=i,t.identifier=this.ids[i],delete this.ids[i];break}return t},D4.prototype.onmove=function(e){return this.onAny("move",e),!1},D4.prototype.onend=function(e){return this.onAny("end",e),!1},D4.prototype.oncancel=function(e){return this.onAny("end",e),!1},D4.prototype.onAny=function(e,t){var i,r=this,s="processOn"+e.charAt(0).toUpperCase()+e.slice(1);t=DF(t);var a=function(e,t,i){i.ids.indexOf(t)>=0&&(i[s](e),e._found_=!0)};return DW(t,function(e){i=r.getIdentifier(e),DW(r.collections,a.bind(null,e,i)),e._found_||r.removeIdentifier(i)}),!1},D4.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(e){e.destroy()}),this.off()},D4.prototype.onDestroyed=function(e,t){if(0>this.collections.indexOf(t))return!1;this.collections.splice(this.collections.indexOf(t),1)};var D5=new D4,D6={create:function(e){return D5.create(e)}},D8=new Map,D9=new Map,D7=class{constructor(e,t,i,r){this.data=t;let{audio:s,volume:a,delay:o,loop:l}=t;if(!s)throw Error("Missing property");let h="string"==typeof s?r.getAudio(s).src:s.data;this.audioPlayer=new Ak({src:h,volume:a,delay:o,loop:l}),D9.has(i.uuid)?D9.get(i.uuid).push(this):D9.set(i.uuid,[this]),D8.set(e,this)}
7684playByToggle(){"stop"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.stop():(this.audioPlayer.stop(),this.audioPlayer.play()):"pause"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.pause():this.audioPlayer.play():(this.audioPlayer.stop(),this.audioPlayer.play())}dispose(){this.audioPlayer.stop()}},Ie=class{constructor(e){this.data=e}dispatch(){this.data.playAudio?this.pauseAudio(this.data.playAudio):this.data.object?this.pauseAllAudiosFromObject(this.data.object):this.pauseAllAudios()}pauseAudio(e){let t=D8.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.audioPlayer[this.data.interaction](),this.disposeDelay()},this.data.delay)):t.audioPlayer[this.data.interaction]())}pauseAllAudiosFromObject(e){let t=D9.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e.audioPlayer[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e.audioPlayer[this.data.interaction]()))}pauseAllAudios(){let e=[...D9.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},It=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new D7(e,t,i,r);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new Ie(t);else throw Error("Missing property")}dispatchBasic(){if(!1===OO(this.shared,this.condition))return!1;this.interaction instanceof D7?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===OO(this.shared,this.condition))return!1;this.interaction instanceof D7?this.interaction.audioPlayer.play():this.interaction.dispatch()}dispatchGameControl(e){if(!1===OO(this.shared,this.condition))return!1;this.interaction instanceof D7&&("start"===e?this.interaction.audioPlayer.play():this.interaction.audioPlayer.stop())}dispose(){this.interaction.dispose()}},Ii=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e);return}this.particleSystem.start()}stop(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e);return}this.particleSystem.stop()}freeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e);return}this.particleSystem.froze()}unFreeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e);return}this.particleSystem.unFroze()}reset(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e);return}this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===OO(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===OO(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===OO(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){this.particleSystem&&(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}},Ir=(e,t)=>
7684t.some(t=>t instanceof RegExp?t.test(e):t===e),Is=(e,{stripHash:t})=>{let i=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(e);if(!i)throw Error(`Invalid URL: ${e}`);let{type:r,data:s,hash:a}=i.groups,o=r.split(";");a=t?"":a;let l=!1;"base64"===o[o.length-1]&&(o.pop(),l=!0);let h=(o.shift()||"").toLowerCase(),c=[...o.map(e=>{let[t,i=""]=e.split("=").map(e=>e.trim());return"charset"===t&&"us-ascii"===(i=i.toLowerCase())?"":`${t}${i?`=${i}`:""}`}).filter(Boolean)];return l&&c.push("base64"),(c.length>0||h&&"text/plain"!==h)&&c.unshift(h),`data:${c.join(";")},${l?s.trim():s}${a?`#${a}`:""}`},Ia=class{constructor({url:e,context:t},i,r,s){if(this.controlsManager=i,this.shared=r,this.condition=s,!e)throw Error("Missing property");this.url=e.startsWith("mailto:")?e:function(e,t){if(t={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...t},e=e.trim(),/^data:/i.test(e))return Is(e,t);if(/^view-source:/i.test(e))throw Error("`view-source:` is not supported as it is a non-standard protocol");let i=e.startsWith("//");!i&&/^\.*\//.test(e)||(e=e.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,t.defaultProtocol));let r=new URL(e);if(t.forceHttp&&t.forceHttps)throw Error("The `forceHttp` and `forceHttps` options cannot be used together");if(t.forceHttp&&"https:"===r.protocol&&(r.protocol="http:"),t.forceHttps&&"http:"===r.protocol&&(r.protocol="https:"),t.stripAuthentication&&(r.username="",r.password=""),t.stripHash?r.hash="":t.stripTextFragment&&(r.hash=r.hash.replace(/#?:~:text.*?$/i,"")),r.pathname){let e=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,t=0,i="";for(;;){let s=e.exec(r.pathname);if(!s)break;let a=s[0],o=s.index;i+=r.pathname.slice(t,o).replace(/\/{2,}/g,"/")+a,t=o+a.length}i+=r.pathname.slice(t,r.pathname.length).replace(/\/{2,}/g,"/"),r.pathname=i}if(r.pathname)try{r.pathname=decodeURI(r.pathname)}catch{}if(!0===t.removeDirectoryIndex&&(t.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(t.removeDirectoryIndex)&&t.removeDirectoryIndex.length>0){let e=r.pathname.split("/");Ir(e[e.length-1],t.removeDirectoryIndex)&&(e=e.slice(0,-1),r.pathname=e.slice(1).join("/")+"/")}if(r.hostname&&(r.hostname=r.hostname.replace(/\.$/,""),t.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(r.hostname)&&(r.hostname=r.hostname.replace(/^www\./,""))),Array.isArray(t.removeQueryParameters))for(let e of[...r.searchParams.keys()])Ir(e,t.removeQueryParameters)&&r.searchParams.delete(e);if(!0===t.removeQueryParameters&&(r.search=""),t.sortQueryParameters){r.searchParams.sort();try{r.search=decodeURIComponent(r.search)}catch{}}t.removeTrailingSlash&&(r.pathname=r.pathname.replace(/\/$/,""));let s=e;return e=r.toString(),t.removeSingleSlash||"/"!==r.pathname||s.endsWith("/")||""!==r.hash||(e=e.replace(/\/$/,"")),(t.removeTrailingSlash||"/"===r.pathname)&&""===r.hash&&t.removeSingleSlash&&(e=e.replace(/\/$/,"")),i&&!t.normalizeProtocol&&(e=e.replace(/^http:\/\//,"//")),t.stripProtocol&&(e=e.replace(/^(?:https?:)?\/\//,"")),e}(e,{removeTrailingSlash:!1,removeSingleSlash:!1,stripWWW:!1}),this.context=t??"tab"}dispatch(){if(!1===OO(this.shared,this.condition))return!1;uY?window.location.assign(this.url):("tab"===this.context||uq&&"none"===this.context?window.open(this.url,"_blank"):"window"===this.context?window.open(this.url,"_blank",`width=${window.innerWidth}, height=${window.innerHeight}`):window.open(this.url,"_parent"),this.controlsManager.orbitControls?.onPointerUp(u2[0]),u2.splice(0,u2.length))}},In=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.timeoutIdQueue=[],this.dispatchInner=()=>{this.objects.forEach(this.destroyCallback)},this.destroyCallback=e=>{this.timeoutIdQueue.shift();let t=this.page.scene.find(e);if(void 0===t)return;let i=this.controlsManager.sharedGameControlGlobals.rapierWorld,r=!i||t.dataPatched.physics?.fusedBody;if(t.cloner){for(let e of t.cloner.children)r?(e.playModeVisible=!1,e.rigidBody&&t.dataPatched.physics?.rigidBody==="positioned"&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0),e.bvhGeometry&&(e.bvhGeometry=void 0)):void 0===this.clone||this.clone===e?(e.playModeVisible=!1,e.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0)):void 0===e.playModeVisible&&(e.playModeVisible=!0);(r||void 0===this.clone||!1===this.clone)&&(t.visible=!1,t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0))}else t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0),t.visible=!1;void 0===i?this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry):this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.rigidBody),t.destroyedInAction=!0,this.controlsManager.requestRender()},this.objects=[...e.objects]}dispatch(e){if(!1===OO(this.shared,this.condition))return!1;this.clone=e,this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()}
7684dispatchFromStart(){if(!1===OO(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))}dispose(){this.timeoutIdQueue.forEach(e=>window.clearTimeout(e))}},Io=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.shared=i,this.eventManager=r,this.condition=s,this.shared=i}dispatch(){if(!1===OO(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),delete this.timeoutId,this.timeoutId=window.setTimeout(()=>{this.shared.reset(this.shared.data,!0),Od(this.page,this.shared,!0),this.eventManager.reset(),this.eventManager.controlsManager.gameControl?.reset(!0),this.page.switchToPlayCamera(),this.eventManager.controlsManager.requestRender(),delete this.timeoutId},(this.data.delay??0)*1e3)}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},Il={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,timelineChangeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0,rewind:!0},Ih={duration:1e3,delay:0,endDelay:0,startOnceDelay:0,pingPongDelayCorrection:0,pingPongEndDelayCorrection:0,easing:"easeOutElastic(1, .5)",round:0},Ic=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective","matrix","matrix3d"],Id={CSS:{},springs:{}};function Iu(e,t,i){return Math.min(Math.max(e,t),i)}function Ip(e,t){return e.indexOf(t)>-1}function If(e,t){return e.apply(null,t)}var Im={arr:function(e){return Array.isArray(e)},obj:function(e){return Ip(Object.prototype.toString.call(e),"Object")},pth:function(e){return Im.obj(e)&&e.hasOwnProperty("totalLength")},svg:function(e){return e instanceof SVGElement},inp:function(e){return e instanceof HTMLInputElement},dom:function(e){return!("isNode"in e)&&(e.nodeType||Im.svg(e))},str:function(e){return"string"==typeof e},fnc:function(e){return"function"==typeof e},und:function(e){return typeof e>"u"},hex:function(e){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e)},rgb:function(e){return/^rgb/.test(e)},hsl:function(e){return/^hsl/.test(e)},col:function(e){return Im.hex(e)||Im.rgb(e)||Im.hsl(e)},key:function(e){return!Il.hasOwnProperty(e)&&!Ih.hasOwnProperty(e)&&"targets"!==e&&"keyframes"!==e}};function Ig(e){var t=/\(([^)]+)\)/.exec(e);return t?t[1].split(",").map(function(e){return parseFloat(e)}):[]}function Iv(e,t){var i=Ig(e),r=Iu(Im.und(i[0])?1:i[0],.1,100),s=Iu(Im.und(i[1])?100:i[1],.1,100),a=Iu(Im.und(i[2])?10:i[2],.1,100),o=Iu(Im.und(i[3])?0:i[3],.1,100),l=Math.sqrt(s/r),h=a/(2*Math.sqrt(s*r)),c=h<1?l*Math.sqrt(1-h*h):0,d=h<1?(h*l+-o)/c:-o+l;function u(e){var i=t?t*e/1e3:e;return i=h<1?Math.exp(-i*h*l)*(1*Math.cos(c*i)+d*Math.sin(c*i)):(1+d*i)*Math.exp(-i*l),0===e||1===e?e:1-i}return t?u:function(){var t=Id.springs[e];if(t)return t;for(var i=1/6,r=0,s=0;;)if(1===u(r+=i)){if(++s>=16)break}else s=0;var a=r*i*1e3;return Id.springs[e]=a,a}}function Iy(e){return void 0===e&&(e=10),function(t){return Math.ceil(Iu(t,1e-6,1)*e)*(1/e)}}var Ix=function(){function e(e,t,i){return(((1-3*i+3*t)*e+(3*i-6*t))*e+3*t)*e}function t(e,t,i){return 3*(1-3*i+3*t)*e*e+2*(3*i-6*t)*e+3*t}return function(i,r,s,a){if(0<=i&&i<=1&&0<=s&&s<=1){var o=new Float32Array(11);if(i!==r||s!==a)for(var l=0;l<11;++l)o[l]=e(.1*l,i,s);return function(l){return i===r&&s===a||0===l||1===l?l:e(function(r){for(var a=0,l=1;10!==l&&o[l]<=r;++l)a+=.1;var h=a+(r-o[--l])/(o[l+1]-o[l])*.1,c=t(h,i,s);return c>=.001?function(i,r,s,a){for(var o=0;o<4;++o){var l=t(r,s,a);if(0===l)break;var h=e(r,s,a)-i;r-=h/l}return r}(r,h,i,s):0===c?h:function(t,i,r,s,a){var o,l,h=0;do(o=e(l=i+(r-i)/2,s,a)-t)>0?r=l:i=l;while(Math.abs(o)>1e-7&&++h<10);return l}(r,a,a+.1,i,s)}(l),r,a)}}}}(),Ib=(IZ={linear:function(){return function(e){return e}}},IK={Sine:function(){return function(e){return 1-Math.cos(e*Math.PI/2)}},Circ:function(){return function(e){return 1-Math.sqrt(1-e*e)}},Back:function(){return function(e){return e*e*(3*e-2)}},Bounce:function(){return function(e){for(var t,i=4;e<((t=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}},Elastic:function(e,t){void 0===e&&(e=1),void 0===t&&(t=.5);var i=Iu(e,1,10),r=Iu(t,.1,2);return function(e){return 0===e||1===e?e:-i*Math.pow(2,10*(e-1))*Math.sin(2*Math.PI*(e-1-r/(2*Math.PI)*Math.asin(1/i))/r)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(e,t){IK[e]=function(){return function(e){return Math.pow(e,t+2)}}}
7684),Object.keys(IK).forEach(function(e){var t=IK[e];IZ["easeIn"+e]=t,IZ["easeOut"+e]=function(e,i){return function(r){return 1-t(e,i)(1-r)}},IZ["easeInOut"+e]=function(e,i){return function(r){return r<.5?t(e,i)(2*r)/2:1-t(e,i)(-2*r+2)/2}}}),IZ);function Iw(e,t){if(Im.fnc(e))return e;var i=e.split("(")[0],r=Ib[i],s=Ig(e);switch(i){case"spring":return Iv(e,t);case"cubicBezier":return If(Ix,s);case"steps":return If(Iy,s);default:return If(r,s)}}function IS(e){try{return document.querySelectorAll(e)}catch{return}}function I_(e,t){for(var i=e.length,r=arguments.length>=2?arguments[1]:void 0,s=[],a=0;a<i;a++)if(a in e){var o=e[a];t.call(r,o,a,e)&&s.push(o)}return s}function IA(e){return e.reduce(function(e,t){return e.concat(Im.arr(t)?IA(t):t)},[])}function IM(e){return Im.arr(e)?e:(Im.str(e)&&(e=IS(e)||e),e instanceof NodeList||e instanceof HTMLCollection?[].slice.call(e):[e])}function IE(e,t){return e.some(function(e){return e===t})}function IC(e){var t={};for(var i in e)t[i]=e[i];return t}function IT(e,t){var i=IC(e);for(var r in e)i[r]=t.hasOwnProperty(r)?t[r]:e[r];return i}function IP(e,t){var i=IC(e);for(var r in t)i[r]=Im.und(e[r])?t[r]:e[r];return i}function ID(e){var t=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(e);if(t)return t[1]}function II(e,t){return Im.fnc(e)?e(t.target,t.id,t.total):e}function IO(e,t){return e.getAttribute(t)}function IR(e,t,i){if(IE([i,"deg","rad","turn"],ID(t)))return t;var r=Id.CSS[t+i];if(!Im.und(r))return r;var s=document.createElement(e.tagName),a=e.parentNode&&e.parentNode!==document?e.parentNode:document.body;a.appendChild(s),s.style.position="absolute",s.style.width=100+i;var o=100/s.offsetWidth;a.removeChild(s);var l=o*parseFloat(t);return Id.CSS[t+i]=l,l}function IL(e,t,i){if(t in e.style){var r=t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),s=e.style[t]||getComputedStyle(e).getPropertyValue(r)||"0";return i?IR(e,s,i):s}}function IB(e,t){return Im.dom(e)&&!Im.inp(e)&&(IO(e,t)||Im.svg(e)&&e[t])?"attribute":Im.dom(e)&&IE(Ic,t)?"transform":Im.dom(e)&&"transform"!==t&&IL(e,t)?"css":null!=e[t]?"object":void 0}function Iz(e){if(Im.dom(e)){for(var t,i=e.style.transform||"",r=/(\w+)\(([^)]*)\)/g,s=new Map;t=r.exec(i);)s.set(t[1],t[2]);return s}}function IF(e,t,i,r){switch(IB(e,t)){case"transform":var s,a;return s=Ip(t,"scale")?1:0+(Ip(t,"translate")||"perspective"===t?"px":Ip(t,"rotate")||Ip(t,"skew")?"deg":void 0),a=Iz(e).get(t)||s,r&&(r.transforms.list.set(t,a),r.transforms.last=t),i?IR(e,a,i):a;case"css":return IL(e,t,i);case"attribute":return IO(e,t);default:return e[t]||0}}function IN(e,t){var i=/^(\*=|\+=|-=)/.exec(e);if(!i)return e;var r=ID(e)||0,s=parseFloat(t),a=parseFloat(e.replace(i[0],""));switch(i[0][0]){case"+":return s+a+r;case"-":return s-a+r;case"*":return s*a+r}}function IU(e,t){if(Im.col(e)){var i,r,s,a;return i=e,Im.rgb(i)?(r=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(i))?"rgba("+r[1]+",1)":i:Im.hex(i)?(s=i.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,i,r){return t+t+i+i+r+r}),"rgba("+parseInt((a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(s))[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)+",1)"):Im.hsl(i)?function(e){var t,i,r,s=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(e),a=parseInt(s[1],10)/360,o=parseInt(s[2],10)/100,l=parseInt(s[3],10)/100,h=s[4]||1;function c(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}if(0==o)t=i=r=l;else{var d=l<.5?l*(1+o):l+o-l*o,u=2*l-d;t=c(u,d,a+1/3),i=c(u,d,a),r=c(u,d,a-1/3)}return"rgba("+255*t+","+255*i+","+255*r+","+h+")"}(i):void 0}if(/\s/g.test(e))return e;var o=ID(e),l=o?e.substr(0,e.length-o.length):e;return t?l+t:l}function Ik(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function IV(e){for(var t,i=e.points,r=0,s=0;s<i.numberOfItems;s++){var a=i.getItem(s);s>0&&(r+=Ik(t,a)),t=a}return r}function Ij(e){var t;if(e.getTotalLength)return e.getTotalLength();switch(e.tagName.toLowerCase()){case"circle":return 2*Math.PI*IO(e,"r");
7684case"rect":return 2*IO(e,"width")+2*IO(e,"height");case"line":return Ik({x:IO(e,"x1"),y:IO(e,"y1")},{x:IO(e,"x2"),y:IO(e,"y2")});case"polyline":return IV(e);case"polygon":return t=e.points,IV(e)+Ik(t.getItem(t.numberOfItems-1),t.getItem(0))}}function IG(e,t){var i=t||{},r=i.el||function(e){for(var t=e.parentNode;Im.svg(t)&&Im.svg(t.parentNode);)t=t.parentNode;return t}(e),s=r.getBoundingClientRect(),a=IO(r,"viewBox"),o=s.width,l=s.height,h=i.viewBox||(a?a.split(" "):[0,0,o,l]);return{el:r,viewBox:h,x:h[0]/1,y:h[1]/1,w:o/h[2],h:l/h[3]}}function IH(e,t){var i=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,r=IU(Im.pth(e)?e.totalLength:e,t)+"";return{original:r,numbers:r.match(i)?r.match(i).map(Number):[0],strings:Im.str(e)||t?r.split(i):[]}}function IW(e){return I_(e?IA(Im.arr(e)?e.map(IM):IM(e)):[],function(e,t,i){return i.indexOf(e)===t})}function Iq(e){var t=IW(e);return t.map(function(e,i){return{target:e,id:i,total:t.length,transforms:{list:Iz(e)}}})}var IX={css:function(e,t,i){return e.style[t]=i},attribute:function(e,t,i){return e.setAttribute(t,i)},object:function(e,t,i){return e[t]=i},transform:function(e,t,i,r,s){if(r.list.set(t,i),t===r.last||s){var a="";r.list.forEach(function(e,t){a+=t+"("+e+") "}),e.style.transform=a}}};function IY(e,t){Iq(e).forEach(function(e){for(var i in t){var r=II(t[i],e),s=e.target,a=ID(r),o=IF(s,i,a,e),l=IN(IU(r,a||ID(o)),o);IX[IB(s,i)](s,i,l,e.transforms,!0)}})}function IQ(e,t){var i=e.length,r=function(e){return e.timelineOffset?e.timelineOffset:0},s={};return s.duration=i?Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+s+e.duration*(e.loop??1)})):t.duration,s.delay=i?Math.min.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0;return r(e)+t+i+e.delay})):t.delay,s.endDelay=i?s.duration-Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+e.duration*(e.loop??1)-e.endDelay-s})):t.endDelay,s}var IZ,IK,IJ,I$=0,I0=[],I1=[],I2=function(){function e(){IJ=requestAnimationFrame(t)}function t(t){var i=I0.length;if(i){for(var r=0;r<i;){var s=I0[r];s.paused?(I0.splice(r,1),i-=1):(s.tick(t),r++)}e()}else IJ=cancelAnimationFrame(IJ)}return e}();function I3(e){void 0===e&&(e={});var t,i,r,s,a,o,l,h,c,d,u=0,p=0,f=0,m=0,g=null;function v(e){var t=window.Promise&&new Promise(function(e){return g=e});return e.finished=t,t}var y=(i=IT(Il,t=e),s=function(e,t){var i=[],r=t.keyframes;for(var s in r&&(t=IP(function(e){for(var t=I_(IA(e.map(function(e){return Object.keys(e)})),function(e){return Im.key(e)}).reduce(function(e,t){return 0>e.indexOf(t)&&e.push(t),e},[]),i={},r=0;r<t.length;r++)!function(r){var s=t[r];i[s]=e.map(function(e){var t={};for(var i in e)Im.key(i)?i==s&&(t.value=e[i]):t[i]=e[i];return t})}(r);return i}(r),t)),t)Im.key(s)&&i.push({name:s,tweens:function(e,t){var i=IC(t);if(/^spring/.test(i.easing)&&(i.duration=Iv(i.easing)),Im.arr(e)){var r=e.length;2!==r||Im.obj(e[0])?Im.fnc(t.duration)||(i.duration=t.duration/r):e={value:e}}var s=Im.arr(e)?e:[e];return s.map(function(e,i){var r=Im.obj(e)&&!Im.pth(e)?e:{value:e};return Im.und(r.delay)&&(r.delay=i?0:t.delay),Im.und(r.endDelay)&&(r.endDelay=i===s.length-1?t.endDelay:0),r}).map(function(e){return IP(e,i)})}(t[s],e)});return i}(r=IT(Ih,t),t),l=IQ(o=I_(IA((a=Iq(t.targets)).map(function(e){return s.map(function(t){return function(e,t){var i=IB(e.target,t.name);if(i){var r,s=t.tweens.map(function(i){var s=function(e,t){var i={};for(var r in e){var s=II(e[r],t);Im.arr(s)&&1===(s=s.map(function(e){return II(e,t)})).length&&(s=s[0]),i[r]=s}return i.duration=parseFloat(i.duration),i.delay=parseFloat(i.delay),i}(i,e),a=s.value,o=Im.arr(a)?a[1]:a,l=ID(o),h=IF(e.target,t.name,l,e),c=r?r.to.original:h,d=Im.arr(a)?a[0]:c,u=ID(d)||ID(h),p=l||u;return Im.und(o)&&(o=c),s.from=IH(d,p),s.to=IH(IN(o,d),p),s.start=r?r.end:0,s.end=s.start+s.delay+s.duration+s.endDelay,s.easing=Iw(s.easing,s.duration),s.isPath=Im.pth(a),s.isColor=Im.col(s.from.original),s.isColor&&(s.round=1),r=s,s}),a=s[s.length-1];return{type:i,property:t.name,animatable:e,tweens:s,duration:a.end,delay:s[0].delay,endDelay:a.endDelay}}}(e,t)})})),function(e){return!Im.und(e)}),r),h=I$,I$++,IP(i,{id:h,children:[],animatables:a,animations:o,duration:l.duration,delay:l.delay,endDelay:l.endDelay,startOnceDelay:r.startOnceDelay,pingPongDelayCorrection:r.pingPongDelayCorrection,pingPongEndDelayCorrection:r.pingPongEndDelayCorrection}));function x(){var e=y.direction;"alternate"!==e&&(y.direction="normal"!==e?"normal":"reverse"),y.reversed=!y.reversed,d.forEach(function(e){(1===e.loop||e.loop%2==0)&&(e.reversed=y.reversed)})}function b(e){return y.reversed?y.duration-e:e}function w(e,t,i=!1){t&&(y.reversed?t.seek(t.duration*t.loop-(e-t.timelineOffset-t.pingPongDelayCorrection),i):t.seek(e-t.timelineOffset-t.startOnceDelay-t.pingPongDelayCorrection,i))}function S(e){var t=0,i=y.animations,r=i.length;for("alternate"!==y.direction&&y.parent?.direction==="alternate"?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e):M(!1,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e);t<r;){let r;var s=i[t],a=s.animatable,o=s.tweens,l=o.length-1,h=o[l];l&&(h=I_(o,function(t){return e<t.end})[0]||h),r=y.parent?.reversed&&"alternate"===y.direction?Iu(e-h.start-h.endDelay,0,h.duration)/h.duration:Iu(e-h.start-h.delay,0,h.duration)/h.duration;for(var c=isNaN(r)?1:h.easing(r),d=h.to.strings,u=h.round,p=[],f=h.to.numbers.length,m=void 0,g=0;g<f;g++){let e,t;var v=void 0;"alternate"!==y.direction?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0):M(!0,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0),v=h.isPath?function(e,t){function i(i){void 0===i&&(i=0);var r=t+i>=1?t+i:0;return e.el.getPointAtLength(r)}var r=IG(e.el,e.svg),s=i(),a=i(-1),o=i(1);switch(e.property){case"x":return(s.x-r.x)*r.w;case"y":return(s.y-r.y)*r.h;case"angle":return 180*Math.atan2(o.y-a.y,o.x-a.x)/Math.PI}}(h.value,c*t):e+c*(t-e),u&&(h.isColor&&g>2||(v=Math.round(v*u)/u)),p.push(v)}var x=d.length;if(x){m=d[0];for(var b=0;b<x;b++){d[b];var w=d[b+1],S=p[b];isNaN(S)||(w?m+=S+w:m+=S+" ")}}else m=p[0];IX[s.type](a.target,s.property,m,a.transforms),s.currentValue=m,t++}}function _(e){y[e]&&!y.passThrough&&y[e](y)}v(y);let A={0:!1,1:!0,2:!1,3:!0,4:!1,5:!1,6:!1,7:!1,8:!1,9:!0,10:!0,11:!1,12:!1,13:!1,14:!0,15:!0,16:!1,17:!0,18:!0,19:!1,20:!1,21:!1,22:!0,23:!0,24:!1,25:!0,26:!1,27:!0,28:!1,29:!1,30:!1,31:!1};function M(e,t,i,r,s){return A[e<<4|t<<3|i<<2|r<<1|s]}function E(e,t=!1){var i=y.duration;let r=y.delay,s=i-y.endDelay;y.parent?.reversed&&"alternate"===y.direction&&(r=y.endDelay,s=i-y.delay);var a=b(e);if(y.progress=Iu(a/i*100,0,100),t||(y.reversePlayback=a<y.currentTime),m&&function(e,t=!1){if(y.reversed)for(var i=m;i--;)w(e,d[i],t);else for(var r=0;r<m;r++)w(e,d[r],t)}(a,t),!y.began&&y.currentTime>=0&&(y.began=!0,_("begin")),!y.loopBegan&&y.currentTime>0&&(y.loopBegan=!0,_("loopBegin")),(y.reversed||a>
7684=0)&&a<=r&&0!==y.currentTime&&(S(0),_("change")),(a>=s&&y.currentTime!==i+y.pingPongDelayCorrection||!i)&&(S(i),_("change")),a>r&&a<s?(y.changeBegan||(y.changeBegan=!0,y.changeCompleted=!1,_("changeBegin")),S(a),_("change")):y.changeBegan?(y.changeCompleted=!0,y.changeBegan=!1,_("change"),m&&_("timelineChangeComplete")):y.began&&a>s&&_("changeComplete"),y.currentTime=Iu(a,0,i+y.pingPongDelayCorrection),y.began&&_("update"),e>=i){if(y.remaining&&!0!==y.remaining&&y.remaining--,y.remaining){for(let e of(m?u+=y.duration/I3.speed:u+=y.duration,d))e.setStartTime(0),e.remaining=e.loop;_("loopComplete"),y.loopBegan=!1,"alternate"===y.direction?x():m&&(y.direction="normal",y.reversed=!1,d.forEach(function(e){return e.reversed=!1}))}else y.paused=!0,y.completed||(y.completed=!0,_("loopComplete"),_("complete"),!y.passThrough&&"Promise"in window&&(g(),v(y)))}}return y.reset=function(){var e=y.direction;y.passThrough=!1,y.currentTime=0,y.progress=0,y.paused=!0,y.began=!1,y.loopBegan=!1,y.changeBegan=!1,y.completed=!1,y.changeCompleted=!1,y.reversePlayback=!1,y.reversed="reverse"===e,y.remaining=y.loop,m=(d=y.children).length;for(var t=m;t--;)y.children[t].reset();S(y.reversed?y.duration:0)},y.setStartTime=function(e){u=e},y.set=function(e,t){return IY(e,t),y},y.tick=function(e){f=e,u||(u=f),E((f+(p-u))*I3.speed)},y.seek=function(e,t=!1){E(e-u,t)},y.pause=function(e){y.paused=!0,m&&(c=e??performance.now())},y.play=function(e){!y.paused||(y.completed&&y.reset(),y.paused=!1,I0.push(y),m&&void 0!==c&&(u+=(e??performance.now())-c),IJ||I2())},y.reverse=function(){x(),y.completed=!y.reversed,u=0,p=b(y.currentTime)*(1/I3.speed)},y.restart=function(){y.reset(),y.play()},y.reset(),y.autoplay&&y.play(),y}function I4(e,t){for(var i=t.length;i--;)IE(e,t[i].animatable.target)&&t.splice(i,1)}"u">typeof document&&document.addEventListener("visibilitychange",function(e){document.hidden?(I0.forEach(function(t){return t.pause(e.timeStamp)}),I1=I0.slice(0),I3.running=I0=[]):I1.forEach(function(t){return t.play(e.timeStamp)})}),I3.version="3.2.0",I3.speed=1,I3.running=I0,I3.remove=function(e){for(var t=IW(e),i=I0.length;i--;){var r=I0[i],s=r.animations,a=r.children;I4(t,s);for(var o=a.length;o--;){var l=a[o],h=l.animations;I4(t,h),h.length||l.children.length||a.splice(o,1)}s.length||a.length||r.pause()}},I3.get=IF,I3.set=IY,I3.convertPx=IR,I3.path=function(e,t){var i=Im.str(e)?IS(e)[0]:e,r=t||100;return function(e){return{property:e,el:i,svg:IG(i),totalLength:Ij(i)*(r/100)}}},I3.setDashoffset=function(e){var t=Ij(e);return e.setAttribute("stroke-dasharray",t),t},I3.stagger=function(e,t){void 0===t&&(t={});var i=t.direction||"normal",r=t.easing?Iw(t.easing):null,s=t.grid,a=t.axis,o=t.from||0,l="first"===o,h="center"===o,c="last"===o,d=Im.arr(e),u=parseFloat(d?e[0]:e),p=d?parseFloat(e[1]):0,f=ID(d?e[1]:e)||0,m=t.start||0+(d?u:0),g=[],v=0;return function(e,t,y){if(l&&(o=0),h&&(o=(y-1)/2),c&&(o=y-1),!g.length){for(var x=0;x<y;x++){if(s){var b=h?(s[0]-1)/2:o%s[0],w=h?(s[1]-1)/2:Math.floor(o/s[0]),S=x%s[0],_=Math.floor(x/s[0]),A=b-S,M=w-_,E=Math.sqrt(A*A+M*M);"x"===a&&(E=-A),"y"===a&&(E=-M),g.push(E)}else g.push(Math.abs(o-x));v=Math.max.apply(Math,g)}r&&(g=g.map(function(e){return r(e/v)*v})),"reverse"===i&&(g=g.map(function(e){return a?e<0?-1*e:-e:Math.abs(v-e)}))}var C=d?(p-u)/v:u;return m+Math.round(100*g[t])/100*C+f}},I3.timeline=function(e){void 0===e&&(e={});var t=I3(e);return t.duration=0,t.add=function(i,r){var s=I0.indexOf(t),a=t.children;function o(e){e.passThrough=!0}s>-1&&I0.splice(s,1);for(var l=0;l<a.length;l++)o(a[l]);var h=IP(i,IT(Ih,e));h.targets=h.targets||e.targets;var c=t.duration;h.autoplay=!1,h.timelineOffset=Im.und(r)?c:IN(r,c),o(t);var d=I3(h);o(d),a.push(d),d.parent=t;var u=IQ(a,e);return t.delay=u.delay,t.endDelay=u.endDelay,t.duration=u.duration,!0===d.loop&&(t.duration=1/0),t.seek(0),t.reset(),t.autoplay&&t.play(),t},t},I3.easing=Iw,I3.penner=Ib,I3.random=function(e,t){return Math.floor(Math.random()*(t-e+1))+e};var I5=new ix,I6=new ix,I8=new iy;function I9(e,t,i,r,s,a){let o=void 0!==i[e]?i[e]:void 0,l=r[e];if(null==l)return;let h=null!=o?"string"==typeof o?Number(s.getVariable(o)??0):o:t[e],c="string"==typeof l?Number(s.getVariable(l)??0):l;if(h!==c)return{update:i=>{let r=tZ.lerp(h,c,i);a?t[e]=Math.trunc(r):t[e]=r},start:()=>{t[e]=h},end:()=>{t[e]=c}}}function I7(e,t,i,r,s,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=[...o??h].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e),d=[...l].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e);if(!(c.length!==d.length||uB(c,d)))return{update:i=>
7684{c.forEach((r,s)=>{let o=tZ.lerp(r,d[s],i);t[e][s]=a?Math.trunc(o):o})},start:()=>{Object.assign(t[e],c)},end:()=>{Object.assign(t[e],d)}}}function Oe(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Ot(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?Oe(new ix,a,s):l.clone(),c=Oe(new ix,o,s);if(!h.equals(c))return{update:e=>{l.lerpVectors(h,c,e)},start:()=>{l.copy(h)},end:()=>{l.copy(c)}}}function Oi(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Or(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=!(l instanceof tK),c=l instanceof tK?l:new tK().fromArray(l),d=a?Oi(new tK,a,s):c.clone(),u=Oi(new tK,o,s);if(!d.equals(u))return{update:i=>{c.lerpVectors(d,u,i),h&&(t[e]=c.toArray())},start:()=>{c.copy(d),h&&(t[e]=c.toArray())},end:()=>{c.copy(u),h&&(t[e]=c.toArray())}}}function Os(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=new SU(l.r,l.g,l.b,l.a),c=a?"string"==typeof a?s.getColor(a).clone():new SU(a.r,a.g,a.b,a.a):h.clone(),d="string"==typeof o?s.getColor(o).clone():new SU(o.r,o.g,o.b,o.a);if(!c.equals(d))return{update:i=>{h.lerpColors(c,d,i);let r=tZ.lerp(c.a,d.a,i);h.a=r,t[e]={r:h.r,g:h.g,b:h.b,a:h.a}},start:()=>{h.copy(c)},end:()=>{h.copy(d)}}}function Oa(e,t,i,r,s){return"number"==typeof t[e]?I9(e,t,i??{},r,s):Array.isArray(t[e])?I7(e,t,i??{},r,s):void 0}function On(e,t,i,r){let s=[],a=AT(i,r)||!!t.layers&&AT(t,r);for(let o of(s.push({update:()=>{e.transparent=a}}),e.layers)){let e=t.layers?.data(o.uuid),a=i.layers.data(o.uuid);if(a&&("light"===o.type||(o.visible??!0)&&(a.visible??!0)))for(let t of o.getNames().filter(e=>!gC.some(t=>e.includes(t))))try{let i=o.getValue(t),l;if("colors"===t)l=function(e,t,i,r="colors"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a.map(e=>e.toArray()),l=i[r];for(let e=0;e<a.length;++e){let t=[...o[e]],i=[...l[e]];gi.isEqual(t,i)||s.push({update:r=>{a[e].fromArray(gi.lerp(t,i,r))},start:()=>{a[e].fromArray(t)},end:()=>{a[e].fromArray(i)}})}return s.length?s:void 0}(o,e,a,t);else if(Array.isArray(i))"steps"===t&&(l=function(e,t,i,r="steps"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a,l=i[r];return uB(o,l)||s.push({update:t=>{let i=[...a];for(let e=0;e<a.length;++e){let r=o[e],s=l[e];i[e]=tZ.lerp(r,s,t)}e.setValue(r,i)},start:()=>{e.setValue(r,o)},end:()=>{e.setValue(r,l)}}),s.length?s:void 0}(o,e,a,t));else if("number"==typeof i)l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:e.getValue(r),o=i[r],l="string"==typeof a?Number(s.getVariable(a)??0):a,h="string"==typeof o?Number(s.getVariable(o)??0):o;if(l!==h)return{update:t=>{e.setValue(r,tZ.lerp(l,h,t))},start:()=>{e.setValue(r,l)},end:()=>{e.setValue(r,h)}}}(o,e,a,t,r);else{if("boolean"==typeof i)continue;i instanceof tK?l=function(e,t,i,r){if(!e.hasValue(r)||!(r in i))return;let s=e.getValue(r),a=t?new tK().fromArray(t[r]):s.clone(),o=new tK().fromArray(i[r]);if(!a.equals(o))return{update:e=>{s.lerpVectors(a,o,e)},start:()=>{s.copy(a)},end:()=>{s.copy(o)}}}(o,e,a,t):i instanceof ix?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=e.getValue(r),o=t?t[r]:void 0,l=i[r],h=o?Oe(new ix,o,s):a.clone(),c=Oe(new ix,l,s);if(!h.equals(c))return{update:e=>{a.lerpVectors(h,c,e)},start:()=>{a.copy(h)},end:()=>{a.copy(c)}}}(o,e,a,t,r):i instanceof SU?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new is().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new SU(o.r,o.g,o.b,o.a);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):i instanceof is?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new is().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new is().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):"isTexture"in i&&(l=function(e,t,i,r="texture"){if(!e.hasValue(r)||!(r in i))return;let s=e.getNode("rotation"),a=t?.[r]?.rotation??0,o=i[r]?.rotation??0;if(s&&a!==o)return{update:e=>{s.value=tZ.lerp(a,o,e)*tZ.DEG2RAD},start:()=>{s.value=a*tZ.DEG2RAD},end:()=>{s.value=o*tZ.DEG2RAD}};let l=e.getNode("mat");if(!l)return;let h=t?t[r]:l,c=i[r],d=[...h.repeat],u=[...h.offset],p=[...c.repeat],f=[...c.offset],m=h.rotation??0,g=c.rotation??0;if(!ge.isEqual(d,p)||!ge.isEqual(u,f)||m!==g)return{update:e=>{l.repeat=ge.lerp(d,p,e),l.offset=ge.lerp(u,f,e),l.rotation=tZ.lerp(m,g,e),l.updateMatrix()},start:()=>{l.repeat=[...d],l.offset=[...u],l.rotation=m,l.updateMatrix()},end:()=>{l.repeat=[...p],l.offset=[...f],l.rotation=g,l.updateMatrix()}}}(o,e,a,t))}l&&(Array.isArray(l)?s.push(...l):s.push(l))}catch(e){console.error(`lerpMaterial: unexpected material layer for ${t}`,e)}}return s}var Oo=new ix,Ol=new i5;function Oh(e,t,i,r,s){let a=[];return e.data.visible&&a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f;if(e instanceof TZ?((o=Or("position",e,t,i,s))&&a.push(o),(h=I9("rotation",e,t,i,s))&&a.push(h),(c=Or("shear",e,t,i,s))&&a.push(c)):((u=I9("slide",f={slide:t.pathSnapping?.slide??e.updatedPathSnapping?.slide??e.dataPatched.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??e.updatedPathSnapping?.offset??e.dataPatched.pathSnapping?.offset??0},t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(u),(p=I9("offset",f,t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(p),!u&&!p&&((o=Ot("position",e,t,i,s))&&a.push(o),(l=Ot("scale",e,t,i,s))&&a.push(l),(h=function(e,t,i,r,s){let a=t?.rotation?t.rotation.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tZ.DEG2RAD):void 0,o=i.rotation?.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tZ.DEG2RAD);if(!o)return;let l=a?new ix().fromArray(a):new ix().setFromEuler(e.rotation),h=new ix().fromArray(o);if(l.equals(h))return;let c=Oo.subVectors(h,l);
7684if(!(r&&c.toArray().every(e=>Math.abs(e)<2*Math.PI)))return{update:t=>{Oo.lerpVectors(l,h,t),e.rotation.setFromVector3(Oo)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}};{let t=new iy().setFromEuler(Ol.setFromVector3(l)),i=new iy().setFromEuler(Ol.setFromVector3(h));return{update:r=>{!function(e,t,i,r){if(0===r)return i.copy(e);if(1===r)return i.copy(t);let s=e.w*t.w+e.x*t.x+e.y*t.y+e.z*t.z;if(s>=1)return i.copy(e);let a=1-s*s;if(a<=Number.EPSILON){let s=1-r;return i.w=s*e.w+r*t.w,i.x=s*e.x+r*t.x,i.y=s*e.y+r*t.y,i.z=s*e.z+r*t.z,i.normalize()}let o=Math.sqrt(a),l=Math.atan2(o,s),h=Math.sin((1-r)*l)/o,c=Math.sin(r*l)/o;i.w=e.w*h+t.w*c,i.x=e.x*h+t.x*c,i.y=e.y*h+t.y*c,i.z=e.z*h+t.z*c}(t,i,e.quaternion,r)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}}}}(e,t,i,r,s))&&a.push(h),(d=function(e,t,i,r){let s=i[e]?i[e]:void 0,a=r[e];if(!a)return;let o=t[e],l=s?new iQ().fromArray(s):o.clone(),h=new ix,c=new iy,d=new ix;l.decompose(h,c,d);let u=new iQ().fromArray(a),p=new ix,f=new iy,m=new ix;if(u.decompose(p,f,m),!l.equals(u))return{update:e=>{I8.slerpQuaternions(c,f,e),I5.lerpVectors(h,p,e),I6.lerpVectors(d,m,e),o.compose(I5,I8,I6)},start:()=>{o.compose(h,c,d)},end:()=>{o.compose(p,f,m)}}}("hiddenMatrix",e,t,i))&&a.push(d))),o||l||h||d||u||p){let i=e instanceof TZ?()=>{e.updateWorldMatrix(!0)}:()=>{e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e.parent?.matrixWorldFusedFalse&&(e.matrixWorld.multiplyMatrices(e.parent.matrixWorldFusedFalse,e.matrix),e.matrixWorldNeedsUpdate=!1),EA(e)&&EM(e.parent)&&e.invali
7684dateDownstreamBooleanData(!0),e.updatePathSnapping(Object.assign({},t.pathSnapping,f))};a.push({update:i,start:i,end:i})}return a}(e,t,i,s,r)),e instanceof TZ?a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f,m,g,v,y,x,b,w;if("width"in e&&(o=I9("width",e,t,i,s))&&a.push(o),"height"in e&&(l=I9("height",e,t,i,s))&&a.push(l),e instanceof Pl||e instanceof Pp){let r={...t.fill},o={...i.fill};void 0!==r.enabled&&r.enabled!==o.enabled&&(a.push({update:()=>{e instanceof Pl&&(e.fill.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(h=Os("color",e.fill,r,o,s))&&a.push(h)}if(e instanceof Pl){let r={...t.stroke},o={...i.stroke};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pl&&(e.stroke.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(c=Os("color",e.stroke,r,o,s))&&a.push(c),(d=I9("thickness",e.stroke,r,o,s))&&a.push(d)}if(e instanceof Pl){let r={...t.dropShadow},o={...i.dropShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pl&&(e.dropShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(u=Os("color",e.dropShadow,r,o,s))&&a.push(u),(p=I9("blurRadius",e.dropShadow,r,o,s))&&a.push(p),(m=I9("spread",e.dropShadow,r,o,s))&&a.push(m),(f=Or("offset",e.dropShadow,r,o,s))&&a.push(f)}if(e instanceof Pl){let r={...t.innerShadow},o={...i.innerShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pl&&(e.innerShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(g=Os("color",e.innerShadow,r,o,s))&&a.push(g),(v=I9("blurRadius",e.innerShadow,r,o,s))&&a.push(v),(x=I9("spread",e.innerShadow,r,o,s))&&a.push(x),(y=Or("offset",e.innerShadow,r,o,s))&&a.push(y)}if(e instanceof Pl||e instanceof Pp){let r={...t.backgroundBlur},o={...i.backgroundBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pl&&(e.backgroundBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(b=I9("radius",e.backgroundBlur,r,o,s))&&a.push(b)}if(e instanceof Pl){let r={...t.layerBlur},o={...i.layerBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pl&&(e.layerBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(w=I9("radius",e.layerBlur,r,o,s))&&a.push(w)}if(e instanceof Pp||e instanceof Pc){let r=I7("cornerRadius",e,t,i,s);r&&a.push(r)}return a}(e,t,i,0,r)):(e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("cloner"in i)||!e.cloner)return s;let a=e.cloner,o="cloner"in t?t.cloner:{},l=i.cloner;mp.forEach(e=>{let t;(t="count"===e?I9("count",a.parameters,o,l,r,!0):Oa(e,a.parameters,o??{},l,r))&&s.push(t)});let h=function(e,t,i,r){if("radial"!==e.parameters.type)return;let s=t.radial,a=i.radial;if(!a)return;let o=e.parameters.radial,l=[];return mf.forEach(e=>{let t=Oa(e,o,s??{},a,r);t&&l.push(t)}),l}(a,o,l,r);h?.length&&s.push(...h);let c=function(e,t,i,r){if("linear"!==e.parameters.type)return;let s=t.linear,a=i.linear;if(!a)return;let o=[],l=e.parameters.linear;return mm.forEach(e=>{let t=Oa(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);c?.length&&s.push(...c);let d=function(e,t,i,r){if("grid"!==e.parameters.type)return;let s=t.grid,a=i.grid;if(!a)return;let o=[],l=e.parameters.grid;return mg.forEach(e=>{let t;(t="count"===e?I7(e,l,s??{},a,r,!0):Oa(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);d?.length&&s.push(...d);let u=function(e,t,i,r){if("toObject"!==e.parameters.type)return;let s=t.toObject,a=i.toObject;if(!a)return;let o=[],l=e.parameters.toObject;return mv.forEach(e=>{let t;(t="count"===e?I9(e,l,s??{},a,r,!0):Oa(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);u?.length&&s.push(...u);let p=function(e,t,i,r){if(!e.parameters.randomness)return;let s=t.randomnessObject,a=i.randomnessObject;if(!a)return;let o=[],l=e.parameters.randomnessObject;
7684return my.forEach(e=>{let t=Oa(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);return p?.length&&s.push(...p),s.length&&s.push({update:()=>{a.update()}}),s}(e,t,i,r)),EA(e)?(e instanceof MS&&e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("geometry"in i))return s;let a=e.geometry.userData.parameters,o="geometry"in t?t.geometry:{},l=i.geometry;if(e instanceof MC){let t=function(e,t,i,r){if(void 0===i.scaleBaked)return;let s=(t.scaleBaked??e.data.geometry.scaleBaked).map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e),a=i.scaleBaked.map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e);if(gt.isEqual(s,a))return;let o=[];return o.push({update:t=>{e.updateGeometryInteractions({scaleBaked:[tZ.lerp(s[0],a[0],t),tZ.lerp(s[1],a[1],t),tZ.lerp(s[2],a[2],t)]},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},start:()=>{e.updateGeometryInteractions({scaleBaked:s},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},end:()=>{e.updateGeometryInteractions({scaleBaked:a},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()}}),o}(e,o,l,r);t&&s.push(...t)}else{let t={};if(Object.assign(t,uj(a,gO),uj(o,gO)),gO.forEach(e=>{let i=Oa(e,t,o,l,r);i&&s.push(i)}),e instanceof PB){Object.assign(t,{extrusion:{...a.extrusion}});let e=function(e,t,i,r){if(!i.extrusion)return;let s=e.extrusion,a=t.extrusion??{},o=i.extrusion,l=[];return gI.forEach(e=>{let t=Oa(e,s,a,o,r);t&&l.push(t)}),l}(t,o,l,r);e&&s.push(...e)}s.length&&s.push({update:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},start:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},end:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()}})}return s}(e,t,i,r)),e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(Array.isArray(e.material)){if(!("materials"in i&&i.materials))return s;let a="materials"in t&&t.materials?t.materials:[],o=i.materials;e.material.forEach((e,t)=>{if(!o[t])return;let i=a[t]??{},l=o[t];"string"==typeof i||"string"==typeof l||s.push(...On(e,i,l,r))})}else{if(!("material"in i&&i.material))return s;let a="material"in t&&t.material?t.material:{},o=i.material;if("string"==typeof a||"string"==typeof o)return s;s.push(...On(e.material,a,o,r))}return s}(e,t,i,r))):EC(e)?e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(void 0!==i.intensity){let a=I9("intensity",e,t,i,r);a&&s.push(a)}if(void 0!==i.color){let a=function(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?"string"==typeof a?s.getColor(a).clone():new is().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new is().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:i=>{d.lerpColors(h,c,i),t[e]?.copy?.(d)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}("color",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r)):EE(e)&&a.push(...function(e,t,i,r){let s=[],a="OrthographicCamera"===e.cameraType?t.orthographic?.zoom:t.perspective?.zoom,o="OrthographicCamera"===e.cameraType?i.orthographic?.zoom:i.perspective?.zoom;if(void 0!==o){let t=a??e.zoom;t!==o&&s.push({update:i=>{e.zoom=tZ.lerp(t,o,i),e.updateProjectionMatrix()},start:()=>{e.zoom=t,e.updateProjectionMatrix()},end:()=>{e.zoom=o,e.updateProjectionMatrix()}})}if(void 0!==i.targetOffset){let a=I9("targetOffset",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r))),a.length?{update:e=>{a.forEach(t=>t.update(e))},start:e=>{a.forEach(t=>t.start?.(e))},end:e=>{a.forEach(t=>t.end?.(e))}}:void 0}var Oc=new ix;function Od(e,t,i=!1){let r=[],s=i=>{let r=i.data;for(let e of(delete i.states,i.currentState=null,i.reversibleToState=null,i.currentTransitionEvent=null,r.states)){let t={...e.data};i.states||(i.states={}),i.states[e.id]=yO.patch(r,t)}Op(e.scene,i,null,t,void 0!==r.events.find(e=>"Follow"===e.data.type||"LookAt"===e.data.type)),Ou(e)};e.scene.traverse2D(s),e.traverseChildren(a=>{if(i&&(a.rigidBody?.setTranslation(a.position0,!0),a.rigidBody?.setRotation(a.rotation0,!0),a.rigidBody?.setLinvel(Oc,!0),a.rigidBody?.setAngvel(Oc,!0)),!wZ.is(a))return;let o=a.uuid,l=a.data;if(delete a.states,a.uuid===mc)return;let h=!1;for(let t of(r.some(t=>e.scene.find(o)?.isDescendantOf(t))?h=!0:l.physics?.fusedBody===!0&&"dynamic"===l.physics.rigidBody&&r.push(o),a.data=l,a.currentState=null,a.reversibleToState=null,a.currentTransitionEvent=null,l.states)){let i={...t.data};!0===e.data.globalPhysics.usePhysics&&l.physics&&("dynamic"===l.physics.rigidBody||h)&&(void 0!==t.data.position&&delete i.position,void 0!==t.data.rotation&&delete i.rotation,void 0!==t.data.hiddenMatrix&&delete i.hiddenMatrix),a.states||(a.states={}),a.states[t.id]=yn.patch(l,i)}Op(e.scene,a,null,t,void 0!==l.events.find(e=>
7684"Follow"===e.data.type||"LookAt"===e.data.type)),Ou(e),a instanceof PV&&a.frame&&(a.frame.traverse(e=>s(e)),a.uiCanvas?.applySize())}),e.frame&&(e.frame.traverse(e=>s(e)),e.uiCanvas?.applySize())}function Ou(e){e.traverseEntity(t=>{for(let i of t.data.events){let t=[];switch(i.data.type){case"Follow":case"MouseHover":case"Scroll":case"MouseDown":case"MouseUp":case"MousePress":case"KeyUp":case"KeyDown":case"KeyPress":case"Collision":t.push(...i.data.actions);break;case"GameControl":for(let e of Object.values(i.data.gameActions))t.push(...e);break;case"DragDrop":t.push(...i.data.dragDropActions.drag,...i.data.dragDropActions.drop);break;case"Conditional":t.push(...i.data.inActions,...i.data.outActions)}for(let i of t)if("Create"===i.data.type&&"Yes"===i.data.hideBase){let t=e.scene.find(i.data.object);t&&(t.visible=!1)}}})}function Op(e,t,i,r,s=!1){if(t instanceof MS&&t.removeInteractionGeometry(r),t instanceof TZ?t.changeSelectedState(i,{shared:r},s):t.changeSelectedState(i,{scene:e,shared:r},s),t instanceof MS&&t.updateGeometryGroupsIfNeeded(),t instanceof Ey&&t.updateCameraState(t.dataPatched,{scene:e,shared:r}),!(t instanceof TZ)){if(t.cloner)for(let e of t.cloner.children)e.playModeVisible=void 0;t.updateVisible()}}function Of(e){let t;if(5===e.easing){let{control1:i,control2:r}=e;t=`cubicBezier( 7685 ${i[0]}, ${i[1]}, ${r[0]}, ${r[1]} 7686 )`}else if(6===e.easing){let{mass:i,stiffness:r,damping:s,velocity:a}=e;t=`spring( ${i}, ${r}, ${s}, ${a} )`}else{let i;switch(e.easing){case 0:default:i=gc.linear;break;case 1:i=gc.ease;break;case 2:i=gc.easeIn;break;case 3:i=gc.easeOut;break;case 4:i=gc.easeInOut}let[r,s,a,o]=i;t=`cubicBezier( ${r}, ${s}, ${a}, ${o} )`}return{duration:Math.max(e.duration,1e-4),easing:t}}function Om(e){let t={delay:0,loop:-1===e.repeat||e.repeat+1};if(0===e.repeat)t.direction="normal",t.rewind=!1;else switch(e.direction){case"pingpong":t.direction="alternate",t.rewind=!1;break;case"pingpong-rewind":t.direction="alternate",t.rewind=!0;break;default:t.direction="normal",t.rewind=!1}switch(t.delay=0,t.endDelay=0,t.startOnceDelay=0,t.pingPongDelayCorrection=0,t.pingPongEndDelayCorrection=0,e.delayDirection){case"start-once":t.startOnceDelay=e.delay;break;case"start":t.delay=e.delay;break;case"end":t.endDelay=e.delay;break;case"start-end":case void 0:t.delay=e.delay,t.endDelay=e.delay}return"alternate"===t.direction&&(t.delay/=2,t.endDelay/=2,"start"===e.delayDirection?(t.pingPongDelayCorrection=t.delay,"number"==typeof t.loop&&t.loop%2==0&&(t.pingPongEndDelayCorrection=t.delay)):"end"===e.delayDirection?"number"==typeof t.loop&&t.loop%2!=0&&(t.pingPongEndDelayCorrection=t.endDelay):"start-end"===e.delayDirection&&(t.pingPongDelayCorrection=t.delay,t.pingPongEndDelayCorrection=t.endDelay)),t}var Og={type:"beginState"},Ov={type:"completeState",isfromEntity:!1},Oy=class{constructor(e,t,i,r,s,a){if(this.object=e,this.data=r,this.sharedAssets=s,this.allowSlerp=a,this.targets={t:0},this.firstLoop=!0,this._changeBegan=!1,this._changeCompleted=!0,this.onChange=()=>{this.callback&&(this.callback.update(this.targets.t),this.object.requestRender()),0===this.targets.t||1===this.targets.t?this._changeCompleted||(this._changeCompleted=!0,this._changeBegan=!1,this.onChangeComplete()):(this._changeCompleted&&(this._changeCompleted=!1),this._changeBegan||(this._changeBegan=!0,this.onChangeBegin()))},this.onChangeBegin=()=>{this.object.reversibleToState=this.to.id;let e=this.targets.t>.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"beginState",state:e}),this.object instanceof TZ||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Ey&&e.dispatchEvent(Og)})},this.onChangeComplete=()=>{this.firstLoop&&(this.onFirstLoop(),this.firstLoop=!1),this.object.reversibleToState=this.to.id;let e=this.targets.t<.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"completeState",state:e}),this.object instanceof TZ||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Ey&&e.dispatchEvent(Ov)})},this.onFirstLoop=()=>{this.useCurrentState&&(this.callback=Oh(this.object,this.from.data,this.to.data,this.sharedAssets,this.allowSlerp))},void 0===t){let e=Ob(this.object,this.object.currentState===i?this.object.prevState:this.object.currentState);if(!e)throw Error("Missing property");this.from=e}else{let e=Ob(this.object,t);if(!e)throw Error("Missing property");this.from=e}if(void 0===i)throw Error("Missing property");{let e=Ob(this.object,i);if(!e)throw Error("Missing property");this.to=e}this.useCurrentState=void 0===t||void 0===i,this.params={targets:this.targets,t:1,autoplay:!1,...Om(r),...Of(r),change:this.onChange},this.callback=Oh(this.object,void 0===t?{}:this.from.data,void 0===i?{}:this.to.data,this.sharedAssets,this.allowSlerp)}get changeBegan(){return this._changeBegan}get changeCompleted(){return this._changeCompleted}},Ox=class extends tz{constructor(e,t,i,r,s){if(super(),this.eventType=e,this.data=t,this.page=i,this.shared=r,this.condition=s,this.toggleIsForward=!1,this.timelineNeedsRebuild=!1,this.hasPlayedOnce=!1,this.onTimelineChangeComplete=()=>{"normal"!==this.data.tweens[0].data.direction&&(this.toggleIsForward=!this.toggleIsForward),!1!==this.timelineNeedsRebuild&&(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!1,isRebuild:!0}),this.timeline.play())},!t.object)throw Error("Missing property");let a=this.page.scene.find(t.object)??this.page.uiCanvas?.find(t.object)??this.page.scene.find2DInUIObjects(t.object);if(!a||!a.states||(this.object=a,t.tweens.length<2))throw Error("Missing property");this.tweens=Array(this.data.tweens.length-1),this.startOnceDelay="start-once"===t.tweens[0].data.delayDirection?t.tweens[0].data.delay:0,this.init()}get playing(){return this.timeline?.paused===!1}
7686get changeBegan(){return this.tweens.some(e=>e.changeBegan)??!1}init(){this.initialCurrentState=Ob(this.object,this.object.currentState).id,this.toggleIsForward=!1}get currentState(){return"Toggle"===this.data.runMode&&ms(this.eventType)?this.initialCurrentState:this.object.currentState}buildTimeline({isForward:e=!0,needsRebuild:t=!1,isRebuild:i=!1}={}){try{let r=Om(this.data.tweens[0].data);i&&"number"==typeof r.loop&&r.loop--,this.timeline?.pause(),this.timeline=I3.timeline({autoplay:!1,...r,...!0===r.loop||r.loop>1?{timelineChangeComplete:this.onTimelineChangeComplete}:{}});let s=this.tweens.findIndex(e=>e?.changeBegan);if(!0===t&&(this.timelineNeedsRebuild=!0),e){let e=-1===s?0:s;for(let t=e;t<this.data.tweens.length-1;t++){let i=this.data.tweens[t],a=this.data.tweens[t+1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Ey&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new Oy(this.object,o,void 0===a.data.state?this.currentState:a.data.state,a.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.delay:0))}this.timeline.duration+=r.endDelay}else{let e=-1===s?this.data.tweens.length-1:s+1;for(let t=e;t>0;t--){let i=this.data.tweens[t],a=this.data.tweens[t-1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Ey&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new Oy(this.object,o,void 0===a.data.state?this.currentState:a.data.state,i.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t-1]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.endDelay:0))}this.timeline.duration+=r.delay}}catch(e){e instanceof Error&&console.error(e.message)}this.object.previousAction?.playing===!0&&this.object.previousAction.pause(),this.object.previousAction=this}play(){if(!1===OO(this.shared,this.condition)||ms(this.eventType)&&"Once"===this.data.runMode&&this.hasPlayedOnce||(this.hasPlayedOnce=!0,this.playing))return!1;clearTimeout(this.timeoutId);let e=Om(this.data.tweens[0].data).pingPongDelayCorrection;this.timeoutId=window.setTimeout(()=>{try{this.buildTimeline(),this.timeline.play()}catch(e){e instanceof Error&&console.error(e.message)}},this.startOnceDelay+e)}pause(){this.timeline?.pause(),clearTimeout(this.timeoutId),this.tweens=Array(this.data.tweens.length-1),delete this.timeoutId}stop(){this.pause();let e=void 0===this.data.tweens[0].data.state?this.initialCurrentState:this.data.tweens[0].data.state;this.object instanceof TZ?this.object.changeSelectedState(e,{shared:this.shared}):this.object.changeSelectedState(e,{scene:this.page.scene,shared:this.shared}),this.object.currentState=e}seek(e){if(!1===OO(this.shared,this.condition))return!1;void 0===this.timeline&&this.buildTimeline(),this.timeline?.seek(e*this.timeline.duration,!0)}toggle(e){if(!1===OO(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),this.toggleIsForward=e??!this.toggleIsForward,this.playing?(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!0}),this.timeline.play()):this.timeoutId=window.setTimeout(()=>{this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward}),this.timeline.play()},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause()}};function Ob(e,t){let i,r;if("string"==typeof t?(i=t,r=e.states?.[i]):null===t&&(i=null,r=e.data),!(void 0===i||void 0===r))return{id:i,data:r}}var Ow={type:"beginState"},OS={type:"completeState",isfromEntity:!1},O_={type:"requestRender"},OA=class extends tz{constructor(e,t,i,r){super(),this.data=e,this.page=t,this.shared=i,this.condition=r,this.toggleIsForward=!1,this.posStart=new ix,this.posEnd=new ix,this.qStart=new iy,this.qEnd=new iy,this.zoomStart=1,this.zoomEnd=1}init(){}get playing(){return this.animation&&this.animation.began&&!this.animation.completed}buildAnimation(e=!1){if(!this.data.animate)return;let t=this.page.scene.find(this.data.targetCamera);if(!t||!t.visible)throw ReferenceError("Target camera not founded or not visible");let i={t:0};this.posStart.copy(this.page.activeCamera.position),this.qStart.copy(this.page.activeCamera.quaternion),this.zoomStart=this.page.activeCamera.zoom,this.animation=I3({targets:i,t:1,...Of(this.data),update:()=>{0===i.t&&("Toggle"!==this.data.runMode||this.toggleIsForward?(this.posEnd.copy(t.position),this.qEnd.copy(t.quaternion),this.zoomEnd=t.zoom,this.fromCamera=this.page.activeCamera,this.switchCamera(t.uuid)):this.fromCamera&&(this.posEnd.copy(this.fromCamera.position),this.qEnd.copy(this.fromCamera.quaternion),this.zoomEnd=this.fromCamera.zoom,this.switchCamera(this.fromCamera.uuid)),this.page.activeCamera.dispatchEvent(Ow)
7686);let e=this.page.activeCamera;e.position.lerpVectors(this.posStart,this.posEnd,i.t),e.quaternion.slerpQuaternions(this.qStart,this.qEnd,i.t),e.zoom=this.zoomStart+(this.zoomEnd-this.zoomStart)*i.t,e.wasMovedBySwitchCameraAction=!0,e.updateMatrix(),e.updateMatrixWorld(),e.updateProjectionMatrix(),e.dispatchEvent(O_),1===i.t&&e.dispatchEvent(OS)}})}switchCamera(e){let t=this.page.activeCamera,i=this.page.scene.find(e);if(!i||!i.visible)throw ReferenceError("Target camera not founded or not visible");this.page.switchActiveCamera(i),t.dispatchEvent({type:"cameraChange",camera:i})}play(){if(!1===OO(this.shared,this.condition))return!1;if(!this.playing&&this.page.activeCamera.uuid!==this.data.targetCamera)try{clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{delete this.timeoutId,this.data.animate?(this.buildAnimation(),this.animation?.play()):this.switchCamera(this.data.targetCamera)},1e3*this.data.delay)}catch{}}pause(){this.animation?.pause(),clearTimeout(this.timeoutId),delete this.timeoutId}toggle(e){if(!1===OO(this.shared,this.condition))return!1;if(window.clearTimeout(this.timeoutId),delete this.timeoutId,e!==this.toggleIsForward)try{this.playing?(this.animation?.pause(),this.toggleIsForward=e??!this.toggleIsForward,this.buildAnimation(!0),this.animation?.play()):this.timeoutId=window.setTimeout(()=>{this.toggleIsForward=e??!this.toggleIsForward,this.data.animate?(this.animation?.pause(),this.buildAnimation(),this.animation?.play()):(this.toggleIsForward?(this.fromCamera=this.page.activeCamera,this.switchCamera(this.data.targetCamera)):this.fromCamera&&this.switchCamera(this.fromCamera.uuid),this.page.activeCamera.dispatchEvent(OS),this.page.activeCamera.dispatchEvent(O_))},1e3*this.data.delay)}catch{}}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause(),this.toggleIsForward=!1}};function OM(e){let t=e?.tracks.filter(e=>"vector"===e.ValueTypeName||"quaternion"===e.ValueTypeName).map(e=>e.times.length);if(t?.length){let e=t&&t.length?uz(t,h2,uL):void 0;return e&&e>2?e:2}return 2}var OE=class extends tz{constructor(e,t,i,r,s){super(),this.data=e,this.page=t,this.animationControls=i,this.shared=r,this.condition=s,this.startOnceDelay=0,this.toggleIsForward=!1;let a=e.object,o=t.scene.find(e.object);o&&Array.isArray(o.identity)&&(a=o.identity[0]),this.data={...e,object:a};let l=this.animationControls.clipIdToAction[e.clipId+"/"+a];if(this.duration=l?.getClip()?.duration??1,this.data.crop2){let e=OM(l?.getClip());this.leftFrameTime=this.data.crop2[0]/(e-1)*this.duration,this.rightFrameTime=this.data.crop2[1]/(e-1)*this.duration}else{let e=l?.getClip()?.tracks[0]?.times.length;e&&e>1?(this.leftFrameTime=this.data.crop[0]/e*this.duration,this.rightFrameTime=this.data.crop[1]/e*this.duration):(this.leftFrameTime=0,this.rightFrameTime=this.duration)}this.startOnceDelay=e.delay}get playing(){return this.threeAnimAction?.isRunning()??!1}play(e=!1){if(!1===OO(this.shared,this.condition))return!1;window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),!this.threeAnimAction)return;this.threeAnimAction.reset(),this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime;let t=this.data.object;Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===t&&r.isRunning()&&(e?r.fadeOut(.2):r.stop())}),e&&this.threeAnimAction?.fadeIn(.2)},this.startOnceDelay)}pause(){this.threeAnimAction&&(this.threeAnimAction.paused=!0),window.clearTimeout(this.timeoutId),delete this.timeoutId}stop(){this.threeAnimAction?.fadeOut(.2)}seek(e){this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction&&(this.threeAnimAction.paused=!0,this.threeAnimAction.time=tZ.clamp(this.threeAnimAction.time+1/60*e,this.leftFrameTime,this.rightFrameTime-16e-5),this.animationControls.needsUpdate=!0,this.animationControls.requestRender())}toggle(e,t=!1){if(!1===OO(this.shared,this.condition))return!1;this.toggleIsForward=e??!this.toggleIsForward,this.threeAnimAction&&(this.threeAnimAction._loopCount=0),this.playing?this.threeAnimAction&&(this.threeAnimAction.timeScale=this.toggleIsForward?1:-1,this.toggleIsForward?(this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime)):this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction){this.toggleIsForward?(this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction.time=this.rightFrameTime,this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime),this.threeAnimAction.paused=!1,this.threeAnimAction.timeScale=this.toggleIsForward?1:-1;let e=this.data.clipId.split("/")[1];
vendor: 4,197 bytes, line 7686
7686Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===e&&r.isRunning()&&(t?r.fadeOut(.2):r.stop())}),t&&this.threeAnimAction?.fadeIn(.2)}},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){let e=this.animationControls.clipIdToAction[this.data.clipId+"/"+this.data.object]?.getClip();e&&(e.duration=this.duration),this.pause()}},OC=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.eventManager=i,this.shared=r,this.condition=s,this.timeOutId=-1,this.scene=t.scene}dispatch(){if(!1===OO(this.shared,this.condition))return!1;this.data.target!==this.page.uuid&&(window.clearTimeout(this.timeOutId),this.timeOutId=window.setTimeout(()=>{this.play()},1e3*this.data.delay))}dispose(){window.clearTimeout(this.timeOutId)}play(){if(this.scene.children.every(e=>e.uuid!==this.data.target))return;"fade"===this.data.transition&&this.data.duration>0&&this.eventManager.eventContext.renderer.renderFromSceneForSceneTransitionPass(this.scene,this.scene.activeCamera,1e3*this.data.duration),this.eventManager.deactivate(),this.eventManager.controlsManager.deactivate();let e=this.scene.activeCamera;this.scene.updatePage(this.data.target),this.scene.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.sleep(),e.wakeUp(),e.data.autoPlay?e.start():e.stop())}),this.scene.activePage.switchToPlayCamera(),this.scene.activeCamera.copyViewPlaneSize(e),Od(this.scene.activePage,this.shared),this.eventManager.activate(),this.eventManager.controlsManager.activate(this.eventManager)}},OT=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.evaluatedCondition=!1}checkConditions(){this.evaluatedCondition=OO(this.shared,this.condition)}dispatch(){if(!1===this.evaluatedCondition)return!1;let e=this.shared.getVariable(this.data.variableId),t=wj(this.data.expression,this.shared,yv.typeOfVariable(e));void 0!==t&&this.shared.updateVariable(this.data.variableId,"string"==typeof t?{textValue:t}:t)}dispose(){}},OP=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.timeoutId=null}dispatchInner(){if(!1===OO(this.shared,this.condition))return!1;let e=this.shared.getDynamicVariablePlayState(this.data.variableId);if("PlayPause"===this.data.mode)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"===e?"Paused":"Playing");else if("Play"===this.data.mode&&"Playing"!==e)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing");else if("Stop"===this.data.mode&&"Stopped"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Stopped");else if("Pause"===this.data.mode&&"Paused"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Paused");else if("Restart"===this.data.mode)this.shared.setDynamicVariablePlayState(this.data.variableId,"Restarted");else if("Toggle"===this.data.mode){let t=this.shared.getDynamicVariableToggleIsForward(this.data.variableId);"Playing"===e?this.shared.setDynamicVariableToggleIsForward(this.data.variableId,void 0!==t&&!t):(this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!t),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"))}}dispatch(){let e=this.data.delay,t=this.shared.getDynamicVariablePlayState(this.data.variableId);"PlayPause"===this.data.mode&&"Playing"===t&&(e=this.data.pauseDelay),0!==e?(this.timeoutId&&window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{this.timeoutId=null,this.dispatchInner()},e)):this.dispatchInner()}dispose(){this.timeoutId&&window.clearTimeout(this.timeoutId)}},OD=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===OO(this.shared,this.condition))return!1;("single"===this.data.target?this.data.variableId?[this.data.variableId]:[]:Object.keys(this.shared.getVariables())).forEac
7686h(e=>{this.shared.getVariable(e);let t=this.shared.data.variables.data(e)?.value;void 0!==t&&this.shared.updateVariable(e,t),this.shared.enableLocalStorageForPersistentVariables&&localStorage.removeItem(Mp(e))})}dispose(){}},OI=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===OO(this.shared,this.condition))return!1;this.data.userAPIId&&this.shared.getUserAPI(this.data.userAPIId)?.callUserAPI(this.shared)}dispose(){}};function OO(e,t){if(void 0===t)return!0;if(0===t.expression.length)return!1;let i=wj(t.expression,e,"boolean");return t.negate?!i:!!i}function OR(e,t,i,r,s,a){let o={Audio:[],Video:[],Particles:[],Link:[],Destroy:[],Create:[],Reset:[],Transition:[],SwitchCamera:[],Animation:[],SceneTransition:[],SetVariable:[],DynamicVariablePlay:[],ClearLocalStorage:[],UserAPI:[]},l=t=>({id:h,data:c})=>{try{"Audio"===c.type?mh[e.type].includes("Audio")&&o.Audio.push(new It(h,c,a,r,t)):"Video"!==c.type||a instanceof TZ?"Particles"===c.type?mh[e.type].includes("Particles")&&o.Particles.push(new Ii(c,i,r,t)):"Link"===c.type?mh[e.type].includes("Link")&&o.Link.push(new Ia(c,s.controlsManager,r,t)):"Create"===c.type?mh[e.type].includes("Create")&&o.Create.push(new OW(c,i,s.controlsManager,r,t)):"Destroy"===c.type?mh[e.type].includes("Destroy")&&o.Destroy.push(new In(c,i,s.controlsManager,r,t)):"Reset"===c.type?mh[e.type].includes("Reset")&&o.Reset.push(new Io(c,i,r,s,t)):"Transition"===c.type?mh[e.type].includes("Transition")&&o.Transition.push(new Ox(e.type,c,i,r,t)):"SwitchCamera"===c.type?mh[e.type].includes("SwitchCamera")&&o.SwitchCamera.push(new OA
7686(c,i,r,t)):"SceneTransition"===c.type?mh[e.type].includes("SceneTransition")&&o.SceneTransition.push(new OC(c,i,s,r,t)):"Animation"===c.type?mh[e.type].includes("Animation")&&o.Animation.push(new OE(c,i,s.animationControls,r,t)):"SetVariable"===c.type?mh[e.type].includes("SetVariable")&&o.SetVariable.push(new OT(c,i,r,t)):"DynamicVariablePlay"===c.type?mh[e.type].includes("DynamicVariablePlay")&&o.DynamicVariablePlay.push(new OP(c,i,r,t)):"Conditional"===c.type?mh[e.type].includes("Conditional")&&(c.ifActions.forEach(l({expression:c.condition,negate:!1})),c.elseActions.forEach(l({expression:c.condition,negate:!0}))):"ClearLocalStorage"===c.type?mh[e.type].includes("ClearLocalStorage")&&o.ClearLocalStorage.push(new OD(c,i,r,t)):"UserAPI"===c.type&&mh[e.type].includes("UserAPI")&&o.UserAPI.push(new OI(c,i,r,t)):mh[e.type].includes("Video")&&o.Video.push(new OU(h,c,a,r,t))}catch(e){}};return t.forEach(l()),o}function OL(e){Object.values(e).forEach(e=>{e.forEach(e=>{(e instanceof It||e instanceof OU||e instanceof Ii||e instanceof OE||e instanceof Ox||e instanceof OW||e instanceof In||e instanceof OA||e instanceof OC||e instanceof Io||e instanceof OT||e instanceof OP)&&e.dispose()})})}var OB=new Map,Oz=new Map,OF=class{constructor(e,t,i){this.data=t,this.delay=0,this.status="stopped";let{layerId:r,loop:s,volume:a,delay:o}=t;if(this.object=i,void 0===r)throw Error("Missing property");let l=function(e,t){let i;if("material"in e&&(i=Array.isArray(e.material)?e.material[0].layers.find(e=>e.uuid===t):e.material.layers.find(e=>e.uuid===t)),i)return i.color.texture.image.img instanceof HTMLVideoElement?i.color.texture.image.img:void 0}(i,r);l&&(this.videoElement=l,this.videoElement.loop=s===1/0,uY&&(this.videoElement.autoplay=!0),void 0!==a&&(this.videoElement.volume=a)),void 0!==o&&(this.delay=o),Oz.has(i.uuid)?Oz.get(i.uuid).push(this):Oz.set(i.uuid,[this]),OB.set(e,this),this.pause()}mute(){this.videoElement&&(this.videoElement.muted=!0)}unMute(){this.videoElement&&(this.videoElement.muted=!1)}play(e){if(!this.videoElement)return;let t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);e?(this.mute(),this.delay+=150):t?(this.mute(),window.setTimeout(()=>{this.unMute()},100)):this.unMute(),this.delayTimerId=window.setTimeout(()=>{if(!this.videoElement)return;let e=this.videoElement.play();void 0!==e&&e.then(e=>{}).catch(e=>{this.play()}),this.clearDelay()},this.delay),this.status="playing"}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}pause(){this.videoElement&&(this.videoElement.pause(),this.status="paused")}stop(){this.videoElement&&(this.videoElement.pause(),this.videoElement.currentTime=0,this.status="stopped",this.clearDelay())}playByToggle(){"stop"===this.data.toggle?"playing"===this.status?this.stop():(this.stop(),this.play()):"pause"===this.data.toggle?"playing"===this.status?this.pause():this.play():(this.stop(),this.play())}dispose(){this.videoElement&&(this.stop(),this.videoElement.muted=!0)}},ON=class{constructor(e){this.data=e}dispatch(){this.data.playVideo?this.pauseVideo(this.data.playVideo):this.data.object?this.pauseAllVideosFromObject(this.data.object):this.pauseAllVideos()}pauseVideo(e){let t=OB.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t[this.data.interaction](),this.disposeDelay()},this.data.delay)):t[this.data.interaction]())}pauseAllVideosFromObject(e){let t=Oz.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e[this.data.interaction]()))}pauseAllVideos(){let e=[...Oz.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},OU=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new OF(e,t,i);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new ON(t);else throw Error("Missing property")}
7686dispatchBasic(){if(!1===OO(this.shared,this.condition))return!1;this.interaction instanceof OF?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===OO(this.shared,this.condition))return!1;this.interaction instanceof OF?this.interaction.play():this.interaction.dispatch()}dispose(){this.interaction.dispose()}},Ok=(()=>{let e,t,i,r;function s(i){!e&&!OV()&&t?.sharedGameControlGlobals.createdObjects.length>0&&(e=requestAnimationFrame(a)),i&&(t=i,r=i.requestRender)}function a(s){let o=i?s-i:0,l=t.sharedGameControlGlobals.createdObjects,h=t.sharedGameControlGlobals.nCreatedPerAction,c=l.length,d=0;for(;d<c;){let e=l[d];void 0===e.userData.createdTime&&(e.userData.createdTime=s),void 0===e.userData.lifetime&&void 0===e.userData.quantity||e.userData.lifetime&&s-e.userData.createdTime<e.userData.lifetime||e.userData.quantity&&h[e.userData.actionId]<=e.userData.quantity?(e.userData.velocity&&(e.position.addScaledVector(e.userData.velocity,o/1e3),e.updateMatrix(),r()),d++):(h[e.userData.actionId]>e.userData.quantity&&h[e.userData.actionId]--,l.splice(d,1),e.removeFromParent(),t.sharedGameControlGlobals.rapierWorld&&e.rigidBody?(t.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),t.sharedGameControlGlobals.rapierWorld.removeRigidBody(e.rigidBody)):(e.bvhGeometry=void 0,t.sharedGameControlGlobals.entitiesWithTransformAnim=t.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry)),c--,r())}e=d>0?requestAnimationFrame(a):void 0,i=d>0?s:void 0}return"u">typeof document&&document.addEventListener("visibilitychange",function(){OV()?e&&(cancelAnimationFrame(e),e=void 0,i=void 0):s()}),s})();function OV(){return!!document&&document.hidden}var Oj=new iy,OG=new ix,OH=new ix,OW=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.intervalId=null,this.timeoutIdQueue=[],this.uniqueId=tZ.generateUUID(),this.dispatch=()=>{if(!1===OO(this.shared,this.condition))return!1;this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()},this.dispatchFromStart=()=>{if(!1===OO(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))},this.dispatchThrottled=uG(this.dispatch,1e3/this.data.creationSpeed),this.dispatchStart=()=>{null===this.intervalId&&(this.intervalId=window.setInterval(this.dispatch,1e3/this.data.creationSpeed))},this.dispatchStop=()=>{null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null)},this.dispatchInner=()=>{this.timeoutIdQueue.shift();let e=new xS(this.object);if(e.playModeVisible=!0,e.expand(),"world"!==this.data.coordinateSystem){let t=this.data.coordinateSystem,i=this.page.scene.find(t);i&&(i.updateMatrixWorldSVD(),e.hiddenMatrix.copy(i.matrixWorldRigid))}e.scale.copy(this.object.scale),e.position.fromArray(this.data.position),e.rotation.fromArray(this.data.rotation),e.updateMatrix(),this.page.add(e);let t=this.controlsManager.sharedGameControlGlobals;t.createdObjects.push(e),void 0===t.nCreatedPerAction[this.uniqueId]?t.nCreatedPerAction[this.uniqueId]=1:t.nCreatedPerAction[this.uniqueId]++,e.updateWorldMatrix(!0,!0),e.traverseObject(this.traverseObjectCB),Ok(),this.controlsManager.requestRender()},this.traverseObjectCB=e=>{let t;if(e.hasNonUniformScale&&e.updateMatrixWorldSVD(),this.controlsManager.sharedGameControlGlobals.rapierWorld){if(e instanceof Ee){if(!e.objectForSample)return!0===e.object.dataPatched.physics.fusedBody&&"dynamic"===e.object.dataPatched.physics.rigidBody||void 0;if(e.objectForSample.dataPatched.physics.fusedBody)return;t=e.object}else if(e instanceof xS)t=e.object;else if(t=e,t.dataPatched.cloner?.hideBase)return!0}else{if(e instanceof Ee)return;t=e instanceof xS?e.object:e}"Time"===this.data.destroy?e.userData.lifetime=1e3*this.data.lifetime:"Quantity"===this.data.destroy&&(e.userData.quantity=this.data.destroyAfterQuantity,e.userData.actionId=this.uniqueId);let i=new ix().fromArray(this.data.velocity),r=t.dataPatched;
7686if(!("visibility"===r.physics.enabled?!r.visible:!r.physics.enabled)&&(this.controlsManager.sharedGameControlGlobals.rapierWorld?(this.controlsManager.addRigidBody(e,t,{fromCreate:!0,dynamic:this.data.dynamic}),"Collision"===this.data.destroy&&(e.rigidBody?.collider(0).setActiveEvents(1),e.userData.hasCollisionDestroy=!0),e.matrixWorld.decompose(OG,Oj,OH),i.applyQuaternion(Oj),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&e.rigidBody?.setLinvel(i.divideScalar(this.controlsManager.pixelsPerMeter),!0)):("geometry"in e.object&&this.controlsManager.addBoundsTree(e),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&(e.userData.velocity=i)),t.dataPatched.physics?.fusedBody===!0))return!0};let a=this.page.scene.find(this.data.object);if(!a||(this.object=a,"world"!==this.data.coordinateSystem&&!this.page.scene.find(this.data.coordinateSystem)))throw Error("Missing Property");Ok(i)}dispose(){null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null),this.timeoutIdQueue.forEach(e=>window.clearTimeout(e)),this.dispatchThrottled.cancel(),this.page.remove(...this.controlsManager.sharedGameControlGlobals.createdObjects),this.controlsManager.sharedGameControlGlobals.createdObjects=[]}};new ix;var Oq=new ix,OX=new ix,OY=new ix,OQ=new ix,OZ=new ix,OK=new ix,OJ=new iQ,O$=new iQ,O0=new iQ,O1=(new iQ,new iy),O2=new iy,O3=new i5(0,0,0,"YXZ"),O4=new ix(1,0,0),O5=new ix(0,1,0),O6=new ix(0,0,1),O8=new ix(1,1,1),O9=(new ik,new lk),O7=new iS,Re={type:"requestRender"},Rt={type:"updateMatrix"},Ri=Math.PI/6,Rr=class extends tz{constructor(e,t,i,r,s,a,o,l,h){super(),this.object=e,this.domElement=t,this.data=i,this.gloabalPhysics=r,this.controlsManager=s,this.cameraFollow=a,this.camera=o,this.page=l,this.sharedAssets=h,this.enableDamping=!0,this.hiddenMatrix0=new iQ,this.target0=new ix,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.pixelsPerMeter=200,this.euler0=new i5(0,0,0,"YXZ"),this.position0Cam=new ix,this.quat0Cam=new iy,this.scale0Cam=new ix,this.hiddenMatrix0Cam=new iQ,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new lk(new ix(0,-40,0),new ix(0,40,0)),matrix:new iQ,position:new ix,rotation:new iy},this.euler=new i5(0,0,0,"YXZ"),this.eulerDelta=new ix,this.lastPosition=new ix,this.lastCameraQuaternion=new iy,this.lastCameraPosition=new ix,this.PI_2=Math.PI/2,this.prevMouse=new tK,this.velocityTarget=new ix,this.velocity=new ix,this.directionXZ=new ix,this.rotVelocityStick=new ix,this.rotVelocityTarget=new ix,this.rotVelocity=new ix,this.rotDirection=new ix,this.nonColliderRotOffset=new iQ,this.nonColliderPosOffset=new iQ,this.firstPointerId=-1,this.rot=new ix,this.path=[],this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new iQ,this.objectToTarget=new ix,this.objectToTarget0=new ix,this.objectToCamXZ=new ix,this.objectToCamXZ0=new ix,this.targetToCamera=new ix,this.targetToCamera0=new ix,this.cameraPolarAxis0=new ix,this.targetPos=new ix,this.targetQuat=new iy,this.lerpFactorPos=new ix().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new iy,this.objXZQuatInv=new iy,this.objXZRotMat=new iQ,this.isFirstPerson=!1,this.didHit=!1,this.groundVelocity=new ix,this.pushedVelocity=new ix,this.groundYRotation=0,this.objectRealQuat=new iy,this.colliderWorldQuat=new iy,this.groundNormal=new ix,this.groundTilt=new iy,this.groundTiltInv=new iy,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.navMeshPathDest=null,this.position=new ix,this.quaternion=new iy,this.scale=new ix,this.initialAction=!0,this.onPointerDown=e=>{(e.target===this.domElement||e.target instanceof HTMLElement&&"SPLINE-VIEWER"===e.target.tagName&&e.target.shadowRoot?.contains(this.domElement))&&-1===this.firstPointerId&&(this.firstPointerId=e.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),"keys"===this.rotBy||uZ||uK||this.domElement.requestPointerLock(),this.prevMouse.set(e.clientX,e.clientY))},this.onPointerUp=e=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),"mouse"===e.pointerType&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=e=>{if(e.pointerId!==this.firstPointerId)return;let t=e.clientX-this.prevMouse.x,i=e.clientY-this.prevMouse.y;this.prevMouse.set(e.clientX,e.clientY),"mouse"===e.pointerType&&"keys"!==this.rotBy&&(uK&&uJ<15.5&&!uZ?(this.eulerDelta.y=-t*this.mouseOrbitSensitivity,this.eulerDelta.x=-i*this.mouseOrbitSensitivity):(this.eulerDelta.y=-e.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-e.movementY*this.mouseOrbitSensitivity)),"mouse"!==e.pointerType&&"drag"===this.rotByTouch&&(this.eulerDelta.y=-t*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-i*this.mouseOrbitSensitivity*5),this.controlsManager.requestRender()},this.onPointerlockChange=e=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?Rr.isLocked=!0:Rr.
7686isLocked=!1},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.handleVisibilityChange=()=>{if(document?.hidden)for(let e in this.movementState)this.movementState[e]=0},this.onKeyDown=e=>{for(let t of(e.target instanceof HTMLInputElement||"ArrowLeft"!==e.code&&"ArrowUp"!==e.code&&"ArrowRight"!==e.code&&"ArrowDown"!==e.code&&"Space"!==e.code||e.preventDefault(),this.keyAssignments))if(e.key.toUpperCase()===t[1]||e.key===t[1]){this.movementState[t[0]]=1;break}this.controlsManager.requestRender()},this.onKeyUp=e=>{for(let t of this.keyAssignments)if(e.key.toUpperCase()===t[1]||e.key===t[1]||e.code.slice(3,e.code.length).toUpperCase()===t[1]){this.movementState[t[0]]=0;break}},this.copyVRGamePadValues=(e,t)=>{for(let i=2;i<4;i++){let r=e.axes[i];0===t?2===i?this.movementState.movePosX=r:this.movementState.movePosZ=r:(e.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,2===i?(.3>Math.abs(this.movementState.rotPosY)&&Math.abs(r)>=.3&&(this.vrEulerYOffset+=r<0?1:-1),this.movementState.rotPosY=r):"fly"===this.moveMode&&(this.movementState.moveNegY=r))}},this.sharedGameControlGlobals=s.sharedGameControlGlobals,e===o&&(this.isFirstPerson=!0),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.euler0.setFromQuaternion(this.quaternion,"YXZ");let c=this.euler0.clone(),d=c.y;if(this.objectRealQuat.copy(this.quaternion),c.y=0,this.quaternion.setFromEuler(c),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),c.set(0,d,0),this.quaternion.setFromEuler(c),this.rot.setFromEuler(c),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||!0===this.cameraFollow)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),!0===this.cameraFollow){let e,t;this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera.parent?(this.camera.hiddenMatrix.copy(this.camera?.parent.matrixWorld),this.camera.matrix.copy(this.camera.matrixWorld)):this.camera.hiddenMatrix.identity(),this.camera.matrix.copy(this.camera.matrixWorld),this.camera.matrix.decompose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let i=new ix(0,0,-1).applyQuaternion(this.camera.quaternion),r=new ix().subVectors(this.position,this.camera.position);this.objectToCamXZ.copy(r),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ),1e-6>Math.abs(i.y)?(r.y=0,i.y=0,t=r.projectOnVector(i)):t=r.y/i.y>0?i.multiplyScalar(r.y/i.y):i.multiplyScalar(r.length()),this.targetToCamera0.copy(t).negate(),e=this.camera.position.clone().add(t),this.objectToTarget0.subVectors(e,this.position);let s=new i5().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-s.x,s.x=0,s.z=0,s.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(s)}if(this.object instanceof Ey&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*1,this.speedOrbit=(i.speedRotate??100)*.025,this.mouseOrbitSensitivity=(i.speedRotate??100)*16e-6,this.keyAssignments=i.keyAssignments.map(e=>{let t=[e[0],e[1]];return"▲"===t[1]?t[1]="ArrowUp":"◀"===t[1]?t[1]="ArrowLeft":"▼"===t[1]?t[1]="ArrowDown":"▶"===t[1]?t[1]="ArrowRight":"⇧"===t[1]?t[1]="Shift":"↵"===t[1]?t[1]="Enter":"Space"===t[1]?t[1]=" ":"⌘"===t[1]?t[1]="Meta":"Ctrl"===t[1]?t[1]="Control":"Esc"===t[1]&&(t[1]="Escape"),t}),"mouse"===i.rotBy){let e;-1!==(e=this.keyAssignments.findIndex(e=>"rotNegX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosY"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotNegY"===e[0]))&&(this.keyAssignments[e][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(this.gloabalPhysics.gravity??vJ.defaultData.gravity)*12,this.usePhysics=this.gloabalPhysics.usePhysics??vJ.defaultData.usePhysics,this.jumpPower=20*i.jumpPower,this.resetYPosition=this.position.y+Math.abs(i.resetYPosition)*(this.gravity>0?1:-1),this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOr
7686ientMove?i.orientMode:"none",this.orientWith=i.orientWith??yA.defaultDataThirdPerson.orientWith,this.slopeThresh=65*Math.PI/180,"capsule"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height):"sphere"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*.02/this.pixelsPerMeter,this.stepThresh=2*i.collider.radius*.3/this.pixelsPerMeter,this.colliderHeight=2*i.collider.radius):(this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height),this.collider.type=i.collider.type;let u=new ix().fromArray(i.collider.position),p=new iy().setFromEuler(new i5().fromArray([...i.collider.rotation,"XYZ"]));this.collider.position.copy(u).multiply(this.scale),this.collider.rotation.copy(p),this.collider.matrix.compose(u,p,O8),void 0!==i.cameraXAxis&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),this.forwardDir=i.forwardDirection??"-z",this.isFirstPerson&&(this.forwardDir="-z"),this.runMultiplier=i.runMultiplier??2;let f=2*i.navmesh.destinationHelperRadius;if(f>0){let e=new pb;
vendor: 3,813 bytes, line 7686
7686e.push({fi:0,data:{...gE.defaultData("light","phong"),alpha:0},id:"layer1"}),e.push({fi:0,data:{...gE.defaultData("color"),color:i.navmesh.destinationHelperColor,alpha:i.navmesh.destinationHelperColor.a},id:"layer2"});let t=new AI({layers:e},{scene:this.page.scene,shared:this.sharedAssets});this.navMeshPathDest=new rJ(xj.create({parameters:{width:f,height:f/10,hollow:.7}}),t),this.navMeshPathDest.material.userData.opacity0=i.navmesh.destinationHelperColor.a}this.activate()}reset(e=!1){if(this.object.hiddenMatrix.copy(this.hiddenMatrix0),e){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity();let e=new i5().setFromQuaternion(this.quaternion,"YXZ"),t=e.y;this.objectRealQuat.copy(this.quaternion),e.y=0,this.quaternion.setFromEuler(e),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),e.set(0,t,0),this.quaternion.setFromEuler(e),this.rot.setFromEuler(e),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}else this.object instanceof Ey?this.object.matrixAutoUpdate=!0:this.object.updateMatrix();!0===this.cameraFollow&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.controlsManager.requestRender()}activate(){this.instantiateActions(),this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.addEventListener("visibilitychange",this.handleVisibilityChange)}deactivate(){this.disposeActions(),this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.removeEventListener("visibilitychange",this.handleVisibilityChange)}dispose(){this.deactivate(),this.navMeshPathDest?.parent&&this.page.remove(this.navMeshPathDest)}instantiateActions(){let e=this.data,t=this.sharedAssets;void 0!==e.gameActions&&(this.actions={},y_.list.forEach(i=>{this.actions[i]=OR({...e,disabled:!1,type:"GameControl"},e.gameActions[i],this.page,t,this.controlsManager.eventManager,this.object)})),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"),this.initialAction&&(this.initialAction=!1)}disposeActions(){this.initialAction=!1,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),OL(this.actions.idle),OL(this.actions.move),OL(this.actions.run),OL(this.actions.jump)}dispatchStartEvent(e){void 0!==this.actions[e]&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].Transition.forEach(e=>{e.play()}),this.actions[e].Animation.forEach(e=>{e.play(!1===this.initialAction)}),this.actions[e].Create.forEach(e=>{e.dispatchStart()}
7686),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("start")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("start")})))}dispatchStopEvent(e){void 0===this.actions[e]||this.actionState[e]&&(this.actionState[e]=!1,this.actions[e].Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.page.scene,shared:this.sharedAssets})}),this.actions[e].Create.forEach(e=>{e.dispatchStop()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("stop")}))}get colliderWorldPosition(){return OQ.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.position)}update(e,t,i){if(this.gravity<0?this.position.y<this.resetYPosition:this.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let s=60*r,a=!1;if(this.usePhysics&&this.collisionEnabled){let e=OZ.set(0,(0===this.velocity.y?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/120,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,16,void 0,void 0,this.object.rigidBody);if(t){this.onObject=!0,this.groundNormal.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(a=!0),t.collider.parent()?.bodyType()===0&&Math.acos(this.groundNormal.y)*(180/Math.PI)>45&&(this.onObject=!1);let e=t.collider.parent();for(let t of(this.groundYRotation=0,this.groundVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim))if(t.rigidBody===e&&t.userData.isFollowingObj!==this.object.uuid){(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(OQ,O2,OZ),this.groundVelocity.subVectors(OQ,t.prevT),this.object.getWorldPosition(OZ).add(this.collider.position).sub(OQ),this.groundYRotation=O3.setFromQuaternion(O2).y-t.prevR.y,OK.copy(OZ).applyAxisAngle(O5,this.groundYRotation),this.groundVelocity.add(OK.sub(OZ)).divideScalar(r);break}}else this.onObject=!1}if("walk"===this.moveMode&&this.collisionEnabled&&(1===this.movementState.jump&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.onObject?this.velocityTarget.y/=2:this.velocityTarget.y+=this.gravity*s),"fly"===this.moveMode&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,"+z"===this.forwardDir&&this.directionXZ.multiplyScalar(-1),this.directionXZ.manhattanLength()>0&&(this.path=[]),this.navMeshPathDest){let e=this.navMeshPathDest.material;if("walk"===this.moveMode&&this.path.length>1){this.navMeshPathDest.position.copy(this.path[this.path.length-1]),this.navMeshPathDest.parent||this.page.add(this.navMeshPathDest);let t=OQ.subVectors(this.path[1],this.position),i=OZ.subVectors(this.path[1],this.path[0]);0>t.dot(i)?this.path.shift():(this.directionXZ.x=i.x,this.directionXZ.z=i.z),e.opacity=e.userData.opacity0}else e.opacity-=.05*e.userData.opacity0,this.navMeshPathDest.material.opacity<=0&&this.navMeshPathDest.parent&&this.page.remove(this.navMeshPathDest)}this.directionXZ.normalize(),this.movementState.run?this.moveForce=this.runMultiplier:this.moveForce=1,this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce,this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce,("walk"===this.moveMode?this.velocityTarget.x+this.velocityTarget.z===0:0===this.velocityTarget.manhattanLength())?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),"walk"===this.moveMode&&(this.lerpFactorPos.y=1),!1===this.didHit&&0===this.pushedVelocity.manhattanLength()||!1===this.usePhysics?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**s),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**s),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**s)):this.velocity.copy(this.velocityTarget),("walk"===this.moveMode?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),this.onObject&&(this.dispatchStopEvent("jump"),this.movementState.run?(this.dispatchStopEvent("move"),this.dispatchStartEvent("run")):(this.dispatchStopEvent("run"),this.dispatchStartEvent("move"))));let o=OY.copy(this.velocity);if("none"!==this.orientMode&&!1===this.isFirstPerson){let e=OZ.copy(o);e.y=0,o.set(0,o.y,e.length()*("+z"===this.forwardDir?1:-1))}if(this.directionXZ.manhattanLength()>0&&"none"!==this.orientMode&&!1===this.isFirstPerson){if("camera"===this.orientWith&&this.path.length<=1){this.camera.getWorldDirection(OQ);
7686let e=OK.copy(O5).multiplyScalar(OQ.dot(O5));OQ.sub(e);let t=OZ.copy(this.directionXZ);t.x*=-1,this.rot.y=OQ.angleTo(t)*(OQ.cross(t).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera}else this.rot.y=(this.path.length>1?0:this.euler.y)+Math.atan2(-this.directionXZ.z,this.directionXZ.x)+Math.PI/2*("+z"===this.forwardDir?1:-1)}if(O3.setFromVector3(this.rot),"walk"===this.moveMode&&(O3.x=0),o.applyEuler(O3),a&&(O2.setFromUnitVectors(O5,this.groundNormal),o.applyQuaternion(O2)),i){let e=O3.set(0,this.vrEulerYOffset*Ri,0);i.applyEuler(e),o.x+=i.x,o.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(!0===this.usePhysics){for(let e of(this.pushedVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim)){let t=OK.setFromMatrixPosition(e.matrixWorld).sub(e.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),i=e.rigidBody.collider(0).castCollider(t,this.object.rigidBody.collider(0),OQ.copy(o).divideScalar(this.pixelsPerMeter),r,!1);t.multiplyScalar(this.pixelsPerMeter);let s=wZ.is(e)?e:e.object;if(null!==i&&this.lastHitObj!==s){let t;e instanceof xS&&(t=e);let i=this.sharedGameControlGlobals.entityToCollisionEvents[s.uuid];if(i)for(let e of i)"character"===e.data.target&&(e.dispatch(t),s.dispatchEvent(Br));this.lastHitObj=s}if(null!==i){this.pushedVelocity.copy(t),OZ.copy(i.normal1).applyQuaternion(e.quaternion);break}}if(0!==this.pushedVelocity.manhattanLength()){let e=OZ.dot(o);e<0&&o.addScaledVector(OZ,-e),o.add(this.pushedVelocity)}else o.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),"normal"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)||"steer"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||"walk"===this.moveMode)?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,"normal"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)||"steer"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),0===this.rotVelocityTarget.manhattanLength()?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**s):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**s),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,0===this.rotVelocityTarget.y&&0===this.directionXZ.manhattanLength()?this.rotationAccumWhenOrientWithCamera=0:(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),!1===this.isFirstPerson&&"none"!==this.orientMode&&this.directionXZ.manhattanLength()>0){if("radial"===this.orientMode){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(O5,this.euler.y-this.euler0.y);let e=OZ.copy(this.objectToCamXZ).normalize(),t=OK.copy(o).multiplyScalar(r);t.y=0;let i=t.sub(OQ.copy(e).multiplyScalar(t.dot(e))).cross(e).y;this.euler.y-=Math.atan2(i,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,0!==this.rotVelocityTarget.y&&(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.euler.y=this.rot.y);if(!0===this.cameraFollow&&("walk"===this.moveMode?"Limit"===this.cameraXAxis?this.euler.x=tZ.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=tZ.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):"Limit"===this.cameraXAxis&&(this.euler.x=tZ.clamp(this.euler.x,-this.PI_2,this.PI_2))),"fly"===this.moveMode?this.rot.x=this.euler.x:this.isFirstPerson&&(t?O3.copy(t):O3.copy(this.euler),O3.y=0,this.nonColliderRotOffset.makeRotationFromEuler(O3)),t&&("walk"===this.moveMode?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*Ri),O1.setFromAxisAngle(O4,this.rot.x),O2.setFromAxisAngle(O5,this.rot.y),O2.multiply(O1),O1.setFromAxisAngle(O6,this.rot.z),O2.multiply(O1),this.quaternion.copy(O2),this.objectRealQuat.multiplyQuaternions(this.quaternion,this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled){if(this.usePhysics){let e=OZ.copy(o).multiplyScalar(r/this.pixelsPerMeter),t=null;this.didHit=!1;let i=new ix;for(let r=0;r<5;r++){let s=e.length(),a=OK.copy(e).normalize();if(null!==(t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),this.colliderWorldQuat,a,this.object.rigidBody?.collider(0).shape,s,!1,24,void 0,void 0,this.object.rigidBody))){this.didHit=!0;let o=this.sharedGameControlGlobals.colliderToEntity.get(t.collider.handle);if(o!==this.lastHitObj&&0===r){this.lastHitObj=o;let e=this.sharedGameControlGlobals.entityToCollisionEvents[o?.uuid];if(e){for(let i of e)if("character"===i.data.target){let e=(this.sharedGameControlGlobals.rapierWorld?.getCollider(t.collider.handle))._parent,r;if(o.cloner){for(let t of o.cloner.children)if(t.rigidBody===e){r=t;break}}i.dispatch(r),o.dispatchEvent(Br)}}}let l=Oq.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat),h=OX.copy(a).multiplyScalar(t.toi).dot(l),c=t.toi;if(0===c&&(this.position.y+=this.offset*this.pixelsPerMeter),h>this.offset&&(c=t.toi*(h-this.offset)/h,i.addScaledVector(a,c)),e.copy(a).multiplyScalar(s-c),Math.acos(-l.y)>this.slopeThresh){let r=this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),s=OK.copy(t.witness2).applyQuaternion(this.colliderWorldQuat);s.y=0;let a=r.add(s);a.y+=this.stepThresh;let o=this.sharedGameControlGlobals.rapierWorld.castShape(a,this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,24,void 0,void 0,this.object.rigidBody);null!==o&&0===o.toi&&(l.y=0,l.normalize())}e.addScaledVector(l,-e.dot(l))}else{0===r&&0!==this.directionXZ.manhattanLength()&&(this.lastHitObj=null),i.add(e);break}}this.position.addScaledVector(i,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(OQ.copy(this.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(O1.copy(this.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let e=this.onObject?1:5,t=o.multiplyScalar(r/e);for(let i=0;i<e;i++)this.position.add(t),this.collisionAdjustment(r/e)}}else this.position.addScaledVector(o,r);if("walk"===this.moveMode&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.matrix.compose(this.position,this.quaternion,this.scale),this.object.matrixWorldNeedsUpdate=!0,this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),!0===this.cameraFollow){this.updateFollowArms();let e=this.objectToTarget.add(this.position),t=this.targetToCamera.add(e);OJ.lookAt(t,e,O5).setPosition(t),OJ.decompose(this.targetPos,this.targetQuat,OQ),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**s),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**s),this.camera.updateMatrix(),this.camera.updateMatrixWorld(),"Limit"===this.cameraYAxis&&"cartesian"===this.orientMode&&(this.euler.y=tZ.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=tZ.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.object.dispatchEvent(Rt),!(this.path.length<2&&this.lastPosition.distanceToSquared(this.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(void 0===this.camera||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&("fly"===this.moveMode||!0===this.onObject||!1===this.collisionEnabled)&&(null===this.navMeshPathDest||this.navMeshPathDest.material.opacity<-.04*this.navMeshPathDest?.material?.userData.opacity0))&&(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.position),this.object.dispatchEvent(Re),!0)}updateFollowArms(){let e;this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let t=O1.setFromAxisAngle(O5,"Limit"===this.cameraYAxis&&"radial"!==this.orientMode?tZ.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&this.objectToTarget.applyQuaternion(t),e="Limit"===this.cameraXAxis?tZ.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):tZ.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=OQ.copy(this.cameraPolarAxis0);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&i.applyQuaternion(t);let r=O2.setFromAxisAngle(i,e);"Locked"!==this.cameraYAxis&&this.targetToCamera.applyQuaternion(t),"Locked"!==this.cameraXAxis&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){180*O5.angleTo(e)/Math.PI<15||180*O5.angleTo(e)/Math.PI>85?O1.identity():O1.setFromUnitVectors(O5,e),this.groundTilt.slerp(O1,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=OX.set(0,0,0);this.object.matrix.compose(this.position,this.quaternion,this.scale);
7686let i=OJ.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(OQ,O1,OZ).compose(OQ,O1,O8);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(e=>{if(e===this.object||e.isDescendantOf(this.object))return;O7.makeEmpty(),e.updateMatrixWorldSVD();let r=e.matrixWorldRigid,s=O$.copy(r).invert(),a=O0.copy(O$).multiply(i);O9.copy(this.collider.segment),O9.start.applyMatrix4(a),O9.end.applyMatrix4(a);let o=Oq.copy(this.position).applyMatrix4(s);O7.expandByPoint(O9.start),O7.expandByPoint(O9.end),O7.min.addScalar(-this.collider.radius),O7.max.addScalar(this.collider.radius),e.bvhGeometry.boundsTree.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(O9.end),intersectsBounds:e=>e.intersectsBox(O7),intersectsTriangle:e=>{let i=e.closestPointToSegment(O9,OQ,OZ);if(i<this.collider.radius){let e=this.collider.radius-i,s=OZ.sub(OQ).normalize(),a=OK.copy(o);a.addScaledVector(s,e);let l=a.applyMatrix4(r).sub(this.position);t.add(l),O9.start.addScaledVector(s,e),O9.end.addScaledVector(s,e)}}})}),O7.makeEmpty(),O9.copy(this.collider.segment),O9.start.applyMatrix4(i),O9.end.applyMatrix4(i),O7.expandByPoint(O9.start),O7.expandByPoint(O9.end),O7.min.addScalar(-this.collider.radius),O7.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(O9.end),intersectsBounds:e=>e.intersectsBox(O7),intersectsTriangle:e=>{let i=e.closestPointToSegment(O9,OQ,OZ);if(i<this.collider.radius){let e=this.collider.radius-i,r=OZ.sub(OQ).normalize();this.alignToGround&&this.groundTiltAdjustment(r),t.addScaledVector(r,e),O9.start.addScaledVector(r,e),O9.end.addScaledVector(r,e)}}}),this.onObject=Math.abs(t.y)>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.position.add(t)}};Rr.isLocked=!1;var Rs=tw(tA());function Ra(e,t){let i=new rN;if(t){let e=t.elements,r=e[0]**2+e[1]**2+e[2]**2,s=e[4]**2+e[5]**2+e[6]**2,a=e[8]**2+e[9]**2+e[10]**2,o=e[0]**2+e[4]**2+e[8]**2,l=e[1]**2+e[5]**2+e[9]**2,h=e[2]**2+e[6]**2+e[10]**2;if(r<1e-8||s<1e-8||a<1e-8||o<1e-8||l<1e-8||h<1e-8)return i.setAttribute("position",new rD([],3)),i.setIndex([]),i}if(!e.getAttribute("position"))return i.setAttribute("position",new rD([],3)),i.setIndex([]),i;let{positions:r,triIndices:s}=So(e.getAttribute("position"),e.getIndex());return i.setAttribute("position",new rD(r,3)),i.setIndex(s),t&&i.applyMatrix4(t),i}var Rn=new iQ,Ro=new iQ,Rl=[[0,0,0],[0,0,0],[0,0,0]];function Rh(e){let t=e.elements;Rl[0][0]=t[0],Rl[0][1]=t[4],Rl[0][2]=t[8],Rl[1][0]=t[1],Rl[1][1]=t[5],Rl[1][2]=t[9],Rl[2][0]=t[2],Rl[2][1]=t[6],Rl[2][2]=t[10];let{u:i,v:r}=(0,Rs.SVD)(Rl),s=Rn.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),a=Ro.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1);return s.multiply(a.transpose())}var Rc=class extends lO{constructor(){super(),this.layers.enable(3),this.layers.enable(8)}setFromCamera(e,t){t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):t.isPerspectiveCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):console.error("Raycaster: Unsupported camera type.")}intersectVisibleObjects(e,t=!0,i=[]){return e.forEach(e=>{e.visible&&this.intersectObject(e,t,i)}),i}createRaycastLineHelper(){let e=new nN({color:65280,linewidth:10}),t=new ix(this.ray.origin.x,this.ray.origin.y,this.ray.origin.z),i=new ix(this.ray.direction.x,this.ray.direction.y,this.ray.direction.z),r=this.camera.far-this.camera.near,s=new ix().addVectors(t,i.multiplyScalar(r)),a=new rN;return a.setFromPoints([t,s]),new nH(a,e)}},Rd=e=>e instanceof EL||e instanceof PF;function Ru(e,t){return e.distance-t.distance}function Rp(e,t,i,r=!1){if(!r&&!i.some(t=>void 0!==Rg(e,t)))return[];let s=[];return t.children.forEach(t=>(function e(t,i,r){if(!(!xz(i)||!i.visible))for(let s of(EA(i)&&i.raycast(t,r),i.children))e(t,s,r)})(e,t,s)),s.sort(Ru),s}function Rf(e){let t=[];if(e.length){let i=e[0].object;xz(i)&&t.push(i);let r=i.parent;for(;r;)Rd(r)&&t.push(r),r=r.parent}return t}function Rm(e,t,i,r){let s=e.frame;if(s){let e=t[0]*s.width,a=(1-t[1])*s.height;for(let t of i){let i=t===s.uuid?s:s.find(t);if(i?.intersects(e,a))return r(i),!0}}return!1}function Rg(e,t){if(EA(t)){if(t.visible){let i=[];return t.raycast(e,i),i.length?i[0]:void 0}}else if(Rd(t))return function e(t,i){if(!(!xz(i)||!i.visible)){if(EA(i)){let e=[];
7686if(i.raycast(t,e),e.length)return e[0]}for(let r of i.children){let i=e(t,r);if(i)return i}}}(e,t)}var Rv=class{constructor(e,t,i,r,s,a,o,l){this.renderer=e,this.publish=t,this.scene=i,this.getCamera=r,this.sharedAssets=s,this.requestRender=a,this.isExport=o,this.frame=l,this.raycaster=new Rc,this._useWindowEvents=!1,this.pointerWorld={x:0,y:0},this.pointerScreen={x:0,y:0},this._useWindowEvents="window"===t.mouseEventTarget,this.domElement=e.domElement,this.eventElement=this._useWindowEvents?window:e.domElement,this._domRect=this.domElement.getBoundingClientRect()}get stopRaycast(){return this.publish.stopRaycast}get page(){return this.scene.activePage}set useWindowEvents(e){this._useWindowEvents=e,this.eventElement=e?window:this.renderer.domElement}get useWindowEvents(){return this._useWindowEvents}set domRect(e){this._domRect=e}get domRect(){return this._domRect}updateRaycaster(e){var t,i;let{pageX:r,pageY:s}=e.touches?.length>0?e.touches[0]:e;this.pointerWorld={x:(r-((t=this._domRect).left+window.scrollX))/t.width*2-1,y:-((s-(t.top+window.scrollY))/t.height*2)+1},this.pointerScreen={x:(r-((i=this._domRect).left+window.scrollX))/i.width,y:1-(s-(i.top+window.scrollY))/i.height},this.raycaster.setFromCamera(this.pointerWorld,this.getCamera())}},Ry=class{constructor(e){this.eventContext=e,this.domEventsNeeded=new Set,this.hasVideoAction=!1}connect(){}disconnect(){}},Rx=[["start","Start"],["keyDown","KeyDown"],["keyUp","KeyUp"],["mouseDown","MouseDown"],["mouseUp","MouseUp"],["mouseHover","MouseHover"],["collision","Collision"],["lookAt","LookAt"],["follow","Follow"],["scroll","Scroll"]],Rb=e=>Rx.find(([t,i])=>i===e)?.[0],Rw=e=>Rx.find(([t])=>t===e)?.[1],RS=(e,t)=>{let i=Rb(e);if(i){let e=new CustomEvent(i,{bubbles:!0});return Object.defineProperty(e,"target",{writable:!1,value:t}),e}},R_=class extends Ry{constructor(){super(...arguments),this.objectsPerEvents=new Map,this.splineEvents={},this.onBeginEvent=e=>{if(!e.eventName||!e.target||"Scroll"===e.eventName)return;let t=this.splineEvents[Rb(e.eventName)]?.[e.target.uuid];if(!t)return;"Scroll"===e.eventName&&void 0!==e.deltaY&&Object.assign(t,{deltaY:e.deltaY});let{domElement:i}=this.eventContext;i.dispatchEvent(t)}}connect(){let{page:e}=this.eventContext;e.traverseEntity(e=>{if(e.data?.events.length){for(let[t,i]of Rx)if(e.data.events.some(e=>e.data.type===i&&!e.data.disabled)){this.objectsPerEvents.has(t)?this.objectsPerEvents.get(t)?.push(e):this.objectsPerEvents.set(t,[e]);let r=RS(i,{id:e.uuid,name:e.name}),s=this.splineEvents[t];s?s[e.uuid]=r:this.splineEvents[t]={[e.uuid]:r}}}}),this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.addEventListener("beginEvent",this.onBeginEvent)})})}disconnect(){this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.removeEventListener("beginEvent",this.onBeginEvent)})})}},RA=class{constructor(e,t,i,r,s,a){if(this.id=e,this.data=t,this.object=i,this.entered=!1,("KeyDown"===t.type||"KeyUp"===t.type||"KeyPress"===t.type)&&!t.key)throw Error("Missing property");this.actions=OR(t,t.actions,r,s,a,i)}disconnect(){OL(this.actions)}dispatchHeld(e){this.actions.Create.forEach(t=>{e&&t.dispatchThrottled.cancel(),t.dispatchThrottled()})}dispatch(e=!1){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),"MousePress"===this.data.type||"KeyPress"===this.data.type?this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStart())):(this.actions.Transition.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()})),this.actions.Link.forEach(e=>{e.dispatch()}
vendor: 1,706 bytes, line 7686
7686),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),!1===e&&this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchRelease(){this.entered&&(this.entered=!1,this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStop()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}
7686),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},RM=class extends Ry{constructor(e,t,i){super(e),this.eventManager=t,this.useForRaycastProperty=i,this.objectsPerTypes={MouseDown:[],MouseUp:[],MousePress:[],KeyDown:[],KeyUp:[],KeyPress:[]},this.canvasMouseEvents=[],this.eventsPerObjects={MouseDown:{},MouseUp:{},MousePress:{},KeyDown:{},KeyUp:{},KeyPress:{}},this.heldKeys={},this.heldKeysPress={},this._prevObjects=[],this.sceneInterects=null,this.onCanvasRaycast=e=>{if(!0===this.useForRaycastProperty&&null===this.sceneInterects){this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=Rp(t,i,[],!0);this.sceneInterects=r,r.length&&(this.eventContext.sharedAssets.raycastProperty={x:r[0].point.x,y:r[0].point.y,z:r[0].point.z,objX:r[0].object.matrixWorld.elements[12],objY:r[0].object.matrixWorld.elements[13],objZ:r[0].object.matrixWorld.elements[14]})}},this.onCanvasMouseDown=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{("MouseDown"===t.data.type||"MousePress"===t.data.type)&&(this.onCanvasRaycast(e),t.dispatch())})},this.onCanvasMouseUp=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{"MouseUp"===t.data.type?(this.onCanvasRaycast(e),t.dispatch()):"MousePress"===t.data.type&&t.dispatchRelease()})},this.onMouseDown=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseDown"))},this.onMouseUp=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseUp"))},this.onMousePressDown=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent())},this.onMousePressRelease=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent(!0))},this.onKeyDown=e=>{this.heldKeys[e.key]||(this.handleKeyEvent(e,"KeyDown"),this.handleKeyEventHeld(e,"KeyDown",!0)),this.heldKeys[e.key]=!0},this.onKeyUp=e=>{this.handleKeyEvent(e,"KeyUp"),this.handleKeyEventHeld(e,"KeyUp",!0)},this.onKeyPressDown=e=>{this.heldKeysPress[e.key]?this.handleKeyEventHeld(e,"KeyPress"):(this.handleKeyEvent(e,"KeyPress"),this.handleKeyEventHeld(e,"KeyPress",!0)),this.heldKeysPress[e.key]=!0},this.onKeyPressUp=e=>{this.handleKeyEvent(e,"KeyPress",!0)},this.releaseHeldKey=e=>{delete this.heldKeys[e.key]},this.releaseHeldKeyPress=e=>{delete this.heldKeysPress[e.key]},this._onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rw(e);r&&("MouseDown"===r||"MouseUp"===r||"MousePress"===r?(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent(i)})):("KeyDown"===r||"KeyUp"===r||"KeyPress"===r)&&(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent()})))}}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext,r=(i,r)=>{if(i.data?.events.length)for(let s of["MouseDown","MouseUp","MousePress","KeyDown","KeyUp","KeyPress"]){let a=this.eventsPerObjects[s];i.data.events.filter(({data:e})=>e.type===s&&!0!==e.disabled).forEach(({id:r,data:s})=>{try{let o=new RA(r,s,i,e,t,this.eventManager);o.actions.Video.length&&(this.hasVideoAction=!0),("MouseDown"===s.type||"MouseUp"===s.type||"MousePress"===s.type)&&("Canvas"===s.mode||"Window"===s.mode)?this.canvasMouseEvents.push(o):a[i.uuid]?a[i.uuid].some(e=>e.id===o.id)||a[i.uuid].push(o):a[i.uuid]=[o]}catch(e){}}),a[i.uuid]?.length&&this.objectsPerTypes[s].push(i instanceof TZ&&("MouseDown"===s||"MouseUp"===s||"MousePress"===s)?r:i)}};e.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&e.frame?.traverse(t=>{r(t,e)}),r(e)}),this.heldKeys={},this.heldKeysPress={},this.domEventsNeeded.clear(),i.addEventListener("pointerdown",this.onCanvasMouseDown),i.addEventListener("pointerup",this.onCanvasMouseUp),(this.objectsPerTypes.MouseDown?.length||this.useForRaycastProperty)&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMouseDown)),this.objectsPerTypes.MouseUp?.length&&(this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMouseUp)),this.objectsPerTypes.MousePress?.length&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMousePressDown),this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMousePressRelease)),this.objectsPerTypes.KeyDown?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.releaseHeldKey)),this.objectsPerTypes.KeyUp?.length&&(this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyUp)),this.objectsPerTypes.KeyPress?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyPressDown),document.addEventListener("keyup",this.releaseHeldKeyPress),this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyPressUp)),Object.entries(this.objectsPerTypes).forEac
7686h(([e,t])=>{t.forEach(e=>{e.addEventListener("userEvent",this._onUserEvent)})})}disconnect(){let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),this.heldKeys={},this.heldKeysPress={},e.removeEventListener("pointerdown",this.onCanvasMouseDown),e.removeEventListener("pointerup",this.onCanvasMouseUp),e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerdown",this.onMousePressDown),e.removeEventListener("pointerup",this.onMouseUp),e.removeEventListener("pointerup",this.onMousePressRelease),document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("keyup",this.onKeyUp),document.removeEventListener("keydown",this.onKeyPressDown),document.removeEventListener("keyup",this.onKeyPressUp),document.removeEventListener("keyup",this.releaseHeldKey),Object.values(this.eventsPerObjects).forEach(e=>{Object.values(e).forEach(e=>{e.forEach(e=>{e.disconnect()})})}),this.canvasMouseEvents.forEach(e=>{e.disconnect()}),Object.entries(this.objectsPerTypes).forEach(([e,t])=>{t.forEach(e=>{e.removeEventListener("userEvent",this._onUserEvent)})})}handleMouseEvent(e){let{stopRaycast:t,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=this.objectsPerTypes[e],o=a.filter(e=>!(e instanceof TZ));if(!(!a.length&&!this.useForRaycastProperty)&&!(r.uiCanvas&&Rm(r,[s.x,s.y],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))){if(t||this.useForRaycastProperty){let s;if(null===this.sceneInterects?s=Rp(i,r,o,this.useForRaycastProperty):(s=this.sceneInterects,this.sceneInterects=null),this.useForRaycastProperty&&s.length&&(this.eventContext.sharedAssets.raycastProperty={x:s[0].point.x,y:s[0].point.y,z:s[0].point.z,objX:s[0].object.matrixWorld.elements[12],objY:s[0].object.matrixWorld.elements[13],objZ:s[0].object.matrixWorld.elements[14]}),t){let t=[s[0]?.uv?.x??0,s[0]?.uv?.y??0];Rf(s).forEach(i=>{i instanceof PV&&Rm(i,t,Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}),this.eventsPerObjects[e][i.uuid]&&this.handleObjectMouseEventDispatch(i,e)})}}t||o.forEach(t=>{let r=Rg(i,t);r&&(this.handleObjectMouseEventDispatch(t,e),t instanceof PV&&Rm(t,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))})}}handleMousePressEvent(e=!1){let t="MousePress",i=this.objectsPerTypes[t],r=i.filter(e=>!(e instanceof TZ)),s=[];if(i.length){if(!e){let{stopRaycast:e,raycaster:i,page:a,pointerScreen:o}=this.eventContext,l=!1;if(a.uiCanvas&&(l=Rm(a,[o.x,o.y],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})),e&&!l){let e=Rp(i,a,r);s=Rf(e),e.forEach(e=>{e.object instanceof PV&&Rm(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})})}else r.forEach(e=>{let r=Rg(i,e);r&&(s.push(e),e instanceof PV&&Rm(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{s.includes(e)||this.handleObjectMouseEventDispatchRelease(e,t)}),s.length&&s.forEach(e=>{this.handleObjectMouseEventDispatch(e,t)}),this._prevObjects=s}}handleObjectMouseEventDispatch(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatch()})}handleObjectMouseEventDispatchRelease(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatchRelease()})}handleKeyEvent(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{let s=this.eventsPerObjects[t][r.uuid];s.some(({data:t})=>"key"in t&&t.key===e.key)&&r.dispatchEvent({type:"beginEvent",eventName:t}
7686),s.forEach(t=>{"key"in t.data&&t.data.key===e.key&&(i?t.dispatchRelease():t.dispatch(!0))})})}handleKeyEventHeld(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{this.eventsPerObjects[t][r.uuid].forEach(t=>{"key"in t.data&&t.data.key===e.key&&t.dispatchHeld(i)})})}},RE=new ix,RC=new ix,RT=class{constructor(e,t,i,r,s){this.actionsIn=OR(e,e.inActions,i,r,s,t),this.actionsOut=OR(e,e.outActions,i,r,s,t)}disconnect(){OL(this.actionsIn),OL(this.actionsOut)}},RP=class extends RT{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.stage="out",this.objects=[],this.onUpdateMatrixWorld=()=>{for(let e of this.objects)if(!e.visible)return;let e=RE.setFromMatrixPosition(this.objects[0].matrixWorld),t=RC.setFromMatrixPosition(this.objects[1].matrixWorld),i=e.distanceTo(t)<=this.distance?"in":"out";if(this.stage!==i){this.stage=i;let e="in"===i?this.actionsIn:this.actionsOut;e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Link.forEach(e=>e.dispatch()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}};let{distance:o,fromObject:l,toObject:h}=t.condition;for(let e of(this.distance=o,[l,h])){if(!e)throw Error("Missing property");let t=r.find(e);if(!t)throw Error("Missing property");this.objects.push(t)}}connect(){window.setTimeout(()=>{this.objects.forEach(e=>{e.addEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)}),this.onUpdateMatrixWorld()},0)}disconnect(){super.disconnect(),this.stage="out",this.objects.forEach(e=>{e.removeEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)})}},RD=class extends RT{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.onBegin=({target:e,state:t})=>
7686{this.toState!==t&&(this.actionsOut.Audio.forEach(e=>e.dispatchConditional()),this.actionsOut.Particles.forEach(e=>e.dispatchConditional()),this.actionsOut.Video.forEach(e=>e.dispatchConditional()),this.actionsOut.Link.forEach(e=>e.dispatch()),this.actionsOut.Create.forEach(e=>e.dispatch()),this.actionsOut.Destroy.forEach(e=>e.dispatch()),this.actionsOut.Reset.forEach(e=>e.dispatch()),this.actionsIn.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsOut.Transition.forEach(e=>e.play()),this.actionsOut.Animation.forEach(e=>e.play()),this.actionsIn.SwitchCamera.forEach(e=>e.pause()),this.actionsOut.SwitchCamera.forEach(e=>e.play()),this.actionsOut.SceneTransition.forEach(e=>e.dispatch()),this.actionsOut.SetVariable.forEach(e=>e.checkConditions()),this.actionsOut.SetVariable.forEach(e=>e.dispatch()),this.actionsOut.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))},this.onComplete=({target:e,state:t})=>
7686{this.toState===t&&(this.actionsIn.Audio.forEach(e=>e.dispatchConditional()),this.actionsIn.Particles.forEach(e=>e.dispatchConditional()),this.actionsIn.Video.forEach(e=>e.dispatchConditional()),this.actionsIn.Link.forEach(e=>e.dispatch()),this.actionsIn.Create.forEach(e=>e.dispatch()),this.actionsIn.Destroy.forEach(e=>e.dispatch()),this.actionsIn.Reset.forEach(e=>e.dispatch()),this.actionsOut.Transition.forEach(e=>e.pause()),this.actionsOut.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsIn.Transition.forEach(e=>e.play()),this.actionsIn.Animation.forEach(e=>e.play()),this.actionsOut.SwitchCamera.forEach(e=>e.pause()),this.actionsIn.SwitchCamera.forEach(e=>e.play()),this.actionsIn.SceneTransition.forEach(e=>e.dispatch()),this.actionsIn.SetVariable.forEach(e=>e.checkConditions()),this.actionsIn.SetVariable.forEach(e=>e.dispatch()),this.actionsIn.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))};let{condition:o}=t;if(!o.object)throw Error("Missing property");let l=r.find(o.object)??r.scene.find2D(o.object);if(!l||(this.toObject=l,o.state&&!this.toObject.states?.[o.state]))throw Error("Missing property");this.toState=o.state}connect(){c$(this.actionsOut).forEach(e=>{this.actionsOut[e]?.length&&this.toObject.addEventListener("beginState",this.onBegin)}),c$(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.addEventListener("completeState",this.onComplete)})}disconnect(){super.disconnect(),c$(this.actionsOut).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("beginState",this.onBegin)}),c$(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("completeState",this.onComplete)})}},RI=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.eventsPerConditions={Comparison:[],Distance:[],State:[]},this.hasVideoAction=!1}connect(){super.connect();let{page:e,sharedAssets:t}=this.eventContext;e.traverseEntity(i=>{if(i.data?.events.length){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"Conditional"===s.type)try{let a;"Comparison"===s.condition.type||("Distance"===s.condition.type?a=new RP(r,s,i,e,t,this.eventManager):"State"===s.condition.type&&(a=new RD(r,s,i,e,t,this.eventManager))),a&&(this.eventsPerConditions[s.condition.type].push(a),(a.actionsIn.Video.length||a.actionsOut.Video.length)&&(this.hasVideoAction=!0))}catch(e){}}}),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.connect()))}disconnect(){super.disconnect(),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.disconnect()))}},RO=new ix,RR=new ix,RL=new ix,RB=new sn,Rz=new ix,RF=new ix,RN=new ix,RU=new iy,Rk=new i5,RV=new iQ,Rj=new tJ,RG=new ix,RH=new ix;function RW(e,t){!t||(t[0]<t[1]&&(e.x=Math.min(Math.max(e.x,t[0]),t[1])),t[2]<t[3]&&(e.y=Math.min(Math.max(e.y,t[2]),t[3])),t[4]<t[5]&&(e.z=Math.min(Math.max(e.z,t[4]),t[5])))}var Rq=(tr=new iQ,(e,t,i)=>{let r=e.obj;tr.copy(r.hiddenMatrix),null!==r.parent&&tr.premultiply(r.parent.matrixWorld),tr.invert(),r.position.copy(t),"global"===e.reference&&RW(r.position,e.limits),r.position.applyMatrix4(tr),"parent"===e.reference?RW(r.position,e.limits):"local"===e.reference&&(RU.copy(e.quat0).invert(),r.position.sub(e.position0),r.position.applyQuaternion(RU),RW(r.position,e.limits),RU.invert(),r.position.applyQuaternion(RU),r.position.add(e.position0)),tr.multiply(i??r.matrixWorld).decompose(Rz,r.quaternion,RF),r.updateMatrix(),r.hasNonUniformScale&&(r.updateMatrixWorld(),r.updateMatrixWorldSVD()),r instanceof SD&&EM(r.parent)&&r.invalidateDownstreamBooleanData(!0)}),RX=class{constructor(e,t,i,r,s,a,o){this.object=e,this.id=t,this.data=i,this.dropDestIds=[],this.activeIdx=null,this.wasDragEventTriggered=!1,this.resetDampingFactor=0===this.data.resetSpeed?1:8/this.data.resetSpeed+1,this.snapDampingFactor=0===this.data.snapSpeed?1:8/this.data.snapSpeed+1,this.actionsDrag=OR(i,i.dragDropActions.drag,r,s,a,this.object),this.actionsDrop=OR(i,i.dragDropActions.drop,r,s,a,this.object);let l=[];
7686this.data.objects.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(l.push(t),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&l.push(t)}))}),this.data.dropDestinations.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(this.dropDestIds.push(t.uuid),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&this.dropDestIds.push(t.uuid)}))}),this.dragItems=l.map(e=>("locked"===this.data.planeMode&&(e.userData.lockedPlane=!0),e.userData.worldPosition0=new ix().setFromMatrixPosition(e.matrixWorld),{obj:e,fromPosition:new ix().setFromMatrixPosition(e.matrixWorld),pointStart:new ix,pointEnd:new ix,paused:!0,currentDampingFactor:this.data.dampingFactor,reset:!1,position0:new ix().copy(e.position),quat0:new iy().copy(e.quaternion),snapped:!1,orientationMatrix:new iQ,limits:this.data.limits,reference:this.data.referenceFrame}))}get activeDragItem(){return null!==this.activeIdx?this.dragItems[this.activeIdx]:null}dispose(){OL(this.actionsDrag),OL(this.actionsDrop),this.dragItems.forEach(e=>{e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart),e.obj.recursiveBBoxNeedsUpdate=!0,e.obj.userData.lockedPlane=void 0,e.obj.position.copy(e.position0),e.obj.quaternion.copy(e.quat0),e.obj.updateMatrix()})}},RY=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.lastDropDestination=null,this.dragTimeout=null,this.onPointerDown=e=>{if(u2.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(this.lastDropDestination=null,0===r.length){this.activeEvent=null;return}for(let e of this.events){let t=0;for(let{obj:i,pointEnd:s,pointStart:a}of e.dragItems){if(i===r[0].object||i===r[0].object.object||wZ.is(i)&&i.isAncestorOf(r[0].object.uuid)){if(e.activeIdx=t,e.activeDragItem.reset=!1,e.activeDragItem.currentDampingFactor=e.data.dampingFactor,e.activeDragItem.snapped=!1,"hand"===e.data.cursor&&this.setCursor("grabbing"),this.eventManager.controlsManager.usePhysics){e.activeDragItem.obj.rigidBody&&e.activeDragItem.obj.rigidBody.setBodyType(2,!0);let t=e.activeDragItem.obj;i.hasNonUniformScale&&i.updateMatrixWorldSVD(),(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(Rz,RU,RF),Rk.setFromQuaternion(RU),void 0===t.prevR?(t.prevR=Rk.clone(),t.prevT=Rz.clone()):(t.prevR.copy(Rk),t.prevT.copy(Rz)),this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.push(e.activeDragItem.obj)}this.calcPlaneIntersectPos(i,a,e.data.plane,e.data.referenceFrame),s.copy(a),(this.eventManager.controlsManager.usePhysics&&i.data.physics?.rigidBody==="dynamic"||!1===e.data.drop||!1===e.data.resetOnSnapFail)&&e.activeDragItem.fromPosition.setFromMatrixPosition(e.activeDragItem.obj.matrixWorld),this.activeEvent=e,this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1);return}t++}}this.activeEvent=null},this.onPointerMove=e=>{if(u2.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(0===u2.length){let e=!1;for(let t of this.events){for(let{obj:i}of t.dragItems)if(i===r[0]?.object||i===r[0]?.object?.object||wZ.is(i)&&i.isAncestorOf(r[0]?.object.uuid)){switch(e=!0,t.data.cursor){case"hand":this.setCursor("grab");break;case"move":this.setCursor("move")}break}if(e)break}e||this.setCursor("default");return}if(this.activeEvent&&this.activeEvent.activeDragItem){let e,t=this.activeEvent.activeDragItem;if(t.snapped=!1,this.activeEvent.data.drop&&(e=r.filter(e=>t.obj!==e.object&&!t.obj.isAncestorOf(e.object.uuid)&&!(e.object instanceof EL)&&("all"===this.activeEvent.data.dropOn||this.activeEvent.dropDestIds.some(t=>t===e.object.uuid||i.scene.find(t).isAncestorOf(e.object.uuid))))[0]),e){let i=RN.copy(e.face.normal).applyMatrix3(Rj.getNormalMatrix(e.object.matrixWorld));if("center"===this.activeEvent.data.snapTo)t.fromPosition.setFromMatrixPosition(e.object.matrixWorld);else if("surface"===this.activeEvent.data.snapTo){if(t.fromPosition.copy(e.point),"bbox"===this.activeEvent.data.snapSurfaceMode){Rz.copy(i).applyMatrix3(Rj.setFromMatrix4(t.obj.matrixWorld).transpose());let e=t.obj;Rz.x>.2?RF.x=-e.recursiveBBox.min.x:Rz.x<-.2&&(RF.x=-e.recursiveBBox.max.x),Rz.y>.2?RF.y=-e.recursiveBBox.min.y:Rz.y<-.2&&(RF.y=-e.recursiveBBox.max.y),Rz.z>.2?RF.z=-e.recursiveBBox.min.z:Rz.z<-.2&&(RF.z=-e.recursiveBBox.max.z),RF.applyMatrix3(Rj.invert())}else RF.copy(i).multiplyScalar(this.activeEvent.data.snapSurfaceOffset);t.fromPosition.add(RF)}
7686this.activeEvent.data.autoOrient&&(Rz.set(0,1,0).cross(i),1e-4>Rz.length()&&Rz.set(-1,0,0).cross(i),RF.crossVectors(RN,Rz),t.orientationMatrix.makeBasis(Rz,RF,i)),t.pointStart.copy(t.fromPosition),t.pointEnd.copy(t.pointStart),t.currentDampingFactor=this.activeEvent.snapDampingFactor,t.snapped=!0,this.lastDropDestination!==e.object&&(this.lastDropDestination=e.object,this.activeEvent.actionsDrop.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Create.forEach(e=>{e.dispatchThrottled()}))}else t.orientationMatrix.makeRotationFromQuaternion(t.quat0),this.lastDropDestination=null,t.currentDampingFactor=this.activeEvent.data.dampingFactor,this.calcPlaneIntersectPos(t.obj,t.pointEnd,this.activeEvent.data.plane,this.activeEvent.data.referenceFrame),this.activeEvent.actionsDrop.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.stop()}
7686),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("stop")});this.activeEvent.actionsDrag.Create.forEach(e=>{e.dispatchThrottled()}),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.UserAPI.forEach(e=>e.dispatch()),!1===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!0,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("start")})),this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>{this.activeEvent&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Audio.forEac
vendor: 5,919 bytes, line 7686
7686h(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}))},500),this.updateDragItem(t),t.obj.dispatchEvent({type:"requestRender"})}},this.onPointerUp=e=>{if(this.activeEvent&&this.activeEvent.activeDragItem){"hand"===this.activeEvent.data.cursor&&this.setCursor("grab");let e=this.activeEvent.activeDragItem.obj.data.physics?.rigidBody==="dynamic";!1===this.activeEvent.activeDragItem.snapped&&this.activeEvent.data.drop&&this.activeEvent.data.resetOnSnapFail&&(!1===this.eventManager.controlsManager.usePhysics||!e)&&(this.activeEvent.activeDragItem.reset=this.activeEvent.data.resetOnSnapFail,this.activeEvent.activeDragItem.paused=!1,this.activeEvent.activeDragItem.currentDampingFactor=this.activeEvent.resetDampingFactor),this.eventManager.controlsManager.usePhysics&&e&&(this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.pop(),this.activeEvent.activeDragItem.obj.rigidBody.setBodyType(0,!0),this.activeEvent.activeDragItem.paused=!0),!0===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.UserAPI.forEach(e=>e.dispatch())),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0)}}}connect(){let e={};if(this.eventContext.page.traverseEntity(t=>{t.component&&(e[t.component.uuid]?e[t.component.uuid].push(t.uuid):e[t.component.uuid]=[t.uuid])}),this.eventContext.page.traverseEntity(t=>{t.data?.events.filter(e=>"DragDrop"===e.data.type&&!e.data.disabled).forEach(i=>{this.events.push(new RX(t,i.id,i.data,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager,e))})}),!this.events.length)return;this.domEventsNeeded.clear(),this.domEventsNeeded.add("pointerdown");let t=this.eventContext.domElement;t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),this.domEventsNeeded.add("pointermove")}disconnect(){if(!this.events.length)return;this.domEventsNeeded.clear();let e=this.eventContext.domElement;e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp),this.events.forEach(e=>e.dispose())}setCursor(e){this.eventContext.domElement.style.cursor=e}onAnimationFrameDamping(){for(let e of this.events)for(let t of e.dragItems)t.paused||this.updateDragItem(t,!0)}calcPlaneIntersectPos(e,t,i,r){let{getCamera:s,raycaster:a}=this.eventContext;s().getWorldDirection(RR),RR.negate();let o=RU.identity();switch("parent"===r?RV.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix).decompose(Rz,o,RF):"local"===r&&e.matrixWorld.decompose(Rz,o,RF),i){case"x":Rz.set(1,0,0).applyQuaternion(o),RG.copy(RR).cross(Rz),RH.copy(Rz).cross(RG);break;case"y":Rz.set(0,1,0).applyQuaternion(o),RG.copy(RR).cross(Rz),RH.copy(Rz).cross(RG);break;case"z":Rz.set(0,0,1).applyQuaternion(o),RG.copy(RR).cross(Rz),RH.copy(Rz).cross(RG);break;case"xy":RH.set(0,0,1).applyQuaternion(o);break;case"yz":RH.set(1,0,0).applyQuaternion(o);break;case"xz":RH.set(0,1,0).applyQuaternion(o);break;case"adaptive":RR.angleTo(RF.set(0,1,0))>Math.PI/6?(Rz.crossVectors(RF.set(0,1,0),RR),RH.crossVectors(Rz,RF)):RH.set(0,1,0);break;default:RH.copy(RR)}RL.setFromMatrixPosition(e.matrixWorld);let l=e.userData.lockedPlane?e.userData.worldPosition0:RL;if(RB.setFromNormalAndCoplanarPoint(RH,l),a.ray.intersectPlane(RB,t)&&("x"===i||"y"===i||"z"===i)){let e=RF.subVectors(t,l).dot(Rz);t.copy(l).addScaledVector(Rz,e)}}updateDragItem(e,t=!1){RL.setFromMatrixPosition(e.obj.matrixWorld),"current"===e.reset?RO.subVectors(e.fromPosition,RL).divideScalar(e.currentDampingFactor):"original"===e.reset?(RO.subVectors(e.obj.userData.worldPosition0,RL).divideScalar(e.currentDampingFactor),e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart)):RO.subVectors(e.pointEnd,e.pointStart).add(e.fromPosition).sub(RL).divideScalar(e.currentDampingFactor),e.paused=!(e.currentDampingFactor>1)||.01>RO.length(),(this.activeEvent&&1===this.activeEvent.data.dampingFactor||t)&&Rq(e,RO.add(RL),this.activeEvent?.data.drop&&this.activeEvent?.data.autoOrient?e.orientationMatrix:null),e.obj.dispatchEvent({type:"beginEvent",eventName:"DragDrop"}),this.eventManager.requestRender()}},RQ=new ix,RZ=new ix,RK=new ix,RJ=new ix,R$=new sn,R0={type:"requestRender"},R1=(ts=new ix,ta=new ix,(e,t,i)=>i>0?(ts.subVectors(e,t),ts.length()<=i?e:ta.copy(t).add(ts.normalize().multiplyScalar(i))):t),R2=(tn=new iQ,(e,t)=>{e.position.copy(t),null!==e.parent&&(tn.copy(e.parent.matrixWorld).invert(),e.position.applyMatrix4(tn)),tn.copy(e.hiddenMatrix).invert(),e.position.applyMatrix4(tn),e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e instanceof SD&&EM(e.parent)&&e.invali
7686dateDownstreamBooleanData(!0)}),R3=class{constructor(e,t,i,r,s,a){this.data=e,this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.snapComplete=!1,this.isReset=!1,this.worldPosition0=new ix,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mK.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.resetDampingFactor=80/this.data.resetSpeed+1,this.object.getWorldPosition(this.worldPosition0),this.actions=OR(e,e.actions,r,s,a,i)}},R4=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.pairOfEventListeners=[],this.onMouseMove=e=>{if(!(u2.length>1))for(let t of(this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"Follow"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new R3(i.data,i.id,t,e,this.eventContext.sharedAssets,this.eventManager))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uZ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents||(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events))if(void 0!==e.target){let t=e.target,i=this.onTargetChange(e);this.pairOfEventListeners.push([t,i]),t.addEventListener("requestRender",i)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uZ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let e of this.events)e.paused=!0,e.isReset=!1,OL(e.actions)}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e,!0)}updateSingleEvent(e,t=!1){this.events.forEach(e=>{e.actions.Create.forEach(e=>{e.dispatchThrottled()})});let{plane:i,limitDistance:r,limitDistanceEnabled:s}=e.data;if(e.object.getWorldPosition(RK),e.isReset)RJ.copy(e.worldPosition0);else if(e.target)e.target.getWorldPosition(RJ);else{let{getCamera:e,raycaster:t}=this.eventContext;if("custom"===i?(e().getWorldDirection(RZ),RZ.negate(),RQ.copy(RZ)):"xy"===i?RQ.set(0,0,1):"xz"===i?RQ.set(0,1,0):"yz"===i&&RQ.set(1,0,0),R$.setFromNormalAndCoplanarPoint(RQ,RK),!t.ray.intersectPlane(R$,RJ))return}if(!e.isReset){if(RJ.distanceTo(e.worldPosition0)>r&&s&&e.target){if(e.snapComplete=!1,e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;RJ.copy(e.worldPosition0),e.currentDampingFactor=e.resetDampingFactor}else if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return}!1===e.data.enabledTranslation[0]&&(RJ.x=RK.x),!1===e.data.enabledTranslation[1]&&(RJ.y=RK.y),!1===e.data.enabledTranslation[2]&&(RJ.z=RK.z);
7686let a=R1(RK,RJ,e.wasOutside?0:e.data.maxDelta);if(e.currentDampingFactor>1){let i=RQ.subVectors(a,RK).divideScalar(e.currentDampingFactor);RK.add(i),t&&R2(e.object,RK),e.paused=.01>i.length()}else R2(e.object,a),e.paused=!0;e.object?.dispatchEvent({type:"beginEvent",eventName:"Follow"}),e.object.dispatchEvent(R0)}},R5=new ix,R6=new ix,R8=new iQ,R9=new iy,R7=new iy,Le=new ix,Lt=new ix,Li=new ix,Lr=new ix,Ls=new sn,La={type:"requestRender"},Ln={type:"changeRotation"},Lo=(to=new iQ,function(e,t){null!==e.parent?to.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix):to.copy(e.hiddenMatrix),t.premultiply(Rh(to).invert()),e.rotation.setFromRotationMatrix(t),e.updateMatrix(),e instanceof SD&&EM(e.parent)&&e.invalidateDownstreamBooleanData(!0)}),Ll=class{constructor(e,t,i,r){this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.isReset=!1,this.worldQuaternion0=new iy,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mJ.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.object.getWorldQuaternion(this.worldQuaternion0),this.resetDampingFactor=80/this.data.resetSpeed+1}},Lh=class extends Ry{constructor(){super(...arguments),this.events=[],this.pairOfEventListeners=[],this.pairOfUserEventListeners=[],this.onMouseMove=e=>{if(!(u2.length>1))for(let t of(this._lastMouseEvent=e,this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onScroll=e=>{if(this._lastMouseEvent){let e=new PointerEvent("pointermove",{clientX:this._lastMouseEvent.clientX,clientY:this._lastMouseEvent.clientY,bubbles:!0,cancelable:!0,view:window});this.eventContext.eventElement.dispatchEvent(e)}},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)},this.createUserEventListener=e=>({eventName:t,target:i})=>{if(!t||!i)return;let r=Rw(t);r&&"LookAt"===r&&this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"LookAt"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new Ll(i.data,i.id,t,e))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uZ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents?i.addEventListener("scroll",this.onScroll):(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events)){if(void 0!==e.target){let t=this.onTargetChange(e),i=e.target;this.pairOfEventListeners.push([i,t]),i.addEventListener("requestRender",t)}let t=this.createUserEventListener(e),i=e.object;this.pairOfUserEventListeners.push([i,t]),i.addEventListener("userEvent",t)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uZ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),t.removeEventListener("scroll",this.onScroll),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let[e,t]of this.pairOfUserEventListeners)e.removeEventListener("userEvent",t);for(let e of this.events)e.paused=!0,e.isReset=!1}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e)}updateSingleEvent(e){let{tilt:t,axis:i,distance:r,plane:s,limitDistance:a,enabledRotation:o,limitDistanceEnabled:l}=e.data,{getCamera:h,raycaster:c}=this.eventContext,{object:d,target:u}=e;if(d.getWorldPosition(Le),!e.isReset){if(e.target)e.target.getWorldPosition(Lt);else{if("custom"===s?(h().getWorldDirection(R6),R6.negate(),Ls.setFromNormalAndCoplanarPoint(R6,Le)):("xy"===s?R5.set(0,0,1):"xz"===s?R5.set(0,1,0):"yz"===s&&R5.set(1,0,0),Ls.setFromNormalAndCoplanarPoint(R5,Le)),!c.ray.intersectPlane(Ls,Lt))return;r>0&&("custom"===s||void 0===s)&&Lt.addScaledVector(R6,r)}}if(e.isReset||(u?"target"===t?Li.copy(u.up).applyMatrix4(R8.extractRotation(u.matrixWorld)).normalize():o.some(e=>!1===e)?("x"===i?(Lr.set(0,0,1),!1===o[2]&&Lr.set(0,1,0)):"y"===i?(Lr.set(1,0,0),!1===o[0]&&Lr.set(0,0,1)):(Lr.set(0,1,0),!1===o[1]&&Lr.set(1,0,0)),Li.copy(Lr).applyQuaternion(e.worldQuaternion0).normalize()):Li.set(0,1,0):"custom"===s?Li.set(0,1,0):Li.copy(R5)),e.isReset)R7.copy(e.worldQuaternion0);else if(Le.distanceTo(Lt)>a&&l&&u){if(e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;R7.copy(e.worldQuaternion0),e.currentDampingFactor=e.resetDampingFactor}else{let r;if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return;r=R8.elements,Lu.subVectors(Lt,Le),0===Lu.lengthSq()&&(Lu.z=1),Lu.normalize(),Ld.crossVectors(Li,Lu),0===Ld.lengthSq()&&(1===Math.abs(Li.z)?Lu.x+=1e-4:Lu.z+=1e-4,Lu.normalize(),Ld.crossVectors(Li,Lu)),Ld.normalize(),Lc.crossVectors(Lu,Ld),"x"===i?1===Lr.z?[Ld,Lc,Lu]=[Lu,Ld,Lc]:(Ld.negate(),[Ld,Lu]=[Lu,Ld]):"y"===i?1===Lr.x?[Ld,Lc,Lu]=[Lc,Lu,Ld]:(Ld.negate(),[Lc,Lu]=[Lu,Lc]):1===Lr.x&&(Ld.negate(),[Ld,Lc]=[Lc,Ld]),r[0]=Ld.x,r[4]=Lc.x,r[8]=Lu.x,r[1]=Ld.y,r[5]=Lc.y,r[9]=Lu.y,r[2]=Ld.z,r[6]=Lc.z,r[10]=Lu.z,R7.setFromRotationMatrix(R8),R9.setFromUnitVectors(Lr.applyQuaternion(R7),Li),o.some(e=>!1===e)&&"target"!==t&&R7.premultiply(R9).normalize()}e.currentDampingFactor>1?(d.updateWorldMatrix(!0,!1),R9.setFromRotationMatrix(Rh(d.matrixWorld)),R9.slerp(R7,1/e.currentDampingFactor),Lo(d,R8.makeRotationFromQuaternion(R9)),e.paused=8*(1-R9.dot(R7))<1e-6):(Lo(d,R8.makeRotationFromQuaternion(R7)),e.paused=!0),e.object?.dispatchEvent({type:"beginEvent",eventName:"Lo
7686okAt"}),d.dispatchEvent(La),d.dispatchEvent(Ln)}},Lc=new ix,Ld=new ix,Lu=new ix,Lp=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.entered=!1,this.actions=OR(t,t.actions,r,s,a,i)}disconnect(){OL(this.actions)}dispatchEnter(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.play()),this.actions.Create.forEach(e=>e.dispatchStart()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}dispatchLeave(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered&&(this.entered=!1,this.actions.Create.forEach(e=>e.dispatchStop()),this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},Lf=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObjects={},this.objects=[],this.objects2D=[],this._prevObjects=[],this.onMouseDown=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onMouseUp=e=>{u2.length>1||this.handleMouseHoverEvent(!0)},this.onMouseMove=e=>{u2.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rw(e);r&&"MouseHover"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[t.uuid]?.forEach(e=>e.dispatchUserEvent(i)))}}connect(){let{page:e,sharedAssets:t}=this.eventContext,i=(i,r)=>{if(!(!i.visible||!i.data?.events.length)){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"MouseHover"===s.type)try{let a=new Lp(r,s,i,e,t,this.eventManager);this.eventsPerObjects[i.uuid]?this.eventsPerObjects[i.uuid].push(a):this.eventsPerObjects[i.uuid]=[a]}catch(e){}this.eventsPerObjects[i.uuid]?.length&&this.objects.push(i instanceof TZ?r:i)}};if(e.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&e.frame?.traverse(t=>{i(t,e)}),i(e)}),!this.objects.length)return;let{domElement:r}=this.eventContext;this.domEventsNeeded.clear(),uZ&&(this.domEventsNeeded.add("pointerdown"),r.addEventListener("pointerdown",this.onMouseDown),this.domEventsNeeded.add("pointerup"),r.addEventListener("pointerup",this.onMouseUp)),this.domEventsNeeded.add("pointermove"),r.addEventListener("pointermove",this.onMouseMove),this.objects.forEach(e=>{e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if(!this.objects.length)return;let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),uZ&&(e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerup",this.onMouseUp)),e.removeEventListener("pointermove",this.onMouseMove),Object.values(this.eventsPerObjects).forEac
vendor: 8,555 bytes, line 7686
7686h(e=>{e.forEach(e=>{e.disconnect()})}),this.objects.forEach(e=>{e.removeEventListener("userEvent",this.onUserEvent)})}handleMouseHoverEvent(e=!1){let t=[];if(!e){let{stopRaycast:e,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=!1;if(r.uiCanvas&&(a=Rm(r,[s.x,s.y],Object.keys(this.eventsPerObjects),e=>{t.push(e)})),e&&!a){let e=Rp(i,r,this.objects);t=Rf(e),e.forEach(e=>{e.object instanceof PV&&Rm(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)})})}else this.objects.forEach(e=>{let r=Rg(i,e);r&&(t.push(e),e instanceof PV&&Rm(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{t.includes(e)||(e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchLeave()))}),t.length&&t.forEach(e=>{e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchEnter())}),this._prevObjects=t}},Lm=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.scrollCounter=0,this.actions=OR(t,t.actions,r,s,a,i)}connect(){this.scrollCounter=0}disconnect(){OL(this.actions)}dispatch(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let t=e>0?1:-1;this.scrollCounter+=t,this.scrollCounter=Math.min(Math.max(this.scrollCounter,0),this.data.steps);let i=this.scrollCounter/this.data.steps;this.actions.Transition.forEach(e=>e.seek(i)),this.actions.Animation.forEach(e=>e.seek(t)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},Lg=class{constructor(e,t,i,r,s,a,o){this.id=e,this.data=t,this.object=i,this.domElement=a,this.eventManager=o,this.scrollStart=0,this.scrollEnd=0,this.actions=OR(t,t.actions,r,s,o,i)}getStickyParentElement(){let e=this.domElement;for(;e;){if("sticky"===window.getComputedStyle(e).position)return e;e=e.parentElement}return null}computeScrollBounds(){let e=this.getStickyParentElement(),t=e?.parentElement,i=this.domElement.getBoundingClientRect(),r={top:i.top,bottom:i.bottom,left:i.left,right:i.right,width:i.width,height:i.height};if(t){let s=t.getBoundingClientRect(),a=window.getComputedStyle(e),o=parseFloat(a.marginTop)+parseFloat(a.marginBottom),l=parseFloat(a.top),h=parseFloat(a.bottom),c=s.height-o;if(isNaN(l)){if(!isNaN(h)){let e=document.body.clientHeight??window.innerHeight,t=window.innerWidth-(document.documentElement.clientWidth??window.innerWidth);i.bottom===e-h?(r.top+=s.top-i.height+h+t,r.bottom+=s.top-i.height+h+t):i.bottom<e-h&&(r.top-=c-i.height,r.bottom-=c-i.height)}}else i.top===l?(r.top+=s.top-l,r.bottom+=s.top-l):i.top<0&&(r.top-=c-i.height,r.bottom-=c-i.height)}let s=document.body,a=document.documentElement,o=window.pageYOffset||a.scrollTop||s.scrollTop,l=a.clientTop||s.clientTop||0,h=Math.round(r.top+o-l);if("enter"===this.data.startFrom){let e=window.innerHeight,t=r.height,i=this.data.enterAnchor;this.scrollStart=h-("top"===i?e:"bottom"===i?e-t:e-.5*t)}else this.scrollStart=0;this.scrollStart+=this.data.startOffset??0,this.scrollEnd=this.scrollStart+(this.data.endAfter??400),this.box=r,this.computeScroll({x:window.scrollX,y:window.scrollY})}connect(){this.computeScrollBounds()}disconnect(){OL(this.actions)}handleResize(){this.computeScrollBounds()}get isInvalidBox(){return void 0===this.box||0===this.box.width&&0===this.box.height&&0===this.box.top&&0===this.box.bottom}computeScroll({x:e,y:t}){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let i=this.scrollEnd-this.scrollStart,r=Math.min(1,Math.max(0,(t-this.scrollStart)/i));this.actions.Transition.forEach(e=>e.seek(r)),this.actions.Animation.forEach(e=>e.seek(r)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatch(e){this.isInvalidBox&&this.computeScrollBounds(),this.computeScroll(e)}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},Lv=class extends Ry{constructor(e,t){super(e),this.managers=t,this.wheelEventsPerObject=new Map,this.scrollEventsPerObject=new Map,this.isInview=!0,this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.handleResize())})},this.onScroll=e=>{if(!this.isInview)return;let t={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([e,i])=>{e.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:t}),i.forEach(e=>e.dispatch(t))})},this.onWheel=e=>{!this.isInview||e.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([t,i])=>{t.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:e.deltaY}),i.forEach(t=>t.dispatch(e.deltaY))})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rw(e);r&&"Scroll"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{page:e,sharedAssets:t,domElement:i,isExport:r}=this.eventContext,s=s=>{if(s.data?.events.length){for(let{id:a,data:o}of s.data.events)if(!o.disabled&&"Scroll"===o.type){if("load"!==o.trigger&&r){let r=new Lg(a,o,s,e,t,i,this.managers);this.scrollEventsPerObject.has(s)?this.scrollEventsPerObject.get(s)?.push(r):this.scrollEventsPerObject.set(s,[r])}else{let i=new Lm(a,o,s,e,t,this.managers);this.wheelEventsPerObject.has(s)?this.wheelEventsPerObject.get(s)?.push(i):this.wheelEventsPerObject.set(s,[i])}}}};e.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&e.frame?.traverse(e=>{s(e)}),s(e)}),this.intersectionObserver=new IntersectionObserver(e=>{let t=e[0];t&&(this.isInview=t.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>
7686{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)})}},Ly=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OR(t,t.actions,r,s,a,i)}disconnect(){OL(this.actions)}dispatch(){this.actions.Transition.forEach(e=>{e.play()}),this.actions.Animation.forEach(e=>{e.play()}),this.actions.SwitchCamera.forEach(e=>{e.play()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatchFromStart()}),this.actions.Destroy.forEach(e=>{e.dispatchFromStart()})}dispatchAfter(e){this.actions.Audio.forEac
7686h(t=>{(t.interaction.data.triggerAfter??"any")===e&&(t.interaction instanceof D7?t.interaction.audioPlayer.play():t.interaction instanceof Ie&&t.interaction.dispatch())}),this.actions.Video.forEach(t=>{let i=t.interaction.data.triggerAfter??"autoplay";i===e&&(t.interaction instanceof OF?t.interaction.play("autoplay"===i):t.interaction instanceof ON&&t.interaction.dispatch())}),this.actions.Particles.forEach(t=>{(t.data.triggerAfter??"any")===e&&t.dispatchBasic()})}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}
7686),this.actions.Audio.forEach(e=>{e.interaction instanceof D7?e.interaction.audioPlayer.play():e.interaction instanceof Ie&&e.interaction.dispatch()}),this.actions.Video.forEach(e=>{e.interaction instanceof OF?e.interaction.play():e.interaction instanceof ON&&e.interaction.dispatch()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()})}},Lx=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObject=new Map,this.eventsAfterPerObject=new Map,this.onMouseDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("mouseDown")})})},this.onKeyDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("keyDown")})})},this.onAny=()=>{let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("any")})})},this.onSceneTransitionAudioVideoPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>
vendor: 4,072 bytes, line 7686
7686{e.actions.Audio.forEach(e=>{e.interaction instanceof D7&&e.interaction.audioPlayer.play()}),e.actions.Video.forEach(e=>{let t=e.interaction.data.triggerAfter??"autoplay";e.interaction instanceof OF&&e.interaction.play("autoplay"===t)}),e.actions.Particles.forEach(e=>{e.dispatchBasic()})})})},this.onPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("autoplay")})})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rw(e);r&&"Start"===r&&(t instanceof TZ||t.dispatchEvent({type:"beginEvent",eventName:"Start"}),this.eventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}),this.eventsAfterPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{sharedAssets:e,page:t}=this.eventContext,i=i=>{if(i.data?.events.length)for(let{id:r,data:s}of i.data.events){if(s.disabled||"Start"!==s.type)continue;let a=new Ly(r,s,i,t,e,this.eventManager);(a.actions.Transition.length||a.actions.Animation.length||a.actions.SwitchCamera.length||a.actions.Create.length||a.actions.Destroy.length||a.actions.SceneTransition.length||a.actions.Reset.length||a.actions.SetVariable.length||a.actions.DynamicVariablePlay.length||a.actions.ClearLocalStorage.length||a.actions.UserAPI.length)&&(this.eventsPerObject.has(i)?this.eventsPerObject.get(i)?.push(a):this.eventsPerObject.set(i,[a])),a.actions.Audio.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Video.length&&(this.hasVideoAction=!0,this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Particles.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a]))}};if(t.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&e.frame?.traverse(e=>{i(e)}),i(e)}),[...this.eventsAfterPerObject.values()].some(e=>e.length)){if(0===this.eventManager.activateCount){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.addEventListener("pointerdown",this.onMouseDown,{once:!0}),i.addEventListener("mousedown",this.onMouseDown,{once:!0}),document.addEventListener("keydown",this.onKeyDown,{once:!0}),i.addEventListener("pointerdown",this.onAny),i.addEventListener("mousedown",this.onAny),document.addEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.addEventListener("userEvent",this.onUserEvent)})}else this.onSceneTransitionAudioVideoPlay();this.onPlay()}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>e.dispatch()),e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if([...this.eventsAfterPerObject.values()].some(e=>e.length)){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onMouseDown),i.removeEventListener("mousedown",this.onMouseDown),document.removeEventListener("keydown",this.onKeyDown),i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())})}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())}),this.eventsPerObject.clear(),this.eventsAfterPerObject.clear()}},Lb=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.initialDisabled=!1,this.actions=OR(t,t.actions,r,s,a,i),this.target=t.target}disconnect(){OL(this.actions)}dispatch(e){this.initialDisabled||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Collision"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}
7686),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(t=>{t.dispatch(e??!1)}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}},Lw=class extends Ry{constructor(e,t,i,r,s){super(e),this.sharedVariables=t,this.eventManager=i,this.needsMouse=r,this.needsRaycast=s,this.dynamicVars=[],this.variablesToWatch=[],this.prevMouseProperty=null,this.prevRaycastProperty=null,this.pauseTime=0,this.isOutOfFocus=!1,this.events=[],this.onFrame=e=>{let t=this.eventContext.sharedAssets;if(this.rafId=window.requestAnimationFrame(this.onFrame),this.isOutOfFocus)return;let i=new Date,r=[],s=[];for(let e=0;e<this.propertiesToWatch.length;e++){let{objectId:t,property:i,prevValue:r}=this.propertiesToWatch[e],a=this.eventContext.scene.find(t),o=m5.propertyPaths[i];if("width"===o[0]||"height"===o[0]||"depth"===o[0])a=a.geometry.userData.parameters[o[0]];else for(let e=0;e<o.length;e++)a=a[o[e]];null===r?this.propertiesToWatch[e].prevValue=a instanceof ix?a.clone():a:(a instanceof ix?a.equals(r):r===a)||(s.push({objId:t,property:i}),a instanceof ix?this.propertiesToWatch[e].prevValue.copy(a):this.propertiesToWatch[e].prevValue=a)}for(let e=0;e<this.variablesToWatch.length;e++){let{id:i,prevValue:s}=this.variablesToWatch[e],a=t.getVariable(i);a!==s&&(r.push(i),this.variablesToWatch[e].prevValue=a)}for(let s=0;s<this.dynamicVars.length;s++){let{id:a,expectedTime:o,last:l,data:h,timerSeconds:c,startValue:d}=this.dynamicVars[s],u=1e3;if(("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&"number3decimal"===h.format?u=1:"counter"===h.dynamicVariableType?u=h.updateInterval:"random"===h.dynamicVariableType&&(u=h.isStatic?1/0:h.updateInterval),-1===o){this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u;continue}if(!(("Stopped"===t.getDynamicVariablePlayState(a)||"Restarted"===t.getDynamicVariablePlayState(a))&&(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u,"counter"===h.dynamicVariableType&&t.getVariable(a)!==d&&(t.updateVariable(a,d),this.eventManager.requestRender()),("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&this.dynamicVars[s].timerSeconds!==d&&(this.dynamicVars[s].timerSeconds=d,t.updateVariable(a,yS.getFormattedTimerTime(d,h)),this.eventManager.requestRender()),"Restarted"===t.getDynamicVariablePlayState(a)&&t.setDynamicVariablePlayState(a,"Playing"),"Stopped"===t.getDynamicVariablePlayState(a)))){if("Paused"===t.getDynamicVariablePlayState(a)){void 0===this.dynamicVars[s].deltaToExpectedTime&&(this.dynamicVars[s].deltaToExpectedTime=Math.max(this.dynamicVars[s].expectedTime-e,0)),this.dynamicVars[s].last=e-(u-this.dynamicVars[s].deltaToExpectedTime),this.dynamicVars[s].expectedTime=e+this.dynamicVars[s].deltaToExpectedTime;continue}if(this.dynamicVars[s].deltaToExpectedTime=void 0,e>=o){if(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime+=u,"random"===h.dynamicVariableType){let e=h.min+Math.random()*(h.max-h.min),i=h.decimals;e=Math.round(e*Math.pow(10,i))/Math.pow(10,i),t.updateVariable(a,e),r.push(a),this.eventManager.requestRender()}else if("counter"===h.dynamicVariableType){let e=t.getVariable(a),i=t.getDynamicVariableToggleIsForward(a)??!0,s=t.getVariable(a)+h.increment*(i?1:-1);h.hasEnd&&((s=h.increment>0?tZ.clamp(s,d,h.endValue):tZ.clamp(s,h.endValue,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?s===h.endValue&&(s=d):(s===d||s===h.endValue)&&t.setDynamicVariablePlayState(a,"Paused")),s!==e&&(r.push(a),t.updateVariable(a,s),this.eventManager.requestRender())}else if("time"===h.dynamicVariableType){let e=t.getVariable(a),s=Am(i,h);if("object"==typeof e&&"textValue"in e&&"object"==typeof s&&"textValue"in s){if(Array.isArray(e.textValue)&&Array.isArray(s.textValue)){if(e.textValue.every((e,t)=>e===s.textValue[t]))continue}else if(e.textValue===s.textValue)continue}else if(e===s)continue;t.updateVariable(a,s),r.push(a),this.eventManager.requestRender()}else{let i=yv.isTextValue(h.endValue)?L_(h.endValue.textValue):h.endValue,o=t.getDynamicVariableToggleIsForward(a)??!0,u=c+(e-l)/1e3*("timer"===h.dynamicVariableType?-1:1)*(o?1:-1);u=Math.max(u,0),h.hasEnd&&((u="stopwatch"===h.dynamicVariableType?tZ.clamp(u,d,i):tZ.clamp(u,i,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1)&&(u=d):(Math.abs(u-d)<("number3decimal"===h.format?1e-4:.1)||Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1))&&t.setDynamicVariablePlayState(a,"Paused")),u!==c&&(r.push(a),this.dynamicVars[s].timerSeconds=u,t.updateVariable(a,yS.getFormattedTimerTime(u,h)),this.eventManager.requestRender())}}}}let a=!1;t.mouseProperty!==this.prevMouseProperty&&(this.prevMouseProperty=t.mouseProperty,a=!0);let o=!1;t.raycastProperty!==this.prevRaycastProperty&&(this.prevRaycastProperty=t.raycastProperty,o=!0),this.events.forEac
vendor: 1,054 bytes, line 7686
7686h(e=>{(r.includes(e.data.variableId)||s.find(t=>t.objId===e.data.objectId&&t.property===e.data.property)||"mouseProperty"===e.data.variableId&&a||"raycastProperty"===e.data.variableId&&o)&&(e.dispatch(),this.eventManager.requestRender())})},this.onBlur=()=>{this.pause()},this.onFocus=()=>{this.resume()}}pause(){this.isOutOfFocus||(this.isOutOfFocus=!0,this.pauseTime=Date.now())}resume(){if(!this.isOutOfFocus)return;this.isOutOfFocus=!1;let e=Date.now()-this.pauseTime;for(let t=0;t<this.dynamicVars.length;t++)this.dynamicVars[t].last+=e,this.dynamicVars[t].expectedTime+=e}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"VariableChange"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new LS(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.propertiesToWatch=this.events.filter(e=>"objectProperty"===e.data.variableId&&null!==e.data.objectId).map(e=>({objectId:e.data.objectId,property:e.data.property,prevValue:null}));let e=this.eventContext.sharedAssets;
7686this.sharedVariables.forEach(({id:t,data:i})=>{let r;if(!("dynamicVariableType"in i)){this.events.find(e=>e.data.variableId===t)&&this.variablesToWatch.push({id:t,prevValue:e.getVariable(t)});return}if("timer"===i.dynamicVariableType||"stopwatch"===i.dynamicVariableType){let e;if(yv.isTextValue(i.value)&&Array.isArray(i.value.textValue)){let t=i.value.textValue;e=3===t.length?t[2]+60*t[1]+3600*t[0]:t[1]+60*t[0]}else e=i.value;r=e,this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,timerSeconds:e,startValue:r})}else"time"===i.dynamicVariableType&&e.updateVariable(t,Am(new Date,i)),"counter"===i.dynamicVariableType&&(r=yv.isTextValue(i.value)?L_(i.value.textValue):i.value),this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,startValue:r})}),this.rafId=window.requestAnimationFrame(this.onFrame),window.addEventListener("blur",this.onBlur),window.addEventListener("focus",this.onFocus)}disconnect(){window.removeEventListener("blur",this.onBlur),window.removeEventListener("focus",this.onFocus),this.rafId&&(window.cancelAnimationFrame(this.rafId),this.rafId=void 0),this.events.forEach(e=>e.dispose())}},LS=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OR(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
vendor: 4,186 bytes, lines 7686-7747
7686e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispose(){OL(this.actions)}};function L_(e){return 3===e.length?e[2]+60*e[1]+3600*e[0]:e[1]+60*e[0]}var LA,LM,LE,LC=` 7687(async function() { 7688 const [wasmImport, wasmBinary] = await Promise.all([ 7689 import('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.js'), 7690 fetch('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.wasm').then((res) => res.arrayBuffer()), 7691 ]); 7692 const wasmModule = wasmImport.default; 7693 self.module = await wasmModule({ wasmBinary }); 7694 postMessage('ready'); 7695})(); 7696`,LT=` 7697(async function() { 7698 const [wasmImport, wasmBinary] = await Promise.all([ 7699 import(self.location.origin + '/_libraries/navmesh.js'), 7700 fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()), 7701 ]); 7702 const wasmModule = wasmImport.default; 7703 self.module = await wasmModule({ wasmBinary }); 7704 postMessage('ready'); 7705})(); 7706`,LP=` 7707 7708onmessage = function(messageEvent) { 7709 const meshData = messageEvent.data; 7710 const positions = meshData[0]; 7711 const offset = meshData[1]; 7712 const indices = meshData[2]; 7713 const indicesLength = meshData[3]; 7714 const parameters = meshData[4]; 7715 7716 const module = self.module; 7717 const rc = new module.rcConfig(); 7718 rc.cs = parameters.cs; 7719 rc.ch = parameters.ch; 7720 rc.borderSize = parameters.borderSize ? parameters.borderSize : 0; 7721 rc.tileSize = parameters.tileSize ? parameters.tileSize : 0; 7722 rc.walkableSlopeAngle = parameters.walkableSlopeAngle; 7723 rc.walkableHeight = parameters.walkableHeight; 7724 rc.walkableClimb = parameters.walkableClimb; 7725 rc.walkableRadius = parameters.walkableRadius; 7726 rc.maxEdgeLen = parameters.maxEdgeLen; 7727 rc.maxSimplificationError = parameters.maxSimplificationError; 7728 rc.minRegionArea = parameters.minRegionArea; 7729 rc.mergeRegionArea = parameters.mergeRegionArea; 7730 rc.maxVertsPerPoly = parameters.maxVertsPerPoly; 7731 rc.detailSampleDist = parameters.detailSampleDist; 7732 rc.detailSampleMaxError = parameters.detailSampleMaxError; 7733 7734 if (!self.navMesh) { 7735 self.navMesh = new module.NavMesh(); 7736 } 7737 self.navMesh.build(positions, offset, indices, indicesLength, rc); 7738 7739 const navmeshData = navMesh.getNavmeshData(); 7740 const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size); 7741 const ret = new Uint8Array(navmeshData.size); 7742 ret.set(arrView); 7743 navMesh.freeNavmeshData(navmeshData); 7744 7745 postMessage(ret); 7746} 7747`,LD={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1};pd.then(e=>{LA=e,LM=new e.Vec3,LE=new e.Vec3});var LI=new ix,LO=class{constructor(e=!1,t=!1){this.usePhysics=e,this.isExport=t,this.onPointerDown=e=>{if(1!==u2.length)return;let{raycaster:t,page:i}=this.eventContext;this.eventContext.updateRaycaster(e);let r=i.raycastWithClones(t);if(0!==r.length){if(this.gameControl){let e=LI.copy(this.gameControl.colliderWorldPosition);e.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(e,r[0].point)}this.eventContext.requestRender()}},this.traverseWithPhysics=(e,t)=>i=>{let r;if(i instanceof Ee){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xS)r=i.object;else if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0;
7747if(t&&!r.userData.navmesh)return;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;i.updateMatrixWorldSVD();let a=Ba(s),o=r.userData.hasDestroy,l=r.userData.hasDrag,h=!1,c=!1;for(let e of s.events)!0!==e.data.disabled&&("GameControl"===e.data.type?h=!0:"Follow"===e.data.type&&(c=!0));if(h||a||c||o||l)return!0;if(this.usePhysics&&s.physics?.rigidBody==="dynamic"){if(this.usePhysics&&s.physics?.fusedBody)return!0}else if("geometry"in i&&i.geometry&&e.push(Ra(i.geometry,i.matrixWorld)),this.usePhysics&&s.physics?.fusedBody)return i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof Ee){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else if(t instanceof xS)r=t.object;else if(r=t,t.dataPatched.cloner?.hideBase)return!0;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;"geometry"in t&&t.geometry&&e.push(Ra(t.geometry,t.matrixWorld))}),!0},this.traverseNoPhysics=(e,t)=>i=>{let r;if(i instanceof Ee)return;let s=(r=i instanceof xS?i.object:i).dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;if(t&&!r.userData.navmesh)return;let a=i.geometry,o=!0===r.userData.hasDestroy,l=!0===r.userData.hasDrag;if(Ba(s)||o||l||r.dataPatched.events.some(e=>!0!==e.data.disabled&&"GameControl"===e.data.type))return!0;a&&e.push(Ra(a,i.matrixWorld))},this.navmeshWasm=LA,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(t?LC:LT)+LP])),this._worker=new Worker(this._workerURL)}init(e,t,i){this.gameControl=t,this.eventContext=i,this.setDefaultQueryExtent(new ix().setScalar(e.ch*e.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(i.page,e,e=>{this.buildFromNavmeshData(e.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(e,t,i){t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=!0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=!0})});let r=[],s=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(r,"custom"===t.zones);if(e.traverseChildren(s),t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=void 0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=void 0})}),0===r.length)return!1;let a=gZ(r),{positions:o,triIndices:l}=So(a.getAttribute("position"),a.getIndex());return this._worker.postMessage([o,o.length/3,l,l.length,{...LD,...t}]),this._worker.onmessage=i,!0}createDebugNavGeometry(){let e,t,i=this.navMesh.getDebugNavMesh(),r=i.getTriangleCount(),s=new Uint32Array(3*r),a=new Float32Array(9*r);for(e=0;e<3*r;e++)s[e]=e;for(e=0;e<r;e++)for(t=0;t<3;t++){let r=i.getTriangle(e).getPoint(t);a[9*e+3*t+0]=r.x,a[9*e+3*t+1]=r.y,a[9*e+3*t+2]=r.z}let o=new rN;return o.setIndex(new rC(s,1)),o.setAttribute("position",new rC(a,3)),o}getClosestPoint(e){return LM.x=e.x,LM.y=e.y,LM.z=e.z,this.navMesh.getClosestPoint(LM)}getClosestPointToRef(e,t){LM.x=e.x,LM.y=e.y,LM.z=e.z;let i=this.navMesh.getClosestPoint(LM);t.set(i.x,i.y,i.z)}getRandomPointAround(e,t){return LM.x=e.x,LM.y=e.y,LM.z=e.z,this.navMesh.getRandomPointAround(LM,t)}getRandomPointAroundToRef(e,t,i){LM.x=e.x,LM.y=e.y,LM.z=e.z;let r=this.navMesh.getRandomPointAround(LM,t);i.set(r.x,r.y,r.z)}moveAlong(e,t){return LM.x=e.x,LM.y=e.y,LM.z=e.z,LE.x=t.x,LE.y=t.y,LE.z=t.z,this.navMesh.moveAlong(LM,LE)}moveAlongToRef(e,t,i){return LM.x=e.x,LM.y=e.y,LM.z=e.z,LE.x=t.x,LE.y=t.y,LE.z=t.z,this.navMesh.moveAlong(LM,LE)}computePath(e,t){let i=this.getClosestPoint(t);if(LE.x=i.x,LE.y=i.y,LE.z=i.z,Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)+Math.pow(t.z-i.z,2))>this.getDefaultQueryExtent().y)return[];this.getClosestPoint(e);let r=this.navMesh.computePath(LM,LE),s=r.getPointCount(),a=[];for(let e=0;e<s;e++){let t=r.getPoint(e);a.push(new ix(t.x,t.y,t.z))}return a}createCrowd(e,t){return new LR(this,e,t)}setDefaultQueryExtent(e){LM.x=e.x,LM.y=e.y,LM.z=e.z,this.navMesh.setDefaultQueryExtent(LM)}getDefaultQueryExtent(){return this.navMesh.getDefaultQueryExtent()}buildFromNavmeshData(e){let t=e.length*e.BYTES_PER_ELEMENT,i=this.navmeshWasm._malloc(t),r=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,i,t);r.set(e);let s=new this.navmeshWasm.NavmeshData;s.dataPointer=r.byteOffset,s.size=e.length,this.navMesh.buildFromNavmeshData(s),this.navmeshWasm._free(r.byteOffset)}getNavmeshData(){let e=this.navMesh.getNavmeshData(),t=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,e.dataPointer,e.size),i=new Uint8Array(e.size);return i.set(t),this.navMesh.freeNavmeshData(e),i}getDefaultQueryExtentToRef(e){let t=this.navMesh.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}dispose(){this.navMesh.destroy(),this._worker.terminate(),URL.revokeObjectURL(this._workerURL),this.eventContext?.renderer.domElement.removeEventListener("pointerdown",this.onPointerDown)}addCylinderObstacle(e,t,i){return LM.x=e.x,LM.y=e.y,LM.z=e.z,this.navMesh.addCylinderObstacle(LM,t,i)}addBoxObstacle(e,t,i){return LM.x=e.x,LM.y=e.y,LM.z=e.z,LE.x=t.x,LE.y=t.y,LE.z=t.z,this.navMesh.addB
7747oxObstacle(LM,LE,i)}removeObstacle(e){this.navMesh.removeObstacle(e)}isSupported(){return void 0!==this.navmeshWasm}},LR=class{constructor(e,t,i){this.navmeshWasmWrapper=e,this.transforms=[],this.agents=[],this.reachRadii=[],this._agentDestinationArmed=[],this._agentDestination=[],this.crowd=new this.navmeshWasmWrapper.navmeshWasm.Crowd(t,i,this.navmeshWasmWrapper.navMesh.getNavMesh())}onReachTarget(e,t){}addAgent(e,t,i){let r=new this.navmeshWasmWrapper.navmeshWasm.dtCrowdAgentParams;r.radius=t.radius,r.height=t.height,r.maxAcceleration=t.maxAcceleration,r.maxSpeed=t.maxSpeed,r.collisionQueryRange=t.collisionQueryRange,r.pathOptimizationRange=t.pathOptimizationRange,r.separationWeight=t.separationWeight,r.updateFlags=7,r.obstacleAvoidanceType=0,r.queryFilterType=0,r.userData=0;let s=this.crowd.addAgent(new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z),r);return this.transforms.push(i),this.agents.push(s),this.reachRadii.push(t.reachRadius?t.reachRadius:t.radius),this._agentDestinationArmed.push(!1),this._agentDestination.push(new ix(0,0,0)),s}getAgentPosition(e){return this.crowd.getAgentPosition(e)}getAgentPositionToRef(e,t){let i=this.crowd.getAgentPosition(e);t.set(i.x,i.y,i.z)}getAgentVelocity(e){return this.crowd.getAgentVelocity(e)}getAgentVelocityToRef(e,t){let i=this.crowd.getAgentVelocity(e);t.set(i.x,i.y,i.z)}getAgentNextTargetPath(e){return this.crowd.getAgentNextTargetPath(e)}getAgentNextTargetPathToRef(e,t){let i=this.crowd.getAgentNextTargetPath(e);t.set(i.x,i.y,i.z)}getAgentState(e){return this.crowd.getAgentState(e)}overOffmeshConnection(e){return this.crowd.overOffmeshConnection(e)}agentGoto(e,t){this.crowd.agentGoto(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z));let i=this.agents.indexOf(e);i>-1&&(this._agentDestinationArmed[i]=!0,this._agentDestination[i].set(t.x,t.y,t.z))}agentTeleport(e,t){this.crowd.agentTeleport(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z))}updateAgentParameters(e,t){let i=this.crowd.getAgentParameters(e);void 0!==t.radius&&(i.radius=t.radius),void 0!==t.height&&(i.height=t.height),void 0!==t.maxAcceleration&&(i.maxAcceleration=t.maxAcceleration),void 0!==t.maxSpeed&&(i.maxSpeed=t.maxSpeed),void 0!==t.collisionQueryRange&&(i.collisionQueryRange=t.collisionQueryRange),void 0!==t.pathOptimizationRange&&(i.pathOptimizationRange=t.pathOptimizationRange),void 0!==t.separationWeight&&(i.separationWeight=t.separationWeight),this.crowd.setAgentParameters(e,i)}removeAgent(e){this.crowd.removeAgent(e);let t=this.agents.indexOf(e);t>-1&&(this.agents.splice(t,1),this.transforms.splice(t,1),this.reachRadii.splice(t,1),this._agentDestinationArmed.splice(t,1),this._agentDestination.splice(t,1))}getAgents(){return this.agents}update(e){if(this.navmeshWasmWrapper.navMesh.update(),!(e<=.001)){if(1/60<=.001)this.crowd.update(e);else{let t=Math.floor(e/(1/60));t>10&&(t=10),t<1&&(t=1);let i=e/t;for(let e=0;e<t;e++)this.crowd.update(i)}for(let e=0;e<this.agents.length;e++){let t=this.agents[e],i=this.getAgentPosition(t);if(this.transforms[e].copy(i),this._agentDestinationArmed[e]){let r=i.x-this._agentDestination[e].x,s=i.z-this._agentDestination[e].z,a=this.reachRadii[e],o=this._agentDestination[e].y-this.reachRadii[e],l=this._agentDestination[e].y+this.reachRadii[e],h=r*r+s*s;i.y>o&&i.y<l&&h<a*a&&(this.onReachTarget(t,this._agentDestination[e]),this._agentDestinationArmed[e]=!1)}}}}setDefaultQueryExtent(e){let t=new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z);this.crowd.setDefaultQueryExtent(t)}getDefaultQueryExtent(){return this.crowd.getDefaultQueryExtent()}getDefaultQueryExtentToRef(e){let t=this.crowd.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}getCorners(e){let t,i=this.crowd.getCorners(e),r=i.getPointCount(),s=[];for(t=0;t<r;t++){let e=i.getPoint(t);s.push(new ix(e.x,e.y,e.z))}return s}dispose(){this.crowd.destroy()}},LL={type:"change"},LB={type:"changeZoom"},Lz={type:"changePan"},LF={type:"start"},LN={type:"end",changed:!0},LU={type:"end",changed:!1},Lk=new iy,LV=new tK,Lj=2*Math.PI,LG=new ix,LH=new tK,LW=new ix,Lq=new iy,LX=new iQ,LY={type:"requestRender"},LQ=class extends tz{constructor(e,t,i={isPlayMode:!1,isExport:!1}){super(),this.object=e,this.domElement=t,this.options=i,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,tO.DOLLY_ROTATE,tO.PAN],this.offset=new ix,this.eye=new ix,this.lastPosition=new ix,this.lastQuaternion=new iy,this.current=ne
vendor: 4,348 bytes, line 7747
7747w tK,this.overShoot=new tK,this.overRatio=new tK,this.spherical=new lB,this.sphericalDelta=new lB,this.panOffset=new ix,this.panLeftV=new ix,this.panUpV=new ix,this.panV=new ix,this.rotateStart=new tK,this.rotateEnd=new tK,this.rotateDelta=new tK,this.panStart=new tK,this.panEnd=new tK,this.panDelta=new tK,this.dollyStart=new tK,this.dollyEnd=new tK,this.dollyDelta=new tK,this.rotationRangeFactor=new tK,this.panRangeFactor=new tK,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.isTouchZoom=!0,this.autoRotateSpeed=2,this.dampingFactor=.125,this.zoomSpeed=2,this.rotateSpeed=1,this.panSpeed=1,this.hoverRotatePanStrength=.1,this.hoverRotateDamping=this.dampingFactor,this.thetaIsFree=!1,this.phiIsFree=!1,this.needsUpdate=!0,this.onCameraChange=e=>{this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange),this.object=e.camera,this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)},this.update=()=>{this.object.updateWorldMatrix(!0,!1),this.object.matrixWorld.decompose(LW,Lq,LG),this.offset.copy(LW).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&-1===this.state&&this.rotateLeft((!0===this.autoRotateClockwise?1:-1)*this.getAutoRotationAngle()),0!==this.rotationLimitsMode&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),2!==this.rotationLimitsMode&&(this.spherical.phi+=this.sphericalDelta.phi),(1!==this.rotationLimitsMode||!0===this.autoRotate)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&this.object.isPerspectiveCamera&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),0!==this.panLimitsMode&&(this.target.applyQuaternion(Lk.copy(Lq).invert()),this.panOffset.applyQuaternion(Lk),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(Lq),this.panOffset.applyQuaternion(Lq)),2===this.panLimitsMode&&(this.panOffset.y=0),1===this.panLimitsMode&&(this.panOffset.x=0),-1!==this.state||this.gesture?(this.target.add(this.panOffset),this.panOffset.set(0,0,0)):(this.panOffset.multiplyScalar(1-this.dampingFactor),this.target.add(this.panOffset)),this.offset.setFromSpherical(this.spherical),LW.copy(this.target).add(this.offset),this.object.position.copy(this.target).add(this.offset),this.object.parent&&(LX.copy(this.object.parent.matrixWorld).invert(),this.object.position.applyMatrix4(LX));let e=this.spherical.phi%Lj;if(this.eye.copy(this.offset).normalize(),this.object.up.copy(rc.DEFAULT_UP).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),e>0&&e>Math.PI||e<0&&e>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),-1===this.state||!0===this.enableDamping){let e=1===this.hoverRotatePanMode?this.hoverRotateDamping:this.dampingFactor;this.sphericalDelta.theta*=1-e,this.sphericalDelta.phi*=1-e}else this.sphericalDelta.set(0,0,0);return this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>.01||8*(1-this.lastQuaternion.dot(this.object.quaternion))>1e-8?(this.dispatchEvent(LL),this.object.dispatchEvent(LY),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverSho
7747ot=!1,this.object.wasMovedBySwitchCameraAction=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)},this.onPointerDown=e=>{!1!==this.enabled&&("touch"===e.pointerType||"pen"===e.pointerType&&uZ?this.onPointerDownTouch(e):this.onPointerDownMouse(e),-1!==this.state&&(this.isPointerDown=!0,this.dispatchEvent(LF),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uZ||this.domElement.setPointerCapture(e.pointerId)))},this.onPointerLeave=e=>{this.resetHoverEffectOnPointerLeave&&!this.useWindowEvents?(1===this.hoverRotatePanMode?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,LG.subVectors(this.position0,this.target0),this.spherical.setFromVector3(LG),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):2===this.hoverRotatePanMode&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=e},this.onPointerEnter=e=>{this.resetHoverEffectOnPointerLeave||void 0===this.pointerLeaveEvent?LH.set(e.clientX-this.domElement.clientWidth/2,e.clientY-this.domElement.clientHeight/2):LH.set(e.clientX-this.pointerLeaveEvent.clientX,e.clientY-this.pointerLeaveEvent.clientY),1===this.hoverRotatePanMode?(this.rotateDelta.copy(LH).multiplyScalar(this.rotateSpeed*this.hoverRotatePanStrength).rotateAround(LV,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(e.clientX,e.clientY)):2===this.hoverRotatePanMode&&(this.panDelta.copy(LH).multiplyScalar(this.panSpeed*this.hoverRotatePanStrength),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(e.clientX,e.clientY)),this.update()},this.onPointerMove=e=>{!1!==this.enabled&&(this.checkRaycastLock()||("touch"===e.pointerType||"pen"===e.pointerType&&uZ?this.onPointerMoveTouch(e):this.onPointerMoveMouse(e),e.stopPropagation()))},this.onPointerUp=e=>{this.isPointerDown=!1,0===u2.length&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),u2.length>1&&e.preventDefault(),this.hasChange?this.dispatchEvent(LN):this.dispatchEvent(LU),this.state=-1,e&&(e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uZ||this.domElement.releasePointerCapture(e.pointerId))},this.onPointerDownMouse=e=>{switch(this.useKeyEvents?this.mouseButtons[e.button]:this.mouseButtonsPlay[e.button]){case 0:if(!0!==e.altKey||e.shiftKey||u1(e)){if(" "===this.key){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 4:if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2;break;case 3:if(u1(e)||e.shiftKey){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 5:if(u1(e)||e.shiftKey){if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}else{if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=e=>{switch(this.state){case 0:if(!1===this.enableRotate)return;this.handleMouseMoveRotate(e);break;case 1:if(!1===this.enableZoom)return;this.handleMouseMoveDolly(e);break;case 2:if(!1===this.enablePan)return;this.handleMouseMovePan(e)}this.object.wasMovedByUser=!0},this.onPointerDownTouch=e=>{switch(u2.length>1&&e.preventDefault(),this.touches[u2.length-1]){case tO.ROTATE:if(!1===this.enableRotate){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case tO.PAN:if(!1===this.enablePan){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case tO.DOLLY_PAN:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchStartDollyPan(),this.state=5;break;case tO.DOLLY_ROTATE:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=e=>{switch(u2.length>1&&e.preventDefault(),this.state){case 3:if(!1===this.enableRotate)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(!1===this.enablePan)return;this.handleTouchMovePan(e),this.update();break;case 5:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}this.object.wasMovedByUser=!0},this.dispatchEndDebounced=uO(()=>this.dispatchEvent(LN),33),this.onMouseWheel=e=>{!1===this.enabled||!1===this.enableZoom&&!1===this.enablePan||this.checkRaycastLock()||(this.options.isExport||this.domElement.clientHeight!==document.body.clientHeight||this.domElement.clientWidth!==document.body.clientWidth||e.preventDefault(),this.dispatchEvent(LF),this.handleMouseWheel(e),this.dispatchEndDebounced(),this.object.wasMovedByUser=!0)},this.onGesture=e=>{e.preventDefault(),!1===this.enabled||this.checkRaycastLock()||uY||("gesturechange"===e.type?!1!==this.enableZoom&&!1!==this.isTouchZoom&&(this.dispatchEvent(LF),e.scale>this.prevScale?this.dollyIn(this.getZoomScale()):e.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=e.scale,this.update(),this.object.wasMovedByUser=!0):this.dispatchEvent(LN))},this.onContextMenu=e=>{e.preventDefault()},this.onTouchEnd=e=>{e.preventDefault()},this.onKeyDown=e=>{!1!==this.enabled&&(this.key=e.key," "===e.key&&this.dispatchEvent(LF))},this.onKeyUp=e=>{!1!==this.enabled&&(this.key=void 0,-1!==this.state&&"Alt"===e.key&&this.onPointerUp(u2[0])," "===e.key&&this.dispatchEvent(LN))},this.onPointerHover=e=>{"mouse"!==e.pointerType||!1===this.enabled||-1!==this.state||2===this.hoverRotatePanMode&&this.isPanOverShoot||1===this.hoverRotatePanMode&&this.isRotateOverSho
vendor: 8,263 bytes, line 7747
7747ot||(this.isPointerDown=!0,2===this.hoverRotatePanMode?this.handleMouseMovePan(e,this.hoverRotatePanStrength):1===this.hoverRotatePanMode&&this.handleMouseMoveRotate(e,this.hoverRotatePanStrength))},this.onBeginState=()=>{this.enabled=!1,this.needsUpdate=!1},this.onCompleteState=e=>{e.isfromEntity&&this.options.isPlayMode||(this.enabled=!0,this.needsUpdate=!0,this.object.updateUp(),this.object.getTarget(this.target))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat0=this.object.quaternion.clone(),this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.initialSphericalRadius=this.spherical.radius,this.addEventListenersToCamera()}dispatchEvent(e){"start"===e.type?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}addEventListenersToCamera(){this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)}removeEventListenersFromCamera(){this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange)}updateUseWindowEvents(e){if(window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("pointermove",this.onPointerHover),this.useWindowEvents=e,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}}fromJSON(e,t){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.thetaIsFree=e.rotationHorizontalOffset.min===e.rotationHorizontalOffset.max&&e.rotationHorizontalOffset.min===Math.PI,this.phiIsFree=e.rotationVerticalOffset.min===e.rotationVerticalOffset.max&&e.rotationVerticalOffset.min===Math.PI,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.hoverRotateDamping=e.hoverRotateDamping??this.dampingFactor,this.useWindowEvents="window"===t,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover));let i=e.hoverRotatePanStrength/100;this.hoverRotatePanStrength=i**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,this.autoRotateSpeed=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let r=this.object.getTarget().applyQuaternion(Lk.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+r.y,this.maxV=e.panVerticalOffset.max+r.y,this.minH=-e.panHorizontalOffset.min+r.x,this.maxH=e.panHorizontalOffset.max+r.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=LZ(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=LZ(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=LZ(LZ(this.spherical.theta)-e.rotationHorizontalOffset.min),this.maxTheta=LZ(LZ(this.spherical.theta)+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,1===e.orbitTouches&&(this.touches[0]=tO.ROTATE),1===e.panTouches&&(this.touches[0]=tO.PAN),2===e.orbitTouches&&(this.touches[1]=tO.DOLLY_ROTATE),2===e.panTouches&&(this.touches[1]=tO.DOLLY_PAN),3===e.orbitTouches&&(this.touches[2]=tO.ROTATE),3===e.panTouches&&(this.touches[2]=tO.PAN),this.isTouchZoom=e.isTouchZoom,this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){if(this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture),this.domElement.addEventListener("touchend",this.onTouchEnd),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}this.pointerLeaveEvent=void 0}dispose(){this.removeEventListenersFromCamera(),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,s,a,o,l){let h,c,d;this.overShoot.set(0,0),e instanceof ix?(h=e.x,c=e.y,this.current.set(this.target.x,this.target.y),d=!0):(h=e.theta,c=e.phi,this.current.set(LZ(this.spherical.theta),LZ(this.spherical.phi)),d=!1),0===i&&(this.current.x+=h,this.current.y+=c),(3===t||2===t)&&(!d&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<s&&this.current.x>0&&(this.overShoot.x=s-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<s&&(this.overShoot.x=s-this.current.x)),(3===t||1===t)&&(this.current.y>a?this.overShoot.y=a-this.current.y:this.current.y<o&&(this.overShoot.y=o-this.current.y)),d||(this.overShoot.x=LZ(this.overShoot.x),this.overShoot.y=LZ(this.overShoot.y)),0!==i?(this.overRatio.copy(this.overShoot).divide(l),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),1===i&&(this.overRatio.x=LK(Math.abs(this.overRatio.x)),this.overRatio.y=LK(Math.abs(this.overRatio.y))),this.isPointerDown||1===i?2===i&&(this.overRatio.x>.9&&!this.thetaIsFree||this.overRatio.y>.9&&!this.phiIsFree)?this.isPointerDown=!1:(h*this.overShoot.x<0&&!this.thetaIsFree&&(h*=1-this.overRatio.x),c*this.overShoot.y<0&&!this.phiIsFree&&(c*=1-this.overRatio.y)):2===i&&(!d&&(this.overRatio.x>.002&&!this.thetaIsFree||this.overRatio.y>.002&&!this.phiIsFree)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(this.thetaIsFree||(h=.05*this.overShoot.x),this.phiIsFree||(c=.05*this.overShoot.y),d?this.isPanOverShoot=!0:this.isRotateOverSho
7747ot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(h+=this.overShoot.x,c+=this.overShoot.y),e instanceof ix?(e.x=h,e.y=c):(this.thetaIsFree||(e.theta=h),this.phiIsFree||(e.phi=c))}setEnableDampingSpeed(e){this.enableDamping=e,this.rotateSpeed=!0===e?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let s=this.panV.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*s/i.clientHeight,this.object.matrixWorld),this.panUp(2*t*s/i.clientHeight,this.object.matrixWorld)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrixWorld),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrixWorld));this.dispatchEvent(Lz)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LB)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LB)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(LF),this.dollyOut(e),this.dispatchEvent(LN)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(LF),this.dollyIn(e),this.dispatchEvent(LN)}setZoom(e){if(this.dispatchEvent(LF),this.object.isPerspectiveCamera){let t=this.initialSphericalRadius/e/this.spherical.radius;this.scale=t}else this.object.isOrthographicCamera&&(this.object.zoom=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0);this.dispatchEvent(LN)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){void 0!==e.movementX?this.rotateDelta.set(e.movementX,e.movementY):(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)),this.rotateDelta.multiplyScalar(this.rotateSpeed*t).rotateAround(LV,-this.object.angleOffsetFromUp);let i=this.domElement,r=this.useWindowEvents?window.innerHeight:i.clientHeight,s=2*Math.PI*this.rotateDelta.x/r,a=2*Math.PI*this.rotateDelta.y/r;this.rotateLeft(s),this.rotateUp(a),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){void 0!==e.movementX?this.panDelta.set(e.movementX,e.movementY):(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)),this.panDelta.multiplyScalar(this.panSpeed*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(!1===uQ&&!1===u1(e)&&!0==(0===e.wheelDeltaY||0===e.deltaY?!(uX&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120)&&(e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX||e.wheelDeltaX===-3*window.devicePixelRatio*e.deltaX:0===e.deltaMode):e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY||e.wheelDeltaY===-3*window.devicePixelRatio*e.deltaY:0===e.deltaMode))!1!==this.enablePan&&(this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(this.panSpeed),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30));else{if(!1===this.enableZoom||this.gesture)return;0===e.deltaY?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(2===u2.length){let e=.5*(u2[0].pageX+u2[1].pageX),t=.5*(u2[0].pageY+u2[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(u2[0].pageX,u2[0].pageY)}handleTouchStartPan(){if(2===u2.length){let e=.5*(u2[0].pageX+u2[1].pageX),t=.5*(u2[0].pageY+u2[1].pageY);this.panStart.set(e,t)}else this.panStart.set(u2[0].pageX,u2[0].pageY)}handleTouchStartDolly(){let e=u2[0].pageX-u2[1].pageX,t=u2[0].pageY-u2[1].pageY,
7747i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(2===u2.length){let t=u7(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.rotateEnd.set(i,r)}else{if(e.pointerId!==u2[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(2===u2.length){let t=u7(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==u2[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=u7(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,s),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}checkRaycastLock(){if(!this.object.data.raycastLock||this.options.isPlayMode)return!1;{let e=this.options?.showCameraLock;return e&&e(),!0}}};function LZ(e){let t=2*Math.PI;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function LK(e){return 1-Math.pow(1-e,4)}var LJ=class{constructor(e,t,i,r,s,a){for(let o of(this.id=e,this.data=t,this.object=i,this.page=r,this.currentIntersectedObjects=[],this.actions=OR(t,t.actions,r,s,a,i),this.target=t.target,this.triggeringObjects=[],t.triggeringObjects)){let e=r.scene.find(o);e&&this.triggeringObjects.push(e)}}isValidTriggeringObject(e){return"all"===this.target||this.triggeringObjects.some(t=>t===e||t.isAncestorOf(e.uuid)||e.isAncestorOf(t.uuid))}disconnect(){OL(this.actions)}dispatch(){this.object.destroyedInAction||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Trigger"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch(!1)}
7747),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}};pu.then(e=>tl=e);var L$=new ix,L0=new iy,L1=new ix,L2=new i5(0,0,0,"YXZ"),L3=new i5(0,0,0,"XYZ"),L4=new ix,L5=new ix,L6=new ix(1,1,1),L8=new iy,L9=new iQ,L7=new iQ,Be={type:"updateMatrix"},Bt=new iy,Bi=new ik,Br={type:"beginEvent",eventName:"Collision"},Bs={type:"beginEvent",eventName:"Trigger"},Ba=e=>e.states.some(e=>void 0!==e.data.position||void 0!==e.data.rotation||void 0!==e.data.hiddenMatrix||void 0!==e.data.cloner||void 0!==e.data.pathSnapping),Bn=class{constructor(e){this.eventContext=e,this.isEnabled=!1,this.gameControl=null,this.joysticks=[],this.joystickToGameControls=[],this.sharedGameControlGlobals={entitiesWithTransformAnim:[],entityToCollisionEvents:{},colliderToEntity:new Map,triggers:[],gamePads:[],createdObjects:[],nCreatedPerAction:{}},this.sensorToTriggerEvent={},this.eventManager=void 0,this.needsCollisionDetection=!1,this.initializationCounter=-1,this.rigidBodyToMesh=new Map,this.nActiveRigidBodies=0,this.collisionEvents=[],this.isExport=!1,this.processRigidBody=e=>{if(e.bodyType()!==tl.RigidBodyType.Dynamic)return;e.isSleeping()||this.nActiveRigidBodies++;let[t,i,r]=this.rigidBodyToMesh.get(e.handle);if(L$.copy(e.translation()).multiplyScalar(this.pixelsPerMeter),L0.copy(e.rotation()),t.matrixWorld.compose(L$,L0,i),t.hasNonUniformScale&&t.matrixWorld.multiply(t.shearScale),t.dispatchEvent(Be),r){let e=t.cloner;if(e&&void 0===e.objectForSample)for(let i of(e.matrixWorld.copy(t.matrixWorld),e.children))i.updateMatrixWorld(!0);for(let e of t.children)e.updateMatrixWorld(!0)}},this.accumulator=0,this.handleCollisionEvents=(e,t,i)=>{let r,s;if(!1!==i){if(this.sensorToTriggerEvent[e]?(r=this.sensorToTriggerEvent[e],s=this.sharedGameControlGlobals.colliderToEntity.get(t)):this.sensorToTriggerEvent[t]&&(r=this.sensorToTriggerEvent[t],s=this.sharedGameControlGlobals.colliderToEntity.get(e)),r&&s&&r.isValidTriggeringObject(s)){r.dispatch();return}for(let i=this.sharedGameControlGlobals.createdObjects.length-1;i>=0;i--){let r=this.sharedGameControlGlobals.createdObjects[i];if(r.userData.hasCollisionDestroy&&(r.rigidBody?.collider(0).handle===e||r.rigidBody?.collider(0).handle===t)){this.sharedGameControlGlobals.createdObjects.splice(i,1),r.removeFromParent(),requestAnimationFrame(()=>this.sharedGameControlGlobals.rapierWorld?.removeRigidBody(r.rigidBody));break}}if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(e)){let e=this.sharedGameControlGlobals.colliderToEntity.get(t),i=this.sharedGameControlGlobals.entityToCollisionEvents[e.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,e,t)}else if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(t)){let t=this.sharedGameControlGlobals.colliderToEntity.get(e),i=this.sharedGameControlGlobals.entityToCollisionEvents[t.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,t,e)}else{let i=this.sharedGameControlGlobals.colliderToEntity.get(e),r=this.sharedGameControlGlobals.entityToCollisionEvents[i.uuid];if(void 0!==r)for(let t of r)"scene"===t.data.target&&this.dispatchCollisionEvent(t,i,e);let s=this.sharedGameControlGlobals.colliderToEntity.get(t),a=this.sharedGameControlGlobals.entityToCollisionEvents[s?.uuid];if(void 0!==a)for(let e of a)"scene"===e.data.target&&this.dispatchCollisionEvent(e,s,t)}}},this.isExport=e.isExport,this.sharedAssets=e.sharedAssets,this.renderer=e.renderer,this.requestRender=e.requestRender,this.domElement=this.renderer.domElement,this.pixelsPerMeter=200,this.gravity=this.page.data.globalPhysics.gravity}get page(){return this.eventContext.page}
7747attachVRControllers(e){e.forEach(e=>{e.addEventListener("connected",e=>{"gamepad"in e.data&&"axes"in e.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(e.data.gamepad)})})}markIsDestroyTarget(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events){if(!0===t.data.disabled)continue;let e=t.data.actions?.find(e=>"Destroy"===e.data.type)?.data;if(e)for(let t of e.objects){let e=this.page.scene.find(t);e&&(e.userData.hasDestroy=!0)}}})}markIsDragObject(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events)if(!(!0===t.data.disabled||"DragDrop"!==t.data.type))for(let e of t.data.objects){let t=this.page.scene.find(e);t&&(t.userData.hasDrag=!0)}})}initBVH(){let e=[];if(this.page.traverseChildren(t=>{let i,r=t instanceof EB,s=t instanceof De;if(t instanceof Ee||r||s)return;let a=(i=t instanceof xS?t.object:t).dataPatched;if(a.physics?.enabled==="visibility"?!a.visible:!a.physics?.enabled)return!0;let o=t.geometry,l=!0===i.userData.hasDestroy,h=!0===i.userData.hasDrag;if(Ba(a)||l||h||i.dataPatched.events.some(e=>!0!==e.data.disabled&&"GameControl"===e.data.type))return t.updateMatrixWorldSVD(),this.addBoundsTree(t),!0;o&&e.push(Ra(o,t.matrixWorld))}),e.length>0){let t=gZ(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new xt(t)}}addRigidBody(e,t,i){let r=[],s="geometry"in e?e.geometry:void 0,a=t.dataPatched;if(s?.getAttribute("position")!==void 0&&r.push(Ra(s,e.shearScale)),a.physics.fusedBody){let t=this.gatherChildrenGeom(e,r);e.traverseObject(t),e.children.forEach(e=>e.updateMatrixWorld(!0));let i=e.cloner;i&&void 0===i.objectForSample&&"dynamic"===a.physics.rigidBody&&(i.traverseObject(t),i.children.forEach(e=>e.updateMatrixWorld(!0)))}if(r.length>0){let o,l=!i.fromCreate&&"dynamic"===a.physics.rigidBody||i.fromCreate&&i.dynamic;l?(o=tl.RigidBodyDesc.dynamic()).setLinearDamping(a.physics.damping).setAngularDamping(a.physics.damping).setAdditionalMass(1e-9).setGravityScale(a.physics.gravityScale).enabledRotations(...a.physics.enabledRotation).enabledTranslations(...a.physics.enabledTranslation):(i.hasTransformAnim||i.hasFollow||i.hasDrag)&&!i.fromCreate?(o=tl.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e)):o=tl.RigidBodyDesc.fixed();let h=gZ(r);(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(L$,L0,L1),e.position0=L$.clone().divideScalar(this.pixelsPerMeter),e.rotation0=L0.clone(),L$.divideScalar(this.pixelsPerMeter),o.setTranslation(L$.x,L$.y,L$.z).setRotation(L0),s?h?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):h?.scale(L1.x/this.pixelsPerMeter,L1.y/this.pixelsPerMeter,L1.z/this.pixelsPerMeter);let c=this.sharedGameControlGlobals.rapierWorld.createRigidBody(o);l&&this.rigidBodyToMesh.set(c.handle,[e,L1.clone(),a.physics.fusedBody]);let d=!(void 0===a.geometry||"SubdivGeometry"===a.geometry.type||"NonParametricGeometry"===a.geometry.type||"BooleanGeometry"===a.geometry.type||"VectorGeometry"===a.geometry.type||"StarGeometry"===a.geometry.type||"RectangleGeometry"===a.geometry.type||"EllipseGeometry"===a.geometry.type||"TriangleGeometry"===a.geometry.type||"TorusGeometry"===a.geometry.type||"HelixGeometry"===a.geometry.type);try{this.addCollider(c,a.physics,h,t,d)}catch{try{this.addCollider(c,a.physics,h,t,!1)}catch(e){console.error(e)}}e.rigidBody=c}}addBoundsTree(e){let t=[];if(e.geometry?.getAttribute("position")!==void 0&&e.geometry?.getAttribute("position").count>0&&t.push(Ra(e.geometry,e.shearScale)),e.traverseObject(this.gatherChildrenGeom(e,t)),e.children.forEach(e=>e.updateMatrixWorld(!0)),t.length>0){let i=gZ(t,!1);e.bvhGeometry=i,i.getAttribute("position").count>0&&(e.bvhGeometry.boundsTree=new xt(i),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e))}}addCollider(e,t,i,r,s=!0){let a;if(i?.getAttribute("position").count===0||i?.getIndex()?.count===0)return;i&&(a="trimesh"===t.colliderType?tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array):tl.ColliderDesc.convexMesh(i.getAttribute("position").array,s?i.getIndex().array:void 0)),a.setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(t.density).setFriction(t.friction).setRestitution(t.restitution);let o=this.sharedGameControlGlobals.rapierWorld.createCollider(a,e);this.sharedGameControlGlobals.colliderToEntity.set(o.handle,r),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]?.some(e=>"scene"===e.target)&&o.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{let s;if(0===r)return;if(i instanceof Ee){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;s=i.object}else if(i instanceof xS)s=i.object;else if(s=i,s.dataPatched.cloner?.hideBase)return!0;let a=s.dataPatched;
7747if("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled)return!0;1===r?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(i.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let o=i.geometry;o?.getAttribute("position")!==void 0&&t.push(Ra(o,i.matrixWorld))}}activate(e){if(this.isEnabled)return;this.isEnabled=!0,this.eventManager=e,this.usePhysics=this.page.data.globalPhysics.usePhysics;let t=this.page.playCamera,i=!1,r=5,s=8,a=9,o="drag",l=this.page.data.publish.gameControlObject,h=null!==l?this.page.find(l):null,c=null;if(h)for(let e of h.data.events){if(e.data.disabled||"GameControl"!==e.data.type)continue;let t=h;for(;this.usePhysics&&(t=t.parent)?.parent!==null;)t.data.physics?.fusedBody;e.data.collisionEnabled&&(this.needsCollisionDetection=!0),null===c&&(c=e.data)}if(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if(!1===t.data.disabled&&"Trigger"===t.data.type)return this.needsCollisionDetection=!0,!0}),h&&c&&(!0===h.data.visible||!0===h.data.physics.enabled)){i=i||c.camera===t.uuid||h.uuid===t.uuid;let e=new Rr(h,this.renderer.domElement,c,this.eventContext.page.data.globalPhysics,this,h.uuid!==t.uuid&&c.camera===t.uuid,t,this.page,this.sharedAssets);this.gameControl=e,r=c.joystickPosLoc,s=c.joystickRotLoc,a=c.jumpTouchButtonLoc,o=c.rotByTouch,uZ&&c.touchControl&&(this.joystickToGameControls[r]="pos","walk"===c.moveMode&&(this.joystickToGameControls[a]="jmp"),"joystick"===o&&(this.joystickToGameControls[s]="rot"))}if(this.gameControl&&this.gameControl.data.navmesh.enabled){let e=this.gameControl.data;if(!this.navigationMeshWrapper){let t;this.navigationMeshWrapper=new LO(this.usePhysics,this.isExport),t=Math.floor((t="sphere"===e.collider.type?2*e.collider.radius:e.collider.height)/e.navmesh.ch-1),this.navigationMeshWrapper.init({...e.navmesh,walkableHeight:t},this.gameControl,this.eventContext)}}if(!1===i){let{enableRotate:e,enablePan:i,enableZoom:r,autoRotate:s,hoverRotatePanMode:a}=this.eventManager.publish.orbitControls;(e||i||r||s||0!==a)&&(this.orbitControls=new LQ(t,this.renderer.domElement,{isExport:this.isExport,isPlayMode:!0}),this.orbitControls.addEventListener("change",this.requestRender),this.orbitControls.addEventListener("end",this.requestRender),this.orbitControls.addEventListener("start",this.requestRender),this.orbitControls.fromJSON(this.eventManager.publish.orbitControls,this.eventManager.publish.mouseEventTarget),this.orbitControls.useKeyEvents=!1,this.orbitControls.addEventListenersToCamera(),this.orbitControls.connect(),this.orbitControls.update())}let d=this.renderer.domElement.width/this.renderer.getPixelRatio(),u=this.renderer.domElement.height/this.renderer.getPixelRatio();this.joystickToGameControls.forEach((e,t)=>{let i=document.body.appendChild(document.createElement("div")),[r,s,a]=this.eventManager.eventContext.publish.joystickSizeAndXYOffset[t],o=(d-5*r)/4+r,l={},h="jmp"===e,c=h?0:r;for(let e in t<10?(t<5?l.top=c/2:l.bottom=c/2,l.left=c/2+t%5*o):(10===t?l.left=c/2:l.right=c/2,l.top=u/2),l.top?l.top-=s[1]:l.bottom+=s[1],l.left?l.left+=s[0]:l.right-=s[0],l)l[e]+="px";if(h){let e=i.appendChild(document.createElement("div"));Object.assign(e.style,l,{position:"absolute",width:r+"px",height:r+"px",backgroundColor:`rgba(255,255,255,${"show"===a?.4:0})`,zIndex:"9999",borderRadius:r+"px",border:"show"===a?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let s=r/16*6.4;"show"===a&&(e.innerHTML=` 7748 <svg width="${s}" height="${.4*r}" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 7749 <path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 7750 </svg> 7751 `),e.addEventListener("pointerdown",()=>{this.gameControl.movementState.jump=1,this.requestRender()}),e.addEventListener("touchend",e=>e.preventDefault()),this.joysticks[t]=[void 0,i];return}let p={zone:i,mode:"static",position:l,size:r};"hide"===a&&(p.restOpacity=0);let f=D6.create(p);f.on("move",(t,i)=>{let r=this.gameControl;"pos"===e?i.force<.2?r.moveForce=0:(r.movementState.movePosZ=Math.sin(-i.angle.radian),r.movementState.movePosX=Math.cos(-i.angle.radian),i.force>1.2?r.movementState.run=1:r.movementState.run=0,i.force<.3?r.moveForce=(i.force-.2)/.1:r.moveForce=1):"rot"===e&&(i.force<.2?r.rotForce=0:(r.movementState.rotPosX=i.vector.y,r.movementState.rotPosY=-i.vector.x,i.force<.3?r.rotForce=(i.force-.2)/.1:r.rotForce=1)),this.requestRender()}),f.on("end",(t,i)=>{let r=this.gameControl;"pos"===e?(r.movementState.movePosZ=0,r.movementState.movePosX=0,r.moveForce=1):"rot"===e&&(r.movementState.rotPosX=0,r.movementState.rotPosY=0,r.rotForce=1)}),this.joysticks[t]=[f,i]}),this.markIsDestroyTarget(),this.markIsDragObject(),this.rebuildBVH(),this.initializationCounter++,window.setTimeout(()=>
7751{this.collisionEvents.forEach(e=>e.initialDisabled=!1)},80)}initPhysics(){this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=new tl.World(new tl.Vector3(0,this.gravity,0)),this.events=new tl.EventQueue(!0);let e=[],t=[];if(this.page.traverseChildren(i=>{let r;if(i instanceof Ee){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xS)r=i.object;else{if(i instanceof De||i instanceof EB)return;if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0}let s=r.dataPatched,a;for(let e of s.events)!0!==e.data.disabled&&"GameControl"===e.data.type&&(a=e.data);if(!s.physics||("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled))return!0;i.updateMatrixWorldSVD();let o=Ba(s),l=!1,h=r.userData.hasDestroy,c=r.userData.hasDrag,d=!1;for(let e of s.events)if(!0!==e.data.disabled){if("Collision"===e.data.type){l=!0;let t=new Lb(e.id,e.data,r,this.page,this.sharedAssets,this.eventManager);t.initialDisabled=!0,this.collisionEvents.push(t),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]&&this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].every(t=>t.id!==e.id)?this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].push(t):this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]=[t]}else if("Follow"===e.data.type){d=!0;let t=e.data.target;i.traverseVisible(e=>{e.userData.isFollowingObj=t})}}"dynamic"===s.physics.rigidBody&&!1===s.physics.fusedBody&&(i.matrixWorldFusedFalse=i.matrixWorld.clone());let u=i.geometry;if(void 0!==a){let e,t=tl.RigidBodyDesc.kinematicPositionBased();(i.hasNonUniformScale?i.matrixWorldRigid:i.matrixWorld).decompose(L$,L0,L1),i.position0=L$.clone().divideScalar(this.pixelsPerMeter),i.rotation0=L0.clone(),L$.divideScalar(this.pixelsPerMeter),t.setTranslation(L$.x,L$.y,L$.z).setRotation(L0);let o=this.sharedGameControlGlobals.rapierWorld.createRigidBody(t);i.rigidBody=o,(e="sphere"===a.collider.type?tl.ColliderDesc.ball(a.collider.radius/this.pixelsPerMeter):"capsule"===a.collider.type?tl.ColliderDesc.capsule((a.collider.height/2-a.collider.radius)/this.pixelsPerMeter,a.collider.radius/this.pixelsPerMeter):tl.ColliderDesc.cuboid(a.collider.width/this.pixelsPerMeter/2,a.collider.height/this.pixelsPerMeter/2,a.collider.depth/this.pixelsPerMeter/2)).setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(s.physics.density).setFriction(s.physics.friction).setRestitution(s.physics.restitution);let l=this.sharedGameControlGlobals.rapierWorld.createCollider(e,o);this.sharedGameControlGlobals.colliderToEntity.set(l.handle,r),L$.fromArray(a.collider.position).multiply(L1.setFromMatrixScale(r.matrixWorld)).divideScalar(this.pixelsPerMeter),l.setTranslationWrtParent(L$);let h=new iy().setFromEuler(new i5().setFromVector3(new ix().fromArray(a.collider.rotation)));l.setRotationWrtParent(h),l.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),this.generateSensorColliderDescs(r,!0)}else"dynamic"===s.physics.rigidBody||o||d||h||c||l?(this.addRigidBody(i,r,{hasFollow:d,hasTransformAnim:o,hasDrag:c}),this.generateSensorColliderDescs(r,s.physics.fusedBody)):(u&&e.push(Ra(u,i.matrixWorld)),s.physics.fusedBody&&i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof Ee){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else{if(t instanceof De||t instanceof EB)return;if(t instanceof xS)r=t.object;else if(r=t,r.dataPatched.cloner?.hideBase)return!0}let s=r.dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;let a=t.geometry;a?.getAttribute("position")!==void 0&&e.push(Ra(a,t.matrixWorld))}),this.generateSensorColliderDescs(r,s.physics.fusedBody,t));if(s.physics?.fusedBody===!0||a)return!0}),0===e.length)return;let i=gZ(e);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=tl.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),a=tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(tl.CoefficientCombineRule.Multiply).setRestitutionCombineRule(tl.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);for(let[e,i]of(this.sharedGameControlGlobals.rapierWorld.createCollider(a,s),t)){let t=this.sharedGameControlGlobals.rapierWorld.createCollider(e,s);this.sensorToTriggerEvent[t.handle]=i}}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}rebuildBVH(){this.usePhysics?this.initPhysics():(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let i=new LJ(t.id,t.data,e,this.page,this.sharedAssets,this.eventManager),r=new iQ().compose(L4.fromArray(t.data.position),L8.setFromEuler(L3.fromArray(t.data.rotation)),L6);if("box"===t.data.triggerZone){let s=new iS;s.min.fromArray(t.data.size).multiplyScalar(-.5),s.max.fromArray(t.data.size).multiplyScalar(.5),this.sharedGameControlGlobals.triggers.push([s,r,e,i])}else this.sharedGameControlGlobals.triggers.push([t.data.radius,r,e,i])}}),this.needsCollisionDetection&&this.initBVH())}
7751disconnectEvents(){this.collisionEvents.forEach(e=>e.disconnect()),this.sharedGameControlGlobals.triggers.forEach(e=>e[3].disconnect()),this.sharedGameControlGlobals.triggers.length=0}deactivate(){if(this.isEnabled){for(let e of(this.isEnabled=!1,this.page.traverse(e=>{e.matrixWorldFusedFalse&&(e.matrixWorldFusedFalse=void 0),e.rigidBody&&(e.rigidBody=void 0),e.position0&&(e.position0=void 0),e.rotation0&&(e.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=void 0,this.sharedGameControlGlobals.staticMeshBVH=void 0,this.accumulator=0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.disconnectEvents(),this.gameControl?.reset(),this.gameControl?.dispose(),this.gameControl=null,this.initializationCounter=-1,this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls&&(this.orbitControls.dispose(),this.orbitControls=void 0),this.navigationMeshWrapper?.dispose(),this.navigationMeshWrapper=void 0,Object.values(this.sharedGameControlGlobals.entityToCollisionEvents)))e.forEach(e=>e.disconnect());this.sharedGameControlGlobals.entityToCollisionEvents={},this.page.updateMatrixWorld(!0)}}update(e,t,i){if(!this.isEnabled)return!0;let r=!0;if(void 0!==this.orbitControls&&this.orbitControls.needsUpdate&&(r=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2?(this.initializationCounter++,r=!1):2===this.initializationCounter&&this.gameControl&&(r=!this.gameControl.update(e,t,i)&&r),!1===this.usePhysics&&this.checkTrigger(),this.usePhysics){if(0===e)r=this.stepPhysics()&&r;else{let t=e/1e3;t<.016666666666666666&&t>.009166666666666667&&(t=.016666666666666666),this.accumulator+=t;let i=performance.now(),s=0;for(;this.accumulator>=.016666666666666666&&s<6&&(r=this.stepPhysics()&&r,this.accumulator-=.016666666666666666,s++,!(performance.now()-i>16.666666666666668)););this.accumulator=this.accumulator%.016666666666666666}}return r}stepPhysics(){for(let e of this.sharedGameControlGlobals.entitiesWithTransformAnim)(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(L$,L0,L1),L2.setFromQuaternion(L0),void 0===e.prevR?(e.prevR=L2.clone(),e.prevT=L$.clone()):(e.prevR.copy(L2),e.prevT.copy(L$)),e.rigidBody&&(e.rigidBody.setNextKinematicTranslation(L$.divideScalar(this.pixelsPerMeter)),e.rigidBody.setNextKinematicRotation(L0));return this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),!this.updatePositions()}dispatchCollisionEvent(e,t,i){let r=(this.sharedGameControlGlobals.rapierWorld?.getCollider(i))._parent,s;if(t.cloner){for(let e of t.cloner.children)if(e.rigidBody===r){s=e;break}}e.dispatch(s),t.dispatchEvent(Br)}updateUseWindowEvents(e){this.orbitControls?.updateUseWindowEvents(e)}generateSensorColliderDescs(e,t,i){let r=L7.copy(e.matrixWorld).invert();e.traverseEntity((s,a)=>
7751{if(!1===t&&1===a)return!0;for(let t of s.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let a=new LJ(t.id,t.data,s,this.page,this.sharedAssets,this.eventManager),o;if((o="box"===t.data.triggerZone?tl.ColliderDesc.cuboid(...t.data.size.map(e=>e/(2*this.pixelsPerMeter))):tl.ColliderDesc.ball(t.data.radius/this.pixelsPerMeter)).setDensity(0).setSensor(!0).setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),L4.fromArray(t.data.position),L8.setFromEuler(L3.fromArray(t.data.rotation)),L9.compose(L4,L8,L6).premultiply(s.matrixWorld),i?(L9.decompose(L4,L8,L5),o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED)):(L9.premultiply(r).decompose(L4,L8,L5),e.rigidBody.bodyType()===tl.RigidBodyType.Dynamic||(e.rigidBody.bodyType()===tl.RigidBodyType.Fixed?o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED):o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_KINEMATIC|tl.ActiveCollisionTypes.DYNAMIC_KINEMATIC))),L4.divideScalar(this.pixelsPerMeter),o.setTranslation(L4.x,L4.y,L4.z),o.setRotation(L8),i)i.push([o,a]);else{let t=this.sharedGameControlGlobals.rapierWorld.createCollider(o,e.rigidBody);this.sensorToTriggerEvent[t.handle]=a}}})}checkTrigger(){let e;for(let t=0;t<this.sharedGameControlGlobals.triggers.length;t++){let[i,r,s,a]=this.sharedGameControlGlobals.triggers[t];for(let t=0;t<this.sharedGameControlGlobals.entitiesWithTransformAnim.length;t++){let o=this.sharedGameControlGlobals.entitiesWithTransformAnim[t];if(s===o||!1===a.isValidTriggeringObject(wZ.is(o)?o:o.object))continue;let l=L7.copy(s.matrixWorld).decompose(L4,Bt,L5).compose(L4,Bt,L6).multiply(r),h=L9.copy(o.matrixWorld).invert().multiply(l);i instanceof iS?e=o.bvhGeometry.boundsTree.intersectsBox(i,h):(Bi.radius=i,Bi.center.setFromMatrixPosition(h),e=o.bvhGeometry.boundsTree.intersectsSphere(Bi)),e?-1===a.currentIntersectedObjects.indexOf(o)&&(a.currentIntersectedObjects.push(o),a.dispatch(),s.dispatchEvent(Bs)):a.currentIntersectedObjects=a.currentIntersectedObjects.filter(e=>e!==o)}}}};function Bo(e){let t=this._clip.duration,i=this._clip.start??0,r=this.loop,s=this.time+e,a=this._loopCount,o=2202===r;if(0===e)return -1===a?s:o&&(1&a)==1?t-(s-i):s;if(2200===r){-1===a&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===a&&(e>=0?(a=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),s>=t||s<i){let r=Math.floor((s-i)/(t-i));s-=(t-i)*r,a+=Math.abs(r);let l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,o||(s=e>0?t:i,1===this.repetitions&&(s=t)),this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===l){let t=e<0;this._setEndings(t,!t,o)}else this._setEndings(!1,!1,o);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:r})}}else this.time=s;if(o&&(1&a)==1)return t-(s-i)}return s}var Bl=!1,Bh=class{constructor(e,t,i,r){this.scene=e,this.requestRender=t,this.updateDisplayProgress=i,this.animationInspectorState=r,this.clipIdToAction={},this.activeClip=null,this.needsUpdate=!1,this.addClip=e=>{"Empty"===e.data.type&&e.data.animations&&e.data.animations.forEach((t,i)=>{let r=t[0]+"/";if(Array.isArray(e.identity)?r+=e.identity[0]:r+=e.uuid,this.clipIdToAction[r])return;let s=o0.parse(JSON.parse(t[2]));e.animations[i]=s;let a=this.mixer.clipAction(s,e);!1===Bl&&(Object.getPrototypeOf(a)._updateTime=Bo,Bl=!0),a.clampWhenFinished=!0,this.clipIdToAction[r]=a})},this.mixer=new lD(e),this.scene.traverseEntity(this.addClip)}deleteClip(e,t){let i=this.scene.find(t);if(!i)return;let r=i.animations.find(t=>t.uuid===e);if(!r)return;let s=this.clipIdToAction[e];s&&(s.stop(),this.mixer.uncacheClip(r),delete this.clipIdToAction[e],i.animations=i.animations.filter(t=>t.uuid!==e))}get isPlaying(){return Object.values(this.clipIdToAction).some(e=>e.isRunning())}playFromInspector(e){this.mixer.stopAllAction();let t=this.clipIdToAction[e];t&&(t.play(),this.activeClip=t.getClip(),this.requestRender())}
7751onExitPlayMode(){Object.values(this.clipIdToAction).forEach(e=>{e.repetitions=1/0,e.loop=2201}),this.mixer.stopAllAction(),this.requestRender()}play(e){let t=e.clipId+"/"+e.object,i=this.clipIdToAction[t];if(i)return e&&(e.repeat>=0&&(i.repetitions=e.repeat+1),"pingpong"===e.direction&&0!==e.repeat&&(i.loop=2202)),i.play(),i.paused=!1,this.requestRender(),i}resumeFromInspector(e){let t=this.clipIdToAction[e];t&&(t.play(),t.paused=!1,this.requestRender())}pauseFromInspector(e){let t=this.clipIdToAction[e];t&&(t.paused=!0)}stop(){this.mixer.stopAllAction(),this.requestRender()}update(e){if(this.needsUpdate)this.needsUpdate=!1;else if(!1===this.isPlaying||this.animationInspectorState?.isScrubbing)return;this.mixer.update(e/1e3),this.activeClip&&this.updateDisplayProgress(Math.round(this.mixer.time/this.activeClip.duration*(this.maxFrames-1)%(this.maxFrames-1))),this.requestRender()}get maxFrames(){return OM(this.activeClip??void 0)}setProgressFromInspector(e,t){if(!this.clipIdToAction[t])return;this.activeClip!==this.clipIdToAction[t].getClip()&&this.playFromInspector(t);let i=this.clipIdToAction[t].paused;this.clipIdToAction[t].paused=!1,this.mixer.setTime(Math.min(e/(this.maxFrames-1),.9999)*this.activeClip.duration),this.requestRender(),i&&(this.clipIdToAction[t].paused=!0)}},Bc=new WeakMap,Bd=class extends o4{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let s=new o8(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,e=>{this.decodeDracoFile(e,t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};return this.decodeGeometry(e,s).then(t)}decodeGeometry(e,t){let i=JSON.stringify(t);if(Bc.has(e)){let t=Bc.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,s=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(s,a).then(i=>(r=i,new Promise((i,a)=>{r._callbacks[s]={resolve:i,reject:a},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),Bc.set(e,{key:i,promise:o}),o}_createGeometry(e){let t=new rN;e.index&&t.setIndex(new rC(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],s=r.name,a=r.array,o=r.itemSize;t.setAttribute(s,new rC(a,o))}return t}_loadLibrary(e,t){let i=new o8(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((t,r)=>{i.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=Bu.toString(),s=["/* draco decoder */",i,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(` 7752`);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){let i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}};function Bu(){let e,t;onmessage=function(i){let r=i.data;switch(r.type){case"init":e=r.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case"decode":let s=r.buffer,a=r.taskConfig;t.then(e=>{let t=e.draco,i=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(s),s.byteLength);try{let e=function(e,t,i,r){let s=r.attributeIDs,a=r.attributeTypes,o,l,h=t.GetEncodedGeometryType(i);if(h===e.TRIANGULAR_MESH)o=new e.Mesh,l=t.DecodeBufferToMesh(i,o);else if(h===e.POINT_CLOUD)o=new e.PointCloud,l=t.DecodeBufferToPointCloud(i,o);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!l.ok()||0===o.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+l.error_msg());let c={index:null,attributes:[]};for(let i in s){let l=self[a[i]],h,d;if(r.useUniqueIDs)d=s[i],h=t.GetAttributeByUniqueId(o,d);else{if(-1===(d=t.GetAttributeId(o,e[s[i]])))continue;h=t.GetAttribute(o,d)}c.attributes.push(function(e,t,i,r,s,a){let o=a.num_components(),l=i.num_points()*o,h=l*s.BYTES_PER_ELEMENT,c=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,s),d=e._malloc(h);t.GetAttributeDataArrayForAllPoints(i,a,c,h,d);let u=new s(e.HEAPF32.buffer,d,l).slice();return e._free(d),{name:r,array:u,itemSize:o}}(e,t,o,i,l,h))}return h===e.TRIANGULAR_MESH&&(c.index=function(e,t,i){let r=3*i.num_faces(),s=4*r,a=e._malloc(s);t.GetTrianglesUInt32Array(i,s,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}(e,t,o)),e.destroy(o),c}(t,i,o,a),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:r.id,error:e.message})}finally{t.destroy(o),t.destroy(i)}})}}}async function Bp(e){if(th){let t={attributeIDs:th.defaultAttributeIDs,attributeTypes:th.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await th.decodeGeometry(new Int8Array(e).buffer,t)}catch(e){console.error(e)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([e,t])=>({name:e,itemSize:t.itemSize,array:t.array}))}}return null}async function Bf(e,t){let[i,r]=pW(mn.deserialize(new Uint8Array(e)));return gQ(i),t&&t(i),r.result().data}async function Bm(e){for(let t of e){let e=await Bp(t.geometry.data.draco);if(e){let i=t.geometry.data;e.index&&(i.index={array:e.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let r={};
7752e.attributes.forEach(({name:e,array:t,itemSize:i})=>{r[e]={array:t,itemSize:i,type:"Float32Array",normalized:!1}}),i.attributes=r,i.draco=void 0}}}var Bg=class{constructor(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0],this._delay=500,this._distance=2,this._onMouseDown=e=>{let t=[e.clientX,e.clientY],i=new Date().getTime();if(this._clickCount>0){let e=t[0]-this._lastPosition[0],i=t[1]-this._lastPosition[1];Math.sqrt(e*e+i*i)>this._distance&&(this._clickCount=0)}this._lastPosition=t,this._clickCount=i-this._lastTime>this._delay?1:this._clickCount+1,this._lastTime=i},this._onMouseUp=e=>{}}start(e,t=500,i=2){this._target&&this.stop(),this.reset(),this._delay=t,this._distance=i,this._target=e,this._target.addEventListener("pointerdown",this._onMouseDown,!1),this._target.addEventListener("pointerup",this._onMouseUp,!1)}stop(){this._target&&(this._target.removeEventListener("pointerdown",this._onMouseDown,!1),this._target.removeEventListener("pointerup",this._onMouseUp,!1),this._target=void 0)}get clickCount(){return this._clickCount}reset(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0]}},Bv=class{constructor(e,t,i,r,s,a,o,l){this.eventId=e,this.id=t,this.data=i,this.dataEvent=r,this.object=s,this.stage=!1,this.actions=OR(r,i.actions,a,o,l,s)}disconnect(){OL(this.actions)}
7752dispatchIn(){this.actions.Audio.forEach(e=>e.dispatchBasic()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Video.forEach(e=>e.dispatchBasic()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.Link.forEach(e=>e.dispatch()),this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.actions.Transition.forEach(e=>e.toggle()),this.actions.Animation.forEach(e=>e.play()),this.actions.SwitchCamera.forEach(e=>e.play()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchOut(){this.actions.Transition.forEach(e=>{e.toggle()})}},By=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.breakpoints=[],this.resize=(e,t)=>{this.breakpoints.forEach(i=>{let r=m4.deviceToSize(i.data.size),s="horizontal"===i.dataEvent.orientation?e:t,a;switch(i.data.operator){case"<":a=s<r[0];break;case">":a=s>r[0];break;case"<>":a=s>r[0]&&s<r[1]}i.stage!==a&&(i.stage=a,i.stage?i.dispatchIn():i.dispatchOut())})},this.onResizeObserver=new ResizeObserver(e=>{for(let t of e){let{width:e,height:i}=t.contentRect;this.resize(e,i)}})}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext;this.onResizeObserver.observe(i);let r=i=>{if(!(!i.visible||!i.data?.events.length))for(let{data:r,id:s}of i.data.events)r.disabled||"Resize"===r.type&&r.breakpoints.forEach(({data:a,id:o})=>{try{let l=new Bv(s,o,a,r,i,e,t,this.eventManager);this.breakpoints.push(l)}catch(e){}})};e.traverseEntity(e=>{(e instanceof PV||e instanceof PO)&&e.frame?.traverse(e=>{r(e)}),r(e)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(e=>{e.disconnect()}),this.breakpoints=[]}},Bx=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.userAPIs={},this.events=[],this.onSuccess=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchSuccess()})},this.onError=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchError()})},this.userAPIs=e.sharedAssets.getUserAPIs()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"API"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new Bb(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userAPIs).forEach(([e,t])=>{t.on("success",this.onSuccess),t.on("error",this.onError),t.autostart&&t.callUserAPI(this.eventContext.sharedAssets)})}disconnect(){Object.entries(this.userAPIs).forEach(([e,t])=>{t.off("success",this.onSuccess),t.off("error",this.onError)})}},Bb=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.successActions=OR(t,t.successActions,r,s,a,i),this.errorActions=OR(t,t.errorActions,r,s,a,i)}dispatchSuccess(){this.dispatchActions(this.successActions)}dispatchError(){this.dispatchActions(this.errorActions)}
vendor: 1,586 bytes, line 7752
7752dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Bw=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.userWebhooks={},this.events=[],this.onMessage=({userWebhookId:e})=>{this.events.forEach(t=>{t.data.userWebhookId===e&&t.dispatch()})},this.userWebhooks=e.sharedAssets.getUserWebhooks()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"WEBHOOK"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BS(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userWebhooks).forEach(([e,t])=>{t.connect(),t.on("message",this.onMessage)})}disconnect(){Object.entries(this.userWebhooks).forEach(([e,t])=>{t.off("message",this.onMessage),t.disconnect()})}},BS=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OR(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
7752e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},B_=new ix(0,0,1),BA=new ix,BM=new ix,BE=new tJ,BC=class{constructor(e,t,i,r,s){this.containerScene=e,this.raycaster=t,this.sharedAssets=i,this.requestRender=r,this.onExit=s,this.htmlInput=null,this.virtualInput=null,this.helper=new TB,this.doubleClickHandler=new Bg,this.isDragging=!1,this.plane=new sn,this.caretInterval=0,this.planeIntersection=new ix,this.projected=new tK,this._lastIndex=0,this._isFirstDragMove=!1,this.selectionOnDragStart=0,this.onTextMaterialChanged=()=>{let e=this.virtualInput?.data;if(void 0!==this.virtualInput&&e){let t=e.material,i=function(e,t){let i=ga.fromHex(3223857),r=.8;for(let a of e.layers){if("light"===a.data.type||"displace"===a.data.type||"fresnel"===a.data.type||"matcap"===a.data.type||"texture"===a.data.type||"toon"===a.data.type||"outline"===a.data.type||"transmission"===a.data.type||"noise"===a.data.type)continue;let e="string"==typeof a.data.alpha?Number(t.getVariable(a.data.alpha)):a.data.alpha;if("color"===a.data.type&&e>.3){var s;i="string"==typeof(s=a.data.color)?t.data.colors[s]:s,r=e;break}if(("depth"===a.data.type||"gradient"===a.data.type)&&e>.3){let e=a.data.colors[0];i={r:e[0],g:e[1],b:e[2]},r="string"==typeof a.data.alpha?1:a.data.alpha;break}}return{...i,a:r}}("string"==typeof t?this.sharedAssets.data.materials[t]:t,this.sharedAssets);this.helper.setCaretColor(i)}},this.stopAnimateTextCursor=()=>{clearInterval(this.caretInterval),this.helper&&(this.helper.caretMesh.visible=!1)},this.startAnimateTextCursor=()=>{this.stopAnimateTextCursor(),this.helper&&(this.helper.caretMesh.visible=!0,this.caretInterval=setInterval(()=>{this.helper&&(this.helper.caretMesh.visible=!this.helper.caretMesh.visible),this.requestRender()},600))},this.handleCaretUpdate=e=>{if(!this.htmlInput||!this.virtualInput)return;let t=this.helper,i=e?.key==="ArrowLeft"||e?.key==="ArrowRight",r=e?.key==="ArrowUp"||e?.key==="ArrowDown";this.htmlInput.selectionStart===this.htmlInput.selectionEnd?(t.setCaretPosition(this.htmlInput.selectionStart,{horizontalKeyMove:i,verticalKeyMove:r}),this.startAnimateTextCursor()):t.setSelection(this.htmlInput.selectionStart,this.htmlInput.selectionEnd),this.requestRender()},this.containerScene.add(this.helper)}createInput(){let e;return this.htmlInput=((e=document.createElement("textarea")).style.position="fixed",e.style.top="200px",e.style.left="400px",e.style.zIndex="-1",e.style.border="1px solid rgba(255,0,0,0.5)",e.style.width="10px",e.style.height="500px",e.style.color="white",e.style.opacity="0.5",e.style.background="transparent",e.style.display="none",e.style.margin="0px",e.style.padding="0px",e.style.boxSizing="content-box",e.style.pointerEvents="none",e),this.htmlInput}connect(){}disconnect(){this.stopAnimateTextCursor(),this.helper.hide(),this.htmlInput?.remove(),this.doubleClickHandler.stop()}handleMouseDown(){if(!this.htmlInput||!this.virtualInput)return!0;this.getPointOnPlane();let e=this.doubleClickHandler.clickCount,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,e>1?"inside":"previous")??{index:0,lineIndex:0,characterIndex:0};this.virtualInput?.wrappedText?.length&&this.virtualInput.wrappedText[i][Math.max(0,r-1)]===` 7753`&&(t--,r--),this._lastIndex=t,this._isFirstDragMove=!0;let s=this.checkClickedObject();if(1===e){if(null===s)return this.onExit(this.virtualInput),!0;this.selectionOnDragStart=t,this.isDragging=!0,this.setInputSelection(t)}else s===this.virtualInput&&(2===e?this.selectClosestWord(i,r):e>2&&(this.setInputSelection(0,this.htmlInput.value.length),this.doubleClickHandler.reset()))}handleMouseUp(){this.applyRangeToTextInput(),this.isDragging=!1,this._isFirstDragMove=!1}handleMouseMove(){this.virtualInput&&(this._isFirstDragMove&&this.doubleClickHandler.clickCount>1&&(this.selectionOnDragStart=this._lastIndex,this.isDragging=!0,this.setInputSelection(this._lastIndex)),this._isFirstDragMove=!1,this.getPointOnPlane(),this.applyRangeToTextInput())}focus(e){if(this.virtualInput=e,this.updateTextInputStyles(),this.htmlInput){if(e){let e=this.data?.geometry.text;this.htmlInput.value="string"==typeof e?"":e?.textValue.toString()??""}else this.htmlInput.value=""}}blur(){}get data(){let{virtualInput:e}=this;if(e)return e.dataPatched}
7753applyRangeToTextInput(){if(!this.isDragging||!this.virtualInput||!this.htmlInput)return;let e=this.selectionOnDragStart,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,this.doubleClickHandler.clickCount>2?"inside":"previous")??{index:0};void 0!==i&&void 0!==r&&this.virtualInput?.wrappedText[i][r-1]===` 7754`&&t--,this.htmlInput.setSelectionRange(Math.min(e,t),Math.max(e,t))}checkClickedObject(){if(this.virtualInput){let e=this.raycaster.intersectObject(this.virtualInput,!1);if(e.length>0){let t=e[0];if(t.object instanceof Pz)return t.object}}return null}selectClosestWord(e,t){if(!this.virtualInput)return;let i=this.virtualInput.wrappedText,r=i[e],s=t+1,a=t;" "!==r[t]&&(s=this.findNextCharOccurence(r,t,"forward"," "),(a=this.findNextCharOccurence(r,t,"backward"," "))>0&&a++,s>=r.length-1&&e===i.length-1&&s++);let o=this.helper,l=o.getGlobalIndexFromLineAndCharIndexes(i,e,a),h=o.getGlobalIndexFromLineAndCharIndexes(i,e,s);this.setInputSelection(l,h)}findNextCharOccurence(e,t,i,r=" "){let s=Math.max(0,e.length-1),a="forward"===i?s:0,o="forward"===i?1:-1,l=Math.max(Math.min(t,s),0);for(;l!==a;)if(l+=o,e.charAt(l)===r)return l;return a}getPointOnPlane(){let e=this.virtualInput?.data;if(!(!this.virtualInput||!e)&&this.raycaster.ray.intersectsPlane(this.plane)){null===this.planeIntersection&&(this.planeIntersection=new ix);let t=this.raycaster.ray.intersectPlane(this.plane,this.planeIntersection);if(t){this.planeIntersection.copy(this.virtualInput.worldToLocal(t));let i="number"==typeof e.geometry.width?e.geometry.width:1,r="number"==typeof e.geometry.height?e.geometry.height:1;this.projected.set(t.x+.5*i,t.y-.5*r)}}}updatePlane(){let e=this.virtualInput?.data;this.virtualInput&&e&&(BE.getNormalMatrix(this.virtualInput.matrixWorld),BA.copy(B_).applyMatrix3(BE).normalize(),this.virtualInput.localToWorld(BM.set(0,0,e.geometry.depth)),this.plane.setFromNormalAndCoplanarPoint(BA,BM))}setInputSelection(e,t=e){this.htmlInput?.setSelectionRange(e,t),setTimeout(()=>{this.htmlInput?.focus()})}updateTextInputStyles(){var e;let t=this.virtualInput?.data;this.virtualInput&&t&&this.htmlInput&&(this.htmlInput.style.fontSize=t.geometry.fontSize+"px",this.htmlInput.style.letterSpacing=t.geometry.letterSpacing*t.geometry.fontSize+"px",this.htmlInput.style.lineHeight=t.geometry.fontSize*t.geometry.lineHeight+"px",this.htmlInput.style.width=t.geometry.width+"px",this.htmlInput.style.height=t.geometry.height+"px",this.htmlInput.style.textAlign=4===(e=t.geometry.horizontalAlign)?"justify":2===e?"right":3===e?"center":"left")}},BT=(e,t)=>{if("string"==typeof e){let i=t.data(e);if(i)return BT(i.value,t)}return yv.getDisplayedValue(e)};function BP(e,t){let i=e.text,r="";if("string"==typeof i){let e=t.variables.data(r);e&&(r=BT(e.value,t.variables))}else r=i.textValue.toString();return r}var BD=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this._textInputs=[],this.sceneHelpers=new nS,this.helper=new TB,this._onMouseDownFocusIn=e=>{if(u2.length>1)return;this.eventContext.updateRaycaster(e);let t=null;if(this.eventContext.raycaster){for(let e of this._textInputs)if(this.eventContext.raycaster.intersectObject(e,!0).length>0){t=e;break}}this.focusOnTextInput(t),this._onCaretUpdate(),this._onMouseUp(),this.textInputManager.doubleClickHandler.start(this.eventContext.domElement),this.textInputManager.doubleClickHandler._onMouseDown(e),this._onMouseDown(e)},this.onExit=()=>{let{virtualInput:e}=this.textInputManager;if(null===e)return;let t=this.textInputManager.htmlInput;this.helper.hide(),t?.setSelectionRange(t.value.length,t.value.length),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0);let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDown,!1),i.removeEventListener("pointerup",this._onMouseUp,!1),i.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.textInputManager.doubleClickHandler.reset(),i.addEventListener("pointerdown",this._onMouseDownFocusIn),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers()},this._onMouseDown=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseDown(),this.textInputManager.virtualInput&&this.eventContext.raycaster.intersectObject(this.textInputManager.virtualInput,!0).length>0&&this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1)},this._onMouseUp=()=>{this.textInputManager.handleMouseUp(),this.eventManager.controlsManager.orbitControls&&!this.eventManager.controlsManager.orbitControls.enabled&&(this.eventManager.controlsManager.orbitControls.enabled=!0)},this._onMouseMove=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseMove()},this._onTextEdit=e=>{let{htmlInput:t,virtualInput:i,helper:r}=this.textInputManager;if(!t||!i)return;let s=t.value;i.textGeometry.setText(s).then(()=>{this.eventContext.requestRender()});let a=i.data;
vendor: 3,814 bytes, line 7754
7754r.update();let o=a.geometry.text;"string"==typeof o&&this.eventContext.sharedAssets.updateVariable(o,{textValue:s}),this.textInputManager.updateTextInputStyles(),this._onCaretUpdate()},this._onCaretUpdate=e=>{this.textInputManager.handleCaretUpdate(e)},this._onKeyPress=e=>{"Escape"===e.key&&this.onExit()},this.textInputManager=new BC(this.sceneHelpers,e.raycaster,e.sharedAssets,e.requestRender,this.onExit)}connect(){let e=[];if(this.eventContext.scene.traverseEntity(t=>{t instanceof Pz&&e.push(t)}),this._textInputs=e,0===e.length)return;let{domElement:t}=this.eventContext;t.addEventListener("pointerdown",this._onMouseDownFocusIn),this.textInputManager.connect();let i=this.textInputManager.createInput();document.body.appendChild(i),i.style.display="none",i.addEventListener("keyup",this._onCaretUpdate),i.addEventListener("keydown",this._onCaretUpdate),i.addEventListener("beforeinput",this._onCaretUpdate),i.addEventListener("paste",this._onCaretUpdate),i.addEventListener("cut",this._onCaretUpdate),i.addEventListener("select",this._onCaretUpdate),i.addEventListener("selectstart",this._onCaretUpdate)}disconnect(){let e=this.textInputManager.htmlInput,{domElement:t}=this.eventContext;t.removeEventListener("pointerdown",this._onMouseDownFocusIn),e?.removeEventListener("keyup",this._onCaretUpdate),e?.removeEventListener("keydown",this._onCaretUpdate),e?.removeEventListener("beforeinput",this._onCaretUpdate),e?.removeEventListener("paste",this._onCaretUpdate),e?.removeEventListener("cut",this._onCaretUpdate),e?.removeEventListener("select",this._onCaretUpdate),e?.removeEventListener("selectstart",this._onCaretUpdate),this._textInputs.forEach(e=>{let t=BP(e.data.geometry,this.eventContext.sharedAssets.data);e.textGeometry.setText(t)}),t.removeEventListener("pointerdown",this._onMouseDown,!1),t.removeEventListener("pointerup",this._onMouseUp,!1),t.removeEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers(),this.textInputManager.disconnect()}focusOnTextInput(e){this.textInputManager.focus(e),this.textInputManager.onTextMaterialChanged();let t=this.textInputManager.htmlInput;if(!t||null===e)return;this.textInputManager.updateTextInputStyles(),this.eventContext.renderer.sceneHelpersOnTop=this.sceneHelpers,this.eventContext.renderer.pipeline.enableHelpers(),this.textInputManager.isDragging=!1;let i=BP(e.textGeometry.userData.parameters,this.eventContext.sharedAssets.data);t.value=i,t.setSelectionRange(0,0),this.textInputManager.helper.show(e),t.style.display="block",t.addEventListener("input",this._onTextEdit),this.textInputManager.updatePlane();let{domElement:r}=this.eventContext;r.removeEventListener("pointerdown",this._onMouseDownFocusIn),r.addEventListener("pointerdown",this._onMouseDown,!1),r.addEventListener("pointerup",this._onMouseUp,!1),r.addEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress)}},BI=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onVoice=({value:e,frequencies:t})=>{this.events.forEach(e=>{e.dispatch()})}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantListener"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BO(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("voice",this.onVoice))}disconnect(){this.openAIRealtime?.off("voice",this.onVoice)}},BO=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OR(t,t.actions,r,s,a,i)}dispatch(){this.dispatchActions(this.actions)}
vendor: 1,591 bytes, line 7754
7754dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},BR=class extends Ry{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onTriggerEvent=({description:e,direction:t})=>{let i=this.events.find(t=>t.data.description===e);i&&("backward"===t?i.dispatchReverse():i.dispatch())}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantTrigger"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BL(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("trigger_event",this.onTriggerEvent))}disconnect(){this.openAIRealtime?.off("trigger_event",this.onTriggerEvent)}},BL=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OR(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
7754e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispatchReverse(){let e=this.actions;e.Transition.forEach(e=>e.reverseFromCurrent()),e.Particles.forEach(e=>e.reverseFromCurrent()),e.Animation.forEach(e=>e.reverseFromCurrent()),e.SwitchCamera.forEach(e=>e.reverseFromCurrent()),e.Create.forEach(e=>e.dispatchStop())}},BB=class{constructor(e,t,i,r,s){this.publish=e,this.controlsManager=t,this.animationControls=i,this.eventContext=r,this.sharedVariables=s,this.isEnabled=!1,this.activateCount=0,this.needsMouse=!1,this.needsRaycast=!1,this.onTouchMovePreventScroll=e=>{let t=window.parent!==window,i=document.documentElement.scrollHeight>document.documentElement.clientHeight||document.documentElement.scrollWidth>document.documentElement.clientWidth;(e.touches.length>1||this.preventTouchScroll||!1===t&&!1===i)&&e.preventDefault()},this.onMouseWheelPreventScroll=e=>{this.preventScroll&&e.preventDefault()},this.onMouseMove=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:e.buttons>0}},this.onMouseDown=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!0}},this.onMouseUp=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!1}},this.getMousePosition=e=>{let{domRect:t}=this.eventContext,{pageX:i,pageY:r}=e.touches?.length>0?e.touches[0]:e;return{x:i-(t.left+window.scrollX),y:r-(t.top+window.scrollY)}},this.stopRaycast=e.stopRaycast,this.preventScroll=e.preventScroll,this.preventTouchScroll=e.preventTouchScroll,this.hideCursor=e.hideCursor,this.requestRender=r.requestRender}activate(e=!1){if(this.isEnabled)return;this.isEnabled=!0,this.initializeActionsDependentStates(),this.needsMouse&&(this.eventContext.domElement.addEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.addEventListener("pointerdown",this.onMouseDown)),this.handlers={Spline:new R_(this.eventContext),VariableChange:new Lw(this.eventContext,this.sharedVariables,this,this.needsMouse,this.needsRaycast),API:new Bx(this.eventContext,this),WEBHOOK:new Bw(this.eventContext,this),AIAssistantListener:new BI(this.eventContext,this),AIAssistantTrigger:new BR(this.eventContext,this),Conditional:new RI(this.eventContext,this),Start:new Lx(this.eventContext,this),Basic:new RM(this.eventContext,this,this.needsRaycast),MouseHover:new Lf(this.eventContext,this),Scroll:ne
7754w Lv(this.eventContext,this),Follow:new R4(this.eventContext,this),DragDrop:new RY(this.eventContext,this),LookAt:new Lh(this.eventContext),Resize:new By(this.eventContext,this),Textfields:new BD(this.eventContext,this)};let{page:t,domElement:i}=this.eventContext;this.hideCursor&&(i.style.cursor="none"),t.traverseEntity(e=>{e.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(e=>e.connect()),i.addEventListener("wheel",this.onMouseWheelPreventScroll),i.addEventListener("touchmove",this.onTouchMovePreventScroll),this.activateCount++,e||(this.eventContext.sharedAssets.openAIRealtime?.connect(),this.eventContext.sharedAssets.openAIRealtime?.start())}deactivate(e=!1){if(!this.isEnabled)return;this.isEnabled=!1,this.eventContext.domElement.removeEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.removeEventListener("pointerdown",this.onMouseDown),this.eventContext.domElement.removeEventListener("pointerup",this.onMouseUp),this.eventContext.sharedAssets.mouseProperty=null,this.eventContext.sharedAssets.raycastProperty=null;let{page:t,domElement:i}=this.eventContext;if(i.style.cursor="",Object.values(this.handlers).forEach(e=>e.disconnect()),this.controlsManager.gameControl?.disposeActions(),this.controlsManager.disconnectEvents(),t.traverseEntity(e=>{e.removeEventListener("requestRender",this.requestRender),e.destroyedInAction=!1}),i.removeEventListener("touchmove",this.onTouchMovePreventScroll),i.removeEventListener("wheel",this.onMouseWheelPreventScroll),this.animationControls.onExitPlayMode(),!e){let e=this.eventContext.sharedAssets.openAIRealtime;e?.disconnect(),e?.stop().then(()=>{e?.disconnect()})}}get isPaused(){return this.isEnabled}pause(){this.deactivate()}resume(){this.activate()}reset(){this.deactivate(!0),this.activate(!0),this.controlsManager.page.updateMatrixWorld(!0),this.controlsManager.rebuildBVH()}updateUseWindowEvents(e){let t=this.isEnabled;t&&this.deactivate(),this.eventContext.useWindowEvents=e,t&&this.activate()}initializeActionsDependentStates(){let e=this.eventContext.sharedAssets;e.resetDynamicVariablePlayState();let t=i=>{if("Conditional"===i.data.type&&(i.data.ifActions.forEach(t),i.data.elseActions.forEach(t)),"Conditional"===i.data.type||"SetVariable"===i.data.type)for(let e of"Conditional"===i.data.type?i.data.condition:i.data.expression)"id"in e&&Array.isArray(e.id)&&("mouse"===e.id[0]&&(this.needsMouse=!0),"raycast"===e.id[0]&&(this.needsRaycast=!0));"DynamicVariablePlay"===i.data.type&&""!==i.data.variableId&&("Play"===i.data.mode||"PlayPause"===i.data.mode||"Toggle"===i.data.mode)&&e.setDynamicVariablePlayState(i.data.variableId,"Stopped")};this.eventContext.page.traverseEntity(e=>{if(e.data?.events.length)for(let i of e.data.events)if("VariableChange"===i.data.type&&("mouseProperty"===i.data.variableId&&(this.needsMouse=!0),"raycastProperty"===i.data.variableId&&(this.needsRaycast=!0)),"Conditional"===i.data.type)for(let e of["inActions","outActions"])i.data[e].forEach(t);else if("DragDrop"===i.data.type)for(let e of["drag","drop"])i.data.dragDropActions[e].forEach(t);else if("GameControl"===i.data.type)for(let e of["idle","move","jump","run"])i.data.gameActions[e].forEach(t);else if("Resize"===i.data.type)for(let e of i.data.breakpoints)e.data.actions.forEach(t);else"LookAt"===i.data.type||"API"===i.data.type||i.data.actions.forEach(t)})}},Bz=class{constructor(e,t,i,r,s){this._aspect=1,this.enableResponsive=!1,this._renderer=e,this._camera=t,this._frameSize=new tK().copy(i),this._editorSize=new tK().copy(r),this._aspect=t.aspect,this._fov=s??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){this._renderer&&this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewport(){if(!this._renderer||!this._camera||"PerspectiveCamera"!==this._camera.cameraType)return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.y;this._aspect=e/t,t<=i&&(this._camera.zoom*=i/t),this._renderer.setViewport(0,0,e,t)}updateCamera(e=!0){if(this._camera){if("PerspectiveCamera"===this._camera.cameraType){let t=this._frameSize.y,i=this._editorSize.y,r=this._fov;if(e&&t>i)r*=t/i*(1-((t-1080)/1080*14+1)/100);this._camera.aspect=this._aspect,this._camera.fov=r,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y,this.enableResponsive)}}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t,this.enableResponsive),this._camera.updateProjectionMatrix())}},BF=class{get sharedAssets(){return this.shared}constructor(e,t={},i=!0){this.shared=new Mm(e.shared,t,!0,i),this.scene=new DE(e.scene,this.sharedAssets),this.shared.setEntityOpContext({scene:this.scene,shared:this.shared})}reset(e,t){this.scene.clearScene(),this.sharedAssets.reset(e.shared),this.scene.resetAfterClear(e.scene,this.sharedAssets)}resetPersonalCameraFromDocumentData(){for(let e of this.scene.children)e instanceof PO&&!e.uiScene&&e.personalCamera.updateState(e.data.camera,{scene:this.scene,shared:this.shared})}dispose(){this.scene.dispose(),this.shared.dispose()}gc(){this.shared.geometryCache.startGc(),this.shared.geometryCache2.startGc(),this.scene.traverseEntity(e=>{e instanceof MS&&e.markGeometryAsReachable(this.shared)}),this.shared.geometryCache.endGc(),this.shared.geometryCache2.endGc()}},BN=class{constructor({x:e=10,y:t=10}){this._startTime=0;let i=document.getElementById("spe-perfs");i?this.element=i:(this.element=document.createElement("div"),document.body.appendChild(this.element),this.element.style.position="absolute",this.element.style.zIndex="10000",this.element.style.fontFamily="monospace",this.element.style.background="black",this.element.style.color="white",this.element.style.padding="10px",this.element.style.opacity="0.5",this.element.style.fontSize="11px",this.element.setAttribute("id","spe-perfs")),this.element.style.left=`${e}px`,this.element.style.top=`${t}px`}dispose(){this.element.parentElement?.removeChild(this.element)}start(){this._startTime=performance.now()}end(){let e=performance.now()-this._startTime;this.element.innerHTML=e.toFixed(3)+" ms"}};function BU(e){return e instanceof MC?"SubdivObject":"NonParametricGeometry"===e.geometry.type?"NonParametric":"Mesh"}var Bk=tw(tI(),1),BV=new tK,Bj=class{constructor(e,{renderOnDemand:t,renderMode:i="auto"}={}){this._viewportMode=1,this._viewportWidth=window.innerWidth,this._viewportHe
7754ight=window.innerHeight,this._proxyObjectCache=new Map,this._variablesCache=new Map,this._isPaused=!1,this._renderRequested=!1,this._skipRender=!1,this.time=performance.now(),this.dt=0,this.currentTAAFrame=0,this.disposed=!1,this._requestRenderAutoMode=()=>{this._skipRender=!1},this.requestRender=()=>{this._renderRequested=!0},this.render=e=>{if(this.time=e,this._lastTime&&(this.dt=this.time-this._lastTime),this._lastTime=this.time,this._perfs?.start(),!this._renderer||!this._isPaused&&("manual"===this.renderMode&&!this._renderRequested||"auto"===this.renderMode&&this._skipRender)){this._perfs?.end();return}if(this._renderRequested=!1,this._skipRender=!0,this._controls&&(this._skipRender=this._controls.update(this.dt)),this._eventManager&&(this._eventManager.handlers?.Start.hasVideoAction||this._eventManager.handlers?.Basic.hasVideoAction||this._eventManager.handlers?.Conditional.hasVideoAction)&&(this._skipRender=!1),this._animationControls?.update(this.dt),this._skipRender?(this.currentTAAFrame++,this.currentTAAFrame<32?this._skipRender=!1:this.currentTAAFrame=0):this.currentTAAFrame=0,this._scene?.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.update(this.dt),this._skipRender=!1)}),this._scene&&this._scene.activeCamera!==this._camera&&(this._camera=this._scene.activeCamera),this._eventManager?.isEnabled&&((this._eventManager.handlers?.Follow).onAnimationFrameDamping(),(this._eventManager.handlers?.LookAt).onAnimationFrameDamping(),(this._eventManager.handlers?.DragDrop).onAnimationFrameDamping()),this._scene&&this._camera){if(this._scene.pathConstraints.applyConstraints(this._scene),this._renderer.sceneTransitionTimeRemaining>0){this._renderer.sceneTransitionTimeRemaining-=this.dt;let e=1-this._renderer.sceneTransitionTimeRemaining/this._renderer.sceneTransitionDuration;this._renderer.pipeline.sceneTransitionPass.uniforms.mixRatio.value=e,this._skipRender=!1}else this._renderer.pipeline.sceneTransitionFromTexture=null;this._renderer.renderSplineScene(this._scene,this._camera)}this.canvas.dispatchEvent(this._renderedEvent),this._perfs?.end()},this._resize=e=>{if(this._renderer){if(1===this._viewportMode&&this._frameView&&(this._frameView.frameSize=BV.set(this._viewportWidth,this._viewportHeight)),e){let e=this._viewportWidth,t=this._viewportHeight;this._renderer.setSize(e-1,t-1,!1),this._renderer.setSize(e,t,!1)}else this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1);if(this._camera=this._scene?.activeCamera,this._scene?.updateViewPlaneSize(this._frameView?.frameSize?.x??this._viewportWidth,this._frameView?.frameSize?.y??this._viewportHeight,this._frameView?.enableResponsive??!1),this._camera){let e=Object.values(this._data?.frames??{})[0].preset??"fullscreen";this._frameView?.setCamera(this._camera),this._frameView?.updateCamera("fullscreen"!==e),"PerspectiveCamera"===this._camera.cameraType&&(this._camera.aspect=this._viewportWidth/this._viewportHeight),this._camera.updateProjectionMatrix()}this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect()),this._requestRenderAutoMode()}},this._debouncedResize=uO(this._resize,10),this._onScroll=e=>{this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect())},this.canvas=e,this.renderMode=t?"auto":i,this._renderedEvent=new CustomEvent("rendered",{bubbles:!0}),Object.defineProperty(this._renderedEvent,"target",{writable:!1,value:this}),window.location.search.includes("perfs")&&(this._perfs=new BN({x:10,y:10})),e.addEventListener("pointerdown",u6,!0),e.addEventListener("pointerdown",u9,!0),e.addEventListener("pointermove",u9,!0),e.addEventListener("pointerup",u8,!0),e.addEventListener("pointercancel",u8,!0),e.addEventListener("pointerleave",u8,!0),window.addEventListener("keydown",pe,!0),window.addEventListener("keyup",pt,!0)}async load(e,t,i){let r;r="The Spline Runtime only accepts .splinecode files that are generated from Spline export panel.",e.endsWith(".spline")?console.warn(r+" The .spline files are only meant to be used by the Editor."):e.endsWith(".splinecode")||console.warn(r),this.disposed=!1;let s=await (await fetch(e,i)).arrayBuffer();await this.start(s,{variables:t})}async start(e,{interactive:t=!0,variables:r}={}){let s,a,o,l;if(this.disposed)return;let h=await Bf(e);this._data=h;let c=(s=[],h.scene.objects.traverse((e,t)=>
7754{"Mesh"===t.type&&"NonParametricGeometry"===t.geometry.type&&void 0!==t.geometry.data.draco&&s.push(t)}),s);h.version&&(0,Bk.default)(h.version,"1.9.35")>0&&console.warn("Your .splinecode file is more recent than the library. Please upgrade @splinetool/runtime to the latest version."),await Promise.all([c.length&&(th||(th=new Bd).setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload(),th.decoderPending),Ew(h)&&(_G||(_G=async function(){let e=i.e(944).then(i.bind(i,7944)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/boolean.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});_j(a)}())),(a=!1,h.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(a=!0)}),a&&function(){if(!w3)return w9||(w9=e());async function e(){let e=i.e(549).then(i.bind(i,6522)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/process.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});w$(a),w3=!0}}()),yu.physicsEnabled(h.scene.objects)&&(pS||(pS=async function(){let e=await i.e(733).then(i.bind(i,9699));await e.init(),pc(e)}())),Mq(h)&&function(){if(Aj=!0,!AH)return MX||(MX=e());async function e(){let e=await i.e(734).then(i.bind(i,8271));AU(e),AH=!0}}(),Df(h)&&function(){if(!DS)return DX||(DX=e());async function e(){let e=await i.e(534).then(i.bind(i,3534));Dx(e),DS=!0}}(),(o=!1,h.scene.objects.traverse((e,t)=>{if(void 0===t.events||!1===Array.isArray(t.events))return!0;let i=[];t.events.forEach(e=>{"dragDropActions"in e.data?(i.push(...e.data.dragDropActions.drag),i.push(...e.data.dragDropActions.drop)):"inActions"in e.data?(i.push(...e.data.inActions),i.push(...e.data.outActions)):"gameActions"in e.data?(i.push(...e.data.gameActions.idle),i.push(...e.data.gameActions.move),i.push(...e.data.gameActions.jump),i.push(...e.data.gameActions.run)):"breakpoints"in e.data?e.data.breakpoints.forEach(e=>{i.push(...e.data.actions)}):"actions"in e.data&&i.push(...e.data.actions),o=o||i.some(e=>"Audio"===e.data.type)})}),o&&function(){if(!Az)return AF||(AF=e());async function e(){await i.e(772).then(i.bind(i,3772)),AO(void 0!==window?window:global),Az=!0}}()),T4(h)&&function(){if(!T3)return Pe||(Pe=e());async function e(){let e=await i.e(509).then(i.bind(i,9509));TY(e.default??e),T3=!0}}(),(l=!1,h.scene.objects.forEach(e=>{"Page"===e.data.type&&!l&&e.data.publish.gameControlObject&&yu.traverseModuleInstances(h,e.id,(e,t,i)=>{for(let e of i)"GameControl"===e.data.type&&e.data.navmesh.enabled&&(l=!0)})}),l&&(ph||(ph=async function(){let e=i.e(813).then(i.bind(i,8813)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/navmesh.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});pl(a)}())))].filter(Boolean)),c.length&&await Bm(c),this._eventManager?.deactivate(),this._controls?.deactivate(),this._scene?.dispose();let d=new BF(h);if(d.resetPersonalCameraFromDocumentData(),this._scene=d.scene,this._sharedAssetsManager=d.sharedAssets,this._camera=this._scene.activeCamera,window.location.search.includes("merge-geometries")){let e=performance.now();!function(e,t){let i,r;let s=(i={},t.traverseEntity(t=>{if(!t.visible||!(t instanceof SD)||"Mesh"!==t.type||Array.isArray(t.material)||t.states&&Object.keys(t.states).length)return;let r=t.parent;for(;r;){if(r instanceof SD&&t.states&&Object.keys(t.states).length)return;r=r.parent}let s=t.material.uuid,a=e.shared.materials[s];if(a){if(!vk.isMergable(a))return}else{let i=e.scene.objects.get(t.uuid)?.data;if(i&&"material"in i&&"string"!=typeof i.material){if(!vk.isMergable(i.material))return;s=vk.getHash(i.material)}}i[s]||(i[s]={});let o=i[s][BU(t)];if(o){if(o.push(t),t.cloner)for(let e of t.cloner.children)o.push(e)}else if(i[s][BU(t)]=[t],t.cloner)for(let e of t.cloner.children)i[s][BU(t)].push(e)}),i),a=(r=0,Object.values(s).forEach(e=>{Object.values(e).forEach(e=>{let t=e.length;t>r&&(r=t)})}),r),o=Array(a),l=0,h=Array(a),c=0,d=Array(a),u=0,p=Array(a),f=0;for(let[e,i]of Object.entries(s))for(let r of Object.values(i)){if(c=0,u=0,r.forEach(e
7754=>{e instanceof SD&&(h[c++]=e.geometry.clone(),d[u++]=e)}),u<2)continue;for(let e=0;e<u;e++)d[e].updateWorldMatrix(!0,!1),h[e].applyMatrix4(d[e].matrixWorld),0>d[e].matrixWorld.determinant()&&function(e){let t;if(e.index)for(let i=0;i<e.index.array.length;i+=3)t=e.index.array[i],e.index.array[i]=e.index.array[i+2],e.index.array[i+2]=t}(h[e]);let i=gZ(h.slice(0,c),!1);if(i){let r;"SubdivObject"===e&&console.warn("Turning subdiv object into mesh"),(r=new rJ(i,d[0].material)).castShadow=d[0].castShadow,r.receiveShadow=d[0].receiveShadow,t.add(r);let a=e=>{for(let t of(f=0,e))t.children&&a(t.children),t instanceof SD&&(Array.isArray(t.material)||s[t.material.uuid]&&s[t.material.uuid][BU(t)]&&s[t.material.uuid][BU(t)].length>1||(p[f++]=t));for(let e=0;e<f;e++)t.attach(p[e])};for(let e=0;e<u;e++){let t=d[e];a(t.children),o[l++]=t}}}for(let e=0;e<l;e++)o[e].removeFromParent()}(h,d.scene),console.log("Merged geometries in ",performance.now()-e," ms")}Ew(h)&&this._scene.traverse(e=>{EM(e)&&e.recomputeBoolean()}),this._sharedAssetsManager.setRequestRender(()=>{this._requestRenderAutoMode(),this._scene?.traverse(e=>{e instanceof Ee&&e.pendingMediaLoad&&e.update()})}),this._scene?.traverse(e=>{"ParticleSystem"===e.type&&(e.wakeUp(),e.data.autoPlay?e.start():e.stop())});let u=Object.keys(h.shared.fonts).map(e=>this._sharedAssetsManager.getFont(e).loadingPromise);if(Promise.all(u).then(()=>{d.scene.markNeedsUpdateRendererDirty(),this._requestRenderAutoMode()}),Mq(h)&&function(e){if(yu.physicsEnabled(e.scene.objects))return!0;let t=!1;return e.scene.objects.traverse((e,i)=>{if(i.events){if(Array.isArray(i.events)){for(let e of i.events)if(!0!==e.data.disabled&&"GameControl"===e.data.type&&e.data.collisionEnabled){t=!0;break}}else for(let e of Object.values(i.events))if(!0!==e.disabled&&"GameControl"===e.type&&e.collisionEnabled){t=!0;break}}}),t}(h)&&await Promise.all(u),T4(h)){let e=[];this._scene.traverseEntity(t=>{(t instanceof PV||t instanceof PO)&&t.uiCanvas&&e.push(t.uiCanvas)}),await Promise.all(e.map(e=>e.promise))}if(this._scene.rewriteEventsBeforeGoToPlayMode(),Od(this._scene.activePage,this._sharedAssetsManager),!this._renderer&&(this._renderer=new TD({canvas:this.canvas,antialias:!1,alpha:!0,stencil:!1,depth:!1,powerPreference:"high-performance"}),this._renderer.hdTransmission=!0===h.scene.publish.hdTransmission,this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.pipeline.enableUIOverlay(),this._renderer.pipeline.addEventListener("smaaloaded",this._requestRenderAutoMode),h.shared.images.SplineWatermark)){let e=this._sharedAssetsManager.getImage("SplineWatermark");await e.loadPromise;let t=e.getTexture(1001);this._renderer.pipeline.setWatermark(t)}Df(h)&&this._scene.initializeSplatViewer(),void 0!==h.scene.blueNoiseTextureData&&this._renderer.pipeline.updateBlueNoiseTexture(h.scene.blueNoiseTextureData);let p=Object.values(h.frames)[0];if(this._frameView?this._frameView.setCamera(this._camera):("fullscreen"===p.preset?(this._viewportMode=1,this.canvas.style.display="block",this.canvas.parentElement&&(this._viewportWidth=this.canvas.parentElement.clientWidth||300,this.canvas.style.width="100%"),this.canvas.parentElement&&(this._viewportHeight=this.canvas.parentElement.clientHeight||150,this.canvas.style.height="100%")):(this._viewportMode=2,this._viewportWidth=p.size[0],this._viewportHeight=p.size[1],this.canvas.style.width=`${this._viewportWidth}px`,this.canvas.style.height=`${this._viewportHeight}px`),this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1),this._frameView=new Bz(this._renderer,this._camera,new tK(this._viewportWidth,this._viewportHeight),new tK(window.innerWidth,window.innerHeight)),this._frameView.enableResponsive=(p.allowResponsive??!1)&&"fullscreen"===p.preset),t){let e=new Rv(this._renderer,this.data.scene.publish,this._scene,()=>this._scene.activeCamera,this._sharedAssetsManager,this._requestRenderAutoMode,!0,p);this._scene.updateMatrixWorld(!0),this._controls=new Bn(e),this._animationControls=new Bh(this._scene,this._requestRenderAutoMode),this._eventManager=new BB(h.scene.publish,this._controls,this._animationControls,e,h.shared.variables),this._eventManager.activate(),this._controls.activate(this._eventManager)}this._resize(),this._scene.activePage.data.postprocessing.depthOfField.enabled&&Promise.all(this._sharedAssetsManager.getImageLoadPromises()).then(()=>{this._resize(!0)}),void 0!==r&&this.setVariables(r),0===this.dt&&(this.render(performance.now()),setTimeout(()=>{this._renderer?.setAnimationLoop(this.render)},0)),this._resizeObserverTimeout=setTimeout(()=>{!this._resizeObserver&&this.canvas.parentElement&&(this._resizeObserver=new ResizeObserver(()=>
7754{this._viewportWidth=this.canvas.clientWidth,this._viewportHeight=this.canvas.clientHeight,this._debouncedResize()}),this._resizeObserver.observe(this.canvas.parentElement))},300),document.addEventListener("scroll",this._onScroll)}setVariables(e){if(void 0!==this._data)for(let[t,i]of Object.entries(e))this.setVariable(t,i)}setVariable(e,t){let i=this._getVariableByName(e);if(!i||"dynamicVariableType"in i.data)void 0===i?console.warn(`No variable named ${e} was found in your Spline file. Make sure to create it from Spline editor.`):"dynamicVariableType"in i.data&&console.warn(`Dynamic variables like ${e} cannot be updated from code.`);else{let e=t;"number"==typeof i.data.value?e="number"==typeof t?t:"boolean"==typeof t?!0===t?1:0:parseFloat(t):"boolean"==typeof i.data.value?e="number"==typeof t?!!t:"boolean"==typeof t?t:"false"!==t.toLocaleLowerCase()&&!!t:"string"!=typeof i.data.value&&void 0!==i.data.value.textValue&&(e=t.toString());let r="string"==typeof e?{textValue:e}:e;this._sharedAssetsManager?.updateVariable(i.id,r),this.requestRender(),this._requestRenderAutoMode()}}getVariables(){let e={};
7754return this._data&&this._data.shared.variables.forEach(t=>{void 0===e[t.data.name]&&(e[t.data.name]=this._getVariableValue(this._sharedAssetsManager.getVariable(t.id)))}),e}getVariable(e){let t=this._getVariableByName(e);if(t){let e=this._sharedAssetsManager.getVariable(t.id);return this._getVariableValue(e)}}_getVariableValue(e){return"string"!=typeof e&&yv.isTextValue(e)?yv.getDisplayedValue(e):e}_getVariableByName(e){if(this._data){if(this._variablesCache.has(e))return this._variablesCache.get(e);let t=this._data.shared.variables.find(t=>t.data.name===e);return t&&this._variablesCache.set(e,t),t}}findObjectById(e){let t=this._scene?.getObjectByProperty("uuid",e);return this._createProxyObject(t)}findObjectByName(e){let t=this._scene?.getObjectByName(e);return this._createProxyObject(t)}getAllObjects(){let e=[];return this._scene?.traverseEntity(t=>{if(t.uuid!==mc&&!this._scene.isInvisibleObjects(t)&&!(t instanceof PO)){let i=this._createProxyObject(t);i&&e.push(i)}}),e}getSplineEvents(){return(this._eventManager?.handlers?.Spline).splineEvents}emitEvent(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEvent(e)}emitEventReverse(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEventReverse(e)}addEventListener(e,t){this.canvas.addEventListener(e,t)}removeEventListener(e,t){this.canvas.removeEventListener(e,t)}setZoom(e){this._controls?.orbitControls instanceof LQ&&this._controls?.orbitControls.setZoom(e)}get eventManager(){return this._eventManager}get controls(){return this._controls}setSize(e,t){this._viewportWidth=e,this._viewportHeight=t,this._viewportMode=2,this._resize()}setBackgroundColor(e){let{r:t,g:i,b:r,a:s}={r:0,g:0,b:0,a:1},a=new SU(t,i,r,s);try{a.setStyle(e)}catch{console.error("This is not a valid css color",e)}this._scene?.activePage.setBackgroundColor(a),this._requestRenderAutoMode()}dispose(){var e;this.disposed=!0,this._eventManager?.deactivate(),this._scene?.dispose(),this._sharedAssetsManager?.dispose(),this._proxyObjectCache.forEach(e=>{hM.unsubscribe(e)}),this._variablesCache.clear(),this._renderer?.setAnimationLoop(null),this._renderer?.dispose(),this._renderer=void 0,this._sharedAssetsManager?.dispose(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),void 0!==this._resizeObserverTimeout&&clearTimeout(this._resizeObserverTimeout),this.canvas.style.width="",this.canvas.style.height="",this.canvas.removeAttribute("width"),this.canvas.removeAttribute("height"),this._frameView&&(this._frameView=void 0),this._controls?.deactivate(),this.dt=0,(e=this.canvas).removeEventListener("pointerdown",u6,!0),e.removeEventListener("pointerdown",u9,!0),e.removeEventListener("pointermove",u9,!0),e.removeEventListener("pointerup",u8,!0),e.removeEventListener("pointercancel",u8,!0),e.removeEventListener("pointerleave",u8,!0),window.removeEventListener("keydown",pe,!0),window.removeEventListener("keyup",pt,!0),document.removeEventListener("scroll",this._onScroll)}get isStopped(){return this._isPaused}stop(){this._isPaused||(this._renderer?.setAnimationLoop(null),this._isPaused=!0,this._eventManager?.pause(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!1))}play(){this._isPaused&&(this._isPaused=!1,this._eventManager?.resume(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!0),this._renderer?.setAnimationLoop(this.render))}setGlobalEvents(e){this._eventManager?.updateUseWindowEvents(e)}get data(){return this._data}_createProxyObject(e){let t;if(null==e)return;if(this._proxyObjectCache.has(e.uuid))return this._proxyObjectCache.get(e.uuid);e.traverseAncestors(e=>{e instanceof PO&&(t=e.name)});let i=hM({name:e.name,uuid:e.uuid,visible:e.visible,intensity:e.intensity,position:e.position,rotation:e.rotation,scale:e.scale,type:e.data.type,page:t,parentUuid:e.parent instanceof PO||e instanceof DE?void 0:e.parent?.uuid,emitEvent(t){e.dispatchEvent({type:"userEvent",eventName:t})},emitEventReverse(t){e.dispatchEvent({type:"userEvent",eventName:t,reverse:!0})}},(t,i)=>{"object"!=typeof e[t]&&Object.getOwnPropertyDescriptor(e,t)?.writable&&(e[t]=i),this._requestRenderAutoMode(),e.updateMatrix()});return this._proxyObjectCache.set(e.uuid,i),i}setUIWasmUrl(e){_X.skiaWasmUrl=e}}}}]);
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.